Commit | Line | Data |
---|---|---|
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 | ||
28 | CORE_ADDR | |
29 | obsd_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 | ||
42 | enum | |
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 | ||
80 | static enum gdb_signal | |
81 | obsd_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 | ||
187 | static int | |
188 | obsd_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 |
293 | void |
294 | obsd_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 | } |