* tuiDisassem.c (tui_disassemble): New function to disassemble
[deliverable/binutils-gdb.git] / gdb / signals / signals.c
CommitLineData
0150732f
DJ
1/* Target signal translation functions for GDB.
2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3130066b 3 2000, 2001, 2002 Free Software Foundation, Inc.
0150732f
DJ
4 Contributed by Cygnus Support.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
22
3130066b
DJ
23#ifdef GDBSERVER
24#include "server.h"
25#else
0150732f
DJ
26#include "defs.h"
27#include "target.h"
3130066b
DJ
28#endif
29
0150732f
DJ
30#include <signal.h>
31
32/* This table must match in order and size the signals in enum target_signal
33 in target.h. */
34/* *INDENT-OFF* */
35static struct {
36 char *name;
37 char *string;
38 } signals [] =
39{
40 {"0", "Signal 0"},
41 {"SIGHUP", "Hangup"},
42 {"SIGINT", "Interrupt"},
43 {"SIGQUIT", "Quit"},
44 {"SIGILL", "Illegal instruction"},
45 {"SIGTRAP", "Trace/breakpoint trap"},
46 {"SIGABRT", "Aborted"},
47 {"SIGEMT", "Emulation trap"},
48 {"SIGFPE", "Arithmetic exception"},
49 {"SIGKILL", "Killed"},
50 {"SIGBUS", "Bus error"},
51 {"SIGSEGV", "Segmentation fault"},
52 {"SIGSYS", "Bad system call"},
53 {"SIGPIPE", "Broken pipe"},
54 {"SIGALRM", "Alarm clock"},
55 {"SIGTERM", "Terminated"},
56 {"SIGURG", "Urgent I/O condition"},
57 {"SIGSTOP", "Stopped (signal)"},
58 {"SIGTSTP", "Stopped (user)"},
59 {"SIGCONT", "Continued"},
60 {"SIGCHLD", "Child status changed"},
61 {"SIGTTIN", "Stopped (tty input)"},
62 {"SIGTTOU", "Stopped (tty output)"},
63 {"SIGIO", "I/O possible"},
64 {"SIGXCPU", "CPU time limit exceeded"},
65 {"SIGXFSZ", "File size limit exceeded"},
66 {"SIGVTALRM", "Virtual timer expired"},
67 {"SIGPROF", "Profiling timer expired"},
68 {"SIGWINCH", "Window size changed"},
69 {"SIGLOST", "Resource lost"},
70 {"SIGUSR1", "User defined signal 1"},
71 {"SIGUSR2", "User defined signal 2"},
72 {"SIGPWR", "Power fail/restart"},
73 {"SIGPOLL", "Pollable event occurred"},
74 {"SIGWIND", "SIGWIND"},
75 {"SIGPHONE", "SIGPHONE"},
76 {"SIGWAITING", "Process's LWPs are blocked"},
77 {"SIGLWP", "Signal LWP"},
78 {"SIGDANGER", "Swap space dangerously low"},
79 {"SIGGRANT", "Monitor mode granted"},
80 {"SIGRETRACT", "Need to relinquish monitor mode"},
81 {"SIGMSG", "Monitor mode data available"},
82 {"SIGSOUND", "Sound completed"},
83 {"SIGSAK", "Secure attention"},
84 {"SIGPRIO", "SIGPRIO"},
85 {"SIG33", "Real-time event 33"},
86 {"SIG34", "Real-time event 34"},
87 {"SIG35", "Real-time event 35"},
88 {"SIG36", "Real-time event 36"},
89 {"SIG37", "Real-time event 37"},
90 {"SIG38", "Real-time event 38"},
91 {"SIG39", "Real-time event 39"},
92 {"SIG40", "Real-time event 40"},
93 {"SIG41", "Real-time event 41"},
94 {"SIG42", "Real-time event 42"},
95 {"SIG43", "Real-time event 43"},
96 {"SIG44", "Real-time event 44"},
97 {"SIG45", "Real-time event 45"},
98 {"SIG46", "Real-time event 46"},
99 {"SIG47", "Real-time event 47"},
100 {"SIG48", "Real-time event 48"},
101 {"SIG49", "Real-time event 49"},
102 {"SIG50", "Real-time event 50"},
103 {"SIG51", "Real-time event 51"},
104 {"SIG52", "Real-time event 52"},
105 {"SIG53", "Real-time event 53"},
106 {"SIG54", "Real-time event 54"},
107 {"SIG55", "Real-time event 55"},
108 {"SIG56", "Real-time event 56"},
109 {"SIG57", "Real-time event 57"},
110 {"SIG58", "Real-time event 58"},
111 {"SIG59", "Real-time event 59"},
112 {"SIG60", "Real-time event 60"},
113 {"SIG61", "Real-time event 61"},
114 {"SIG62", "Real-time event 62"},
115 {"SIG63", "Real-time event 63"},
116 {"SIGCANCEL", "LWP internal signal"},
117 {"SIG32", "Real-time event 32"},
118 {"SIG64", "Real-time event 64"},
119 {"SIG65", "Real-time event 65"},
120 {"SIG66", "Real-time event 66"},
121 {"SIG67", "Real-time event 67"},
122 {"SIG68", "Real-time event 68"},
123 {"SIG69", "Real-time event 69"},
124 {"SIG70", "Real-time event 70"},
125 {"SIG71", "Real-time event 71"},
126 {"SIG72", "Real-time event 72"},
127 {"SIG73", "Real-time event 73"},
128 {"SIG74", "Real-time event 74"},
129 {"SIG75", "Real-time event 75"},
130 {"SIG76", "Real-time event 76"},
131 {"SIG77", "Real-time event 77"},
132 {"SIG78", "Real-time event 78"},
133 {"SIG79", "Real-time event 79"},
134 {"SIG80", "Real-time event 80"},
135 {"SIG81", "Real-time event 81"},
136 {"SIG82", "Real-time event 82"},
137 {"SIG83", "Real-time event 83"},
138 {"SIG84", "Real-time event 84"},
139 {"SIG85", "Real-time event 85"},
140 {"SIG86", "Real-time event 86"},
141 {"SIG87", "Real-time event 87"},
142 {"SIG88", "Real-time event 88"},
143 {"SIG89", "Real-time event 89"},
144 {"SIG90", "Real-time event 90"},
145 {"SIG91", "Real-time event 91"},
146 {"SIG92", "Real-time event 92"},
147 {"SIG93", "Real-time event 93"},
148 {"SIG94", "Real-time event 94"},
149 {"SIG95", "Real-time event 95"},
150 {"SIG96", "Real-time event 96"},
151 {"SIG97", "Real-time event 97"},
152 {"SIG98", "Real-time event 98"},
153 {"SIG99", "Real-time event 99"},
154 {"SIG100", "Real-time event 100"},
155 {"SIG101", "Real-time event 101"},
156 {"SIG102", "Real-time event 102"},
157 {"SIG103", "Real-time event 103"},
158 {"SIG104", "Real-time event 104"},
159 {"SIG105", "Real-time event 105"},
160 {"SIG106", "Real-time event 106"},
161 {"SIG107", "Real-time event 107"},
162 {"SIG108", "Real-time event 108"},
163 {"SIG109", "Real-time event 109"},
164 {"SIG110", "Real-time event 110"},
165 {"SIG111", "Real-time event 111"},
166 {"SIG112", "Real-time event 112"},
167 {"SIG113", "Real-time event 113"},
168 {"SIG114", "Real-time event 114"},
169 {"SIG115", "Real-time event 115"},
170 {"SIG116", "Real-time event 116"},
171 {"SIG117", "Real-time event 117"},
172 {"SIG118", "Real-time event 118"},
173 {"SIG119", "Real-time event 119"},
174 {"SIG120", "Real-time event 120"},
175 {"SIG121", "Real-time event 121"},
176 {"SIG122", "Real-time event 122"},
177 {"SIG123", "Real-time event 123"},
178 {"SIG124", "Real-time event 124"},
179 {"SIG125", "Real-time event 125"},
180 {"SIG126", "Real-time event 126"},
181 {"SIG127", "Real-time event 127"},
182
fd326606
DJ
183 {"SIGINFO", "Information request"},
184
185 {NULL, "Unknown signal"},
186 {NULL, "Internal error: printing TARGET_SIGNAL_DEFAULT"},
187
0150732f
DJ
188 /* Mach exceptions */
189 {"EXC_BAD_ACCESS", "Could not access memory"},
190 {"EXC_BAD_INSTRUCTION", "Illegal instruction/operand"},
191 {"EXC_ARITHMETIC", "Arithmetic exception"},
192 {"EXC_EMULATION", "Emulation instruction"},
193 {"EXC_SOFTWARE", "Software generated exception"},
194 {"EXC_BREAKPOINT", "Breakpoint"},
0150732f
DJ
195
196 /* Last entry, used to check whether the table is the right size. */
197 {NULL, "TARGET_SIGNAL_MAGIC"}
198};
199/* *INDENT-ON* */
200
201
202
203/* Return the string for a signal. */
204char *
205target_signal_to_string (enum target_signal sig)
206{
207 if ((sig >= TARGET_SIGNAL_FIRST) && (sig <= TARGET_SIGNAL_LAST))
208 return signals[sig].string;
209 else
210 return signals[TARGET_SIGNAL_UNKNOWN].string;
211}
212
213/* Return the name for a signal. */
214char *
215target_signal_to_name (enum target_signal sig)
216{
ade8f45e
AC
217 if ((sig >= TARGET_SIGNAL_FIRST) && (sig <= TARGET_SIGNAL_LAST)
218 && signals[sig].name != NULL)
89c49e7a
AC
219 return signals[sig].name;
220 else
ade8f45e
AC
221 /* I think the code which prints this will always print it along
222 with the string, so no need to be verbose (very old comment). */
223 return "?";
0150732f
DJ
224}
225
226/* Given a name, return its signal. */
227enum target_signal
228target_signal_from_name (char *name)
229{
230 enum target_signal sig;
231
232 /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
233 for TARGET_SIGNAL_SIGCHLD. SIGIOT, on the other hand, is more
234 questionable; seems like by now people should call it SIGABRT
235 instead. */
236
237 /* This ugly cast brought to you by the native VAX compiler. */
238 for (sig = TARGET_SIGNAL_HUP;
fd326606 239 sig < TARGET_SIGNAL_LAST;
0150732f 240 sig = (enum target_signal) ((int) sig + 1))
fd326606
DJ
241 if (signals[sig].name != NULL
242 && strcmp (name, signals[sig].name) == 0)
0150732f
DJ
243 return sig;
244 return TARGET_SIGNAL_UNKNOWN;
245}
246\f
247/* The following functions are to help certain targets deal
248 with the signal/waitstatus stuff. They could just as well be in
249 a file called native-utils.c or unixwaitstatus-utils.c or whatever. */
250
251/* Convert host signal to our signals. */
252enum target_signal
253target_signal_from_host (int hostsig)
254{
255 /* A switch statement would make sense but would require special kludges
256 to deal with the cases where more than one signal has the same number. */
257
258 if (hostsig == 0)
259 return TARGET_SIGNAL_0;
260
261#if defined (SIGHUP)
262 if (hostsig == SIGHUP)
263 return TARGET_SIGNAL_HUP;
264#endif
265#if defined (SIGINT)
266 if (hostsig == SIGINT)
267 return TARGET_SIGNAL_INT;
268#endif
269#if defined (SIGQUIT)
270 if (hostsig == SIGQUIT)
271 return TARGET_SIGNAL_QUIT;
272#endif
273#if defined (SIGILL)
274 if (hostsig == SIGILL)
275 return TARGET_SIGNAL_ILL;
276#endif
277#if defined (SIGTRAP)
278 if (hostsig == SIGTRAP)
279 return TARGET_SIGNAL_TRAP;
280#endif
281#if defined (SIGABRT)
282 if (hostsig == SIGABRT)
283 return TARGET_SIGNAL_ABRT;
284#endif
285#if defined (SIGEMT)
286 if (hostsig == SIGEMT)
287 return TARGET_SIGNAL_EMT;
288#endif
289#if defined (SIGFPE)
290 if (hostsig == SIGFPE)
291 return TARGET_SIGNAL_FPE;
292#endif
293#if defined (SIGKILL)
294 if (hostsig == SIGKILL)
295 return TARGET_SIGNAL_KILL;
296#endif
297#if defined (SIGBUS)
298 if (hostsig == SIGBUS)
299 return TARGET_SIGNAL_BUS;
300#endif
301#if defined (SIGSEGV)
302 if (hostsig == SIGSEGV)
303 return TARGET_SIGNAL_SEGV;
304#endif
305#if defined (SIGSYS)
306 if (hostsig == SIGSYS)
307 return TARGET_SIGNAL_SYS;
308#endif
309#if defined (SIGPIPE)
310 if (hostsig == SIGPIPE)
311 return TARGET_SIGNAL_PIPE;
312#endif
313#if defined (SIGALRM)
314 if (hostsig == SIGALRM)
315 return TARGET_SIGNAL_ALRM;
316#endif
317#if defined (SIGTERM)
318 if (hostsig == SIGTERM)
319 return TARGET_SIGNAL_TERM;
320#endif
321#if defined (SIGUSR1)
322 if (hostsig == SIGUSR1)
323 return TARGET_SIGNAL_USR1;
324#endif
325#if defined (SIGUSR2)
326 if (hostsig == SIGUSR2)
327 return TARGET_SIGNAL_USR2;
328#endif
329#if defined (SIGCLD)
330 if (hostsig == SIGCLD)
331 return TARGET_SIGNAL_CHLD;
332#endif
333#if defined (SIGCHLD)
334 if (hostsig == SIGCHLD)
335 return TARGET_SIGNAL_CHLD;
336#endif
337#if defined (SIGPWR)
338 if (hostsig == SIGPWR)
339 return TARGET_SIGNAL_PWR;
340#endif
341#if defined (SIGWINCH)
342 if (hostsig == SIGWINCH)
343 return TARGET_SIGNAL_WINCH;
344#endif
345#if defined (SIGURG)
346 if (hostsig == SIGURG)
347 return TARGET_SIGNAL_URG;
348#endif
349#if defined (SIGIO)
350 if (hostsig == SIGIO)
351 return TARGET_SIGNAL_IO;
352#endif
353#if defined (SIGPOLL)
354 if (hostsig == SIGPOLL)
355 return TARGET_SIGNAL_POLL;
356#endif
357#if defined (SIGSTOP)
358 if (hostsig == SIGSTOP)
359 return TARGET_SIGNAL_STOP;
360#endif
361#if defined (SIGTSTP)
362 if (hostsig == SIGTSTP)
363 return TARGET_SIGNAL_TSTP;
364#endif
365#if defined (SIGCONT)
366 if (hostsig == SIGCONT)
367 return TARGET_SIGNAL_CONT;
368#endif
369#if defined (SIGTTIN)
370 if (hostsig == SIGTTIN)
371 return TARGET_SIGNAL_TTIN;
372#endif
373#if defined (SIGTTOU)
374 if (hostsig == SIGTTOU)
375 return TARGET_SIGNAL_TTOU;
376#endif
377#if defined (SIGVTALRM)
378 if (hostsig == SIGVTALRM)
379 return TARGET_SIGNAL_VTALRM;
380#endif
381#if defined (SIGPROF)
382 if (hostsig == SIGPROF)
383 return TARGET_SIGNAL_PROF;
384#endif
385#if defined (SIGXCPU)
386 if (hostsig == SIGXCPU)
387 return TARGET_SIGNAL_XCPU;
388#endif
389#if defined (SIGXFSZ)
390 if (hostsig == SIGXFSZ)
391 return TARGET_SIGNAL_XFSZ;
392#endif
393#if defined (SIGWIND)
394 if (hostsig == SIGWIND)
395 return TARGET_SIGNAL_WIND;
396#endif
397#if defined (SIGPHONE)
398 if (hostsig == SIGPHONE)
399 return TARGET_SIGNAL_PHONE;
400#endif
401#if defined (SIGLOST)
402 if (hostsig == SIGLOST)
403 return TARGET_SIGNAL_LOST;
404#endif
405#if defined (SIGWAITING)
406 if (hostsig == SIGWAITING)
407 return TARGET_SIGNAL_WAITING;
408#endif
409#if defined (SIGCANCEL)
410 if (hostsig == SIGCANCEL)
411 return TARGET_SIGNAL_CANCEL;
412#endif
413#if defined (SIGLWP)
414 if (hostsig == SIGLWP)
415 return TARGET_SIGNAL_LWP;
416#endif
417#if defined (SIGDANGER)
418 if (hostsig == SIGDANGER)
419 return TARGET_SIGNAL_DANGER;
420#endif
421#if defined (SIGGRANT)
422 if (hostsig == SIGGRANT)
423 return TARGET_SIGNAL_GRANT;
424#endif
425#if defined (SIGRETRACT)
426 if (hostsig == SIGRETRACT)
427 return TARGET_SIGNAL_RETRACT;
428#endif
429#if defined (SIGMSG)
430 if (hostsig == SIGMSG)
431 return TARGET_SIGNAL_MSG;
432#endif
433#if defined (SIGSOUND)
434 if (hostsig == SIGSOUND)
435 return TARGET_SIGNAL_SOUND;
436#endif
437#if defined (SIGSAK)
438 if (hostsig == SIGSAK)
439 return TARGET_SIGNAL_SAK;
440#endif
441#if defined (SIGPRIO)
442 if (hostsig == SIGPRIO)
443 return TARGET_SIGNAL_PRIO;
444#endif
445
446 /* Mach exceptions. Assumes that the values for EXC_ are positive! */
447#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
448 if (hostsig == _NSIG + EXC_BAD_ACCESS)
449 return TARGET_EXC_BAD_ACCESS;
450#endif
451#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
452 if (hostsig == _NSIG + EXC_BAD_INSTRUCTION)
453 return TARGET_EXC_BAD_INSTRUCTION;
454#endif
455#if defined (EXC_ARITHMETIC) && defined (_NSIG)
456 if (hostsig == _NSIG + EXC_ARITHMETIC)
457 return TARGET_EXC_ARITHMETIC;
458#endif
459#if defined (EXC_EMULATION) && defined (_NSIG)
460 if (hostsig == _NSIG + EXC_EMULATION)
461 return TARGET_EXC_EMULATION;
462#endif
463#if defined (EXC_SOFTWARE) && defined (_NSIG)
464 if (hostsig == _NSIG + EXC_SOFTWARE)
465 return TARGET_EXC_SOFTWARE;
466#endif
467#if defined (EXC_BREAKPOINT) && defined (_NSIG)
468 if (hostsig == _NSIG + EXC_BREAKPOINT)
469 return TARGET_EXC_BREAKPOINT;
470#endif
471
472#if defined (SIGINFO)
473 if (hostsig == SIGINFO)
474 return TARGET_SIGNAL_INFO;
475#endif
476
477#if defined (REALTIME_LO)
478 if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
479 {
480 /* This block of TARGET_SIGNAL_REALTIME value is in order. */
481 if (33 <= hostsig && hostsig <= 63)
482 return (enum target_signal)
483 (hostsig - 33 + (int) TARGET_SIGNAL_REALTIME_33);
484 else if (hostsig == 32)
485 return TARGET_SIGNAL_REALTIME_32;
486 else if (64 <= hostsig && hostsig <= 127)
487 return (enum target_signal)
488 (hostsig - 64 + (int) TARGET_SIGNAL_REALTIME_64);
489 else
490 error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
491 }
492#endif
493
494#if defined (SIGRTMIN)
495 if (hostsig >= SIGRTMIN && hostsig <= SIGRTMAX)
496 {
497 /* This block of TARGET_SIGNAL_REALTIME value is in order. */
498 if (33 <= hostsig && hostsig <= 63)
499 return (enum target_signal)
500 (hostsig - 33 + (int) TARGET_SIGNAL_REALTIME_33);
2f2cf184
DJ
501 else if (hostsig == 32)
502 return TARGET_SIGNAL_REALTIME_32;
503 else if (64 <= hostsig && hostsig <= 127)
504 return (enum target_signal)
505 (hostsig - 64 + (int) TARGET_SIGNAL_REALTIME_64);
0150732f
DJ
506 else
507 error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal");
508 }
509#endif
510 return TARGET_SIGNAL_UNKNOWN;
511}
512
513/* Convert a OURSIG (an enum target_signal) to the form used by the
514 target operating system (refered to as the ``host'') or zero if the
515 equivalent host signal is not available. Set/clear OURSIG_OK
516 accordingly. */
517
518static int
519do_target_signal_to_host (enum target_signal oursig,
520 int *oursig_ok)
521{
522 *oursig_ok = 1;
523 switch (oursig)
524 {
525 case TARGET_SIGNAL_0:
526 return 0;
527
528#if defined (SIGHUP)
529 case TARGET_SIGNAL_HUP:
530 return SIGHUP;
531#endif
532#if defined (SIGINT)
533 case TARGET_SIGNAL_INT:
534 return SIGINT;
535#endif
536#if defined (SIGQUIT)
537 case TARGET_SIGNAL_QUIT:
538 return SIGQUIT;
539#endif
540#if defined (SIGILL)
541 case TARGET_SIGNAL_ILL:
542 return SIGILL;
543#endif
544#if defined (SIGTRAP)
545 case TARGET_SIGNAL_TRAP:
546 return SIGTRAP;
547#endif
548#if defined (SIGABRT)
549 case TARGET_SIGNAL_ABRT:
550 return SIGABRT;
551#endif
552#if defined (SIGEMT)
553 case TARGET_SIGNAL_EMT:
554 return SIGEMT;
555#endif
556#if defined (SIGFPE)
557 case TARGET_SIGNAL_FPE:
558 return SIGFPE;
559#endif
560#if defined (SIGKILL)
561 case TARGET_SIGNAL_KILL:
562 return SIGKILL;
563#endif
564#if defined (SIGBUS)
565 case TARGET_SIGNAL_BUS:
566 return SIGBUS;
567#endif
568#if defined (SIGSEGV)
569 case TARGET_SIGNAL_SEGV:
570 return SIGSEGV;
571#endif
572#if defined (SIGSYS)
573 case TARGET_SIGNAL_SYS:
574 return SIGSYS;
575#endif
576#if defined (SIGPIPE)
577 case TARGET_SIGNAL_PIPE:
578 return SIGPIPE;
579#endif
580#if defined (SIGALRM)
581 case TARGET_SIGNAL_ALRM:
582 return SIGALRM;
583#endif
584#if defined (SIGTERM)
585 case TARGET_SIGNAL_TERM:
586 return SIGTERM;
587#endif
588#if defined (SIGUSR1)
589 case TARGET_SIGNAL_USR1:
590 return SIGUSR1;
591#endif
592#if defined (SIGUSR2)
593 case TARGET_SIGNAL_USR2:
594 return SIGUSR2;
595#endif
596#if defined (SIGCHLD) || defined (SIGCLD)
597 case TARGET_SIGNAL_CHLD:
598#if defined (SIGCHLD)
599 return SIGCHLD;
600#else
601 return SIGCLD;
602#endif
603#endif /* SIGCLD or SIGCHLD */
604#if defined (SIGPWR)
605 case TARGET_SIGNAL_PWR:
606 return SIGPWR;
607#endif
608#if defined (SIGWINCH)
609 case TARGET_SIGNAL_WINCH:
610 return SIGWINCH;
611#endif
612#if defined (SIGURG)
613 case TARGET_SIGNAL_URG:
614 return SIGURG;
615#endif
616#if defined (SIGIO)
617 case TARGET_SIGNAL_IO:
618 return SIGIO;
619#endif
620#if defined (SIGPOLL)
621 case TARGET_SIGNAL_POLL:
622 return SIGPOLL;
623#endif
624#if defined (SIGSTOP)
625 case TARGET_SIGNAL_STOP:
626 return SIGSTOP;
627#endif
628#if defined (SIGTSTP)
629 case TARGET_SIGNAL_TSTP:
630 return SIGTSTP;
631#endif
632#if defined (SIGCONT)
633 case TARGET_SIGNAL_CONT:
634 return SIGCONT;
635#endif
636#if defined (SIGTTIN)
637 case TARGET_SIGNAL_TTIN:
638 return SIGTTIN;
639#endif
640#if defined (SIGTTOU)
641 case TARGET_SIGNAL_TTOU:
642 return SIGTTOU;
643#endif
644#if defined (SIGVTALRM)
645 case TARGET_SIGNAL_VTALRM:
646 return SIGVTALRM;
647#endif
648#if defined (SIGPROF)
649 case TARGET_SIGNAL_PROF:
650 return SIGPROF;
651#endif
652#if defined (SIGXCPU)
653 case TARGET_SIGNAL_XCPU:
654 return SIGXCPU;
655#endif
656#if defined (SIGXFSZ)
657 case TARGET_SIGNAL_XFSZ:
658 return SIGXFSZ;
659#endif
660#if defined (SIGWIND)
661 case TARGET_SIGNAL_WIND:
662 return SIGWIND;
663#endif
664#if defined (SIGPHONE)
665 case TARGET_SIGNAL_PHONE:
666 return SIGPHONE;
667#endif
668#if defined (SIGLOST)
669 case TARGET_SIGNAL_LOST:
670 return SIGLOST;
671#endif
672#if defined (SIGWAITING)
673 case TARGET_SIGNAL_WAITING:
674 return SIGWAITING;
675#endif
676#if defined (SIGCANCEL)
677 case TARGET_SIGNAL_CANCEL:
678 return SIGCANCEL;
679#endif
680#if defined (SIGLWP)
681 case TARGET_SIGNAL_LWP:
682 return SIGLWP;
683#endif
684#if defined (SIGDANGER)
685 case TARGET_SIGNAL_DANGER:
686 return SIGDANGER;
687#endif
688#if defined (SIGGRANT)
689 case TARGET_SIGNAL_GRANT:
690 return SIGGRANT;
691#endif
692#if defined (SIGRETRACT)
693 case TARGET_SIGNAL_RETRACT:
694 return SIGRETRACT;
695#endif
696#if defined (SIGMSG)
697 case TARGET_SIGNAL_MSG:
698 return SIGMSG;
699#endif
700#if defined (SIGSOUND)
701 case TARGET_SIGNAL_SOUND:
702 return SIGSOUND;
703#endif
704#if defined (SIGSAK)
705 case TARGET_SIGNAL_SAK:
706 return SIGSAK;
707#endif
708#if defined (SIGPRIO)
709 case TARGET_SIGNAL_PRIO:
710 return SIGPRIO;
711#endif
712
713 /* Mach exceptions. Assumes that the values for EXC_ are positive! */
714#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
715 case TARGET_EXC_BAD_ACCESS:
716 return _NSIG + EXC_BAD_ACCESS;
717#endif
718#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
719 case TARGET_EXC_BAD_INSTRUCTION:
720 return _NSIG + EXC_BAD_INSTRUCTION;
721#endif
722#if defined (EXC_ARITHMETIC) && defined (_NSIG)
723 case TARGET_EXC_ARITHMETIC:
724 return _NSIG + EXC_ARITHMETIC;
725#endif
726#if defined (EXC_EMULATION) && defined (_NSIG)
727 case TARGET_EXC_EMULATION:
728 return _NSIG + EXC_EMULATION;
729#endif
730#if defined (EXC_SOFTWARE) && defined (_NSIG)
731 case TARGET_EXC_SOFTWARE:
732 return _NSIG + EXC_SOFTWARE;
733#endif
734#if defined (EXC_BREAKPOINT) && defined (_NSIG)
735 case TARGET_EXC_BREAKPOINT:
736 return _NSIG + EXC_BREAKPOINT;
737#endif
738
739#if defined (SIGINFO)
740 case TARGET_SIGNAL_INFO:
741 return SIGINFO;
742#endif
743
744 default:
745#if defined (REALTIME_LO)
746 if (oursig >= TARGET_SIGNAL_REALTIME_33
747 && oursig <= TARGET_SIGNAL_REALTIME_63)
748 {
749 /* This block of signals is continuous, and
750 TARGET_SIGNAL_REALTIME_33 is 33 by definition. */
751 int retsig =
752 (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
753 if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
754 return retsig;
755 }
756#if (REALTIME_LO < 33)
757 else if (oursig == TARGET_SIGNAL_REALTIME_32)
758 {
759 /* TARGET_SIGNAL_REALTIME_32 isn't contiguous with
760 TARGET_SIGNAL_REALTIME_33. It is 32 by definition. */
761 return 32;
762 }
763#endif
764#if (REALTIME_HI > 64)
765 if (oursig >= TARGET_SIGNAL_REALTIME_64
766 && oursig <= TARGET_SIGNAL_REALTIME_127)
767 {
768 /* This block of signals is continuous, and
769 TARGET_SIGNAL_REALTIME_64 is 64 by definition. */
770 int retsig =
771 (int) oursig - (int) TARGET_SIGNAL_REALTIME_64 + 64;
772 if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
773 return retsig;
774 }
775
776#endif
777#endif
778
779#if defined (SIGRTMIN)
780 if (oursig >= TARGET_SIGNAL_REALTIME_33
781 && oursig <= TARGET_SIGNAL_REALTIME_63)
782 {
783 /* This block of signals is continuous, and
784 TARGET_SIGNAL_REALTIME_33 is 33 by definition. */
785 int retsig =
786 (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33;
787 if (retsig >= SIGRTMIN && retsig <= SIGRTMAX)
788 return retsig;
789 }
2f2cf184
DJ
790 else if (oursig == TARGET_SIGNAL_REALTIME_32)
791 {
792 /* TARGET_SIGNAL_REALTIME_32 isn't contiguous with
793 TARGET_SIGNAL_REALTIME_33. It is 32 by definition. */
794 return 32;
795 }
796 else if (oursig >= TARGET_SIGNAL_REALTIME_64
797 && oursig <= TARGET_SIGNAL_REALTIME_127)
798 {
799 /* This block of signals is continuous, and
800 TARGET_SIGNAL_REALTIME_64 is 64 by definition. */
801 int retsig =
802 (int) oursig - (int) TARGET_SIGNAL_REALTIME_64 + 64;
803 return retsig;
804 }
0150732f
DJ
805#endif
806 *oursig_ok = 0;
807 return 0;
808 }
809}
810
811int
812target_signal_to_host_p (enum target_signal oursig)
813{
814 int oursig_ok;
815 do_target_signal_to_host (oursig, &oursig_ok);
816 return oursig_ok;
817}
818
819int
820target_signal_to_host (enum target_signal oursig)
821{
822 int oursig_ok;
823 int targ_signo = do_target_signal_to_host (oursig, &oursig_ok);
824 if (!oursig_ok)
825 {
826 /* The user might be trying to do "signal SIGSAK" where this system
827 doesn't have SIGSAK. */
828 warning ("Signal %s does not exist on this system.\n",
829 target_signal_to_name (oursig));
830 return 0;
831 }
832 else
833 return targ_signo;
834}
835
836/* In some circumstances we allow a command to specify a numeric
837 signal. The idea is to keep these circumstances limited so that
838 users (and scripts) develop portable habits. For comparison,
839 POSIX.2 `kill' requires that 1,2,3,6,9,14, and 15 work (and using a
840 numeric signal at all is obsolescent. We are slightly more
841 lenient and allow 1-15 which should match host signal numbers on
842 most systems. Use of symbolic signal names is strongly encouraged. */
843
844enum target_signal
845target_signal_from_command (int num)
846{
847 if (num >= 1 && num <= 15)
848 return (enum target_signal) num;
849 error ("Only signals 1-15 are valid as numeric signals.\n\
850Use \"info signals\" for a list of symbolic signals.");
851}
852
3130066b 853#ifndef GDBSERVER
0150732f
DJ
854void
855_initialize_signals (void)
856{
3130066b 857 if (strcmp (signals[TARGET_SIGNAL_LAST].string, "TARGET_SIGNAL_MAGIC") != 0)
0150732f
DJ
858 internal_error (__FILE__, __LINE__, "failed internal consistency check");
859}
3130066b 860#endif
This page took 0.170221 seconds and 4 git commands to generate.