]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - sim/common/sim-signal.c
Update years in copyright notice for the GDB files.
[thirdparty/binutils-gdb.git] / sim / common / sim-signal.c
1 /* Simulator signal support
2 Copyright (C) 1997-2013 Free Software Foundation, Inc.
3 Contributed by Cygnus Support
4
5 This file is part of the GNU Simulators.
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
9 the Free Software Foundation; either version 3 of the License, or
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
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include <signal.h>
21 #include "sim-main.h"
22
23 /* Convert SIM_SIGFOO to SIGFOO.
24 What to do when the host doesn't have SIGFOO is handled on a case by case
25 basis. Generally, in the case of passing a value back to gdb, we want gdb
26 to not think the process has died (so it can be debugged at the point of
27 failure). */
28
29 #ifdef _WIN32
30 #ifndef SIGTRAP
31 #define SIGTRAP 5
32 #endif
33 #ifndef SIGBUS
34 #define SIGBUS 10
35 #endif
36 #ifndef SIGQUIT
37 #define SIGQUIT 3
38 #endif
39 #endif
40
41 int
42 sim_signal_to_host (SIM_DESC sd, SIM_SIGNAL sig)
43 {
44 switch (sig)
45 {
46 case SIM_SIGINT :
47 return SIGINT;
48
49 case SIM_SIGABRT :
50 return SIGABRT;
51
52 case SIM_SIGILL :
53 #ifdef SIGILL
54 return SIGILL;
55 #else
56 return SIGSEGV;
57 #endif
58
59 case SIM_SIGTRAP :
60 return SIGTRAP;
61
62 case SIM_SIGBUS :
63 #ifdef SIGBUS
64 return SIGBUS;
65 #else
66 return SIGSEGV;
67 #endif
68
69 case SIM_SIGSEGV :
70 return SIGSEGV;
71
72 case SIM_SIGXCPU :
73 #ifdef SIGXCPU
74 return SIGXCPU;
75 #endif
76 break;
77
78 case SIM_SIGFPE:
79 #ifdef SIGFPE
80 return SIGFPE;
81 #endif
82 break;
83
84 case SIM_SIGNONE:
85 return 0;
86 break;
87 }
88
89 sim_io_eprintf (sd, "sim_signal_to_host: unknown signal: %d\n", sig);
90 #ifdef SIGHUP
91 return SIGHUP; /* FIXME: Suggestions? */
92 #else
93 return 1;
94 #endif
95 }
96
97 enum gdb_signal
98 sim_signal_to_gdb_signal (SIM_DESC sd, SIM_SIGNAL sig)
99 {
100 switch (sig)
101 {
102 case SIM_SIGINT :
103 return GDB_SIGNAL_INT;
104
105 case SIM_SIGABRT :
106 return GDB_SIGNAL_ABRT;
107
108 case SIM_SIGILL :
109 return GDB_SIGNAL_ILL;
110
111 case SIM_SIGTRAP :
112 return GDB_SIGNAL_TRAP;
113
114 case SIM_SIGBUS :
115 return GDB_SIGNAL_BUS;
116
117 case SIM_SIGSEGV :
118 return GDB_SIGNAL_SEGV;
119
120 case SIM_SIGXCPU :
121 return GDB_SIGNAL_XCPU;
122
123 case SIM_SIGFPE:
124 return GDB_SIGNAL_FPE;
125 break;
126
127 case SIM_SIGNONE:
128 return GDB_SIGNAL_0;
129 break;
130 }
131
132 sim_io_eprintf (sd, "sim_signal_to_host: unknown signal: %d\n", sig);
133 return GDB_SIGNAL_HUP;
134 }