Home Man
Search
Today's Posts
Register

Linux & Unix Commands - Search Man Pages

Plan 9 - man page for setjmp (plan9 section 2)

SETJMP(2)			       System Calls Manual				SETJMP(2)

NAME
       setjmp, longjmp, notejmp - non-local goto

SYNOPSIS
       #include <u.h>
       #include <libc.h>

       int  setjmp(jmp_buf env)

       void longjmp(jmp_buf env, int val)

       void notejmp(void *uregs, jump_buf env, int val)

DESCRIPTION
       These  routines	are  useful  for dealing with errors and interrupts encountered in a low-
       level subroutine of a program.

       Setjmp saves its stack environment in env for later use by longjmp.  It returns value 0.

       Longjmp restores the environment saved by the last call of setjmp.  It then causes  execu-
       tion  to  continue as if the call of setjmp had just returned with value val.  The invoker
       of setjmp must not itself have returned in the interim.	All accessible data  have  values
       as of the time longjmp was called.

       Notejmp	is  the same as longjmp except that it is to be called from within a note handler
       (see notify(2)).  The uregs argument should be the first argument passed to the note  han-
       dler.

       Setjmp and longjmp can also be used to switch stacks.  Defined in </$objtype/u.h> are sev-
       eral macros that can be used to build jmp_bufs by hand.	The following code establishes	a
       jmp_buf	that  may be called by longjmp to begin execution in a function f with 1024 bytes
       of stack:

	      #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*)]);
	      }

SOURCE
       /sys/src/libc/$objtype/setjmp.s
       /sys/src/libc/$objtype/notejmp.c

SEE ALSO
       notify(2)

BUGS
       Notejmp cannot recover from an address trap or bus error (page fault) on the 680x0  archi-
       tectures.

											SETJMP(2)


All times are GMT -4. The time now is 06:17 PM.

Unix & Linux Forums Content Copyrightę1993-2018. All Rights Reserved.
UNIX.COM Login
Username:
Password:  
Show Password