From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9043 invoked by alias); 7 May 2003 21:44:45 -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 9019 invoked from network); 7 May 2003 21:44:44 -0000 Received: from unknown (HELO zenia.red-bean.com) (12.222.151.100) by sources.redhat.com with SMTP; 7 May 2003 21:44:44 -0000 Received: from zenia.red-bean.com (localhost.localdomain [127.0.0.1]) by zenia.red-bean.com (8.12.5/8.12.5) with ESMTP id h47Lo6Fq025872; Wed, 7 May 2003 16:50:06 -0500 Received: (from jimb@localhost) by zenia.red-bean.com (8.12.5/8.12.5/Submit) id h47Lo6Xh025868; Wed, 7 May 2003 16:50:06 -0500 To: "J. Johnston" Cc: gdb-patches@sources.redhat.com Subject: Re: RFA: dwarf2read.c patch References: <3EB6E10A.50104@redhat.com> From: Jim Blandy Date: Wed, 07 May 2003 21:44:00 -0000 In-Reply-To: <3EB6E10A.50104@redhat.com> Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2.95 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2003-05/txt/msg00104.txt.bz2 Looks good to me --- please commit this. "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. > 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: