14887Schin /*********************************************************************** 24887Schin * * 34887Schin * This software is part of the ast package * 4*8462SApril.Chin@Sun.COM * Copyright (c) 1985-2008 AT&T Intellectual Property * 54887Schin * and is licensed under the * 64887Schin * Common Public License, Version 1.0 * 7*8462SApril.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 25*8462SApril.Chin@Sun.COM * AT&T Research 264887Schin * 274887Schin * generate signal features 284887Schin */ 294887Schin 30*8462SApril.Chin@Sun.COM #include "FEATURE/standards" 31*8462SApril.Chin@Sun.COM 32*8462SApril.Chin@Sun.COM #define strsignal ______strsignal 33*8462SApril.Chin@Sun.COM 344887Schin #include <signal.h> 354887Schin 36*8462SApril.Chin@Sun.COM #undef strsignal 37*8462SApril.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 50*8462SApril.Chin@Sun.COM #define HAD_SIGABRT 1 514887Schin "Abort", "ABRT", SIGABRT, 524887Schin #endif 534887Schin #ifdef SIGAIO 54*8462SApril.Chin@Sun.COM #define HAD_SIGAIO 1 554887Schin "Asynchronous I/O", "AIO", SIGAIO, 564887Schin #endif 574887Schin #ifdef SIGALRM 58*8462SApril.Chin@Sun.COM #define HAD_SIGALRM 1 594887Schin "Alarm call", "ALRM", SIGALRM, 604887Schin #endif 614887Schin #ifdef SIGAPOLLO 62*8462SApril.Chin@Sun.COM #define HAD_SIGAPOLLO 1 634887Schin "Apollo", "APOLLO", SIGAPOLLO, 644887Schin #endif 654887Schin #ifdef SIGBUS 66*8462SApril.Chin@Sun.COM #define HAD_SIGBUS 1 674887Schin "Bus error", "BUS", SIGBUS, 684887Schin #endif 694887Schin #ifdef SIGCHLD 70*8462SApril.Chin@Sun.COM #define HAD_SIGCHLD 1 714887Schin "Child status change", "CHLD", SIGCHLD, 724887Schin #endif 734887Schin #ifdef SIGCLD 74*8462SApril.Chin@Sun.COM #define HAD_SIGCLD 1 754887Schin "Death of child", "CLD", SIGCLD, 764887Schin #endif 774887Schin #ifdef SIGCONT 78*8462SApril.Chin@Sun.COM #define HAD_SIGCONT 1 794887Schin "Stopped process continued", "CONT", SIGCONT, 804887Schin #endif 814887Schin #ifdef SIGDANGER 82*8462SApril.Chin@Sun.COM #define HAD_SIGDANGER 1 834887Schin "System crash soon", "DANGER", SIGDANGER, 844887Schin #endif 854887Schin #ifdef SIGDEBUG 86*8462SApril.Chin@Sun.COM #define HAD_SIGDEBUG 1 874887Schin "Debug trap", "DEBUG", SIGDEBUG, 884887Schin #endif 894887Schin #ifdef SIGDIL 90*8462SApril.Chin@Sun.COM #define HAD_SIGDIL 1 914887Schin "DIL trap", "DIL", SIGDIL, 924887Schin #endif 934887Schin #ifdef SIGEMT 94*8462SApril.Chin@Sun.COM #define HAD_SIGEMT 1 954887Schin "EMT trap", "EMT", SIGEMT, 964887Schin #endif 974887Schin #ifdef SIGERR 98*8462SApril.Chin@Sun.COM #define HAD_SIGERR 1 994887Schin "ERR trap", "ERR", SIGERR, 1004887Schin #endif 1014887Schin #ifdef SIGEXIT 102*8462SApril.Chin@Sun.COM #define HAD_SIGEXIT 1 1034887Schin "Exit", "EXIT", SIGEXIT, 1044887Schin #endif 1054887Schin #ifdef SIGFPE 106*8462SApril.Chin@Sun.COM #define HAD_SIGFPE 1 1074887Schin "Floating exception", "FPE", SIGFPE, 1084887Schin #endif 1094887Schin #ifdef SIGFREEZE 110*8462SApril.Chin@Sun.COM #define HAD_SIGFREEZE 1 1114887Schin "CPR freeze", "FREEZE", SIGFREEZE, 1124887Schin #endif 1134887Schin #ifdef SIGHUP 114*8462SApril.Chin@Sun.COM #define HAD_SIGHUP 1 1154887Schin "Hangup", "HUP", SIGHUP, 1164887Schin #endif 1174887Schin #ifdef SIGILL 118*8462SApril.Chin@Sun.COM #define HAD_SIGILL 1 1194887Schin "Illegal instruction", "ILL", SIGILL, 1204887Schin #endif 1214887Schin #ifdef SIGINT 122*8462SApril.Chin@Sun.COM #define HAD_SIGINT 1 1234887Schin "Interrupt", "INT", SIGINT, 1244887Schin #endif 1254887Schin #ifdef SIGIO 126*8462SApril.Chin@Sun.COM #define HAD_SIGIO 1 1274887Schin "IO possible", "IO", SIGIO, 1284887Schin #endif 1294887Schin #ifdef SIGIOT 130*8462SApril.Chin@Sun.COM #define HAD_SIGIOT 1 1314887Schin "IOT trap", "IOT", SIGIOT, 1324887Schin #endif 1334887Schin #ifdef SIGKILL 134*8462SApril.Chin@Sun.COM #define HAD_SIGKILL 1 1354887Schin "Killed", "KILL", SIGKILL, 1364887Schin #endif 1374887Schin #ifdef SIGLAB 138*8462SApril.Chin@Sun.COM #define HAD_SIGLAB 1 1394887Schin "Security label changed", "LAB", SIGLAB, 1404887Schin #endif 1414887Schin #ifdef SIGLOST 142*8462SApril.Chin@Sun.COM #define HAD_SIGLOST 1 1434887Schin "Resources lost", "LOST", SIGLOST, 1444887Schin #endif 1454887Schin #ifdef SIGLWP 146*8462SApril.Chin@Sun.COM #define HAD_SIGLWP 1 1474887Schin "Thread event", "LWP", SIGLWP, 1484887Schin #endif 1494887Schin #ifdef SIGMIGRATE 150*8462SApril.Chin@Sun.COM #define HAD_SIGMIGRATE 1 1514887Schin "Migrate process", "MIGRATE", SIGMIGRATE, 1524887Schin #endif 1534887Schin #ifdef SIGPHONE 154*8462SApril.Chin@Sun.COM #define HAD_SIGPHONE 1 1554887Schin "Phone status change", "PHONE", SIGPHONE, 1564887Schin #endif 1574887Schin #ifdef SIGPIPE 158*8462SApril.Chin@Sun.COM #define HAD_SIGPIPE 1 1594887Schin "Broken pipe", "PIPE", SIGPIPE, 1604887Schin #endif 1614887Schin #ifdef SIGPOLL 162*8462SApril.Chin@Sun.COM #define HAD_SIGPOLL 1 1634887Schin "Poll event", "POLL", SIGPOLL, 1644887Schin #endif 1654887Schin #ifdef SIGPROF 166*8462SApril.Chin@Sun.COM #define HAD_SIGPROF 1 1674887Schin "Profile timer alarm", "PROF", SIGPROF, 1684887Schin #endif 1694887Schin #ifdef SIGPWR 170*8462SApril.Chin@Sun.COM #define HAD_SIGPWR 1 1714887Schin "Power fail", "PWR", SIGPWR, 1724887Schin #endif 1734887Schin #ifdef SIGQUIT 174*8462SApril.Chin@Sun.COM #define HAD_SIGQUIT 1 1754887Schin "Quit", "QUIT", SIGQUIT, 1764887Schin #endif 1774887Schin #ifdef SIGSEGV 178*8462SApril.Chin@Sun.COM #define HAD_SIGSEGV 1 1794887Schin "Memory fault", "SEGV", SIGSEGV, 1804887Schin #endif 1814887Schin #ifdef SIGSOUND 182*8462SApril.Chin@Sun.COM #define HAD_SIGSOUND 1 1834887Schin "Sound completed", "SOUND", SIGSOUND, 1844887Schin #endif 1854887Schin #ifdef SIGSSTOP 186*8462SApril.Chin@Sun.COM #define HAD_SIGSSTOP 1 1874887Schin "Sendable stop", "SSTOP", SIGSSTOP, 1884887Schin #endif 1894887Schin #ifdef gould 190*8462SApril.Chin@Sun.COM #define HAD_gould 1 1914887Schin "Stack overflow", "STKOV", 28, 1924887Schin #endif 1934887Schin #ifdef SIGSTOP 194*8462SApril.Chin@Sun.COM #define HAD_SIGSTOP 1 1954887Schin "Stopped (signal)", "STOP", SIGSTOP, 1964887Schin #endif 1974887Schin #ifdef SIGSYS 198*8462SApril.Chin@Sun.COM #define HAD_SIGSYS 1 1994887Schin "Bad system call", "SYS", SIGSYS, 2004887Schin #endif 2014887Schin #ifdef SIGTERM 202*8462SApril.Chin@Sun.COM #define HAD_SIGTERM 1 2034887Schin "Terminated", "TERM", SIGTERM, 2044887Schin #endif 2054887Schin #ifdef SIGTHAW 206*8462SApril.Chin@Sun.COM #define HAD_SIGTHAW 1 2074887Schin "CPR thaw", "THAW", SIGTHAW, 2084887Schin #endif 2094887Schin #ifdef SIGTINT 210*8462SApril.Chin@Sun.COM #define HAD_SIGTINT 1 2114887Schin "Interrupt (terminal)", "TINT", SIGTINT, 2124887Schin #endif 2134887Schin #ifdef SIGTRAP 214*8462SApril.Chin@Sun.COM #define HAD_SIGTRAP 1 2154887Schin "Trace trap", "TRAP", SIGTRAP, 2164887Schin #endif 2174887Schin #ifdef SIGTSTP 218*8462SApril.Chin@Sun.COM #define HAD_SIGTSTP 1 2194887Schin "Stopped", "TSTP", SIGTSTP, 2204887Schin #endif 2214887Schin #ifdef SIGTTIN 222*8462SApril.Chin@Sun.COM #define HAD_SIGTTIN 1 2234887Schin "Stopped (tty input)", "TTIN", SIGTTIN, 2244887Schin #endif 2254887Schin #ifdef SIGTTOU 226*8462SApril.Chin@Sun.COM #define HAD_SIGTTOU 1 2274887Schin "Stopped (tty output)", "TTOU", SIGTTOU, 2284887Schin #endif 2294887Schin #ifdef SIGURG 230*8462SApril.Chin@Sun.COM #define HAD_SIGURG 1 2314887Schin "Urgent IO", "URG", SIGURG, 2324887Schin #endif 2334887Schin #ifdef SIGUSR1 234*8462SApril.Chin@Sun.COM #define HAD_SIGUSR1 1 2354887Schin "User signal 1", "USR1", SIGUSR1, 2364887Schin #endif 2374887Schin #ifdef SIGUSR2 238*8462SApril.Chin@Sun.COM #define HAD_SIGUSR2 1 2394887Schin "User signal 2", "USR2", SIGUSR2, 2404887Schin #endif 2414887Schin #ifdef SIGVTALRM 242*8462SApril.Chin@Sun.COM #define HAD_SIGVTALRM 1 2434887Schin "Virtual timer alarm", "VTALRM", SIGVTALRM, 2444887Schin #endif 2454887Schin #ifdef SIGWAITING 246*8462SApril.Chin@Sun.COM #define HAD_SIGWAITING 1 2474887Schin "All threads blocked", "WAITING", SIGWAITING, 2484887Schin #endif 2494887Schin #ifdef SIGWINCH 250*8462SApril.Chin@Sun.COM #define HAD_SIGWINCH 1 2514887Schin "Window change", "WINCH", SIGWINCH, 2524887Schin #endif 2534887Schin #ifdef SIGWIND 254*8462SApril.Chin@Sun.COM #define HAD_SIGWIND 1 2554887Schin "Window change", "WIND", SIGWIND, 2564887Schin #endif 2574887Schin #ifdef SIGWINDOW 258*8462SApril.Chin@Sun.COM #define HAD_SIGWINDOW 1 2594887Schin "Window change", "WINDOW", SIGWINDOW, 2604887Schin #endif 2614887Schin #ifdef SIGXCPU 262*8462SApril.Chin@Sun.COM #define HAD_SIGXCPU 1 2634887Schin "CPU time limit", "XCPU", SIGXCPU, 2644887Schin #endif 2654887Schin #ifdef SIGXFSZ 266*8462SApril.Chin@Sun.COM #define HAD_SIGXFSZ 1 2674887Schin "File size limit", "XFSZ", SIGXFSZ, 2684887Schin #endif 269*8462SApril.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 279*8462SApril.Chin@Sun.COM static int mapindex[1024]; 280*8462SApril.Chin@Sun.COM 281*8462SApril.Chin@Sun.COM #if _lib_strsignal 282*8462SApril.Chin@Sun.COM extern char* strsignal(int); 283*8462SApril.Chin@Sun.COM #endif 2844887Schin 2854887Schin int 2864887Schin main() 2874887Schin { 2884887Schin register int i; 2894887Schin register int j; 2904887Schin register int k; 291*8462SApril.Chin@Sun.COM int m; 2924887Schin int n; 293*8462SApril.Chin@Sun.COM #if _lib_strsignal 294*8462SApril.Chin@Sun.COM char* s; 295*8462SApril.Chin@Sun.COM #endif 2964887Schin 2974887Schin k = 0; 2984887Schin for (i = 0; map[i].name; i++) 299*8462SApril.Chin@Sun.COM if ((j = map[i].value) > 0 && j < elementsof(mapindex) && !mapindex[j]) 3004887Schin { 301*8462SApril.Chin@Sun.COM if (j > k) 302*8462SApril.Chin@Sun.COM k = j; 303*8462SApril.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 312*8462SApril.Chin@Sun.COM if (j >= elementsof(mapindex)) 313*8462SApril.Chin@Sun.COM j = elementsof(mapindex) - 1; 314*8462SApril.Chin@Sun.COM if (i <= j && i > 0 && i < elementsof(mapindex) && j > 0 && j < elementsof(mapindex)) 3154887Schin { 316*8462SApril.Chin@Sun.COM if (j > k) 317*8462SApril.Chin@Sun.COM k = j; 318*8462SApril.Chin@Sun.COM mapindex[i] = RANGE_MIN | RANGE_RT; 3194887Schin n = 1; 3204887Schin while (++i < j) 321*8462SApril.Chin@Sun.COM mapindex[i] = RANGE_RT | n++; 322*8462SApril.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++) 331*8462SApril.Chin@Sun.COM if (!(j = mapindex[i])) 332*8462SApril.Chin@Sun.COM printf(" \"%d\",\n", i); 3334887Schin else if (j & RANGE_RT) 3344887Schin { 335*8462SApril.Chin@Sun.COM if (j & RANGE_MIN) 336*8462SApril.Chin@Sun.COM printf(" \"RTMIN\",\n"); 337*8462SApril.Chin@Sun.COM else if (j & RANGE_MAX) 338*8462SApril.Chin@Sun.COM printf(" \"RTMAX\",\n"); 339*8462SApril.Chin@Sun.COM else 340*8462SApril.Chin@Sun.COM { 341*8462SApril.Chin@Sun.COM m = j & RANGE_SIG; 342*8462SApril.Chin@Sun.COM if (m > n / 2) 343*8462SApril.Chin@Sun.COM printf(" \"RTMAX-%d\",\n", n - m); 344*8462SApril.Chin@Sun.COM else 345*8462SApril.Chin@Sun.COM printf(" \"RTMIN+%d\",\n", m); 346*8462SApril.Chin@Sun.COM } 3474887Schin } 348*8462SApril.Chin@Sun.COM else 349*8462SApril.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++) 356*8462SApril.Chin@Sun.COM if (!(j = mapindex[i])) 357*8462SApril.Chin@Sun.COM printf(" \"Signal %d\",\n", i); 358*8462SApril.Chin@Sun.COM else if (j & RANGE_RT) 359*8462SApril.Chin@Sun.COM printf(" \"Realtime priority %d%s\",\n", j & RANGE_SIG, (j & RANGE_MIN) ? " (lo)" : (j & RANGE_MAX) ? " (hi)" : ""); 360*8462SApril.Chin@Sun.COM else if (map[j].text) 361*8462SApril.Chin@Sun.COM printf(" \"%s\",\n", map[j].text); 362*8462SApril.Chin@Sun.COM #if _lib_strsignal 363*8462SApril.Chin@Sun.COM else if (s = strsignal(i)) 364*8462SApril.Chin@Sun.COM printf(" \"%s\",\n", s); 365*8462SApril.Chin@Sun.COM #endif 366*8462SApril.Chin@Sun.COM else 367*8462SApril.Chin@Sun.COM printf(" \"Signal %d\",\n", i); 3684887Schin printf(" 0\n"); 3694887Schin printf("};\n"); 3704887Schin return 0; 3714887Schin } 372