From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6267 invoked by alias); 31 Jul 2003 15:48:45 -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 6259 invoked from network); 31 Jul 2003 15:48:42 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sources.redhat.com with SMTP; 31 Jul 2003 15:48:42 -0000 Received: from drow by nevyn.them.org with local (Exim 4.20 #1 (Debian)) id 19iFfB-0002nJ-UZ; Thu, 31 Jul 2003 11:48:21 -0400 Date: Thu, 31 Jul 2003 15:48:00 -0000 From: Daniel Jacobowitz To: "H. J. Lu" Cc: GDB Subject: Re: Does DW_OP_deref work? Message-ID: <20030731154821.GA10106@nevyn.them.org> Mail-Followup-To: "H. J. Lu" , GDB References: <20030730215421.GA26408@lucon.org> <20030730215612.GB15640@nevyn.them.org> <20030731002306.GA28960@lucon.org> <20030731002753.GA18866@nevyn.them.org> <20030731154405.GA11592@lucon.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030731154405.GA11592@lucon.org> User-Agent: Mutt/1.5.1i X-SW-Source: 2003-07/txt/msg00368.txt.bz2 On Thu, Jul 31, 2003 at 08:44:05AM -0700, H. J. Lu wrote: > On Wed, Jul 30, 2003 at 08:27:53PM -0400, Daniel Jacobowitz wrote: > > On Wed, Jul 30, 2003 at 05:23:06PM -0700, H. J. Lu wrote: > > > On Wed, Jul 30, 2003 at 05:56:12PM -0400, Daniel Jacobowitz wrote: > > > > On Wed, Jul 30, 2003 at 02:54:21PM -0700, H. J. Lu wrote: > > > > > Does DW_OP_deref work correctly with gdb? > > > > > > > > That depends on the context. Things that use decode_locdesc, probably > > > > not. As we find time, things are being converted to the full > > > > expression evaluator. Location descriptions and frame bases should > > > > work. > > > > > > I don't think it does. Intel Fortran compiler generartes DW_OP_deref. > > > I got > > > > Location descriptions for parameters may not work fully. Feel free to > > fix it, or to investigate the reasons why more thoroughly - search for > > LOC_COMPUTED_ARG, but I don't even think we generate those yet. > > > > The problem is gdb has a different idea about DW_OP_deref than Intel > compiler. From what I can tell in DWARF 3 draft, DW_OP_deref specifies > an address. But dwarf2read.c and gdb doesn't support it at all. There > is LOC_REF_ARG, which is an offset from the frame base register. > new_symbol in dwarf2read.c has > > else if (offreg) > { > if (isderef) > { > if (basereg != frame_base_reg) > dwarf2_complex_location_expr_complaint (); > SYMBOL_CLASS (sym) = LOC_REF_ARG; > } > else > { > SYMBOL_CLASS (sym) = LOC_BASEREG_ARG; > SYMBOL_BASEREG (sym) = DWARF2_REG_TO_REGNUM (basereg); > } > } > else > { > SYMBOL_CLASS (sym) = LOC_ARG; > } > > Since DW_OP_deref doesn't use basereg nor frame_base_reg, SYMBOL_CLASS > is set to LOC_ARG. DW_OP_deref needs something like LOC_DEREF_ARG, > which works on address instead of offset from a base register. Please look more closely at what I suggested, and at how DW_OP_deref works for DW_TAG_variable (as opposed to DW_TAG_formal_parameter). All of the above should be turned into LOC_COMPUTED_ARG. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer