From owner-svn-src-all@FreeBSD.ORG Wed Apr 1 12:44:18 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 35010106564A; Wed, 1 Apr 2009 12:44:18 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 22D348FC1A; Wed, 1 Apr 2009 12:44:18 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n31CiIav031951; Wed, 1 Apr 2009 12:44:18 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n31CiHub031947; Wed, 1 Apr 2009 12:44:17 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <200904011244.n31CiHub031947@svn.freebsd.org> From: Konstantin Belousov Date: Wed, 1 Apr 2009 12:44:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r190616 - in head/sys: amd64/include compat/ia32 i386/include X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Apr 2009 12:44:18 -0000 Author: kib Date: Wed Apr 1 12:44:17 2009 New Revision: 190616 URL: http://svn.freebsd.org/changeset/base/190616 Log: Add all segment registers for the amd64 CPU to struct reg and mcontext. To keep these structures ABI-compatible, half the size of r_trapno, r_err, mc_trapno, mc_flags. Add fsbase and gsbase to mcontext on both amd64 and i386. Add flags to amd64 mcontext to indicate that it contains valid segments or bases. In collaboration with: pho Discussed with: peter Reviewed by: jhb Modified: head/sys/amd64/include/reg.h head/sys/amd64/include/ucontext.h head/sys/compat/ia32/ia32_signal.h head/sys/i386/include/ucontext.h Modified: head/sys/amd64/include/reg.h ============================================================================== --- head/sys/amd64/include/reg.h Wed Apr 1 12:31:04 2009 (r190615) +++ head/sys/amd64/include/reg.h Wed Apr 1 12:44:17 2009 (r190616) @@ -56,8 +56,12 @@ struct reg { register_t r_rdx; register_t r_rcx; register_t r_rax; - register_t r_trapno; - register_t r_err; + uint32_t r_trapno; + uint16_t r_fs; + uint16_t r_gs; + uint32_t r_err; + uint16_t r_es; + uint16_t r_ds; register_t r_rip; register_t r_cs; register_t r_rflags; Modified: head/sys/amd64/include/ucontext.h ============================================================================== --- head/sys/amd64/include/ucontext.h Wed Apr 1 12:31:04 2009 (r190615) +++ head/sys/amd64/include/ucontext.h Wed Apr 1 12:44:17 2009 (r190616) @@ -32,9 +32,16 @@ #ifndef _MACHINE_UCONTEXT_H_ #define _MACHINE_UCONTEXT_H_ +/* + * mc_trapno bits. Shall be in sync with TF_XXX. + */ +#define _MC_HASSEGS 0x1 +#define _MC_HASBASES 0x2 +#define _MC_FLAG_MASK (_MC_HASSEGS | _MC_HASBASES) + typedef struct __mcontext { /* - * The first 20 fields must match the definition of + * The first 24 fields must match the definition of * sigcontext. So that we can support sigcontext * and ucontext_t at the same time. */ @@ -54,9 +61,13 @@ typedef struct __mcontext { __register_t mc_r13; __register_t mc_r14; __register_t mc_r15; - __register_t mc_trapno; + __uint32_t mc_trapno; + __uint16_t mc_fs; + __uint16_t mc_gs; __register_t mc_addr; - __register_t mc_flags; + __uint32_t mc_flags; + __uint16_t mc_es; + __uint16_t mc_ds; __register_t mc_err; __register_t mc_rip; __register_t mc_cs; @@ -65,6 +76,7 @@ typedef struct __mcontext { __register_t mc_ss; long mc_len; /* sizeof(mcontext_t) */ + #define _MC_FPFMT_NODEV 0x10000 /* device not present or configured */ #define _MC_FPFMT_XMM 0x10002 long mc_fpformat; @@ -76,7 +88,11 @@ typedef struct __mcontext { * See for the internals of mc_fpstate[]. */ long mc_fpstate[64] __aligned(16); - long mc_spare[8]; + + __register_t mc_fsbase; + __register_t mc_gsbase; + + long mc_spare[6]; } mcontext_t; #endif /* !_MACHINE_UCONTEXT_H_ */ Modified: head/sys/compat/ia32/ia32_signal.h ============================================================================== --- head/sys/compat/ia32/ia32_signal.h Wed Apr 1 12:31:04 2009 (r190615) +++ head/sys/compat/ia32/ia32_signal.h Wed Apr 1 12:44:17 2009 (r190616) @@ -59,7 +59,9 @@ struct ia32_mcontext { * See for the internals of mc_fpstate[]. */ u_int32_t mc_fpstate[128] __aligned(16); - u_int32_t mc_spare2[8]; + u_int32_t mc_fsbase; + u_int32_t mc_gsbase; + u_int32_t mc_spare2[6]; }; struct ia32_ucontext { Modified: head/sys/i386/include/ucontext.h ============================================================================== --- head/sys/i386/include/ucontext.h Wed Apr 1 12:31:04 2009 (r190615) +++ head/sys/i386/include/ucontext.h Wed Apr 1 12:44:17 2009 (r190616) @@ -72,10 +72,15 @@ typedef struct __mcontext { * See for the internals of mc_fpstate[]. */ int mc_fpstate[128] __aligned(16); - int mc_spare2[8]; + + __register_t mc_fsbase; + __register_t mc_gsbase; + + int mc_spare2[6]; } mcontext_t; #if defined(_KERNEL) && defined(COMPAT_FREEBSD4) + struct mcontext4 { __register_t mc_onstack; /* XXX - sigcontext compat. */ __register_t mc_gs; /* machine state (struct trapframe) */