plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

setjmp.3 (1609B)


      1 .TH SETJMP 3
      2 .SH NAME
      3 setjmp, longjmp, notejmp \- non-local goto
      4 .SH SYNOPSIS
      5 .B #include <u.h>
      6 .br
      7 .B #include <libc.h>
      8 .PP
      9 .ta \w'\fLvoid 'u
     10 .B
     11 int	setjmp(jmp_buf env)
     12 .PP
     13 .B
     14 void	longjmp(jmp_buf env, int val)
     15 .PP
     16 .B
     17 void	notejmp(void *uregs, jmp_buf env, int val)
     18 .SH DESCRIPTION
     19 These routines are useful for dealing with errors
     20 and interrupts encountered in
     21 a low-level subroutine of a program.
     22 .PP
     23 .I Setjmp
     24 saves its stack environment in
     25 .I env
     26 for later use by
     27 .IR longjmp .
     28 It returns value 0.
     29 .PP
     30 .I Longjmp
     31 restores the environment saved by the last call of
     32 .IR setjmp .
     33 It then causes execution to
     34 continue as if the call of
     35 .I setjmp
     36 had just returned with value
     37 .IR val .
     38 The invoker of
     39 .I setjmp
     40 must not itself have returned in the interim.
     41 All accessible data have values as of the time
     42 .I longjmp
     43 was called.
     44 .PP
     45 .I Notejmp
     46 is the same as
     47 .I longjmp
     48 except that it is to be called from within a note handler (see
     49 .MR notify (3) ).
     50 The
     51 .I uregs
     52 argument should be the first argument passed to the note handler.
     53 .PP
     54 .I Setjmp
     55 and
     56 .I longjmp
     57 can also be used to switch stacks.
     58 .SH SOURCE
     59 .B \*9/src/lib9/jmp.c
     60 .SH SEE ALSO
     61 .MR notify (3)
     62 .SH BUGS
     63 .PP
     64 .I Notejmp
     65 cannot recover from an address trap or bus error (page fault) on the 680x0
     66 architectures.
     67 .PP
     68 To avoid name conflicts with the underlying system,
     69 .IR setjmp ,
     70 .IR longjmp ,
     71 .IR notejmp ,
     72 and
     73 .I jmp_buf
     74 are preprocessor macros defined as
     75 .IR p9setjmp ,
     76 .IR p9longjmp ,
     77 .IR p9notejmp ,
     78 and
     79 .IR p9jmp_buf ;
     80 see
     81 .MR intro (3) .
     82 .PP
     83 .I P9setjmp
     84 is implemented as a preprocessor macro that calls
     85 .I sigsetjmp
     86 (see
     87 Unix's
     88 .IR setjmp (3)).