1da2e3ebdSchin /***********************************************************************
2da2e3ebdSchin * *
3da2e3ebdSchin * This software is part of the ast package *
4*3e14f97fSRoger A. Faulkner * Copyright (c) 1985-2010 AT&T Intellectual Property *
5da2e3ebdSchin * and is licensed under the *
6da2e3ebdSchin * Common Public License, Version 1.0 *
77c2fbfb3SApril Chin * by AT&T Intellectual Property *
8da2e3ebdSchin * *
9da2e3ebdSchin * A copy of the License is available at *
10da2e3ebdSchin * http://www.opensource.org/licenses/cpl1.0.txt *
11da2e3ebdSchin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
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
189da2e3ebdSchin #ifdef gould
1907c2fbfb3SApril Chin #define HAD_gould 1
191da2e3ebdSchin "Stack overflow", "STKOV", 28,
192da2e3ebdSchin #endif
193da2e3ebdSchin #ifdef SIGSTOP
1947c2fbfb3SApril Chin #define HAD_SIGSTOP 1
195da2e3ebdSchin "Stopped (signal)", "STOP", SIGSTOP,
196da2e3ebdSchin #endif
197da2e3ebdSchin #ifdef SIGSYS
1987c2fbfb3SApril Chin #define HAD_SIGSYS 1
199da2e3ebdSchin "Bad system call", "SYS", SIGSYS,
200da2e3ebdSchin #endif
201da2e3ebdSchin #ifdef SIGTERM
2027c2fbfb3SApril Chin #define HAD_SIGTERM 1
203da2e3ebdSchin "Terminated", "TERM", SIGTERM,
204da2e3ebdSchin #endif
205da2e3ebdSchin #ifdef SIGTHAW
2067c2fbfb3SApril Chin #define HAD_SIGTHAW 1
207da2e3ebdSchin "CPR thaw", "THAW", SIGTHAW,
208da2e3ebdSchin #endif
209da2e3ebdSchin #ifdef SIGTINT
2107c2fbfb3SApril Chin #define HAD_SIGTINT 1
211da2e3ebdSchin "Interrupt (terminal)", "TINT", SIGTINT,
212da2e3ebdSchin #endif
213da2e3ebdSchin #ifdef SIGTRAP
2147c2fbfb3SApril Chin #define HAD_SIGTRAP 1
215da2e3ebdSchin "Trace trap", "TRAP", SIGTRAP,
216da2e3ebdSchin #endif
217da2e3ebdSchin #ifdef SIGTSTP
2187c2fbfb3SApril Chin #define HAD_SIGTSTP 1
219da2e3ebdSchin "Stopped", "TSTP", SIGTSTP,
220da2e3ebdSchin #endif
221da2e3ebdSchin #ifdef SIGTTIN
2227c2fbfb3SApril Chin #define HAD_SIGTTIN 1
223da2e3ebdSchin "Stopped (tty input)", "TTIN", SIGTTIN,
224da2e3ebdSchin #endif
225da2e3ebdSchin #ifdef SIGTTOU
2267c2fbfb3SApril Chin #define HAD_SIGTTOU 1
227da2e3ebdSchin "Stopped (tty output)", "TTOU", SIGTTOU,
228da2e3ebdSchin #endif
229da2e3ebdSchin #ifdef SIGURG
2307c2fbfb3SApril Chin #define HAD_SIGURG 1
231da2e3ebdSchin "Urgent IO", "URG", SIGURG,
232da2e3ebdSchin #endif
233da2e3ebdSchin #ifdef SIGUSR1
2347c2fbfb3SApril Chin #define HAD_SIGUSR1 1
235da2e3ebdSchin "User signal 1", "USR1", SIGUSR1,
236da2e3ebdSchin #endif
237da2e3ebdSchin #ifdef SIGUSR2
2387c2fbfb3SApril Chin #define HAD_SIGUSR2 1
239da2e3ebdSchin "User signal 2", "USR2", SIGUSR2,
240da2e3ebdSchin #endif
241da2e3ebdSchin #ifdef SIGVTALRM
2427c2fbfb3SApril Chin #define HAD_SIGVTALRM 1
243da2e3ebdSchin "Virtual timer alarm", "VTALRM", SIGVTALRM,
244da2e3ebdSchin #endif
245da2e3ebdSchin #ifdef SIGWAITING
2467c2fbfb3SApril Chin #define HAD_SIGWAITING 1
247da2e3ebdSchin "All threads blocked", "WAITING", SIGWAITING,
248da2e3ebdSchin #endif
249da2e3ebdSchin #ifdef SIGWINCH
2507c2fbfb3SApril Chin #define HAD_SIGWINCH 1
251da2e3ebdSchin "Window change", "WINCH", SIGWINCH,
252da2e3ebdSchin #endif
253da2e3ebdSchin #ifdef SIGWIND
2547c2fbfb3SApril Chin #define HAD_SIGWIND 1
255da2e3ebdSchin "Window change", "WIND", SIGWIND,
256da2e3ebdSchin #endif
257da2e3ebdSchin #ifdef SIGWINDOW
2587c2fbfb3SApril Chin #define HAD_SIGWINDOW 1
259da2e3ebdSchin "Window change", "WINDOW", SIGWINDOW,
260da2e3ebdSchin #endif
261da2e3ebdSchin #ifdef SIGXCPU
2627c2fbfb3SApril Chin #define HAD_SIGXCPU 1
263da2e3ebdSchin "CPU time limit", "XCPU", SIGXCPU,
264da2e3ebdSchin #endif
265da2e3ebdSchin #ifdef SIGXFSZ
2667c2fbfb3SApril Chin #define HAD_SIGXFSZ 1
267da2e3ebdSchin "File size limit", "XFSZ", SIGXFSZ,
268da2e3ebdSchin #endif
2697c2fbfb3SApril Chin #include "FEATURE/siglist"
270da2e3ebdSchin 0
271da2e3ebdSchin };
272da2e3ebdSchin
273da2e3ebdSchin #define RANGE_MIN (1<<14)
274da2e3ebdSchin #define RANGE_MAX (1<<13)
275da2e3ebdSchin #define RANGE_RT (1<<12)
276da2e3ebdSchin
277da2e3ebdSchin #define RANGE_SIG (~(RANGE_MIN|RANGE_MAX|RANGE_RT))
278da2e3ebdSchin
2797c2fbfb3SApril Chin static int mapindex[1024];
2807c2fbfb3SApril Chin
2817c2fbfb3SApril Chin #if _lib_strsignal
2827c2fbfb3SApril Chin extern char* strsignal(int);
2837c2fbfb3SApril Chin #endif
284da2e3ebdSchin
285da2e3ebdSchin int
main()286da2e3ebdSchin main()
287da2e3ebdSchin {
288da2e3ebdSchin register int i;
289da2e3ebdSchin register int j;
290da2e3ebdSchin register int k;
2917c2fbfb3SApril Chin int m;
292da2e3ebdSchin int n;
2937c2fbfb3SApril Chin #if _lib_strsignal
2947c2fbfb3SApril Chin char* s;
2957c2fbfb3SApril Chin #endif
296da2e3ebdSchin
297da2e3ebdSchin k = 0;
298da2e3ebdSchin for (i = 0; map[i].name; i++)
2997c2fbfb3SApril Chin if ((j = map[i].value) > 0 && j < elementsof(mapindex) && !mapindex[j])
300da2e3ebdSchin {
3017c2fbfb3SApril Chin if (j > k)
3027c2fbfb3SApril Chin k = j;
3037c2fbfb3SApril Chin mapindex[j] = i;
304da2e3ebdSchin }
305da2e3ebdSchin #ifdef SIGRTMIN
306da2e3ebdSchin i = SIGRTMIN;
307da2e3ebdSchin #ifdef SIGRTMAX
308da2e3ebdSchin j = SIGRTMAX;
309da2e3ebdSchin #else
310da2e3ebdSchin j = i;
311da2e3ebdSchin #endif
3127c2fbfb3SApril Chin if (j >= elementsof(mapindex))
3137c2fbfb3SApril Chin j = elementsof(mapindex) - 1;
3147c2fbfb3SApril Chin if (i <= j && i > 0 && i < elementsof(mapindex) && j > 0 && j < elementsof(mapindex))
315da2e3ebdSchin {
3167c2fbfb3SApril Chin if (j > k)
3177c2fbfb3SApril Chin k = j;
3187c2fbfb3SApril Chin mapindex[i] = RANGE_MIN | RANGE_RT;
319da2e3ebdSchin n = 1;
320da2e3ebdSchin while (++i < j)
3217c2fbfb3SApril Chin mapindex[i] = RANGE_RT | n++;
3227c2fbfb3SApril Chin mapindex[j] = RANGE_MAX | RANGE_RT | n;
323da2e3ebdSchin }
324da2e3ebdSchin #endif
325da2e3ebdSchin printf("#pragma prototyped\n");
326da2e3ebdSchin printf("#define SIG_MAX %d\n", k);
327da2e3ebdSchin printf("\n");
328da2e3ebdSchin printf("static const char* const sig_name[] =\n");
329da2e3ebdSchin printf("{\n");
330da2e3ebdSchin for (i = 0; i <= k; i++)
3317c2fbfb3SApril Chin if (!(j = mapindex[i]))
3327c2fbfb3SApril Chin printf(" \"%d\",\n", i);
333da2e3ebdSchin else if (j & RANGE_RT)
334da2e3ebdSchin {
3357c2fbfb3SApril Chin if (j & RANGE_MIN)
3367c2fbfb3SApril Chin printf(" \"RTMIN\",\n");
3377c2fbfb3SApril Chin else if (j & RANGE_MAX)
3387c2fbfb3SApril Chin printf(" \"RTMAX\",\n");
3397c2fbfb3SApril Chin else
3407c2fbfb3SApril Chin {
3417c2fbfb3SApril Chin m = j & RANGE_SIG;
3427c2fbfb3SApril Chin if (m > n / 2)
3437c2fbfb3SApril Chin printf(" \"RTMAX-%d\",\n", n - m);
3447c2fbfb3SApril Chin else
3457c2fbfb3SApril Chin printf(" \"RTMIN+%d\",\n", m);
346da2e3ebdSchin }
3477c2fbfb3SApril Chin }
3487c2fbfb3SApril Chin else
3497c2fbfb3SApril Chin printf(" \"%s\",\n", map[j].name);
350da2e3ebdSchin printf(" 0\n");
351da2e3ebdSchin printf("};\n");
352da2e3ebdSchin printf("\n");
353da2e3ebdSchin printf("static const char* const sig_text[] =\n");
354da2e3ebdSchin printf("{\n");
355da2e3ebdSchin for (i = 0; i <= k; i++)
3567c2fbfb3SApril Chin if (!(j = mapindex[i]))
3577c2fbfb3SApril Chin printf(" \"Signal %d\",\n", i);
3587c2fbfb3SApril Chin else if (j & RANGE_RT)
3597c2fbfb3SApril Chin printf(" \"Realtime priority %d%s\",\n", j & RANGE_SIG, (j & RANGE_MIN) ? " (lo)" : (j & RANGE_MAX) ? " (hi)" : "");
3607c2fbfb3SApril Chin else if (map[j].text)
3617c2fbfb3SApril Chin printf(" \"%s\",\n", map[j].text);
3627c2fbfb3SApril Chin #if _lib_strsignal
3637c2fbfb3SApril Chin else if (s = strsignal(i))
3647c2fbfb3SApril Chin printf(" \"%s\",\n", s);
3657c2fbfb3SApril Chin #endif
3667c2fbfb3SApril Chin else
3677c2fbfb3SApril Chin printf(" \"Signal %d\",\n", i);
368da2e3ebdSchin printf(" 0\n");
369da2e3ebdSchin printf("};\n");
370da2e3ebdSchin return 0;
371da2e3ebdSchin }
372