diff options
author | Daniel Jacobowitz <drow@false.org> | 2008-04-30 21:19:10 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2008-04-30 21:19:10 +0000 |
commit | 25492ce3f9c588d98d1284c04990491dc5056b15 (patch) | |
tree | e635fb5c3959dca6150e77d34cf4426eedc15fdf /gdb/trad-frame.c | |
parent | 4a4e51493775a8b68df6fe1c1e364aefed060fb9 (diff) | |
download | binutils-gdb-25492ce3f9c588d98d1284c04990491dc5056b15.tar.gz |
* trad-frame.c (struct trad_frame_cache): Rename next_frame to this_frame.
(trad_frame_cache_zalloc, trad_frame_alloc_saved_regs): Expect
this_frame.
(trad_frame_get_prev_register, trad_frame_get_register): Update signature.
* trad-frame.h (trad_frame_cache_zalloc, trad_frame_get_register)
(trad_frame_alloc_saved_regs, trad_frame_get_prev_register): Update
signature.
* tramp-frame.c (tramp_frame_cache, tramp_frame_start): Expect
this_frame.
(tramp_frame_this_id, tramp_frame_prev_register, tramp_frame_sniffer):
Update signature.
* tramp-frame.h (struct tramp_frame): Update signature of init.
* Makefile.in (trad-frame.o): Update.
Diffstat (limited to 'gdb/trad-frame.c')
-rw-r--r-- | gdb/trad-frame.c | 84 |
1 files changed, 27 insertions, 57 deletions
diff --git a/gdb/trad-frame.c b/gdb/trad-frame.c index 0a27906a196..b571cd3fee2 100644 --- a/gdb/trad-frame.c +++ b/gdb/trad-frame.c @@ -21,23 +21,25 @@ #include "frame.h" #include "trad-frame.h" #include "regcache.h" +#include "frame-unwind.h" +#include "value.h" struct trad_frame_cache { - struct frame_info *next_frame; + struct frame_info *this_frame; CORE_ADDR this_base; struct trad_frame_saved_reg *prev_regs; struct frame_id this_id; }; struct trad_frame_cache * -trad_frame_cache_zalloc (struct frame_info *next_frame) +trad_frame_cache_zalloc (struct frame_info *this_frame) { struct trad_frame_cache *this_trad_cache; this_trad_cache = FRAME_OBSTACK_ZALLOC (struct trad_frame_cache); - this_trad_cache->prev_regs = trad_frame_alloc_saved_regs (next_frame); - this_trad_cache->next_frame = next_frame; + this_trad_cache->prev_regs = trad_frame_alloc_saved_regs (this_frame); + this_trad_cache->this_frame = this_frame; return this_trad_cache; } @@ -47,10 +49,10 @@ trad_frame_cache_zalloc (struct frame_info *next_frame) for all potential instruction sequences). */ struct trad_frame_saved_reg * -trad_frame_alloc_saved_regs (struct frame_info *next_frame) +trad_frame_alloc_saved_regs (struct frame_info *this_frame) { int regnum; - struct gdbarch *gdbarch = get_frame_arch (next_frame); + struct gdbarch *gdbarch = get_frame_arch (this_frame); int numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch); struct trad_frame_saved_reg *this_saved_regs = FRAME_OBSTACK_CALLOC (numregs, struct trad_frame_saved_reg); @@ -128,66 +130,34 @@ trad_frame_set_unknown (struct trad_frame_saved_reg this_saved_regs[], this_saved_regs[regnum].addr = -1; } -void -trad_frame_get_prev_register (struct frame_info *next_frame, +struct value * +trad_frame_get_prev_register (struct frame_info *this_frame, struct trad_frame_saved_reg this_saved_regs[], - int regnum, int *optimizedp, - enum lval_type *lvalp, CORE_ADDR *addrp, - int *realregp, gdb_byte *bufferp) + int regnum) { - struct gdbarch *gdbarch = get_frame_arch (next_frame); + struct gdbarch *gdbarch = get_frame_arch (this_frame); if (trad_frame_addr_p (this_saved_regs, regnum)) - { - /* The register was saved in memory. */ - *optimizedp = 0; - *lvalp = lval_memory; - *addrp = this_saved_regs[regnum].addr; - *realregp = -1; - if (bufferp != NULL) - { - /* Read the value in from memory. */ - get_frame_memory (next_frame, this_saved_regs[regnum].addr, bufferp, - register_size (gdbarch, regnum)); - } - } + /* The register was saved in memory. */ + return frame_unwind_got_memory (this_frame, regnum, + this_saved_regs[regnum].addr); else if (trad_frame_realreg_p (this_saved_regs, regnum)) - { - *optimizedp = 0; - *lvalp = lval_register; - *addrp = 0; - *realregp = this_saved_regs[regnum].realreg; - /* Ask the next frame to return the value of the register. */ - if (bufferp) - frame_unwind_register (next_frame, (*realregp), bufferp); - } + return frame_unwind_got_register (this_frame, regnum, + this_saved_regs[regnum].realreg); else if (trad_frame_value_p (this_saved_regs, regnum)) - { - /* The register's value is available. */ - *optimizedp = 0; - *lvalp = not_lval; - *addrp = 0; - *realregp = -1; - if (bufferp != NULL) - store_unsigned_integer (bufferp, register_size (gdbarch, regnum), - this_saved_regs[regnum].addr); - } + /* The register's value is available. */ + return frame_unwind_got_constant (this_frame, regnum, + this_saved_regs[regnum].addr); else - { - error (_("Register %s not available"), - gdbarch_register_name (gdbarch, regnum)); - } + return frame_unwind_got_optimized (this_frame, regnum); } -void +struct value * trad_frame_get_register (struct trad_frame_cache *this_trad_cache, - struct frame_info *next_frame, - int regnum, int *optimizedp, - enum lval_type *lvalp, CORE_ADDR *addrp, - int *realregp, gdb_byte *bufferp) -{ - trad_frame_get_prev_register (next_frame, this_trad_cache->prev_regs, - regnum, optimizedp, lvalp, addrp, realregp, - bufferp); + struct frame_info *this_frame, + int regnum) +{ + return trad_frame_get_prev_register (this_frame, this_trad_cache->prev_regs, + regnum); } void |