From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4277 invoked by alias); 14 Sep 2008 02:44:59 -0000 Received: (qmail 4268 invoked by uid 22791); 14 Sep 2008 02:44:58 -0000 X-Spam-Check-By: sourceware.org Received: from mail-gx0-f10.google.com (HELO mail-gx0-f10.google.com) (209.85.217.10) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 14 Sep 2008 02:44:11 +0000 Received: by gxk3 with SMTP id 3so14770702gxk.0 for ; Sat, 13 Sep 2008 19:44:09 -0700 (PDT) Received: by 10.151.47.7 with SMTP id z7mr8505243ybj.111.1221360249015; Sat, 13 Sep 2008 19:44:09 -0700 (PDT) Received: by 10.151.50.6 with HTTP; Sat, 13 Sep 2008 19:44:09 -0700 (PDT) Message-ID: <1e3eba760809131944t7ce2b87ai94af49ba8074b901@mail.gmail.com> Date: Sun, 14 Sep 2008 02:44:00 -0000 From: "Randolph Chung" To: "John David Anglin" Subject: Re: [PATCH] Fix hppa_linux_sigtramp_frame_unwind_cache Cc: gdb-patches@sourceware.org In-Reply-To: <20080913235740.ADEF94E6A@hiauly1.hia.nrc.ca> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <20080913235740.ADEF94E6A@hiauly1.hia.nrc.ca> Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-09/txt/msg00313.txt.bz2 Hrm, this worries me. The sigcontext structure looks like this: struct sigcontext { unsigned long sc_flags; unsigned long sc_gr[32]; unsigned long long sc_fr[32]; unsigned long sc_iasq[2]; unsigned long sc_iaoq[2]; unsigned long sc_sar; }; I am positive that when I wrote this the structure got padded between sc_gr and sc_fr to keep the unsigned long long at a 8-byte boundary. If this has changed now that means we've introduced a silent ABI change.... The SAR stuff looks ok. I'm not very sure about restoring the IPSW either. randolph On Sat, Sep 13, 2008 at 4:57 PM, John David Anglin wrote: > The main fix in this patch is to remove the pad increment of scptr. As > far as I know, there is no pad field in the sigcontext struct between the > general registers and the floating point registers. > > I also recorded the PSW and SAR registers. It might be a mistake to record > the PSW value, but I believe the SAR register definitely needs to be recorded. > > Somewhat tested on hppa-linux but the gdb testsuite crashes 2.6.19.22. > > Ok? > > Dave > -- > J. David Anglin dave.anglin@nrc-cnrc.gc.ca > National Research Council of Canada (613) 990-0752 (FAX: 952-6602) > > 2008-09-13 John David Anglin > > * hppa-linux-tdep.c (hppa_linux_sigtramp_frame_unwind_cache): Record > HPPA_IPSW_REGNUM and HPPA_SAR_REGNUM values. Remove pad increment. > > Index: hppa-linux-tdep.c > =================================================================== > RCS file: /cvs/src/src/gdb/hppa-linux-tdep.c,v > retrieving revision 1.31 > diff -u -3 -p -r1.31 hppa-linux-tdep.c > --- hppa-linux-tdep.c 21 Aug 2008 13:19:18 -0000 1.31 > +++ hppa-linux-tdep.c 13 Sep 2008 22:51:35 -0000 > @@ -227,7 +229,8 @@ hppa_linux_sigtramp_frame_unwind_cache ( > /* Skip sc_flags. */ > scptr += 4; > > - /* GR[0] is the psw, we don't restore that. */ > + /* GR[0] is the psw. */ > + info->saved_regs[HPPA_IPSW_REGNUM].addr = scptr; > scptr += 4; > > /* General registers. */ > @@ -237,9 +240,6 @@ hppa_linux_sigtramp_frame_unwind_cache ( > scptr += 4; > } > > - /* Pad. */ > - scptr += 4; > - > /* FP regs; FP0-3 are not restored. */ > scptr += (8 * 4); > > @@ -262,6 +262,9 @@ hppa_linux_sigtramp_frame_unwind_cache ( > info->saved_regs[HPPA_PCOQ_TAIL_REGNUM].addr = scptr; > scptr += 4; > > + info->saved_regs[HPPA_SAR_REGNUM].addr = scptr; > + scptr += 4; > + > info->base = get_frame_register_unsigned (this_frame, HPPA_SP_REGNUM); > > return info; >