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)
374 static assert(0, "unimplemented");
379 int __mask_was_saved;
380 sigset_t __saved_mask;
383 alias __jmp_buf_tag[1] jmp_buf;
385 alias _setjmp setjmp;
386 void longjmp(ref jmp_buf, int);
395 int sigsetjmp(sigjmp_buf, int);
396 void siglongjmp(sigjmp_buf, int);
399 version (CRuntime_Glibc)
401 alias jmp_buf sigjmp_buf;
403 int __sigsetjmp(sigjmp_buf, int);
404 alias __sigsetjmp sigsetjmp;
405 void siglongjmp(sigjmp_buf, int);
407 else version (FreeBSD)
409 // <machine/setjmp.h>
412 struct _sigjmp_buf { int[_JBLEN + 1] _ssjb; }
414 else version (X86_64)
416 struct _sigjmp_buf { c_long[_JBLEN] _sjb; }
424 enum _JB_SIGMASK = 3;
425 enum _JB_SIGFLAG = 5;
426 struct _sigjmp_buf { c_long[_JBLEN + 1] _sjb; }
428 else version (AArch64)
431 struct _sigjmp_buf { long[2][_JBLEN + 1] _jb; }
433 else version (PPC_Any)
435 struct _sigjmp_buf { long[_JBLEN + 1] _sjb; }
439 alias _sigjmp_buf[1] sigjmp_buf;
441 int sigsetjmp(ref sigjmp_buf);
442 void siglongjmp(ref sigjmp_buf, int);
444 else version (NetBSD)
446 // <machine/setjmp.h>
449 struct _sigjmp_buf { int[_JBLEN + 1] _ssjb; }
451 else version (X86_64)
453 struct _sigjmp_buf { c_long[_JBLEN] _sjb; }
457 alias _sigjmp_buf[_JBLEN + 1] sigjmp_buf;
459 int sigsetjmp(ref sigjmp_buf);
460 void siglongjmp(ref sigjmp_buf, int);
462 else version (OpenBSD)
464 alias sigjmp_buf = c_long[_JBLEN + 1];
466 int sigsetjmp(ref sigjmp_buf);
467 void siglongjmp(ref sigjmp_buf, int);
469 else version (DragonFlyBSD)
471 // <machine/setjmp.h>
474 struct _sigjmp_buf { c_long[_JBLEN] _sjb; }
478 alias _sigjmp_buf[1] sigjmp_buf;
480 int sigsetjmp(ref sigjmp_buf);
481 void siglongjmp(ref sigjmp_buf, int);
483 else version (CRuntime_Bionic)
485 alias c_long[_JBLEN + 1] sigjmp_buf;
487 int sigsetjmp(ref sigjmp_buf, int);
488 void siglongjmp(ref sigjmp_buf, int);
490 else version (CRuntime_UClibc)
492 alias jmp_buf sigjmp_buf;
494 int __sigsetjmp(ref sigjmp_buf, int);
495 alias __sigsetjmp sigsetjmp;
496 void siglongjmp(ref sigjmp_buf, int);
503 int _setjmp(jmp_buf);
504 void _longjmp(jmp_buf, int);
507 version (CRuntime_Glibc)
509 int _setjmp(ref jmp_buf);
510 void _longjmp(ref jmp_buf, int);
512 else version (FreeBSD)
514 int _setjmp(ref jmp_buf);
515 void _longjmp(ref jmp_buf, int);
517 else version (NetBSD)
519 int _setjmp(ref jmp_buf);
520 void _longjmp(ref jmp_buf, int);
522 else version (OpenBSD)
524 int _setjmp(ref jmp_buf);
525 void _longjmp(ref jmp_buf, int);
527 else version (DragonFlyBSD)
529 int _setjmp(ref jmp_buf);
530 void _longjmp(ref jmp_buf, int);
532 else version (CRuntime_Bionic)
534 int _setjmp(ref jmp_buf);
535 void _longjmp(ref jmp_buf, int);
537 else version (CRuntime_UClibc)
539 int _setjmp(ref jmp_buf);
540 void _longjmp(ref jmp_buf, int);