]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - sim/common/sim-signal.c
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / sim / common / sim-signal.c
CommitLineData
c906108c 1/* Simulator signal support
1d506c26 2 Copyright (C) 1997-2024 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 19
6df01ab8
MF
20/* This must come before any other includes. */
21#include "defs.h"
22
c906108c 23#include <signal.h>
20a8e078 24
7fd14d6f
MF
25#include "sim/sim.h"
26#include "sim-io.h"
1fef66b0 27#include "sim-signal.h"
c906108c
SS
28
29/* Convert SIM_SIGFOO to SIGFOO.
30 What to do when the host doesn't have SIGFOO is handled on a case by case
31 basis. Generally, in the case of passing a value back to gdb, we want gdb
32 to not think the process has died (so it can be debugged at the point of
33 failure). */
34
a4e64307 35#ifdef _WIN32
c906108c
SS
36#ifndef SIGTRAP
37#define SIGTRAP 5
38#endif
39#ifndef SIGBUS
40#define SIGBUS 10
41#endif
42#ifndef SIGQUIT
43#define SIGQUIT 3
44#endif
45#endif
46
47int
48sim_signal_to_host (SIM_DESC sd, SIM_SIGNAL sig)
49{
50 switch (sig)
51 {
52 case SIM_SIGINT :
53 return SIGINT;
54
55 case SIM_SIGABRT :
56 return SIGABRT;
57
58 case SIM_SIGILL :
59#ifdef SIGILL
60 return SIGILL;
61#else
62 return SIGSEGV;
63#endif
64
65 case SIM_SIGTRAP :
66 return SIGTRAP;
67
68 case SIM_SIGBUS :
69#ifdef SIGBUS
70 return SIGBUS;
71#else
72 return SIGSEGV;
73#endif
74
75 case SIM_SIGSEGV :
76 return SIGSEGV;
77
78 case SIM_SIGXCPU :
79#ifdef SIGXCPU
80 return SIGXCPU;
81#endif
82 break;
83
84 case SIM_SIGFPE:
aba6488e 85#ifdef SIGFPE
c906108c
SS
86 return SIGFPE;
87#endif
88 break;
89
90 case SIM_SIGNONE:
91 return 0;
92 break;
93 }
94
95 sim_io_eprintf (sd, "sim_signal_to_host: unknown signal: %d\n", sig);
96#ifdef SIGHUP
97 return SIGHUP; /* FIXME: Suggestions? */
98#else
99 return 1;
100#endif
101}
aba6488e 102
2ea28649 103enum gdb_signal
2c1fa544 104sim_signal_to_gdb_signal (SIM_DESC sd, SIM_SIGNAL sig)
aba6488e
MM
105{
106 switch (sig)
107 {
108 case SIM_SIGINT :
a493e3e2 109 return GDB_SIGNAL_INT;
aba6488e
MM
110
111 case SIM_SIGABRT :
a493e3e2 112 return GDB_SIGNAL_ABRT;
aba6488e
MM
113
114 case SIM_SIGILL :
a493e3e2 115 return GDB_SIGNAL_ILL;
aba6488e
MM
116
117 case SIM_SIGTRAP :
a493e3e2 118 return GDB_SIGNAL_TRAP;
aba6488e
MM
119
120 case SIM_SIGBUS :
a493e3e2 121 return GDB_SIGNAL_BUS;
aba6488e 122
25520859 123 case SIM_SIGSEGV :
a493e3e2 124 return GDB_SIGNAL_SEGV;
aba6488e
MM
125
126 case SIM_SIGXCPU :
a493e3e2 127 return GDB_SIGNAL_XCPU;
aba6488e
MM
128
129 case SIM_SIGFPE:
a493e3e2 130 return GDB_SIGNAL_FPE;
aba6488e
MM
131 break;
132
133 case SIM_SIGNONE:
a493e3e2 134 return GDB_SIGNAL_0;
aba6488e
MM
135 break;
136 }
137
138 sim_io_eprintf (sd, "sim_signal_to_host: unknown signal: %d\n", sig);
a493e3e2 139 return GDB_SIGNAL_HUP;
aba6488e 140}