]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/m68k-tdep.c
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / gdb / m68k-tdep.c
1 /* Target-dependent code for the Motorola 68000 series.
2
3 Copyright (C) 1990-2021 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 "dwarf2/frame.h"
22 #include "frame.h"
23 #include "frame-base.h"
24 #include "frame-unwind.h"
25 #include "gdbtypes.h"
26 #include "symtab.h"
27 #include "gdbcore.h"
28 #include "value.h"
29 #include "inferior.h"
30 #include "regcache.h"
31 #include "arch-utils.h"
32 #include "osabi.h"
33 #include "dis-asm.h"
34 #include "target-descriptions.h"
35 #include "floatformat.h"
36 #include "target-float.h"
37 #include "elf-bfd.h"
38 #include "elf/m68k.h"
39
40 #include "m68k-tdep.h"
41 \f
42
43 #define P_LINKL_FP 0x480e
44 #define P_LINKW_FP 0x4e56
45 #define P_PEA_FP 0x4856
46 #define P_MOVEAL_SP_FP 0x2c4f
47 #define P_ADDAW_SP 0xdefc
48 #define P_ADDAL_SP 0xdffc
49 #define P_SUBQW_SP 0x514f
50 #define P_SUBQL_SP 0x518f
51 #define P_LEA_SP_SP 0x4fef
52 #define P_LEA_PC_A5 0x4bfb0170
53 #define P_FMOVEMX_SP 0xf227
54 #define P_MOVEL_SP 0x2f00
55 #define P_MOVEML_SP 0x48e7
56
57 /* Offset from SP to first arg on stack at first instruction of a function. */
58 #define SP_ARG0 (1 * 4)
59
60 #if !defined (BPT_VECTOR)
61 #define BPT_VECTOR 0xf
62 #endif
63
64 constexpr gdb_byte m68k_break_insn[] = {0x4e, (0x40 | BPT_VECTOR)};
65
66 typedef BP_MANIPULATION (m68k_break_insn) m68k_breakpoint;
67 \f
68
69 /* Construct types for ISA-specific registers. */
70 static struct type *
71 m68k_ps_type (struct gdbarch *gdbarch)
72 {
73 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
74
75 if (!tdep->m68k_ps_type)
76 {
77 struct type *type;
78
79 type = arch_flags_type (gdbarch, "builtin_type_m68k_ps", 32);
80 append_flags_type_flag (type, 0, "C");
81 append_flags_type_flag (type, 1, "V");
82 append_flags_type_flag (type, 2, "Z");
83 append_flags_type_flag (type, 3, "N");
84 append_flags_type_flag (type, 4, "X");
85 append_flags_type_flag (type, 8, "I0");
86 append_flags_type_flag (type, 9, "I1");
87 append_flags_type_flag (type, 10, "I2");
88 append_flags_type_flag (type, 12, "M");
89 append_flags_type_flag (type, 13, "S");
90 append_flags_type_flag (type, 14, "T0");
91 append_flags_type_flag (type, 15, "T1");
92
93 tdep->m68k_ps_type = type;
94 }
95
96 return tdep->m68k_ps_type;
97 }
98
99 static struct type *
100 m68881_ext_type (struct gdbarch *gdbarch)
101 {
102 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
103
104 if (!tdep->m68881_ext_type)
105 tdep->m68881_ext_type
106 = arch_float_type (gdbarch, -1, "builtin_type_m68881_ext",
107 floatformats_m68881_ext);
108
109 return tdep->m68881_ext_type;
110 }
111
112 /* Return the GDB type object for the "standard" data type of data in
113 register N. This should be int for D0-D7, SR, FPCONTROL and
114 FPSTATUS, long double for FP0-FP7, and void pointer for all others
115 (A0-A7, PC, FPIADDR). Note, for registers which contain
116 addresses return pointer to void, not pointer to char, because we
117 don't want to attempt to print the string after printing the
118 address. */
119
120 static struct type *
121 m68k_register_type (struct gdbarch *gdbarch, int regnum)
122 {
123 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
124
125 if (tdep->fpregs_present)
126 {
127 if (regnum >= gdbarch_fp0_regnum (gdbarch)
128 && regnum <= gdbarch_fp0_regnum (gdbarch) + 7)
129 {
130 if (tdep->flavour == m68k_coldfire_flavour)
131 return builtin_type (gdbarch)->builtin_double;
132 else
133 return m68881_ext_type (gdbarch);
134 }
135
136 if (regnum == M68K_FPI_REGNUM)
137 return builtin_type (gdbarch)->builtin_func_ptr;
138
139 if (regnum == M68K_FPC_REGNUM || regnum == M68K_FPS_REGNUM)
140 return builtin_type (gdbarch)->builtin_int32;
141 }
142 else
143 {
144 if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM)
145 return builtin_type (gdbarch)->builtin_int0;
146 }
147
148 if (regnum == gdbarch_pc_regnum (gdbarch))
149 return builtin_type (gdbarch)->builtin_func_ptr;
150
151 if (regnum >= M68K_A0_REGNUM && regnum <= M68K_A0_REGNUM + 7)
152 return builtin_type (gdbarch)->builtin_data_ptr;
153
154 if (regnum == M68K_PS_REGNUM)
155 return m68k_ps_type (gdbarch);
156
157 return builtin_type (gdbarch)->builtin_int32;
158 }
159
160 static const char * const m68k_register_names[] = {
161 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
162 "a0", "a1", "a2", "a3", "a4", "a5", "fp", "sp",
163 "ps", "pc",
164 "fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7",
165 "fpcontrol", "fpstatus", "fpiaddr"
166 };
167
168 /* Function: m68k_register_name
169 Returns the name of the standard m68k register regnum. */
170
171 static const char *
172 m68k_register_name (struct gdbarch *gdbarch, int regnum)
173 {
174 if (regnum < 0 || regnum >= ARRAY_SIZE (m68k_register_names))
175 internal_error (__FILE__, __LINE__,
176 _("m68k_register_name: illegal register number %d"),
177 regnum);
178 else if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM
179 && gdbarch_tdep (gdbarch)->fpregs_present == 0)
180 return "";
181 else
182 return m68k_register_names[regnum];
183 }
184 \f
185 /* Return nonzero if a value of type TYPE stored in register REGNUM
186 needs any special handling. */
187
188 static int
189 m68k_convert_register_p (struct gdbarch *gdbarch,
190 int regnum, struct type *type)
191 {
192 if (!gdbarch_tdep (gdbarch)->fpregs_present)
193 return 0;
194 return (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FP0_REGNUM + 7
195 /* We only support floating-point values. */
196 && type->code () == TYPE_CODE_FLT
197 && type != register_type (gdbarch, M68K_FP0_REGNUM));
198 }
199
200 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
201 return its contents in TO. */
202
203 static int
204 m68k_register_to_value (struct frame_info *frame, int regnum,
205 struct type *type, gdb_byte *to,
206 int *optimizedp, int *unavailablep)
207 {
208 struct gdbarch *gdbarch = get_frame_arch (frame);
209 gdb_byte from[M68K_MAX_REGISTER_SIZE];
210 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
211
212 gdb_assert (type->code () == TYPE_CODE_FLT);
213
214 /* Convert to TYPE. */
215 if (!get_frame_register_bytes (frame, regnum, 0,
216 register_size (gdbarch, regnum),
217 from, optimizedp, unavailablep))
218 return 0;
219
220 target_float_convert (from, fpreg_type, to, type);
221 *optimizedp = *unavailablep = 0;
222 return 1;
223 }
224
225 /* Write the contents FROM of a value of type TYPE into register
226 REGNUM in frame FRAME. */
227
228 static void
229 m68k_value_to_register (struct frame_info *frame, int regnum,
230 struct type *type, const gdb_byte *from)
231 {
232 gdb_byte to[M68K_MAX_REGISTER_SIZE];
233 struct type *fpreg_type = register_type (get_frame_arch (frame),
234 M68K_FP0_REGNUM);
235
236 /* We only support floating-point values. */
237 if (type->code () != TYPE_CODE_FLT)
238 {
239 warning (_("Cannot convert non-floating-point type "
240 "to floating-point register value."));
241 return;
242 }
243
244 /* Convert from TYPE. */
245 target_float_convert (from, type, to, fpreg_type);
246 put_frame_register (frame, regnum, to);
247 }
248
249 \f
250 /* There is a fair number of calling conventions that are in somewhat
251 wide use. The 68000/08/10 don't support an FPU, not even as a
252 coprocessor. All function return values are stored in %d0/%d1.
253 Structures are returned in a static buffer, a pointer to which is
254 returned in %d0. This means that functions returning a structure
255 are not re-entrant. To avoid this problem some systems use a
256 convention where the caller passes a pointer to a buffer in %a1
257 where the return values is to be stored. This convention is the
258 default, and is implemented in the function m68k_return_value.
259
260 The 68020/030/040/060 do support an FPU, either as a coprocessor
261 (68881/2) or built-in (68040/68060). That's why System V release 4
262 (SVR4) introduces a new calling convention specified by the SVR4
263 psABI. Integer values are returned in %d0/%d1, pointer return
264 values in %a0 and floating values in %fp0. When calling functions
265 returning a structure the caller should pass a pointer to a buffer
266 for the return value in %a0. This convention is implemented in the
267 function m68k_svr4_return_value, and by appropriately setting the
268 struct_value_regnum member of `struct gdbarch_tdep'.
269
270 GNU/Linux returns values in the same way as SVR4 does, but uses %a1
271 for passing the structure return value buffer.
272
273 GCC can also generate code where small structures are returned in
274 %d0/%d1 instead of in memory by using -freg-struct-return. This is
275 the default on NetBSD a.out, OpenBSD and GNU/Linux and several
276 embedded systems. This convention is implemented by setting the
277 struct_return member of `struct gdbarch_tdep' to reg_struct_return.
278
279 GCC also has an "embedded" ABI. This works like the SVR4 ABI,
280 except that pointers are returned in %D0. This is implemented by
281 setting the pointer_result_regnum member of `struct gdbarch_tdep'
282 as appropriate. */
283
284 /* Read a function return value of TYPE from REGCACHE, and copy that
285 into VALBUF. */
286
287 static void
288 m68k_extract_return_value (struct type *type, struct regcache *regcache,
289 gdb_byte *valbuf)
290 {
291 int len = TYPE_LENGTH (type);
292 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
293
294 if (type->code () == TYPE_CODE_PTR && len == 4)
295 {
296 struct gdbarch *gdbarch = regcache->arch ();
297 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
298 regcache->raw_read (tdep->pointer_result_regnum, valbuf);
299 }
300 else if (len <= 4)
301 {
302 regcache->raw_read (M68K_D0_REGNUM, buf);
303 memcpy (valbuf, buf + (4 - len), len);
304 }
305 else if (len <= 8)
306 {
307 regcache->raw_read (M68K_D0_REGNUM, buf);
308 memcpy (valbuf, buf + (8 - len), len - 4);
309 regcache->raw_read (M68K_D1_REGNUM, valbuf + (len - 4));
310 }
311 else
312 internal_error (__FILE__, __LINE__,
313 _("Cannot extract return value of %d bytes long."), len);
314 }
315
316 static void
317 m68k_svr4_extract_return_value (struct type *type, struct regcache *regcache,
318 gdb_byte *valbuf)
319 {
320 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
321 struct gdbarch *gdbarch = regcache->arch ();
322 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
323
324 if (tdep->float_return && type->code () == TYPE_CODE_FLT)
325 {
326 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
327 regcache->raw_read (M68K_FP0_REGNUM, buf);
328 target_float_convert (buf, fpreg_type, valbuf, type);
329 }
330 else
331 m68k_extract_return_value (type, regcache, valbuf);
332 }
333
334 /* Write a function return value of TYPE from VALBUF into REGCACHE. */
335
336 static void
337 m68k_store_return_value (struct type *type, struct regcache *regcache,
338 const gdb_byte *valbuf)
339 {
340 int len = TYPE_LENGTH (type);
341
342 if (type->code () == TYPE_CODE_PTR && len == 4)
343 {
344 struct gdbarch *gdbarch = regcache->arch ();
345 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
346 regcache->raw_write (tdep->pointer_result_regnum, valbuf);
347 /* gdb historically also set D0 in the SVR4 case. */
348 if (tdep->pointer_result_regnum != M68K_D0_REGNUM)
349 regcache->raw_write (M68K_D0_REGNUM, valbuf);
350 }
351 else if (len <= 4)
352 regcache->raw_write_part (M68K_D0_REGNUM, 4 - len, len, valbuf);
353 else if (len <= 8)
354 {
355 regcache->raw_write_part (M68K_D0_REGNUM, 8 - len, len - 4, valbuf);
356 regcache->raw_write (M68K_D1_REGNUM, valbuf + (len - 4));
357 }
358 else
359 internal_error (__FILE__, __LINE__,
360 _("Cannot store return value of %d bytes long."), len);
361 }
362
363 static void
364 m68k_svr4_store_return_value (struct type *type, struct regcache *regcache,
365 const gdb_byte *valbuf)
366 {
367 struct gdbarch *gdbarch = regcache->arch ();
368 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
369
370 if (tdep->float_return && type->code () == TYPE_CODE_FLT)
371 {
372 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
373 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
374 target_float_convert (valbuf, type, buf, fpreg_type);
375 regcache->raw_write (M68K_FP0_REGNUM, buf);
376 }
377 else
378 m68k_store_return_value (type, regcache, valbuf);
379 }
380
381 /* Return non-zero if TYPE, which is assumed to be a structure, union or
382 complex type, should be returned in registers for architecture
383 GDBARCH. */
384
385 static int
386 m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
387 {
388 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
389 enum type_code code = type->code ();
390 int len = TYPE_LENGTH (type);
391
392 gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
393 || code == TYPE_CODE_COMPLEX || code == TYPE_CODE_ARRAY);
394
395 if (tdep->struct_return == pcc_struct_return)
396 return 0;
397
398 const bool is_vector = code == TYPE_CODE_ARRAY && type->is_vector ();
399
400 if (is_vector
401 && check_typedef (TYPE_TARGET_TYPE (type))->code () == TYPE_CODE_FLT)
402 return 0;
403
404 /* According to m68k_return_in_memory in the m68k GCC back-end,
405 strange things happen for small aggregate types. Aggregate types
406 with only one component are always returned like the type of the
407 component. Aggregate types whose size is 2, 4, or 8 are returned
408 in registers if their natural alignment is at least 16 bits.
409
410 We reject vectors here, as experimentally this gives the correct
411 answer. */
412 if (!is_vector && (len == 2 || len == 4 || len == 8))
413 return type_align (type) >= 2;
414
415 return (len == 1 || len == 2 || len == 4 || len == 8);
416 }
417
418 /* Determine, for architecture GDBARCH, how a return value of TYPE
419 should be returned. If it is supposed to be returned in registers,
420 and READBUF is non-zero, read the appropriate value from REGCACHE,
421 and copy it into READBUF. If WRITEBUF is non-zero, write the value
422 from WRITEBUF into REGCACHE. */
423
424 static enum return_value_convention
425 m68k_return_value (struct gdbarch *gdbarch, struct value *function,
426 struct type *type, struct regcache *regcache,
427 gdb_byte *readbuf, const gdb_byte *writebuf)
428 {
429 enum type_code code = type->code ();
430
431 /* GCC returns a `long double' in memory too. */
432 if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
433 || code == TYPE_CODE_COMPLEX || code == TYPE_CODE_ARRAY)
434 && !m68k_reg_struct_return_p (gdbarch, type))
435 || (code == TYPE_CODE_FLT && TYPE_LENGTH (type) == 12))
436 {
437 /* The default on m68k is to return structures in static memory.
438 Consequently a function must return the address where we can
439 find the return value. */
440
441 if (readbuf)
442 {
443 ULONGEST addr;
444
445 regcache_raw_read_unsigned (regcache, M68K_D0_REGNUM, &addr);
446 read_memory (addr, readbuf, TYPE_LENGTH (type));
447 }
448
449 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
450 }
451
452 if (readbuf)
453 m68k_extract_return_value (type, regcache, readbuf);
454 if (writebuf)
455 m68k_store_return_value (type, regcache, writebuf);
456
457 return RETURN_VALUE_REGISTER_CONVENTION;
458 }
459
460 static enum return_value_convention
461 m68k_svr4_return_value (struct gdbarch *gdbarch, struct value *function,
462 struct type *type, struct regcache *regcache,
463 gdb_byte *readbuf, const gdb_byte *writebuf)
464 {
465 enum type_code code = type->code ();
466
467 /* Aggregates with a single member are always returned like their
468 sole element. */
469 if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
470 && type->num_fields () == 1)
471 {
472 type = check_typedef (type->field (0).type ());
473 return m68k_svr4_return_value (gdbarch, function, type, regcache,
474 readbuf, writebuf);
475 }
476
477 if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
478 || code == TYPE_CODE_COMPLEX || code == TYPE_CODE_ARRAY)
479 && !m68k_reg_struct_return_p (gdbarch, type))
480 /* GCC may return a `long double' in memory too. */
481 || (!gdbarch_tdep (gdbarch)->float_return
482 && code == TYPE_CODE_FLT
483 && TYPE_LENGTH (type) == 12))
484 {
485 /* The System V ABI says that:
486
487 "A function returning a structure or union also sets %a0 to
488 the value it finds in %a0. Thus when the caller receives
489 control again, the address of the returned object resides in
490 register %a0."
491
492 So the ABI guarantees that we can always find the return
493 value just after the function has returned.
494
495 However, GCC also implements the "embedded" ABI. That ABI
496 does not preserve %a0 across calls, but does write the value
497 back to %d0. */
498
499 if (readbuf)
500 {
501 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
502 ULONGEST addr;
503
504 regcache_raw_read_unsigned (regcache, tdep->pointer_result_regnum,
505 &addr);
506 read_memory (addr, readbuf, TYPE_LENGTH (type));
507 }
508
509 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
510 }
511
512 if (readbuf)
513 m68k_svr4_extract_return_value (type, regcache, readbuf);
514 if (writebuf)
515 m68k_svr4_store_return_value (type, regcache, writebuf);
516
517 return RETURN_VALUE_REGISTER_CONVENTION;
518 }
519 \f
520
521 /* Always align the frame to a 4-byte boundary. This is required on
522 coldfire and harmless on the rest. */
523
524 static CORE_ADDR
525 m68k_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
526 {
527 /* Align the stack to four bytes. */
528 return sp & ~3;
529 }
530
531 static CORE_ADDR
532 m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
533 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
534 struct value **args, CORE_ADDR sp,
535 function_call_return_method return_method,
536 CORE_ADDR struct_addr)
537 {
538 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
539 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
540 gdb_byte buf[4];
541 int i;
542
543 /* Push arguments in reverse order. */
544 for (i = nargs - 1; i >= 0; i--)
545 {
546 struct type *value_type = value_enclosing_type (args[i]);
547 int len = TYPE_LENGTH (value_type);
548 int container_len = (len + 3) & ~3;
549 int offset;
550
551 /* Non-scalars bigger than 4 bytes are left aligned, others are
552 right aligned. */
553 if ((value_type->code () == TYPE_CODE_STRUCT
554 || value_type->code () == TYPE_CODE_UNION
555 || value_type->code () == TYPE_CODE_ARRAY)
556 && len > 4)
557 offset = 0;
558 else
559 offset = container_len - len;
560 sp -= container_len;
561 write_memory (sp + offset, value_contents_all (args[i]), len);
562 }
563
564 /* Store struct value address. */
565 if (return_method == return_method_struct)
566 {
567 store_unsigned_integer (buf, 4, byte_order, struct_addr);
568 regcache->cooked_write (tdep->struct_value_regnum, buf);
569 }
570
571 /* Store return address. */
572 sp -= 4;
573 store_unsigned_integer (buf, 4, byte_order, bp_addr);
574 write_memory (sp, buf, 4);
575
576 /* Finally, update the stack pointer... */
577 store_unsigned_integer (buf, 4, byte_order, sp);
578 regcache->cooked_write (M68K_SP_REGNUM, buf);
579
580 /* ...and fake a frame pointer. */
581 regcache->cooked_write (M68K_FP_REGNUM, buf);
582
583 /* DWARF2/GCC uses the stack address *before* the function call as a
584 frame's CFA. */
585 return sp + 8;
586 }
587
588 /* Convert a dwarf or dwarf2 regnumber to a GDB regnum. */
589
590 static int
591 m68k_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num)
592 {
593 if (num < 8)
594 /* d0..7 */
595 return (num - 0) + M68K_D0_REGNUM;
596 else if (num < 16)
597 /* a0..7 */
598 return (num - 8) + M68K_A0_REGNUM;
599 else if (num < 24 && gdbarch_tdep (gdbarch)->fpregs_present)
600 /* fp0..7 */
601 return (num - 16) + M68K_FP0_REGNUM;
602 else if (num == 25)
603 /* pc */
604 return M68K_PC_REGNUM;
605 else
606 return -1;
607 }
608
609 \f
610 struct m68k_frame_cache
611 {
612 /* Base address. */
613 CORE_ADDR base;
614 CORE_ADDR sp_offset;
615 CORE_ADDR pc;
616
617 /* Saved registers. */
618 CORE_ADDR saved_regs[M68K_NUM_REGS];
619 CORE_ADDR saved_sp;
620
621 /* Stack space reserved for local variables. */
622 long locals;
623 };
624
625 /* Allocate and initialize a frame cache. */
626
627 static struct m68k_frame_cache *
628 m68k_alloc_frame_cache (void)
629 {
630 struct m68k_frame_cache *cache;
631 int i;
632
633 cache = FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache);
634
635 /* Base address. */
636 cache->base = 0;
637 cache->sp_offset = -4;
638 cache->pc = 0;
639
640 /* Saved registers. We initialize these to -1 since zero is a valid
641 offset (that's where %fp is supposed to be stored). */
642 for (i = 0; i < M68K_NUM_REGS; i++)
643 cache->saved_regs[i] = -1;
644
645 /* Frameless until proven otherwise. */
646 cache->locals = -1;
647
648 return cache;
649 }
650
651 /* Check whether PC points at a code that sets up a new stack frame.
652 If so, it updates CACHE and returns the address of the first
653 instruction after the sequence that sets removes the "hidden"
654 argument from the stack or CURRENT_PC, whichever is smaller.
655 Otherwise, return PC. */
656
657 static CORE_ADDR
658 m68k_analyze_frame_setup (struct gdbarch *gdbarch,
659 CORE_ADDR pc, CORE_ADDR current_pc,
660 struct m68k_frame_cache *cache)
661 {
662 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
663 int op;
664
665 if (pc >= current_pc)
666 return current_pc;
667
668 op = read_memory_unsigned_integer (pc, 2, byte_order);
669
670 if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP)
671 {
672 cache->saved_regs[M68K_FP_REGNUM] = 0;
673 cache->sp_offset += 4;
674 if (op == P_LINKW_FP)
675 {
676 /* link.w %fp, #-N */
677 /* link.w %fp, #0; adda.l #-N, %sp */
678 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
679
680 if (pc + 4 < current_pc && cache->locals == 0)
681 {
682 op = read_memory_unsigned_integer (pc + 4, 2, byte_order);
683 if (op == P_ADDAL_SP)
684 {
685 cache->locals = read_memory_integer (pc + 6, 4, byte_order);
686 return pc + 10;
687 }
688 }
689
690 return pc + 4;
691 }
692 else if (op == P_LINKL_FP)
693 {
694 /* link.l %fp, #-N */
695 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
696 return pc + 6;
697 }
698 else
699 {
700 /* pea (%fp); movea.l %sp, %fp */
701 cache->locals = 0;
702
703 if (pc + 2 < current_pc)
704 {
705 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
706
707 if (op == P_MOVEAL_SP_FP)
708 {
709 /* move.l %sp, %fp */
710 return pc + 4;
711 }
712 }
713
714 return pc + 2;
715 }
716 }
717 else if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
718 {
719 /* subq.[wl] #N,%sp */
720 /* subq.[wl] #8,%sp; subq.[wl] #N,%sp */
721 cache->locals = (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
722 if (pc + 2 < current_pc)
723 {
724 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
725 if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
726 {
727 cache->locals += (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
728 return pc + 4;
729 }
730 }
731 return pc + 2;
732 }
733 else if (op == P_ADDAW_SP || op == P_LEA_SP_SP)
734 {
735 /* adda.w #-N,%sp */
736 /* lea (-N,%sp),%sp */
737 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
738 return pc + 4;
739 }
740 else if (op == P_ADDAL_SP)
741 {
742 /* adda.l #-N,%sp */
743 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
744 return pc + 6;
745 }
746
747 return pc;
748 }
749
750 /* Check whether PC points at code that saves registers on the stack.
751 If so, it updates CACHE and returns the address of the first
752 instruction after the register saves or CURRENT_PC, whichever is
753 smaller. Otherwise, return PC. */
754
755 static CORE_ADDR
756 m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc,
757 CORE_ADDR current_pc,
758 struct m68k_frame_cache *cache)
759 {
760 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
761
762 if (cache->locals >= 0)
763 {
764 CORE_ADDR offset;
765 int op;
766 int i, mask, regno;
767
768 offset = -4 - cache->locals;
769 while (pc < current_pc)
770 {
771 op = read_memory_unsigned_integer (pc, 2, byte_order);
772 if (op == P_FMOVEMX_SP
773 && gdbarch_tdep (gdbarch)->fpregs_present)
774 {
775 /* fmovem.x REGS,-(%sp) */
776 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
777 if ((op & 0xff00) == 0xe000)
778 {
779 mask = op & 0xff;
780 for (i = 0; i < 16; i++, mask >>= 1)
781 {
782 if (mask & 1)
783 {
784 cache->saved_regs[i + M68K_FP0_REGNUM] = offset;
785 offset -= 12;
786 }
787 }
788 pc += 4;
789 }
790 else
791 break;
792 }
793 else if ((op & 0177760) == P_MOVEL_SP)
794 {
795 /* move.l %R,-(%sp) */
796 regno = op & 017;
797 cache->saved_regs[regno] = offset;
798 offset -= 4;
799 pc += 2;
800 }
801 else if (op == P_MOVEML_SP)
802 {
803 /* movem.l REGS,-(%sp) */
804 mask = read_memory_unsigned_integer (pc + 2, 2, byte_order);
805 for (i = 0; i < 16; i++, mask >>= 1)
806 {
807 if (mask & 1)
808 {
809 cache->saved_regs[15 - i] = offset;
810 offset -= 4;
811 }
812 }
813 pc += 4;
814 }
815 else
816 break;
817 }
818 }
819
820 return pc;
821 }
822
823
824 /* Do a full analysis of the prologue at PC and update CACHE
825 accordingly. Bail out early if CURRENT_PC is reached. Return the
826 address where the analysis stopped.
827
828 We handle all cases that can be generated by gcc.
829
830 For allocating a stack frame:
831
832 link.w %a6,#-N
833 link.l %a6,#-N
834 pea (%fp); move.l %sp,%fp
835 link.w %a6,#0; add.l #-N,%sp
836 subq.l #N,%sp
837 subq.w #N,%sp
838 subq.w #8,%sp; subq.w #N-8,%sp
839 add.w #-N,%sp
840 lea (-N,%sp),%sp
841 add.l #-N,%sp
842
843 For saving registers:
844
845 fmovem.x REGS,-(%sp)
846 move.l R1,-(%sp)
847 move.l R1,-(%sp); move.l R2,-(%sp)
848 movem.l REGS,-(%sp)
849
850 For setting up the PIC register:
851
852 lea (%pc,N),%a5
853
854 */
855
856 static CORE_ADDR
857 m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
858 CORE_ADDR current_pc, struct m68k_frame_cache *cache)
859 {
860 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
861 unsigned int op;
862
863 pc = m68k_analyze_frame_setup (gdbarch, pc, current_pc, cache);
864 pc = m68k_analyze_register_saves (gdbarch, pc, current_pc, cache);
865 if (pc >= current_pc)
866 return current_pc;
867
868 /* Check for GOT setup. */
869 op = read_memory_unsigned_integer (pc, 4, byte_order);
870 if (op == P_LEA_PC_A5)
871 {
872 /* lea (%pc,N),%a5 */
873 return pc + 8;
874 }
875
876 return pc;
877 }
878
879 /* Return PC of first real instruction. */
880
881 static CORE_ADDR
882 m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
883 {
884 struct m68k_frame_cache cache;
885 CORE_ADDR pc;
886
887 cache.locals = -1;
888 pc = m68k_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache);
889 if (cache.locals < 0)
890 return start_pc;
891 return pc;
892 }
893
894 static CORE_ADDR
895 m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
896 {
897 gdb_byte buf[8];
898
899 frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
900 return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
901 }
902 \f
903 /* Normal frames. */
904
905 static struct m68k_frame_cache *
906 m68k_frame_cache (struct frame_info *this_frame, void **this_cache)
907 {
908 struct gdbarch *gdbarch = get_frame_arch (this_frame);
909 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
910 struct m68k_frame_cache *cache;
911 gdb_byte buf[4];
912 int i;
913
914 if (*this_cache)
915 return (struct m68k_frame_cache *) *this_cache;
916
917 cache = m68k_alloc_frame_cache ();
918 *this_cache = cache;
919
920 /* In principle, for normal frames, %fp holds the frame pointer,
921 which holds the base address for the current stack frame.
922 However, for functions that don't need it, the frame pointer is
923 optional. For these "frameless" functions the frame pointer is
924 actually the frame pointer of the calling frame. Signal
925 trampolines are just a special case of a "frameless" function.
926 They (usually) share their frame pointer with the frame that was
927 in progress when the signal occurred. */
928
929 get_frame_register (this_frame, M68K_FP_REGNUM, buf);
930 cache->base = extract_unsigned_integer (buf, 4, byte_order);
931 if (cache->base == 0)
932 return cache;
933
934 /* For normal frames, %pc is stored at 4(%fp). */
935 cache->saved_regs[M68K_PC_REGNUM] = 4;
936
937 cache->pc = get_frame_func (this_frame);
938 if (cache->pc != 0)
939 m68k_analyze_prologue (get_frame_arch (this_frame), cache->pc,
940 get_frame_pc (this_frame), cache);
941
942 if (cache->locals < 0)
943 {
944 /* We didn't find a valid frame, which means that CACHE->base
945 currently holds the frame pointer for our calling frame. If
946 we're at the start of a function, or somewhere half-way its
947 prologue, the function's frame probably hasn't been fully
948 setup yet. Try to reconstruct the base address for the stack
949 frame by looking at the stack pointer. For truly "frameless"
950 functions this might work too. */
951
952 get_frame_register (this_frame, M68K_SP_REGNUM, buf);
953 cache->base = extract_unsigned_integer (buf, 4, byte_order)
954 + cache->sp_offset;
955 }
956
957 /* Now that we have the base address for the stack frame we can
958 calculate the value of %sp in the calling frame. */
959 cache->saved_sp = cache->base + 8;
960
961 /* Adjust all the saved registers such that they contain addresses
962 instead of offsets. */
963 for (i = 0; i < M68K_NUM_REGS; i++)
964 if (cache->saved_regs[i] != -1)
965 cache->saved_regs[i] += cache->base;
966
967 return cache;
968 }
969
970 static void
971 m68k_frame_this_id (struct frame_info *this_frame, void **this_cache,
972 struct frame_id *this_id)
973 {
974 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
975
976 /* This marks the outermost frame. */
977 if (cache->base == 0)
978 return;
979
980 /* See the end of m68k_push_dummy_call. */
981 *this_id = frame_id_build (cache->base + 8, cache->pc);
982 }
983
984 static struct value *
985 m68k_frame_prev_register (struct frame_info *this_frame, void **this_cache,
986 int regnum)
987 {
988 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
989
990 gdb_assert (regnum >= 0);
991
992 if (regnum == M68K_SP_REGNUM && cache->saved_sp)
993 return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
994
995 if (regnum < M68K_NUM_REGS && cache->saved_regs[regnum] != -1)
996 return frame_unwind_got_memory (this_frame, regnum,
997 cache->saved_regs[regnum]);
998
999 return frame_unwind_got_register (this_frame, regnum, regnum);
1000 }
1001
1002 static const struct frame_unwind m68k_frame_unwind =
1003 {
1004 NORMAL_FRAME,
1005 default_frame_unwind_stop_reason,
1006 m68k_frame_this_id,
1007 m68k_frame_prev_register,
1008 NULL,
1009 default_frame_sniffer
1010 };
1011 \f
1012 static CORE_ADDR
1013 m68k_frame_base_address (struct frame_info *this_frame, void **this_cache)
1014 {
1015 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
1016
1017 return cache->base;
1018 }
1019
1020 static const struct frame_base m68k_frame_base =
1021 {
1022 &m68k_frame_unwind,
1023 m68k_frame_base_address,
1024 m68k_frame_base_address,
1025 m68k_frame_base_address
1026 };
1027
1028 static struct frame_id
1029 m68k_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1030 {
1031 CORE_ADDR fp;
1032
1033 fp = get_frame_register_unsigned (this_frame, M68K_FP_REGNUM);
1034
1035 /* See the end of m68k_push_dummy_call. */
1036 return frame_id_build (fp + 8, get_frame_pc (this_frame));
1037 }
1038 \f
1039
1040 /* Figure out where the longjmp will land. Slurp the args out of the stack.
1041 We expect the first arg to be a pointer to the jmp_buf structure from which
1042 we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
1043 This routine returns true on success. */
1044
1045 static int
1046 m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
1047 {
1048 gdb_byte *buf;
1049 CORE_ADDR sp, jb_addr;
1050 struct gdbarch *gdbarch = get_frame_arch (frame);
1051 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1052 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1053
1054 if (tdep->jb_pc < 0)
1055 {
1056 internal_error (__FILE__, __LINE__,
1057 _("m68k_get_longjmp_target: not implemented"));
1058 return 0;
1059 }
1060
1061 buf = (gdb_byte *) alloca (gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
1062 sp = get_frame_register_unsigned (frame, gdbarch_sp_regnum (gdbarch));
1063
1064 if (target_read_memory (sp + SP_ARG0, /* Offset of first arg on stack. */
1065 buf, gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT))
1066 return 0;
1067
1068 jb_addr = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
1069 / TARGET_CHAR_BIT, byte_order);
1070
1071 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
1072 gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT),
1073 byte_order)
1074 return 0;
1075
1076 *pc = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
1077 / TARGET_CHAR_BIT, byte_order);
1078 return 1;
1079 }
1080 \f
1081
1082 /* This is the implementation of gdbarch method
1083 return_in_first_hidden_param_p. */
1084
1085 static int
1086 m68k_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
1087 struct type *type)
1088 {
1089 return 0;
1090 }
1091
1092 /* System V Release 4 (SVR4). */
1093
1094 void
1095 m68k_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1096 {
1097 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1098
1099 /* SVR4 uses a different calling convention. */
1100 set_gdbarch_return_value (gdbarch, m68k_svr4_return_value);
1101
1102 /* SVR4 uses %a0 instead of %a1. */
1103 tdep->struct_value_regnum = M68K_A0_REGNUM;
1104
1105 /* SVR4 returns pointers in %a0. */
1106 tdep->pointer_result_regnum = M68K_A0_REGNUM;
1107 }
1108
1109 /* GCC's m68k "embedded" ABI. This is like the SVR4 ABI, but pointer
1110 values are returned in %d0, not %a0. */
1111
1112 static void
1113 m68k_embedded_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1114 {
1115 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1116
1117 m68k_svr4_init_abi (info, gdbarch);
1118 tdep->pointer_result_regnum = M68K_D0_REGNUM;
1119 }
1120
1121 \f
1122
1123 /* Function: m68k_gdbarch_init
1124 Initializer function for the m68k gdbarch vector.
1125 Called by gdbarch. Sets up the gdbarch vector(s) for this target. */
1126
1127 static struct gdbarch *
1128 m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1129 {
1130 struct gdbarch_tdep *tdep = NULL;
1131 struct gdbarch *gdbarch;
1132 struct gdbarch_list *best_arch;
1133 tdesc_arch_data_up tdesc_data;
1134 int i;
1135 enum m68k_flavour flavour = m68k_no_flavour;
1136 int has_fp = 1;
1137 const struct floatformat **long_double_format = floatformats_m68881_ext;
1138
1139 /* Check any target description for validity. */
1140 if (tdesc_has_registers (info.target_desc))
1141 {
1142 const struct tdesc_feature *feature;
1143 int valid_p;
1144
1145 feature = tdesc_find_feature (info.target_desc,
1146 "org.gnu.gdb.m68k.core");
1147
1148 if (feature == NULL)
1149 {
1150 feature = tdesc_find_feature (info.target_desc,
1151 "org.gnu.gdb.coldfire.core");
1152 if (feature != NULL)
1153 flavour = m68k_coldfire_flavour;
1154 }
1155
1156 if (feature == NULL)
1157 {
1158 feature = tdesc_find_feature (info.target_desc,
1159 "org.gnu.gdb.fido.core");
1160 if (feature != NULL)
1161 flavour = m68k_fido_flavour;
1162 }
1163
1164 if (feature == NULL)
1165 return NULL;
1166
1167 tdesc_data = tdesc_data_alloc ();
1168
1169 valid_p = 1;
1170 for (i = 0; i <= M68K_PC_REGNUM; i++)
1171 valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i,
1172 m68k_register_names[i]);
1173
1174 if (!valid_p)
1175 return NULL;
1176
1177 feature = tdesc_find_feature (info.target_desc,
1178 "org.gnu.gdb.coldfire.fp");
1179 if (feature != NULL)
1180 {
1181 valid_p = 1;
1182 for (i = M68K_FP0_REGNUM; i <= M68K_FPI_REGNUM; i++)
1183 valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i,
1184 m68k_register_names[i]);
1185 if (!valid_p)
1186 return NULL;
1187 }
1188 else
1189 has_fp = 0;
1190 }
1191
1192 /* The mechanism for returning floating values from function
1193 and the type of long double depend on whether we're
1194 on ColdFire or standard m68k. */
1195
1196 if (info.bfd_arch_info && info.bfd_arch_info->mach != 0)
1197 {
1198 const bfd_arch_info_type *coldfire_arch =
1199 bfd_lookup_arch (bfd_arch_m68k, bfd_mach_mcf_isa_a_nodiv);
1200
1201 if (coldfire_arch
1202 && ((*info.bfd_arch_info->compatible)
1203 (info.bfd_arch_info, coldfire_arch)))
1204 flavour = m68k_coldfire_flavour;
1205 }
1206
1207 /* Try to figure out if the arch uses floating registers to return
1208 floating point values from functions. On ColdFire, floating
1209 point values are returned in D0. */
1210 int float_return = 0;
1211 if (has_fp && flavour != m68k_coldfire_flavour)
1212 float_return = 1;
1213 #ifdef HAVE_ELF
1214 if (info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
1215 {
1216 int fp_abi = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
1217 Tag_GNU_M68K_ABI_FP);
1218 if (fp_abi == 1)
1219 float_return = 1;
1220 else if (fp_abi == 2)
1221 float_return = 0;
1222 }
1223 #endif /* HAVE_ELF */
1224
1225 /* If there is already a candidate, use it. */
1226 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
1227 best_arch != NULL;
1228 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
1229 {
1230 if (flavour != gdbarch_tdep (best_arch->gdbarch)->flavour)
1231 continue;
1232
1233 if (has_fp != gdbarch_tdep (best_arch->gdbarch)->fpregs_present)
1234 continue;
1235
1236 if (float_return != gdbarch_tdep (best_arch->gdbarch)->float_return)
1237 continue;
1238
1239 break;
1240 }
1241
1242 if (best_arch != NULL)
1243 return best_arch->gdbarch;
1244
1245 tdep = XCNEW (struct gdbarch_tdep);
1246 gdbarch = gdbarch_alloc (&info, tdep);
1247 tdep->fpregs_present = has_fp;
1248 tdep->float_return = float_return;
1249 tdep->flavour = flavour;
1250
1251 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1252 long_double_format = floatformats_ieee_double;
1253 set_gdbarch_long_double_format (gdbarch, long_double_format);
1254 set_gdbarch_long_double_bit (gdbarch, long_double_format[0]->totalsize);
1255
1256 set_gdbarch_skip_prologue (gdbarch, m68k_skip_prologue);
1257 set_gdbarch_breakpoint_kind_from_pc (gdbarch, m68k_breakpoint::kind_from_pc);
1258 set_gdbarch_sw_breakpoint_from_kind (gdbarch, m68k_breakpoint::bp_from_kind);
1259
1260 /* Stack grows down. */
1261 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1262 set_gdbarch_frame_align (gdbarch, m68k_frame_align);
1263
1264 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
1265 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1266 set_gdbarch_decr_pc_after_break (gdbarch, 2);
1267
1268 set_gdbarch_frame_args_skip (gdbarch, 8);
1269 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum);
1270
1271 set_gdbarch_register_type (gdbarch, m68k_register_type);
1272 set_gdbarch_register_name (gdbarch, m68k_register_name);
1273 set_gdbarch_num_regs (gdbarch, M68K_NUM_REGS);
1274 set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM);
1275 set_gdbarch_pc_regnum (gdbarch, M68K_PC_REGNUM);
1276 set_gdbarch_ps_regnum (gdbarch, M68K_PS_REGNUM);
1277 set_gdbarch_convert_register_p (gdbarch, m68k_convert_register_p);
1278 set_gdbarch_register_to_value (gdbarch, m68k_register_to_value);
1279 set_gdbarch_value_to_register (gdbarch, m68k_value_to_register);
1280
1281 if (has_fp)
1282 set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
1283
1284 /* Function call & return. */
1285 set_gdbarch_push_dummy_call (gdbarch, m68k_push_dummy_call);
1286 set_gdbarch_return_value (gdbarch, m68k_return_value);
1287 set_gdbarch_return_in_first_hidden_param_p (gdbarch,
1288 m68k_return_in_first_hidden_param_p);
1289
1290 #if defined JB_PC && defined JB_ELEMENT_SIZE
1291 tdep->jb_pc = JB_PC;
1292 tdep->jb_elt_size = JB_ELEMENT_SIZE;
1293 #else
1294 tdep->jb_pc = -1;
1295 #endif
1296 tdep->pointer_result_regnum = M68K_D0_REGNUM;
1297 tdep->struct_value_regnum = M68K_A1_REGNUM;
1298 tdep->struct_return = reg_struct_return;
1299
1300 /* Frame unwinder. */
1301 set_gdbarch_dummy_id (gdbarch, m68k_dummy_id);
1302 set_gdbarch_unwind_pc (gdbarch, m68k_unwind_pc);
1303
1304 /* Hook in the DWARF CFI frame unwinder. */
1305 dwarf2_append_unwinders (gdbarch);
1306
1307 frame_base_set_default (gdbarch, &m68k_frame_base);
1308
1309 /* Hook in ABI-specific overrides, if they have been registered. */
1310 gdbarch_init_osabi (info, gdbarch);
1311
1312 /* Now we have tuned the configuration, set a few final things,
1313 based on what the OS ABI has told us. */
1314
1315 if (tdep->jb_pc >= 0)
1316 set_gdbarch_get_longjmp_target (gdbarch, m68k_get_longjmp_target);
1317
1318 frame_unwind_append_unwinder (gdbarch, &m68k_frame_unwind);
1319
1320 if (tdesc_data != nullptr)
1321 tdesc_use_registers (gdbarch, info.target_desc, std::move (tdesc_data));
1322
1323 return gdbarch;
1324 }
1325
1326
1327 static void
1328 m68k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
1329 {
1330 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1331
1332 if (tdep == NULL)
1333 return;
1334 }
1335
1336 /* OSABI sniffer for m68k. */
1337
1338 static enum gdb_osabi
1339 m68k_osabi_sniffer (bfd *abfd)
1340 {
1341 unsigned int elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
1342
1343 if (elfosabi == ELFOSABI_NONE)
1344 return GDB_OSABI_SVR4;
1345
1346 return GDB_OSABI_UNKNOWN;
1347 }
1348
1349 void _initialize_m68k_tdep ();
1350 void
1351 _initialize_m68k_tdep ()
1352 {
1353 gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep);
1354
1355 gdbarch_register_osabi_sniffer (bfd_arch_m68k, bfd_target_elf_flavour,
1356 m68k_osabi_sniffer);
1357 gdbarch_register_osabi (bfd_arch_m68k, 0, GDB_OSABI_SVR4,
1358 m68k_embedded_init_abi);
1359 }