2008-09-19 Andrew Stubbs <ams@codesourcery.com>

* frame.c (get_frame_register_bytes): Detect bad debug info.
This commit is contained in:
Andrew Stubbs 2008-09-19 18:12:17 +00:00
parent 5db484ff3d
commit 3f27f2a479
2 changed files with 22 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2008-09-19 Andrew Stubbs <ams@codesourcery.com>
* frame.c (get_frame_register_bytes): Detect bad debug info.
2008-09-17 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix a crash on uninitialized ECS->EVENT_THREAD for a newly found thread.

View File

@ -796,6 +796,8 @@ get_frame_register_bytes (struct frame_info *frame, int regnum,
CORE_ADDR offset, int len, gdb_byte *myaddr)
{
struct gdbarch *gdbarch = get_frame_arch (frame);
int i;
int maxsize;
/* Skip registers wholly inside of OFFSET. */
while (offset >= register_size (gdbarch, regnum))
@ -804,6 +806,22 @@ get_frame_register_bytes (struct frame_info *frame, int regnum,
regnum++;
}
/* Detect bad debug info. */
maxsize = -offset;
for (i = regnum; i < gdbarch_num_regs (gdbarch); i++)
{
int thissize = register_size (gdbarch, i);
if (thissize == 0)
break;
maxsize += thissize;
}
if (len > maxsize)
{
warning (_("Bad debug information detected: "
"Attempt to read %d bytes from registers."), len);
return 0;
}
/* Copy the data. */
while (len > 0)
{