2 * D header file for POSIX.
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
9 * Source: $(DRUNTIMESRC core/sys/posix/_signal.d)
12 module core
.sys
.posix
.signal
;
14 import core
.sys
.posix
.config
;
15 public import core
.stdc
.signal
;
16 public import core
.sys
.posix
.sys
.types
; // for pid_t
17 //public import core.sys.posix.time; // for timespec, now defined here
25 else version (WatchOS
)
28 version (ARM
) version = ARM_Any
;
29 version (AArch64
) version = ARM_Any
;
30 version (HPPA
) version = HPPA_Any
;
31 version (MIPS32
) version = MIPS_Any
;
32 version (MIPS64
) version = MIPS_Any
;
33 version (PPC
) version = PPC_Any
;
34 version (PPC64
) version = PPC_Any
;
35 version (RISCV32
) version = RISCV_Any
;
36 version (RISCV64
) version = RISCV_Any
;
37 version (S390
) version = IBMZ_Any
;
38 version (SPARC
) version = SPARC_Any
;
39 version (SPARC64
) version = SPARC_Any
;
40 version (SystemZ
) version = IBMZ_Any
;
41 version (X86
) version = X86_Any
;
42 version (X86_64
) version = X86_Any
;
46 //nothrow: // this causes http://issues.dlang.org/show_bug.cgi?id=12738 (which has been fixed)
53 SIG_DFL (defined in core.stdc.signal)
54 SIG_ERR (defined in core.stdc.signal)
55 SIG_IGN (defined in core.stdc.signal)
57 sig_atomic_t (defined in core.stdc.signal)
72 SIGABRT (defined in core.stdc.signal)
77 SIGFPE (defined in core.stdc.signal)
79 SIGILL (defined in core.stdc.signal)
80 SIGINT (defined in core.stdc.signal)
84 SIGSEGV (defined in core.stdc.signal)
86 SIGTERM (defined in core.stdc.signal)
98 sigactfn_t sa_sigaction;
101 sigfn_t signal(int sig, sigfn_t func); (defined in core.stdc.signal)
102 int raise(int sig); (defined in core.stdc.signal)
105 //SIG_DFL (defined in core.stdc.signal)
106 //SIG_ERR (defined in core.stdc.signal)
107 //SIG_IGN (defined in core.stdc.signal)
109 //sig_atomic_t (defined in core.stdc.signal)
111 private alias void function(int) sigfn_t
;
112 private alias void function(int, siginfo_t
*, void*) sigactfn_t
;
117 private alias void function(int) sigfn_t2
;
118 private alias void function(int, siginfo_t
*, void*) sigactfn_t2
;
136 import core
.sys
.posix
.unistd
;
138 @property int SIGRTMIN() nothrow @nogc {
139 __gshared
static int sig
= -1;
141 sig
= cast(int)sysconf(_SC_SIGRT_MIN
);
146 @property int SIGRTMAX() nothrow @nogc {
147 __gshared
static int sig
= -1;
149 sig
= cast(int)sysconf(_SC_SIGRT_MAX
);
154 else version (FreeBSD
) {
155 // Note: it appears that FreeBSD (prior to 7) and OSX do not support realtime signals
156 // https://github.com/freebsd/freebsd/blob/e79c62ff68fc74d88cb6f479859f6fae9baa5101/sys/sys/signal.h#L117
160 else version (DragonFlyBSD
) {
164 else version (NetBSD
)
171 // Note: CRuntime_Bionic switched to calling these functions
172 // since Lollipop, and Glibc, UClib and Musl all implement them
173 // the same way since it's part of LSB.
174 private extern (C
) nothrow @nogc
176 int __libc_current_sigrtmin();
177 int __libc_current_sigrtmax();
180 @property int SIGRTMIN() nothrow @nogc {
181 __gshared
static int sig
= -1;
183 sig
= __libc_current_sigrtmin();
188 @property int SIGRTMAX() nothrow @nogc {
189 __gshared
static int sig
= -1;
191 sig
= __libc_current_sigrtmax();
201 //SIGABRT (defined in core.stdc.signal)
206 //SIGFPE (defined in core.stdc.signal)
208 //SIGILL (defined in core.stdc.signal)
209 //SIGINT (defined in core.stdc.signal)
213 //SIGSEGV (defined in core.stdc.signal)
215 //SIGTERM (defined in core.stdc.signal)
223 else version (HPPA_Any
)
225 //SIGABRT (defined in core.stdc.signal)
230 //SIGFPE (defined in core.stdc.signal)
232 //SIGILL (defined in core.stdc.signal)
233 //SIGINT (defined in core.stdc.signal)
237 //SIGSEGV (defined in core.stdc.signal)
239 //SIGTERM (defined in core.stdc.signal)
247 else version (MIPS_Any
)
249 //SIGABRT (defined in core.stdc.signal)
254 //SIGFPE (defined in core.stdc.signal)
256 //SIGILL (defined in core.stdc.signal)
257 //SIGINT (defined in core.stdc.signal)
261 //SIGSEGV (defined in core.stdc.signal)
263 //SIGTERM (defined in core.stdc.signal)
271 else version (PPC_Any
)
273 //SIGABRT (defined in core.stdc.signal)
278 //SIGFPE (defined in core.stdc.signal)
280 //SIGILL (defined in core.stdc.signal)
281 //SIGINT (defined in core.stdc.signal)
285 //SIGSEGV (defined in core.stdc.signal)
287 //SIGTERM (defined in core.stdc.signal)
295 else version (ARM_Any
)
297 //SIGABRT (defined in core.stdc.signal)
302 //SIGFPE (defined in core.stdc.signal)
304 //SIGILL (defined in core.stdc.signal)
305 //SIGINT (defined in core.stdc.signal)
309 //SIGSEGV (defined in core.stdc.signal)
311 //SIGTERM (defined in core.stdc.signal)
319 else version (RISCV_Any
)
321 //SIGABRT (defined in core.stdc.signal)
326 //SIGFPE (defined in core.stdc.signal)
328 //SIGILL (defined in core.stdc.signal)
329 //SIGINT (defined in core.stdc.signal)
333 //SIGSEGV (defined in core.stdc.signal)
335 //SIGTERM (defined in core.stdc.signal)
343 else version (SPARC_Any
)
345 //SIGABRT (defined in core.stdc.signal)
350 //SIGFPE (defined in core.stdc.signal)
352 //SIGILL (defined in core.stdc.signal)
353 //SIGINT (defined in core.stdc.signal)
357 //SIGSEGV (defined in core.stdc.signal)
359 //SIGTERM (defined in core.stdc.signal)
367 else version (IBMZ_Any
)
369 //SIGABRT (defined in core.stdc.signal)
374 //SIGFPE (defined in core.stdc.signal)
376 //SIGILL (defined in core.stdc.signal)
377 //SIGINT (defined in core.stdc.signal)
381 //SIGSEGV (defined in core.stdc.signal)
383 //SIGTERM (defined in core.stdc.signal)
392 static assert(0, "unimplemented");
394 else version (Darwin
)
396 //SIGABRT (defined in core.stdc.signal)
401 //SIGFPE (defined in core.stdc.signal)
403 //SIGILL (defined in core.stdc.signal)
404 //SIGINT (defined in core.stdc.signal)
408 //SIGSEGV (defined in core.stdc.signal)
410 //SIGTERM (defined in core.stdc.signal)
418 else version (FreeBSD
)
420 //SIGABRT (defined in core.stdc.signal)
425 //SIGFPE (defined in core.stdc.signal)
427 //SIGILL (defined in core.stdc.signal)
428 //SIGINT (defined in core.stdc.signal)
432 //SIGSEGV (defined in core.stdc.signal)
434 //SIGTERM (defined in core.stdc.signal)
442 else version (NetBSD
)
444 //SIGABRT (defined in core.stdc.signal)
449 //SIGFPE (defined in core.stdc.signal)
451 //SIGILL (defined in core.stdc.signal)
452 //SIGINT (defined in core.stdc.signal)
456 //SIGSEGV (defined in core.stdc.signal)
458 //SIGTERM (defined in core.stdc.signal)
466 else version (OpenBSD
)
468 //SIGABRT (defined in core.stdc.signal)
473 //SIGFPE (defined in core.stdc.signal)
475 //SIGILL (defined in core.stdc.signal)
476 //SIGINT (defined in core.stdc.signal)
480 //SIGSEGV (defined in core.stdc.signal)
482 //SIGTERM (defined in core.stdc.signal)
490 else version (DragonFlyBSD
)
492 //SIGABRT (defined in core.stdc.signal)
497 //SIGFPE (defined in core.stdc.signal)
499 //SIGILL (defined in core.stdc.signal)
500 //SIGINT (defined in core.stdc.signal)
504 //SIGSEGV (defined in core.stdc.signal)
506 //SIGTERM (defined in core.stdc.signal)
514 else version (Solaris
)
516 //SIGABRT (defined in core.stdc.signal)
521 //SIGFPE (defined in core.stdc.signal)
523 //SIGILL (defined in core.stdc.signal)
524 //SIGINT (defined in core.stdc.signal)
528 //SIGSEGV (defined in core.stdc.signal)
530 //SIGTERM (defined in core.stdc.signal)
540 static assert(false, "Unsupported platform");
543 version (CRuntime_Glibc
)
549 static if ( true /* __USE_POSIX199309 */ )
554 sigactfn_t sa_sigaction
;
561 int __glibc_reserved0
;
564 void function() sa_restorer
;
573 static if ( true /* __USE_POSIX199309 */ )
578 sigactfn_t sa_sigaction
;
588 void function() sa_restorer
;
592 else version (CRuntime_Musl
)
596 static if ( true /* __USE_POSIX199309 */ )
601 sigactfn_t sa_sigaction
;
611 void function() sa_restorer
;
614 else version (FreeBSD
)
621 sigactfn_t sa_sigaction
;
627 else version (NetBSD
)
634 sigactfn_t sa_sigaction
;
640 else version (OpenBSD
)
646 sigfn_t __sa_handler
;
647 alias sa_handler
= __sa_handler
;
648 sigactfn_t __sa_sigaction
;
649 alias sa_sigaction
= __sa_sigaction
;
655 else version (DragonFlyBSD
)
662 sigactfn_t sa_sigaction
;
668 else version (Solaris
)
677 sigactfn_t sa_sigaction
;
686 else version (CRuntime_UClibc
)
688 version (ARM
) version = sigaction_common
;
689 else version (X86_64
) version = sigaction_common
;
691 version (sigaction_common
)
695 static if ( true /* __USE_POSIX199309 */ )
700 sigactfn_t sa_sigaction
;
708 void function() sa_restorer
;
712 else version (MIPS32
)
717 static if ( true /* __USE_POSIX199309 */ )
722 sigactfn_t sa_sigaction
;
730 void function() sa_restorer
;
735 static assert(false, "Architecture not supported.");
738 else version (CRuntime_Bionic
)
748 sigactfn_t sa_sigaction
;
752 void function() sa_restorer
;
762 sigactfn_t sa_sigaction
;
767 void function() sa_restorer
;
771 else version (Darwin
)
775 static if ( true /* __USE_POSIX199309 */ )
780 sigactfn_t sa_sigaction
;
793 static assert(false, "Unsupported platform");
803 pid_t (defined in core.sys.types)
805 SIGABRT (defined in core.stdc.signal)
806 SIGFPE (defined in core.stdc.signal)
807 SIGILL (defined in core.stdc.signal)
808 SIGINT (defined in core.stdc.signal)
809 SIGSEGV (defined in core.stdc.signal)
810 SIGTERM (defined in core.stdc.signal)
812 SA_NOCLDSTOP (CX|XSI)
843 int kill(pid_t, int);
844 int sigaction(int, const scope sigaction_t*, sigaction_t*);
845 int sigaddset(sigset_t*, int);
846 int sigdelset(sigset_t*, int);
847 int sigemptyset(sigset_t*);
848 int sigfillset(sigset_t*);
849 int sigismember(const scope sigset_t*, int);
850 int sigpending(sigset_t*);
851 int sigprocmask(int, const scope sigset_t*, sigset_t*);
852 int sigsuspend(const scope sigset_t*);
853 int sigwait(const scope sigset_t*, int*);
859 version (CRuntime_Glibc
)
861 enum SIG_HOLD
= cast(sigfn_t2
) 1;
863 private enum _SIGSET_NWORDS
= 1024 / (8 * c_ulong
.sizeof
);
867 c_ulong
[_SIGSET_NWORDS
] __val
;
870 // pid_t (defined in core.sys.types)
872 //SIGABRT (defined in core.stdc.signal)
873 //SIGFPE (defined in core.stdc.signal)
874 //SIGILL (defined in core.stdc.signal)
875 //SIGINT (defined in core.stdc.signal)
876 //SIGSEGV (defined in core.stdc.signal)
877 //SIGTERM (defined in core.stdc.signal)
879 enum SA_NOCLDSTOP
= 1; // (CX|XSI)
882 enum SIG_UNBLOCK
= 1;
883 enum SIG_SETMASK
= 2;
885 private enum __SI_MAX_SIZE
= 128;
887 static if ( __WORDSIZE
== 64 )
889 private enum __SI_PAD_SIZE
= ((__SI_MAX_SIZE
/ int.sizeof
) - 4);
893 private enum __SI_PAD_SIZE
= ((__SI_MAX_SIZE
/ int.sizeof
) - 3);
898 int si_signo
; // Signal number
899 int si_errno
; // If non-zero, an errno value associated with
900 // this signal, as defined in <errno.h>
901 int si_code
; // Signal code
905 int[__SI_PAD_SIZE
] _pad
;
910 pid_t si_pid
; // Sending process ID
911 uid_t si_uid
; // Real user ID of sending process
917 int si_tid
; // Timer ID
918 int si_overrun
; // Overrun count
919 sigval si_sigval
; // Signal value
925 pid_t si_pid
; // Sending process ID
926 uid_t si_uid
; // Real user ID of sending process
927 sigval si_sigval
; // Signal value
933 pid_t si_pid
; // Which child
934 uid_t si_uid
; // Real user ID of sending process
935 int si_status
; // Exit value or signal
938 } _sigchild_t _sigchld
;
940 // SIGILL, SIGFPE, SIGSEGV, SIGBUS
943 void* si_addr
; // Faulting insn/memory ref
944 } _sigfault_t _sigfault
;
949 c_long si_band
; // Band event for SIGPOLL
951 } _sigpoll_t _sigpoll
;
952 } _sifields_t _sifields
;
955 @property ref pid_t
si_pid() return { return _sifields
._kill
.si_pid
; }
956 @property ref uid_t
si_uid() return { return _sifields
._kill
.si_uid
; }
957 @property ref void* si_addr() return { return _sifields
._sigfault
.si_addr
; }
958 @property ref int si_status() return { return _sifields
._sigchld
.si_status
; }
959 @property ref c_long
si_band() return { return _sifields
._sigpoll
.si_band
; }
960 @property ref sigval
si_value() return { return _sifields
._rt
.si_sigval
; }
976 int kill(pid_t
, int);
977 int sigaction(int, const scope sigaction_t
*, sigaction_t
*);
978 int sigaddset(sigset_t
*, int);
979 int sigdelset(sigset_t
*, int);
980 int sigemptyset(sigset_t
*);
981 int sigfillset(sigset_t
*);
982 int sigismember(const scope sigset_t
*, int);
983 int sigpending(sigset_t
*);
984 int sigprocmask(int, const scope sigset_t
*, sigset_t
*);
985 int sigsuspend(const scope sigset_t
*);
986 int sigwait(const scope sigset_t
*, int*);
988 else version (Darwin
)
990 enum SIG_HOLD
= cast(sigfn_t2
) 5;
993 // pid_t (defined in core.sys.types)
995 //SIGABRT (defined in core.stdc.signal)
996 //SIGFPE (defined in core.stdc.signal)
997 //SIGILL (defined in core.stdc.signal)
998 //SIGINT (defined in core.stdc.signal)
999 //SIGSEGV (defined in core.stdc.signal)
1000 //SIGTERM (defined in core.stdc.signal)
1002 enum SA_NOCLDSTOP
= 8; // (CX|XSI)
1005 enum SIG_UNBLOCK
= 2;
1006 enum SIG_SETMASK
= 3;
1022 enum SI_USER
= 0x10001;
1023 enum SI_QUEUE
= 0x10002;
1024 enum SI_TIMER
= 0x10003;
1025 enum SI_ASYNCIO
= 0x10004;
1026 enum SI_MESGQ
= 0x10005;
1028 int kill(pid_t
, int);
1029 int sigaction(int, const scope sigaction_t
*, sigaction_t
*);
1030 int sigaddset(sigset_t
*, int);
1031 int sigdelset(sigset_t
*, int);
1032 int sigemptyset(sigset_t
*);
1033 int sigfillset(sigset_t
*);
1034 int sigismember(const scope sigset_t
*, int);
1035 int sigpending(sigset_t
*);
1036 int sigprocmask(int, const scope sigset_t
*, sigset_t
*);
1037 int sigsuspend(const scope sigset_t
*);
1038 int sigwait(const scope sigset_t
*, int*);
1040 else version (FreeBSD
)
1042 enum SIG_HOLD
= cast(sigfn_t2
) 3;
1049 enum SA_NOCLDSTOP
= 8;
1052 enum SIG_UNBLOCK
= 2;
1053 enum SIG_SETMASK
= 3;
1093 ___spare___ __spare__
;
1097 @property ref c_long
si_band() return { return _reason
._poll
._band
; }
1100 enum SI_USER
= 0x10001;
1101 enum SI_QUEUE
= 0x10002;
1102 enum SI_TIMER
= 0x10003;
1103 enum SI_ASYNCIO
= 0x10004;
1104 enum SI_MESGQ
= 0x10005;
1106 int kill(pid_t
, int);
1107 int sigaction(int, const scope sigaction_t
*, sigaction_t
*);
1108 int sigaddset(sigset_t
*, int);
1109 int sigdelset(sigset_t
*, int);
1110 int sigemptyset(sigset_t
*);
1111 int sigfillset(sigset_t
*);
1112 int sigismember(const scope sigset_t
*, int);
1113 int sigpending(sigset_t
*);
1114 int sigprocmask(int, const scope sigset_t
*, sigset_t
*);
1115 int sigsuspend(const scope sigset_t
*);
1116 int sigwait(const scope sigset_t
*, int*);
1118 else version (NetBSD
)
1120 enum SIG_HOLD
= cast(sigfn_t2
) 3;
1127 enum SA_NOCLDSTOP
= 8;
1130 enum SIG_UNBLOCK
= 2;
1131 enum SIG_SETMASK
= 3;
1183 @property ref c_long
si_band() return { return _info
._reason
._poll
._band
; }
1189 enum SI_ASYNCIO
= -3;
1192 int kill(pid_t
, int);
1193 int __sigaction14(int, const scope sigaction_t
*, sigaction_t
*);
1194 int __sigaddset14(sigset_t
*, int);
1195 int __sigdelset14(sigset_t
*, int);
1196 int __sigemptyset14(sigset_t
*);
1197 int __sigfillset14(sigset_t
*);
1198 int __sigismember14(const scope sigset_t
*, int);
1199 int __sigpending14(sigset_t
*);
1200 int __sigprocmask14(int, const scope sigset_t
*, sigset_t
*);
1201 int __sigsuspend14(const scope sigset_t
*);
1202 int sigwait(const scope sigset_t
*, int*);
1204 alias __sigaction14 sigaction
;
1205 alias __sigaddset14 sigaddset
;
1206 alias __sigdelset14 sigdelset
;
1207 alias __sigemptyset14 sigemptyset
;
1208 alias __sigfillset14 sigfillset
;
1209 alias __sigismember14 sigismember
;
1210 alias __sigpending14 sigpending
;
1211 alias __sigprocmask14 sigprocmask
;
1212 alias __sigsuspend14 sigsuspend
;
1214 else version (OpenBSD
)
1216 enum SIG_CATCH
= cast(sigfn_t2
) 2;
1217 enum SIG_HOLD
= cast(sigfn_t2
) 3;
1219 alias sigset_t
= uint;
1221 enum SA_NOCLDSTOP
= 0x0008;
1224 enum SIG_UNBLOCK
= 2;
1225 enum SIG_SETMASK
= 3;
1227 private enum SI_MAXSZ
= 128;
1228 private enum SI_PAD
= (SI_MAXSZ
/ int.sizeof
) - 3;
1262 alias si_pid
= _data
._proc
._pid
;
1263 alias si_status
= _data
._proc
._pdata
._cld
._status
;
1264 alias si_stime
= _data
._proc
._pdata
._cld
._stime
;
1265 alias si_utime
= _data
._proc
._pdata
._cld
._utime
;
1266 alias si_uid
= _data
._proc
._pdata
._kill
._uid
;
1267 alias si_value
= _data
._proc
._pdata
._kill
._value
;
1268 alias si_addr
= _data
._fault
._addr
;
1269 alias si_trapno
= _data
._fault
._trapno
;
1272 enum SI_NOINFO
= 32767;
1278 int kill(pid_t
, int);
1279 int sigaction(int, const scope sigaction_t
*, sigaction_t
*);
1280 int sigaddset(sigset_t
*, int);
1281 int sigdelset(sigset_t
*, int);
1282 int sigemptyset(sigset_t
*);
1283 int sigfillset(sigset_t
*);
1284 int sigismember(const scope sigset_t
*, int);
1285 int sigpending(sigset_t
*);
1286 int sigprocmask(int, const scope sigset_t
*, sigset_t
*);
1287 int sigsuspend(const scope sigset_t
*);
1288 int sigwait(const scope sigset_t
*, int*);
1290 else version (DragonFlyBSD
)
1292 enum SIG_CATCH
= cast(sigfn_t2
) 2;
1293 enum SIG_HOLD
= cast(sigfn_t2
) 3;
1300 enum SA_NOCLDSTOP
= 8;
1303 enum SIG_UNBLOCK
= 2;
1304 enum SIG_SETMASK
= 3;
1320 enum SI_UNDEFINED
= 0x00000;
1324 enum SI_ASYNCIO
= -3;
1327 int kill(pid_t
, int);
1328 int sigaction(int, const scope sigaction_t
*, sigaction_t
*);
1329 int sigaddset(sigset_t
*, int);
1330 int sigdelset(sigset_t
*, int);
1331 int sigemptyset(sigset_t
*);
1332 int sigfillset(sigset_t
*);
1333 int sigismember(const scope sigset_t
*, int);
1334 int sigpending(sigset_t
*);
1335 int sigprocmask(int, const scope sigset_t
*, sigset_t
*);
1336 int sigsuspend(const scope sigset_t
*);
1337 int sigwait(const scope sigset_t
*, int*);
1339 else version (Solaris
)
1341 enum SIG_HOLD
= cast(sigfn_t2
)2;
1349 enum SIG_UNBLOCK
= 2;
1350 enum SIG_SETMASK
= 3;
1364 int[(256 / int.sizeof
) - 4] si_pad
;
1366 int[(128 / int.sizeof
) - 3] si_pad
;
1419 timestruc_t __tstamp
;
1440 enum SI_NOINFO
= 32767;
1441 enum SI_DTRACE
= 2050;
1442 enum SI_RCTL
= 2049;
1447 enum SI_ASYNCIO
= -4;
1450 enum SIGIO
= SIGPOLL
;
1452 int kill(pid_t
, int);
1453 int sigaction(int, const scope sigaction_t
*, sigaction_t
*);
1454 int sigaddset(sigset_t
*, int);
1455 int sigdelset(sigset_t
*, int);
1456 int sigemptyset(sigset_t
*);
1457 int sigfillset(sigset_t
*);
1458 int sigismember(const scope sigset_t
*, int);
1459 int sigpending(sigset_t
*);
1460 int sigprocmask(int, const scope sigset_t
*, sigset_t
*);
1461 int sigsuspend(const scope sigset_t
*);
1462 int sigwait(const scope sigset_t
*, int*);
1464 else version (CRuntime_Bionic
)
1466 public import core
.sys
.posix
.time
: timer_t
;
1467 import core
.stdc
.string
: memset
;
1471 alias uint sigset_t
;
1472 enum int LONG_BIT
= 32;
1476 alias uint sigset_t
;
1477 enum int LONG_BIT
= 32;
1479 else version (AArch64
)
1481 struct sigset_t
{ ulong[1] sig
; }
1482 enum int LONG_BIT
= 64;
1484 else version (X86_64
)
1486 alias ulong sigset_t
;
1487 enum int LONG_BIT
= 64;
1491 static assert(false, "Architecture not supported.");
1495 enum SIG_UNBLOCK
= 1;
1496 enum SIG_SETMASK
= 2;
1498 private enum SI_MAX_SIZE
= 128;
1499 private enum SI_PAD_SIZE
= ((SI_MAX_SIZE
/ int.sizeof
) - 3);
1509 int[SI_PAD_SIZE
] _pad
;
1539 } _sigchild_t _sigchld
;
1544 } _sigfault_t _sigfault
;
1550 } _sigpoll_t _sigpoll
;
1551 } _sifields_t _sifields
;
1566 int kill(pid_t
, int);
1567 int sigaction(int, const scope sigaction_t
*, sigaction_t
*);
1569 // These functions are defined inline in bionic.
1570 int sigaddset(sigset_t
* set
, int signum
)
1572 c_ulong
* local_set
= cast(c_ulong
*) set
;
1574 local_set
[signum
/LONG_BIT
] |
= 1UL << (signum
%LONG_BIT
);
1578 int sigdelset(sigset_t
* set
, int signum
)
1580 c_ulong
* local_set
= cast(c_ulong
*) set
;
1582 local_set
[signum
/LONG_BIT
] &= ~(1UL << (signum
%LONG_BIT
));
1586 int sigemptyset(sigset_t
* set
) { memset(set
, 0, (*set
).sizeof
); return 0; }
1588 int sigfillset(sigset_t
* set
) { memset(set
, ~0, (*set
).sizeof
); return 0; }
1590 int sigismember(sigset_t
* set
, int signum
)
1592 c_ulong
* local_set
= cast(c_ulong
*) set
;
1594 return cast(int) ((local_set
[signum
/LONG_BIT
] >> (signum
%LONG_BIT
)) & 1);
1597 int sigpending(sigset_t
*);
1598 int sigprocmask(int, const scope sigset_t
*, sigset_t
*);
1599 int sigsuspend(const scope sigset_t
*);
1600 int sigwait(const scope sigset_t
*, int*);
1602 else version (CRuntime_Musl
)
1606 c_ulong
[128/c_long
.sizeof
] __bits
;
1612 enum SIG_UNBLOCK
= 2;
1613 enum SIG_SETMASK
= 3;
1618 enum SIG_UNBLOCK
= 1;
1619 enum SIG_SETMASK
= 2;
1625 version (MIPS_Any
) // __SI_SWAP_ERRNO_CODE
1637 char[128 - 2*int.sizeof
- c_long
.sizeof
] __pad
= 0;
1638 struct __si_common_t
1647 __piduid_t __piduid
;
1667 __sigchld_t __sigchld
;
1669 __second_t __second
;
1671 __si_common_t __si_common
;
1684 __addr_bnd_t __addr_bnd
;
1689 __sigfault_t __sigfault
;
1696 __sigpoll_t __sigpoll
;
1704 __sigsys_t __sigsys
;
1706 __si_fields_t __si_fields
;
1709 int kill(pid_t
, int);
1710 int sigaction(int, const scope sigaction_t
*, sigaction_t
*);
1711 int sigaddset(sigset_t
*, int);
1712 int sigdelset(sigset_t
*, int);
1713 int sigemptyset(sigset_t
*);
1714 int sigfillset(sigset_t
*);
1715 int sigismember(const scope sigset_t
*, int);
1716 int sigpending(sigset_t
*);
1717 int sigprocmask(int, const scope sigset_t
*, sigset_t
*);
1718 int sigsuspend(const scope sigset_t
*);
1719 int sigwait(const scope sigset_t
*, int*);
1721 else version (CRuntime_UClibc
)
1723 enum SIG_HOLD
= cast(sigfn_t2
) 2;
1726 private enum _SIGSET_NWORDS
= 128 / (8 * c_ulong
.sizeof
);
1728 private enum _SIGSET_NWORDS
= 64 / (8 * c_ulong
.sizeof
);
1732 c_ulong
[_SIGSET_NWORDS
] __val
;
1735 enum SA_NOCLDSTOP
= 1;
1738 enum SIG_UNBLOCK
= 1;
1739 enum SIG_SETMASK
= 2;
1741 private enum __SI_MAX_SIZE
= 128;
1743 static if ( __WORDSIZE
== 64 )
1745 private enum __SI_PAD_SIZE
= ((__SI_MAX_SIZE
/ int.sizeof
) - 4);
1749 private enum __SI_PAD_SIZE
= ((__SI_MAX_SIZE
/ int.sizeof
) - 3);
1752 version (ARM
) version = siginfo_common
;
1753 else version (X86_64
) version = siginfo_common
;
1755 version (siginfo_common
)
1759 int si_signo
; // Signal number
1760 int si_errno
; // If non-zero, an errno value associated with
1761 // this signal, as defined in <errno.h>
1762 int si_code
; // Signal code
1766 int[__SI_PAD_SIZE
] _pad
;
1771 pid_t si_pid
; // Sending process ID
1772 uid_t si_uid
; // Real user ID of sending process
1778 int si_tid
; // Timer ID
1779 int si_overrun
; // Overrun count
1780 sigval si_sigval
; // Signal value
1786 pid_t si_pid
; // Sending process ID
1787 uid_t si_uid
; // Real user ID of sending process
1788 sigval si_sigval
; // Signal value
1794 pid_t si_pid
; // Which child
1795 uid_t si_uid
; // Real user ID of sending process
1796 int si_status
; // Exit value or signal
1799 } _sigchild_t _sigchld
;
1801 // SIGILL, SIGFPE, SIGSEGV, SIGBUS
1804 void* si_addr
; // Faulting insn/memory ref
1805 } _sigfault_t _sigfault
;
1810 c_long si_band
; // Band event for SIGPOLL;
1812 } _sigpoll_t _sigpoll
;
1817 void* _call_addr
; // Calling user insn.
1818 int _syscall
; // Triggering system call number.
1819 uint _arch
; // AUDIT_ARCH_* of syscall.
1820 } _sigsys_t _sigsys
;
1822 } _sifields_t _sifields
;
1825 @property ref pid_t
si_pid()() { return _sifields
._kill
.si_pid
; }
1826 @property ref uid_t
si_uid()() { return _sifields
._kill
.si_uid
; }
1827 @property ref int si_timerid()() { return _sifields
._timer
.si_tid
;}
1828 @property ref int si_overrun()() { return _sifields
._timer
.si_overrun
; }
1829 @property ref int si_status()() { return _sifields
._sigchld
.si_status
; }
1830 @property ref clock_t
si_utime()() { return _sifields
._sigchld
.si_utime
; }
1831 @property ref clock_t
si_stime()() { return _sifields
._sigchld
.si_stime
; }
1832 @property ref sigval
si_value()() { return _sifields
._rt
.si_sigval
; }
1833 @property ref int si_int()() { return _sifields
._rt
.si_sigval
.sival_int
; }
1834 @property ref void* si_ptr()() { return _sifields
._rt
.si_sigval
.sival_ptr
; }
1835 @property ref void* si_addr()() { return _sifields
._sigfault
.si_addr
; }
1836 @property ref c_long
si_band()() { return _sifields
._sigpoll
.si_band
; }
1837 @property ref int si_fd()() { return _sifields
._sigpoll
.si_fd
; }
1838 @property ref void* si_call_addr()() { return _sifields
._sigsys
._call_addr
; }
1839 @property ref int si_syscall()() { return _sifields
._sigsys
._syscall
; }
1840 @property ref uint si_arch()() { return _sifields
._sigsys
._arch
; }
1843 else version (MIPS32
)
1847 int si_signo
; // Signal number
1848 int si_errno
; // If non-zero, an errno value associated with
1849 // this signal, as defined in <errno.h>
1850 int si_code
; // Signal code
1852 int[__SI_MAX_SIZE
/ int.sizeof
- __SI_PAD_SIZE
- 3] __pad0
;
1856 int[__SI_PAD_SIZE
] _pad
;
1861 pid_t si_pid
; // Sending process ID
1862 uid_t si_uid
; // Real user ID of sending process
1868 int si_tid
; // Timer ID
1869 int si_overrun
; // Overrun count
1870 sigval si_sigval
; // Signal value
1876 pid_t si_pid
; // Sending process ID
1877 uid_t si_uid
; // Real user ID of sending process
1878 sigval si_sigval
; // Signal value
1884 pid_t si_pid
; // Which child
1885 uid_t si_uid
; // Real user ID of sending process
1886 int si_status
; // Exit value or signal
1889 } _sigchild_t _sigchld
;
1891 // SIGILL, SIGFPE, SIGSEGV, SIGBUS
1894 void* si_addr
; // Faulting insn/memory ref
1896 } _sigfault_t _sigfault
;
1901 c_long si_band
; // Band event for SIGPOLL;
1903 } _sigpoll_t _sigpoll
;
1908 void* _call_addr
; // Calling user insn.
1909 int _syscall
; // Triggering system call number.
1910 uint _arch
; // AUDIT_ARCH_* of syscall.
1911 } _sigsys_t _sigsys
;
1913 } _sifields_t _sifields
;
1916 @property ref pid_t
si_pid()() { return _sifields
._kill
.si_pid
; }
1917 @property ref uid_t
si_uid()() { return _sifields
._kill
.si_uid
; }
1918 @property ref int si_timerid()() { return _sifields
._timer
.si_tid
;}
1919 @property ref int si_overrun()() { return _sifields
._timer
.si_overrun
; }
1920 @property ref int si_status()() { return _sifields
._sigchld
.si_status
; }
1921 @property ref clock_t
si_utime()() { return _sifields
._sigchld
.si_utime
; }
1922 @property ref clock_t
si_stime()() { return _sifields
._sigchld
.si_stime
; }
1923 @property ref sigval
si_value()() { return _sifields
._rt
.si_sigval
; }
1924 @property ref int si_int()() { return _sifields
._rt
.si_sigval
.sival_int
; }
1925 @property ref void* si_ptr()() { return _sifields
._rt
.si_sigval
.sival_ptr
; }
1926 @property ref void* si_addr()() { return _sifields
._sigfault
.si_addr
; }
1927 @property ref c_long
si_band()() { return _sifields
._sigpoll
.si_band
; }
1928 @property ref int si_fd()() { return _sifields
._sigpoll
.si_fd
; }
1929 @property ref void* si_call_addr()() { return _sifields
._sigsys
._call_addr
; }
1930 @property ref int si_syscall()() { return _sifields
._sigsys
._syscall
; }
1931 @property ref uint si_arch()() { return _sifields
._sigsys
._arch
; }
1936 static assert(false, "Architecture not supported.");
1952 int kill(pid_t
, int);
1953 int sigaction(int, const scope sigaction_t
*, sigaction_t
*);
1954 int sigaddset(sigset_t
*, int);
1955 int sigdelset(sigset_t
*, int);
1956 int sigemptyset(sigset_t
*);
1957 int sigfillset(sigset_t
*);
1958 int sigismember(const scope sigset_t
*, int);
1959 int sigpending(sigset_t
*);
1960 int sigprocmask(int, const scope sigset_t
*, sigset_t
*);
1961 int sigsuspend(const scope sigset_t
*);
1962 int sigwait(const scope sigset_t
*, int*);
1966 static assert(false, "Unsupported platform");
1993 ucontext_t // from ucontext
1994 mcontext_t // from ucontext
2051 sigfn_t bsd_signal(int sig, sigfn_t func);
2052 sigfn_t sigset(int sig, sigfn_t func);
2054 int killpg(pid_t, int);
2055 int sigaltstack(const scope stack_t*, stack_t*);
2058 int siginterrupt(int, int);
2063 version (CRuntime_Glibc
)
2071 enum SIGVTALRM
= 26;
2075 else version (HPPA_Any
)
2081 enum SIGVTALRM
= 20;
2085 else version (MIPS_Any
)
2091 enum SIGVTALRM
= 28;
2095 else version (PPC_Any
)
2101 enum SIGVTALRM
= 26;
2105 else version (ARM_Any
)
2111 enum SIGVTALRM
= 26;
2115 else version (RISCV_Any
)
2121 enum SIGVTALRM
= 26;
2125 else version (SPARC_Any
)
2131 enum SIGVTALRM
= 26;
2135 else version (IBMZ_Any
)
2141 enum SIGVTALRM
= 26;
2146 static assert(0, "unimplemented");
2148 enum SA_ONSTACK
= 0x08000000;
2149 enum SA_RESETHAND
= 0x80000000;
2150 enum SA_RESTART
= 0x10000000;
2151 enum SA_SIGINFO
= 4;
2152 enum SA_NOCLDWAIT
= 2;
2153 enum SA_NODEFER
= 0x40000000;
2154 enum SS_ONSTACK
= 1;
2155 enum SS_DISABLE
= 2;
2156 enum MINSIGSTKSZ
= 2048;
2157 enum SIGSTKSZ
= 8192;
2159 //ucontext_t (defined in core.sys.posix.ucontext)
2160 //mcontext_t (defined in core.sys.posix.ucontext)
2238 sigfn_t
bsd_signal(int sig
, sigfn_t func
);
2239 sigfn_t
sigset(int sig
, sigfn_t func
);
2243 sigfn_t2
bsd_signal(int sig
, sigfn_t2 func
);
2244 sigfn_t2
sigset(int sig
, sigfn_t2 func
);
2246 int killpg(pid_t
, int);
2247 int sigaltstack(const scope stack_t
*, stack_t
*);
2250 int siginterrupt(int, int);
2254 else version (Darwin
)
2260 enum SIGVTALRM
= 26;
2264 enum SA_ONSTACK
= 0x0001;
2265 enum SA_RESETHAND
= 0x0004;
2266 enum SA_RESTART
= 0x0002;
2267 enum SA_SIGINFO
= 0x0040;
2268 enum SA_NOCLDWAIT
= 0x0020;
2269 enum SA_NODEFER
= 0x0010;
2270 enum SS_ONSTACK
= 0x0001;
2271 enum SS_DISABLE
= 0x0004;
2272 enum MINSIGSTKSZ
= 32768;
2273 enum SIGSTKSZ
= 131072;
2275 //ucontext_t (defined in core.sys.posix.ucontext)
2276 //mcontext_t (defined in core.sys.posix.ucontext)
2291 enum ILL_ILLOPC
= 1;
2292 enum ILL_ILLOPN
= 4;
2293 enum ILL_ILLADR
= 5;
2294 enum ILL_ILLTRP
= 2;
2295 enum ILL_PRVOPC
= 3;
2296 enum ILL_PRVREG
= 6;
2297 enum ILL_COPROC
= 7;
2298 enum ILL_BADSTK
= 8;
2300 enum FPE_INTDIV
= 7;
2301 enum FPE_INTOVF
= 8;
2302 enum FPE_FLTDIV
= 1;
2303 enum FPE_FLTOVF
= 2;
2304 enum FPE_FLTUND
= 3;
2305 enum FPE_FLTRES
= 4;
2306 enum FPE_FLTINV
= 5;
2307 enum FPE_FLTSUB
= 6;
2348 sigfn_t
bsd_signal(int sig
, sigfn_t func
);
2349 sigfn_t
sigset(int sig
, sigfn_t func
);
2353 sigfn_t2
bsd_signal(int sig
, sigfn_t2 func
);
2354 sigfn_t2
sigset(int sig
, sigfn_t2 func
);
2356 int killpg(pid_t
, int);
2357 int sigaltstack(const scope stack_t
*, stack_t
*);
2360 int siginterrupt(int, int);
2364 else version (FreeBSD
)
2366 // No SIGPOLL on *BSD
2370 enum SIGVTALRM
= 26;
2376 SA_ONSTACK
= 0x0001,
2377 SA_RESTART
= 0x0002,
2378 SA_RESETHAND
= 0x0004,
2379 SA_NODEFER
= 0x0010,
2380 SA_NOCLDWAIT
= 0x0020,
2381 SA_SIGINFO
= 0x0040,
2386 SS_ONSTACK
= 0x0001,
2387 SS_DISABLE
= 0x0004,
2390 enum MINSIGSTKSZ
= 512 * 4;
2391 enum SIGSTKSZ
= (MINSIGSTKSZ
+ 32768);
2393 //ucontext_t (defined in core.sys.posix.ucontext)
2394 //mcontext_t (defined in core.sys.posix.ucontext)
2472 //sigfn_t bsd_signal(int sig, sigfn_t func);
2473 sigfn_t
sigset(int sig
, sigfn_t func
);
2477 //sigfn_t2 bsd_signal(int sig, sigfn_t2 func);
2478 sigfn_t2
sigset(int sig
, sigfn_t2 func
);
2480 int killpg(pid_t
, int);
2481 int sigaltstack(const scope stack_t
*, stack_t
*);
2484 int siginterrupt(int, int);
2488 else version (NetBSD
)
2490 // No SIGPOLL on *BSD
2494 enum SIGVTALRM
= 26;
2500 SA_ONSTACK
= 0x0001,
2501 SA_RESTART
= 0x0002,
2502 SA_RESETHAND
= 0x0004,
2503 SA_NODEFER
= 0x0010,
2504 SA_NOCLDWAIT
= 0x0020,
2505 SA_SIGINFO
= 0x0040,
2510 SS_ONSTACK
= 0x0001,
2511 SS_DISABLE
= 0x0004,
2514 enum MINSIGSTKSZ
= 8192;
2515 enum SIGSTKSZ
= (MINSIGSTKSZ
+ 32768);
2517 //ucontext_t (defined in core.sys.posix.ucontext)
2518 //mcontext_t (defined in core.sys.posix.ucontext)
2596 //sigfn_t bsd_signal(int sig, sigfn_t func);
2597 sigfn_t
sigset(int sig
, sigfn_t func
);
2601 //sigfn_t2 bsd_signal(int sig, sigfn_t2 func);
2602 sigfn_t2
sigset(int sig
, sigfn_t2 func
);
2604 int killpg(pid_t
, int);
2605 int sigaltstack(const scope stack_t
*, stack_t
*);
2608 int siginterrupt(int, int);
2612 else version (OpenBSD
)
2614 // No SIGPOLL on *BSD
2618 enum SIGVTALRM
= 26;
2624 SA_ONSTACK
= 0x0001,
2625 SA_RESTART
= 0x0002,
2626 SA_RESETHAND
= 0x0004,
2627 SA_NODEFER
= 0x0010,
2628 SA_NOCLDWAIT
= 0x0020,
2629 SA_SIGINFO
= 0x0040,
2634 SS_ONSTACK
= 0x0001,
2635 SS_DISABLE
= 0x0004,
2638 enum MINSIGSTKSZ
= 8192;
2639 enum SIGSTKSZ
= (MINSIGSTKSZ
+ 32768);
2641 //ucontext_t (defined in core.sys.posix.ucontext)
2642 //mcontext_t (defined in core.sys.posix.ucontext)
2661 NSIGILL
= ILL_BADSTK
,
2669 NSIGBUS
= BUS_OBJERR
,
2676 NSIGSEGV
= SEGV_ACCERR
,
2689 NSIGFPE
= FPE_FLTSUB
,
2696 NSIGTRAP
= TRAP_TRACE
,
2707 NSIGCLD
= CLD_CONTINUED
,
2718 NSIGPOLL
= POLL_HUP
,
2723 int killpg(pid_t
, int);
2724 int sigaltstack(const scope stack_t
*, stack_t
*);
2725 int siginterrupt(int, int);
2728 else version (DragonFlyBSD
)
2730 // No SIGPOLL on *BSD
2734 enum SIGVTALRM
= 26;
2740 SA_ONSTACK
= 0x0001,
2741 SA_RESTART
= 0x0002,
2742 SA_RESETHAND
= 0x0004,
2743 SA_NODEFER
= 0x0010,
2744 SA_NOCLDWAIT
= 0x0020,
2745 SA_SIGINFO
= 0x0040,
2750 SS_ONSTACK
= 0x0001,
2751 SS_DISABLE
= 0x0004,
2754 enum MINSIGSTKSZ
= 8192;
2755 enum SIGSTKSZ
= (MINSIGSTKSZ
+ 32768);
2757 //ucontext_t (defined in core.sys.posix.ucontext)
2758 //mcontext_t (defined in core.sys.posix.ucontext)
2836 //sigfn_t bsd_signal(int sig, sigfn_t func);
2837 sigfn_t
sigset(int sig
, sigfn_t func
);
2841 //sigfn_t2 bsd_signal(int sig, sigfn_t2 func);
2842 sigfn_t2
sigset(int sig
, sigfn_t2 func
);
2844 int killpg(pid_t
, int);
2845 int sigaltstack(const scope stack_t
*, stack_t
*);
2848 int siginterrupt(int, int);
2852 else version (Solaris
)
2858 enum SIGVTALRM
= 28;
2864 SA_ONSTACK
= 0x00001,
2865 SA_RESTART
= 0x00004,
2866 SA_RESETHAND
= 0x00002,
2867 SA_NODEFER
= 0x00010,
2868 SA_NOCLDWAIT
= 0x10000,
2869 SA_SIGINFO
= 0x00008,
2874 SS_ONSTACK
= 0x0001,
2875 SS_DISABLE
= 0x0002,
2878 enum MINSIGSTKSZ
= 2048;
2879 enum SIGSTKSZ
= 8192;
2962 sigfn_t
sigset(int sig
, sigfn_t func
);
2966 sigfn_t2
sigset(int sig
, sigfn_t2 func
);
2968 int killpg(pid_t
, int);
2969 int sigaltstack(const scope stack_t
*, stack_t
*);
2972 int siginterrupt(int, int);
2976 else version (CRuntime_Bionic
)
2982 enum SIGVTALRM
= 26;
2986 enum SA_ONSTACK
= 0x08000000;
2987 enum SA_RESETHAND
= 0x80000000;
2988 enum SA_RESTART
= 0x10000000;
2989 enum SA_SIGINFO
= 4;
2990 enum SA_NOCLDWAIT
= 2;
2991 enum SA_NODEFER
= 0x40000000;
2992 enum SS_ONSTACK
= 1;
2993 enum SS_DISABLE
= 2;
2994 enum MINSIGSTKSZ
= 2048;
2995 enum SIGSTKSZ
= 8192;
3067 sigfn_t
bsd_signal(int, sigfn_t
);
3071 sigfn_t2
bsd_signal(int, sigfn_t2
);
3073 int killpg(int, int);
3074 int sigaltstack(const scope stack_t
*, stack_t
*);
3075 int siginterrupt(int, int);
3077 else version (CRuntime_Musl
)
3085 enum SIGVTALRM
= 28;
3089 enum SA_ONSTACK
= 0x08000000;
3090 enum SA_RESETHAND
= 0x80000000;
3091 enum SA_RESTART
= 0x10000000;
3092 enum SA_SIGINFO
= 8;
3093 enum SA_NOCLDWAIT
= 0x10000;
3094 enum SA_NODEFER
= 0x40000000;
3102 enum SIGVTALRM
= 26;
3106 enum SA_ONSTACK
= 0x08000000;
3107 enum SA_RESETHAND
= 0x80000000;
3108 enum SA_RESTART
= 0x10000000;
3109 enum SA_SIGINFO
= 4;
3110 enum SA_NOCLDWAIT
= 2;
3111 enum SA_NODEFER
= 0x40000000;
3114 enum SS_ONSTACK
= 1;
3115 enum SS_DISABLE
= 2;
3119 enum MINSIGSTKSZ
= 2048;
3120 enum SIGSTKSZ
= 8192;
3122 else version (AArch64
)
3124 enum MINSIGSTKSZ
= 6144;
3125 enum SIGSTKSZ
= 12288;
3127 else version (IBMZ_Any
)
3129 enum MINSIGSTKSZ
= 4096;
3130 enum SIGSTKSZ
= 10240;
3132 else version (MIPS_Any
)
3134 enum MINSIGSTKSZ
= 2048;
3135 enum SIGSTKSZ
= 8192;
3137 else version (PPC_Any
)
3139 enum MINSIGSTKSZ
= 4096;
3140 enum SIGSTKSZ
= 10240;
3142 else version (X86_Any
)
3144 enum MINSIGSTKSZ
= 2048;
3145 enum SIGSTKSZ
= 8192;
3148 static assert(0, "unimplemented");
3150 //ucontext_t (defined in core.sys.posix.ucontext)
3151 //mcontext_t (defined in core.sys.posix.ucontext)
3235 sigfn_t
bsd_signal(int sig
, sigfn_t func
);
3236 sigfn_t
sigset(int sig
, sigfn_t func
);
3240 sigfn_t2
bsd_signal(int sig
, sigfn_t2 func
);
3241 sigfn_t2
sigset(int sig
, sigfn_t2 func
);
3243 int killpg(pid_t
, int);
3244 int sigaltstack(const scope stack_t
*, stack_t
*);
3247 int siginterrupt(int, int);
3251 else version (CRuntime_UClibc
)
3257 enum SIGSTKFLT
= 16;
3258 enum SIGCLD
= SIGCHLD
;
3261 enum SIGVTALRM
= 26;
3264 enum SIGPOLL
= SIGIO
;
3268 enum SIGUNUSED
= 31;
3270 else version (MIPS32
)
3277 enum SIGCLD
= SIGCHLD
;
3281 enum SIGPOLL
= SIGIO
;
3282 enum SIGVTALRM
= 28;
3291 enum SIGSTKFLT
= 16;
3292 enum SIGCLD
= SIGCHLD
;
3295 enum SIGVTALRM
= 26;
3298 enum SIGPOLL
= SIGIO
;
3302 enum SIGUNUSED
= 31;
3305 static assert(0, "unimplemented");
3307 enum SA_ONSTACK
= 0x08000000;
3308 enum SA_RESETHAND
= 0x80000000;
3309 enum SA_RESTART
= 0x10000000;
3310 enum SA_SIGINFO
= 4;
3311 enum SA_NOCLDWAIT
= 2;
3312 enum SA_NODEFER
= 0x40000000;
3313 enum SS_ONSTACK
= 1;
3314 enum SS_DISABLE
= 2;
3315 enum MINSIGSTKSZ
= 2048;
3316 enum SIGSTKSZ
= 8192;
3318 enum SA_INTERRUPT
= 0x20000000;
3320 enum SA_NOMASK
= SA_NODEFER
;
3321 enum SA_ONESHOT
= SA_RESETHAND
;
3322 enum SA_STACK
= SA_ONSTACK
;
3349 // `si_code' values for SIGILL signal.
3352 ILL_ILLOPC
= 1, // Illegal opcode.
3353 ILL_ILLOPN
, // Illegal operand.
3354 ILL_ILLADR
, // Illegal addressing mode.
3355 ILL_ILLTRP
, // Illegal trap.
3356 ILL_PRVOPC
, // Privileged opcode.
3357 ILL_PRVREG
, // Privileged register.
3358 ILL_COPROC
, // Coprocessor error.
3359 ILL_BADSTK
// Internal stack error.
3362 // `si_code' values for SIGFPE signal.
3365 FPE_INTDIV
= 1, // Integer divide by zero.
3366 FPE_INTOVF
, // Integer overflow.
3367 FPE_FLTDIV
, // Floating point divide by zero.
3368 FPE_FLTOVF
, // Floating point overflow.
3369 FPE_FLTUND
, // Floating point underflow.
3370 FPE_FLTRES
, // Floating point inexact result.
3371 FPE_FLTINV
, // Floating point invalid operation.
3372 FPE_FLTSUB
// Subscript out of range.
3375 // `si_code' values for SIGSEGV signal.
3378 SEGV_MAPERR
= 1, // Address not mapped to object.
3379 SEGV_ACCERR
// Invalid permissions for mapped object.
3382 // `si_code' values for SIGBUS signal.
3385 BUS_ADRALN
= 1, // Invalid address alignment.
3386 BUS_ADRERR
, // Non-existant physical address.
3387 BUS_OBJERR
// Object specific hardware error.
3390 // `si_code' values for SIGTRAP signal.
3393 TRAP_BRKPT
= 1, // Process breakpoint.
3394 TRAP_TRACE
// Process trace trap.
3397 // `si_code' values for SIGCHLD signal.
3400 CLD_EXITED
= 1, // Child has exited.
3401 CLD_KILLED
, // Child was killed.
3402 CLD_DUMPED
, // Child terminated abnormally.
3403 CLD_TRAPPED
, // Traced child has trapped.
3404 CLD_STOPPED
, // Child has stopped.
3405 CLD_CONTINUED
// Stopped child has continued.
3408 // `si_code' values for SIGPOLL signal.
3411 POLL_IN
= 1, // Data input available.
3412 POLL_OUT
, // Output buffers available.
3413 POLL_MSG
, // Input message available.
3414 POLL_ERR
, // I/O error.
3415 POLL_PRI
, // High priority input available.
3416 POLL_HUP
// Device disconnected.
3419 sigfn_t
sigset(int sig
, sigfn_t func
);
3423 sigfn_t2
sigset(int sig
, sigfn_t2 func
);
3425 int killpg(pid_t
, int);
3426 int sigaltstack(const scope stack_t
*, stack_t
*);
3429 int siginterrupt(int, int);
3435 static assert(false, "Unsupported platform");
3442 NOTE: This should actually be defined in core.sys.posix.time.
3443 It is defined here instead to break a circular import.
3460 else version (Darwin
)
3468 else version (FreeBSD
)
3476 else version (NetBSD
)
3484 else version (OpenBSD
)
3492 else version (DragonFlyBSD
)
3500 else version (Solaris
)
3508 alias timespec timestruc_t
;
3512 static assert(false, "Unsupported platform");
3516 // Realtime Signals (RTS)
3524 void(*)(sigval) sigev_notify_function;
3525 pthread_attr_t* sigev_notify_attributes;
3528 int sigqueue(pid_t, int, const sigval);
3529 int sigtimedwait(const scope sigset_t*, siginfo_t*, const scope timespec*);
3530 int sigwaitinfo(const scope sigset_t*, siginfo_t*);
3536 version (CRuntime_Glibc
)
3538 private enum __SIGEV_MAX_SIZE
= 64;
3540 static if ( __WORDSIZE
== 64 )
3542 private enum __SIGEV_PAD_SIZE
= ((__SIGEV_MAX_SIZE
/ int.sizeof
) - 4);
3546 private enum __SIGEV_PAD_SIZE
= ((__SIGEV_MAX_SIZE
/ int.sizeof
) - 3);
3557 int[__SIGEV_PAD_SIZE
] _pad
;
3560 struct _sigev_thread_t
3562 void function(sigval
) _function
;
3564 } _sigev_thread_t _sigev_thread
;
3565 } _sigev_un_t _sigev_un
;
3568 int sigqueue(pid_t
, int, const sigval
);
3569 int sigtimedwait(const scope sigset_t
*, siginfo_t
*, const scope timespec
*);
3570 int sigwaitinfo(const scope sigset_t
*, siginfo_t
*);
3572 else version (FreeBSD
)
3582 struct _sigev_thread
3584 void function(sigval
) _function
;
3587 c_long
[8] __spare__
;
3591 int sigqueue(pid_t
, int, const sigval
);
3592 int sigtimedwait(const scope sigset_t
*, siginfo_t
*, const scope timespec
*);
3593 int sigwaitinfo(const scope sigset_t
*, siginfo_t
*);
3595 else version (NetBSD
)
3602 void function(sigval
) sigev_notify_function
;
3603 void /* pthread_attr_t */*sigev_notify_attributes
;
3606 int sigqueue(pid_t
, int, const sigval
);
3607 int sigtimedwait(const scope sigset_t
*, siginfo_t
*, const scope timespec
*);
3608 int sigwaitinfo(const scope sigset_t
*, siginfo_t
*);
3610 else version (OpenBSD
)
3612 // OpenBSD does not implement sigevent.
3613 alias sigevent
= void;
3615 else version (DragonFlyBSD
)
3620 int sigev_notify_kqueue
;
3621 void /*pthread_attr_t*/ * sigev_notify_attributes
;
3633 _sigev_un_t sigev_un
;
3634 _sigval_t sigev_value
;
3635 void function(_sigval_t
) sigev_notify_function
;
3638 int sigqueue(pid_t
, int, const sigval
);
3639 int sigtimedwait(const scope sigset_t
*, siginfo_t
*, const scope timespec
*);
3640 int sigwaitinfo(const scope sigset_t
*, siginfo_t
*);
3642 else version (Darwin
)
3649 void function(sigval
) sigev_notify_function
;
3650 pthread_attr_t
* sigev_notify_attributes
;
3653 else version (Solaris
)
3660 void function(sigval
) sigev_notify_function
;
3661 pthread_attr_t
* sigev_notify_attributes
;
3665 int sigqueue(pid_t
, int, const sigval
);
3666 int sigtimedwait(const scope sigset_t
*, siginfo_t
*, const scope timespec
*);
3667 int sigwaitinfo(const scope sigset_t
*, siginfo_t
*);
3669 else version (CRuntime_Bionic
)
3671 private enum __ARCH_SIGEV_PREAMBLE_SIZE
= (int.sizeof
* 2) + sigval
.sizeof
;
3672 private enum SIGEV_MAX_SIZE
= 64;
3673 private enum SIGEV_PAD_SIZE
= (SIGEV_MAX_SIZE
- __ARCH_SIGEV_PREAMBLE_SIZE
)
3684 int[SIGEV_PAD_SIZE
] _pad
;
3687 struct _sigev_thread_t
3689 void function(sigval
) _function
;
3691 } _sigev_thread_t _sigev_thread
;
3692 } _sigev_un_t _sigev_un
;
3695 else version (CRuntime_Musl
)
3702 void function(sigval
) sigev_notify_function
;
3703 pthread_attr_t
*sigev_notify_attributes
;
3704 char[56 - 3 * c_long
.sizeof
] __pad
= void;
3707 else version (CRuntime_UClibc
)
3709 private enum __SIGEV_MAX_SIZE
= 64;
3711 static if ( __WORDSIZE
== 64 )
3713 private enum __SIGEV_PAD_SIZE
= ((__SIGEV_MAX_SIZE
/ int.sizeof
) - 4);
3717 private enum __SIGEV_PAD_SIZE
= ((__SIGEV_MAX_SIZE
/ int.sizeof
) - 3);
3728 int[__SIGEV_PAD_SIZE
] _pad
;
3731 struct _sigev_thread_t
3733 void function(sigval
) _function
;
3735 } _sigev_thread_t _sigev_thread
;
3736 } _sigev_un_t _sigev_un
;
3739 @property void function(sigval
) sigev_notify_function(ref sigevent _sigevent
) { return _sigevent
._sigev_un
._sigev_thread
._function
; }
3740 @property void* sigev_notify_attributes(ref sigevent _sigevent
) { return _sigevent
._sigev_un
._sigev_thread
._attribute
; }
3742 int sigqueue(pid_t
, int, const sigval
);
3743 int sigtimedwait(const scope sigset_t
*, siginfo_t
*, const scope timespec
*);
3744 int sigwaitinfo(const scope sigset_t
*, siginfo_t
*);
3748 static assert(false, "Unsupported platform");
3755 int pthread_kill(pthread_t, int);
3756 int pthread_sigmask(int, const scope sigset_t*, sigset_t*);
3759 version (CRuntime_Glibc
)
3761 int pthread_kill(pthread_t
, int);
3762 int pthread_sigmask(int, const scope sigset_t
*, sigset_t
*);
3764 else version (Darwin
)
3766 int pthread_kill(pthread_t
, int);
3767 int pthread_sigmask(int, const scope sigset_t
*, sigset_t
*);
3769 else version (FreeBSD
)
3771 int pthread_kill(pthread_t
, int);
3772 int pthread_sigmask(int, const scope sigset_t
*, sigset_t
*);
3774 else version (NetBSD
)
3776 int pthread_kill(pthread_t
, int);
3777 int pthread_sigmask(int, const scope sigset_t
*, sigset_t
*);
3779 else version (OpenBSD
)
3781 int pthread_kill(pthread_t
, int);
3782 int pthread_sigmask(int, const scope sigset_t
*, sigset_t
*);
3784 else version (DragonFlyBSD
)
3786 int pthread_kill(pthread_t
, int);
3787 int pthread_sigmask(int, const scope sigset_t
*, sigset_t
*);
3789 else version (Solaris
)
3791 int pthread_kill(pthread_t
, int);
3792 int pthread_sigmask(int, const scope sigset_t
*, sigset_t
*);
3794 else version (CRuntime_Bionic
)
3796 int pthread_kill(pthread_t
, int);
3797 int pthread_sigmask(int, const scope sigset_t
*, sigset_t
*);
3799 else version (CRuntime_Musl
)
3801 int pthread_kill(pthread_t
, int);
3802 int pthread_sigmask(int, const scope sigset_t
*, sigset_t
*);
3804 else version (CRuntime_UClibc
)
3806 int pthread_kill(pthread_t
, int);
3807 int pthread_sigmask(int, const scope sigset_t
*, sigset_t
*);
3808 int pthread_sigqueue(pthread_t
, int, sigval
);
3812 static assert(false, "Unsupported platform");