* mn10300-tdep.c (mn10300_pop_frame): Split the mn10300-specific
stuff out into mn10300_pop_frame_regular, and use generic_pop_current_frame. This lets us share code, and also makes this function's prototype match that expected by gdbarch. Make this function static. (mn10300_pop_frame_regular): New function. (mn10300_gdbarch_init): Register mn10300_pop_frame as the gdbarch's pop_frame method. * config/mn10300/tm-mn10300.h (POP_FRAME): Delete definition. (mn10300_pop_frame): Delete declaration.
This commit is contained in:
parent
2ac51b362b
commit
ee9f9641e0
|
@ -1,5 +1,16 @@
|
||||||
2001-05-08 Jim Blandy <jimb@redhat.com>
|
2001-05-08 Jim Blandy <jimb@redhat.com>
|
||||||
|
|
||||||
|
* mn10300-tdep.c (mn10300_pop_frame): Split the mn10300-specific
|
||||||
|
stuff out into mn10300_pop_frame_regular, and use
|
||||||
|
generic_pop_current_frame. This lets us share code, and also
|
||||||
|
makes this function's prototype match that expected by gdbarch.
|
||||||
|
Make this function static.
|
||||||
|
(mn10300_pop_frame_regular): New function.
|
||||||
|
(mn10300_gdbarch_init): Register mn10300_pop_frame as the
|
||||||
|
gdbarch's pop_frame method.
|
||||||
|
* config/mn10300/tm-mn10300.h (POP_FRAME): Delete definition.
|
||||||
|
(mn10300_pop_frame): Delete declaration.
|
||||||
|
|
||||||
* mn10300-tdep.c (mn10300_saved_pc_after_call,
|
* mn10300-tdep.c (mn10300_saved_pc_after_call,
|
||||||
mn10300_extract_return_value,
|
mn10300_extract_return_value,
|
||||||
mn10300_extract_struct_value_address, mn10300_store_return_value,
|
mn10300_extract_struct_value_address, mn10300_store_return_value,
|
||||||
|
|
|
@ -57,9 +57,6 @@
|
||||||
|
|
||||||
#define INIT_FRAME_PC /* Not necessary */
|
#define INIT_FRAME_PC /* Not necessary */
|
||||||
|
|
||||||
extern void mn10300_pop_frame (struct frame_info *);
|
|
||||||
#define POP_FRAME mn10300_pop_frame (get_current_frame ())
|
|
||||||
|
|
||||||
/* Cons up virtual frame pointer for trace */
|
/* Cons up virtual frame pointer for trace */
|
||||||
extern void mn10300_virtual_frame_pointer (CORE_ADDR, long *, long *);
|
extern void mn10300_virtual_frame_pointer (CORE_ADDR, long *, long *);
|
||||||
#define TARGET_VIRTUAL_FRAME_POINTER(PC, REGP, OFFP) \
|
#define TARGET_VIRTUAL_FRAME_POINTER(PC, REGP, OFFP) \
|
||||||
|
|
|
@ -592,38 +592,41 @@ mn10300_skip_prologue (CORE_ADDR pc)
|
||||||
return mn10300_analyze_prologue (NULL, pc);
|
return mn10300_analyze_prologue (NULL, pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* generic_pop_current_frame calls this function if the current
|
||||||
|
frame isn't a dummy frame. */
|
||||||
|
static void
|
||||||
|
mn10300_pop_frame_regular (struct frame_info *frame)
|
||||||
|
{
|
||||||
|
int regnum;
|
||||||
|
|
||||||
|
write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
|
||||||
|
|
||||||
|
/* Restore any saved registers. */
|
||||||
|
for (regnum = 0; regnum < NUM_REGS; regnum++)
|
||||||
|
if (frame->saved_regs[regnum] != 0)
|
||||||
|
{
|
||||||
|
ULONGEST value;
|
||||||
|
|
||||||
|
value = read_memory_unsigned_integer (frame->saved_regs[regnum],
|
||||||
|
REGISTER_RAW_SIZE (regnum));
|
||||||
|
write_register (regnum, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Actually cut back the stack. */
|
||||||
|
write_register (SP_REGNUM, FRAME_FP (frame));
|
||||||
|
|
||||||
|
/* Don't we need to set the PC?!? XXX FIXME. */
|
||||||
|
}
|
||||||
|
|
||||||
/* Function: pop_frame
|
/* Function: pop_frame
|
||||||
This routine gets called when either the user uses the `return'
|
This routine gets called when either the user uses the `return'
|
||||||
command, or the call dummy breakpoint gets hit. */
|
command, or the call dummy breakpoint gets hit. */
|
||||||
|
static void
|
||||||
void
|
mn10300_pop_frame (void)
|
||||||
mn10300_pop_frame (struct frame_info *frame)
|
|
||||||
{
|
{
|
||||||
int regnum;
|
/* This function checks for and handles generic dummy frames, and
|
||||||
|
calls back to our function for ordinary frames. */
|
||||||
if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
|
generic_pop_current_frame (mn10300_pop_frame_regular);
|
||||||
generic_pop_dummy_frame ();
|
|
||||||
else
|
|
||||||
{
|
|
||||||
write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
|
|
||||||
|
|
||||||
/* Restore any saved registers. */
|
|
||||||
for (regnum = 0; regnum < NUM_REGS; regnum++)
|
|
||||||
if (frame->saved_regs[regnum] != 0)
|
|
||||||
{
|
|
||||||
ULONGEST value;
|
|
||||||
|
|
||||||
value = read_memory_unsigned_integer (frame->saved_regs[regnum],
|
|
||||||
REGISTER_RAW_SIZE (regnum));
|
|
||||||
write_register (regnum, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Actually cut back the stack. */
|
|
||||||
write_register (SP_REGNUM, FRAME_FP (frame));
|
|
||||||
|
|
||||||
/* Don't we need to set the PC?!? XXX FIXME. */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Throw away any cached frame information. */
|
/* Throw away any cached frame information. */
|
||||||
flush_cached_frames ();
|
flush_cached_frames ();
|
||||||
|
@ -1025,6 +1028,7 @@ mn10300_gdbarch_init (struct gdbarch_info info,
|
||||||
(gdbarch, mn10300_extract_struct_value_address);
|
(gdbarch, mn10300_extract_struct_value_address);
|
||||||
set_gdbarch_store_return_value (gdbarch, mn10300_store_return_value);
|
set_gdbarch_store_return_value (gdbarch, mn10300_store_return_value);
|
||||||
set_gdbarch_store_struct_return (gdbarch, mn10300_store_struct_return);
|
set_gdbarch_store_struct_return (gdbarch, mn10300_store_struct_return);
|
||||||
|
set_gdbarch_pop_frame (gdbarch, mn10300_pop_frame);
|
||||||
set_gdbarch_skip_prologue (gdbarch, mn10300_skip_prologue);
|
set_gdbarch_skip_prologue (gdbarch, mn10300_skip_prologue);
|
||||||
set_gdbarch_frame_args_skip (gdbarch, 0);
|
set_gdbarch_frame_args_skip (gdbarch, 0);
|
||||||
set_gdbarch_frame_args_address (gdbarch, default_frame_address);
|
set_gdbarch_frame_args_address (gdbarch, default_frame_address);
|
||||||
|
|
Loading…
Reference in New Issue