1989-05-16 13:13:53 +00:00
|
|
|
/*
|
1990-10-26 11:31:27 +00:00
|
|
|
* setjmp.h - save/restore calling environment
|
1989-05-16 13:13:53 +00:00
|
|
|
*
|
|
|
|
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
|
|
|
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
|
|
|
*/
|
|
|
|
/* $Header$ */
|
|
|
|
|
1989-12-18 14:00:32 +00:00
|
|
|
#if !defined(_SETJMP_H)
|
|
|
|
#define _SETJMP_H
|
1989-05-16 13:13:53 +00:00
|
|
|
|
1990-01-22 13:20:42 +00:00
|
|
|
/* In a jmp_buf, there is room for: 1 mask (long), 1 flag (int) and 3
|
|
|
|
* pointers (stack-pointer, local base and program-counter). This may be
|
|
|
|
* too big, but that doesn't matter. It could also be too small, when
|
1990-10-26 11:31:27 +00:00
|
|
|
* sigset_t is larger than a long. The fields is in the structure have no
|
|
|
|
* meaning, they just get the size right.
|
1990-01-22 13:20:42 +00:00
|
|
|
* The identifier __setjmp has a special meaning to the compiler.
|
|
|
|
*/
|
|
|
|
|
1990-10-26 11:31:27 +00:00
|
|
|
typedef struct {
|
|
|
|
long __mask;
|
|
|
|
int __flag;
|
|
|
|
void (*__pc)();
|
|
|
|
void *__sp;
|
|
|
|
void *__lb;
|
|
|
|
} jmp_buf[1];
|
1989-05-16 13:13:53 +00:00
|
|
|
|
1990-01-29 10:09:00 +00:00
|
|
|
int __setjmp(jmp_buf _env, int _savemask);
|
1990-01-22 13:20:42 +00:00
|
|
|
|
|
|
|
#define setjmp(env) __setjmp(env, 0)
|
1990-01-29 10:09:00 +00:00
|
|
|
void longjmp(jmp_buf _env, int _val);
|
1989-05-16 13:13:53 +00:00
|
|
|
|
1990-01-22 13:20:42 +00:00
|
|
|
#if defined(_POSIX_SOURCE)
|
|
|
|
typedef jmp_buf sigjmp_buf;
|
|
|
|
#define sigsetjmp(env, savemask) __setjmp(env, savemask)
|
1990-01-29 10:09:00 +00:00
|
|
|
int siglongjmp(sigjmp_buf _env, int _val);
|
1990-01-22 13:20:42 +00:00
|
|
|
#endif
|
|
|
|
|
1989-12-18 14:00:32 +00:00
|
|
|
#endif /* _SETJMP_H */
|