summaryrefslogtreecommitdiff
path: root/gdb/trad-frame.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2008-04-30 21:19:10 +0000
committerDaniel Jacobowitz <dan@debian.org>2008-04-30 21:19:10 +0000
commite4af005e4ad58885f85664d46658b5ac591f86f6 (patch)
tree47387c0e3d925a74826863cfa1c47c55c1e4815d /gdb/trad-frame.c
parent3c6f09ef8034926cf383a254a62e4a6fda946a5a (diff)
downloadgdb-e4af005e4ad58885f85664d46658b5ac591f86f6.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.c84
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