1e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/* 2e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * sigcatcher.c --- print a backtrace on a SIGSEGV, et. al 3e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * 4e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * Copyright (C) 2011 Theodore Ts'o. 5e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * 6e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * %Begin-Header% 7e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * This file may be redistributed under the terms of the GNU Public 8e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * License. 9e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * %End-Header% 10e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall */ 11e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 12e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include <stdio.h> 13e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include <stdlib.h> 14e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include <signal.h> 15e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include <string.h> 16e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef HAVE_EXECINFO_H 17e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include <execinfo.h> 18e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 19e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 20e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include "e2fsck.h" 21e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 22e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstruct str_table { 23e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall int num; 24e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall const char *name; 25e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 26e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 27e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#define DEFINE_ENTRY(SYM) { SYM, #SYM }, 28e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#define END_TABLE { 0, 0 } 29e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 30e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic struct str_table sig_table[] = { 31e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGHUP 32e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGHUP) 33e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 34e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGINT 35e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGINT) 36e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 37e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGQUIT 38e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGQUIT) 39e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 40e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGILL 41e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGILL) 42e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 43e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGTRAP 44e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGTRAP) 45e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 46e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGABRT 47e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGABRT) 48e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 49e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGIOT 50e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGIOT) 51e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 52e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGBUS 53e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGBUS) 54e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 55e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGFPE 56e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGFPE) 57e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 58e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGKILL 59e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGKILL) 60e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 61e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGUSR1 62e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGUSR1) 63e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 64e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGSEGV 65e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGSEGV) 66e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 67e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGUSR2 68e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGUSR2) 69e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 70e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGPIPE 71e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGPIPE) 72e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 73e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGALRM 74e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGALRM) 75e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 76e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGTERM 77e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGTERM) 78e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 79e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGSTKFLT 80e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGSTKFLT) 81e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 82e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGCHLD 83e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGCHLD) 84e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 85e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGCONT 86e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGCONT) 87e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 88e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGSTOP 89e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGSTOP) 90e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 91e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGTSTP 92e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGTSTP) 93e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 94e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGTTIN 95e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGTTIN) 96e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 97e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGTTOU 98e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGTTOU) 99e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 100e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGURG 101e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGURG) 102e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 103e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGXCPU 104e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGXCPU) 105e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 106e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGXFSZ 107e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGXFSZ) 108e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 109e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGVTALRM 110e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGVTALRM) 111e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 112e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGPROF 113e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGPROF) 114e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 115e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGWINCH 116e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGWINCH) 117e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 118e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGIO 119e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGIO) 120e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 121e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGPOLL 122e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGPOLL) 123e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 124e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGPWR 125e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGPWR) 126e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 127e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SIGSYS 128e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SIGSYS) 129e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 130e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall END_TABLE 131e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 132e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 133e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic struct str_table generic_code_table[] = { 134e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SI_ASYNCNL 135e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SI_ASYNCNL) 136e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 137e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SI_TKILL 138e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SI_TKILL) 139e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 140e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SI_SIGIO 141e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SI_SIGIO) 142e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 143e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SI_ASYNCIO 144e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SI_ASYNCIO) 145e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 146e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SI_MESGQ 147e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SI_MESGQ) 148e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 149e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SI_TIMER 150e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SI_TIMER) 151e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 152e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SI_QUEUE 153e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SI_QUEUE) 154e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 155e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SI_USER 156e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SI_USER) 157e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 158e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SI_KERNEL 159e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SI_KERNEL) 160e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 161e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall END_TABLE 162e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 163e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 164e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic struct str_table sigill_code_table[] = { 165e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef ILL_ILLOPC 166e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(ILL_ILLOPC) 167e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 168e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef ILL_ILLOPN 169e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(ILL_ILLOPN) 170e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 171e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef ILL_ILLADR 172e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(ILL_ILLADR) 173e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 174e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef ILL_ILLTRP 175e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(ILL_ILLTRP) 176e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 177e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef ILL_PRVOPC 178e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(ILL_PRVOPC) 179e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 180e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef ILL_PRVREG 181e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(ILL_PRVREG) 182e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 183e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef ILL_COPROC 184e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(ILL_COPROC) 185e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 186e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef ILL_BADSTK 187e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(ILL_BADSTK) 188e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 189e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef BUS_ADRALN 190e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(BUS_ADRALN) 191e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 192e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef BUS_ADRERR 193e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(BUS_ADRERR) 194e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 195e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef BUS_OBJERR 196e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(BUS_OBJERR) 197e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 198e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall END_TABLE 199e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 200e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 201e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic struct str_table sigfpe_code_table[] = { 202e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef FPE_INTDIV 203e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(FPE_INTDIV) 204e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 205e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef FPE_INTOVF 206e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(FPE_INTOVF) 207e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 208e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef FPE_FLTDIV 209e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(FPE_FLTDIV) 210e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 211e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef FPE_FLTOVF 212e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(FPE_FLTOVF) 213e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 214e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef FPE_FLTUND 215e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(FPE_FLTUND) 216e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 217e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef FPE_FLTRES 218e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(FPE_FLTRES) 219e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 220e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef FPE_FLTINV 221e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(FPE_FLTINV) 222e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 223e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef FPE_FLTSUB 224e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(FPE_FLTSUB) 225e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 226e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall END_TABLE 227e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 228e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 229e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic struct str_table sigsegv_code_table[] = { 230e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SEGV_MAPERR 231e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SEGV_MAPERR) 232e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 233e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef SEGV_ACCERR 234e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(SEGV_ACCERR) 235e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 236e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall END_TABLE 237e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 238e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 239e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 240e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic struct str_table sigbus_code_table[] = { 241e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef BUS_ADRALN 242e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(BUS_ADRALN) 243e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 244e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef BUS_ADRERR 245e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(BUS_ADRERR) 246e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 247e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef BUS_OBJERR 248e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(BUS_OBJERR) 249e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 250e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall END_TABLE 251e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 252e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 253e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#if 0 /* should this be hooked in somewhere? */ 254e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic struct str_table sigstrap_code_table[] = { 255e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef TRAP_BRKPT 256e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(TRAP_BRKPT) 257e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 258e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef TRAP_TRACE 259e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(TRAP_TRACE) 260e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 261e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall END_TABLE 262e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 263e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 264e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 265e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic struct str_table sigcld_code_table[] = { 266e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef CLD_EXITED 267e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(CLD_EXITED) 268e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 269e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef CLD_KILLED 270e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(CLD_KILLED) 271e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 272e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef CLD_DUMPED 273e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(CLD_DUMPED) 274e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 275e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef CLD_TRAPPED 276e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(CLD_TRAPPED) 277e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 278e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef CLD_STOPPED 279e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(CLD_STOPPED) 280e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 281e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef CLD_CONTINUED 282e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(CLD_CONTINUED) 283e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 284e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall END_TABLE 285e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 286e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 287e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#if 0 /* should this be hooked in somewhere? */ 288e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic struct str_table sigpoll_code_table[] = { 289e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef POLL_IN 290e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(POLL_IN) 291e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 292e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef POLL_OUT 293e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(POLL_OUT) 294e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 295e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef POLL_MSG 296e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(POLL_MSG) 297e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 298e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef POLL_ERR 299e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(POLL_ERR) 300e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 301e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef POLL_PRI 302e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(POLL_PRI) 303e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 304e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef POLL_HUP 305e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall DEFINE_ENTRY(POLL_HUP) 306e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 307e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall END_TABLE 308e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 309e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 310e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 311e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic const char *lookup_table(int num, struct str_table *table) 312e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{ 313e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall struct str_table *p; 314e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 315e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall for (p=table; p->name; p++) 316e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall if (num == p->num) 317e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall return(p->name); 318e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall return NULL; 319e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall} 320e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 321e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic const char *lookup_table_fallback(int num, struct str_table *table) 322e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{ 323e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall static char buf[32]; 324e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall const char *ret = lookup_table(num, table); 325e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 326e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall if (ret) 327e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall return ret; 328e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall snprintf(buf, sizeof(buf), "%d", num); 329e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall buf[sizeof(buf)-1] = 0; 330e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall return buf; 331e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall} 332e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 333e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstatic void die_signal_handler(int signum, siginfo_t *siginfo, 334e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall void *context EXT2FS_ATTR((unused))) 335e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{ 336e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall void *stack_syms[32]; 337e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall int frames; 338e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall const char *cp; 339e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 340e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "Signal (%d) %s ", signum, 341e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall lookup_table_fallback(signum, sig_table)); 342e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall if (siginfo->si_code == SI_USER) 343e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "(sent from pid %u) ", siginfo->si_pid); 344e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall cp = lookup_table(siginfo->si_code, generic_code_table); 345e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall if (cp) 346e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "si_code=%s ", cp); 347e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall else if (signum == SIGILL) 348e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "si_code=%s ", 349e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall lookup_table_fallback(siginfo->si_code, 350e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sigill_code_table)); 351e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall else if (signum == SIGFPE) 352e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "si_code=%s ", 353e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall lookup_table_fallback(siginfo->si_code, 354e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sigfpe_code_table)); 355e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall else if (signum == SIGSEGV) 356e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "si_code=%s ", 357e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall lookup_table_fallback(siginfo->si_code, 358e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sigsegv_code_table)); 359e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall else if (signum == SIGBUS) 360e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "si_code=%s ", 361e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall lookup_table_fallback(siginfo->si_code, 362e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sigbus_code_table)); 363e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall else if (signum == SIGCHLD) 364e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "si_code=%s ", 365e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall lookup_table_fallback(siginfo->si_code, 366e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sigcld_code_table)); 367e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall else 368e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "si code=%d ", siginfo->si_code); 369e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall if ((siginfo->si_code != SI_USER) && 370e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall (signum == SIGILL || signum == SIGFPE || 371e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall signum == SIGSEGV || signum == SIGBUS)) 372e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "fault addr=%p", siginfo->si_addr); 373e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "\n"); 374e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 375e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#if defined(HAVE_BACKTRACE) && !defined(DISABLE_BACKTRACE) 376e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall frames = backtrace(stack_syms, 32); 377e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall backtrace_symbols_fd(stack_syms, frames, 2); 378e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 379e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall exit(FSCK_ERROR); 380e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall} 381e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 382e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallvoid sigcatcher_setup(void) 383e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{ 384e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall struct sigaction sa; 385e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 386e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall memset(&sa, 0, sizeof(struct sigaction)); 387e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sa.sa_sigaction = die_signal_handler; 388e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sa.sa_flags = SA_SIGINFO; 389e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 390e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sigaction(SIGFPE, &sa, 0); 391e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sigaction(SIGILL, &sa, 0); 392e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sigaction(SIGBUS, &sa, 0); 393e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sigaction(SIGSEGV, &sa, 0); 394e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall} 395e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 396e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 397e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifdef DEBUG 398e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include <getopt.h> 399e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 400e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallvoid usage(void) 401e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{ 402e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fprintf(stderr, "tst_sigcatcher: [-akfn]\n"); 403e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall exit(1); 404e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall} 405e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 406e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallint main(int argc, char** argv) 407e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall{ 408e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall struct sigaction sa; 409e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall char *p = 0; 410e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall int i, c; 411e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall volatile x=0; 412e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 413e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall memset(&sa, 0, sizeof(struct sigaction)); 414e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sa.sa_sigaction = die_signal_handler; 415e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sa.sa_flags = SA_SIGINFO; 416e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall for (i=1; i < 31; i++) 417e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sigaction(i, &sa, 0); 418e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 419e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall while ((c = getopt (argc, argv, "afkn")) != EOF) 420e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall switch (c) { 421e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall case 'a': 422e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall abort(); 423e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall break; 424e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall case 'f': 425e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall printf("%d\n", 42/x); 426e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall case 'k': 427e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall kill(getpid(), SIGTERM); 428e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall break; 429e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall case 'n': 430e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall *p = 42; 431e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall default: 432e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall usage (); 433e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall } 434e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 435e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall printf("Sleeping for 10 seconds, send kill signal to pid %u...\n", 436e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall getpid()); 437e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall fflush(stdout); 438e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall sleep(10); 439e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall exit(0); 440e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall} 441e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif 442