From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20319 invoked by alias); 1 Feb 2005 17:25:10 -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 20274 invoked from network); 1 Feb 2005 17:25:04 -0000 Received: from unknown (HELO nevyn.them.org) (66.93.172.17) by sourceware.org with SMTP; 1 Feb 2005 17:25:04 -0000 Received: from drow by nevyn.them.org with local (Exim 4.43 #1 (Debian)) id 1Cw1lj-0000gq-Jl; Tue, 01 Feb 2005 12:24:51 -0500 Date: Tue, 01 Feb 2005 17:25:00 -0000 From: Daniel Jacobowitz To: Con Bradley Cc: gdb@sources.redhat.com Subject: Re: Dwarf 2 Stack pointer unwind. Message-ID: <20050201172451.GA2513@nevyn.them.org> Mail-Followup-To: Con Bradley , gdb@sources.redhat.com References: <734804467.20050201171842@clearspeed.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <734804467.20050201171842@clearspeed.com> User-Agent: Mutt/1.5.5.1+cvs20040105i X-SW-Source: 2005-02/txt/msg00013.txt.bz2 On Tue, Feb 01, 2005 at 05:18:42PM +0000, Con Bradley wrote: > Hi, > We have an ABI where the stack pointer is never saved to the stack > on a function call and there is NO frame pointer. Instead the stack is > maintained by stack pointer increments and decrements. > How does one describe this in Dwarf Call Frame Instructions? The only > rules available for register operations are to save on the stack or to > copy to another register. No rules to describe plus or negative > register adjustments. > > I find it difficult to understand why there is no support for this > in Dwarf 2 or Dwarf 3 as this must be a common idiom. I recommend you asking this on the dwarf2 mailing list instead of here. > When we adjust the stack pointer we issue CFA_CFA_def_cfa operations > to describe the new rule to access the CFA, effectively issuing a CFA > rule to compensate for the stack pointer being changed. This is > sufficient to allow stack unwind to work. However, when we look up the > values of automatics in upper stack frames this fails. The reason > being that the address of these variables (in location expressions) is given > as an offset from the stack pointer but there appear to be no unwind > rules for the stack pointer register. > > More correctly we'd like to say that the address of an automatic was > CFA plus offset but there doesn't appear to be any support for this. > > How does one describe stack pointer changes which do not involve > saving on the stack or use of a frame pointer. A couple of ways to link the frame base (DW_AT_frame_base) to the CFA have been proposed. Nothing's been picked yet though. To see how this is handled in GDB, look at dwarf2_frame_default_init_reg. By setting SP_REGNUM's rule to DWARF2_FRAME_REG_CFA, we have the value of the stack pointer for the frame. Then you can define appropriate DW_AT_frame_base values and use DW_OP_fbreg. -- Daniel Jacobowitz