1*4887Schin /*********************************************************************** 2*4887Schin * * 3*4887Schin * This software is part of the ast package * 4*4887Schin * Copyright (c) 1985-2007 AT&T Knowledge Ventures * 5*4887Schin * and is licensed under the * 6*4887Schin * Common Public License, Version 1.0 * 7*4887Schin * by AT&T Knowledge Ventures * 8*4887Schin * * 9*4887Schin * A copy of the License is available at * 10*4887Schin * http://www.opensource.org/licenses/cpl1.0.txt * 11*4887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12*4887Schin * * 13*4887Schin * Information and Software Systems Research * 14*4887Schin * AT&T Research * 15*4887Schin * Florham Park NJ * 16*4887Schin * * 17*4887Schin * Glenn Fowler <gsf@research.att.com> * 18*4887Schin * David Korn <dgk@research.att.com> * 19*4887Schin * Phong Vo <kpv@research.att.com> * 20*4887Schin * * 21*4887Schin ***********************************************************************/ 22*4887Schin #pragma prototyped 23*4887Schin /* 24*4887Schin * Glenn Fowler 25*4887Schin * AT&T Bell Laboratories 26*4887Schin * 27*4887Schin * generate signal features 28*4887Schin */ 29*4887Schin 30*4887Schin #include <signal.h> 31*4887Schin 32*4887Schin struct _m_ 33*4887Schin { 34*4887Schin char* text; 35*4887Schin char* name; 36*4887Schin int value; 37*4887Schin }; 38*4887Schin 39*4887Schin #define elementsof(x) (sizeof(x)/sizeof(x[0])) 40*4887Schin 41*4887Schin static struct _m_ map[] = 42*4887Schin { 43*4887Schin #ifdef SIGABRT 44*4887Schin "Abort", "ABRT", SIGABRT, 45*4887Schin #endif 46*4887Schin #ifdef SIGAIO 47*4887Schin "Asynchronous I/O", "AIO", SIGAIO, 48*4887Schin #endif 49*4887Schin #ifdef SIGALRM 50*4887Schin "Alarm call", "ALRM", SIGALRM, 51*4887Schin #endif 52*4887Schin #ifdef SIGAPOLLO 53*4887Schin "Apollo", "APOLLO", SIGAPOLLO, 54*4887Schin #endif 55*4887Schin #ifdef SIGBUS 56*4887Schin "Bus error", "BUS", SIGBUS, 57*4887Schin #endif 58*4887Schin #ifdef SIGCHLD 59*4887Schin "Child status change", "CHLD", SIGCHLD, 60*4887Schin #endif 61*4887Schin #ifdef SIGCLD 62*4887Schin "Death of child", "CLD", SIGCLD, 63*4887Schin #endif 64*4887Schin #ifdef SIGCONT 65*4887Schin "Stopped process continued", "CONT", SIGCONT, 66*4887Schin #endif 67*4887Schin #ifdef SIGDANGER 68*4887Schin "System crash soon", "DANGER", SIGDANGER, 69*4887Schin #endif 70*4887Schin #ifdef SIGDEBUG 71*4887Schin "Debug trap", "DEBUG", SIGDEBUG, 72*4887Schin #endif 73*4887Schin #ifdef SIGDIL 74*4887Schin "DIL trap", "DIL", SIGDIL, 75*4887Schin #endif 76*4887Schin #ifdef SIGEMT 77*4887Schin "EMT trap", "EMT", SIGEMT, 78*4887Schin #endif 79*4887Schin #ifdef SIGERR 80*4887Schin "ERR trap", "ERR", SIGERR, 81*4887Schin #endif 82*4887Schin #ifdef SIGEXIT 83*4887Schin "Exit", "EXIT", SIGEXIT, 84*4887Schin #endif 85*4887Schin #ifdef SIGFPE 86*4887Schin "Floating exception", "FPE", SIGFPE, 87*4887Schin #endif 88*4887Schin #ifdef SIGFREEZE 89*4887Schin "CPR freeze", "FREEZE", SIGFREEZE, 90*4887Schin #endif 91*4887Schin #ifdef SIGHUP 92*4887Schin "Hangup", "HUP", SIGHUP, 93*4887Schin #endif 94*4887Schin #ifdef SIGILL 95*4887Schin "Illegal instruction", "ILL", SIGILL, 96*4887Schin #endif 97*4887Schin #ifdef SIGINT 98*4887Schin "Interrupt", "INT", SIGINT, 99*4887Schin #endif 100*4887Schin #ifdef SIGIO 101*4887Schin "IO possible", "IO", SIGIO, 102*4887Schin #endif 103*4887Schin #ifdef SIGIOT 104*4887Schin "IOT trap", "IOT", SIGIOT, 105*4887Schin #endif 106*4887Schin #ifdef SIGKILL 107*4887Schin "Killed", "KILL", SIGKILL, 108*4887Schin #endif 109*4887Schin #ifdef SIGLAB 110*4887Schin "Security label changed", "LAB", SIGLAB, 111*4887Schin #endif 112*4887Schin #ifdef SIGLOST 113*4887Schin "Resources lost", "LOST", SIGLOST, 114*4887Schin #endif 115*4887Schin #ifdef SIGLWP 116*4887Schin "Thread event", "LWP", SIGLWP, 117*4887Schin #endif 118*4887Schin #ifdef SIGMIGRATE 119*4887Schin "Migrate process", "MIGRATE", SIGMIGRATE, 120*4887Schin #endif 121*4887Schin #ifdef SIGPHONE 122*4887Schin "Phone status change", "PHONE", SIGPHONE, 123*4887Schin #endif 124*4887Schin #ifdef SIGPIPE 125*4887Schin "Broken pipe", "PIPE", SIGPIPE, 126*4887Schin #endif 127*4887Schin #ifdef SIGPOLL 128*4887Schin "Poll event", "POLL", SIGPOLL, 129*4887Schin #endif 130*4887Schin #ifdef SIGPROF 131*4887Schin "Profile timer alarm", "PROF", SIGPROF, 132*4887Schin #endif 133*4887Schin #ifdef SIGPWR 134*4887Schin "Power fail", "PWR", SIGPWR, 135*4887Schin #endif 136*4887Schin #ifdef SIGQUIT 137*4887Schin "Quit", "QUIT", SIGQUIT, 138*4887Schin #endif 139*4887Schin #ifdef SIGSEGV 140*4887Schin "Memory fault", "SEGV", SIGSEGV, 141*4887Schin #endif 142*4887Schin #ifdef SIGSOUND 143*4887Schin "Sound completed", "SOUND", SIGSOUND, 144*4887Schin #endif 145*4887Schin #ifdef SIGSSTOP 146*4887Schin "Sendable stop", "SSTOP", SIGSSTOP, 147*4887Schin #endif 148*4887Schin #ifdef gould 149*4887Schin "Stack overflow", "STKOV", 28, 150*4887Schin #endif 151*4887Schin #ifdef SIGSTOP 152*4887Schin "Stopped (signal)", "STOP", SIGSTOP, 153*4887Schin #endif 154*4887Schin #ifdef SIGSYS 155*4887Schin "Bad system call", "SYS", SIGSYS, 156*4887Schin #endif 157*4887Schin #ifdef SIGTERM 158*4887Schin "Terminated", "TERM", SIGTERM, 159*4887Schin #endif 160*4887Schin #ifdef SIGTHAW 161*4887Schin "CPR thaw", "THAW", SIGTHAW, 162*4887Schin #endif 163*4887Schin #ifdef SIGTINT 164*4887Schin "Interrupt (terminal)", "TINT", SIGTINT, 165*4887Schin #endif 166*4887Schin #ifdef SIGTRAP 167*4887Schin "Trace trap", "TRAP", SIGTRAP, 168*4887Schin #endif 169*4887Schin #ifdef SIGTSTP 170*4887Schin "Stopped", "TSTP", SIGTSTP, 171*4887Schin #endif 172*4887Schin #ifdef SIGTTIN 173*4887Schin "Stopped (tty input)", "TTIN", SIGTTIN, 174*4887Schin #endif 175*4887Schin #ifdef SIGTTOU 176*4887Schin "Stopped (tty output)", "TTOU", SIGTTOU, 177*4887Schin #endif 178*4887Schin #ifdef SIGURG 179*4887Schin "Urgent IO", "URG", SIGURG, 180*4887Schin #endif 181*4887Schin #ifdef SIGUSR1 182*4887Schin "User signal 1", "USR1", SIGUSR1, 183*4887Schin #endif 184*4887Schin #ifdef SIGUSR2 185*4887Schin "User signal 2", "USR2", SIGUSR2, 186*4887Schin #endif 187*4887Schin #ifdef SIGVTALRM 188*4887Schin "Virtual timer alarm", "VTALRM", SIGVTALRM, 189*4887Schin #endif 190*4887Schin #ifdef SIGWAITING 191*4887Schin "All threads blocked", "WAITING", SIGWAITING, 192*4887Schin #endif 193*4887Schin #ifdef SIGWINCH 194*4887Schin "Window change", "WINCH", SIGWINCH, 195*4887Schin #endif 196*4887Schin #ifdef SIGWIND 197*4887Schin "Window change", "WIND", SIGWIND, 198*4887Schin #endif 199*4887Schin #ifdef SIGWINDOW 200*4887Schin "Window change", "WINDOW", SIGWINDOW, 201*4887Schin #endif 202*4887Schin #ifdef SIGXCPU 203*4887Schin "CPU time limit", "XCPU", SIGXCPU, 204*4887Schin #endif 205*4887Schin #ifdef SIGXFSZ 206*4887Schin "File size limit", "XFSZ", SIGXFSZ, 207*4887Schin #endif 208*4887Schin 0 209*4887Schin }; 210*4887Schin 211*4887Schin #define RANGE_MIN (1<<14) 212*4887Schin #define RANGE_MAX (1<<13) 213*4887Schin #define RANGE_RT (1<<12) 214*4887Schin 215*4887Schin #define RANGE_SIG (~(RANGE_MIN|RANGE_MAX|RANGE_RT)) 216*4887Schin 217*4887Schin static int index[64]; 218*4887Schin 219*4887Schin int 220*4887Schin main() 221*4887Schin { 222*4887Schin register int i; 223*4887Schin register int j; 224*4887Schin register int k; 225*4887Schin int n; 226*4887Schin 227*4887Schin k = 0; 228*4887Schin for (i = 0; map[i].name; i++) 229*4887Schin if ((j = map[i].value) > 0 && j < elementsof(index) && !index[j]) 230*4887Schin { 231*4887Schin if (j > k) k = j; 232*4887Schin index[j] = i; 233*4887Schin } 234*4887Schin #ifdef SIGRTMIN 235*4887Schin i = SIGRTMIN; 236*4887Schin #ifdef SIGRTMAX 237*4887Schin j = SIGRTMAX; 238*4887Schin #else 239*4887Schin j = i; 240*4887Schin #endif 241*4887Schin if (j >= elementsof(index)) j = elementsof(index) - 1; 242*4887Schin if (i <= j && i > 0 && i < elementsof(index) && j > 0 && j < elementsof(index)) 243*4887Schin { 244*4887Schin if (j > k) k = j; 245*4887Schin index[i] = RANGE_MIN | RANGE_RT; 246*4887Schin n = 1; 247*4887Schin while (++i < j) 248*4887Schin index[i] = RANGE_RT | n++; 249*4887Schin index[j] = RANGE_MAX | RANGE_RT | n; 250*4887Schin } 251*4887Schin #endif 252*4887Schin printf("#pragma prototyped\n"); 253*4887Schin printf("#define SIG_MAX %d\n", k); 254*4887Schin printf("\n"); 255*4887Schin printf("static const char* const sig_name[] =\n"); 256*4887Schin printf("{\n"); 257*4887Schin for (i = 0; i <= k; i++) 258*4887Schin if (!(j = index[i])) printf(" \"%d\",\n", i); 259*4887Schin else if (j & RANGE_RT) 260*4887Schin { 261*4887Schin if (j & RANGE_MIN) printf(" \"RTMIN\",\n"); 262*4887Schin else if (j & RANGE_MAX) printf(" \"RTMAX\",\n"); 263*4887Schin else printf(" \"RT%d\",\n", j & RANGE_SIG); 264*4887Schin } 265*4887Schin else printf(" \"%s\",\n", map[j].name); 266*4887Schin printf(" 0\n"); 267*4887Schin printf("};\n"); 268*4887Schin printf("\n"); 269*4887Schin printf("static const char* const sig_text[] =\n"); 270*4887Schin printf("{\n"); 271*4887Schin for (i = 0; i <= k; i++) 272*4887Schin if (!(j = index[i])) printf(" \"Signal %d\",\n", i); 273*4887Schin else if (j & RANGE_RT) printf(" \"Realtime priority %d%s\",\n", j & RANGE_SIG, (j & RANGE_MIN) ? " (lo)" : (j & RANGE_MAX) ? " (hi)" : ""); 274*4887Schin else printf(" \"%s\",\n", map[j].text); 275*4887Schin printf(" 0\n"); 276*4887Schin printf("};\n"); 277*4887Schin return 0; 278*4887Schin } 279