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 <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
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
main()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