]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - sim/common/sim-signal.c
Update copyright year range in all GDB files.
[thirdparty/binutils-gdb.git] / sim / common / sim-signal.c
CommitLineData
c906108c 1/* Simulator signal support
42a4f53d 2 Copyright (C) 1997-2019 Free Software Foundation, Inc.
c906108c
SS
3 Contributed by Cygnus Support
4
5This file is part of the GNU Simulators.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
4744ac1b
JB
9the Free Software Foundation; either version 3 of the License, or
10(at your option) any later version.
c906108c
SS
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
4744ac1b
JB
17You should have received a copy of the GNU General Public License
18along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
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
a4e64307 29#ifdef _WIN32
c906108c
SS
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
41int
42sim_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:
aba6488e 79#ifdef SIGFPE
c906108c
SS
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}
aba6488e 96
2ea28649 97enum gdb_signal
2c1fa544 98sim_signal_to_gdb_signal (SIM_DESC sd, SIM_SIGNAL sig)
aba6488e
MM
99{
100 switch (sig)
101 {
102 case SIM_SIGINT :
a493e3e2 103 return GDB_SIGNAL_INT;
aba6488e
MM
104
105 case SIM_SIGABRT :
a493e3e2 106 return GDB_SIGNAL_ABRT;
aba6488e
MM
107
108 case SIM_SIGILL :
a493e3e2 109 return GDB_SIGNAL_ILL;
aba6488e
MM
110
111 case SIM_SIGTRAP :
a493e3e2 112 return GDB_SIGNAL_TRAP;
aba6488e
MM
113
114 case SIM_SIGBUS :
a493e3e2 115 return GDB_SIGNAL_BUS;
aba6488e 116
25520859 117 case SIM_SIGSEGV :
a493e3e2 118 return GDB_SIGNAL_SEGV;
aba6488e
MM
119
120 case SIM_SIGXCPU :
a493e3e2 121 return GDB_SIGNAL_XCPU;
aba6488e
MM
122
123 case SIM_SIGFPE:
a493e3e2 124 return GDB_SIGNAL_FPE;
aba6488e
MM
125 break;
126
127 case SIM_SIGNONE:
a493e3e2 128 return GDB_SIGNAL_0;
aba6488e
MM
129 break;
130 }
131
132 sim_io_eprintf (sd, "sim_signal_to_host: unknown signal: %d\n", sig);
a493e3e2 133 return GDB_SIGNAL_HUP;
aba6488e 134}