gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / obsd-tdep.c
CommitLineData
fb08a90b
MK
1/* Target-dependent code for OpenBSD.
2
b811d2c2 3 Copyright (C) 2005-2020 Free Software Foundation, Inc.
fb08a90b
MK
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
fb08a90b
MK
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/>. */
fb08a90b
MK
19
20#include "defs.h"
206c98a6 21#include "auxv.h"
fb08a90b
MK
22#include "frame.h"
23#include "symtab.h"
77e371c0 24#include "objfiles.h"
fb08a90b
MK
25
26#include "obsd-tdep.h"
27
28CORE_ADDR
29obsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
30{
3b7344d5 31 struct bound_minimal_symbol msym;
fb08a90b
MK
32
33 msym = lookup_minimal_symbol("_dl_bind", NULL, NULL);
77e371c0 34 if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
c7ce8faa 35 return frame_unwind_caller_pc (get_current_frame ());
fb08a90b 36 else
52f729a7 37 return find_solib_trampoline_target (get_current_frame (), pc);
fb08a90b 38}
93ffa5b9
MK
39
40/* OpenBSD signal numbers. From <sys/signal.h>. */
41
42enum
43 {
44 OBSD_SIGHUP = 1,
45 OBSD_SIGINT = 2,
46 OBSD_SIGQUIT = 3,
47 OBSD_SIGILL = 4,
48 OBSD_SIGTRAP = 5,
49 OBSD_SIGABRT = 6,
50 OBSD_SIGEMT = 7,
51 OBSD_SIGFPE = 8,
52 OBSD_SIGKILL = 9,
53 OBSD_SIGBUS = 10,
54 OBSD_SIGSEGV = 11,
55 OBSD_SIGSYS = 12,
56 OBSD_SIGPIPE = 13,
57 OBSD_SIGALRM = 14,
58 OBSD_SIGTERM = 15,
59 OBSD_SIGURG = 16,
60 OBSD_SIGSTOP = 17,
61 OBSD_SIGTSTP = 18,
62 OBSD_SIGCONT = 19,
63 OBSD_SIGCHLD = 20,
64 OBSD_SIGTTIN = 21,
65 OBSD_SIGTTOU = 22,
66 OBSD_SIGIO = 23,
67 OBSD_SIGXCPU = 24,
68 OBSD_SIGXFSZ = 25,
69 OBSD_SIGVTALRM = 26,
70 OBSD_SIGPROF = 27,
71 OBSD_SIGWINCH = 28,
72 OBSD_SIGINFO = 29,
73 OBSD_SIGUSR1 = 30,
74 OBSD_SIGUSR2 = 31,
75 OBSD_SIGTHR = 32,
76 };
77
78/* Implement the "gdb_signal_from_target" gdbarch method. */
79
80static enum gdb_signal
81obsd_gdb_signal_from_target (struct gdbarch *gdbarch, int signal)
82{
83 switch (signal)
84 {
85 case 0:
86 return GDB_SIGNAL_0;
87
88 case OBSD_SIGHUP:
89 return GDB_SIGNAL_HUP;
90
91 case OBSD_SIGINT:
92 return GDB_SIGNAL_INT;
93
94 case OBSD_SIGQUIT:
95 return GDB_SIGNAL_QUIT;
96
97 case OBSD_SIGILL:
98 return GDB_SIGNAL_ILL;
99
100 case OBSD_SIGTRAP:
101 return GDB_SIGNAL_TRAP;
102
103 case OBSD_SIGABRT:
104 return GDB_SIGNAL_ABRT;
105
106 case OBSD_SIGEMT:
107 return GDB_SIGNAL_EMT;
108
109 case OBSD_SIGFPE:
110 return GDB_SIGNAL_FPE;
111
112 case OBSD_SIGKILL:
113 return GDB_SIGNAL_KILL;
114
115 case OBSD_SIGBUS:
116 return GDB_SIGNAL_BUS;
117
118 case OBSD_SIGSEGV:
119 return GDB_SIGNAL_SEGV;
120
121 case OBSD_SIGSYS:
122 return GDB_SIGNAL_SYS;
123
124 case OBSD_SIGPIPE:
125 return GDB_SIGNAL_PIPE;
126
127 case OBSD_SIGALRM:
128 return GDB_SIGNAL_ALRM;
129
130 case OBSD_SIGTERM:
131 return GDB_SIGNAL_TERM;
132
133 case OBSD_SIGURG:
134 return GDB_SIGNAL_URG;
135
136 case OBSD_SIGSTOP:
137 return GDB_SIGNAL_STOP;
138
139 case OBSD_SIGTSTP:
140 return GDB_SIGNAL_TSTP;
141
142 case OBSD_SIGCONT:
143 return GDB_SIGNAL_CONT;
144
145 case OBSD_SIGCHLD:
146 return GDB_SIGNAL_CHLD;
147
148 case OBSD_SIGTTIN:
149 return GDB_SIGNAL_TTIN;
150
151 case OBSD_SIGTTOU:
152 return GDB_SIGNAL_TTOU;
153
154 case OBSD_SIGIO:
155 return GDB_SIGNAL_IO;
156
157 case OBSD_SIGXCPU:
158 return GDB_SIGNAL_XCPU;
159
160 case OBSD_SIGXFSZ:
161 return GDB_SIGNAL_XFSZ;
162
163 case OBSD_SIGVTALRM:
164 return GDB_SIGNAL_VTALRM;
165
166 case OBSD_SIGPROF:
167 return GDB_SIGNAL_PROF;
168
169 case OBSD_SIGWINCH:
170 return GDB_SIGNAL_WINCH;
171
172 case OBSD_SIGINFO:
173 return GDB_SIGNAL_INFO;
174
175 case OBSD_SIGUSR1:
176 return GDB_SIGNAL_USR1;
177
178 case OBSD_SIGUSR2:
179 return GDB_SIGNAL_USR2;
180 }
181
182 return GDB_SIGNAL_UNKNOWN;
183}
184
185/* Implement the "gdb_signal_to_target" gdbarch method. */
186
187static int
188obsd_gdb_signal_to_target (struct gdbarch *gdbarch,
189 enum gdb_signal signal)
190{
191 switch (signal)
192 {
193 case GDB_SIGNAL_0:
194 return 0;
195
196 case GDB_SIGNAL_HUP:
197 return OBSD_SIGHUP;
198
199 case GDB_SIGNAL_INT:
200 return OBSD_SIGINT;
201
202 case GDB_SIGNAL_QUIT:
203 return OBSD_SIGQUIT;
204
205 case GDB_SIGNAL_ILL:
206 return OBSD_SIGILL;
207
208 case GDB_SIGNAL_TRAP:
209 return OBSD_SIGTRAP;
210
211 case GDB_SIGNAL_ABRT:
212 return OBSD_SIGABRT;
213
214 case GDB_SIGNAL_EMT:
215 return OBSD_SIGEMT;
216
217 case GDB_SIGNAL_FPE:
218 return OBSD_SIGFPE;
219
220 case GDB_SIGNAL_KILL:
221 return OBSD_SIGKILL;
222
223 case GDB_SIGNAL_BUS:
224 return OBSD_SIGBUS;
225
226 case GDB_SIGNAL_SEGV:
227 return OBSD_SIGSEGV;
228
229 case GDB_SIGNAL_SYS:
230 return OBSD_SIGSYS;
231
232 case GDB_SIGNAL_PIPE:
233 return OBSD_SIGPIPE;
234
235 case GDB_SIGNAL_ALRM:
236 return OBSD_SIGALRM;
237
238 case GDB_SIGNAL_TERM:
239 return OBSD_SIGTERM;
240
241 case GDB_SIGNAL_URG:
242 return OBSD_SIGURG;
243
244 case GDB_SIGNAL_STOP:
245 return OBSD_SIGSTOP;
246
247 case GDB_SIGNAL_TSTP:
248 return OBSD_SIGTSTP;
249
250 case GDB_SIGNAL_CONT:
251 return OBSD_SIGCONT;
252
253 case GDB_SIGNAL_CHLD:
254 return OBSD_SIGCHLD;
255
256 case GDB_SIGNAL_TTIN:
257 return OBSD_SIGTTIN;
258
259 case GDB_SIGNAL_TTOU:
260 return OBSD_SIGTTOU;
261
262 case GDB_SIGNAL_IO:
263 return OBSD_SIGIO;
264
265 case GDB_SIGNAL_XCPU:
266 return OBSD_SIGXCPU;
267
268 case GDB_SIGNAL_XFSZ:
269 return OBSD_SIGXFSZ;
270
271 case GDB_SIGNAL_VTALRM:
272 return OBSD_SIGVTALRM;
273
274 case GDB_SIGNAL_PROF:
275 return OBSD_SIGPROF;
276
277 case GDB_SIGNAL_WINCH:
278 return OBSD_SIGWINCH;
279
280 case GDB_SIGNAL_USR1:
281 return OBSD_SIGUSR1;
282
283 case GDB_SIGNAL_USR2:
284 return OBSD_SIGUSR2;
285
286 case GDB_SIGNAL_INFO:
287 return OBSD_SIGINFO;
288 }
289
290 return -1;
291}
292
93ffa5b9
MK
293void
294obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
295{
296 set_gdbarch_gdb_signal_from_target (gdbarch,
297 obsd_gdb_signal_from_target);
298 set_gdbarch_gdb_signal_to_target (gdbarch,
299 obsd_gdb_signal_to_target);
bee30a64 300
206c98a6 301 set_gdbarch_auxv_parse (gdbarch, svr4_auxv_parse);
93ffa5b9 302}
This page took 1.334134 seconds and 4 git commands to generate.