/* Traditional frame unwind support, for GDB the GNU Debugger.
- Copyright (C) 2003, 2004, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
+ Copyright (C) 2003-2018 Free Software Foundation, Inc.
This file is part of GDB.
return this_trad_cache;
}
-/* A traditional frame is unwound by analysing the function prologue
- and using the information gathered to track registers. For
- non-optimized frames, the technique is reliable (just need to check
- for all potential instruction sequences). */
-
struct trad_frame_saved_reg *
-trad_frame_alloc_saved_regs (struct frame_info *this_frame)
+trad_frame_alloc_saved_regs (struct gdbarch *gdbarch)
{
int regnum;
- struct gdbarch *gdbarch = get_frame_arch (this_frame);
int numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
struct trad_frame_saved_reg *this_saved_regs
= FRAME_OBSTACK_CALLOC (numregs, struct trad_frame_saved_reg);
return this_saved_regs;
}
+/* A traditional frame is unwound by analysing the function prologue
+ and using the information gathered to track registers. For
+ non-optimized frames, the technique is reliable (just need to check
+ for all potential instruction sequences). */
+
+struct trad_frame_saved_reg *
+trad_frame_alloc_saved_regs (struct frame_info *this_frame)
+{
+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
+
+ return trad_frame_alloc_saved_regs (gdbarch);
+}
+
enum { TF_REG_VALUE = -1, TF_REG_UNKNOWN = -2 };
int
this_saved_regs[regnum].addr = val;
}
+/* See trad-frame.h. */
+
+void
+trad_frame_set_realreg (struct trad_frame_saved_reg this_saved_regs[],
+ int regnum, int realreg)
+{
+ this_saved_regs[regnum].realreg = realreg;
+ this_saved_regs[regnum].addr = -1;
+}
+
+/* See trad-frame.h. */
+
+void
+trad_frame_set_addr (struct trad_frame_saved_reg this_saved_regs[],
+ int regnum, CORE_ADDR addr)
+{
+ this_saved_regs[regnum].realreg = regnum;
+ this_saved_regs[regnum].addr = addr;
+}
+
void
trad_frame_set_reg_value (struct trad_frame_cache *this_trad_cache,
int regnum, LONGEST val)
trad_frame_set_reg_realreg (struct trad_frame_cache *this_trad_cache,
int regnum, int realreg)
{
- this_trad_cache->prev_regs[regnum].realreg = realreg;
- this_trad_cache->prev_regs[regnum].addr = -1;
+ trad_frame_set_realreg (this_trad_cache->prev_regs, regnum, realreg);
}
void
trad_frame_set_reg_addr (struct trad_frame_cache *this_trad_cache,
int regnum, CORE_ADDR addr)
{
- this_trad_cache->prev_regs[regnum].addr = addr;
+ trad_frame_set_addr (this_trad_cache->prev_regs, regnum, addr);
}
void