2 * D header file for POSIX.
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
10 /* Copyright Sean Kelly 2005 - 2009.
11 * Distributed under the Boost Software License, Version 1.0.
12 * (See accompanying file LICENSE or copy at
13 * http://www.boost.org/LICENSE_1_0.txt)
15 module core.sys.posix.setjmp;
17 import core.sys.posix.config;
18 import core.sys.posix.signal; // for sigset_t
21 extern (C) nothrow @nogc:
24 version (RISCV32) version = RISCV_Any;
25 version (RISCV64) version = RISCV_Any;
26 version (PPC) version = PPC_Any;
27 version (PPC64) version = PPC_Any;
35 int setjmp(ref jmp_buf);
36 void longjmp(ref jmp_buf, int);
39 version (CRuntime_Glibc)
53 alias long[8] __jmp_buf;
65 alias int[6] __jmp_buf;
69 alias int[3] __jmp_buf;
71 else version (SPARC64)
73 alias __jmp_buf = ulong[22];
75 else version (AArch64)
77 alias long[22] __jmp_buf;
81 alias int[64] __jmp_buf;
94 double[10] __fr12_fr21;
99 alias int[64 + (12*4)] __jmp_buf;
103 alias long[64] __jmp_buf;
105 else version (MIPS32)
132 else version (MIPS64)
148 else version (RISCV_Any)
150 struct __riscv_jmp_buf
155 static if (__traits(getTargetInfo, "floatAbi") == "double")
158 alias __jmp_buf = __riscv_jmp_buf[1];
162 struct __s390_jmp_buf
167 alias __jmp_buf = __s390_jmp_buf[1];
169 else version (SystemZ)
171 struct __s390_jmp_buf
176 alias __jmp_buf = __s390_jmp_buf[1];
179 static assert(0, "unimplemented");
184 int __mask_was_saved;
185 sigset_t __saved_mask;
188 alias __jmp_buf_tag[1] jmp_buf;
190 alias _setjmp setjmp; // see XOpen block
191 void longjmp(ref jmp_buf, int);
193 else version (FreeBSD)
195 // <machine/setjmp.h>
199 struct _jmp_buf { int[_JBLEN + 1] _jb; }
201 else version (X86_64)
204 struct _jmp_buf { c_long[_JBLEN] _jb; }
209 struct _jmp_buf { c_long[_JBLEN + 1] _jb; }
211 else version (AArch64)
215 struct _jmp_buf { long[2][_JBLEN + 1] _jb; }
217 else version (PPC_Any)
220 struct _jmp_buf { long[_JBLEN + 1] _jb; }
224 alias _jmp_buf[1] jmp_buf;
226 int setjmp(ref jmp_buf);
227 void longjmp(ref jmp_buf, int);
229 else version (NetBSD)
231 // <machine/setjmp.h>
235 struct _jmp_buf { int[_JBLEN + 1] _jb; }
237 else version (X86_64)
240 struct _jmp_buf { c_long[_JBLEN] _jb; }
244 alias _jmp_buf[_JBLEN] jmp_buf;
246 int setjmp(ref jmp_buf);
247 void longjmp(ref jmp_buf, int);
249 else version (OpenBSD)
251 // <machine/setjmp.h>
256 else version (X86_64)
264 else version (AArch64)
272 else version (MIPS64)
280 else version (SPARC64)
287 alias jmp_buf = c_long[_JBLEN];
289 int setjmp(ref jmp_buf);
290 void longjmp(ref jmp_buf, int);
292 else version (DragonFlyBSD)
294 // <machine/setjmp.h>
298 struct _jmp_buf { c_long[_JBLEN] _jb; }
302 alias _jmp_buf[1] jmp_buf;
304 int setjmp(ref jmp_buf);
305 void longjmp(ref jmp_buf, int);
307 else version (CRuntime_Bionic)
309 // <machine/setjmp.h>
318 else version (AArch64)
322 else version (X86_64)
328 static assert(false, "Architecture not supported.");
331 alias c_long[_JBLEN] jmp_buf;
333 int setjmp(ref jmp_buf);
334 void longjmp(ref jmp_buf, int);
336 else version (CRuntime_UClibc)
340 alias long[8] __jmp_buf;
344 align(8) alias int[64] __jmp_buf;
346 else version (MIPS32)
373 else version (MIPS64)
390 static assert(0, "unimplemented");
395 int __mask_was_saved;
396 sigset_t __saved_mask;
399 alias __jmp_buf_tag[1] jmp_buf;
401 alias _setjmp setjmp;
402 void longjmp(ref jmp_buf, int);
411 int sigsetjmp(sigjmp_buf, int);
412 void siglongjmp(sigjmp_buf, int);
415 version (CRuntime_Glibc)
417 alias jmp_buf sigjmp_buf;
419 int __sigsetjmp(sigjmp_buf, int);
420 alias __sigsetjmp sigsetjmp;
421 void siglongjmp(sigjmp_buf, int);
423 else version (FreeBSD)
425 // <machine/setjmp.h>
428 struct _sigjmp_buf { int[_JBLEN + 1] _ssjb; }
430 else version (X86_64)
432 struct _sigjmp_buf { c_long[_JBLEN] _sjb; }
440 enum _JB_SIGMASK = 3;
441 enum _JB_SIGFLAG = 5;
442 struct _sigjmp_buf { c_long[_JBLEN + 1] _sjb; }
444 else version (AArch64)
447 struct _sigjmp_buf { long[2][_JBLEN + 1] _jb; }
449 else version (PPC_Any)
451 struct _sigjmp_buf { long[_JBLEN + 1] _sjb; }
455 alias _sigjmp_buf[1] sigjmp_buf;
457 int sigsetjmp(ref sigjmp_buf);
458 void siglongjmp(ref sigjmp_buf, int);
460 else version (NetBSD)
462 // <machine/setjmp.h>
465 struct _sigjmp_buf { int[_JBLEN + 1] _ssjb; }
467 else version (X86_64)
469 struct _sigjmp_buf { c_long[_JBLEN] _sjb; }
473 alias _sigjmp_buf[_JBLEN + 1] sigjmp_buf;
475 int sigsetjmp(ref sigjmp_buf);
476 void siglongjmp(ref sigjmp_buf, int);
478 else version (OpenBSD)
480 alias sigjmp_buf = c_long[_JBLEN + 1];
482 int sigsetjmp(ref sigjmp_buf);
483 void siglongjmp(ref sigjmp_buf, int);
485 else version (DragonFlyBSD)
487 // <machine/setjmp.h>
490 struct _sigjmp_buf { c_long[_JBLEN] _sjb; }
494 alias _sigjmp_buf[1] sigjmp_buf;
496 int sigsetjmp(ref sigjmp_buf);
497 void siglongjmp(ref sigjmp_buf, int);
499 else version (CRuntime_Bionic)
501 alias c_long[_JBLEN + 1] sigjmp_buf;
503 int sigsetjmp(ref sigjmp_buf, int);
504 void siglongjmp(ref sigjmp_buf, int);
506 else version (CRuntime_UClibc)
508 alias jmp_buf sigjmp_buf;
510 int __sigsetjmp(ref sigjmp_buf, int);
511 alias __sigsetjmp sigsetjmp;
512 void siglongjmp(ref sigjmp_buf, int);
519 int _setjmp(jmp_buf);
520 void _longjmp(jmp_buf, int);
523 version (CRuntime_Glibc)
525 int _setjmp(ref jmp_buf);
526 void _longjmp(ref jmp_buf, int);
528 else version (FreeBSD)
530 int _setjmp(ref jmp_buf);
531 void _longjmp(ref jmp_buf, int);
533 else version (NetBSD)
535 int _setjmp(ref jmp_buf);
536 void _longjmp(ref jmp_buf, int);
538 else version (OpenBSD)
540 int _setjmp(ref jmp_buf);
541 void _longjmp(ref jmp_buf, int);
543 else version (DragonFlyBSD)
545 int _setjmp(ref jmp_buf);
546 void _longjmp(ref jmp_buf, int);
548 else version (CRuntime_Bionic)
550 int _setjmp(ref jmp_buf);
551 void _longjmp(ref jmp_buf, int);
553 else version (CRuntime_UClibc)
555 int _setjmp(ref jmp_buf);
556 void _longjmp(ref jmp_buf, int);