forked from Imagelibrary/binutils-gdb
AArch64: Ensure regcache is reset between tests
A recent change made the AArch64 self tests resuse the saved regs cache, rather than creating a new one. Ensure it is reset to default values between tests. Do this by splitting the reset functionality from trad_frame_alloc_saved_regs into a new function. Fixes selftest on AArch64. gdb/ChangeLog: * aarch64-tdep.c (aarch64_analyze_prologue_test): Reset saved regs. * trad-frame.c (trad_frame_reset_saved_regs): New function. (trad_frame_alloc_saved_regs): Call trad_frame_reset_saved_regs. * trad-frame.h (trad_frame_reset_saved_regs): New declaration.
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
2019-04-11 Alan Hayward <alan.hayward@arm.com>
|
||||
|
||||
* aarch64-tdep.c (aarch64_analyze_prologue_test): Reset saved regs.
|
||||
* trad-frame.c (trad_frame_reset_saved_regs): New function.
|
||||
(trad_frame_alloc_saved_regs): Call trad_frame_reset_saved_regs.
|
||||
* trad-frame.h (trad_frame_reset_saved_regs): New declaration.
|
||||
|
||||
2019-04-10 Kevin Buettner <kevinb@redhat.com>
|
||||
|
||||
* amd64-linux-nat.c (amd64_linux_collect_native_gregset): New
|
||||
|
||||
@@ -665,6 +665,7 @@ aarch64_analyze_prologue_test (void)
|
||||
};
|
||||
instruction_reader_test reader (insns);
|
||||
|
||||
trad_frame_reset_saved_regs (gdbarch, cache.saved_regs);
|
||||
CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache, reader);
|
||||
|
||||
SELF_CHECK (end == 4 * 5);
|
||||
@@ -707,6 +708,7 @@ aarch64_analyze_prologue_test (void)
|
||||
};
|
||||
instruction_reader_test reader (insns);
|
||||
|
||||
trad_frame_reset_saved_regs (gdbarch, cache.saved_regs);
|
||||
CORE_ADDR end = aarch64_analyze_prologue (gdbarch, 0, 128, &cache,
|
||||
reader);
|
||||
|
||||
|
||||
@@ -44,19 +44,28 @@ trad_frame_cache_zalloc (struct frame_info *this_frame)
|
||||
return this_trad_cache;
|
||||
}
|
||||
|
||||
/* See trad-frame.h. */
|
||||
|
||||
void
|
||||
trad_frame_reset_saved_regs (struct gdbarch *gdbarch,
|
||||
struct trad_frame_saved_reg *regs)
|
||||
{
|
||||
int numregs = gdbarch_num_cooked_regs (gdbarch);
|
||||
for (int regnum = 0; regnum < numregs; regnum++)
|
||||
{
|
||||
regs[regnum].realreg = regnum;
|
||||
regs[regnum].addr = -1;
|
||||
}
|
||||
}
|
||||
|
||||
struct trad_frame_saved_reg *
|
||||
trad_frame_alloc_saved_regs (struct gdbarch *gdbarch)
|
||||
{
|
||||
int regnum;
|
||||
int numregs = gdbarch_num_cooked_regs (gdbarch);
|
||||
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].realreg = regnum;
|
||||
this_saved_regs[regnum].addr = -1;
|
||||
}
|
||||
trad_frame_reset_saved_regs (gdbarch, this_saved_regs);
|
||||
return this_saved_regs;
|
||||
}
|
||||
|
||||
|
||||
@@ -113,6 +113,9 @@ int trad_frame_addr_p (struct trad_frame_saved_reg this_saved_regs[],
|
||||
int trad_frame_realreg_p (struct trad_frame_saved_reg this_saved_regs[],
|
||||
int regnum);
|
||||
|
||||
/* Reset the save regs cache, setting register values to -1. */
|
||||
void trad_frame_reset_saved_regs (struct gdbarch *gdbarch,
|
||||
struct trad_frame_saved_reg *regs);
|
||||
|
||||
/* Return a freshly allocated (and initialized) trad_frame array. */
|
||||
struct trad_frame_saved_reg *trad_frame_alloc_saved_regs (struct frame_info *);
|
||||
|
||||
Reference in New Issue
Block a user