* m68hc11-tdep.c (struct frame_extra_info): Remove.
(m68hc11_pop_frame): Remove. (m68hc11_frame_saved_pc): Remove. (m68hc11_frame_chain): Remove. (m68hc11_frame_init_saved_regs): Remove. (m68hc11_init_extra_frame_info): Remove. (m68hc11_store_struct_return): Remove. (m68hc11_saved_pc_after_call): Remove. (m68hc11_call_dummy_address): Remove.
This commit is contained in:
parent
1ea653ae0a
commit
ce7f4371ed
|
@ -1,3 +1,14 @@
|
||||||
|
2003-07-27 Stephane Carrez <stcarrez@nerim.fr>
|
||||||
|
|
||||||
|
* m68hc11-tdep.c (struct frame_extra_info): Remove.
|
||||||
|
(m68hc11_pop_frame): Remove.
|
||||||
|
(m68hc11_frame_saved_pc): Remove.
|
||||||
|
(m68hc11_frame_chain): Remove.
|
||||||
|
(m68hc11_frame_init_saved_regs): Remove.
|
||||||
|
(m68hc11_init_extra_frame_info): Remove.
|
||||||
|
(m68hc11_store_struct_return): Remove.
|
||||||
|
(m68hc11_saved_pc_after_call): Remove.
|
||||||
|
|
||||||
2003-07-27 Stephane Carrez <stcarrez@nerim.fr>
|
2003-07-27 Stephane Carrez <stcarrez@nerim.fr>
|
||||||
|
|
||||||
* m68hc11-tdep.c (struct m68hc11_unwind_cache): New struct to hold
|
* m68hc11-tdep.c (struct m68hc11_unwind_cache): New struct to hold
|
||||||
|
|
|
@ -180,14 +180,6 @@ struct m68hc11_unwind_cache
|
||||||
struct trad_frame_saved_reg *saved_regs;
|
struct trad_frame_saved_reg *saved_regs;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct frame_extra_info
|
|
||||||
{
|
|
||||||
CORE_ADDR return_pc;
|
|
||||||
int frameless;
|
|
||||||
int size;
|
|
||||||
enum insn_return_kind return_kind;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Table of registers for 68HC11. This includes the hard registers
|
/* Table of registers for 68HC11. This includes the hard registers
|
||||||
and the soft registers used by GCC. */
|
and the soft registers used by GCC. */
|
||||||
static char *
|
static char *
|
||||||
|
@ -414,59 +406,6 @@ m68hc11_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
|
||||||
return breakpoint;
|
return breakpoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Immediately after a function call, return the saved pc before the frame
|
|
||||||
is setup. */
|
|
||||||
|
|
||||||
static CORE_ADDR
|
|
||||||
m68hc11_saved_pc_after_call (struct frame_info *frame)
|
|
||||||
{
|
|
||||||
CORE_ADDR addr;
|
|
||||||
ULONGEST sp;
|
|
||||||
|
|
||||||
regcache_cooked_read_unsigned (current_regcache, HARD_SP_REGNUM, &sp);
|
|
||||||
sp += STACK_CORRECTION;
|
|
||||||
addr = sp & 0x0ffff;
|
|
||||||
return read_memory_integer (addr, 2) & 0x0FFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
static CORE_ADDR
|
|
||||||
m68hc11_frame_saved_pc (struct frame_info *frame)
|
|
||||||
{
|
|
||||||
return get_frame_extra_info (frame)->return_pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Discard from the stack the innermost frame, restoring all saved
|
|
||||||
registers. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
m68hc11_pop_frame (void)
|
|
||||||
{
|
|
||||||
register struct frame_info *frame = get_current_frame ();
|
|
||||||
register CORE_ADDR fp, sp;
|
|
||||||
register int regnum;
|
|
||||||
|
|
||||||
if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
|
|
||||||
get_frame_base (frame),
|
|
||||||
get_frame_base (frame)))
|
|
||||||
generic_pop_dummy_frame ();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fp = get_frame_base (frame);
|
|
||||||
DEPRECATED_FRAME_INIT_SAVED_REGS (frame);
|
|
||||||
|
|
||||||
/* Copy regs from where they were saved in the frame. */
|
|
||||||
for (regnum = 0; regnum < M68HC11_ALL_REGS; regnum++)
|
|
||||||
if (get_frame_saved_regs (frame)[regnum])
|
|
||||||
write_register (regnum,
|
|
||||||
read_memory_integer (get_frame_saved_regs (frame)[regnum], 2));
|
|
||||||
|
|
||||||
write_register (HARD_PC_REGNUM, get_frame_extra_info (frame)->return_pc);
|
|
||||||
sp = (fp + get_frame_extra_info (frame)->size + 2) & 0x0ffff;
|
|
||||||
write_register (HARD_SP_REGNUM, sp);
|
|
||||||
}
|
|
||||||
flush_cached_frames ();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* 68HC11 & 68HC12 prologue analysis.
|
/* 68HC11 & 68HC12 prologue analysis.
|
||||||
|
|
||||||
|
@ -829,118 +768,6 @@ m68hc11_skip_prologue (CORE_ADDR pc)
|
||||||
return pc;
|
return pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given a GDB frame, determine the address of the calling function's
|
|
||||||
frame. This will be used to create a new GDB frame struct, and
|
|
||||||
then DEPRECATED_INIT_EXTRA_FRAME_INFO and DEPRECATED_INIT_FRAME_PC
|
|
||||||
will be called for the new frame. */
|
|
||||||
|
|
||||||
static CORE_ADDR
|
|
||||||
m68hc11_frame_chain (struct frame_info *frame)
|
|
||||||
{
|
|
||||||
CORE_ADDR addr;
|
|
||||||
|
|
||||||
if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
|
|
||||||
get_frame_base (frame),
|
|
||||||
get_frame_base (frame)))
|
|
||||||
return get_frame_base (frame); /* dummy frame same as caller's frame */
|
|
||||||
|
|
||||||
if (get_frame_extra_info (frame)->return_pc == 0
|
|
||||||
|| inside_entry_file (get_frame_extra_info (frame)->return_pc))
|
|
||||||
return (CORE_ADDR) 0;
|
|
||||||
|
|
||||||
if (get_frame_base (frame) == 0)
|
|
||||||
{
|
|
||||||
return (CORE_ADDR) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
addr = get_frame_base (frame) + get_frame_extra_info (frame)->size + STACK_CORRECTION - 2;
|
|
||||||
addr = read_memory_unsigned_integer (addr, 2) & 0x0FFFF;
|
|
||||||
return addr;
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
/* Put here the code to store, into a struct frame_saved_regs, the
|
|
||||||
addresses of the saved registers of frame described by FRAME_INFO.
|
|
||||||
This includes special registers such as pc and fp saved in special
|
|
||||||
ways in the stack frame. sp is even more special: the address we
|
|
||||||
return for it IS the sp for the next frame. */
|
|
||||||
static void
|
|
||||||
m68hc11_frame_init_saved_regs (struct frame_info *fi)
|
|
||||||
{
|
|
||||||
CORE_ADDR pc;
|
|
||||||
CORE_ADDR addr;
|
|
||||||
|
|
||||||
if (get_frame_saved_regs (fi) == NULL)
|
|
||||||
frame_saved_regs_zalloc (fi);
|
|
||||||
else
|
|
||||||
memset (get_frame_saved_regs (fi), 0, SIZEOF_FRAME_SAVED_REGS);
|
|
||||||
|
|
||||||
pc = get_frame_pc (fi);
|
|
||||||
get_frame_extra_info (fi)->return_kind = m68hc11_get_return_insn (pc);
|
|
||||||
m68hc11_guess_from_prologue (pc, pc, get_frame_base (fi), &pc,
|
|
||||||
&get_frame_extra_info (fi)->size,
|
|
||||||
get_frame_saved_regs (fi));
|
|
||||||
|
|
||||||
addr = get_frame_base (fi) + get_frame_extra_info (fi)->size + STACK_CORRECTION;
|
|
||||||
if (soft_regs[SOFT_FP_REGNUM].name)
|
|
||||||
get_frame_saved_regs (fi)[SOFT_FP_REGNUM] = addr - 2;
|
|
||||||
|
|
||||||
/* Take into account how the function was called/returns. */
|
|
||||||
if (get_frame_extra_info (fi)->return_kind == RETURN_RTC)
|
|
||||||
{
|
|
||||||
get_frame_saved_regs (fi)[HARD_PAGE_REGNUM] = addr;
|
|
||||||
addr++;
|
|
||||||
}
|
|
||||||
else if (get_frame_extra_info (fi)->return_kind == RETURN_RTI)
|
|
||||||
{
|
|
||||||
get_frame_saved_regs (fi)[HARD_CCR_REGNUM] = addr;
|
|
||||||
get_frame_saved_regs (fi)[HARD_D_REGNUM] = addr + 1;
|
|
||||||
get_frame_saved_regs (fi)[HARD_X_REGNUM] = addr + 3;
|
|
||||||
get_frame_saved_regs (fi)[HARD_Y_REGNUM] = addr + 5;
|
|
||||||
addr += 7;
|
|
||||||
}
|
|
||||||
get_frame_saved_regs (fi)[HARD_SP_REGNUM] = addr;
|
|
||||||
get_frame_saved_regs (fi)[HARD_PC_REGNUM] = get_frame_saved_regs (fi)[HARD_SP_REGNUM];
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
m68hc11_init_extra_frame_info (int fromleaf, struct frame_info *fi)
|
|
||||||
{
|
|
||||||
CORE_ADDR addr;
|
|
||||||
|
|
||||||
frame_extra_info_zalloc (fi, sizeof (struct frame_extra_info));
|
|
||||||
|
|
||||||
if (get_next_frame (fi))
|
|
||||||
deprecated_update_frame_pc_hack (fi, DEPRECATED_FRAME_SAVED_PC (get_next_frame (fi)));
|
|
||||||
|
|
||||||
m68hc11_frame_init_saved_regs (fi);
|
|
||||||
|
|
||||||
if (fromleaf)
|
|
||||||
{
|
|
||||||
get_frame_extra_info (fi)->return_kind = m68hc11_get_return_insn (get_frame_pc (fi));
|
|
||||||
get_frame_extra_info (fi)->return_pc = m68hc11_saved_pc_after_call (fi);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
addr = get_frame_saved_regs (fi)[HARD_PC_REGNUM];
|
|
||||||
addr = read_memory_unsigned_integer (addr, 2) & 0x0ffff;
|
|
||||||
|
|
||||||
/* Take into account the 68HC12 specific call (PC + page). */
|
|
||||||
if (get_frame_extra_info (fi)->return_kind == RETURN_RTC
|
|
||||||
&& addr >= 0x08000 && addr < 0x0c000
|
|
||||||
&& USE_PAGE_REGISTER)
|
|
||||||
{
|
|
||||||
CORE_ADDR page_addr = get_frame_saved_regs (fi)[HARD_PAGE_REGNUM];
|
|
||||||
|
|
||||||
unsigned page = read_memory_unsigned_integer (page_addr, 1);
|
|
||||||
addr -= 0x08000;
|
|
||||||
addr += ((page & 0x0ff) << 14);
|
|
||||||
addr += 0x1000000;
|
|
||||||
}
|
|
||||||
get_frame_extra_info (fi)->return_pc = addr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static CORE_ADDR
|
static CORE_ADDR
|
||||||
m68hc11_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
|
m68hc11_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
|
||||||
{
|
{
|
||||||
|
@ -1463,15 +1290,6 @@ m68hc11_register_type (struct gdbarch *gdbarch, int reg_nr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
m68hc11_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
|
|
||||||
{
|
|
||||||
/* The struct address computed by gdb is on the stack.
|
|
||||||
It uses the stack pointer so we must apply the stack
|
|
||||||
correction offset. */
|
|
||||||
write_register (HARD_D_REGNUM, addr + STACK_CORRECTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
m68hc11_store_return_value (struct type *type, struct regcache *regcache,
|
m68hc11_store_return_value (struct type *type, struct regcache *regcache,
|
||||||
const void *valbuf)
|
const void *valbuf)
|
||||||
|
|
Loading…
Reference in New Issue