From mboxrd@z Thu Jan 1 00:00:00 1970 From: "John David Anglin" To: randolph@tausq.org Cc: gdb-patches@sources.redhat.com, cagney@gnu.org Subject: Re: [patch/rfa/hppa] Use frame pointer for unwinding Date: Mon, 17 May 2004 17:54:00 -0000 Message-id: <200405171754.i4HHs5Tc006398@hiauly1.hia.nrc.ca> References: <20040517172821.GX566@tausq.org> X-SW-Source: 2004-05/msg00499.html > ok, feature request? ;-) as noted below this is not really required for > gdb to work correctly; i'm just wondering if the same Save_SP scheme > works for both hp compiler and gcc. In some other email you had > indicated that the hp compiler doesn't set the Save_SP flag (or did > i misunderstand you?).... It's my understanding that none of the HP compilers set the Save_SP flag. This is why the flag was selected. Originally, it indicated that a frame pointer was needed for the frame. Now, we also save the entry value of SP in the current frame marker (current_SP - 4) when a frame pointer is needed and TARGET_HPUX_UNWIND_LIBRARY is true. > > Note that the the previous SP (frame pointer) is saved in the frame > > marker of frame 1. This value is accessible from frame 2 (i.e., > > effectively the frame pointer is always saved under hpux when Save_SP > > is true -- it's just done by the caller). However, I think gdb > > should avoid using the saved SP value in the frame marker as not > > all versions of GCC support this. It's also not supported under > > linux. > > right now gdb uses the value of the frame pointer that is stored at the > start of the frame; that is, for "normal frames", it looks for a > specific code sequence: > > stw,ma rN, xxx(sp) > > in the code, and if it sees this, it notes that a frame pointer has > been stored at offset 0 of the stack. During unwinding, it finds out > if the current frame should have saved the fp (by looking at the Save_SP > flag) and if so it retrieves it from the stack. A stw,ma r3, xxx(sp) instruction in the entry sequence is unique to GCC (32-bit runtime). If you find this, Save_SP should also be set as it is part of the sequence to save %r3 and copy the stack pointer to %r3 in a frame which needs a frame pointer.. Dave -- J. David Anglin dave.anglin@nrc-cnrc.gc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6602)