Blame


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