From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5064 invoked by alias); 11 Dec 2002 22:34:27 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 5057 invoked from network); 11 Dec 2002 22:34:26 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 11 Dec 2002 22:34:26 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id gBBM8kP11039 for ; Wed, 11 Dec 2002 17:08:46 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id gBBMYQD17330 for ; Wed, 11 Dec 2002 17:34:26 -0500 Received: from localhost.redhat.com (romulus-int.sfbay.redhat.com [172.16.27.46]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id gBBMWTY02272; Wed, 11 Dec 2002 17:34:21 -0500 Received: by localhost.redhat.com (Postfix, from userid 469) id 633B6FF79; Wed, 11 Dec 2002 17:35:04 -0500 (EST) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15863.48536.252516.926020@localhost.redhat.com> Date: Wed, 11 Dec 2002 14:41:00 -0000 To: Alexandre Oliva Cc: gdb-patches@sources.redhat.com Subject: Re: non-contiguous files break dwarf2 init-file recognition In-Reply-To: References: X-SW-Source: 2002-12/txt/msg00380.txt.bz2 Alexandre Oliva writes: > If an object file contains functions in CODE sections that are mapped > to different segments, or just non-contiguous memory areas, and the > entry point of the program happens to be in between such areas, we may > end up picking the wrong comp_unit as init file. This patch fixes it > (as long as the code of the init file itself is contiguous, this > should be fine, otherwise the whole thing has to be redesigned). Ok > to install? > How odd. I am just looking at an old patch that was dealing with DW_AT_ranges, from rth: http://sources.redhat.com/ml/gdb-patches/2001-12/msg00616.html I am trying tointegrate that at the moment because the lexical blocks are broken. (see gdb gnats pr 833). Would that patch help you here? Probably not. Elena > Index: gdb/ChangeLog > from Alexandre Oliva > > * dwarf2read.c (read_file_scope): Handle non-contiguous > comp_units, testing entry_point for every subprogram. > > Index: gdb/dwarf2read.c > =================================================================== > RCS file: /cvs/src/src/gdb/dwarf2read.c,v > retrieving revision 1.78 > diff -u -p -r1.78 dwarf2read.c > --- gdb/dwarf2read.c 11 Dec 2002 20:55:37 -0000 1.78 > +++ gdb/dwarf2read.c 11 Dec 2002 21:42:29 -0000 > @@ -1710,9 +1710,15 @@ read_file_scope (struct die_info *die, s > struct die_info *child_die; > bfd *abfd = objfile->obfd; > struct line_header *line_header = 0; > + CORE_ADDR entry_point = objfile->ei.entry_point - baseaddr; > + int init_file = 0; > > if (!dwarf2_get_pc_bounds (die, &lowpc, &highpc, objfile)) > { > + if (entry_point >= lowpc && entry_point < highpc > + && lowpc != ((CORE_ADDR) -1)) > + init_file = 1; > + > if (die->has_children) > { > child_die = die->next; > @@ -1724,6 +1730,17 @@ read_file_scope (struct die_info *die, s > > if (dwarf2_get_pc_bounds (child_die, &low, &high, objfile)) > { > + /* We want to do this test per subprogram, so > + that, if the comp_unit is not contiguous > + (e.g., it has code in several sections that > + are not mapped to a single segment, such that > + there is code from other comp_units > + interspersed with code from this one), we > + don't get false positives. */ > + if (entry_point >= low && entry_point < high > + && lowpc != ((CORE_ADDR) -1)) > + init_file = 1; > + > lowpc = min (lowpc, low); > highpc = max (highpc, high); > } > @@ -1760,8 +1777,7 @@ read_file_scope (struct die_info *die, s > } > } > > - if (objfile->ei.entry_point >= lowpc && > - objfile->ei.entry_point < highpc) > + if (init_file) > { > objfile->ei.entry_file_lowpc = lowpc; > objfile->ei.entry_file_highpc = highpc; > > -- > Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/ > Red Hat GCC Developer aoliva@{redhat.com, gcc.gnu.org} > CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org} > Free Software Evangelist Professional serial bug killer