From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23628 invoked by alias); 7 May 2003 21:58:11 -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 23621 invoked from network); 7 May 2003 21:58:11 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 7 May 2003 21:58:11 -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 h47LwBH19180 for ; Wed, 7 May 2003 17:58:11 -0400 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 h47LwBI03040; Wed, 7 May 2003 17:58:11 -0400 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 h47Lw9j09408; Wed, 7 May 2003 17:58:10 -0400 Received: by localhost.redhat.com (Postfix, from userid 469) id 5C02C2C43B; Wed, 7 May 2003 18:03:10 -0400 (EDT) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16057.33438.153333.497355@localhost.redhat.com> Date: Wed, 07 May 2003 21:58:00 -0000 To: "J. Johnston" Cc: gdb-patches@sources.redhat.com Subject: Re: RFA: dwarf2read.c patch In-Reply-To: <3EB6E10A.50104@redhat.com> References: <3EB6E10A.50104@redhat.com> X-SW-Source: 2003-05/txt/msg00107.txt.bz2 J. Johnston writes: > The following patch fixes a problem on ia64. In dwarf2read.c, > dwarf_decode_lines(), the function check_cu_functions() is called > to check for a specific scenario caused by gcc. > > The function takes an address and returns an address. In some > cases, it will return the lowpc value of the function rather than > the address that was input. > > On the ia64, this causes problems because the line table info spit > out by the compiler is often specified with relative addresses. > As well, ia64 addresses are special as they encode a slot number which goes > 0, 1, 2, then skips to the next quadword boundary. For example, > > 0x00, 0x01, 0x02, 0x10, 0x11, 0x12, 0x20, 0x21, 0x22, ... > > Addresses such as 0x0e or 0x0f are invalid and cause an error to > occur if, say, a breakpoint was attempted to be inserted there. > > Now, in dwarf_decode_lines(), if we update the address counter when we call > check_cu_functions(), adding relative offsets in subsequent entries often results in > invalid addresses. > > This patch makes it so the check_cu_functions() call is only used to > alter the address passed to record_line(); the calculated address is left untouched > so subsequent relative operations result in valid results. > > Tested on ia64 and x86. > > Ok to commit? > > -- Jeff J. > > 2003-05-05 Jeff Johnston > > * dwarf2read.c (dwarf_decode_lines): Only use output of check_cu_functions() > when calling record_line(). Do not update the current address. yes, ok. elena > Index: dwarf2read.c > =================================================================== > RCS file: /cvs/src/src/gdb/dwarf2read.c,v > retrieving revision 1.90 > diff -u -p -r1.90 dwarf2read.c > --- dwarf2read.c 15 Apr 2003 23:07:11 -0000 1.90 > +++ dwarf2read.c 5 May 2003 21:55:26 -0000 > @@ -4878,8 +4878,8 @@ dwarf_decode_lines (struct line_header * > * lh->minimum_instruction_length; > line += lh->line_base + (adj_opcode % lh->line_range); > /* append row to matrix using current values */ > - address = check_cu_functions (address); > - record_line (current_subfile, line, address); > + record_line (current_subfile, line, > + check_cu_functions (address)); > basic_block = 1; > } > else switch (op_code) > @@ -4925,8 +4925,8 @@ dwarf_decode_lines (struct line_header * > } > break; > case DW_LNS_copy: > - address = check_cu_functions (address); > - record_line (current_subfile, line, address); > + record_line (current_subfile, line, > + check_cu_functions (address)); > basic_block = 0; > break; > case DW_LNS_advance_pc: