From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31297 invoked by alias); 30 Jul 2003 21:42:54 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 31288 invoked from network); 30 Jul 2003 21:42:53 -0000 Received: from unknown (HELO rwcrmhc13.comcast.net) (204.127.198.39) by sources.redhat.com with SMTP; 30 Jul 2003 21:42:53 -0000 Received: from lucon.org ([12.234.88.5]) by comcast.net (rwcrmhc13) with ESMTP id <2003073021425201500qu8the>; Wed, 30 Jul 2003 21:42:52 +0000 Received: by lucon.org (Postfix, from userid 1000) id 23C1B2C4EB; Wed, 30 Jul 2003 21:42:52 +0000 (UTC) Date: Wed, 30 Jul 2003 21:42:00 -0000 From: "H. J. Lu" To: GDB Subject: DW_FORM_ref_addr dosn't work Message-ID: <20030730214252.GA26082@lucon.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.1i X-SW-Source: 2003-07/txt/msg00347.txt.bz2 DW_FORM_ref_addr can reference an entry in a different compilation unit, even from a different shared object. But die_ref_table only contains DIEs in one single compilation unit. Why do we do that? What is the best way to fix it? BTW, I am enclosing my quick dirty hack for reference. H.J. ---- --- dwarf2read.c.ref 2003-07-30 09:43:51.000000000 -0700 +++ dwarf2read.c 2003-07-30 14:41:24.000000000 -0700 @@ -1195,6 +1195,7 @@ dwarf2_build_psymtabs_hard (struct objfi struct partial_symtab *pst; struct cleanup *back_to; CORE_ADDR lowpc, highpc; + struct die_info *dies; info_ptr = dwarf_info_buffer; abbrev_ptr = dwarf_abbrev_buffer; @@ -1280,6 +1281,8 @@ dwarf2_build_psymtabs_hard (struct objfi dwarf2_read_abbrevs (abfd, &cu_header); make_cleanup (dwarf2_empty_abbrev_table, cu_header.dwarf2_abbrevs); + dies = read_comp_unit (info_ptr, abfd, &cu_header); + /* Read the compilation unit die */ info_ptr = read_partial_die (&comp_unit_die, abfd, info_ptr, &cu_header); @@ -3654,9 +3657,11 @@ read_comp_unit (char *info_ptr, bfd *abf char *cur_ptr; int nesting_level; +#if 0 /* Reset die reference table; we are building new ones now. */ dwarf2_empty_hash_tables (); +#endif cur_ptr = info_ptr; nesting_level = 0;