Fix TARGET_CHAR_BIT/HOST_CHAR_BIT confusion in gmp-utils.c
[binutils-gdb.git] / gdb / m68k-tdep.c
blob083e6ef5cb856f7364b058f111ccf7fd6ad6fbb5
1 /* Target-dependent code for the Motorola 68000 series.
3 Copyright (C) 1990-2020 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
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"
40 #include "m68k-tdep.h"
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
57 /* Offset from SP to first arg on stack at first instruction of a function. */
58 #define SP_ARG0 (1 * 4)
60 #if !defined (BPT_VECTOR)
61 #define BPT_VECTOR 0xf
62 #endif
64 constexpr gdb_byte m68k_break_insn[] = {0x4e, (0x40 | BPT_VECTOR)};
66 typedef BP_MANIPULATION (m68k_break_insn) m68k_breakpoint;
69 /* Construct types for ISA-specific registers. */
70 static struct type *
71 m68k_ps_type (struct gdbarch *gdbarch)
73 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
75 if (!tdep->m68k_ps_type)
77 struct type *type;
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");
93 tdep->m68k_ps_type = type;
96 return tdep->m68k_ps_type;
99 static struct type *
100 m68881_ext_type (struct gdbarch *gdbarch)
102 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
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);
109 return tdep->m68881_ext_type;
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. */
120 static struct type *
121 m68k_register_type (struct gdbarch *gdbarch, int regnum)
123 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
125 if (tdep->fpregs_present)
127 if (regnum >= gdbarch_fp0_regnum (gdbarch)
128 && regnum <= gdbarch_fp0_regnum (gdbarch) + 7)
130 if (tdep->flavour == m68k_coldfire_flavour)
131 return builtin_type (gdbarch)->builtin_double;
132 else
133 return m68881_ext_type (gdbarch);
136 if (regnum == M68K_FPI_REGNUM)
137 return builtin_type (gdbarch)->builtin_func_ptr;
139 if (regnum == M68K_FPC_REGNUM || regnum == M68K_FPS_REGNUM)
140 return builtin_type (gdbarch)->builtin_int32;
142 else
144 if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM)
145 return builtin_type (gdbarch)->builtin_int0;
148 if (regnum == gdbarch_pc_regnum (gdbarch))
149 return builtin_type (gdbarch)->builtin_func_ptr;
151 if (regnum >= M68K_A0_REGNUM && regnum <= M68K_A0_REGNUM + 7)
152 return builtin_type (gdbarch)->builtin_data_ptr;
154 if (regnum == M68K_PS_REGNUM)
155 return m68k_ps_type (gdbarch);
157 return builtin_type (gdbarch)->builtin_int32;
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"
168 /* Function: m68k_register_name
169 Returns the name of the standard m68k register regnum. */
171 static const char *
172 m68k_register_name (struct gdbarch *gdbarch, int regnum)
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];
185 /* Return nonzero if a value of type TYPE stored in register REGNUM
186 needs any special handling. */
188 static int
189 m68k_convert_register_p (struct gdbarch *gdbarch,
190 int regnum, struct type *type)
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));
200 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
201 return its contents in TO. */
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)
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);
212 gdb_assert (type->code () == TYPE_CODE_FLT);
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;
220 target_float_convert (from, fpreg_type, to, type);
221 *optimizedp = *unavailablep = 0;
222 return 1;
225 /* Write the contents FROM of a value of type TYPE into register
226 REGNUM in frame FRAME. */
228 static void
229 m68k_value_to_register (struct frame_info *frame, int regnum,
230 struct type *type, const gdb_byte *from)
232 gdb_byte to[M68K_MAX_REGISTER_SIZE];
233 struct type *fpreg_type = register_type (get_frame_arch (frame),
234 M68K_FP0_REGNUM);
236 /* We only support floating-point values. */
237 if (type->code () != TYPE_CODE_FLT)
239 warning (_("Cannot convert non-floating-point type "
240 "to floating-point register value."));
241 return;
244 /* Convert from TYPE. */
245 target_float_convert (from, type, to, fpreg_type);
246 put_frame_register (frame, regnum, to);
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.
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'.
270 GNU/Linux returns values in the same way as SVR4 does, but uses %a1
271 for passing the structure return value buffer.
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.
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. */
284 /* Read a function return value of TYPE from REGCACHE, and copy that
285 into VALBUF. */
287 static void
288 m68k_extract_return_value (struct type *type, struct regcache *regcache,
289 gdb_byte *valbuf)
291 int len = TYPE_LENGTH (type);
292 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
294 if (type->code () == TYPE_CODE_PTR && len == 4)
296 struct gdbarch *gdbarch = regcache->arch ();
297 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
298 regcache->raw_read (tdep->pointer_result_regnum, valbuf);
300 else if (len <= 4)
302 regcache->raw_read (M68K_D0_REGNUM, buf);
303 memcpy (valbuf, buf + (4 - len), len);
305 else if (len <= 8)
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));
311 else
312 internal_error (__FILE__, __LINE__,
313 _("Cannot extract return value of %d bytes long."), len);
316 static void
317 m68k_svr4_extract_return_value (struct type *type, struct regcache *regcache,
318 gdb_byte *valbuf)
320 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
321 struct gdbarch *gdbarch = regcache->arch ();
322 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
324 if (tdep->float_return && type->code () == TYPE_CODE_FLT)
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);
330 else
331 m68k_extract_return_value (type, regcache, valbuf);
334 /* Write a function return value of TYPE from VALBUF into REGCACHE. */
336 static void
337 m68k_store_return_value (struct type *type, struct regcache *regcache,
338 const gdb_byte *valbuf)
340 int len = TYPE_LENGTH (type);
342 if (type->code () == TYPE_CODE_PTR && len == 4)
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);
351 else if (len <= 4)
352 regcache->raw_write_part (M68K_D0_REGNUM, 4 - len, len, valbuf);
353 else if (len <= 8)
355 regcache->raw_write_part (M68K_D0_REGNUM, 8 - len, len - 4, valbuf);
356 regcache->raw_write (M68K_D1_REGNUM, valbuf + (len - 4));
358 else
359 internal_error (__FILE__, __LINE__,
360 _("Cannot store return value of %d bytes long."), len);
363 static void
364 m68k_svr4_store_return_value (struct type *type, struct regcache *regcache,
365 const gdb_byte *valbuf)
367 struct gdbarch *gdbarch = regcache->arch ();
368 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
370 if (tdep->float_return && type->code () == TYPE_CODE_FLT)
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);
377 else
378 m68k_store_return_value (type, regcache, valbuf);
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. */
385 static int
386 m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
388 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
389 enum type_code code = type->code ();
390 int len = TYPE_LENGTH (type);
392 gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
393 || code == TYPE_CODE_COMPLEX || code == TYPE_CODE_ARRAY);
395 if (tdep->struct_return == pcc_struct_return)
396 return 0;
398 const bool is_vector = code == TYPE_CODE_ARRAY && type->is_vector ();
400 if (is_vector
401 && check_typedef (TYPE_TARGET_TYPE (type))->code () == TYPE_CODE_FLT)
402 return 0;
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.
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;
415 return (len == 1 || len == 2 || len == 4 || len == 8);
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. */
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)
429 enum type_code code = type->code ();
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))
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. */
441 if (readbuf)
443 ULONGEST addr;
445 regcache_raw_read_unsigned (regcache, M68K_D0_REGNUM, &addr);
446 read_memory (addr, readbuf, TYPE_LENGTH (type));
449 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
452 if (readbuf)
453 m68k_extract_return_value (type, regcache, readbuf);
454 if (writebuf)
455 m68k_store_return_value (type, regcache, writebuf);
457 return RETURN_VALUE_REGISTER_CONVENTION;
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)
465 enum type_code code = type->code ();
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)
472 type = check_typedef (type->field (0).type ());
473 return m68k_svr4_return_value (gdbarch, function, type, regcache,
474 readbuf, writebuf);
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))
485 /* The System V ABI says that:
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."
492 So the ABI guarantees that we can always find the return
493 value just after the function has returned.
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. */
499 if (readbuf)
501 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
502 ULONGEST addr;
504 regcache_raw_read_unsigned (regcache, tdep->pointer_result_regnum,
505 &addr);
506 read_memory (addr, readbuf, TYPE_LENGTH (type));
509 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
512 if (readbuf)
513 m68k_svr4_extract_return_value (type, regcache, readbuf);
514 if (writebuf)
515 m68k_svr4_store_return_value (type, regcache, writebuf);
517 return RETURN_VALUE_REGISTER_CONVENTION;
521 /* Always align the frame to a 4-byte boundary. This is required on
522 coldfire and harmless on the rest. */
524 static CORE_ADDR
525 m68k_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
527 /* Align the stack to four bytes. */
528 return sp & ~3;
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)
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;
543 /* Push arguments in reverse order. */
544 for (i = nargs - 1; i >= 0; i--)
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;
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);
564 /* Store struct value address. */
565 if (return_method == return_method_struct)
567 store_unsigned_integer (buf, 4, byte_order, struct_addr);
568 regcache->cooked_write (tdep->struct_value_regnum, buf);
571 /* Store return address. */
572 sp -= 4;
573 store_unsigned_integer (buf, 4, byte_order, bp_addr);
574 write_memory (sp, buf, 4);
576 /* Finally, update the stack pointer... */
577 store_unsigned_integer (buf, 4, byte_order, sp);
578 regcache->cooked_write (M68K_SP_REGNUM, buf);
580 /* ...and fake a frame pointer. */
581 regcache->cooked_write (M68K_FP_REGNUM, buf);
583 /* DWARF2/GCC uses the stack address *before* the function call as a
584 frame's CFA. */
585 return sp + 8;
588 /* Convert a dwarf or dwarf2 regnumber to a GDB regnum. */
590 static int
591 m68k_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num)
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;
610 struct m68k_frame_cache
612 /* Base address. */
613 CORE_ADDR base;
614 CORE_ADDR sp_offset;
615 CORE_ADDR pc;
617 /* Saved registers. */
618 CORE_ADDR saved_regs[M68K_NUM_REGS];
619 CORE_ADDR saved_sp;
621 /* Stack space reserved for local variables. */
622 long locals;
625 /* Allocate and initialize a frame cache. */
627 static struct m68k_frame_cache *
628 m68k_alloc_frame_cache (void)
630 struct m68k_frame_cache *cache;
631 int i;
633 cache = FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache);
635 /* Base address. */
636 cache->base = 0;
637 cache->sp_offset = -4;
638 cache->pc = 0;
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;
645 /* Frameless until proven otherwise. */
646 cache->locals = -1;
648 return cache;
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. */
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)
662 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
663 int op;
665 if (pc >= current_pc)
666 return current_pc;
668 op = read_memory_unsigned_integer (pc, 2, byte_order);
670 if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP)
672 cache->saved_regs[M68K_FP_REGNUM] = 0;
673 cache->sp_offset += 4;
674 if (op == P_LINKW_FP)
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);
680 if (pc + 4 < current_pc && cache->locals == 0)
682 op = read_memory_unsigned_integer (pc + 4, 2, byte_order);
683 if (op == P_ADDAL_SP)
685 cache->locals = read_memory_integer (pc + 6, 4, byte_order);
686 return pc + 10;
690 return pc + 4;
692 else if (op == P_LINKL_FP)
694 /* link.l %fp, #-N */
695 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
696 return pc + 6;
698 else
700 /* pea (%fp); movea.l %sp, %fp */
701 cache->locals = 0;
703 if (pc + 2 < current_pc)
705 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
707 if (op == P_MOVEAL_SP_FP)
709 /* move.l %sp, %fp */
710 return pc + 4;
714 return pc + 2;
717 else if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
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)
724 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
725 if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
727 cache->locals += (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
728 return pc + 4;
731 return pc + 2;
733 else if (op == P_ADDAW_SP || op == P_LEA_SP_SP)
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;
740 else if (op == P_ADDAL_SP)
742 /* adda.l #-N,%sp */
743 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
744 return pc + 6;
747 return pc;
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. */
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)
760 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
762 if (cache->locals >= 0)
764 CORE_ADDR offset;
765 int op;
766 int i, mask, regno;
768 offset = -4 - cache->locals;
769 while (pc < current_pc)
771 op = read_memory_unsigned_integer (pc, 2, byte_order);
772 if (op == P_FMOVEMX_SP
773 && gdbarch_tdep (gdbarch)->fpregs_present)
775 /* fmovem.x REGS,-(%sp) */
776 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
777 if ((op & 0xff00) == 0xe000)
779 mask = op & 0xff;
780 for (i = 0; i < 16; i++, mask >>= 1)
782 if (mask & 1)
784 cache->saved_regs[i + M68K_FP0_REGNUM] = offset;
785 offset -= 12;
788 pc += 4;
790 else
791 break;
793 else if ((op & 0177760) == P_MOVEL_SP)
795 /* move.l %R,-(%sp) */
796 regno = op & 017;
797 cache->saved_regs[regno] = offset;
798 offset -= 4;
799 pc += 2;
801 else if (op == P_MOVEML_SP)
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)
807 if (mask & 1)
809 cache->saved_regs[15 - i] = offset;
810 offset -= 4;
813 pc += 4;
815 else
816 break;
820 return pc;
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.
828 We handle all cases that can be generated by gcc.
830 For allocating a stack frame:
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
843 For saving registers:
845 fmovem.x REGS,-(%sp)
846 move.l R1,-(%sp)
847 move.l R1,-(%sp); move.l R2,-(%sp)
848 movem.l REGS,-(%sp)
850 For setting up the PIC register:
852 lea (%pc,N),%a5
856 static CORE_ADDR
857 m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
858 CORE_ADDR current_pc, struct m68k_frame_cache *cache)
860 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
861 unsigned int op;
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;
868 /* Check for GOT setup. */
869 op = read_memory_unsigned_integer (pc, 4, byte_order);
870 if (op == P_LEA_PC_A5)
872 /* lea (%pc,N),%a5 */
873 return pc + 8;
876 return pc;
879 /* Return PC of first real instruction. */
881 static CORE_ADDR
882 m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
884 struct m68k_frame_cache cache;
885 CORE_ADDR pc;
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;
894 static CORE_ADDR
895 m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
897 gdb_byte buf[8];
899 frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
900 return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
903 /* Normal frames. */
905 static struct m68k_frame_cache *
906 m68k_frame_cache (struct frame_info *this_frame, void **this_cache)
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;
914 if (*this_cache)
915 return (struct m68k_frame_cache *) *this_cache;
917 cache = m68k_alloc_frame_cache ();
918 *this_cache = cache;
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. */
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;
934 /* For normal frames, %pc is stored at 4(%fp). */
935 cache->saved_regs[M68K_PC_REGNUM] = 4;
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);
942 if (cache->locals < 0)
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. */
952 get_frame_register (this_frame, M68K_SP_REGNUM, buf);
953 cache->base = extract_unsigned_integer (buf, 4, byte_order)
954 + cache->sp_offset;
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;
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;
967 return cache;
970 static void
971 m68k_frame_this_id (struct frame_info *this_frame, void **this_cache,
972 struct frame_id *this_id)
974 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
976 /* This marks the outermost frame. */
977 if (cache->base == 0)
978 return;
980 /* See the end of m68k_push_dummy_call. */
981 *this_id = frame_id_build (cache->base + 8, cache->pc);
984 static struct value *
985 m68k_frame_prev_register (struct frame_info *this_frame, void **this_cache,
986 int regnum)
988 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
990 gdb_assert (regnum >= 0);
992 if (regnum == M68K_SP_REGNUM && cache->saved_sp)
993 return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
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]);
999 return frame_unwind_got_register (this_frame, regnum, regnum);
1002 static const struct frame_unwind m68k_frame_unwind =
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
1012 static CORE_ADDR
1013 m68k_frame_base_address (struct frame_info *this_frame, void **this_cache)
1015 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
1017 return cache->base;
1020 static const struct frame_base m68k_frame_base =
1022 &m68k_frame_unwind,
1023 m68k_frame_base_address,
1024 m68k_frame_base_address,
1025 m68k_frame_base_address
1028 static struct frame_id
1029 m68k_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1031 CORE_ADDR fp;
1033 fp = get_frame_register_unsigned (this_frame, M68K_FP_REGNUM);
1035 /* See the end of m68k_push_dummy_call. */
1036 return frame_id_build (fp + 8, get_frame_pc (this_frame));
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. */
1045 static int
1046 m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
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);
1054 if (tdep->jb_pc < 0)
1056 internal_error (__FILE__, __LINE__,
1057 _("m68k_get_longjmp_target: not implemented"));
1058 return 0;
1061 buf = (gdb_byte *) alloca (gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
1062 sp = get_frame_register_unsigned (frame, gdbarch_sp_regnum (gdbarch));
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;
1068 jb_addr = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
1069 / TARGET_CHAR_BIT, byte_order);
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;
1076 *pc = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
1077 / TARGET_CHAR_BIT, byte_order);
1078 return 1;
1082 /* This is the implementation of gdbarch method
1083 return_in_first_hidden_param_p. */
1085 static int
1086 m68k_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
1087 struct type *type)
1089 return 0;
1092 /* System V Release 4 (SVR4). */
1094 void
1095 m68k_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1097 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1099 /* SVR4 uses a different calling convention. */
1100 set_gdbarch_return_value (gdbarch, m68k_svr4_return_value);
1102 /* SVR4 uses %a0 instead of %a1. */
1103 tdep->struct_value_regnum = M68K_A0_REGNUM;
1105 /* SVR4 returns pointers in %a0. */
1106 tdep->pointer_result_regnum = M68K_A0_REGNUM;
1109 /* GCC's m68k "embedded" ABI. This is like the SVR4 ABI, but pointer
1110 values are returned in %d0, not %a0. */
1112 static void
1113 m68k_embedded_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1115 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1117 m68k_svr4_init_abi (info, gdbarch);
1118 tdep->pointer_result_regnum = M68K_D0_REGNUM;
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. */
1127 static struct gdbarch *
1128 m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
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;
1139 /* Check any target description for validity. */
1140 if (tdesc_has_registers (info.target_desc))
1142 const struct tdesc_feature *feature;
1143 int valid_p;
1145 feature = tdesc_find_feature (info.target_desc,
1146 "org.gnu.gdb.m68k.core");
1148 if (feature == NULL)
1150 feature = tdesc_find_feature (info.target_desc,
1151 "org.gnu.gdb.coldfire.core");
1152 if (feature != NULL)
1153 flavour = m68k_coldfire_flavour;
1156 if (feature == NULL)
1158 feature = tdesc_find_feature (info.target_desc,
1159 "org.gnu.gdb.fido.core");
1160 if (feature != NULL)
1161 flavour = m68k_fido_flavour;
1164 if (feature == NULL)
1165 return NULL;
1167 tdesc_data = tdesc_data_alloc ();
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]);
1174 if (!valid_p)
1175 return NULL;
1177 feature = tdesc_find_feature (info.target_desc,
1178 "org.gnu.gdb.coldfire.fp");
1179 if (feature != NULL)
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;
1188 else
1189 has_fp = 0;
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. */
1196 if (info.bfd_arch_info && info.bfd_arch_info->mach != 0)
1198 const bfd_arch_info_type *coldfire_arch =
1199 bfd_lookup_arch (bfd_arch_m68k, bfd_mach_mcf_isa_a_nodiv);
1201 if (coldfire_arch
1202 && ((*info.bfd_arch_info->compatible)
1203 (info.bfd_arch_info, coldfire_arch)))
1204 flavour = m68k_coldfire_flavour;
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)
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;
1223 #endif /* HAVE_ELF */
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))
1230 if (flavour != gdbarch_tdep (best_arch->gdbarch)->flavour)
1231 continue;
1233 if (has_fp != gdbarch_tdep (best_arch->gdbarch)->fpregs_present)
1234 continue;
1236 if (float_return != gdbarch_tdep (best_arch->gdbarch)->float_return)
1237 continue;
1239 break;
1242 if (best_arch != NULL)
1243 return best_arch->gdbarch;
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;
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);
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);
1260 /* Stack grows down. */
1261 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1262 set_gdbarch_frame_align (gdbarch, m68k_frame_align);
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);
1268 set_gdbarch_frame_args_skip (gdbarch, 8);
1269 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum);
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);
1281 if (has_fp)
1282 set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
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);
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;
1300 /* Frame unwinder. */
1301 set_gdbarch_dummy_id (gdbarch, m68k_dummy_id);
1302 set_gdbarch_unwind_pc (gdbarch, m68k_unwind_pc);
1304 /* Hook in the DWARF CFI frame unwinder. */
1305 dwarf2_append_unwinders (gdbarch);
1307 frame_base_set_default (gdbarch, &m68k_frame_base);
1309 /* Hook in ABI-specific overrides, if they have been registered. */
1310 gdbarch_init_osabi (info, gdbarch);
1312 /* Now we have tuned the configuration, set a few final things,
1313 based on what the OS ABI has told us. */
1315 if (tdep->jb_pc >= 0)
1316 set_gdbarch_get_longjmp_target (gdbarch, m68k_get_longjmp_target);
1318 frame_unwind_append_unwinder (gdbarch, &m68k_frame_unwind);
1320 if (tdesc_data != nullptr)
1321 tdesc_use_registers (gdbarch, info.target_desc, std::move (tdesc_data));
1323 return gdbarch;
1327 static void
1328 m68k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
1330 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1332 if (tdep == NULL)
1333 return;
1336 /* OSABI sniffer for m68k. */
1338 static enum gdb_osabi
1339 m68k_osabi_sniffer (bfd *abfd)
1341 unsigned int elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
1343 if (elfosabi == ELFOSABI_NONE)
1344 return GDB_OSABI_SVR4;
1346 return GDB_OSABI_UNKNOWN;
1349 void _initialize_m68k_tdep ();
1350 void
1351 _initialize_m68k_tdep ()
1353 gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep);
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);