From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8381 invoked by alias); 12 Jul 2012 22:50:52 -0000 Received: (qmail 8371 invoked by uid 22791); 12 Jul 2012 22:50:50 -0000 X-SWARE-Spam-Status: No, hits=-4.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_BJ,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-yw0-f73.google.com (HELO mail-yw0-f73.google.com) (209.85.213.73) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 12 Jul 2012 22:50:37 +0000 Received: by yhpp61 with SMTP id p61so290703yhp.0 for ; Thu, 12 Jul 2012 15:50:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=to:subject:message-id:date:from:x-gm-message-state; bh=MUxRP97X+FHioaPN4kLSnXA9SQTE00l6Dc8rpKalfV0=; b=K08gA+DKTeVATzmee//5jCXL5uEC8nIBIuhKj9Ry8LyqUZcnLFOwoyaeqQbkColIFn P++XjiPU9UbyiXkuDjcQjkSD6nwT7DSCh2fQDaZNjA/gNYjlN4fV2klLIIMG+qqPEIaX cCmtl/T6Mw+PLCJUpmIl3bp01tORngm4CVpQ+/RF4oakWmwfaV9apunRT5QFXOo2tLCS Zf16N5DJCFoRewWdXHreptoICdHch7yfqrNFtKUklev7slPDxIm9xMw58zjGlBSB2C9i hyuY1y2Je1Di4JBU+M/s4LX0aSlMBXizikGxrDtpQvpgcD7GkqEdt4bTuerqo5+oCQlh 4rPg== Received: by 10.236.191.40 with SMTP id f28mr185220yhn.2.1342133436936; Thu, 12 Jul 2012 15:50:36 -0700 (PDT) Received: by 10.236.191.40 with SMTP id f28mr185217yhn.2.1342133436878; Thu, 12 Jul 2012 15:50:36 -0700 (PDT) Received: from wpzn3.hot.corp.google.com (216-239-44-65.google.com [216.239.44.65]) by gmr-mx.google.com with ESMTPS id r48si1758863yhm.3.2012.07.12.15.50.36 (version=TLSv1/SSLv3 cipher=AES128-SHA); Thu, 12 Jul 2012 15:50:36 -0700 (PDT) Received: from ruffy2.mtv.corp.google.com (ruffy2.mtv.corp.google.com [172.18.110.129]) by wpzn3.hot.corp.google.com (Postfix) with ESMTP id C28FA100047 for ; Thu, 12 Jul 2012 15:50:36 -0700 (PDT) Received: by ruffy2.mtv.corp.google.com (Postfix, from userid 67641) id 6D0BB1E1268; Thu, 12 Jul 2012 15:50:36 -0700 (PDT) To: gdb-patches@sourceware.org Subject: [RFA] Ignore DW_AT_ranges starting at zero if !has_section_at_zero Message-Id: <20120712225036.6D0BB1E1268@ruffy2.mtv.corp.google.com> Date: Thu, 12 Jul 2012 22:50:00 -0000 From: dje@google.com (Doug Evans) X-Gm-Message-State: ALoCoQmCz5CRLreS8rkvPjnW5SYlOah4ha7u0ciV9truI9yRtlrNqAtYvA5bUCZcKIPwqVx6zB+60kuaxVDBrdH3SjjA1UMiL+q1zry5U16MkpAQNd/ju1RVyDXNVBGsNXzfpl0ZRYBH3hA6PKIUg/2Nl4h/OFYtPXq6tq4Bdz2bUNMJYJ0H0yWMno6UfuEEnv8x8DYzGp3Ud7AxQRx21mZ2Z8t7tSbg6w== X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-07/txt/msg00171.txt.bz2 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 * 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); } } }