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