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