From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6142 invoked by alias); 17 Nov 2003 22:32:40 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 6135 invoked from network); 17 Nov 2003 22:32:39 -0000 Received: from unknown (HELO ns1.xcllnt.net) (209.128.86.226) by sources.redhat.com with SMTP; 17 Nov 2003 22:32:39 -0000 Received: from ns1.xcllnt.net (localhost [127.0.0.1]) by ns1.xcllnt.net (8.12.9/8.12.9) with ESMTP id hAHMVqbe060408; Mon, 17 Nov 2003 14:31:52 -0800 (PST) (envelope-from marcel@ns1.xcllnt.net) Received: (from marcel@localhost) by ns1.xcllnt.net (8.12.9/8.12.9/Submit) id hAHMVqje060407; Mon, 17 Nov 2003 14:31:52 -0800 (PST) (envelope-from marcel) Date: Mon, 17 Nov 2003 22:32:00 -0000 From: Marcel Moolenaar To: "J. Johnston" Cc: Kevin Buettner , gdb-patches@sources.redhat.com, Andrew Cagney , Daniel Jacobowitz Subject: Re: RFA: ia64 portion of libunwind patch updated Message-ID: <20031117223152.GA60322@ns1.xcllnt.net> References: <1031024175718.ZM3475@localhost.localdomain> <3F996D88.9060505@redhat.com> <1031024185625.ZM9827@localhost.localdomain> <3F9F0180.2010702@redhat.com> <20031029012833.GA11070@nevyn.them.org> <3FA043B2.6090401@redhat.com> <3FA7F97B.4090909@redhat.com> <3FAA830F.50607@redhat.com> <1031117170511.ZM31835@localhost.localdomain> <3FB9404B.8070201@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3FB9404B.8070201@redhat.com> User-Agent: Mutt/1.5.4i X-SW-Source: 2003-11/txt/msg00367.txt.bz2 On Mon, Nov 17, 2003 at 04:40:27PM -0500, J. Johnston wrote: > Patch checked in. Thanks. Cool! Thanks for the effort. Now I can play with it on FreeBSD as well. BTW: libunwind-0.93 doesn't compile on Red Hat AS 2.1 due to sigcontext changes. Does it make sense to spend some time trying to fix that or is AS 2.1 really too old for that? Or can we use an older version of libunwind there (IOW is the API compatible)? Some background information: \begin{libunwind-build-log} gcc -DHAVE_CONFIG_H -I. -I../../../src/libunwind-0.93/src -I../include -I../../../src/libunwind-0.93/include -I. -D_GNU_SOURCE -DDEBUG -g -Wall -Wsign-compare -c ../../../src/libunwind-0.93/src/ia64/Ginit-ia64.c -MT Ginit-ia64.lo -MD -MP -MF .deps/Ginit-ia64.TPlo -fPIC -o .libs/Ginit-ia64.o ../../../src/libunwind-0.93/src/ia64/Ginit-ia64.c: In function `uc_addr': ../../../src/libunwind-0.93/src/ia64/Ginit-ia64.c:110: structure has no member named `sc_rbs_base' gmake[2]: *** [Ginit-ia64.lo] Error 1 gmake[2]: Leaving directory `/proj/eclipse/extra/marcel/unwind/obj/libunwind-0.93/src' gmake[1]: *** [all] Error 2 \end{libunwind-build-log} The sigcontext between AS3.0 and AS2.1 changed in the following way: \begin{diff} --- sigcontext.h.as2.1 2003-11-17 14:26:11.000000000 -0800 +++ sigcontext.h.as3.0 2003-11-17 14:26:36.000000000 -0800 @@ -2,13 +2,14 @@ #define _ASM_IA64_SIGCONTEXT_H /* - * Copyright (C) 1998, 1999 Hewlett-Packard Co - * Copyright (C) 1998, 1999 David Mosberger-Tang + * Copyright (C) 1998, 1999, 2001 Hewlett-Packard Co + * Copyright (C) 1998, 1999, 2001 David Mosberger-Tang */ #include +#include -#define IA64_SC_FLAG_ONSTACK_BIT 1 /* is handler running on signal stack? */ +#define IA64_SC_FLAG_ONSTACK_BIT 0 /* is handler running on signal stack? */ #define IA64_SC_FLAG_IN_SYSCALL_BIT 1 /* did signal interrupt a syscall? */ #define IA64_SC_FLAG_FPH_VALID_BIT 2 /* is state in f[32]-f[127] valid? */ @@ -18,6 +19,19 @@ # ifndef __ASSEMBLY__ +/* + * Note on handling of register backing store: sc_ar_bsp contains the address that would + * be found in ar.bsp after executing a "cover" instruction the context in which the + * signal was raised. If signal delivery required switching to an alternate signal stack + * (sc_rbs_base is not NULL), the "dirty" partition (as it would exist after executing the + * imaginary "cover" instruction) is backed by the *alternate* signal stack, not the + * original one. In this case, sc_rbs_base contains the base address of the new register + * backing store. The number of registers in the dirty partition can be calculated as: + * + * ndirty = ia64_rse_num_regs(sc_rbs_base, sc_rbs_base + (sc_loadrs >> 16)) + * + */ + struct sigcontext { unsigned long sc_flags; /* see manifest constants above */ unsigned long sc_nat; /* bit i == 1 iff scratch reg gr[i] is a NaT */ @@ -40,8 +54,12 @@ unsigned long sc_gr[32]; /* general registers (static partition) */ struct ia64_fpreg sc_fr[128]; /* floating-point registers */ - unsigned long sc_rsvd[16]; /* reserved for future use */ + unsigned long sc_rbs_base; /* NULL or new base of sighandler's rbs */ + unsigned long sc_loadrs; /* see description above */ + unsigned long sc_ar25; /* cmp8xchg16 uses this */ + unsigned long sc_ar26; /* rsvd for scratch use */ + unsigned long sc_rsvd[12]; /* reserved for future use */ /* * The mask must come last so we can increase _NSIG_WORDS * without breaking binary compatibility. \end{diff} -- Marcel Moolenaar USPA: A-39004 marcel@xcllnt.net