6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
20 * This product includes software developed by Intel Corporation and
23 * 4. Neither the name of Intel Corporation or its contributors may be
24 * used to endorse or promote products derived from this software
25 * without specific prior written permission.
27 * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
28 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30 * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
31 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
37 * THE POSSIBILITY OF SUCH DAMAGE.
42 #ifndef _MACHINE_SETJMP_H_
43 #define _MACHINE_SETJMP_H_
45 #include <sys/cdefs.h>
48 #define JMPBUF_ADDR_OF(buf, item) ((unsigned long)((char *)buf + item))
89 #define J_SIGMASK 0x1d8
90 #define J_SIGSET 0x1e0
91 #endif /* __BSD_VISIBLE */
93 #define _JBLEN 0x20 /* Size in long doubles */
96 * XXX this check is wrong, since LOCORE is in the application namespace and
97 * applications shouldn't be able to affect the implementation. One workaround
98 * would be to only check LOCORE if _KERNEL is defined, but unfortunately
99 * LOCORE is used outside of the kernel. The best solution would be to rename
100 * LOCORE to _LOCORE, so that it can be used in userland to safely affect the
106 * jmp_buf and sigjmp_buf are encapsulated in different structs to force
107 * compile-time diagnostics for mismatches. The structs are the same
108 * internally to avoid some run-time errors for mismatches.
110 #if __BSD_VISIBLE || __POSIX_VISIBLE || __XSI_VISIBLE
112 long double buf[_JBLEN];
114 typedef struct _sigjmp_buf sigjmp_buf[1];
118 long double buf[_JBLEN];
120 typedef struct _jmp_buf jmp_buf[1];
124 CTASSERT(sizeof(struct _jmp_buf) == 512);
130 #endif /* !_MACHINE_SETJMP_H_ */