1 /* Target-dependent code for the Motorola 68000 series.
3 Copyright (C) 1990-2015 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"
36 #include "m68k-tdep.h"
39 #define P_LINKL_FP 0x480e
40 #define P_LINKW_FP 0x4e56
41 #define P_PEA_FP 0x4856
42 #define P_MOVEAL_SP_FP 0x2c4f
43 #define P_ADDAW_SP 0xdefc
44 #define P_ADDAL_SP 0xdffc
45 #define P_SUBQW_SP 0x514f
46 #define P_SUBQL_SP 0x518f
47 #define P_LEA_SP_SP 0x4fef
48 #define P_LEA_PC_A5 0x4bfb0170
49 #define P_FMOVEMX_SP 0xf227
50 #define P_MOVEL_SP 0x2f00
51 #define P_MOVEML_SP 0x48e7
53 /* Offset from SP to first arg on stack at first instruction of a function. */
54 #define SP_ARG0 (1 * 4)
56 #if !defined (BPT_VECTOR)
57 #define BPT_VECTOR 0xf
60 static const gdb_byte *
61 m68k_local_breakpoint_from_pc (struct gdbarch *gdbarch,
62 CORE_ADDR *pcptr, int *lenptr)
64 static gdb_byte break_insn[] = {0x4e, (0x40 | BPT_VECTOR)};
65 *lenptr = sizeof (break_insn);
70 /* Construct types for ISA-specific registers. */
72 m68k_ps_type (struct gdbarch *gdbarch)
74 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
76 if (!tdep->m68k_ps_type)
80 type = arch_flags_type (gdbarch, "builtin_type_m68k_ps", 4);
81 append_flags_type_flag (type, 0, "C");
82 append_flags_type_flag (type, 1, "V");
83 append_flags_type_flag (type, 2, "Z");
84 append_flags_type_flag (type, 3, "N");
85 append_flags_type_flag (type, 4, "X");
86 append_flags_type_flag (type, 8, "I0");
87 append_flags_type_flag (type, 9, "I1");
88 append_flags_type_flag (type, 10, "I2");
89 append_flags_type_flag (type, 12, "M");
90 append_flags_type_flag (type, 13, "S");
91 append_flags_type_flag (type, 14, "T0");
92 append_flags_type_flag (type, 15, "T1");
94 tdep->m68k_ps_type = type;
97 return tdep->m68k_ps_type;
101 m68881_ext_type (struct gdbarch *gdbarch)
103 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
105 if (!tdep->m68881_ext_type)
106 tdep->m68881_ext_type
107 = arch_float_type (gdbarch, -1, "builtin_type_m68881_ext",
108 floatformats_m68881_ext);
110 return tdep->m68881_ext_type;
113 /* Return the GDB type object for the "standard" data type of data in
114 register N. This should be int for D0-D7, SR, FPCONTROL and
115 FPSTATUS, long double for FP0-FP7, and void pointer for all others
116 (A0-A7, PC, FPIADDR). Note, for registers which contain
117 addresses return pointer to void, not pointer to char, because we
118 don't want to attempt to print the string after printing the
122 m68k_register_type (struct gdbarch *gdbarch, int regnum)
124 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
126 if (tdep->fpregs_present)
128 if (regnum >= gdbarch_fp0_regnum (gdbarch)
129 && regnum <= gdbarch_fp0_regnum (gdbarch) + 7)
131 if (tdep->flavour == m68k_coldfire_flavour)
132 return builtin_type (gdbarch)->builtin_double;
134 return m68881_ext_type (gdbarch);
137 if (regnum == M68K_FPI_REGNUM)
138 return builtin_type (gdbarch)->builtin_func_ptr;
140 if (regnum == M68K_FPC_REGNUM || regnum == M68K_FPS_REGNUM)
141 return builtin_type (gdbarch)->builtin_int32;
145 if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM)
146 return builtin_type (gdbarch)->builtin_int0;
149 if (regnum == gdbarch_pc_regnum (gdbarch))
150 return builtin_type (gdbarch)->builtin_func_ptr;
152 if (regnum >= M68K_A0_REGNUM && regnum <= M68K_A0_REGNUM + 7)
153 return builtin_type (gdbarch)->builtin_data_ptr;
155 if (regnum == M68K_PS_REGNUM)
156 return m68k_ps_type (gdbarch);
158 return builtin_type (gdbarch)->builtin_int32;
161 static const char *m68k_register_names[] = {
162 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
163 "a0", "a1", "a2", "a3", "a4", "a5", "fp", "sp",
165 "fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7",
166 "fpcontrol", "fpstatus", "fpiaddr"
169 /* Function: m68k_register_name
170 Returns the name of the standard m68k register regnum. */
173 m68k_register_name (struct gdbarch *gdbarch, int regnum)
175 if (regnum < 0 || regnum >= ARRAY_SIZE (m68k_register_names))
176 internal_error (__FILE__, __LINE__,
177 _("m68k_register_name: illegal register number %d"),
179 else if (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FPI_REGNUM
180 && gdbarch_tdep (gdbarch)->fpregs_present == 0)
183 return m68k_register_names[regnum];
186 /* Return nonzero if a value of type TYPE stored in register REGNUM
187 needs any special handling. */
190 m68k_convert_register_p (struct gdbarch *gdbarch,
191 int regnum, struct type *type)
193 if (!gdbarch_tdep (gdbarch)->fpregs_present)
195 return (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FP0_REGNUM + 7
196 && type != register_type (gdbarch, M68K_FP0_REGNUM));
199 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
200 return its contents in TO. */
203 m68k_register_to_value (struct frame_info *frame, int regnum,
204 struct type *type, gdb_byte *to,
205 int *optimizedp, int *unavailablep)
207 gdb_byte from[M68K_MAX_REGISTER_SIZE];
208 struct type *fpreg_type = register_type (get_frame_arch (frame),
211 /* We only support floating-point values. */
212 if (TYPE_CODE (type) != TYPE_CODE_FLT)
214 warning (_("Cannot convert floating-point register value "
215 "to non-floating-point type."));
216 *optimizedp = *unavailablep = 0;
220 /* Convert to TYPE. */
222 /* Convert to TYPE. */
223 if (!get_frame_register_bytes (frame, regnum, 0, TYPE_LENGTH (type),
224 from, optimizedp, unavailablep))
227 convert_typed_floating (from, fpreg_type, to, type);
228 *optimizedp = *unavailablep = 0;
232 /* Write the contents FROM of a value of type TYPE into register
233 REGNUM in frame FRAME. */
236 m68k_value_to_register (struct frame_info *frame, int regnum,
237 struct type *type, const gdb_byte *from)
239 gdb_byte to[M68K_MAX_REGISTER_SIZE];
240 struct type *fpreg_type = register_type (get_frame_arch (frame),
243 /* We only support floating-point values. */
244 if (TYPE_CODE (type) != TYPE_CODE_FLT)
246 warning (_("Cannot convert non-floating-point type "
247 "to floating-point register value."));
251 /* Convert from TYPE. */
252 convert_typed_floating (from, type, to, fpreg_type);
253 put_frame_register (frame, regnum, to);
257 /* There is a fair number of calling conventions that are in somewhat
258 wide use. The 68000/08/10 don't support an FPU, not even as a
259 coprocessor. All function return values are stored in %d0/%d1.
260 Structures are returned in a static buffer, a pointer to which is
261 returned in %d0. This means that functions returning a structure
262 are not re-entrant. To avoid this problem some systems use a
263 convention where the caller passes a pointer to a buffer in %a1
264 where the return values is to be stored. This convention is the
265 default, and is implemented in the function m68k_return_value.
267 The 68020/030/040/060 do support an FPU, either as a coprocessor
268 (68881/2) or built-in (68040/68060). That's why System V release 4
269 (SVR4) instroduces a new calling convention specified by the SVR4
270 psABI. Integer values are returned in %d0/%d1, pointer return
271 values in %a0 and floating values in %fp0. When calling functions
272 returning a structure the caller should pass a pointer to a buffer
273 for the return value in %a0. This convention is implemented in the
274 function m68k_svr4_return_value, and by appropriately setting the
275 struct_value_regnum member of `struct gdbarch_tdep'.
277 GNU/Linux returns values in the same way as SVR4 does, but uses %a1
278 for passing the structure return value buffer.
280 GCC can also generate code where small structures are returned in
281 %d0/%d1 instead of in memory by using -freg-struct-return. This is
282 the default on NetBSD a.out, OpenBSD and GNU/Linux and several
283 embedded systems. This convention is implemented by setting the
284 struct_return member of `struct gdbarch_tdep' to reg_struct_return. */
286 /* Read a function return value of TYPE from REGCACHE, and copy that
290 m68k_extract_return_value (struct type *type, struct regcache *regcache,
293 int len = TYPE_LENGTH (type);
294 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
298 regcache_raw_read (regcache, M68K_D0_REGNUM, buf);
299 memcpy (valbuf, buf + (4 - len), len);
303 regcache_raw_read (regcache, M68K_D0_REGNUM, buf);
304 memcpy (valbuf, buf + (8 - len), len - 4);
305 regcache_raw_read (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
308 internal_error (__FILE__, __LINE__,
309 _("Cannot extract return value of %d bytes long."), len);
313 m68k_svr4_extract_return_value (struct type *type, struct regcache *regcache,
316 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
317 struct gdbarch *gdbarch = get_regcache_arch (regcache);
318 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
320 if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
322 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
323 regcache_raw_read (regcache, M68K_FP0_REGNUM, buf);
324 convert_typed_floating (buf, fpreg_type, valbuf, type);
326 else if (TYPE_CODE (type) == TYPE_CODE_PTR && TYPE_LENGTH (type) == 4)
327 regcache_raw_read (regcache, M68K_A0_REGNUM, valbuf);
329 m68k_extract_return_value (type, regcache, valbuf);
332 /* Write a function return value of TYPE from VALBUF into REGCACHE. */
335 m68k_store_return_value (struct type *type, struct regcache *regcache,
336 const gdb_byte *valbuf)
338 int len = TYPE_LENGTH (type);
341 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 4 - len, len, valbuf);
344 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 8 - len,
346 regcache_raw_write (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
349 internal_error (__FILE__, __LINE__,
350 _("Cannot store return value of %d bytes long."), len);
354 m68k_svr4_store_return_value (struct type *type, struct regcache *regcache,
355 const gdb_byte *valbuf)
357 struct gdbarch *gdbarch = get_regcache_arch (regcache);
358 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
360 if (tdep->float_return && TYPE_CODE (type) == TYPE_CODE_FLT)
362 struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
363 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
364 convert_typed_floating (valbuf, type, buf, fpreg_type);
365 regcache_raw_write (regcache, M68K_FP0_REGNUM, buf);
367 else if (TYPE_CODE (type) == TYPE_CODE_PTR && TYPE_LENGTH (type) == 4)
369 regcache_raw_write (regcache, M68K_A0_REGNUM, valbuf);
370 regcache_raw_write (regcache, M68K_D0_REGNUM, valbuf);
373 m68k_store_return_value (type, regcache, valbuf);
376 /* Return non-zero if TYPE, which is assumed to be a structure, union or
377 complex type, should be returned in registers for architecture
381 m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
383 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
384 enum type_code code = TYPE_CODE (type);
385 int len = TYPE_LENGTH (type);
387 gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
388 || code == TYPE_CODE_COMPLEX);
390 if (tdep->struct_return == pcc_struct_return)
393 return (len == 1 || len == 2 || len == 4 || len == 8);
396 /* Determine, for architecture GDBARCH, how a return value of TYPE
397 should be returned. If it is supposed to be returned in registers,
398 and READBUF is non-zero, read the appropriate value from REGCACHE,
399 and copy it into READBUF. If WRITEBUF is non-zero, write the value
400 from WRITEBUF into REGCACHE. */
402 static enum return_value_convention
403 m68k_return_value (struct gdbarch *gdbarch, struct value *function,
404 struct type *type, struct regcache *regcache,
405 gdb_byte *readbuf, const gdb_byte *writebuf)
407 enum type_code code = TYPE_CODE (type);
409 /* GCC returns a `long double' in memory too. */
410 if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
411 || code == TYPE_CODE_COMPLEX)
412 && !m68k_reg_struct_return_p (gdbarch, type))
413 || (code == TYPE_CODE_FLT && TYPE_LENGTH (type) == 12))
415 /* The default on m68k is to return structures in static memory.
416 Consequently a function must return the address where we can
417 find the return value. */
423 regcache_raw_read_unsigned (regcache, M68K_D0_REGNUM, &addr);
424 read_memory (addr, readbuf, TYPE_LENGTH (type));
427 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
431 m68k_extract_return_value (type, regcache, readbuf);
433 m68k_store_return_value (type, regcache, writebuf);
435 return RETURN_VALUE_REGISTER_CONVENTION;
438 static enum return_value_convention
439 m68k_svr4_return_value (struct gdbarch *gdbarch, struct value *function,
440 struct type *type, struct regcache *regcache,
441 gdb_byte *readbuf, const gdb_byte *writebuf)
443 enum type_code code = TYPE_CODE (type);
445 if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION
446 || code == TYPE_CODE_COMPLEX)
447 && !m68k_reg_struct_return_p (gdbarch, type))
449 /* The System V ABI says that:
451 "A function returning a structure or union also sets %a0 to
452 the value it finds in %a0. Thus when the caller receives
453 control again, the address of the returned object resides in
456 So the ABI guarantees that we can always find the return
457 value just after the function has returned. */
463 regcache_raw_read_unsigned (regcache, M68K_A0_REGNUM, &addr);
464 read_memory (addr, readbuf, TYPE_LENGTH (type));
467 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
470 /* This special case is for structures consisting of a single
471 `float' or `double' member. These structures are returned in
472 %fp0. For these structures, we call ourselves recursively,
473 changing TYPE into the type of the first member of the structure.
474 Since that should work for all structures that have only one
475 member, we don't bother to check the member's type here. */
476 if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
478 type = check_typedef (TYPE_FIELD_TYPE (type, 0));
479 return m68k_svr4_return_value (gdbarch, function, type, regcache,
484 m68k_svr4_extract_return_value (type, regcache, readbuf);
486 m68k_svr4_store_return_value (type, regcache, writebuf);
488 return RETURN_VALUE_REGISTER_CONVENTION;
492 /* Always align the frame to a 4-byte boundary. This is required on
493 coldfire and harmless on the rest. */
496 m68k_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
498 /* Align the stack to four bytes. */
503 m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
504 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
505 struct value **args, CORE_ADDR sp, int struct_return,
506 CORE_ADDR struct_addr)
508 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
509 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
513 /* Push arguments in reverse order. */
514 for (i = nargs - 1; i >= 0; i--)
516 struct type *value_type = value_enclosing_type (args[i]);
517 int len = TYPE_LENGTH (value_type);
518 int container_len = (len + 3) & ~3;
521 /* Non-scalars bigger than 4 bytes are left aligned, others are
523 if ((TYPE_CODE (value_type) == TYPE_CODE_STRUCT
524 || TYPE_CODE (value_type) == TYPE_CODE_UNION
525 || TYPE_CODE (value_type) == TYPE_CODE_ARRAY)
529 offset = container_len - len;
531 write_memory (sp + offset, value_contents_all (args[i]), len);
534 /* Store struct value address. */
537 store_unsigned_integer (buf, 4, byte_order, struct_addr);
538 regcache_cooked_write (regcache, tdep->struct_value_regnum, buf);
541 /* Store return address. */
543 store_unsigned_integer (buf, 4, byte_order, bp_addr);
544 write_memory (sp, buf, 4);
546 /* Finally, update the stack pointer... */
547 store_unsigned_integer (buf, 4, byte_order, sp);
548 regcache_cooked_write (regcache, M68K_SP_REGNUM, buf);
550 /* ...and fake a frame pointer. */
551 regcache_cooked_write (regcache, M68K_FP_REGNUM, buf);
553 /* DWARF2/GCC uses the stack address *before* the function call as a
558 /* Convert a dwarf or dwarf2 regnumber to a GDB regnum. */
561 m68k_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num)
565 return (num - 0) + M68K_D0_REGNUM;
568 return (num - 8) + M68K_A0_REGNUM;
569 else if (num < 24 && gdbarch_tdep (gdbarch)->fpregs_present)
571 return (num - 16) + M68K_FP0_REGNUM;
574 return M68K_PC_REGNUM;
576 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
580 struct m68k_frame_cache
587 /* Saved registers. */
588 CORE_ADDR saved_regs[M68K_NUM_REGS];
591 /* Stack space reserved for local variables. */
595 /* Allocate and initialize a frame cache. */
597 static struct m68k_frame_cache *
598 m68k_alloc_frame_cache (void)
600 struct m68k_frame_cache *cache;
603 cache = FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache);
607 cache->sp_offset = -4;
610 /* Saved registers. We initialize these to -1 since zero is a valid
611 offset (that's where %fp is supposed to be stored). */
612 for (i = 0; i < M68K_NUM_REGS; i++)
613 cache->saved_regs[i] = -1;
615 /* Frameless until proven otherwise. */
621 /* Check whether PC points at a code that sets up a new stack frame.
622 If so, it updates CACHE and returns the address of the first
623 instruction after the sequence that sets removes the "hidden"
624 argument from the stack or CURRENT_PC, whichever is smaller.
625 Otherwise, return PC. */
628 m68k_analyze_frame_setup (struct gdbarch *gdbarch,
629 CORE_ADDR pc, CORE_ADDR current_pc,
630 struct m68k_frame_cache *cache)
632 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
635 if (pc >= current_pc)
638 op = read_memory_unsigned_integer (pc, 2, byte_order);
640 if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP)
642 cache->saved_regs[M68K_FP_REGNUM] = 0;
643 cache->sp_offset += 4;
644 if (op == P_LINKW_FP)
646 /* link.w %fp, #-N */
647 /* link.w %fp, #0; adda.l #-N, %sp */
648 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
650 if (pc + 4 < current_pc && cache->locals == 0)
652 op = read_memory_unsigned_integer (pc + 4, 2, byte_order);
653 if (op == P_ADDAL_SP)
655 cache->locals = read_memory_integer (pc + 6, 4, byte_order);
662 else if (op == P_LINKL_FP)
664 /* link.l %fp, #-N */
665 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
670 /* pea (%fp); movea.l %sp, %fp */
673 if (pc + 2 < current_pc)
675 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
677 if (op == P_MOVEAL_SP_FP)
679 /* move.l %sp, %fp */
687 else if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
689 /* subq.[wl] #N,%sp */
690 /* subq.[wl] #8,%sp; subq.[wl] #N,%sp */
691 cache->locals = (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
692 if (pc + 2 < current_pc)
694 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
695 if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
697 cache->locals += (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
703 else if (op == P_ADDAW_SP || op == P_LEA_SP_SP)
706 /* lea (-N,%sp),%sp */
707 cache->locals = -read_memory_integer (pc + 2, 2, byte_order);
710 else if (op == P_ADDAL_SP)
713 cache->locals = -read_memory_integer (pc + 2, 4, byte_order);
720 /* Check whether PC points at code that saves registers on the stack.
721 If so, it updates CACHE and returns the address of the first
722 instruction after the register saves or CURRENT_PC, whichever is
723 smaller. Otherwise, return PC. */
726 m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc,
727 CORE_ADDR current_pc,
728 struct m68k_frame_cache *cache)
730 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
732 if (cache->locals >= 0)
738 offset = -4 - cache->locals;
739 while (pc < current_pc)
741 op = read_memory_unsigned_integer (pc, 2, byte_order);
742 if (op == P_FMOVEMX_SP
743 && gdbarch_tdep (gdbarch)->fpregs_present)
745 /* fmovem.x REGS,-(%sp) */
746 op = read_memory_unsigned_integer (pc + 2, 2, byte_order);
747 if ((op & 0xff00) == 0xe000)
750 for (i = 0; i < 16; i++, mask >>= 1)
754 cache->saved_regs[i + M68K_FP0_REGNUM] = offset;
763 else if ((op & 0177760) == P_MOVEL_SP)
765 /* move.l %R,-(%sp) */
767 cache->saved_regs[regno] = offset;
771 else if (op == P_MOVEML_SP)
773 /* movem.l REGS,-(%sp) */
774 mask = read_memory_unsigned_integer (pc + 2, 2, byte_order);
775 for (i = 0; i < 16; i++, mask >>= 1)
779 cache->saved_regs[15 - i] = offset;
794 /* Do a full analysis of the prologue at PC and update CACHE
795 accordingly. Bail out early if CURRENT_PC is reached. Return the
796 address where the analysis stopped.
798 We handle all cases that can be generated by gcc.
800 For allocating a stack frame:
804 pea (%fp); move.l %sp,%fp
805 link.w %a6,#0; add.l #-N,%sp
808 subq.w #8,%sp; subq.w #N-8,%sp
813 For saving registers:
817 move.l R1,-(%sp); move.l R2,-(%sp)
820 For setting up the PIC register:
827 m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
828 CORE_ADDR current_pc, struct m68k_frame_cache *cache)
830 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
833 pc = m68k_analyze_frame_setup (gdbarch, pc, current_pc, cache);
834 pc = m68k_analyze_register_saves (gdbarch, pc, current_pc, cache);
835 if (pc >= current_pc)
838 /* Check for GOT setup. */
839 op = read_memory_unsigned_integer (pc, 4, byte_order);
840 if (op == P_LEA_PC_A5)
842 /* lea (%pc,N),%a5 */
849 /* Return PC of first real instruction. */
852 m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
854 struct m68k_frame_cache cache;
858 pc = m68k_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache);
859 if (cache.locals < 0)
865 m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
869 frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
870 return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
875 static struct m68k_frame_cache *
876 m68k_frame_cache (struct frame_info *this_frame, void **this_cache)
878 struct gdbarch *gdbarch = get_frame_arch (this_frame);
879 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
880 struct m68k_frame_cache *cache;
887 cache = m68k_alloc_frame_cache ();
890 /* In principle, for normal frames, %fp holds the frame pointer,
891 which holds the base address for the current stack frame.
892 However, for functions that don't need it, the frame pointer is
893 optional. For these "frameless" functions the frame pointer is
894 actually the frame pointer of the calling frame. Signal
895 trampolines are just a special case of a "frameless" function.
896 They (usually) share their frame pointer with the frame that was
897 in progress when the signal occurred. */
899 get_frame_register (this_frame, M68K_FP_REGNUM, buf);
900 cache->base = extract_unsigned_integer (buf, 4, byte_order);
901 if (cache->base == 0)
904 /* For normal frames, %pc is stored at 4(%fp). */
905 cache->saved_regs[M68K_PC_REGNUM] = 4;
907 cache->pc = get_frame_func (this_frame);
909 m68k_analyze_prologue (get_frame_arch (this_frame), cache->pc,
910 get_frame_pc (this_frame), cache);
912 if (cache->locals < 0)
914 /* We didn't find a valid frame, which means that CACHE->base
915 currently holds the frame pointer for our calling frame. If
916 we're at the start of a function, or somewhere half-way its
917 prologue, the function's frame probably hasn't been fully
918 setup yet. Try to reconstruct the base address for the stack
919 frame by looking at the stack pointer. For truly "frameless"
920 functions this might work too. */
922 get_frame_register (this_frame, M68K_SP_REGNUM, buf);
923 cache->base = extract_unsigned_integer (buf, 4, byte_order)
927 /* Now that we have the base address for the stack frame we can
928 calculate the value of %sp in the calling frame. */
929 cache->saved_sp = cache->base + 8;
931 /* Adjust all the saved registers such that they contain addresses
932 instead of offsets. */
933 for (i = 0; i < M68K_NUM_REGS; i++)
934 if (cache->saved_regs[i] != -1)
935 cache->saved_regs[i] += cache->base;
941 m68k_frame_this_id (struct frame_info *this_frame, void **this_cache,
942 struct frame_id *this_id)
944 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
946 /* This marks the outermost frame. */
947 if (cache->base == 0)
950 /* See the end of m68k_push_dummy_call. */
951 *this_id = frame_id_build (cache->base + 8, cache->pc);
954 static struct value *
955 m68k_frame_prev_register (struct frame_info *this_frame, void **this_cache,
958 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
960 gdb_assert (regnum >= 0);
962 if (regnum == M68K_SP_REGNUM && cache->saved_sp)
963 return frame_unwind_got_constant (this_frame, regnum, cache->saved_sp);
965 if (regnum < M68K_NUM_REGS && cache->saved_regs[regnum] != -1)
966 return frame_unwind_got_memory (this_frame, regnum,
967 cache->saved_regs[regnum]);
969 return frame_unwind_got_register (this_frame, regnum, regnum);
972 static const struct frame_unwind m68k_frame_unwind =
975 default_frame_unwind_stop_reason,
977 m68k_frame_prev_register,
979 default_frame_sniffer
983 m68k_frame_base_address (struct frame_info *this_frame, void **this_cache)
985 struct m68k_frame_cache *cache = m68k_frame_cache (this_frame, this_cache);
990 static const struct frame_base m68k_frame_base =
993 m68k_frame_base_address,
994 m68k_frame_base_address,
995 m68k_frame_base_address
998 static struct frame_id
999 m68k_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1003 fp = get_frame_register_unsigned (this_frame, M68K_FP_REGNUM);
1005 /* See the end of m68k_push_dummy_call. */
1006 return frame_id_build (fp + 8, get_frame_pc (this_frame));
1010 /* Figure out where the longjmp will land. Slurp the args out of the stack.
1011 We expect the first arg to be a pointer to the jmp_buf structure from which
1012 we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
1013 This routine returns true on success. */
1016 m68k_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
1019 CORE_ADDR sp, jb_addr;
1020 struct gdbarch *gdbarch = get_frame_arch (frame);
1021 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1022 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1024 if (tdep->jb_pc < 0)
1026 internal_error (__FILE__, __LINE__,
1027 _("m68k_get_longjmp_target: not implemented"));
1031 buf = alloca (gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
1032 sp = get_frame_register_unsigned (frame, gdbarch_sp_regnum (gdbarch));
1034 if (target_read_memory (sp + SP_ARG0, /* Offset of first arg on stack. */
1035 buf, gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT))
1038 jb_addr = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
1039 / TARGET_CHAR_BIT, byte_order);
1041 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
1042 gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT),
1046 *pc = extract_unsigned_integer (buf, gdbarch_ptr_bit (gdbarch)
1047 / TARGET_CHAR_BIT, byte_order);
1052 /* This is the implementation of gdbarch method
1053 return_in_first_hidden_param_p. */
1056 m68k_return_in_first_hidden_param_p (struct gdbarch *gdbarch,
1062 /* System V Release 4 (SVR4). */
1065 m68k_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1067 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1069 /* SVR4 uses a different calling convention. */
1070 set_gdbarch_return_value (gdbarch, m68k_svr4_return_value);
1072 /* SVR4 uses %a0 instead of %a1. */
1073 tdep->struct_value_regnum = M68K_A0_REGNUM;
1077 /* Function: m68k_gdbarch_init
1078 Initializer function for the m68k gdbarch vector.
1079 Called by gdbarch. Sets up the gdbarch vector(s) for this target. */
1081 static struct gdbarch *
1082 m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1084 struct gdbarch_tdep *tdep = NULL;
1085 struct gdbarch *gdbarch;
1086 struct gdbarch_list *best_arch;
1087 struct tdesc_arch_data *tdesc_data = NULL;
1089 enum m68k_flavour flavour = m68k_no_flavour;
1091 const struct floatformat **long_double_format = floatformats_m68881_ext;
1093 /* Check any target description for validity. */
1094 if (tdesc_has_registers (info.target_desc))
1096 const struct tdesc_feature *feature;
1099 feature = tdesc_find_feature (info.target_desc,
1100 "org.gnu.gdb.m68k.core");
1102 if (feature == NULL)
1104 feature = tdesc_find_feature (info.target_desc,
1105 "org.gnu.gdb.coldfire.core");
1106 if (feature != NULL)
1107 flavour = m68k_coldfire_flavour;
1110 if (feature == NULL)
1112 feature = tdesc_find_feature (info.target_desc,
1113 "org.gnu.gdb.fido.core");
1114 if (feature != NULL)
1115 flavour = m68k_fido_flavour;
1118 if (feature == NULL)
1121 tdesc_data = tdesc_data_alloc ();
1124 for (i = 0; i <= M68K_PC_REGNUM; i++)
1125 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1126 m68k_register_names[i]);
1130 tdesc_data_cleanup (tdesc_data);
1134 feature = tdesc_find_feature (info.target_desc,
1135 "org.gnu.gdb.coldfire.fp");
1136 if (feature != NULL)
1139 for (i = M68K_FP0_REGNUM; i <= M68K_FPI_REGNUM; i++)
1140 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1141 m68k_register_names[i]);
1144 tdesc_data_cleanup (tdesc_data);
1152 /* The mechanism for returning floating values from function
1153 and the type of long double depend on whether we're
1154 on ColdFire or standard m68k. */
1156 if (info.bfd_arch_info && info.bfd_arch_info->mach != 0)
1158 const bfd_arch_info_type *coldfire_arch =
1159 bfd_lookup_arch (bfd_arch_m68k, bfd_mach_mcf_isa_a_nodiv);
1162 && ((*info.bfd_arch_info->compatible)
1163 (info.bfd_arch_info, coldfire_arch)))
1164 flavour = m68k_coldfire_flavour;
1167 /* If there is already a candidate, use it. */
1168 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
1170 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
1172 if (flavour != gdbarch_tdep (best_arch->gdbarch)->flavour)
1175 if (has_fp != gdbarch_tdep (best_arch->gdbarch)->fpregs_present)
1181 if (best_arch != NULL)
1183 if (tdesc_data != NULL)
1184 tdesc_data_cleanup (tdesc_data);
1185 return best_arch->gdbarch;
1188 tdep = xzalloc (sizeof (struct gdbarch_tdep));
1189 gdbarch = gdbarch_alloc (&info, tdep);
1190 tdep->fpregs_present = has_fp;
1191 tdep->flavour = flavour;
1193 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1194 long_double_format = floatformats_ieee_double;
1195 set_gdbarch_long_double_format (gdbarch, long_double_format);
1196 set_gdbarch_long_double_bit (gdbarch, long_double_format[0]->totalsize);
1198 set_gdbarch_skip_prologue (gdbarch, m68k_skip_prologue);
1199 set_gdbarch_breakpoint_from_pc (gdbarch, m68k_local_breakpoint_from_pc);
1201 /* Stack grows down. */
1202 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1203 set_gdbarch_frame_align (gdbarch, m68k_frame_align);
1205 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
1206 if (flavour == m68k_coldfire_flavour || flavour == m68k_fido_flavour)
1207 set_gdbarch_decr_pc_after_break (gdbarch, 2);
1209 set_gdbarch_frame_args_skip (gdbarch, 8);
1210 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, m68k_dwarf_reg_to_regnum);
1212 set_gdbarch_register_type (gdbarch, m68k_register_type);
1213 set_gdbarch_register_name (gdbarch, m68k_register_name);
1214 set_gdbarch_num_regs (gdbarch, M68K_NUM_REGS);
1215 set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM);
1216 set_gdbarch_pc_regnum (gdbarch, M68K_PC_REGNUM);
1217 set_gdbarch_ps_regnum (gdbarch, M68K_PS_REGNUM);
1218 set_gdbarch_convert_register_p (gdbarch, m68k_convert_register_p);
1219 set_gdbarch_register_to_value (gdbarch, m68k_register_to_value);
1220 set_gdbarch_value_to_register (gdbarch, m68k_value_to_register);
1223 set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
1225 /* Try to figure out if the arch uses floating registers to return
1226 floating point values from functions. */
1229 /* On ColdFire, floating point values are returned in D0. */
1230 if (flavour == m68k_coldfire_flavour)
1231 tdep->float_return = 0;
1233 tdep->float_return = 1;
1237 /* No floating registers, so can't use them for returning values. */
1238 tdep->float_return = 0;
1241 /* Function call & return. */
1242 set_gdbarch_push_dummy_call (gdbarch, m68k_push_dummy_call);
1243 set_gdbarch_return_value (gdbarch, m68k_return_value);
1244 set_gdbarch_return_in_first_hidden_param_p (gdbarch,
1245 m68k_return_in_first_hidden_param_p);
1249 set_gdbarch_print_insn (gdbarch, print_insn_m68k);
1251 #if defined JB_PC && defined JB_ELEMENT_SIZE
1252 tdep->jb_pc = JB_PC;
1253 tdep->jb_elt_size = JB_ELEMENT_SIZE;
1257 tdep->struct_value_regnum = M68K_A1_REGNUM;
1258 tdep->struct_return = reg_struct_return;
1260 /* Frame unwinder. */
1261 set_gdbarch_dummy_id (gdbarch, m68k_dummy_id);
1262 set_gdbarch_unwind_pc (gdbarch, m68k_unwind_pc);
1264 /* Hook in the DWARF CFI frame unwinder. */
1265 dwarf2_append_unwinders (gdbarch);
1267 frame_base_set_default (gdbarch, &m68k_frame_base);
1269 /* Hook in ABI-specific overrides, if they have been registered. */
1270 gdbarch_init_osabi (info, gdbarch);
1272 /* Now we have tuned the configuration, set a few final things,
1273 based on what the OS ABI has told us. */
1275 if (tdep->jb_pc >= 0)
1276 set_gdbarch_get_longjmp_target (gdbarch, m68k_get_longjmp_target);
1278 frame_unwind_append_unwinder (gdbarch, &m68k_frame_unwind);
1281 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
1288 m68k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
1290 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1296 extern initialize_file_ftype _initialize_m68k_tdep; /* -Wmissing-prototypes */
1299 _initialize_m68k_tdep (void)
1301 gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep);