Tidy up debugging in the ARC port of the BFD library.
[deliverable/binutils-gdb.git] / gdb / common / signals.c
CommitLineData
0150732f 1/* Target signal translation functions for GDB.
618f726f 2 Copyright (C) 1990-2016 Free Software Foundation, Inc.
0150732f
DJ
3 Contributed by Cygnus Support.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
0150732f
DJ
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
0150732f 19
727605ca 20#include "common-defs.h"
3130066b 21
68070c10 22#ifdef HAVE_SIGNAL_H
0150732f 23#include <signal.h>
68070c10 24#endif
0150732f 25
2aecd87f
DE
26#include "gdb_signals.h"
27
1cded358
AR
28struct gdbarch;
29
960cb555
DJ
30/* Always use __SIGRTMIN if it's available. SIGRTMIN is the lowest
31 _available_ realtime signal, not the lowest supported; glibc takes
32 several for its own use. */
33
34#ifndef REALTIME_LO
35# if defined(__SIGRTMIN)
36# define REALTIME_LO __SIGRTMIN
0b757755 37# define REALTIME_HI (__SIGRTMAX + 1)
960cb555 38# elif defined(SIGRTMIN)
bdd73e22 39# define REALTIME_LO SIGRTMIN
0b757755 40# define REALTIME_HI (SIGRTMAX + 1)
960cb555
DJ
41# endif
42#endif
43
9a2b4c1b 44/* This table must match in order and size the signals in enum
2ea28649 45 gdb_signal. */
a19cae16 46
54363045 47static const struct {
c9737c08 48 const char *symbol;
54363045
DE
49 const char *name;
50 const char *string;
0150732f
DJ
51 } signals [] =
52{
c9737c08 53#define SET(symbol, constant, name, string) { #symbol, name, string },
a19cae16 54#include "gdb/signals.def"
a19cae16 55#undef SET
0150732f 56};
0150732f 57
c9737c08
PA
58const char *
59gdb_signal_to_symbol_string (enum gdb_signal sig)
60{
61 gdb_assert ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST);
62
63 return signals[sig].symbol;
64}
0150732f
DJ
65
66/* Return the string for a signal. */
54363045 67const char *
2ea28649 68gdb_signal_to_string (enum gdb_signal sig)
0150732f 69{
a493e3e2 70 if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST)
0150732f
DJ
71 return signals[sig].string;
72 else
a493e3e2 73 return signals[GDB_SIGNAL_UNKNOWN].string;
0150732f
DJ
74}
75
76/* Return the name for a signal. */
54363045 77const char *
2ea28649 78gdb_signal_to_name (enum gdb_signal sig)
0150732f 79{
a493e3e2 80 if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST
ade8f45e 81 && signals[sig].name != NULL)
89c49e7a
AC
82 return signals[sig].name;
83 else
ade8f45e
AC
84 /* I think the code which prints this will always print it along
85 with the string, so no need to be verbose (very old comment). */
86 return "?";
0150732f
DJ
87}
88
89/* Given a name, return its signal. */
2ea28649
PA
90enum gdb_signal
91gdb_signal_from_name (const char *name)
0150732f 92{
2ea28649 93 enum gdb_signal sig;
0150732f
DJ
94
95 /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
a493e3e2 96 for GDB_SIGNAL_SIGCHLD. SIGIOT, on the other hand, is more
0150732f
DJ
97 questionable; seems like by now people should call it SIGABRT
98 instead. */
99
100 /* This ugly cast brought to you by the native VAX compiler. */
a493e3e2
PA
101 for (sig = GDB_SIGNAL_HUP;
102 sig < GDB_SIGNAL_LAST;
2ea28649 103 sig = (enum gdb_signal) ((int) sig + 1))
fd326606
DJ
104 if (signals[sig].name != NULL
105 && strcmp (name, signals[sig].name) == 0)
0150732f 106 return sig;
a493e3e2 107 return GDB_SIGNAL_UNKNOWN;
0150732f
DJ
108}
109\f
110/* The following functions are to help certain targets deal
111 with the signal/waitstatus stuff. They could just as well be in
112 a file called native-utils.c or unixwaitstatus-utils.c or whatever. */
113
114/* Convert host signal to our signals. */
2ea28649
PA
115enum gdb_signal
116gdb_signal_from_host (int hostsig)
0150732f 117{
3657956b
GB
118 /* A switch statement would make sense but would require special
119 kludges to deal with the cases where more than one signal has the
120 same number. Signals are ordered ANSI-standard signals first,
121 other signals second, with signals in each block ordered by their
122 numerical values on a typical POSIX platform. */
0150732f
DJ
123
124 if (hostsig == 0)
a493e3e2 125 return GDB_SIGNAL_0;
0150732f 126
3657956b
GB
127 /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
128 are ANSI-standard signals and are always available. */
129 if (hostsig == SIGINT)
130 return GDB_SIGNAL_INT;
131 if (hostsig == SIGILL)
132 return GDB_SIGNAL_ILL;
133 if (hostsig == SIGABRT)
134 return GDB_SIGNAL_ABRT;
135 if (hostsig == SIGFPE)
136 return GDB_SIGNAL_FPE;
137 if (hostsig == SIGSEGV)
138 return GDB_SIGNAL_SEGV;
139 if (hostsig == SIGTERM)
140 return GDB_SIGNAL_TERM;
141
142 /* All other signals need preprocessor conditionals. */
0150732f
DJ
143#if defined (SIGHUP)
144 if (hostsig == SIGHUP)
a493e3e2 145 return GDB_SIGNAL_HUP;
0150732f 146#endif
0150732f
DJ
147#if defined (SIGQUIT)
148 if (hostsig == SIGQUIT)
a493e3e2 149 return GDB_SIGNAL_QUIT;
0150732f 150#endif
0150732f
DJ
151#if defined (SIGTRAP)
152 if (hostsig == SIGTRAP)
a493e3e2 153 return GDB_SIGNAL_TRAP;
0150732f 154#endif
0150732f
DJ
155#if defined (SIGEMT)
156 if (hostsig == SIGEMT)
a493e3e2 157 return GDB_SIGNAL_EMT;
0150732f 158#endif
0150732f
DJ
159#if defined (SIGKILL)
160 if (hostsig == SIGKILL)
a493e3e2 161 return GDB_SIGNAL_KILL;
0150732f
DJ
162#endif
163#if defined (SIGBUS)
164 if (hostsig == SIGBUS)
a493e3e2 165 return GDB_SIGNAL_BUS;
0150732f 166#endif
0150732f
DJ
167#if defined (SIGSYS)
168 if (hostsig == SIGSYS)
a493e3e2 169 return GDB_SIGNAL_SYS;
0150732f
DJ
170#endif
171#if defined (SIGPIPE)
172 if (hostsig == SIGPIPE)
a493e3e2 173 return GDB_SIGNAL_PIPE;
0150732f
DJ
174#endif
175#if defined (SIGALRM)
176 if (hostsig == SIGALRM)
a493e3e2 177 return GDB_SIGNAL_ALRM;
0150732f 178#endif
0150732f
DJ
179#if defined (SIGUSR1)
180 if (hostsig == SIGUSR1)
a493e3e2 181 return GDB_SIGNAL_USR1;
0150732f
DJ
182#endif
183#if defined (SIGUSR2)
184 if (hostsig == SIGUSR2)
a493e3e2 185 return GDB_SIGNAL_USR2;
0150732f
DJ
186#endif
187#if defined (SIGCLD)
188 if (hostsig == SIGCLD)
a493e3e2 189 return GDB_SIGNAL_CHLD;
0150732f
DJ
190#endif
191#if defined (SIGCHLD)
192 if (hostsig == SIGCHLD)
a493e3e2 193 return GDB_SIGNAL_CHLD;
0150732f
DJ
194#endif
195#if defined (SIGPWR)
196 if (hostsig == SIGPWR)
a493e3e2 197 return GDB_SIGNAL_PWR;
0150732f
DJ
198#endif
199#if defined (SIGWINCH)
200 if (hostsig == SIGWINCH)
a493e3e2 201 return GDB_SIGNAL_WINCH;
0150732f
DJ
202#endif
203#if defined (SIGURG)
204 if (hostsig == SIGURG)
a493e3e2 205 return GDB_SIGNAL_URG;
0150732f
DJ
206#endif
207#if defined (SIGIO)
208 if (hostsig == SIGIO)
a493e3e2 209 return GDB_SIGNAL_IO;
0150732f
DJ
210#endif
211#if defined (SIGPOLL)
212 if (hostsig == SIGPOLL)
a493e3e2 213 return GDB_SIGNAL_POLL;
0150732f
DJ
214#endif
215#if defined (SIGSTOP)
216 if (hostsig == SIGSTOP)
a493e3e2 217 return GDB_SIGNAL_STOP;
0150732f
DJ
218#endif
219#if defined (SIGTSTP)
220 if (hostsig == SIGTSTP)
a493e3e2 221 return GDB_SIGNAL_TSTP;
0150732f
DJ
222#endif
223#if defined (SIGCONT)
224 if (hostsig == SIGCONT)
a493e3e2 225 return GDB_SIGNAL_CONT;
0150732f
DJ
226#endif
227#if defined (SIGTTIN)
228 if (hostsig == SIGTTIN)
a493e3e2 229 return GDB_SIGNAL_TTIN;
0150732f
DJ
230#endif
231#if defined (SIGTTOU)
232 if (hostsig == SIGTTOU)
a493e3e2 233 return GDB_SIGNAL_TTOU;
0150732f
DJ
234#endif
235#if defined (SIGVTALRM)
236 if (hostsig == SIGVTALRM)
a493e3e2 237 return GDB_SIGNAL_VTALRM;
0150732f
DJ
238#endif
239#if defined (SIGPROF)
240 if (hostsig == SIGPROF)
a493e3e2 241 return GDB_SIGNAL_PROF;
0150732f
DJ
242#endif
243#if defined (SIGXCPU)
244 if (hostsig == SIGXCPU)
a493e3e2 245 return GDB_SIGNAL_XCPU;
0150732f
DJ
246#endif
247#if defined (SIGXFSZ)
248 if (hostsig == SIGXFSZ)
a493e3e2 249 return GDB_SIGNAL_XFSZ;
0150732f
DJ
250#endif
251#if defined (SIGWIND)
252 if (hostsig == SIGWIND)
a493e3e2 253 return GDB_SIGNAL_WIND;
0150732f
DJ
254#endif
255#if defined (SIGPHONE)
256 if (hostsig == SIGPHONE)
a493e3e2 257 return GDB_SIGNAL_PHONE;
0150732f
DJ
258#endif
259#if defined (SIGLOST)
260 if (hostsig == SIGLOST)
a493e3e2 261 return GDB_SIGNAL_LOST;
0150732f
DJ
262#endif
263#if defined (SIGWAITING)
264 if (hostsig == SIGWAITING)
a493e3e2 265 return GDB_SIGNAL_WAITING;
0150732f
DJ
266#endif
267#if defined (SIGCANCEL)
268 if (hostsig == SIGCANCEL)
a493e3e2 269 return GDB_SIGNAL_CANCEL;
0150732f
DJ
270#endif
271#if defined (SIGLWP)
272 if (hostsig == SIGLWP)
a493e3e2 273 return GDB_SIGNAL_LWP;
0150732f
DJ
274#endif
275#if defined (SIGDANGER)
276 if (hostsig == SIGDANGER)
a493e3e2 277 return GDB_SIGNAL_DANGER;
0150732f
DJ
278#endif
279#if defined (SIGGRANT)
280 if (hostsig == SIGGRANT)
a493e3e2 281 return GDB_SIGNAL_GRANT;
0150732f
DJ
282#endif
283#if defined (SIGRETRACT)
284 if (hostsig == SIGRETRACT)
a493e3e2 285 return GDB_SIGNAL_RETRACT;
0150732f
DJ
286#endif
287#if defined (SIGMSG)
288 if (hostsig == SIGMSG)
a493e3e2 289 return GDB_SIGNAL_MSG;
0150732f
DJ
290#endif
291#if defined (SIGSOUND)
292 if (hostsig == SIGSOUND)
a493e3e2 293 return GDB_SIGNAL_SOUND;
0150732f
DJ
294#endif
295#if defined (SIGSAK)
296 if (hostsig == SIGSAK)
a493e3e2 297 return GDB_SIGNAL_SAK;
0150732f
DJ
298#endif
299#if defined (SIGPRIO)
300 if (hostsig == SIGPRIO)
a493e3e2 301 return GDB_SIGNAL_PRIO;
0150732f
DJ
302#endif
303
304 /* Mach exceptions. Assumes that the values for EXC_ are positive! */
305#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
306 if (hostsig == _NSIG + EXC_BAD_ACCESS)
4e225075 307 return GDB_EXC_BAD_ACCESS;
0150732f
DJ
308#endif
309#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
310 if (hostsig == _NSIG + EXC_BAD_INSTRUCTION)
4e225075 311 return GDB_EXC_BAD_INSTRUCTION;
0150732f
DJ
312#endif
313#if defined (EXC_ARITHMETIC) && defined (_NSIG)
314 if (hostsig == _NSIG + EXC_ARITHMETIC)
4e225075 315 return GDB_EXC_ARITHMETIC;
0150732f
DJ
316#endif
317#if defined (EXC_EMULATION) && defined (_NSIG)
318 if (hostsig == _NSIG + EXC_EMULATION)
4e225075 319 return GDB_EXC_EMULATION;
0150732f
DJ
320#endif
321#if defined (EXC_SOFTWARE) && defined (_NSIG)
322 if (hostsig == _NSIG + EXC_SOFTWARE)
4e225075 323 return GDB_EXC_SOFTWARE;
0150732f
DJ
324#endif
325#if defined (EXC_BREAKPOINT) && defined (_NSIG)
326 if (hostsig == _NSIG + EXC_BREAKPOINT)
4e225075 327 return GDB_EXC_BREAKPOINT;
0150732f
DJ
328#endif
329
330#if defined (SIGINFO)
331 if (hostsig == SIGINFO)
a493e3e2 332 return GDB_SIGNAL_INFO;
0150732f
DJ
333#endif
334
335#if defined (REALTIME_LO)
336 if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
337 {
a493e3e2 338 /* This block of GDB_SIGNAL_REALTIME value is in order. */
0150732f 339 if (33 <= hostsig && hostsig <= 63)
2ea28649 340 return (enum gdb_signal)
a493e3e2 341 (hostsig - 33 + (int) GDB_SIGNAL_REALTIME_33);
0150732f 342 else if (hostsig == 32)
a493e3e2 343 return GDB_SIGNAL_REALTIME_32;
0150732f 344 else if (64 <= hostsig && hostsig <= 127)
2ea28649 345 return (enum gdb_signal)
a493e3e2 346 (hostsig - 64 + (int) GDB_SIGNAL_REALTIME_64);
0150732f 347 else
2ea28649 348 error (_("GDB bug: target.c (gdb_signal_from_host): "
9e0627f1 349 "unrecognized real-time signal"));
0150732f
DJ
350 }
351#endif
352
a493e3e2 353 return GDB_SIGNAL_UNKNOWN;
0150732f
DJ
354}
355
2ea28649 356/* Convert a OURSIG (an enum gdb_signal) to the form used by the
0150732f
DJ
357 target operating system (refered to as the ``host'') or zero if the
358 equivalent host signal is not available. Set/clear OURSIG_OK
359 accordingly. */
360
361static int
2ea28649 362do_gdb_signal_to_host (enum gdb_signal oursig,
0150732f
DJ
363 int *oursig_ok)
364{
f541410f 365 int retsig;
68070c10
PA
366 /* Silence the 'not used' warning, for targets that
367 do not support signals. */
368 (void) retsig;
f541410f 369
3657956b
GB
370 /* Signals are ordered ANSI-standard signals first, other signals
371 second, with signals in each block ordered by their numerical
372 values on a typical POSIX platform. */
373
0150732f
DJ
374 *oursig_ok = 1;
375 switch (oursig)
376 {
a493e3e2 377 case GDB_SIGNAL_0:
0150732f
DJ
378 return 0;
379
3657956b
GB
380 /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
381 are ANSI-standard signals and are always available. */
382 case GDB_SIGNAL_INT:
383 return SIGINT;
384 case GDB_SIGNAL_ILL:
385 return SIGILL;
386 case GDB_SIGNAL_ABRT:
387 return SIGABRT;
388 case GDB_SIGNAL_FPE:
389 return SIGFPE;
390 case GDB_SIGNAL_SEGV:
391 return SIGSEGV;
392 case GDB_SIGNAL_TERM:
393 return SIGTERM;
394
395 /* All other signals need preprocessor conditionals. */
0150732f 396#if defined (SIGHUP)
a493e3e2 397 case GDB_SIGNAL_HUP:
0150732f
DJ
398 return SIGHUP;
399#endif
0150732f 400#if defined (SIGQUIT)
a493e3e2 401 case GDB_SIGNAL_QUIT:
0150732f
DJ
402 return SIGQUIT;
403#endif
0150732f 404#if defined (SIGTRAP)
a493e3e2 405 case GDB_SIGNAL_TRAP:
0150732f
DJ
406 return SIGTRAP;
407#endif
0150732f 408#if defined (SIGEMT)
a493e3e2 409 case GDB_SIGNAL_EMT:
0150732f
DJ
410 return SIGEMT;
411#endif
0150732f 412#if defined (SIGKILL)
a493e3e2 413 case GDB_SIGNAL_KILL:
0150732f
DJ
414 return SIGKILL;
415#endif
416#if defined (SIGBUS)
a493e3e2 417 case GDB_SIGNAL_BUS:
0150732f
DJ
418 return SIGBUS;
419#endif
0150732f 420#if defined (SIGSYS)
a493e3e2 421 case GDB_SIGNAL_SYS:
0150732f
DJ
422 return SIGSYS;
423#endif
424#if defined (SIGPIPE)
a493e3e2 425 case GDB_SIGNAL_PIPE:
0150732f
DJ
426 return SIGPIPE;
427#endif
428#if defined (SIGALRM)
a493e3e2 429 case GDB_SIGNAL_ALRM:
0150732f
DJ
430 return SIGALRM;
431#endif
0150732f 432#if defined (SIGUSR1)
a493e3e2 433 case GDB_SIGNAL_USR1:
0150732f
DJ
434 return SIGUSR1;
435#endif
436#if defined (SIGUSR2)
a493e3e2 437 case GDB_SIGNAL_USR2:
0150732f
DJ
438 return SIGUSR2;
439#endif
440#if defined (SIGCHLD) || defined (SIGCLD)
a493e3e2 441 case GDB_SIGNAL_CHLD:
0150732f
DJ
442#if defined (SIGCHLD)
443 return SIGCHLD;
444#else
445 return SIGCLD;
446#endif
447#endif /* SIGCLD or SIGCHLD */
448#if defined (SIGPWR)
a493e3e2 449 case GDB_SIGNAL_PWR:
0150732f
DJ
450 return SIGPWR;
451#endif
452#if defined (SIGWINCH)
a493e3e2 453 case GDB_SIGNAL_WINCH:
0150732f
DJ
454 return SIGWINCH;
455#endif
456#if defined (SIGURG)
a493e3e2 457 case GDB_SIGNAL_URG:
0150732f
DJ
458 return SIGURG;
459#endif
460#if defined (SIGIO)
a493e3e2 461 case GDB_SIGNAL_IO:
0150732f
DJ
462 return SIGIO;
463#endif
464#if defined (SIGPOLL)
a493e3e2 465 case GDB_SIGNAL_POLL:
0150732f
DJ
466 return SIGPOLL;
467#endif
468#if defined (SIGSTOP)
a493e3e2 469 case GDB_SIGNAL_STOP:
0150732f
DJ
470 return SIGSTOP;
471#endif
472#if defined (SIGTSTP)
a493e3e2 473 case GDB_SIGNAL_TSTP:
0150732f
DJ
474 return SIGTSTP;
475#endif
476#if defined (SIGCONT)
a493e3e2 477 case GDB_SIGNAL_CONT:
0150732f
DJ
478 return SIGCONT;
479#endif
480#if defined (SIGTTIN)
a493e3e2 481 case GDB_SIGNAL_TTIN:
0150732f
DJ
482 return SIGTTIN;
483#endif
484#if defined (SIGTTOU)
a493e3e2 485 case GDB_SIGNAL_TTOU:
0150732f
DJ
486 return SIGTTOU;
487#endif
488#if defined (SIGVTALRM)
a493e3e2 489 case GDB_SIGNAL_VTALRM:
0150732f
DJ
490 return SIGVTALRM;
491#endif
492#if defined (SIGPROF)
a493e3e2 493 case GDB_SIGNAL_PROF:
0150732f
DJ
494 return SIGPROF;
495#endif
496#if defined (SIGXCPU)
a493e3e2 497 case GDB_SIGNAL_XCPU:
0150732f
DJ
498 return SIGXCPU;
499#endif
500#if defined (SIGXFSZ)
a493e3e2 501 case GDB_SIGNAL_XFSZ:
0150732f
DJ
502 return SIGXFSZ;
503#endif
504#if defined (SIGWIND)
a493e3e2 505 case GDB_SIGNAL_WIND:
0150732f
DJ
506 return SIGWIND;
507#endif
508#if defined (SIGPHONE)
a493e3e2 509 case GDB_SIGNAL_PHONE:
0150732f
DJ
510 return SIGPHONE;
511#endif
512#if defined (SIGLOST)
a493e3e2 513 case GDB_SIGNAL_LOST:
0150732f
DJ
514 return SIGLOST;
515#endif
516#if defined (SIGWAITING)
a493e3e2 517 case GDB_SIGNAL_WAITING:
0150732f
DJ
518 return SIGWAITING;
519#endif
520#if defined (SIGCANCEL)
a493e3e2 521 case GDB_SIGNAL_CANCEL:
0150732f
DJ
522 return SIGCANCEL;
523#endif
524#if defined (SIGLWP)
a493e3e2 525 case GDB_SIGNAL_LWP:
0150732f
DJ
526 return SIGLWP;
527#endif
528#if defined (SIGDANGER)
a493e3e2 529 case GDB_SIGNAL_DANGER:
0150732f
DJ
530 return SIGDANGER;
531#endif
532#if defined (SIGGRANT)
a493e3e2 533 case GDB_SIGNAL_GRANT:
0150732f
DJ
534 return SIGGRANT;
535#endif
536#if defined (SIGRETRACT)
a493e3e2 537 case GDB_SIGNAL_RETRACT:
0150732f
DJ
538 return SIGRETRACT;
539#endif
540#if defined (SIGMSG)
a493e3e2 541 case GDB_SIGNAL_MSG:
0150732f
DJ
542 return SIGMSG;
543#endif
544#if defined (SIGSOUND)
a493e3e2 545 case GDB_SIGNAL_SOUND:
0150732f
DJ
546 return SIGSOUND;
547#endif
548#if defined (SIGSAK)
a493e3e2 549 case GDB_SIGNAL_SAK:
0150732f
DJ
550 return SIGSAK;
551#endif
552#if defined (SIGPRIO)
a493e3e2 553 case GDB_SIGNAL_PRIO:
0150732f
DJ
554 return SIGPRIO;
555#endif
556
557 /* Mach exceptions. Assumes that the values for EXC_ are positive! */
558#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
4e225075 559 case GDB_EXC_BAD_ACCESS:
0150732f
DJ
560 return _NSIG + EXC_BAD_ACCESS;
561#endif
562#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
4e225075 563 case GDB_EXC_BAD_INSTRUCTION:
0150732f
DJ
564 return _NSIG + EXC_BAD_INSTRUCTION;
565#endif
566#if defined (EXC_ARITHMETIC) && defined (_NSIG)
4e225075 567 case GDB_EXC_ARITHMETIC:
0150732f
DJ
568 return _NSIG + EXC_ARITHMETIC;
569#endif
570#if defined (EXC_EMULATION) && defined (_NSIG)
4e225075 571 case GDB_EXC_EMULATION:
0150732f
DJ
572 return _NSIG + EXC_EMULATION;
573#endif
574#if defined (EXC_SOFTWARE) && defined (_NSIG)
4e225075 575 case GDB_EXC_SOFTWARE:
0150732f
DJ
576 return _NSIG + EXC_SOFTWARE;
577#endif
578#if defined (EXC_BREAKPOINT) && defined (_NSIG)
4e225075 579 case GDB_EXC_BREAKPOINT:
0150732f
DJ
580 return _NSIG + EXC_BREAKPOINT;
581#endif
582
583#if defined (SIGINFO)
a493e3e2 584 case GDB_SIGNAL_INFO:
0150732f
DJ
585 return SIGINFO;
586#endif
587
588 default:
589#if defined (REALTIME_LO)
f541410f 590 retsig = 0;
0150732f 591
a493e3e2
PA
592 if (oursig >= GDB_SIGNAL_REALTIME_33
593 && oursig <= GDB_SIGNAL_REALTIME_63)
0150732f
DJ
594 {
595 /* This block of signals is continuous, and
a493e3e2
PA
596 GDB_SIGNAL_REALTIME_33 is 33 by definition. */
597 retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_33 + 33;
0150732f 598 }
a493e3e2 599 else if (oursig == GDB_SIGNAL_REALTIME_32)
2f2cf184 600 {
a493e3e2
PA
601 /* GDB_SIGNAL_REALTIME_32 isn't contiguous with
602 GDB_SIGNAL_REALTIME_33. It is 32 by definition. */
f541410f 603 retsig = 32;
2f2cf184 604 }
a493e3e2
PA
605 else if (oursig >= GDB_SIGNAL_REALTIME_64
606 && oursig <= GDB_SIGNAL_REALTIME_127)
2f2cf184
DJ
607 {
608 /* This block of signals is continuous, and
a493e3e2
PA
609 GDB_SIGNAL_REALTIME_64 is 64 by definition. */
610 retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_64 + 64;
2f2cf184 611 }
f541410f
DJ
612
613 if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
614 return retsig;
0150732f 615#endif
960cb555 616
0150732f
DJ
617 *oursig_ok = 0;
618 return 0;
619 }
620}
621
622int
2ea28649 623gdb_signal_to_host_p (enum gdb_signal oursig)
0150732f
DJ
624{
625 int oursig_ok;
2ea28649 626 do_gdb_signal_to_host (oursig, &oursig_ok);
0150732f
DJ
627 return oursig_ok;
628}
629
630int
2ea28649 631gdb_signal_to_host (enum gdb_signal oursig)
0150732f
DJ
632{
633 int oursig_ok;
2ea28649 634 int targ_signo = do_gdb_signal_to_host (oursig, &oursig_ok);
0150732f
DJ
635 if (!oursig_ok)
636 {
637 /* The user might be trying to do "signal SIGSAK" where this system
638 doesn't have SIGSAK. */
9e0627f1 639 warning (_("Signal %s does not exist on this system."),
2ea28649 640 gdb_signal_to_name (oursig));
0150732f
DJ
641 return 0;
642 }
643 else
644 return targ_signo;
645}
This page took 1.209271 seconds and 4 git commands to generate.