From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19123 invoked by alias); 31 Dec 2004 19:57:43 -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 19060 invoked from network); 31 Dec 2004 19:57:35 -0000 Received: from unknown (HELO rwcrmhc13.comcast.net) (204.127.198.39) by sourceware.org with SMTP; 31 Dec 2004 19:57:35 -0000 Received: from lucon.org ([24.6.212.230]) by comcast.net (rwcrmhc13) with ESMTP id <2004123119573401500cclgue>; Fri, 31 Dec 2004 19:57:35 +0000 Received: by lucon.org (Postfix, from userid 1000) id 89FC5640F4; Fri, 31 Dec 2004 11:57:34 -0800 (PST) Date: Fri, 31 Dec 2004 19:57:00 -0000 From: "H. J. Lu" To: Daniel Berlin Cc: Daniel Jacobowitz , gcc@gcc.gnu.org, GDB Subject: Re: Gdb generates location list without DW_AT_frame_base Message-ID: <20041231195734.GA4125@lucon.org> References: <20041223034318.GA19580@nevyn.them.org> <20041230192424.GA16440@lucon.org> <20041230193618.GA16661@lucon.org> <20041230195642.GA16984@lucon.org> <20041230200720.GA11027@nevyn.them.org> <20041230202346.GA17311@lucon.org> <20041230202828.GA11668@nevyn.them.org> <1104440193.20792.38.camel@DYN253786YKT> <20041230210451.GA17966@lucon.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.1i X-SW-Source: 2004-12/txt/msg00143.txt.bz2 On Thu, Dec 30, 2004 at 07:35:13PM -0500, Daniel Berlin wrote: > > > On Thu, 30 Dec 2004, H. J. Lu wrote: > > >On Thu, Dec 30, 2004 at 03:56:33PM -0500, Daniel Berlin wrote: > >> > >>>And what's in the location lists? If it's DW_OP_fbreg, then I presume > >>>it's a GCC bug. According to my reading of the DWARF spec, anyway. > >>It is. > >> > >>I added code to tell it when not to use fbreg, but i only told it not to > >>use fbreg in the location expression when we were outputting the > >>frame_base attribute. > >> > >>However, it appears we don't output a frame base attribute for external > >>procedures, so we need to tell it it can't use if we don't have a frame > >>base attribute. > >> > >>You just need to change when loc_descriptor is called with a second > >>parameter of true/1 to fix this. > > > >Do you have a patch I can try? > > This may not fix all of them, but it should help. > Index: dwarf2out.c > =================================================================== > RCS file: /cvs/gcc/gcc/gcc/dwarf2out.c,v > retrieving revision 1.564 > diff -u -p -r1.564 dwarf2out.c > --- dwarf2out.c 24 Dec 2004 05:23:07 -0000 1.564 > +++ dwarf2out.c 31 Dec 2004 00:34:38 -0000 > @@ -9980,6 +9980,7 @@ add_location_or_const_value_attribute (d > rtx rtl; > dw_loc_descr_ref descr; > var_loc_list *loc_list; > + bool can_use_fb = attr != DW_AT_frame_base && !DECL_EXTERNAL (decl); > > if (TREE_CODE (decl) == ERROR_MARK) > return; > @@ -10049,7 +10050,7 @@ add_location_or_const_value_attribute (d > varloc = NOTE_VAR_LOCATION (node->var_loc_note); > add_loc_descr_to_loc_list (&list, > loc_descriptor (varloc, > - attr != DW_AT_frame_base), > + can_use_fb), > node->label, node->next->label, secname); > } > > @@ -10070,7 +10071,7 @@ add_location_or_const_value_attribute (d > } > add_loc_descr_to_loc_list (&list, > loc_descriptor (varloc, > - attr != DW_AT_frame_base), > + can_use_fb), > node->label, endname, secname); > } > There are several problems with this patch: 1. It checks DECL_EXTERNAL. Did you mean TREE_PUBLIC? 2. It doesn't cover PARM_DECL nor RESULT_DECL. 3. For #0 loc_descriptor (rtl=0xb7d67abc, can_use_fbreg=1 '\001') at /net/gnu/export/gnu/src/gcc/gcc/gcc/dwarf2out.c:8740 #1 0x0813bd45 in loc_descriptor_from_tree_1 (loc=0xb7d60870, want_address=2) at /net/gnu/export/gnu/src/gcc/gcc/gcc/dwarf2out.c:8928 #2 0x0813c2b7 in add_location_or_const_value_attribute (die=0xb7d66f3c, decl=0xb7d60870, attr=DW_AT_location) at /net/gnu/export/gnu/src/gcc/gcc/gcc/dwarf2out.c:9247 #3 0x08141ec6 in gen_formal_parameter_die (node=0xb7d60870, context_die=0xb7d66ea0) at /net/gnu/export/gnu/src/gcc/gcc/gcc/dwarf2out.c:11001 #4 0x0813ded2 in gen_decl_die (decl=0xb7d60870, context_die=0xb7d66ea0) at /net/gnu/export/gnu/src/gcc/gcc/gcc/dwarf2out.c:12700 #5 0x08140479 in gen_subprogram_die (decl=0xb7d601b0, context_die=0x84da799) at /net/gnu/export/gnu/src/gcc/gcc/gcc/dwarf2out.c:11382 it comes from 8926 /* Certain constructs can only be represented at top-level. */ 8927 if (want_address == 2) 8928 return loc_descriptor (rtl, true); 8929 H.J.