+2003-06-08 Andrew Cagney <cagney@redhat.com>
+
+ * 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 <cagney@redhat.com>
* acinclude.m4 (gcc_AC_CHECK_DECL, (gcc_AC_CHECK_DECL): Stolen
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
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;
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
#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);