Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: dje@google.com (Doug Evans)
To: gdb-patches@sourceware.org
Subject: [RFA] Ignore DW_AT_ranges starting at zero if !has_section_at_zero
Date: Thu, 12 Jul 2012 22:50:00 -0000	[thread overview]
Message-ID: <20120712225036.6D0BB1E1268@ruffy2.mtv.corp.google.com> (raw)

Hi.

I was root-causing an instance of
"pc 0x2a in read in psymtab, but not in symtab"
and found that it was caused by an address range of 0-75 being
recorded in the psymtab addrmap but not the symtab addrmap.

The discrepancy between the two addrmaps is a separate patch,
as is whether we can just have one addrmap instead of two.
This patch ignores address ranges that begin at zero if there
is no section at zero to avoid populating the tables with bad data.

Ok to check in?

2012-07-12  Doug Evans  <dje@google.com>

	* dwarf2read.c (dwarf2_ranges_read): Ignore ranges starting at zero if
	there's no section at address zero.
	(dwarf2_record_block_ranges): Ditto.

Index: dwarf2read.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2read.c,v
retrieving revision 1.684
diff -u -p -r1.684 dwarf2read.c
--- dwarf2read.c	10 Jul 2012 20:28:32 -0000	1.684
+++ dwarf2read.c	12 Jul 2012 22:43:38 -0000
@@ -9051,6 +9051,17 @@ dwarf2_ranges_read (unsigned offset, COR
       range_beginning += base;
       range_end += base;
 
+      /* A not-uncommon case of bad debug info.
+	 Don't pollute the addrmap with bad data.  */
+      if (range_beginning + baseaddr == 0
+	  && !dwarf2_per_objfile->has_section_at_zero)
+	{
+	  complaint (&symfile_complaints,
+		     _(".debug_ranges entry has start address of zero"
+		       " [in module %s]"), objfile->name);
+	  continue;
+	}
+
       if (ranges_pst != NULL)
 	addrmap_set_empty (objfile->psymtabs_addrmap,
 			   range_beginning + baseaddr,
@@ -9366,9 +9377,20 @@ dwarf2_record_block_ranges (struct die_i
 	      if (start == end)
 		continue;
 
-              record_block_range (block,
-                                  baseaddr + base + start,
-                                  baseaddr + base + end - 1);
+	      start += base + baseaddr;
+	      end += base + baseaddr;
+
+	      /* A not-uncommon case of bad debug info.
+		 Don't pollute the addrmap with bad data.  */
+	      if (start == 0 && !dwarf2_per_objfile->has_section_at_zero)
+		{
+		  complaint (&symfile_complaints,
+			     _(".debug_ranges entry has start address of zero"
+			       " [in module %s]"), objfile->name);
+		  continue;
+		}
+
+              record_block_range (block, start, end - 1);
             }
         }
     }


             reply	other threads:[~2012-07-12 22:50 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-12 22:50 Doug Evans [this message]
2012-07-13  1:33 ` asmwarrior
2012-07-18 21:06 ` Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120712225036.6D0BB1E1268@ruffy2.mtv.corp.google.com \
    --to=dje@google.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox