From 8983bd8343754a6b8b34a0a56e66c5fe03eb4ca3 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Sun, 8 Jun 2003 22:10:12 +0000 Subject: [PATCH] 2003-06-08 Andrew Cagney * trad-frame.h (struct trad_frame_saved_reg): Rename "struct trad_frame". Update comments. * d10v-tdep.c (struct d10v_unwind_cache): Update. * trad-frame.c (trad_frame_alloc_saved_regs): Update. (trad_frame_register_value, trad_frame_prev_register): Update. --- gdb/ChangeLog | 8 ++++++++ gdb/d10v-tdep.c | 2 +- gdb/trad-frame.c | 28 ++++++++++++++-------------- gdb/trad-frame.h | 46 +++++++++++++++++++++++++++++----------------- 4 files changed, 52 insertions(+), 32 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1c861272ed3..88841e8f798 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2003-06-08 Andrew Cagney + + * trad-frame.h (struct trad_frame_saved_reg): Rename "struct + trad_frame". Update comments. + * d10v-tdep.c (struct d10v_unwind_cache): Update. + * trad-frame.c (trad_frame_alloc_saved_regs): Update. + (trad_frame_register_value, trad_frame_prev_register): Update. + 2003-06-08 Andrew Cagney * acinclude.m4 (gcc_AC_CHECK_DECL, (gcc_AC_CHECK_DECL): Stolen diff --git a/gdb/d10v-tdep.c b/gdb/d10v-tdep.c index 7faa63b174f..a83d6bae20f 100644 --- a/gdb/d10v-tdep.c +++ b/gdb/d10v-tdep.c @@ -577,7 +577,7 @@ struct d10v_unwind_cache LONGEST r11_offset; int uses_frame; /* Table indicating the location of each and every register. */ - struct trad_frame *saved_regs; + struct trad_frame_saved_reg *saved_regs; }; static int diff --git a/gdb/trad-frame.c b/gdb/trad-frame.c index 0188a4dce17..92e6f83eecb 100644 --- a/gdb/trad-frame.c +++ b/gdb/trad-frame.c @@ -29,41 +29,41 @@ non-optimized frames, the technique is reliable (just need to check for all potential instruction sequences). */ -struct trad_frame * +struct trad_frame_saved_reg * trad_frame_alloc_saved_regs (struct frame_info *next_frame) { - int i; + int regnum; struct gdbarch *gdbarch = get_frame_arch (next_frame); int numregs = NUM_REGS + NUM_PSEUDO_REGS; - struct trad_frame *this_saved_regs - = FRAME_OBSTACK_CALLOC (numregs, struct trad_frame); - for (i = 0; i < numregs; i++) - this_saved_regs[i].regnum = i; + struct trad_frame_saved_reg *this_saved_regs + = FRAME_OBSTACK_CALLOC (numregs, struct trad_frame_saved_reg); + for (regnum = 0; regnum < numregs; regnum++) + this_saved_regs[regnum].realnum = regnum; return this_saved_regs; } void -trad_frame_register_value (struct trad_frame this_saved_regs[], +trad_frame_register_value (struct trad_frame_saved_reg this_saved_regs[], int regnum, LONGEST val) { - /* Make the REGNUM invalid, indicating that the ADDR contains the + /* Make the REALNUM invalid, indicating that the ADDR contains the register's value. */ - this_saved_regs[regnum].regnum = -1; + this_saved_regs[regnum].realnum = -1; this_saved_regs[regnum].addr = val; } void trad_frame_prev_register (struct frame_info *next_frame, - struct trad_frame this_saved_regs[], + struct trad_frame_saved_reg this_saved_regs[], int regnum, int *optimizedp, enum lval_type *lvalp, CORE_ADDR *addrp, int *realnump, void *bufferp) { struct gdbarch *gdbarch = get_frame_arch (next_frame); - if (this_saved_regs[regnum].regnum >= 0 + if (this_saved_regs[regnum].realnum >= 0 && this_saved_regs[regnum].addr != 0) { - /* The register was saved on the stack, fetch it. */ + /* The register was saved in memory. */ *optimizedp = 0; *lvalp = lval_memory; *addrp = this_saved_regs[regnum].addr; @@ -75,11 +75,11 @@ trad_frame_prev_register (struct frame_info *next_frame, register_size (gdbarch, regnum)); } } - else if (this_saved_regs[regnum].regnum >= 0 + else if (this_saved_regs[regnum].realnum >= 0 && this_saved_regs[regnum].addr == 0) { /* As the next frame to return the value of the register. */ - frame_register_unwind (next_frame, this_saved_regs[regnum].regnum, + frame_register_unwind (next_frame, this_saved_regs[regnum].realnum, optimizedp, lvalp, addrp, realnump, bufferp); } else diff --git a/gdb/trad-frame.h b/gdb/trad-frame.h index ab58e358e31..4d753153b2e 100644 --- a/gdb/trad-frame.h +++ b/gdb/trad-frame.h @@ -22,33 +22,45 @@ #ifndef TRAD_FRAME_H #define TRAD_FRAME_H -struct trad_frame +/* A traditional saved regs table, indexed by REGNUM, encoding where + the value of REGNUM for the previous frame can be found in this + frame. + + The table is initialized with an identity encoding (ADDR == 0, + REALNUM == REGNUM) indicating that the value of REGNUM in the + previous frame can be found in register REGNUM (== REALNUM) in this + frame. + + The initial encoding can then be changed: + + Modify ADDR (REALNUM >= 0, ADDR != 0) to indicate that the value of + register REGNUM in the previous frame can be found in memory at + ADDR in this frame. + + Modify REALNUM (REALNUM >= 0, ADDR == 0) to indicate that the value + of register REGNUM in the previous frame is found in register + REALNUM in this frame. + + Call trad_frame_register_value (REALNUM < 0) to indicate that the + value of register REGNUM in the previous frame is found in ADDR. */ + +struct trad_frame_saved_reg { - /* If non-zero (and regnum >= 0), the stack address at which the - register is saved. By default, it is assumed that the register - was not saved (addr == 0). Remember, a LONGEST can always fit a - CORE_ADDR. */ - LONGEST addr; - /* else, if regnum >=0 (and addr == 0), the REGNUM that contains - this registers value. By default, it is assumed that the - registers are not moved (the register's value is still in that - register and regnum == the index). */ - int regnum; - /* else, if regnum < 0, ADDR is the registers value. */ + LONGEST addr; /* A CORE_ADDR fits in a longest. */ + int realnum; }; -/* Convenience function, encode the register's value in the - trad-frame. */ -void trad_frame_register_value (struct trad_frame this_saved_regs[], +/* Convenience function, encode REGNUM's location in the trad-frame. */ +void trad_frame_register_value (struct trad_frame_saved_reg this_saved_regs[], int regnum, LONGEST val); /* Return a freshly allocated (and initialized) trad_frame array. */ -struct trad_frame *trad_frame_alloc_saved_regs (struct frame_info *next_frame); +struct trad_frame_saved_reg *trad_frame_alloc_saved_regs (struct frame_info *next_frame); /* Given the trad_frame info, return the location of the specified register. */ void trad_frame_prev_register (struct frame_info *next_frame, - struct trad_frame this_saved_regs[], + struct trad_frame_saved_reg this_saved_regs[], int regnum, int *optimizedp, enum lval_type *lvalp, CORE_ADDR *addrp, int *realnump, void *bufferp); -- 2.30.2