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/>. */
21 #include "dwarf2/frame.h"
23 #include "frame-base.h"
24 #include "frame-unwind.h"
31 #include "arch-utils.h"
34 #include "target-descriptions.h"
35 #include "floatformat.h"
36 #include "target-float.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
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. */
71 m68k_ps_type (struct gdbarch
*gdbarch
)
73 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
75 if (!tdep
->m68k_ps_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
;
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
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
;
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
;
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",
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. */
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"),
178 else if (regnum
>= M68K_FP0_REGNUM
&& regnum
<= M68K_FPI_REGNUM
179 && gdbarch_tdep (gdbarch
)->fpregs_present
== 0)
182 return m68k_register_names
[regnum
];
185 /* Return nonzero if a value of type TYPE stored in register REGNUM
186 needs any special handling. */
189 m68k_convert_register_p (struct gdbarch
*gdbarch
,
190 int regnum
, struct type
*type
)
192 if (!gdbarch_tdep (gdbarch
)->fpregs_present
)
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. */
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
))
220 target_float_convert (from
, fpreg_type
, to
, type
);
221 *optimizedp
= *unavailablep
= 0;
225 /* Write the contents FROM of a value of type TYPE into register
226 REGNUM in frame FRAME. */
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
),
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."));
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'
284 /* Read a function return value of TYPE from REGCACHE, and copy that
288 m68k_extract_return_value (struct type
*type
, struct regcache
*regcache
,
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
);
302 regcache
->raw_read (M68K_D0_REGNUM
, buf
);
303 memcpy (valbuf
, buf
+ (4 - len
), len
);
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));
312 internal_error (__FILE__
, __LINE__
,
313 _("Cannot extract return value of %d bytes long."), len
);
317 m68k_svr4_extract_return_value (struct type
*type
, struct regcache
*regcache
,
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
);
331 m68k_extract_return_value (type
, regcache
, valbuf
);
334 /* Write a function return value of TYPE from VALBUF into REGCACHE. */
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
);
352 regcache
->raw_write_part (M68K_D0_REGNUM
, 4 - len
, len
, valbuf
);
355 regcache
->raw_write_part (M68K_D0_REGNUM
, 8 - len
, len
- 4, valbuf
);
356 regcache
->raw_write (M68K_D1_REGNUM
, valbuf
+ (len
- 4));
359 internal_error (__FILE__
, __LINE__
,
360 _("Cannot store return value of %d bytes long."), len
);
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
);
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
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
)
398 const bool is_vector
= code
== TYPE_CODE_ARRAY
&& type
->is_vector ();
401 && check_typedef (TYPE_TARGET_TYPE (type
))->code () == TYPE_CODE_FLT
)
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
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. */
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
;
453 m68k_extract_return_value (type
, regcache
, readbuf
);
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
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
,
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
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
501 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
504 regcache_raw_read_unsigned (regcache
, tdep
->pointer_result_regnum
,
506 read_memory (addr
, readbuf
, TYPE_LENGTH (type
));
509 return RETURN_VALUE_ABI_RETURNS_ADDRESS
;
513 m68k_svr4_extract_return_value (type
, regcache
, readbuf
);
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. */
525 m68k_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR sp
)
527 /* Align the stack to four bytes. */
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
);
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;
551 /* Non-scalars bigger than 4 bytes are left aligned, others are
553 if ((value_type
->code () == TYPE_CODE_STRUCT
554 || value_type
->code () == TYPE_CODE_UNION
555 || value_type
->code () == TYPE_CODE_ARRAY
)
559 offset
= container_len
- 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. */
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
588 /* Convert a dwarf or dwarf2 regnumber to a GDB regnum. */
591 m68k_dwarf_reg_to_regnum (struct gdbarch
*gdbarch
, int num
)
595 return (num
- 0) + M68K_D0_REGNUM
;
598 return (num
- 8) + M68K_A0_REGNUM
;
599 else if (num
< 24 && gdbarch_tdep (gdbarch
)->fpregs_present
)
601 return (num
- 16) + M68K_FP0_REGNUM
;
604 return M68K_PC_REGNUM
;
610 struct m68k_frame_cache
617 /* Saved registers. */
618 CORE_ADDR saved_regs
[M68K_NUM_REGS
];
621 /* Stack space reserved for local variables. */
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
;
633 cache
= FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache
);
637 cache
->sp_offset
= -4;
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. */
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. */
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
);
665 if (pc
>= 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
);
692 else if (op
== P_LINKL_FP
)
694 /* link.l %fp, #-N */
695 cache
->locals
= -read_memory_integer (pc
+ 2, 4, byte_order
);
700 /* pea (%fp); movea.l %sp, %fp */
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 */
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;
733 else if (op
== P_ADDAW_SP
|| op
== P_LEA_SP_SP
)
736 /* lea (-N,%sp),%sp */
737 cache
->locals
= -read_memory_integer (pc
+ 2, 2, byte_order
);
740 else if (op
== P_ADDAL_SP
)
743 cache
->locals
= -read_memory_integer (pc
+ 2, 4, byte_order
);
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. */
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)
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)
780 for (i
= 0; i
< 16; i
++, mask
>>= 1)
784 cache
->saved_regs
[i
+ M68K_FP0_REGNUM
] = offset
;
793 else if ((op
& 0177760) == P_MOVEL_SP
)
795 /* move.l %R,-(%sp) */
797 cache
->saved_regs
[regno
] = offset
;
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)
809 cache
->saved_regs
[15 - i
] = offset
;
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:
834 pea (%fp); move.l %sp,%fp
835 link.w %a6,#0; add.l #-N,%sp
838 subq.w #8,%sp; subq.w #N-8,%sp
843 For saving registers:
847 move.l R1,-(%sp); move.l R2,-(%sp)
850 For setting up the PIC register:
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
);
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
)
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 */
879 /* Return PC of first real instruction. */
882 m68k_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR start_pc
)
884 struct m68k_frame_cache cache
;
888 pc
= m68k_analyze_prologue (gdbarch
, start_pc
, (CORE_ADDR
) -1, &cache
);
889 if (cache
.locals
< 0)
895 m68k_unwind_pc (struct gdbarch
*gdbarch
, struct frame_info
*next_frame
)
899 frame_unwind_register (next_frame
, gdbarch_pc_regnum (gdbarch
), buf
);
900 return extract_typed_address (buf
, builtin_type (gdbarch
)->builtin_func_ptr
);
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
;
915 return (struct m68k_frame_cache
*) *this_cache
;
917 cache
= m68k_alloc_frame_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)
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
);
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
)
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
;
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)
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
,
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
=
1005 default_frame_unwind_stop_reason
,
1007 m68k_frame_prev_register
,
1009 default_frame_sniffer
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
);
1020 static const struct frame_base m68k_frame_base
=
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
)
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. */
1046 m68k_get_longjmp_target (struct frame_info
*frame
, CORE_ADDR
*pc
)
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"));
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
))
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
),
1076 *pc
= extract_unsigned_integer (buf
, gdbarch_ptr_bit (gdbarch
)
1077 / TARGET_CHAR_BIT
, byte_order
);
1082 /* This is the implementation of gdbarch method
1083 return_in_first_hidden_param_p. */
1086 m68k_return_in_first_hidden_param_p (struct gdbarch
*gdbarch
,
1092 /* System V Release 4 (SVR4). */
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. */
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
;
1135 enum m68k_flavour flavour
= m68k_no_flavour
;
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
;
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
)
1167 tdesc_data
= tdesc_data_alloc ();
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
]);
1177 feature
= tdesc_find_feature (info
.target_desc
,
1178 "org.gnu.gdb.coldfire.fp");
1179 if (feature
!= NULL
)
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
]);
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
);
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
)
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
);
1220 else if (fp_abi
== 2)
1223 #endif /* HAVE_ELF */
1225 /* If there is already a candidate, use it. */
1226 for (best_arch
= gdbarch_list_lookup_by_info (arches
, &info
);
1228 best_arch
= gdbarch_list_lookup_by_info (best_arch
->next
, &info
))
1230 if (flavour
!= gdbarch_tdep (best_arch
->gdbarch
)->flavour
)
1233 if (has_fp
!= gdbarch_tdep (best_arch
->gdbarch
)->fpregs_present
)
1236 if (float_return
!= gdbarch_tdep (best_arch
->gdbarch
)->float_return
)
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
);
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
;
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
));
1328 m68k_dump_tdep (struct gdbarch
*gdbarch
, struct ui_file
*file
)
1330 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
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 ();
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
);