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 private import core.sys.posix.config;
18 private import core.sys.posix.signal; // for sigset_t
21 extern (C) nothrow @nogc:
23 version (RISCV32) version = RISCV_Any;
24 version (RISCV64) version = RISCV_Any;
32 int setjmp(ref jmp_buf);
33 void longjmp(ref jmp_buf, int);
36 version (CRuntime_Glibc)
50 alias long[8] __jmp_buf;
62 alias int[6] __jmp_buf;
66 alias int[3] __jmp_buf;
68 else version (SPARC64)
70 alias __jmp_buf = ulong[22];
72 else version (AArch64)
74 alias long[22] __jmp_buf;
78 alias int[64] __jmp_buf;
91 double[10] __fr12_fr21;
96 alias int[64 + (12*4)] __jmp_buf;
100 alias long[64] __jmp_buf;
102 else version (MIPS32)
129 else version (MIPS64)
145 else version (RISCV_Any)
147 struct __riscv_jmp_buf
154 alias __jmp_buf = __riscv_jmp_buf[1];
158 struct __s390_jmp_buf
163 alias __jmp_buf = __s390_jmp_buf[1];
165 else version (SystemZ)
167 struct __s390_jmp_buf
172 alias __jmp_buf = __s390_jmp_buf[1];
175 static assert(0, "unimplemented");
180 int __mask_was_saved;
181 sigset_t __saved_mask;
184 alias __jmp_buf_tag[1] jmp_buf;
186 alias _setjmp setjmp; // see XOpen block
187 void longjmp(ref jmp_buf, int);
189 else version (FreeBSD)
191 // <machine/setjmp.h>
195 struct _jmp_buf { int[_JBLEN + 1] _jb; }
197 else version (X86_64)
200 struct _jmp_buf { c_long[_JBLEN] _jb; }
205 struct _jmp_buf { c_long[_JBLEN + 1] _jb; }
207 else version (AArch64)
211 struct _jmp_buf { long[2][_JBLEN + 1] _jb; };
215 alias _jmp_buf[1] jmp_buf;
217 int setjmp(ref jmp_buf);
218 void longjmp(ref jmp_buf, int);
220 else version (NetBSD)
222 // <machine/setjmp.h>
226 struct _jmp_buf { int[_JBLEN + 1] _jb; }
228 else version (X86_64)
231 struct _jmp_buf { c_long[_JBLEN] _jb; }
235 alias _jmp_buf[_JBLEN] jmp_buf;
237 int setjmp(ref jmp_buf);
238 void longjmp(ref jmp_buf, int);
240 else version (OpenBSD)
242 // <machine/setjmp.h>
247 else version (X86_64)
259 else version (MIPS64)
267 else version (SPARC64)
274 alias jmp_buf = c_long[_JBLEN];
276 int setjmp(ref jmp_buf);
277 void longjmp(ref jmp_buf, int);
279 else version (DragonFlyBSD)
281 // <machine/setjmp.h>
285 struct _jmp_buf { c_long[_JBLEN] _jb; }
289 alias _jmp_buf[1] jmp_buf;
291 int setjmp(ref jmp_buf);
292 void longjmp(ref jmp_buf, int);
294 else version (CRuntime_Bionic)
296 // <machine/setjmp.h>
305 else version (AArch64)
309 else version (X86_64)
315 static assert(false, "Architecture not supported.");
318 alias c_long[_JBLEN] jmp_buf;
320 int setjmp(ref jmp_buf);
321 void longjmp(ref jmp_buf, int);
323 else version (CRuntime_UClibc)
327 alias long[8] __jmp_buf;
331 align(8) alias int[64] __jmp_buf;
333 else version (MIPS32)
361 static assert(0, "unimplemented");
366 int __mask_was_saved;
367 sigset_t __saved_mask;
370 alias __jmp_buf_tag[1] jmp_buf;
372 alias _setjmp setjmp;
373 void longjmp(ref jmp_buf, int);
382 int sigsetjmp(sigjmp_buf, int);
383 void siglongjmp(sigjmp_buf, int);
386 version (CRuntime_Glibc)
388 alias jmp_buf sigjmp_buf;
390 int __sigsetjmp(sigjmp_buf, int);
391 alias __sigsetjmp sigsetjmp;
392 void siglongjmp(sigjmp_buf, int);
394 else version (FreeBSD)
396 // <machine/setjmp.h>
399 struct _sigjmp_buf { int[_JBLEN + 1] _ssjb; }
401 else version (X86_64)
403 struct _sigjmp_buf { c_long[_JBLEN] _sjb; }
411 enum _JB_SIGMASK = 3;
412 enum _JB_SIGFLAG = 5;
413 struct _sigjmp_buf { c_long[_JBLEN + 1] _sjb; }
415 else version (AArch64)
418 struct _sigjmp_buf { long[2][_JBLEN + 1] _jb; };
422 alias _sigjmp_buf[1] sigjmp_buf;
424 int sigsetjmp(ref sigjmp_buf);
425 void siglongjmp(ref sigjmp_buf, int);
427 else version (NetBSD)
429 // <machine/setjmp.h>
432 struct _sigjmp_buf { int[_JBLEN + 1] _ssjb; }
434 else version (X86_64)
436 struct _sigjmp_buf { c_long[_JBLEN] _sjb; }
440 alias _sigjmp_buf[_JBLEN + 1] sigjmp_buf;
442 int sigsetjmp(ref sigjmp_buf);
443 void siglongjmp(ref sigjmp_buf, int);
445 else version (OpenBSD)
447 alias sigjmp_buf = c_long[_JBLEN + 1];
449 int sigsetjmp(ref sigjmp_buf);
450 void siglongjmp(ref sigjmp_buf, int);
452 else version (DragonFlyBSD)
454 // <machine/setjmp.h>
457 struct _sigjmp_buf { c_long[_JBLEN] _sjb; }
461 alias _sigjmp_buf[1] sigjmp_buf;
463 int sigsetjmp(ref sigjmp_buf);
464 void siglongjmp(ref sigjmp_buf, int);
466 else version (CRuntime_Bionic)
468 alias c_long[_JBLEN + 1] sigjmp_buf;
470 int sigsetjmp(ref sigjmp_buf, int);
471 void siglongjmp(ref sigjmp_buf, int);
473 else version (CRuntime_UClibc)
475 alias jmp_buf sigjmp_buf;
477 int __sigsetjmp(ref sigjmp_buf, int);
478 alias __sigsetjmp sigsetjmp;
479 void siglongjmp(ref sigjmp_buf, int);
486 int _setjmp(jmp_buf);
487 void _longjmp(jmp_buf, int);
490 version (CRuntime_Glibc)
492 int _setjmp(ref jmp_buf);
493 void _longjmp(ref jmp_buf, int);
495 else version (FreeBSD)
497 int _setjmp(ref jmp_buf);
498 void _longjmp(ref jmp_buf, int);
500 else version (NetBSD)
502 int _setjmp(ref jmp_buf);
503 void _longjmp(ref jmp_buf, int);
505 else version (OpenBSD)
507 int _setjmp(ref jmp_buf);
508 void _longjmp(ref jmp_buf, int);
510 else version (DragonFlyBSD)
512 int _setjmp(ref jmp_buf);
513 void _longjmp(ref jmp_buf, int);
515 else version (CRuntime_Bionic)
517 int _setjmp(ref jmp_buf);
518 void _longjmp(ref jmp_buf, int);
520 else version (CRuntime_UClibc)
522 int _setjmp(ref jmp_buf);
523 void _longjmp(ref jmp_buf, int);