1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
This patch corrects some errors in the Usignal interface for FreeBSD.
Index: m3/m3core/src/unix/freebsd-2/Usignal.i3
--- Usignal.i3.orig Mon Aug 12 15:47:48 1996
+++ Usignal.i3 Thu Jul 10 18:38:06 1997
@@ -12,8 +12,6 @@
(*** <signal.h> ***)
- (* I don't know about all the indented values below from the
- Linux implementation *)
CONST
SIGHUP = 1; (* hangup *)
SIGINT = 2; (* interrupt *)
@@ -23,27 +21,19 @@
SIGIOT = 6; (* IOT instruction *)
SIGEMT = 7; (* EMT instruction *)
SIGFPE = 8; (* floating point exception *)
- FPE_INTDIV_TRAP = 20; (* integer divide by zero *)
- FPE_INTOVF_TRAP = 21; (* integer overflow *)
- FPE_FLTOPERR_TRAP = 1; (* [floating operand error] *)
- FPE_FLTDEN_TRAP = 2; (* [floating denormalized operand] *)
- FPE_FLTDIV_TRAP = 3; (* [floating divide by zero] *)
- FPE_FLTOVF_TRAP = 4; (* [floating overflow] *)
- FPE_FLTUND_TRAP = 5; (* [floating underflow] *)
- FPE_FLTINEX_TRAP = 6; (* [floating inexact result] *)
- FPE_UUOP_TRAP = 7; (* [floating undefined opcode] *)
- FPE_DATACH_TRAP = 8; (* [floating data chain exception] *)
- FPE_FLTSTK_TRAP = 16; (* [floating stack fault] *)
- FPE_FPA_ENABLE = 17; (* [FPA not enabled] *)
- FPE_FPA_ERROR = 18; (* [FPA arithmetic exception] *)
+ FPE_INTOVF_TRAP = 1; (* integer overflow *)
+ FPE_INTDIV_TRAP = 2; (* integer divide by zero *)
+ FPE_FLTDIV_TRAP = 3; (* floating/decimal divide by zero *)
+ FPE_FLTOVF_TRAP = 4; (* floating overflow *)
+ FPE_FLTUND_TRAP = 5; (* floating underflow *)
+ FPE_FPU_NP_TRAP = 6; (* floating point unit not present *)
+ FPE_SUBRNG_TRAP = 7; (* subrange out of bounds *)
SIGKILL = 9; (* kill (cannot be caught or ignored) *)
SIGBUS = 10; (* bus error *)
- BUS_HWERR = 1; (* misc hardware error (e.g. timeout) *)
- BUS_ALIGN = 2; (* hardware alignment error *)
+ BUS_PAGE_FAULT = 12; (* page fault protection base *)
+ BUS_SEGNP_FAULT = 26; (* segment not present *)
+ BUS_STK_FAULT = 27; (* stack fault *)
SIGSEGV = 11; (* segmentation violation *)
- SEGV_NOMAP = 3; (* no mapping at the fault address *)
- SEGV_PROT = 4; (* access exceeded protections *)
- SEGV_OBJERR = 5; (* object returned errno value *)
SIGSYS = 12; (* bad argument to system call *)
SIGPIPE = 13; (* write on a pipe with no one to read it *)
SIGALRM = 14; (* alarm clock *)
@@ -61,9 +51,9 @@
SIGVTALRM = 26; (* virtual time alarm *)
SIGPROF = 27; (* profiling time alarm *)
SIGWINCH = 28; (* window size changes *)
- SIGLOST = 29; (* Sys-V rec lock: notify user upon server crash *)
- SIGUSR1 = 30; (* User signal 1 (from SysV) *)
- SIGUSR2 = 31; (* User signal 2 (from SysV) *)
+ SIGINFO = 29; (* information request *)
+ SIGUSR1 = 30; (* user defined signal 1 *)
+ SIGUSR2 = 31; (* user defined signal 2 *)
(* System V definitions *)
SIGCLD = SIGCHLD;
@@ -80,7 +70,8 @@
struct_sigvec = RECORD
sv_handler: SignalHandler; (* signal handler *)
sv_mask: sigset_t; (* signal mask to apply *)
- sv_flags: int; (* see signal options below *) END;
+ sv_flags: int; (* see signal options below *)
+ END;
CONST
@@ -101,16 +92,10 @@
SIG_SETMASK = 3; (* Set block mask to this mask *)
TYPE
- SignalActionHandler = PROCEDURE (sig: int);
- SignalRestoreHandler = PROCEDURE ();
-
struct_sigaction = RECORD
- sa_handler : SignalActionHandler; (* signal handler *)
+ sa_handler : SignalHandler; (* signal handler *)
sa_mask : sigset_t; (* signals to block while in handler *)
sa_flags : int; (* signal action flags *)
- (* ow
- sa_restorer : SignalRestoreHandler; (* restores interrupted state *)
- *)
END;
struct_sigaction_star = UNTRACED REF struct_sigaction;
@@ -206,9 +191,15 @@
<*EXTERNAL*> PROCEDURE sigstack (VAR ss, oss: struct_sigstack): int;
+(*** sigsuspend(2) - release blocked signals and wait for interrupt ***)
+
+<*EXTERNAL*>
+PROCEDURE sigsuspend (VAR sigmask: sigset_t): int;
(*** sigaction(2) - software signal facilities ***)
+(* FIXME - This should probably use the VAR construct like the other
+ platforms use. *)
<*EXTERNAL*>
PROCEDURE sigaction (sig: int; act, oact: struct_sigaction_star): int;
|