summaryrefslogtreecommitdiff
path: root/gdb/trad-frame.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/trad-frame.h')
-rw-r--r--gdb/trad-frame.h46
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);