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