Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* Re: gdb/2009: Segmentation faults on AMD64
@ 2005-10-16 12:59 Jeroen Dekkers
       [not found] ` <vt21x2l6y1b.fsf@theseus.home.>
  0 siblings, 1 reply; 2+ messages in thread
From: Jeroen Dekkers @ 2005-10-16 12:59 UTC (permalink / raw)
  To: gdb-gnats, nobody, alvaro, gdb-prs, gdb-patches

I debugged this segfault and it is caused by incorrect debug
information generated by GCC on AMD64, see http://gcc.gnu.org/PR24400.
The problem is that the filenumbers in the .debug_macinfo arex
wrong. They jump from 0xf to 0x11, skipping 0x10, so the last filename
has a number which isn't in the filename table.

GDB blindly uses the number as index into the filename table,
resulting in a segfault. The following patch adds a check whether the
index isn't bigger than the size of the table.


2005-10-16  Jeroen Dekkers  <jeroen@dekkers.cx>

	Fix PR gdb/2009.
	* dwarf2read.c (file_full_name): Check whether FILE isn't bigger
	than the size of the filename table.


Index: dwarf2read.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2read.c,v
retrieving revision 1.183
diff -u -p -r1.183 dwarf2read.c
--- dwarf2read.c	1 Aug 2005 04:06:27 -0000	1.183
+++ dwarf2read.c	16 Oct 2005 12:43:23 -0000
@@ -8810,7 +8810,19 @@ dwarf_alloc_die (void)
 static char *
 file_full_name (int file, struct line_header *lh, const char *comp_dir)
 {
-  struct file_entry *fe = &lh->file_names[file - 1];
+  struct file_entry *fe;
+
+  /* Check whether FILE isn't bigger than the number of filenames in
+     the table. There used to be a bug in GCC (PR24400) which would
+     generate an index that is one higher than the size of the
+     table. */
+  if (file > lh->num_file_names)
+    {
+      complaint (&symfile_complaints, _("invalid file index number in macro section"));
+      return xstrdup ("/invalid/file/index");
+    }
+      
+  fe = &lh->file_names[file - 1];
   
   if (IS_ABSOLUTE_PATH (fe->name))
     return xstrdup (fe->name);


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: gdb/2009: Segmentation faults on AMD64
       [not found] ` <vt21x2l6y1b.fsf@theseus.home.>
@ 2005-10-16 21:23   ` Jeroen Dekkers
  0 siblings, 0 replies; 2+ messages in thread
From: Jeroen Dekkers @ 2005-10-16 21:23 UTC (permalink / raw)
  To: Jim Blandy; +Cc: gdb-gnats, alvaro, gdb-patches

At Sun, 16 Oct 2005 12:51:12 -0700,
Jim Blandy wrote:
> 
> 
> Jeroen Dekkers <jeroen@dekkers.cx> writes:
> > I debugged this segfault and it is caused by incorrect debug
> > information generated by GCC on AMD64, see http://gcc.gnu.org/PR24400.
> > The problem is that the filenumbers in the .debug_macinfo arex
> > wrong. They jump from 0xf to 0x11, skipping 0x10, so the last filename
> > has a number which isn't in the filename table.
> >
> > GDB blindly uses the number as index into the filename table,
> > resulting in a segfault. The following patch adds a check whether the
> > index isn't bigger than the size of the table.
> 
> Please try this patch:
> 
> http://sourceware.org/ml/gdb-patches/2005-09/msg00236.html

It works fine here. Thanks!

Jeroen Dekkers


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-10-16 21:23 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-10-16 12:59 gdb/2009: Segmentation faults on AMD64 Jeroen Dekkers
     [not found] ` <vt21x2l6y1b.fsf@theseus.home.>
2005-10-16 21:23   ` Jeroen Dekkers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox