mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-12-27 21:43:42 +01:00
132 lines
2.8 KiB
Groff
132 lines
2.8 KiB
Groff
'\" 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.
|