diff options
author | Andrew Cagney <cagney@redhat.com> | 2003-01-06 21:50:25 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2003-01-06 21:50:25 +0000 |
commit | f6c609c4c2bb326e580c9f533bd2aa0e9d583556 (patch) | |
tree | 7f5974da7d3a38c4ed7430a947fd61c165eec113 /gdb/mn10200-tdep.c | |
parent | 84dc46cbdb5a9c4ca576b8768a2876e9551199a5 (diff) | |
download | gdb-f6c609c4c2bb326e580c9f533bd2aa0e9d583556.zip gdb-f6c609c4c2bb326e580c9f533bd2aa0e9d583556.tar.gz gdb-f6c609c4c2bb326e580c9f533bd2aa0e9d583556.tar.bz2 |
2003-01-06 Andrew Cagney <ac131313@redhat.com>
* frame.h (deprecated_frame_xmalloc_with_cleanup): Declare.
* frame.c (deprecated_frame_xmalloc_with_cleanup): New function.
* arm-tdep.c (arm_frame_chain): Allocate caller_fi using
deprecated_frame_xmalloc_with_cleanup.
* m32r-tdep.c (m32r_virtual_frame_pointer): Allocate `fi' using
deprecated_frame_xmalloc.
* mcore-tdep.c (analyze_dummy_frame): Ditto for dummy.
* mn10200-tdep.c (mn10200_frame_chain): Ditto for dummy_frame.
Diffstat (limited to 'gdb/mn10200-tdep.c')
-rw-r--r-- | gdb/mn10200-tdep.c | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/gdb/mn10200-tdep.c b/gdb/mn10200-tdep.c index 3aea842..808f7e4 100644 --- a/gdb/mn10200-tdep.c +++ b/gdb/mn10200-tdep.c @@ -607,7 +607,9 @@ mn10200_analyze_prologue (struct frame_info *fi, CORE_ADDR pc) CORE_ADDR mn10200_frame_chain (struct frame_info *fi) { - struct frame_info dummy_frame; + struct frame_info *dummy_frame = deprecated_frame_xmalloc (); + struct cleanup *old_chain = make_cleanup (xfree, dummy_frame); + CORE_ADDR ret; /* Walk through the prologue to determine the stack size, location of saved registers, end of the prologue, etc. */ @@ -638,31 +640,33 @@ mn10200_frame_chain (struct frame_info *fi) So we set up a dummy frame and call mn10200_analyze_prologue to find stuff for us. */ - deprecated_update_frame_pc_hack (&dummy_frame, FRAME_SAVED_PC (fi)); - deprecated_update_frame_base_hack (&dummy_frame, fi->frame); - memset (dummy_frame.fsr.regs, '\000', sizeof dummy_frame.fsr.regs); - dummy_frame.status = 0; - dummy_frame.stack_size = 0; - mn10200_analyze_prologue (&dummy_frame, 0); - - if (dummy_frame.status & MY_FRAME_IN_FP) + deprecated_update_frame_pc_hack (dummy_frame, FRAME_SAVED_PC (fi)); + deprecated_update_frame_base_hack (dummy_frame, fi->frame); + memset (dummy_frame->fsr.regs, '\000', sizeof dummy_frame->fsr.regs); + dummy_frame->status = 0; + dummy_frame->stack_size = 0; + mn10200_analyze_prologue (dummy_frame, 0); + + if (dummy_frame->status & MY_FRAME_IN_FP) { /* Our caller has a frame pointer. So find the frame in $a2, $a0, or in the stack. */ if (fi->fsr.regs[6]) - return (read_memory_integer (fi->fsr.regs[FP_REGNUM], REGISTER_SIZE) - & 0xffffff); + ret = (read_memory_integer (fi->fsr.regs[FP_REGNUM], REGISTER_SIZE) + & 0xffffff); else if (fi->status & CALLER_A2_IN_A0) - return read_register (4); + ret = read_register (4); else - return read_register (FP_REGNUM); + ret = read_register (FP_REGNUM); } else { /* Our caller does not have a frame pointer. So his frame starts at the base of our frame (fi->frame) + <his size> + 4 (saved pc). */ - return fi->frame + -dummy_frame.stack_size + 4; + ret = fi->frame + -dummy_frame->stack_size + 4; } + do_cleanups (old_chain); + return ret; } /* Function: skip_prologue |