14887Schin /***********************************************************************
24887Schin * *
34887Schin * This software is part of the ast package *
4*12068SRoger.Faulkner@Oracle.COM * Copyright (c) 1985-2010 AT&T Intellectual Property *
54887Schin * and is licensed under the *
64887Schin * Common Public License, Version 1.0 *
78462SApril.Chin@Sun.COM * by AT&T Intellectual Property *
84887Schin * *
94887Schin * A copy of the License is available at *
104887Schin * http://www.opensource.org/licenses/cpl1.0.txt *
114887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
124887Schin * *
134887Schin * Information and Software Systems Research *
144887Schin * AT&T Research *
154887Schin * Florham Park NJ *
164887Schin * *
174887Schin * Glenn Fowler <gsf@research.att.com> *
184887Schin * David Korn <dgk@research.att.com> *
194887Schin * Phong Vo <kpv@research.att.com> *
204887Schin * *
214887Schin ***********************************************************************/
224887Schin #pragma prototyped
234887Schin /*
244887Schin * Glenn Fowler
258462SApril.Chin@Sun.COM * AT&T Research
264887Schin *
274887Schin * generate signal features
284887Schin */
294887Schin
308462SApril.Chin@Sun.COM #include "FEATURE/standards"
318462SApril.Chin@Sun.COM
328462SApril.Chin@Sun.COM #define strsignal ______strsignal
338462SApril.Chin@Sun.COM
344887Schin #include <signal.h>
354887Schin
368462SApril.Chin@Sun.COM #undef strsignal
378462SApril.Chin@Sun.COM
384887Schin struct _m_
394887Schin {
404887Schin char* text;
414887Schin char* name;
424887Schin int value;
434887Schin };
444887Schin
454887Schin #define elementsof(x) (sizeof(x)/sizeof(x[0]))
464887Schin
474887Schin static struct _m_ map[] =
484887Schin {
494887Schin #ifdef SIGABRT
508462SApril.Chin@Sun.COM #define HAD_SIGABRT 1
514887Schin "Abort", "ABRT", SIGABRT,
524887Schin #endif
534887Schin #ifdef SIGAIO
548462SApril.Chin@Sun.COM #define HAD_SIGAIO 1
554887Schin "Asynchronous I/O", "AIO", SIGAIO,
564887Schin #endif
574887Schin #ifdef SIGALRM
588462SApril.Chin@Sun.COM #define HAD_SIGALRM 1
594887Schin "Alarm call", "ALRM", SIGALRM,
604887Schin #endif
614887Schin #ifdef SIGAPOLLO
628462SApril.Chin@Sun.COM #define HAD_SIGAPOLLO 1
634887Schin "Apollo", "APOLLO", SIGAPOLLO,
644887Schin #endif
654887Schin #ifdef SIGBUS
668462SApril.Chin@Sun.COM #define HAD_SIGBUS 1
674887Schin "Bus error", "BUS", SIGBUS,
684887Schin #endif
694887Schin #ifdef SIGCHLD
708462SApril.Chin@Sun.COM #define HAD_SIGCHLD 1
714887Schin "Child status change", "CHLD", SIGCHLD,
724887Schin #endif
734887Schin #ifdef SIGCLD
748462SApril.Chin@Sun.COM #define HAD_SIGCLD 1
754887Schin "Death of child", "CLD", SIGCLD,
764887Schin #endif
774887Schin #ifdef SIGCONT
788462SApril.Chin@Sun.COM #define HAD_SIGCONT 1
794887Schin "Stopped process continued", "CONT", SIGCONT,
804887Schin #endif
814887Schin #ifdef SIGDANGER
828462SApril.Chin@Sun.COM #define HAD_SIGDANGER 1
834887Schin "System crash soon", "DANGER", SIGDANGER,
844887Schin #endif
854887Schin #ifdef SIGDEBUG
868462SApril.Chin@Sun.COM #define HAD_SIGDEBUG 1
874887Schin "Debug trap", "DEBUG", SIGDEBUG,
884887Schin #endif
894887Schin #ifdef SIGDIL
908462SApril.Chin@Sun.COM #define HAD_SIGDIL 1
914887Schin "DIL trap", "DIL", SIGDIL,
924887Schin #endif
934887Schin #ifdef SIGEMT
948462SApril.Chin@Sun.COM #define HAD_SIGEMT 1
954887Schin "EMT trap", "EMT", SIGEMT,
964887Schin #endif
974887Schin #ifdef SIGERR
988462SApril.Chin@Sun.COM #define HAD_SIGERR 1
994887Schin "ERR trap", "ERR", SIGERR,
1004887Schin #endif
1014887Schin #ifdef SIGEXIT
1028462SApril.Chin@Sun.COM #define HAD_SIGEXIT 1
1034887Schin "Exit", "EXIT", SIGEXIT,
1044887Schin #endif
1054887Schin #ifdef SIGFPE
1068462SApril.Chin@Sun.COM #define HAD_SIGFPE 1
1074887Schin "Floating exception", "FPE", SIGFPE,
1084887Schin #endif
1094887Schin #ifdef SIGFREEZE
1108462SApril.Chin@Sun.COM #define HAD_SIGFREEZE 1
1114887Schin "CPR freeze", "FREEZE", SIGFREEZE,
1124887Schin #endif
1134887Schin #ifdef SIGHUP
1148462SApril.Chin@Sun.COM #define HAD_SIGHUP 1
1154887Schin "Hangup", "HUP", SIGHUP,
1164887Schin #endif
1174887Schin #ifdef SIGILL
1188462SApril.Chin@Sun.COM #define HAD_SIGILL 1
1194887Schin "Illegal instruction", "ILL", SIGILL,
1204887Schin #endif
1214887Schin #ifdef SIGINT
1228462SApril.Chin@Sun.COM #define HAD_SIGINT 1
1234887Schin "Interrupt", "INT", SIGINT,
1244887Schin #endif
1254887Schin #ifdef SIGIO
1268462SApril.Chin@Sun.COM #define HAD_SIGIO 1
1274887Schin "IO possible", "IO", SIGIO,
1284887Schin #endif
1294887Schin #ifdef SIGIOT
1308462SApril.Chin@Sun.COM #define HAD_SIGIOT 1
1314887Schin "IOT trap", "IOT", SIGIOT,
1324887Schin #endif
1334887Schin #ifdef SIGKILL
1348462SApril.Chin@Sun.COM #define HAD_SIGKILL 1
1354887Schin "Killed", "KILL", SIGKILL,
1364887Schin #endif
1374887Schin #ifdef SIGLAB
1388462SApril.Chin@Sun.COM #define HAD_SIGLAB 1
1394887Schin "Security label changed", "LAB", SIGLAB,
1404887Schin #endif
1414887Schin #ifdef SIGLOST
1428462SApril.Chin@Sun.COM #define HAD_SIGLOST 1
1434887Schin "Resources lost", "LOST", SIGLOST,
1444887Schin #endif
1454887Schin #ifdef SIGLWP
1468462SApril.Chin@Sun.COM #define HAD_SIGLWP 1
1474887Schin "Thread event", "LWP", SIGLWP,
1484887Schin #endif
1494887Schin #ifdef SIGMIGRATE
1508462SApril.Chin@Sun.COM #define HAD_SIGMIGRATE 1
1514887Schin "Migrate process", "MIGRATE", SIGMIGRATE,
1524887Schin #endif
1534887Schin #ifdef SIGPHONE
1548462SApril.Chin@Sun.COM #define HAD_SIGPHONE 1
1554887Schin "Phone status change", "PHONE", SIGPHONE,
1564887Schin #endif
1574887Schin #ifdef SIGPIPE
1588462SApril.Chin@Sun.COM #define HAD_SIGPIPE 1
1594887Schin "Broken pipe", "PIPE", SIGPIPE,
1604887Schin #endif
1614887Schin #ifdef SIGPOLL
1628462SApril.Chin@Sun.COM #define HAD_SIGPOLL 1
1634887Schin "Poll event", "POLL", SIGPOLL,
1644887Schin #endif
1654887Schin #ifdef SIGPROF
1668462SApril.Chin@Sun.COM #define HAD_SIGPROF 1
1674887Schin "Profile timer alarm", "PROF", SIGPROF,
1684887Schin #endif
1694887Schin #ifdef SIGPWR
1708462SApril.Chin@Sun.COM #define HAD_SIGPWR 1
1714887Schin "Power fail", "PWR", SIGPWR,
1724887Schin #endif
1734887Schin #ifdef SIGQUIT
1748462SApril.Chin@Sun.COM #define HAD_SIGQUIT 1
1754887Schin "Quit", "QUIT", SIGQUIT,
1764887Schin #endif
1774887Schin #ifdef SIGSEGV
1788462SApril.Chin@Sun.COM #define HAD_SIGSEGV 1
1794887Schin "Memory fault", "SEGV", SIGSEGV,
1804887Schin #endif
1814887Schin #ifdef SIGSOUND
1828462SApril.Chin@Sun.COM #define HAD_SIGSOUND 1
1834887Schin "Sound completed", "SOUND", SIGSOUND,
1844887Schin #endif
1854887Schin #ifdef SIGSSTOP
1868462SApril.Chin@Sun.COM #define HAD_SIGSSTOP 1
1874887Schin "Sendable stop", "SSTOP", SIGSSTOP,
1884887Schin #endif
1894887Schin #ifdef gould
1908462SApril.Chin@Sun.COM #define HAD_gould 1
1914887Schin "Stack overflow", "STKOV", 28,
1924887Schin #endif
1934887Schin #ifdef SIGSTOP
1948462SApril.Chin@Sun.COM #define HAD_SIGSTOP 1
1954887Schin "Stopped (signal)", "STOP", SIGSTOP,
1964887Schin #endif
1974887Schin #ifdef SIGSYS
1988462SApril.Chin@Sun.COM #define HAD_SIGSYS 1
1994887Schin "Bad system call", "SYS", SIGSYS,
2004887Schin #endif
2014887Schin #ifdef SIGTERM
2028462SApril.Chin@Sun.COM #define HAD_SIGTERM 1
2034887Schin "Terminated", "TERM", SIGTERM,
2044887Schin #endif
2054887Schin #ifdef SIGTHAW
2068462SApril.Chin@Sun.COM #define HAD_SIGTHAW 1
2074887Schin "CPR thaw", "THAW", SIGTHAW,
2084887Schin #endif
2094887Schin #ifdef SIGTINT
2108462SApril.Chin@Sun.COM #define HAD_SIGTINT 1
2114887Schin "Interrupt (terminal)", "TINT", SIGTINT,
2124887Schin #endif
2134887Schin #ifdef SIGTRAP
2148462SApril.Chin@Sun.COM #define HAD_SIGTRAP 1
2154887Schin "Trace trap", "TRAP", SIGTRAP,
2164887Schin #endif
2174887Schin #ifdef SIGTSTP
2188462SApril.Chin@Sun.COM #define HAD_SIGTSTP 1
2194887Schin "Stopped", "TSTP", SIGTSTP,
2204887Schin #endif
2214887Schin #ifdef SIGTTIN
2228462SApril.Chin@Sun.COM #define HAD_SIGTTIN 1
2234887Schin "Stopped (tty input)", "TTIN", SIGTTIN,
2244887Schin #endif
2254887Schin #ifdef SIGTTOU
2268462SApril.Chin@Sun.COM #define HAD_SIGTTOU 1
2274887Schin "Stopped (tty output)", "TTOU", SIGTTOU,
2284887Schin #endif
2294887Schin #ifdef SIGURG
2308462SApril.Chin@Sun.COM #define HAD_SIGURG 1
2314887Schin "Urgent IO", "URG", SIGURG,
2324887Schin #endif
2334887Schin #ifdef SIGUSR1
2348462SApril.Chin@Sun.COM #define HAD_SIGUSR1 1
2354887Schin "User signal 1", "USR1", SIGUSR1,
2364887Schin #endif
2374887Schin #ifdef SIGUSR2
2388462SApril.Chin@Sun.COM #define HAD_SIGUSR2 1
2394887Schin "User signal 2", "USR2", SIGUSR2,
2404887Schin #endif
2414887Schin #ifdef SIGVTALRM
2428462SApril.Chin@Sun.COM #define HAD_SIGVTALRM 1
2434887Schin "Virtual timer alarm", "VTALRM", SIGVTALRM,
2444887Schin #endif
2454887Schin #ifdef SIGWAITING
2468462SApril.Chin@Sun.COM #define HAD_SIGWAITING 1
2474887Schin "All threads blocked", "WAITING", SIGWAITING,
2484887Schin #endif
2494887Schin #ifdef SIGWINCH
2508462SApril.Chin@Sun.COM #define HAD_SIGWINCH 1
2514887Schin "Window change", "WINCH", SIGWINCH,
2524887Schin #endif
2534887Schin #ifdef SIGWIND
2548462SApril.Chin@Sun.COM #define HAD_SIGWIND 1
2554887Schin "Window change", "WIND", SIGWIND,
2564887Schin #endif
2574887Schin #ifdef SIGWINDOW
2588462SApril.Chin@Sun.COM #define HAD_SIGWINDOW 1
2594887Schin "Window change", "WINDOW", SIGWINDOW,
2604887Schin #endif
2614887Schin #ifdef SIGXCPU
2628462SApril.Chin@Sun.COM #define HAD_SIGXCPU 1
2634887Schin "CPU time limit", "XCPU", SIGXCPU,
2644887Schin #endif
2654887Schin #ifdef SIGXFSZ
2668462SApril.Chin@Sun.COM #define HAD_SIGXFSZ 1
2674887Schin "File size limit", "XFSZ", SIGXFSZ,
2684887Schin #endif
2698462SApril.Chin@Sun.COM #include "FEATURE/siglist"
2704887Schin 0
2714887Schin };
2724887Schin
2734887Schin #define RANGE_MIN (1<<14)
2744887Schin #define RANGE_MAX (1<<13)
2754887Schin #define RANGE_RT (1<<12)
2764887Schin
2774887Schin #define RANGE_SIG (~(RANGE_MIN|RANGE_MAX|RANGE_RT))
2784887Schin
2798462SApril.Chin@Sun.COM static int mapindex[1024];
2808462SApril.Chin@Sun.COM
2818462SApril.Chin@Sun.COM #if _lib_strsignal
2828462SApril.Chin@Sun.COM extern char* strsignal(int);
2838462SApril.Chin@Sun.COM #endif
2844887Schin
2854887Schin int
main()2864887Schin main()
2874887Schin {
2884887Schin register int i;
2894887Schin register int j;
2904887Schin register int k;
2918462SApril.Chin@Sun.COM int m;
2924887Schin int n;
2938462SApril.Chin@Sun.COM #if _lib_strsignal
2948462SApril.Chin@Sun.COM char* s;
2958462SApril.Chin@Sun.COM #endif
2964887Schin
2974887Schin k = 0;
2984887Schin for (i = 0; map[i].name; i++)
2998462SApril.Chin@Sun.COM if ((j = map[i].value) > 0 && j < elementsof(mapindex) && !mapindex[j])
3004887Schin {
3018462SApril.Chin@Sun.COM if (j > k)
3028462SApril.Chin@Sun.COM k = j;
3038462SApril.Chin@Sun.COM mapindex[j] = i;
3044887Schin }
3054887Schin #ifdef SIGRTMIN
3064887Schin i = SIGRTMIN;
3074887Schin #ifdef SIGRTMAX
3084887Schin j = SIGRTMAX;
3094887Schin #else
3104887Schin j = i;
3114887Schin #endif
3128462SApril.Chin@Sun.COM if (j >= elementsof(mapindex))
3138462SApril.Chin@Sun.COM j = elementsof(mapindex) - 1;
3148462SApril.Chin@Sun.COM if (i <= j && i > 0 && i < elementsof(mapindex) && j > 0 && j < elementsof(mapindex))
3154887Schin {
3168462SApril.Chin@Sun.COM if (j > k)
3178462SApril.Chin@Sun.COM k = j;
3188462SApril.Chin@Sun.COM mapindex[i] = RANGE_MIN | RANGE_RT;
3194887Schin n = 1;
3204887Schin while (++i < j)
3218462SApril.Chin@Sun.COM mapindex[i] = RANGE_RT | n++;
3228462SApril.Chin@Sun.COM mapindex[j] = RANGE_MAX | RANGE_RT | n;
3234887Schin }
3244887Schin #endif
3254887Schin printf("#pragma prototyped\n");
3264887Schin printf("#define SIG_MAX %d\n", k);
3274887Schin printf("\n");
3284887Schin printf("static const char* const sig_name[] =\n");
3294887Schin printf("{\n");
3304887Schin for (i = 0; i <= k; i++)
3318462SApril.Chin@Sun.COM if (!(j = mapindex[i]))
3328462SApril.Chin@Sun.COM printf(" \"%d\",\n", i);
3334887Schin else if (j & RANGE_RT)
3344887Schin {
3358462SApril.Chin@Sun.COM if (j & RANGE_MIN)
3368462SApril.Chin@Sun.COM printf(" \"RTMIN\",\n");
3378462SApril.Chin@Sun.COM else if (j & RANGE_MAX)
3388462SApril.Chin@Sun.COM printf(" \"RTMAX\",\n");
3398462SApril.Chin@Sun.COM else
3408462SApril.Chin@Sun.COM {
3418462SApril.Chin@Sun.COM m = j & RANGE_SIG;
3428462SApril.Chin@Sun.COM if (m > n / 2)
3438462SApril.Chin@Sun.COM printf(" \"RTMAX-%d\",\n", n - m);
3448462SApril.Chin@Sun.COM else
3458462SApril.Chin@Sun.COM printf(" \"RTMIN+%d\",\n", m);
3468462SApril.Chin@Sun.COM }
3474887Schin }
3488462SApril.Chin@Sun.COM else
3498462SApril.Chin@Sun.COM printf(" \"%s\",\n", map[j].name);
3504887Schin printf(" 0\n");
3514887Schin printf("};\n");
3524887Schin printf("\n");
3534887Schin printf("static const char* const sig_text[] =\n");
3544887Schin printf("{\n");
3554887Schin for (i = 0; i <= k; i++)
3568462SApril.Chin@Sun.COM if (!(j = mapindex[i]))
3578462SApril.Chin@Sun.COM printf(" \"Signal %d\",\n", i);
3588462SApril.Chin@Sun.COM else if (j & RANGE_RT)
3598462SApril.Chin@Sun.COM printf(" \"Realtime priority %d%s\",\n", j & RANGE_SIG, (j & RANGE_MIN) ? " (lo)" : (j & RANGE_MAX) ? " (hi)" : "");
3608462SApril.Chin@Sun.COM else if (map[j].text)
3618462SApril.Chin@Sun.COM printf(" \"%s\",\n", map[j].text);
3628462SApril.Chin@Sun.COM #if _lib_strsignal
3638462SApril.Chin@Sun.COM else if (s = strsignal(i))
3648462SApril.Chin@Sun.COM printf(" \"%s\",\n", s);
3658462SApril.Chin@Sun.COM #endif
3668462SApril.Chin@Sun.COM else
3678462SApril.Chin@Sun.COM printf(" \"Signal %d\",\n", i);
3684887Schin printf(" 0\n");
3694887Schin printf("};\n");
3704887Schin return 0;
3714887Schin }
372