From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28834 invoked by alias); 7 May 2003 22:57:48 -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 28826 invoked from network); 7 May 2003 22:57:47 -0000 Received: from unknown (HELO touchme.toronto.redhat.com) (207.219.125.105) by sources.redhat.com with SMTP; 7 May 2003 22:57:47 -0000 Received: from redhat.com (toocool.toronto.redhat.com [172.16.14.72]) by touchme.toronto.redhat.com (Postfix) with ESMTP id 423DF800030; Wed, 7 May 2003 18:57:47 -0400 (EDT) Message-ID: <3EB98F6B.2030802@redhat.com> Date: Wed, 07 May 2003 22:57:00 -0000 From: "J. Johnston" Organization: Red Hat Inc. User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020823 Netscape/7.0 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Jim Blandy Cc: gdb-patches@sources.redhat.com Subject: Re: RFA: dwarf2read.c patch References: <3EB6E10A.50104@redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2003-05/txt/msg00111.txt.bz2 Patch checked in. Thanks. -- Jeff J. Jim Blandy wrote: > 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: >