2003-06-08 Andrew Cagney <cagney@redhat.com>
[deliverable/binutils-gdb.git] / gdb / trad-frame.h
index ab58e358e312807d167c753a3fc8e4917a31eac9..4d753153b2e36614a61123c953217170f8558744 100644 (file)
 #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);
This page took 0.024122 seconds and 4 git commands to generate.