3 This file is part of Cygwin.
5 This software is a copyrighted work licensed under the terms of the
6 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
23 _s(SIGHUP, "Hangup"), /* 1 */ \
24 _s(SIGINT, "Interrupt"), /* 2 */ \
25 _s(SIGQUIT, "Quit"), /* 3 */ \
26 _s(SIGILL, "Illegal instruction"), /* 4 */ \
27 _s(SIGTRAP, "Trace/breakpoint trap"), /* 5 */ \
28 _s2(SIGABRT, "Aborted", /* 6 */ \
30 _s(SIGEMT, "EMT instruction"), /* 7 */ \
31 _s(SIGFPE, "Floating point exception"), /* 8 */ \
32 _s(SIGKILL, "Killed"), /* 9 */ \
33 _s(SIGBUS, "Bus error"), /* 10 */ \
34 _s(SIGSEGV, "Segmentation fault"), /* 11 */ \
35 _s(SIGSYS, "Bad system call"), /* 12 */ \
36 _s(SIGPIPE, "Broken pipe"), /* 13 */ \
37 _s(SIGALRM, "Alarm clock"), /* 14 */ \
38 _s(SIGTERM, "Terminated"), /* 15 */ \
39 _s(SIGURG, "Urgent I/O condition"), /* 16 */ \
40 _s(SIGSTOP, "Stopped (signal)"), /* 17 */ \
41 _s(SIGTSTP, "Stopped"), /* 18 */ \
42 _s(SIGCONT, "Continued"), /* 19 */ \
43 _s2(SIGCHLD, "Child exited", /* 20 */ \
44 SIGCLD, "Child exited"), \
45 _s(SIGTTIN, "Stopped (tty input)"), /* 21 */ \
46 _s(SIGTTOU, "Stopped (tty output)"), /* 22 */ \
47 _s2(SIGIO, "I/O possible", /* 23 */ \
48 SIGPOLL, "I/O possible"), \
49 _s(SIGXCPU, "CPU time limit exceeded"), /* 24 */ \
50 _s(SIGXFSZ, "File size limit exceeded"), /* 25 */ \
51 _s(SIGVTALRM, "Virtual timer expired"), /* 26 */ \
52 _s(SIGPROF, "Profiling timer expired"), /* 27 */ \
53 _s(SIGWINCH, "Window changed"), /* 28 */ \
54 _s2(SIGPWR, "Power failure", /* 29 */ \
55 SIGLOST, "Resource lost"), \
56 _s(SIGUSR1, "User defined signal 1"), /* 30 */ \
57 _s(SIGUSR2, "User defined signal 2"), /* 31 */ \
58 _s(SIGRTMIN, "Real-time signal 0"), /* 32 */ \
59 _s(SIGRTMIN+1, "Real-time signal 1"), /* 33 */ \
60 _s(SIGRTMIN+2, "Real-time signal 2"), /* 34 */ \
61 _s(SIGRTMIN+3, "Real-time signal 3"), /* 35 */ \
62 _s(SIGRTMIN+4, "Real-time signal 4"), /* 36 */ \
63 _s(SIGRTMIN+5, "Real-time signal 5"), /* 37 */ \
64 _s(SIGRTMIN+6, "Real-time signal 6"), /* 38 */ \
65 _s(SIGRTMIN+7, "Real-time signal 7"), /* 39 */ \
66 _s(SIGRTMIN+8, "Real-time signal 8"), /* 40 */ \
67 _s(SIGRTMIN+9, "Real-time signal 9"), /* 41 */ \
68 _s(SIGRTMIN+10, "Real-time signal 10"), /* 42 */ \
69 _s(SIGRTMIN+11, "Real-time signal 11"), /* 43 */ \
70 _s(SIGRTMIN+12, "Real-time signal 12"), /* 44 */ \
71 _s(SIGRTMIN+13, "Real-time signal 13"), /* 45 */ \
72 _s(SIGRTMIN+14, "Real-time signal 14"), /* 46 */ \
73 _s(SIGRTMIN+15, "Real-time signal 15"), /* 47 */ \
74 _s(SIGRTMIN+16, "Real-time signal 16"), /* 48 */ \
75 _s(SIGRTMIN+17, "Real-time signal 17"), /* 49 */ \
76 _s(SIGRTMIN+18, "Real-time signal 18"), /* 50 */ \
77 _s(SIGRTMIN+19, "Real-time signal 19"), /* 51 */ \
78 _s(SIGRTMIN+20, "Real-time signal 20"), /* 52 */ \
79 _s(SIGRTMIN+21, "Real-time signal 21"), /* 53 */ \
80 _s(SIGRTMIN+22, "Real-time signal 22"), /* 54 */ \
81 _s(SIGRTMIN+23, "Real-time signal 23"), /* 55 */ \
82 _s(SIGRTMIN+24, "Real-time signal 24"), /* 56 */ \
83 _s(SIGRTMIN+25, "Real-time signal 25"), /* 57 */ \
84 _s(SIGRTMIN+26, "Real-time signal 26"), /* 58 */ \
85 _s(SIGRTMIN+27, "Real-time signal 27"), /* 59 */ \
86 _s(SIGRTMIN+28, "Real-time signal 28"), /* 60 */ \
87 _s(SIGRTMIN+29, "Real-time signal 29"), /* 61 */ \
88 _s(SIGRTMIN+30, "Real-time signal 30"), /* 62 */ \
89 _s(SIGRTMIN+31, "Real-time signal 31"), /* 63 */ \
90 _s(SIGRTMAX, "Real-time signal 32") /* 64 */
93 #define _s2(n, s, n1, s1) #n
94 const char *sys_sigabbrev
[] =
103 #define _s2(n, s, n1, s1) s
104 const char *sys_siglist
[] =
112 #define _s(n, s) {n, #n, s}
113 #define _s2(n, s, n1, s1) {n, #n, s}, {n, #n1, #s1}
114 static const sigdesc siglist
[] =
121 strsignal (int signo
)
123 const char *sigstring
= "Unknown signal %d";
124 for (int i
= 0; siglist
[i
].n
; i
++)
125 if (siglist
[i
].n
== signo
)
127 sigstring
= siglist
[i
].str
;
130 __small_sprintf (_my_tls
.locals
.signamebuf
, sigstring
, signo
);
131 return _my_tls
.locals
.signamebuf
;
135 strtosigno (const char *name
)
137 for (int i
= 0; siglist
[i
].n
; i
++)
138 if (strcmp (siglist
[i
].name
, name
) == 0)
145 v->iov_base = (void *)(str); \
146 v->iov_len = strlen ((char *)v->iov_base); \
152 psiginfo (const siginfo_t
*info
, const char *s
)
155 struct iovec
*v
= iov
;
159 if (s
!= NULL
&& *s
!= '\0')
165 ADD (strsignal (info
->si_signo
));
167 if (info
->si_signo
> 0 && info
->si_signo
< _NSIG
)
169 switch (info
->si_signo
)
175 snprintf (buf
, sizeof(buf
),
176 " (%d [%p])", info
->si_code
, info
->si_addr
);
179 snprintf (buf
, sizeof(buf
),
180 " (%d %d %d %u)", info
->si_code
, info
->si_pid
,
181 info
->si_status
, info
->si_uid
);
183 /* FIXME: implement si_band
185 fprintf (stderr, " (%d %ld)", info->si_code, info->si_band);
189 snprintf (buf
, sizeof(buf
),
190 " (%d %d %u)", info
->si_code
, info
->si_pid
,
197 ADD ((stderr
->_flags
& __SCLE
) ? "\r\n" : "\n");
203 writev (fileno (stderr
), iov
, iov_cnt
);