Lots of man pages.
This commit is contained in:
parent
08df2a433e
commit
cfa37a7b11
152 changed files with 25407 additions and 148 deletions
98
man/man3/setjmp.3
Normal file
98
man/man3/setjmp.3
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
.TH SETJMP 3
|
||||
.SH NAME
|
||||
setjmp, longjmp, notejmp \- non-local goto
|
||||
.SH SYNOPSIS
|
||||
.B #include <u.h>
|
||||
.br
|
||||
.B #include <libc.h>
|
||||
.PP
|
||||
.ta \w'\fLvoid 'u
|
||||
.B
|
||||
int setjmp(jmp_buf env)
|
||||
.PP
|
||||
.B
|
||||
void longjmp(jmp_buf env, int val)
|
||||
.PP
|
||||
.B
|
||||
void notejmp(void *uregs, jmp_buf env, int val)
|
||||
.SH DESCRIPTION
|
||||
These routines are useful for dealing with errors
|
||||
and interrupts encountered in
|
||||
a low-level subroutine of a program.
|
||||
.PP
|
||||
.I Setjmp
|
||||
saves its stack environment in
|
||||
.I env
|
||||
for later use by
|
||||
.IR longjmp .
|
||||
It returns value 0.
|
||||
.PP
|
||||
.I Longjmp
|
||||
restores the environment saved by the last call of
|
||||
.IR setjmp .
|
||||
It then causes execution to
|
||||
continue as if the call of
|
||||
.I setjmp
|
||||
had just returned with value
|
||||
.IR val .
|
||||
The invoker of
|
||||
.I setjmp
|
||||
must not itself have returned in the interim.
|
||||
All accessible data have values as of the time
|
||||
.I longjmp
|
||||
was called.
|
||||
.PP
|
||||
.I Notejmp
|
||||
is the same as
|
||||
.I longjmp
|
||||
except that it is to be called from within a note handler (see
|
||||
.IR notify (2)).
|
||||
The
|
||||
.I uregs
|
||||
argument should be the first argument passed to the note handler.
|
||||
.PP
|
||||
.I Setjmp
|
||||
and
|
||||
.I longjmp
|
||||
can also be used to switch stacks.
|
||||
Defined in
|
||||
.B </$objtype/u.h>
|
||||
are several macros that can be used to build
|
||||
.B jmp_bufs
|
||||
by hand. The following code establishes a
|
||||
.B jmp_buf
|
||||
.i label
|
||||
that may be called by
|
||||
.I longjmp
|
||||
to begin execution in a function
|
||||
.BR f
|
||||
with 1024 bytes of stack:
|
||||
.IP
|
||||
.EX
|
||||
#include <u.h>
|
||||
#include <libc.h>
|
||||
|
||||
jmp_buf label;
|
||||
#define NSTACK 1024
|
||||
char stack[NSTACK];
|
||||
|
||||
void
|
||||
setlabel(void)
|
||||
{
|
||||
label[JMPBUFPC] = ((ulong)f+JMPBUFDPC);
|
||||
/* -2 leaves room for old pc and new pc in frame */
|
||||
label[JMPBUFSP =
|
||||
(ulong)(&stack[NSTACK-2*sizeof(ulong*)]);
|
||||
}
|
||||
.EE
|
||||
.SH SOURCE
|
||||
.B /sys/src/libc/$objtype/setjmp.s
|
||||
.br
|
||||
.B /sys/src/libc/$objtype/notejmp.c
|
||||
.SH SEE ALSO
|
||||
.IR notify (2)
|
||||
.SH BUGS
|
||||
.PP
|
||||
.I Notejmp
|
||||
cannot recover from an address trap or bus error (page fault) on the 680x0
|
||||
architectures.
|
||||
Loading…
Add table
Add a link
Reference in a new issue