1 /* Target-dependent code for the Motorola 68000 series.
3 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000,
4 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
24 #include "dwarf2-frame.h"
26 #include "frame-base.h"
27 #include "frame-unwind.h"
28 #include "floatformat.h"
32 #include "gdb_string.h"
33 #include "gdb_assert.h"
36 #include "arch-utils.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
58 #define REGISTER_BYTES_FP (16*4 + 8 + 8*12 + 3*4)
59 #define REGISTER_BYTES_NOFP (16*4 + 8)
61 /* Offset from SP to first arg on stack at first instruction of a function */
62 #define SP_ARG0 (1 * 4)
64 #if !defined (BPT_VECTOR)
65 #define BPT_VECTOR 0xf
68 static const gdb_byte *
69 m68k_local_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
71 static gdb_byte break_insn[] = {0x4e, (0x40 | BPT_VECTOR)};
72 *lenptr = sizeof (break_insn);
78 m68k_register_bytes_ok (long numbytes)
80 return ((numbytes == REGISTER_BYTES_FP)
81 || (numbytes == REGISTER_BYTES_NOFP));
84 /* Return the GDB type object for the "standard" data type of data in
85 register N. This should be int for D0-D7, SR, FPCONTROL and
86 FPSTATUS, long double for FP0-FP7, and void pointer for all others
87 (A0-A7, PC, FPIADDR). Note, for registers which contain
88 addresses return pointer to void, not pointer to char, because we
89 don't want to attempt to print the string after printing the
93 m68k_register_type (struct gdbarch *gdbarch, int regnum)
95 if (regnum >= FP0_REGNUM && regnum <= FP0_REGNUM + 7)
96 return builtin_type_m68881_ext;
98 if (regnum == M68K_FPI_REGNUM || regnum == PC_REGNUM)
99 return builtin_type_void_func_ptr;
101 if (regnum == M68K_FPC_REGNUM || regnum == M68K_FPS_REGNUM
102 || regnum == PS_REGNUM)
103 return builtin_type_int32;
105 if (regnum >= M68K_A0_REGNUM && regnum <= M68K_A0_REGNUM + 7)
106 return builtin_type_void_data_ptr;
108 return builtin_type_int32;
111 /* Function: m68k_register_name
112 Returns the name of the standard m68k register regnum. */
115 m68k_register_name (int regnum)
117 static char *register_names[] = {
118 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
119 "a0", "a1", "a2", "a3", "a4", "a5", "fp", "sp",
121 "fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7",
122 "fpcontrol", "fpstatus", "fpiaddr", "fpcode", "fpflags"
126 regnum >= sizeof (register_names) / sizeof (register_names[0]))
127 internal_error (__FILE__, __LINE__,
128 _("m68k_register_name: illegal register number %d"), regnum);
130 return register_names[regnum];
133 /* Return nonzero if a value of type TYPE stored in register REGNUM
134 needs any special handling. */
137 m68k_convert_register_p (int regnum, struct type *type)
139 return (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FP0_REGNUM + 7);
142 /* Read a value of type TYPE from register REGNUM in frame FRAME, and
143 return its contents in TO. */
146 m68k_register_to_value (struct frame_info *frame, int regnum,
147 struct type *type, gdb_byte *to)
149 gdb_byte from[M68K_MAX_REGISTER_SIZE];
151 /* We only support floating-point values. */
152 if (TYPE_CODE (type) != TYPE_CODE_FLT)
154 warning (_("Cannot convert floating-point register value "
155 "to non-floating-point type."));
159 /* Convert to TYPE. This should be a no-op if TYPE is equivalent to
160 the extended floating-point format used by the FPU. */
161 get_frame_register (frame, regnum, from);
162 convert_typed_floating (from, builtin_type_m68881_ext, to, type);
165 /* Write the contents FROM of a value of type TYPE into register
166 REGNUM in frame FRAME. */
169 m68k_value_to_register (struct frame_info *frame, int regnum,
170 struct type *type, const gdb_byte *from)
172 gdb_byte to[M68K_MAX_REGISTER_SIZE];
174 /* We only support floating-point values. */
175 if (TYPE_CODE (type) != TYPE_CODE_FLT)
177 warning (_("Cannot convert non-floating-point type "
178 "to floating-point register value."));
182 /* Convert from TYPE. This should be a no-op if TYPE is equivalent
183 to the extended floating-point format used by the FPU. */
184 convert_typed_floating (from, type, to, builtin_type_m68881_ext);
185 put_frame_register (frame, regnum, to);
189 /* There is a fair number of calling conventions that are in somewhat
190 wide use. The 68000/08/10 don't support an FPU, not even as a
191 coprocessor. All function return values are stored in %d0/%d1.
192 Structures are returned in a static buffer, a pointer to which is
193 returned in %d0. This means that functions returning a structure
194 are not re-entrant. To avoid this problem some systems use a
195 convention where the caller passes a pointer to a buffer in %a1
196 where the return values is to be stored. This convention is the
197 default, and is implemented in the function m68k_return_value.
199 The 68020/030/040/060 do support an FPU, either as a coprocessor
200 (68881/2) or built-in (68040/68060). That's why System V release 4
201 (SVR4) instroduces a new calling convention specified by the SVR4
202 psABI. Integer values are returned in %d0/%d1, pointer return
203 values in %a0 and floating values in %fp0. When calling functions
204 returning a structure the caller should pass a pointer to a buffer
205 for the return value in %a0. This convention is implemented in the
206 function m68k_svr4_return_value, and by appropriately setting the
207 struct_value_regnum member of `struct gdbarch_tdep'.
209 GNU/Linux returns values in the same way as SVR4 does, but uses %a1
210 for passing the structure return value buffer.
212 GCC can also generate code where small structures are returned in
213 %d0/%d1 instead of in memory by using -freg-struct-return. This is
214 the default on NetBSD a.out, OpenBSD and GNU/Linux and several
215 embedded systems. This convention is implemented by setting the
216 struct_return member of `struct gdbarch_tdep' to reg_struct_return. */
218 /* Read a function return value of TYPE from REGCACHE, and copy that
222 m68k_extract_return_value (struct type *type, struct regcache *regcache,
225 int len = TYPE_LENGTH (type);
226 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
230 regcache_raw_read (regcache, M68K_D0_REGNUM, buf);
231 memcpy (valbuf, buf + (4 - len), len);
235 regcache_raw_read (regcache, M68K_D0_REGNUM, buf);
236 memcpy (valbuf, buf + (8 - len), len - 4);
237 regcache_raw_read (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
240 internal_error (__FILE__, __LINE__,
241 _("Cannot extract return value of %d bytes long."), len);
245 m68k_svr4_extract_return_value (struct type *type, struct regcache *regcache,
248 int len = TYPE_LENGTH (type);
249 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
251 if (TYPE_CODE (type) == TYPE_CODE_FLT)
253 regcache_raw_read (regcache, M68K_FP0_REGNUM, buf);
254 convert_typed_floating (buf, builtin_type_m68881_ext, valbuf, type);
256 else if (TYPE_CODE (type) == TYPE_CODE_PTR && len == 4)
257 regcache_raw_read (regcache, M68K_A0_REGNUM, valbuf);
259 m68k_extract_return_value (type, regcache, valbuf);
262 /* Write a function return value of TYPE from VALBUF into REGCACHE. */
265 m68k_store_return_value (struct type *type, struct regcache *regcache,
266 const gdb_byte *valbuf)
268 int len = TYPE_LENGTH (type);
271 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 4 - len, len, valbuf);
274 regcache_raw_write_part (regcache, M68K_D0_REGNUM, 8 - len,
276 regcache_raw_write (regcache, M68K_D1_REGNUM, valbuf + (len - 4));
279 internal_error (__FILE__, __LINE__,
280 _("Cannot store return value of %d bytes long."), len);
284 m68k_svr4_store_return_value (struct type *type, struct regcache *regcache,
285 const gdb_byte *valbuf)
287 int len = TYPE_LENGTH (type);
289 if (TYPE_CODE (type) == TYPE_CODE_FLT)
291 gdb_byte buf[M68K_MAX_REGISTER_SIZE];
292 convert_typed_floating (valbuf, type, buf, builtin_type_m68881_ext);
293 regcache_raw_write (regcache, M68K_FP0_REGNUM, buf);
295 else if (TYPE_CODE (type) == TYPE_CODE_PTR && len == 4)
297 regcache_raw_write (regcache, M68K_A0_REGNUM, valbuf);
298 regcache_raw_write (regcache, M68K_D0_REGNUM, valbuf);
301 m68k_store_return_value (type, regcache, valbuf);
304 /* Return non-zero if TYPE, which is assumed to be a structure or
305 union type, should be returned in registers for architecture
309 m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type)
311 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
312 enum type_code code = TYPE_CODE (type);
313 int len = TYPE_LENGTH (type);
315 gdb_assert (code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION);
317 if (tdep->struct_return == pcc_struct_return)
320 return (len == 1 || len == 2 || len == 4 || len == 8);
323 /* Determine, for architecture GDBARCH, how a return value of TYPE
324 should be returned. If it is supposed to be returned in registers,
325 and READBUF is non-zero, read the appropriate value from REGCACHE,
326 and copy it into READBUF. If WRITEBUF is non-zero, write the value
327 from WRITEBUF into REGCACHE. */
329 static enum return_value_convention
330 m68k_return_value (struct gdbarch *gdbarch, struct type *type,
331 struct regcache *regcache, gdb_byte *readbuf,
332 const gdb_byte *writebuf)
334 enum type_code code = TYPE_CODE (type);
336 /* GCC returns a `long double' in memory too. */
337 if (((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
338 && !m68k_reg_struct_return_p (gdbarch, type))
339 || (code == TYPE_CODE_FLT && TYPE_LENGTH (type) == 12))
341 /* The default on m68k is to return structures in static memory.
342 Consequently a function must return the address where we can
343 find the return value. */
349 regcache_raw_read_unsigned (regcache, M68K_D0_REGNUM, &addr);
350 read_memory (addr, readbuf, TYPE_LENGTH (type));
353 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
357 m68k_extract_return_value (type, regcache, readbuf);
359 m68k_store_return_value (type, regcache, writebuf);
361 return RETURN_VALUE_REGISTER_CONVENTION;
364 static enum return_value_convention
365 m68k_svr4_return_value (struct gdbarch *gdbarch, struct type *type,
366 struct regcache *regcache, gdb_byte *readbuf,
367 const gdb_byte *writebuf)
369 enum type_code code = TYPE_CODE (type);
371 if ((code == TYPE_CODE_STRUCT || code == TYPE_CODE_UNION)
372 && !m68k_reg_struct_return_p (gdbarch, type))
374 /* The System V ABI says that:
376 "A function returning a structure or union also sets %a0 to
377 the value it finds in %a0. Thus when the caller receives
378 control again, the address of the returned object resides in
381 So the ABI guarantees that we can always find the return
382 value just after the function has returned. */
388 regcache_raw_read_unsigned (regcache, M68K_A0_REGNUM, &addr);
389 read_memory (addr, readbuf, TYPE_LENGTH (type));
392 return RETURN_VALUE_ABI_RETURNS_ADDRESS;
395 /* This special case is for structures consisting of a single
396 `float' or `double' member. These structures are returned in
397 %fp0. For these structures, we call ourselves recursively,
398 changing TYPE into the type of the first member of the structure.
399 Since that should work for all structures that have only one
400 member, we don't bother to check the member's type here. */
401 if (code == TYPE_CODE_STRUCT && TYPE_NFIELDS (type) == 1)
403 type = check_typedef (TYPE_FIELD_TYPE (type, 0));
404 return m68k_svr4_return_value (gdbarch, type, regcache,
409 m68k_svr4_extract_return_value (type, regcache, readbuf);
411 m68k_svr4_store_return_value (type, regcache, writebuf);
413 return RETURN_VALUE_REGISTER_CONVENTION;
418 m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
419 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
420 struct value **args, CORE_ADDR sp, int struct_return,
421 CORE_ADDR struct_addr)
423 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
427 /* Push arguments in reverse order. */
428 for (i = nargs - 1; i >= 0; i--)
430 struct type *value_type = value_enclosing_type (args[i]);
431 int len = TYPE_LENGTH (value_type);
432 int container_len = (len + 3) & ~3;
435 /* Non-scalars bigger than 4 bytes are left aligned, others are
437 if ((TYPE_CODE (value_type) == TYPE_CODE_STRUCT
438 || TYPE_CODE (value_type) == TYPE_CODE_UNION
439 || TYPE_CODE (value_type) == TYPE_CODE_ARRAY)
443 offset = container_len - len;
445 write_memory (sp + offset, value_contents_all (args[i]), len);
448 /* Store struct value address. */
451 store_unsigned_integer (buf, 4, struct_addr);
452 regcache_cooked_write (regcache, tdep->struct_value_regnum, buf);
455 /* Store return address. */
457 store_unsigned_integer (buf, 4, bp_addr);
458 write_memory (sp, buf, 4);
460 /* Finally, update the stack pointer... */
461 store_unsigned_integer (buf, 4, sp);
462 regcache_cooked_write (regcache, M68K_SP_REGNUM, buf);
464 /* ...and fake a frame pointer. */
465 regcache_cooked_write (regcache, M68K_FP_REGNUM, buf);
467 /* DWARF2/GCC uses the stack address *before* the function call as a
472 struct m68k_frame_cache
479 /* Saved registers. */
480 CORE_ADDR saved_regs[M68K_NUM_REGS];
483 /* Stack space reserved for local variables. */
487 /* Allocate and initialize a frame cache. */
489 static struct m68k_frame_cache *
490 m68k_alloc_frame_cache (void)
492 struct m68k_frame_cache *cache;
495 cache = FRAME_OBSTACK_ZALLOC (struct m68k_frame_cache);
499 cache->sp_offset = -4;
502 /* Saved registers. We initialize these to -1 since zero is a valid
503 offset (that's where %fp is supposed to be stored). */
504 for (i = 0; i < M68K_NUM_REGS; i++)
505 cache->saved_regs[i] = -1;
507 /* Frameless until proven otherwise. */
513 /* Check whether PC points at a code that sets up a new stack frame.
514 If so, it updates CACHE and returns the address of the first
515 instruction after the sequence that sets removes the "hidden"
516 argument from the stack or CURRENT_PC, whichever is smaller.
517 Otherwise, return PC. */
520 m68k_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc,
521 struct m68k_frame_cache *cache)
525 if (pc >= current_pc)
528 op = read_memory_unsigned_integer (pc, 2);
530 if (op == P_LINKW_FP || op == P_LINKL_FP || op == P_PEA_FP)
532 cache->saved_regs[M68K_FP_REGNUM] = 0;
533 cache->sp_offset += 4;
534 if (op == P_LINKW_FP)
536 /* link.w %fp, #-N */
537 /* link.w %fp, #0; adda.l #-N, %sp */
538 cache->locals = -read_memory_integer (pc + 2, 2);
540 if (pc + 4 < current_pc && cache->locals == 0)
542 op = read_memory_unsigned_integer (pc + 4, 2);
543 if (op == P_ADDAL_SP)
545 cache->locals = read_memory_integer (pc + 6, 4);
552 else if (op == P_LINKL_FP)
554 /* link.l %fp, #-N */
555 cache->locals = -read_memory_integer (pc + 2, 4);
560 /* pea (%fp); movea.l %sp, %fp */
563 if (pc + 2 < current_pc)
565 op = read_memory_unsigned_integer (pc + 2, 2);
567 if (op == P_MOVEAL_SP_FP)
569 /* move.l %sp, %fp */
577 else if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
579 /* subq.[wl] #N,%sp */
580 /* subq.[wl] #8,%sp; subq.[wl] #N,%sp */
581 cache->locals = (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
582 if (pc + 2 < current_pc)
584 op = read_memory_unsigned_integer (pc + 2, 2);
585 if ((op & 0170777) == P_SUBQW_SP || (op & 0170777) == P_SUBQL_SP)
587 cache->locals += (op & 07000) == 0 ? 8 : (op & 07000) >> 9;
593 else if (op == P_ADDAW_SP || op == P_LEA_SP_SP)
596 /* lea (-N,%sp),%sp */
597 cache->locals = -read_memory_integer (pc + 2, 2);
600 else if (op == P_ADDAL_SP)
603 cache->locals = -read_memory_integer (pc + 2, 4);
610 /* Check whether PC points at code that saves registers on the stack.
611 If so, it updates CACHE and returns the address of the first
612 instruction after the register saves or CURRENT_PC, whichever is
613 smaller. Otherwise, return PC. */
616 m68k_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc,
617 struct m68k_frame_cache *cache)
619 if (cache->locals >= 0)
625 offset = -4 - cache->locals;
626 while (pc < current_pc)
628 op = read_memory_unsigned_integer (pc, 2);
629 if (op == P_FMOVEMX_SP)
631 /* fmovem.x REGS,-(%sp) */
632 op = read_memory_unsigned_integer (pc + 2, 2);
633 if ((op & 0xff00) == 0xe000)
636 for (i = 0; i < 16; i++, mask >>= 1)
640 cache->saved_regs[i + M68K_FP0_REGNUM] = offset;
649 else if ((op & 0170677) == P_MOVEL_SP)
651 /* move.l %R,-(%sp) */
652 regno = ((op & 07000) >> 9) | ((op & 0100) >> 3);
653 cache->saved_regs[regno] = offset;
657 else if (op == P_MOVEML_SP)
659 /* movem.l REGS,-(%sp) */
660 mask = read_memory_unsigned_integer (pc + 2, 2);
661 for (i = 0; i < 16; i++, mask >>= 1)
665 cache->saved_regs[15 - i] = offset;
680 /* Do a full analysis of the prologue at PC and update CACHE
681 accordingly. Bail out early if CURRENT_PC is reached. Return the
682 address where the analysis stopped.
684 We handle all cases that can be generated by gcc.
686 For allocating a stack frame:
690 pea (%fp); move.l %sp,%fp
691 link.w %a6,#0; add.l #-N,%sp
694 subq.w #8,%sp; subq.w #N-8,%sp
699 For saving registers:
703 move.l R1,-(%sp); move.l R2,-(%sp)
706 For setting up the PIC register:
713 m68k_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
714 struct m68k_frame_cache *cache)
718 pc = m68k_analyze_frame_setup (pc, current_pc, cache);
719 pc = m68k_analyze_register_saves (pc, current_pc, cache);
720 if (pc >= current_pc)
723 /* Check for GOT setup. */
724 op = read_memory_unsigned_integer (pc, 4);
725 if (op == P_LEA_PC_A5)
727 /* lea (%pc,N),%a5 */
734 /* Return PC of first real instruction. */
737 m68k_skip_prologue (CORE_ADDR start_pc)
739 struct m68k_frame_cache cache;
744 pc = m68k_analyze_prologue (start_pc, (CORE_ADDR) -1, &cache);
745 if (cache.locals < 0)
751 m68k_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
755 frame_unwind_register (next_frame, PC_REGNUM, buf);
756 return extract_typed_address (buf, builtin_type_void_func_ptr);
761 static struct m68k_frame_cache *
762 m68k_frame_cache (struct frame_info *next_frame, void **this_cache)
764 struct m68k_frame_cache *cache;
771 cache = m68k_alloc_frame_cache ();
774 /* In principle, for normal frames, %fp holds the frame pointer,
775 which holds the base address for the current stack frame.
776 However, for functions that don't need it, the frame pointer is
777 optional. For these "frameless" functions the frame pointer is
778 actually the frame pointer of the calling frame. Signal
779 trampolines are just a special case of a "frameless" function.
780 They (usually) share their frame pointer with the frame that was
781 in progress when the signal occurred. */
783 frame_unwind_register (next_frame, M68K_FP_REGNUM, buf);
784 cache->base = extract_unsigned_integer (buf, 4);
785 if (cache->base == 0)
788 /* For normal frames, %pc is stored at 4(%fp). */
789 cache->saved_regs[M68K_PC_REGNUM] = 4;
791 cache->pc = frame_func_unwind (next_frame);
793 m68k_analyze_prologue (cache->pc, frame_pc_unwind (next_frame), cache);
795 if (cache->locals < 0)
797 /* We didn't find a valid frame, which means that CACHE->base
798 currently holds the frame pointer for our calling frame. If
799 we're at the start of a function, or somewhere half-way its
800 prologue, the function's frame probably hasn't been fully
801 setup yet. Try to reconstruct the base address for the stack
802 frame by looking at the stack pointer. For truly "frameless"
803 functions this might work too. */
805 frame_unwind_register (next_frame, M68K_SP_REGNUM, buf);
806 cache->base = extract_unsigned_integer (buf, 4) + cache->sp_offset;
809 /* Now that we have the base address for the stack frame we can
810 calculate the value of %sp in the calling frame. */
811 cache->saved_sp = cache->base + 8;
813 /* Adjust all the saved registers such that they contain addresses
814 instead of offsets. */
815 for (i = 0; i < M68K_NUM_REGS; i++)
816 if (cache->saved_regs[i] != -1)
817 cache->saved_regs[i] += cache->base;
823 m68k_frame_this_id (struct frame_info *next_frame, void **this_cache,
824 struct frame_id *this_id)
826 struct m68k_frame_cache *cache = m68k_frame_cache (next_frame, this_cache);
828 /* This marks the outermost frame. */
829 if (cache->base == 0)
832 /* See the end of m68k_push_dummy_call. */
833 *this_id = frame_id_build (cache->base + 8, cache->pc);
837 m68k_frame_prev_register (struct frame_info *next_frame, void **this_cache,
838 int regnum, int *optimizedp,
839 enum lval_type *lvalp, CORE_ADDR *addrp,
840 int *realnump, gdb_byte *valuep)
842 struct m68k_frame_cache *cache = m68k_frame_cache (next_frame, this_cache);
844 gdb_assert (regnum >= 0);
846 if (regnum == M68K_SP_REGNUM && cache->saved_sp)
854 /* Store the value. */
855 store_unsigned_integer (valuep, 4, cache->saved_sp);
860 if (regnum < M68K_NUM_REGS && cache->saved_regs[regnum] != -1)
863 *lvalp = lval_memory;
864 *addrp = cache->saved_regs[regnum];
868 /* Read the value in from memory. */
869 read_memory (*addrp, valuep,
870 register_size (current_gdbarch, regnum));
876 *lvalp = lval_register;
880 frame_unwind_register (next_frame, (*realnump), valuep);
883 static const struct frame_unwind m68k_frame_unwind =
887 m68k_frame_prev_register
890 static const struct frame_unwind *
891 m68k_frame_sniffer (struct frame_info *next_frame)
893 return &m68k_frame_unwind;
897 m68k_frame_base_address (struct frame_info *next_frame, void **this_cache)
899 struct m68k_frame_cache *cache = m68k_frame_cache (next_frame, this_cache);
904 static const struct frame_base m68k_frame_base =
907 m68k_frame_base_address,
908 m68k_frame_base_address,
909 m68k_frame_base_address
912 static struct frame_id
913 m68k_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
918 frame_unwind_register (next_frame, M68K_FP_REGNUM, buf);
919 fp = extract_unsigned_integer (buf, 4);
921 /* See the end of m68k_push_dummy_call. */
922 return frame_id_build (fp + 8, frame_pc_unwind (next_frame));
925 #ifdef USE_PROC_FS /* Target dependent support for /proc */
927 #include <sys/procfs.h>
929 /* Prototypes for supply_gregset etc. */
932 /* The /proc interface divides the target machine's register set up into
933 two different sets, the general register set (gregset) and the floating
934 point register set (fpregset). For each set, there is an ioctl to get
935 the current register set and another ioctl to set the current values.
937 The actual structure passed through the ioctl interface is, of course,
938 naturally machine dependent, and is different for each set of registers.
939 For the m68k for example, the general register set is typically defined
942 typedef int gregset_t[18];
948 and the floating point set by:
950 typedef struct fpregset {
954 int f_fpregs[8][3]; (8 regs, 96 bits each)
957 These routines provide the packing and unpacking of gregset_t and
958 fpregset_t formatted data.
962 /* Atari SVR4 has R_SR but not R_PS */
964 #if !defined (R_PS) && defined (R_SR)
968 /* Given a pointer to a general register set in /proc format (gregset_t *),
969 unpack the register contents and supply them as gdb's idea of the current
973 supply_gregset (gregset_t *gregsetp)
976 greg_t *regp = (greg_t *) gregsetp;
978 for (regi = 0; regi < R_PC; regi++)
980 regcache_raw_supply (current_regcache, regi, (char *) (regp + regi));
982 regcache_raw_supply (current_regcache, PS_REGNUM, (char *) (regp + R_PS));
983 regcache_raw_supply (current_regcache, PC_REGNUM, (char *) (regp + R_PC));
987 fill_gregset (gregset_t *gregsetp, int regno)
990 greg_t *regp = (greg_t *) gregsetp;
992 for (regi = 0; regi < R_PC; regi++)
994 if (regno == -1 || regno == regi)
995 regcache_raw_collect (current_regcache, regi, regp + regi);
997 if (regno == -1 || regno == PS_REGNUM)
998 regcache_raw_collect (current_regcache, PS_REGNUM, regp + R_PS);
999 if (regno == -1 || regno == PC_REGNUM)
1000 regcache_raw_collect (current_regcache, PC_REGNUM, regp + R_PC);
1003 #if defined (FP0_REGNUM)
1005 /* Given a pointer to a floating point register set in /proc format
1006 (fpregset_t *), unpack the register contents and supply them as gdb's
1007 idea of the current floating point register values. */
1010 supply_fpregset (fpregset_t *fpregsetp)
1015 for (regi = FP0_REGNUM; regi < M68K_FPC_REGNUM; regi++)
1017 from = (char *) &(fpregsetp->f_fpregs[regi - FP0_REGNUM][0]);
1018 regcache_raw_supply (current_regcache, regi, from);
1020 regcache_raw_supply (current_regcache, M68K_FPC_REGNUM,
1021 (char *) &(fpregsetp->f_pcr));
1022 regcache_raw_supply (current_regcache, M68K_FPS_REGNUM,
1023 (char *) &(fpregsetp->f_psr));
1024 regcache_raw_supply (current_regcache, M68K_FPI_REGNUM,
1025 (char *) &(fpregsetp->f_fpiaddr));
1028 /* Given a pointer to a floating point register set in /proc format
1029 (fpregset_t *), update the register specified by REGNO from gdb's idea
1030 of the current floating point register set. If REGNO is -1, update
1034 fill_fpregset (fpregset_t *fpregsetp, int regno)
1038 for (regi = FP0_REGNUM; regi < M68K_FPC_REGNUM; regi++)
1040 if (regno == -1 || regno == regi)
1041 regcache_raw_collect (current_regcache, regi,
1042 &fpregsetp->f_fpregs[regi - FP0_REGNUM][0]);
1044 if (regno == -1 || regno == M68K_FPC_REGNUM)
1045 regcache_raw_collect (current_regcache, M68K_FPC_REGNUM,
1047 if (regno == -1 || regno == M68K_FPS_REGNUM)
1048 regcache_raw_collect (current_regcache, M68K_FPS_REGNUM,
1050 if (regno == -1 || regno == M68K_FPI_REGNUM)
1051 regcache_raw_collect (current_regcache, M68K_FPI_REGNUM,
1052 &fpregsetp->f_fpiaddr);
1055 #endif /* defined (FP0_REGNUM) */
1057 #endif /* USE_PROC_FS */
1059 /* Figure out where the longjmp will land. Slurp the args out of the stack.
1060 We expect the first arg to be a pointer to the jmp_buf structure from which
1061 we extract the pc (JB_PC) that we will land at. The pc is copied into PC.
1062 This routine returns true on success. */
1065 m68k_get_longjmp_target (CORE_ADDR *pc)
1068 CORE_ADDR sp, jb_addr;
1069 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1071 if (tdep->jb_pc < 0)
1073 internal_error (__FILE__, __LINE__,
1074 _("m68k_get_longjmp_target: not implemented"));
1078 buf = alloca (TARGET_PTR_BIT / TARGET_CHAR_BIT);
1079 sp = read_register (SP_REGNUM);
1081 if (target_read_memory (sp + SP_ARG0, /* Offset of first arg on stack */
1082 buf, TARGET_PTR_BIT / TARGET_CHAR_BIT))
1085 jb_addr = extract_unsigned_integer (buf, TARGET_PTR_BIT / TARGET_CHAR_BIT);
1087 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
1088 TARGET_PTR_BIT / TARGET_CHAR_BIT))
1091 *pc = extract_unsigned_integer (buf, TARGET_PTR_BIT / TARGET_CHAR_BIT);
1096 /* System V Release 4 (SVR4). */
1099 m68k_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1101 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1103 /* SVR4 uses a different calling convention. */
1104 set_gdbarch_return_value (gdbarch, m68k_svr4_return_value);
1106 /* SVR4 uses %a0 instead of %a1. */
1107 tdep->struct_value_regnum = M68K_A0_REGNUM;
1111 /* Function: m68k_gdbarch_init
1112 Initializer function for the m68k gdbarch vector.
1113 Called by gdbarch. Sets up the gdbarch vector(s) for this target. */
1115 static struct gdbarch *
1116 m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1118 struct gdbarch_tdep *tdep = NULL;
1119 struct gdbarch *gdbarch;
1121 /* find a candidate among the list of pre-declared architectures. */
1122 arches = gdbarch_list_lookup_by_info (arches, &info);
1124 return (arches->gdbarch);
1126 tdep = xmalloc (sizeof (struct gdbarch_tdep));
1127 gdbarch = gdbarch_alloc (&info, tdep);
1129 set_gdbarch_long_double_format (gdbarch, &floatformat_m68881_ext);
1130 set_gdbarch_long_double_bit (gdbarch, 96);
1132 set_gdbarch_skip_prologue (gdbarch, m68k_skip_prologue);
1133 set_gdbarch_breakpoint_from_pc (gdbarch, m68k_local_breakpoint_from_pc);
1135 /* Stack grows down. */
1136 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1138 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
1139 set_gdbarch_decr_pc_after_break (gdbarch, 2);
1141 set_gdbarch_frame_args_skip (gdbarch, 8);
1143 set_gdbarch_register_type (gdbarch, m68k_register_type);
1144 set_gdbarch_register_name (gdbarch, m68k_register_name);
1145 set_gdbarch_num_regs (gdbarch, 29);
1146 set_gdbarch_register_bytes_ok (gdbarch, m68k_register_bytes_ok);
1147 set_gdbarch_sp_regnum (gdbarch, M68K_SP_REGNUM);
1148 set_gdbarch_pc_regnum (gdbarch, M68K_PC_REGNUM);
1149 set_gdbarch_ps_regnum (gdbarch, M68K_PS_REGNUM);
1150 set_gdbarch_fp0_regnum (gdbarch, M68K_FP0_REGNUM);
1151 set_gdbarch_convert_register_p (gdbarch, m68k_convert_register_p);
1152 set_gdbarch_register_to_value (gdbarch, m68k_register_to_value);
1153 set_gdbarch_value_to_register (gdbarch, m68k_value_to_register);
1155 set_gdbarch_push_dummy_call (gdbarch, m68k_push_dummy_call);
1156 set_gdbarch_return_value (gdbarch, m68k_return_value);
1159 set_gdbarch_print_insn (gdbarch, print_insn_m68k);
1161 #if defined JB_PC && defined JB_ELEMENT_SIZE
1162 tdep->jb_pc = JB_PC;
1163 tdep->jb_elt_size = JB_ELEMENT_SIZE;
1167 tdep->struct_value_regnum = M68K_A1_REGNUM;
1168 tdep->struct_return = reg_struct_return;
1170 /* Frame unwinder. */
1171 set_gdbarch_unwind_dummy_id (gdbarch, m68k_unwind_dummy_id);
1172 set_gdbarch_unwind_pc (gdbarch, m68k_unwind_pc);
1174 /* Hook in the DWARF CFI frame unwinder. */
1175 frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
1177 frame_base_set_default (gdbarch, &m68k_frame_base);
1179 /* Hook in ABI-specific overrides, if they have been registered. */
1180 gdbarch_init_osabi (info, gdbarch);
1182 /* Now we have tuned the configuration, set a few final things,
1183 based on what the OS ABI has told us. */
1185 if (tdep->jb_pc >= 0)
1186 set_gdbarch_get_longjmp_target (gdbarch, m68k_get_longjmp_target);
1188 frame_unwind_append_sniffer (gdbarch, m68k_frame_sniffer);
1195 m68k_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
1197 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1203 extern initialize_file_ftype _initialize_m68k_tdep; /* -Wmissing-prototypes */
1206 _initialize_m68k_tdep (void)
1208 gdbarch_register (bfd_arch_m68k, m68k_gdbarch_init, m68k_dump_tdep);