1da2e3ebdSchin /***********************************************************************
2da2e3ebdSchin * *
3da2e3ebdSchin * This software is part of the ast package *
4*b30d1939SAndy Fiddaman * Copyright (c) 1985-2012 AT&T Intellectual Property *
5da2e3ebdSchin * and is licensed under the *
6*b30d1939SAndy Fiddaman * Eclipse Public License, Version 1.0 *
77c2fbfb3SApril Chin * by AT&T Intellectual Property *
8da2e3ebdSchin * *
9da2e3ebdSchin * A copy of the License is available at *
10*b30d1939SAndy Fiddaman * http://www.eclipse.org/org/documents/epl-v10.html *
11*b30d1939SAndy Fiddaman * (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12da2e3ebdSchin * *
13da2e3ebdSchin * Information and Software Systems Research *
14da2e3ebdSchin * AT&T Research *
15da2e3ebdSchin * Florham Park NJ *
16da2e3ebdSchin * *
17da2e3ebdSchin * Glenn Fowler <gsf@research.att.com> *
18da2e3ebdSchin * David Korn <dgk@research.att.com> *
19da2e3ebdSchin * Phong Vo <kpv@research.att.com> *
20da2e3ebdSchin * *
21da2e3ebdSchin ***********************************************************************/
22da2e3ebdSchin #pragma prototyped
23da2e3ebdSchin /*
24da2e3ebdSchin * Glenn Fowler
257c2fbfb3SApril Chin * AT&T Research
26da2e3ebdSchin *
27da2e3ebdSchin * generate signal features
28da2e3ebdSchin */
29da2e3ebdSchin
307c2fbfb3SApril Chin #include "FEATURE/standards"
317c2fbfb3SApril Chin
327c2fbfb3SApril Chin #define strsignal ______strsignal
337c2fbfb3SApril Chin
34da2e3ebdSchin #include <signal.h>
35da2e3ebdSchin
367c2fbfb3SApril Chin #undef strsignal
377c2fbfb3SApril Chin
38da2e3ebdSchin struct _m_
39da2e3ebdSchin {
40da2e3ebdSchin char* text;
41da2e3ebdSchin char* name;
42da2e3ebdSchin int value;
43da2e3ebdSchin };
44da2e3ebdSchin
45da2e3ebdSchin #define elementsof(x) (sizeof(x)/sizeof(x[0]))
46da2e3ebdSchin
47da2e3ebdSchin static struct _m_ map[] =
48da2e3ebdSchin {
49da2e3ebdSchin #ifdef SIGABRT
507c2fbfb3SApril Chin #define HAD_SIGABRT 1
51da2e3ebdSchin "Abort", "ABRT", SIGABRT,
52da2e3ebdSchin #endif
53da2e3ebdSchin #ifdef SIGAIO
547c2fbfb3SApril Chin #define HAD_SIGAIO 1
55da2e3ebdSchin "Asynchronous I/O", "AIO", SIGAIO,
56da2e3ebdSchin #endif
57da2e3ebdSchin #ifdef SIGALRM
587c2fbfb3SApril Chin #define HAD_SIGALRM 1
59da2e3ebdSchin "Alarm call", "ALRM", SIGALRM,
60da2e3ebdSchin #endif
61da2e3ebdSchin #ifdef SIGAPOLLO
627c2fbfb3SApril Chin #define HAD_SIGAPOLLO 1
63da2e3ebdSchin "Apollo", "APOLLO", SIGAPOLLO,
64da2e3ebdSchin #endif
65da2e3ebdSchin #ifdef SIGBUS
667c2fbfb3SApril Chin #define HAD_SIGBUS 1
67da2e3ebdSchin "Bus error", "BUS", SIGBUS,
68da2e3ebdSchin #endif
69da2e3ebdSchin #ifdef SIGCHLD
707c2fbfb3SApril Chin #define HAD_SIGCHLD 1
71da2e3ebdSchin "Child status change", "CHLD", SIGCHLD,
72da2e3ebdSchin #endif
73da2e3ebdSchin #ifdef SIGCLD
747c2fbfb3SApril Chin #define HAD_SIGCLD 1
75da2e3ebdSchin "Death of child", "CLD", SIGCLD,
76da2e3ebdSchin #endif
77da2e3ebdSchin #ifdef SIGCONT
787c2fbfb3SApril Chin #define HAD_SIGCONT 1
79da2e3ebdSchin "Stopped process continued", "CONT", SIGCONT,
80da2e3ebdSchin #endif
81da2e3ebdSchin #ifdef SIGDANGER
827c2fbfb3SApril Chin #define HAD_SIGDANGER 1
83da2e3ebdSchin "System crash soon", "DANGER", SIGDANGER,
84da2e3ebdSchin #endif
85da2e3ebdSchin #ifdef SIGDEBUG
867c2fbfb3SApril Chin #define HAD_SIGDEBUG 1
87da2e3ebdSchin "Debug trap", "DEBUG", SIGDEBUG,
88da2e3ebdSchin #endif
89da2e3ebdSchin #ifdef SIGDIL
907c2fbfb3SApril Chin #define HAD_SIGDIL 1
91da2e3ebdSchin "DIL trap", "DIL", SIGDIL,
92da2e3ebdSchin #endif
93da2e3ebdSchin #ifdef SIGEMT
947c2fbfb3SApril Chin #define HAD_SIGEMT 1
95da2e3ebdSchin "EMT trap", "EMT", SIGEMT,
96da2e3ebdSchin #endif
97da2e3ebdSchin #ifdef SIGERR
987c2fbfb3SApril Chin #define HAD_SIGERR 1
99da2e3ebdSchin "ERR trap", "ERR", SIGERR,
100da2e3ebdSchin #endif
101da2e3ebdSchin #ifdef SIGEXIT
1027c2fbfb3SApril Chin #define HAD_SIGEXIT 1
103da2e3ebdSchin "Exit", "EXIT", SIGEXIT,
104da2e3ebdSchin #endif
105da2e3ebdSchin #ifdef SIGFPE
1067c2fbfb3SApril Chin #define HAD_SIGFPE 1
107da2e3ebdSchin "Floating exception", "FPE", SIGFPE,
108da2e3ebdSchin #endif
109da2e3ebdSchin #ifdef SIGFREEZE
1107c2fbfb3SApril Chin #define HAD_SIGFREEZE 1
111da2e3ebdSchin "CPR freeze", "FREEZE", SIGFREEZE,
112da2e3ebdSchin #endif
113da2e3ebdSchin #ifdef SIGHUP
1147c2fbfb3SApril Chin #define HAD_SIGHUP 1
115da2e3ebdSchin "Hangup", "HUP", SIGHUP,
116da2e3ebdSchin #endif
117da2e3ebdSchin #ifdef SIGILL
1187c2fbfb3SApril Chin #define HAD_SIGILL 1
119da2e3ebdSchin "Illegal instruction", "ILL", SIGILL,
120da2e3ebdSchin #endif
121da2e3ebdSchin #ifdef SIGINT
1227c2fbfb3SApril Chin #define HAD_SIGINT 1
123da2e3ebdSchin "Interrupt", "INT", SIGINT,
124da2e3ebdSchin #endif
125da2e3ebdSchin #ifdef SIGIO
1267c2fbfb3SApril Chin #define HAD_SIGIO 1
127da2e3ebdSchin "IO possible", "IO", SIGIO,
128da2e3ebdSchin #endif
129da2e3ebdSchin #ifdef SIGIOT
1307c2fbfb3SApril Chin #define HAD_SIGIOT 1
131da2e3ebdSchin "IOT trap", "IOT", SIGIOT,
132da2e3ebdSchin #endif
133da2e3ebdSchin #ifdef SIGKILL
1347c2fbfb3SApril Chin #define HAD_SIGKILL 1
135da2e3ebdSchin "Killed", "KILL", SIGKILL,
136da2e3ebdSchin #endif
137da2e3ebdSchin #ifdef SIGLAB
1387c2fbfb3SApril Chin #define HAD_SIGLAB 1
139da2e3ebdSchin "Security label changed", "LAB", SIGLAB,
140da2e3ebdSchin #endif
141da2e3ebdSchin #ifdef SIGLOST
1427c2fbfb3SApril Chin #define HAD_SIGLOST 1
143da2e3ebdSchin "Resources lost", "LOST", SIGLOST,
144da2e3ebdSchin #endif
145da2e3ebdSchin #ifdef SIGLWP
1467c2fbfb3SApril Chin #define HAD_SIGLWP 1
147da2e3ebdSchin "Thread event", "LWP", SIGLWP,
148da2e3ebdSchin #endif
149da2e3ebdSchin #ifdef SIGMIGRATE
1507c2fbfb3SApril Chin #define HAD_SIGMIGRATE 1
151da2e3ebdSchin "Migrate process", "MIGRATE", SIGMIGRATE,
152da2e3ebdSchin #endif
153da2e3ebdSchin #ifdef SIGPHONE
1547c2fbfb3SApril Chin #define HAD_SIGPHONE 1
155da2e3ebdSchin "Phone status change", "PHONE", SIGPHONE,
156da2e3ebdSchin #endif
157da2e3ebdSchin #ifdef SIGPIPE
1587c2fbfb3SApril Chin #define HAD_SIGPIPE 1
159da2e3ebdSchin "Broken pipe", "PIPE", SIGPIPE,
160da2e3ebdSchin #endif
161da2e3ebdSchin #ifdef SIGPOLL
1627c2fbfb3SApril Chin #define HAD_SIGPOLL 1
163da2e3ebdSchin "Poll event", "POLL", SIGPOLL,
164da2e3ebdSchin #endif
165da2e3ebdSchin #ifdef SIGPROF
1667c2fbfb3SApril Chin #define HAD_SIGPROF 1
167da2e3ebdSchin "Profile timer alarm", "PROF", SIGPROF,
168da2e3ebdSchin #endif
169da2e3ebdSchin #ifdef SIGPWR
1707c2fbfb3SApril Chin #define HAD_SIGPWR 1
171da2e3ebdSchin "Power fail", "PWR", SIGPWR,
172da2e3ebdSchin #endif
173da2e3ebdSchin #ifdef SIGQUIT
1747c2fbfb3SApril Chin #define HAD_SIGQUIT 1
175da2e3ebdSchin "Quit", "QUIT", SIGQUIT,
176da2e3ebdSchin #endif
177da2e3ebdSchin #ifdef SIGSEGV
1787c2fbfb3SApril Chin #define HAD_SIGSEGV 1
179da2e3ebdSchin "Memory fault", "SEGV", SIGSEGV,
180da2e3ebdSchin #endif
181da2e3ebdSchin #ifdef SIGSOUND
1827c2fbfb3SApril Chin #define HAD_SIGSOUND 1
183da2e3ebdSchin "Sound completed", "SOUND", SIGSOUND,
184da2e3ebdSchin #endif
185da2e3ebdSchin #ifdef SIGSSTOP
1867c2fbfb3SApril Chin #define HAD_SIGSSTOP 1
187da2e3ebdSchin "Sendable stop", "SSTOP", SIGSSTOP,
188da2e3ebdSchin #endif
189*b30d1939SAndy Fiddaman #ifdef SIGSTKFLT
190*b30d1939SAndy Fiddaman #define HAD_SIGSTKFLT 1
191*b30d1939SAndy Fiddaman "Stack fault", "STKFLT", SIGSTKFLT,
192*b30d1939SAndy Fiddaman #endif
193da2e3ebdSchin #ifdef gould
1947c2fbfb3SApril Chin #define HAD_gould 1
195da2e3ebdSchin "Stack overflow", "STKOV", 28,
196da2e3ebdSchin #endif
197da2e3ebdSchin #ifdef SIGSTOP
1987c2fbfb3SApril Chin #define HAD_SIGSTOP 1
199da2e3ebdSchin "Stopped (signal)", "STOP", SIGSTOP,
200da2e3ebdSchin #endif
201da2e3ebdSchin #ifdef SIGSYS
2027c2fbfb3SApril Chin #define HAD_SIGSYS 1
203da2e3ebdSchin "Bad system call", "SYS", SIGSYS,
204da2e3ebdSchin #endif
205da2e3ebdSchin #ifdef SIGTERM
2067c2fbfb3SApril Chin #define HAD_SIGTERM 1
207da2e3ebdSchin "Terminated", "TERM", SIGTERM,
208da2e3ebdSchin #endif
209da2e3ebdSchin #ifdef SIGTHAW
2107c2fbfb3SApril Chin #define HAD_SIGTHAW 1
211da2e3ebdSchin "CPR thaw", "THAW", SIGTHAW,
212da2e3ebdSchin #endif
213da2e3ebdSchin #ifdef SIGTINT
2147c2fbfb3SApril Chin #define HAD_SIGTINT 1
215da2e3ebdSchin "Interrupt (terminal)", "TINT", SIGTINT,
216da2e3ebdSchin #endif
217da2e3ebdSchin #ifdef SIGTRAP
2187c2fbfb3SApril Chin #define HAD_SIGTRAP 1
219da2e3ebdSchin "Trace trap", "TRAP", SIGTRAP,
220da2e3ebdSchin #endif
221da2e3ebdSchin #ifdef SIGTSTP
2227c2fbfb3SApril Chin #define HAD_SIGTSTP 1
223da2e3ebdSchin "Stopped", "TSTP", SIGTSTP,
224da2e3ebdSchin #endif
225da2e3ebdSchin #ifdef SIGTTIN
2267c2fbfb3SApril Chin #define HAD_SIGTTIN 1
227da2e3ebdSchin "Stopped (tty input)", "TTIN", SIGTTIN,
228da2e3ebdSchin #endif
229da2e3ebdSchin #ifdef SIGTTOU
2307c2fbfb3SApril Chin #define HAD_SIGTTOU 1
231da2e3ebdSchin "Stopped (tty output)", "TTOU", SIGTTOU,
232da2e3ebdSchin #endif
233da2e3ebdSchin #ifdef SIGURG
2347c2fbfb3SApril Chin #define HAD_SIGURG 1
235da2e3ebdSchin "Urgent IO", "URG", SIGURG,
236da2e3ebdSchin #endif
237da2e3ebdSchin #ifdef SIGUSR1
2387c2fbfb3SApril Chin #define HAD_SIGUSR1 1
239da2e3ebdSchin "User signal 1", "USR1", SIGUSR1,
240da2e3ebdSchin #endif
241da2e3ebdSchin #ifdef SIGUSR2
2427c2fbfb3SApril Chin #define HAD_SIGUSR2 1
243da2e3ebdSchin "User signal 2", "USR2", SIGUSR2,
244da2e3ebdSchin #endif
245da2e3ebdSchin #ifdef SIGVTALRM
2467c2fbfb3SApril Chin #define HAD_SIGVTALRM 1
247da2e3ebdSchin "Virtual timer alarm", "VTALRM", SIGVTALRM,
248da2e3ebdSchin #endif
249da2e3ebdSchin #ifdef SIGWAITING
2507c2fbfb3SApril Chin #define HAD_SIGWAITING 1
251da2e3ebdSchin "All threads blocked", "WAITING", SIGWAITING,
252da2e3ebdSchin #endif
253da2e3ebdSchin #ifdef SIGWINCH
2547c2fbfb3SApril Chin #define HAD_SIGWINCH 1
255da2e3ebdSchin "Window change", "WINCH", SIGWINCH,
256da2e3ebdSchin #endif
257da2e3ebdSchin #ifdef SIGWIND
2587c2fbfb3SApril Chin #define HAD_SIGWIND 1
259da2e3ebdSchin "Window change", "WIND", SIGWIND,
260da2e3ebdSchin #endif
261da2e3ebdSchin #ifdef SIGWINDOW
2627c2fbfb3SApril Chin #define HAD_SIGWINDOW 1
263da2e3ebdSchin "Window change", "WINDOW", SIGWINDOW,
264da2e3ebdSchin #endif
265da2e3ebdSchin #ifdef SIGXCPU
2667c2fbfb3SApril Chin #define HAD_SIGXCPU 1
267da2e3ebdSchin "CPU time limit", "XCPU", SIGXCPU,
268da2e3ebdSchin #endif
269da2e3ebdSchin #ifdef SIGXFSZ
2707c2fbfb3SApril Chin #define HAD_SIGXFSZ 1
271da2e3ebdSchin "File size limit", "XFSZ", SIGXFSZ,
272da2e3ebdSchin #endif
2737c2fbfb3SApril Chin #include "FEATURE/siglist"
274da2e3ebdSchin 0
275da2e3ebdSchin };
276da2e3ebdSchin
277da2e3ebdSchin #define RANGE_MIN (1<<14)
278da2e3ebdSchin #define RANGE_MAX (1<<13)
279da2e3ebdSchin #define RANGE_RT (1<<12)
280da2e3ebdSchin
281da2e3ebdSchin #define RANGE_SIG (~(RANGE_MIN|RANGE_MAX|RANGE_RT))
282da2e3ebdSchin
2837c2fbfb3SApril Chin static int mapindex[1024];
2847c2fbfb3SApril Chin
2857c2fbfb3SApril Chin #if _lib_strsignal
2867c2fbfb3SApril Chin extern char* strsignal(int);
2877c2fbfb3SApril Chin #endif
288da2e3ebdSchin
289da2e3ebdSchin int
main()290da2e3ebdSchin main()
291da2e3ebdSchin {
292da2e3ebdSchin register int i;
293da2e3ebdSchin register int j;
294da2e3ebdSchin register int k;
2957c2fbfb3SApril Chin int m;
296da2e3ebdSchin int n;
2977c2fbfb3SApril Chin #if _lib_strsignal
2987c2fbfb3SApril Chin char* s;
2997c2fbfb3SApril Chin #endif
300da2e3ebdSchin
301da2e3ebdSchin k = 0;
302da2e3ebdSchin for (i = 0; map[i].name; i++)
3037c2fbfb3SApril Chin if ((j = map[i].value) > 0 && j < elementsof(mapindex) && !mapindex[j])
304da2e3ebdSchin {
3057c2fbfb3SApril Chin if (j > k)
3067c2fbfb3SApril Chin k = j;
3077c2fbfb3SApril Chin mapindex[j] = i;
308da2e3ebdSchin }
309da2e3ebdSchin #ifdef SIGRTMIN
310*b30d1939SAndy Fiddaman i = _SIGRTMIN;
311da2e3ebdSchin #ifdef SIGRTMAX
312*b30d1939SAndy Fiddaman j = _SIGRTMAX;
313da2e3ebdSchin #else
314da2e3ebdSchin j = i;
315da2e3ebdSchin #endif
3167c2fbfb3SApril Chin if (j >= elementsof(mapindex))
3177c2fbfb3SApril Chin j = elementsof(mapindex) - 1;
3187c2fbfb3SApril Chin if (i <= j && i > 0 && i < elementsof(mapindex) && j > 0 && j < elementsof(mapindex))
319da2e3ebdSchin {
3207c2fbfb3SApril Chin if (j > k)
3217c2fbfb3SApril Chin k = j;
3227c2fbfb3SApril Chin mapindex[i] = RANGE_MIN | RANGE_RT;
323da2e3ebdSchin n = 1;
324da2e3ebdSchin while (++i < j)
3257c2fbfb3SApril Chin mapindex[i] = RANGE_RT | n++;
3267c2fbfb3SApril Chin mapindex[j] = RANGE_MAX | RANGE_RT | n;
327da2e3ebdSchin }
328da2e3ebdSchin #endif
329da2e3ebdSchin printf("#pragma prototyped\n");
330da2e3ebdSchin printf("#define SIG_MAX %d\n", k);
331da2e3ebdSchin printf("\n");
332da2e3ebdSchin printf("static const char* const sig_name[] =\n");
333da2e3ebdSchin printf("{\n");
334da2e3ebdSchin for (i = 0; i <= k; i++)
3357c2fbfb3SApril Chin if (!(j = mapindex[i]))
3367c2fbfb3SApril Chin printf(" \"%d\",\n", i);
337da2e3ebdSchin else if (j & RANGE_RT)
338da2e3ebdSchin {
3397c2fbfb3SApril Chin if (j & RANGE_MIN)
3407c2fbfb3SApril Chin printf(" \"RTMIN\",\n");
3417c2fbfb3SApril Chin else if (j & RANGE_MAX)
3427c2fbfb3SApril Chin printf(" \"RTMAX\",\n");
3437c2fbfb3SApril Chin else
3447c2fbfb3SApril Chin {
3457c2fbfb3SApril Chin m = j & RANGE_SIG;
3467c2fbfb3SApril Chin if (m > n / 2)
3477c2fbfb3SApril Chin printf(" \"RTMAX-%d\",\n", n - m);
3487c2fbfb3SApril Chin else
3497c2fbfb3SApril Chin printf(" \"RTMIN+%d\",\n", m);
3507c2fbfb3SApril Chin }
351da2e3ebdSchin }
3527c2fbfb3SApril Chin else
3537c2fbfb3SApril Chin printf(" \"%s\",\n", map[j].name);
354da2e3ebdSchin printf(" 0\n");
355da2e3ebdSchin printf("};\n");
356da2e3ebdSchin printf("\n");
357da2e3ebdSchin printf("static const char* const sig_text[] =\n");
358da2e3ebdSchin printf("{\n");
359da2e3ebdSchin for (i = 0; i <= k; i++)
3607c2fbfb3SApril Chin if (!(j = mapindex[i]))
3617c2fbfb3SApril Chin printf(" \"Signal %d\",\n", i);
3627c2fbfb3SApril Chin else if (j & RANGE_RT)
3637c2fbfb3SApril Chin printf(" \"Realtime priority %d%s\",\n", j & RANGE_SIG, (j & RANGE_MIN) ? " (lo)" : (j & RANGE_MAX) ? " (hi)" : "");
3647c2fbfb3SApril Chin else if (map[j].text)
3657c2fbfb3SApril Chin printf(" \"%s\",\n", map[j].text);
3667c2fbfb3SApril Chin #if _lib_strsignal
3677c2fbfb3SApril Chin else if (s = strsignal(i))
3687c2fbfb3SApril Chin printf(" \"%s\",\n", s);
3697c2fbfb3SApril Chin #endif
3707c2fbfb3SApril Chin else
3717c2fbfb3SApril Chin printf(" \"Signal %d\",\n", i);
372da2e3ebdSchin printf(" 0\n");
373da2e3ebdSchin printf("};\n");
374da2e3ebdSchin return 0;
375da2e3ebdSchin }
376