diff options
author | Jim Blandy <jimb@codesourcery.com> | 2001-05-09 02:22:35 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 2001-05-09 02:22:35 +0000 |
commit | ee9f9641e044af38cd83b957504141a2d558bfa8 (patch) | |
tree | 19489288acfa7215d8cb6a7176869fc32d108f45 /gdb/mn10300-tdep.c | |
parent | 2ac51b362bd65205d1fa119ca6b8f372a6b0aeee (diff) | |
download | gdb-ee9f9641e044af38cd83b957504141a2d558bfa8.zip gdb-ee9f9641e044af38cd83b957504141a2d558bfa8.tar.gz gdb-ee9f9641e044af38cd83b957504141a2d558bfa8.tar.bz2 |
* 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.
Diffstat (limited to 'gdb/mn10300-tdep.c')
-rw-r--r-- | gdb/mn10300-tdep.c | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/gdb/mn10300-tdep.c b/gdb/mn10300-tdep.c index 7fad2e2..49dcf05 100644 --- a/gdb/mn10300-tdep.c +++ b/gdb/mn10300-tdep.c @@ -592,38 +592,41 @@ mn10300_skip_prologue (CORE_ADDR pc) return mn10300_analyze_prologue (NULL, pc); } - -/* Function: pop_frame - This routine gets called when either the user uses the `return' - command, or the call dummy breakpoint gets hit. */ - -void -mn10300_pop_frame (struct frame_info *frame) +/* 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; - if (PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame)) - generic_pop_dummy_frame (); - else - { - write_register (PC_REGNUM, FRAME_SAVED_PC (frame)); + 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; + /* 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); - } + 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)); + /* Actually cut back the stack. */ + write_register (SP_REGNUM, FRAME_FP (frame)); - /* Don't we need to set the PC?!? XXX FIXME. */ - } + /* Don't we need to set the PC?!? XXX FIXME. */ +} + +/* Function: pop_frame + This routine gets called when either the user uses the `return' + command, or the call dummy breakpoint gets hit. */ +static void +mn10300_pop_frame (void) +{ + /* This function checks for and handles generic dummy frames, and + calls back to our function for ordinary frames. */ + generic_pop_current_frame (mn10300_pop_frame_regular); /* Throw away any cached frame information. */ flush_cached_frames (); @@ -1025,6 +1028,7 @@ mn10300_gdbarch_init (struct gdbarch_info info, (gdbarch, mn10300_extract_struct_value_address); set_gdbarch_store_return_value (gdbarch, mn10300_store_return_value); 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_frame_args_skip (gdbarch, 0); set_gdbarch_frame_args_address (gdbarch, default_frame_address); |