---
name: "libunwind-setjmp"
section: "3"
platform: "linux"
package: "libunwind"
version: "1.8.3-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libunwind-setjmp"
---

# libunwind-setjmp(3)

## NAME

libunwind-setjmp -- libunwind-based non-local gotos

## SYNOPSIS

\#include \<setjmp.h\>\

int setjmp(jmp\_buf env);\
 void longjmp(jmp\_buf env, int val);\
 int \_setjmp(jmp\_buf env);\
 void \_longjmp(jmp\_buf env, int val);\
 int sigsetjmp(sigjmp\_buf env, int savemask);\
 void siglongjmp(sigjmp\_buf env, int val);\

## DESCRIPTION

The unwind-setjmp library offers a libunwind-based implementation of non-local gotos. This implementation is intended to  be a drop-in replacement for the normal, system-provided routines of  the same name. The main advantage of using the unwind-setjmp library is that setting up a non-local goto via one of the  setjmp() routines is very fast. Typically, just 2 or 3 words  need to be saved in the jump-buffer (plus one call to  [sigprocmask(2)](/sigprocmask/2.md), in the case of sigsetjmp). On the  other hand, executing a non-local goto by calling one of the  longjmp() routines tends to be much slower than with the  system-provided routines. In fact, the time spent on a  longjmp() will be proportional to the number of call frames  that exist between the points where setjmp() and  longjmp() were called. For this reason, the  unwind-setjmp library is beneficial primarily in applications  that frequently call setjmp() but only rarely call  longjmp().

## CAVEATS

- **\***

  The correct operation of this library depends on the presence of  correct unwind information. On newer platforms, this is rarely an  issue. On older platforms, care needs to be taken to  ensure that each of the functions whose stack frames may have to be  unwound during a longjmp() have correct unwind information  (on those platforms, there is usually a compiler-switch, such as  **-funwind-tables**, to request the generation of unwind  information).

- **\***

  The contents of jmp\_buf and sigjmp\_buf as setup and used by these routines is completely different from the ones  used by the system-provided routines. Thus, a jump-buffer created  by the libunwind-based setjmp()/\_setjmp may only be  used in a call to the libunwind-based  longjmp()/\_longjmp(). The analogous applies for  sigjmp\_buf with sigsetjmp() and siglongjmp().

## FILES

- **-l**unwind-setjmp

   The library an application should  be linked against to ensure it uses the libunwind-based non-local  goto routines.

## SEE ALSO

libunwind(3libunwind), [setjmp(3)](/setjmp/3.md), [longjmp(3)](/longjmp/3.md), [\_setjmp(3)](/_setjmp/3.md), [\_longjmp(3)](/_longjmp/3.md), [sigsetjmp(3)](/sigsetjmp/3.md), [siglongjmp(3)](/siglongjmp/3.md)

## AUTHOR

David Mosberger-Tang\
 Email: **dmosberger@gmail.com**\
 WWW: **http://www.nongnu.org/libunwind/**.
