Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/features/signal.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2012 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
20
* *
21
***********************************************************************/
22
#pragma prototyped
23
/*
24
* Glenn Fowler
25
* AT&T Research
26
*
27
* generate signal features
28
*/
29
30
#include "FEATURE/standards"
31
32
#define strsignal ______strsignal
33
34
#include <signal.h>
35
36
#undef strsignal
37
38
struct _m_
39
{
40
char* text;
41
char* name;
42
int value;
43
};
44
45
#define elementsof(x) (sizeof(x)/sizeof(x[0]))
46
47
static struct _m_ map[] =
48
{
49
#ifdef SIGABRT
50
#define HAD_SIGABRT 1
51
"Abort", "ABRT", SIGABRT,
52
#endif
53
#ifdef SIGAIO
54
#define HAD_SIGAIO 1
55
"Asynchronous I/O", "AIO", SIGAIO,
56
#endif
57
#ifdef SIGALRM
58
#define HAD_SIGALRM 1
59
"Alarm call", "ALRM", SIGALRM,
60
#endif
61
#ifdef SIGAPOLLO
62
#define HAD_SIGAPOLLO 1
63
"Apollo", "APOLLO", SIGAPOLLO,
64
#endif
65
#ifdef SIGBUS
66
#define HAD_SIGBUS 1
67
"Bus error", "BUS", SIGBUS,
68
#endif
69
#ifdef SIGCHLD
70
#define HAD_SIGCHLD 1
71
"Child status change", "CHLD", SIGCHLD,
72
#endif
73
#ifdef SIGCLD
74
#define HAD_SIGCLD 1
75
"Death of child", "CLD", SIGCLD,
76
#endif
77
#ifdef SIGCONT
78
#define HAD_SIGCONT 1
79
"Stopped process continued", "CONT", SIGCONT,
80
#endif
81
#ifdef SIGDANGER
82
#define HAD_SIGDANGER 1
83
"System crash soon", "DANGER", SIGDANGER,
84
#endif
85
#ifdef SIGDEBUG
86
#define HAD_SIGDEBUG 1
87
"Debug trap", "DEBUG", SIGDEBUG,
88
#endif
89
#ifdef SIGDIL
90
#define HAD_SIGDIL 1
91
"DIL trap", "DIL", SIGDIL,
92
#endif
93
#ifdef SIGEMT
94
#define HAD_SIGEMT 1
95
"EMT trap", "EMT", SIGEMT,
96
#endif
97
#ifdef SIGERR
98
#define HAD_SIGERR 1
99
"ERR trap", "ERR", SIGERR,
100
#endif
101
#ifdef SIGEXIT
102
#define HAD_SIGEXIT 1
103
"Exit", "EXIT", SIGEXIT,
104
#endif
105
#ifdef SIGFPE
106
#define HAD_SIGFPE 1
107
"Floating exception", "FPE", SIGFPE,
108
#endif
109
#ifdef SIGFREEZE
110
#define HAD_SIGFREEZE 1
111
"CPR freeze", "FREEZE", SIGFREEZE,
112
#endif
113
#ifdef SIGHUP
114
#define HAD_SIGHUP 1
115
"Hangup", "HUP", SIGHUP,
116
#endif
117
#ifdef SIGILL
118
#define HAD_SIGILL 1
119
"Illegal instruction", "ILL", SIGILL,
120
#endif
121
#ifdef SIGINT
122
#define HAD_SIGINT 1
123
"Interrupt", "INT", SIGINT,
124
#endif
125
#ifdef SIGIO
126
#define HAD_SIGIO 1
127
"IO possible", "IO", SIGIO,
128
#endif
129
#ifdef SIGIOT
130
#define HAD_SIGIOT 1
131
"IOT trap", "IOT", SIGIOT,
132
#endif
133
#ifdef SIGKILL
134
#define HAD_SIGKILL 1
135
"Killed", "KILL", SIGKILL,
136
#endif
137
#ifdef SIGLAB
138
#define HAD_SIGLAB 1
139
"Security label changed", "LAB", SIGLAB,
140
#endif
141
#ifdef SIGLOST
142
#define HAD_SIGLOST 1
143
"Resources lost", "LOST", SIGLOST,
144
#endif
145
#ifdef SIGLWP
146
#define HAD_SIGLWP 1
147
"Thread event", "LWP", SIGLWP,
148
#endif
149
#ifdef SIGMIGRATE
150
#define HAD_SIGMIGRATE 1
151
"Migrate process", "MIGRATE", SIGMIGRATE,
152
#endif
153
#ifdef SIGPHONE
154
#define HAD_SIGPHONE 1
155
"Phone status change", "PHONE", SIGPHONE,
156
#endif
157
#ifdef SIGPIPE
158
#define HAD_SIGPIPE 1
159
"Broken pipe", "PIPE", SIGPIPE,
160
#endif
161
#ifdef SIGPOLL
162
#define HAD_SIGPOLL 1
163
"Poll event", "POLL", SIGPOLL,
164
#endif
165
#ifdef SIGPROF
166
#define HAD_SIGPROF 1
167
"Profile timer alarm", "PROF", SIGPROF,
168
#endif
169
#ifdef SIGPWR
170
#define HAD_SIGPWR 1
171
"Power fail", "PWR", SIGPWR,
172
#endif
173
#ifdef SIGQUIT
174
#define HAD_SIGQUIT 1
175
"Quit", "QUIT", SIGQUIT,
176
#endif
177
#ifdef SIGSEGV
178
#define HAD_SIGSEGV 1
179
"Memory fault", "SEGV", SIGSEGV,
180
#endif
181
#ifdef SIGSOUND
182
#define HAD_SIGSOUND 1
183
"Sound completed", "SOUND", SIGSOUND,
184
#endif
185
#ifdef SIGSSTOP
186
#define HAD_SIGSSTOP 1
187
"Sendable stop", "SSTOP", SIGSSTOP,
188
#endif
189
#ifdef SIGSTKFLT
190
#define HAD_SIGSTKFLT 1
191
"Stack fault", "STKFLT", SIGSTKFLT,
192
#endif
193
#ifdef gould
194
#define HAD_gould 1
195
"Stack overflow", "STKOV", 28,
196
#endif
197
#ifdef SIGSTOP
198
#define HAD_SIGSTOP 1
199
"Stopped (signal)", "STOP", SIGSTOP,
200
#endif
201
#ifdef SIGSYS
202
#define HAD_SIGSYS 1
203
"Bad system call", "SYS", SIGSYS,
204
#endif
205
#ifdef SIGTERM
206
#define HAD_SIGTERM 1
207
"Terminated", "TERM", SIGTERM,
208
#endif
209
#ifdef SIGTHAW
210
#define HAD_SIGTHAW 1
211
"CPR thaw", "THAW", SIGTHAW,
212
#endif
213
#ifdef SIGTINT
214
#define HAD_SIGTINT 1
215
"Interrupt (terminal)", "TINT", SIGTINT,
216
#endif
217
#ifdef SIGTRAP
218
#define HAD_SIGTRAP 1
219
"Trace trap", "TRAP", SIGTRAP,
220
#endif
221
#ifdef SIGTSTP
222
#define HAD_SIGTSTP 1
223
"Stopped", "TSTP", SIGTSTP,
224
#endif
225
#ifdef SIGTTIN
226
#define HAD_SIGTTIN 1
227
"Stopped (tty input)", "TTIN", SIGTTIN,
228
#endif
229
#ifdef SIGTTOU
230
#define HAD_SIGTTOU 1
231
"Stopped (tty output)", "TTOU", SIGTTOU,
232
#endif
233
#ifdef SIGURG
234
#define HAD_SIGURG 1
235
"Urgent IO", "URG", SIGURG,
236
#endif
237
#ifdef SIGUSR1
238
#define HAD_SIGUSR1 1
239
"User signal 1", "USR1", SIGUSR1,
240
#endif
241
#ifdef SIGUSR2
242
#define HAD_SIGUSR2 1
243
"User signal 2", "USR2", SIGUSR2,
244
#endif
245
#ifdef SIGVTALRM
246
#define HAD_SIGVTALRM 1
247
"Virtual timer alarm", "VTALRM", SIGVTALRM,
248
#endif
249
#ifdef SIGWAITING
250
#define HAD_SIGWAITING 1
251
"All threads blocked", "WAITING", SIGWAITING,
252
#endif
253
#ifdef SIGWINCH
254
#define HAD_SIGWINCH 1
255
"Window change", "WINCH", SIGWINCH,
256
#endif
257
#ifdef SIGWIND
258
#define HAD_SIGWIND 1
259
"Window change", "WIND", SIGWIND,
260
#endif
261
#ifdef SIGWINDOW
262
#define HAD_SIGWINDOW 1
263
"Window change", "WINDOW", SIGWINDOW,
264
#endif
265
#ifdef SIGXCPU
266
#define HAD_SIGXCPU 1
267
"CPU time limit", "XCPU", SIGXCPU,
268
#endif
269
#ifdef SIGXFSZ
270
#define HAD_SIGXFSZ 1
271
"File size limit", "XFSZ", SIGXFSZ,
272
#endif
273
#include "FEATURE/siglist"
274
0
275
};
276
277
#define RANGE_MIN (1<<14)
278
#define RANGE_MAX (1<<13)
279
#define RANGE_RT (1<<12)
280
281
#define RANGE_SIG (~(RANGE_MIN|RANGE_MAX|RANGE_RT))
282
283
static int mapindex[1024];
284
285
#if _lib_strsignal
286
extern char* strsignal(int);
287
#endif
288
289
int
290
main()
291
{
292
register int i;
293
register int j;
294
register int k;
295
int m;
296
int n;
297
#if _lib_strsignal
298
char* s;
299
#endif
300
301
k = 0;
302
for (i = 0; map[i].name; i++)
303
if ((j = map[i].value) > 0 && j < elementsof(mapindex) && !mapindex[j])
304
{
305
if (j > k)
306
k = j;
307
mapindex[j] = i;
308
}
309
#ifdef SIGRTMIN
310
i = SIGRTMIN;
311
#ifdef SIGRTMAX
312
j = SIGRTMAX;
313
#else
314
j = i;
315
#endif
316
if (j >= elementsof(mapindex))
317
j = elementsof(mapindex) - 1;
318
if (i <= j && i > 0 && i < elementsof(mapindex) && j > 0 && j < elementsof(mapindex))
319
{
320
if (j > k)
321
k = j;
322
mapindex[i] = RANGE_MIN | RANGE_RT;
323
n = 1;
324
while (++i < j)
325
mapindex[i] = RANGE_RT | n++;
326
mapindex[j] = RANGE_MAX | RANGE_RT | n;
327
}
328
#endif
329
printf("#pragma prototyped\n");
330
printf("#define SIG_MAX %d\n", k);
331
printf("\n");
332
printf("static const char* const sig_name[] =\n");
333
printf("{\n");
334
for (i = 0; i <= k; i++)
335
if (!(j = mapindex[i]))
336
printf(" \"%d\",\n", i);
337
else if (j & RANGE_RT)
338
{
339
if (j & RANGE_MIN)
340
printf(" \"RTMIN\",\n");
341
else if (j & RANGE_MAX)
342
printf(" \"RTMAX\",\n");
343
else
344
{
345
m = j & RANGE_SIG;
346
if (m > n / 2)
347
printf(" \"RTMAX-%d\",\n", n - m);
348
else
349
printf(" \"RTMIN+%d\",\n", m);
350
}
351
}
352
else
353
printf(" \"%s\",\n", map[j].name);
354
printf(" 0\n");
355
printf("};\n");
356
printf("\n");
357
printf("static const char* const sig_text[] =\n");
358
printf("{\n");
359
for (i = 0; i <= k; i++)
360
if (!(j = mapindex[i]))
361
printf(" \"Signal %d\",\n", i);
362
else if (j & RANGE_RT)
363
printf(" \"Realtime priority %d%s\",\n", j & RANGE_SIG, (j & RANGE_MIN) ? " (lo)" : (j & RANGE_MAX) ? " (hi)" : "");
364
else if (map[j].text)
365
printf(" \"%s\",\n", map[j].text);
366
#if _lib_strsignal
367
else if (s = strsignal(i))
368
printf(" \"%s\",\n", s);
369
#endif
370
else
371
printf(" \"Signal %d\",\n", i);
372
printf(" 0\n");
373
printf("};\n");
374
return 0;
375
}
376
377