Home | History | Annotate | Download | only in doc
      1 \documentclass{article}
      2 \usepackage[fancyhdr,pdf]{latex2man}
      3 
      4 \input{common.tex}
      5 
      6 \begin{document}
      7 
      8 \begin{Name}{3}{libunwind-setjmp}{David Mosberger-Tang}{Programming Library}{libunwind-based non-local gotos}libunwind-setjmp -- libunwind-based non-local gotos
      9 \end{Name}
     10 
     11 \section{Synopsis}
     12 
     13 \File{\#include $<$setjmp.h$>$}\\
     14 
     15 \noindent
     16 \Type{int} \Func{setjmp}(\Type{jmp\_buf}~\Var{env});\\
     17 \Type{void} \Func{longjmp}(\Type{jmp\_buf}~\Var{env}, \Type{int}~\Var{val});\\
     18 \Type{int} \Func{\_setjmp}(\Type{jmp\_buf}~\Var{env});\\
     19 \Type{void} \Func{\_longjmp}(\Type{jmp\_buf}~\Var{env}, \Type{int}~\Var{val});\\
     20 \Type{int} \Func{sigsetjmp}(\Type{sigjmp\_buf}~\Var{env}, \Type{int}~\Var{savemask});\\
     21 \Type{void} \Func{siglongjmp}(\Type{sigjmp\_buf}~\Var{env}, \Type{int}~\Var{val});\\
     22 
     23 \section{Description}
     24 
     25 The \Prog{unwind-setjmp} library offers a \Prog{libunwind}-based
     26 implementation of non-local gotos.  This implementation is intended to
     27 be a drop-in replacement for the normal, system-provided routines of
     28 the same name.  The main advantage of using the \Prog{unwind-setjmp}
     29 library is that setting up a non-local goto via one of the
     30 \Func{setjmp}() routines is very fast.  Typically, just 2 or 3 words
     31 need to be saved in the jump-buffer (plus one call to
     32 \Func{sigprocmask}(2), in the case of \Func{sigsetjmp}).  On the
     33 other hand, executing a non-local goto by calling one of the
     34 \Func{longjmp}() routines tends to be much slower than with the
     35 system-provided routines.  In fact, the time spent on a
     36 \Func{longjmp}() will be proportional to the number of call frames
     37 that exist between the points where \Func{setjmp}() and
     38 \Func{longjmp}() were called.  For this reason, the
     39 \Prog{unwind-setjmp} library is beneficial primarily in applications
     40 that frequently call \Func{setjmp}() but only rarely call
     41 \Func{longjmp}().
     42 
     43 \section{Caveats}
     44 
     45 \begin{itemize}
     46 \item The correct operation of this library depends on the presence of
     47   correct unwind information.  On newer platforms, this is rarely an
     48   issue.  On older platforms, care needs to be taken to
     49   ensure that each of the functions whose stack frames may have to be
     50   unwound during a \Func{longjmp}() have correct unwind information
     51   (on those platforms, there is usually a compiler-switch, such as
     52   \Opt{-funwind-tables}, to request the generation of unwind
     53   information).
     54 \item The contents of \Type{jmp\_buf} and \Type{sigjmp\_buf} as setup
     55   and used by these routines is completely different from the ones
     56   used by the system-provided routines.  Thus, a jump-buffer created
     57   by the libunwind-based \Func{setjmp}()/\Func{\_setjmp} may only be
     58   used in a call to the libunwind-based
     59   \Func{longjmp}()/\Func{\_longjmp}().  The analogous applies for
     60   \Type{sigjmp\_buf} with \Func{sigsetjmp}() and \Func{siglongjmp}().
     61 \end{itemize}
     62 
     63 \section{Files}
     64 
     65 \begin{Description}
     66 \item[\Opt{-l}\File{unwind-setjmp}] The library an application should
     67   be linked against to ensure it uses the libunwind-based non-local
     68   goto routines.
     69 \end{Description}
     70 
     71 
     72 \section{See Also}
     73 
     74 \SeeAlso{libunwind(3)},
     75 setjmp(3), longjmp(3),
     76 \_setjmp(3), \_longjmp(3),
     77 sigsetjmp(3), siglongjmp(3)
     78 
     79 \section{Author}
     80 
     81 \noindent
     82 David Mosberger-Tang\\
     83 Email: \Email{dmosberger (a] gmail.com}\\
     84 WWW: \URL{http://www.nongnu.org/libunwind/}.
     85 \LatexManEnd
     86 
     87 \end{document}
     88