diff options
Diffstat (limited to 'gdb/trad-frame.h')
-rw-r--r-- | gdb/trad-frame.h | 46 |
1 files changed, 29 insertions, 17 deletions
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); |