123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- '\" t
- .\" Manual page created with latex2man on Thu Aug 16 09:44:44 MDT 2007
- .\" NOTE: This file is generated, DO NOT EDIT.
- .de Vb
- .ft CW
- .nf
- ..
- .de Ve
- .ft R
- .fi
- ..
- .TH "LIBUNWIND\-SETJMP" "3" "16 August 2007" "Programming Library " "Programming Library "
- .SH NAME
- libunwind\-setjmp
- \-\- libunwind\-based non\-local gotos
- .PP
- .SH SYNOPSIS
- .PP
- #include <setjmp.h>
- .br
- .PP
- int
- setjmp(jmp_buf env);
- .br
- void
- longjmp(jmp_buf env,
- int val);
- .br
- int
- _setjmp(jmp_buf env);
- .br
- void
- _longjmp(jmp_buf env,
- int val);
- .br
- int
- setjmp(sigjmp_buf env,
- int savemask);
- .br
- void
- siglongjmp(sigjmp_buf env,
- int val);
- .br
- .PP
- .SH DESCRIPTION
- .PP
- 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),
- 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().
- .PP
- .SH CAVEATS
- .PP
- .TP
- .B *
- 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
- \fB\-funwind\-tables\fP,
- to request the generation of unwind
- information).
- .TP
- .B *
- 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().
- .PP
- .SH FILES
- .PP
- .TP
- \fB\-l\fPunwind\-setjmp
- The library an application should
- be linked against to ensure it uses the libunwind\-based non\-local
- goto routines.
- .PP
- .SH SEE ALSO
- .PP
- libunwind(3),
- setjmp(3), longjmp(3),
- _setjmp(3), _longjmp(3),
- sigsetjmp(3), siglongjmp(3)
- .PP
- .SH AUTHOR
- .PP
- David Mosberger\-Tang
- .br
- Email: \fBdmosberger@gmail.com\fP
- .br
- WWW: \fBhttp://www.nongnu.org/libunwind/\fP\&.
- .\" NOTE: This file is generated, DO NOT EDIT.
|