fe14a904a8
but it compiles at least. :-) * Pulled the architecture specific part out of <posix/setjmp.h> into <posix/arch/<arch>/arch_setjmp.h>. * Moved setjmp_save_sigs.c from the x86 specific implementation into a "generic" sibling directory, since it is reusable (and actually used by the PPC implementation). * Added generic/longjmp_return.c containing a function __longjmp_return, which is invoked at the end of siglongjmp(), resetting the signal mask and validating the return value. It is used by the PPC implementation, and should also be used by the x86 implementation, but I'll leave that to someone who's motivated enough to also test it. :-) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15479 a95241bf-73f2-0310-859d-f6bbb57e9c96
43 lines
891 B
C
43 lines
891 B
C
/*
|
|
* Copyright 2004-2005, Haiku, Inc.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _SETJMP_H_
|
|
#define _SETJMP_H_
|
|
|
|
#include <signal.h>
|
|
|
|
// include architecture specific definitions
|
|
#ifdef __INTEL__
|
|
#include <arch/x86/arch_setjmp.h>
|
|
#elif __POWERPC__
|
|
#include <arch/ppc/arch_setjmp.h>
|
|
#endif
|
|
|
|
typedef struct __jmp_buf_tag {
|
|
__jmp_buf regs; /* saved registers, stack & program pointer */
|
|
int mask_was_saved;
|
|
sigset_t saved_mask;
|
|
} jmp_buf[1];
|
|
|
|
typedef jmp_buf sigjmp_buf;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern int _setjmp(jmp_buf jumpBuffer);
|
|
extern int setjmp(jmp_buf jumpBuffer);
|
|
extern int sigsetjmp(jmp_buf jumpBuffer, int saveMask);
|
|
|
|
extern void _longjmp(jmp_buf jumpBuffer, int value);
|
|
extern void longjmp(jmp_buf jumpBuffer, int value);
|
|
extern void siglongjmp(sigjmp_buf jumpBuffer, int value);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _SETJMP_H_ */
|