Module Name: src Committed By: thorpej Date: Sat May 18 00:37:42 UTC 2024
Modified Files: src/sys/arch/alpha/include: mcontext.h src/sys/arch/amd64/include: mcontext.h src/sys/arch/arm/include: mcontext.h src/sys/arch/hppa/include: mcontext.h src/sys/arch/i386/include: mcontext.h src/sys/arch/m68k/include: mcontext.h src/sys/arch/powerpc/include: mcontext.h src/sys/arch/sh3/include: mcontext.h src/sys/arch/sparc/include: mcontext.h src/sys/arch/sparc64/include: mcontext.h src/sys/arch/vax/include: mcontext.h src/sys/sys: ucontext.h Log Message: Clean up the <sys/ucontext.h> <-> <machine/mcontext.h> interface up a little: - Define _UC_MD_BIT* constants for the available machine-dependent bits, and use those constants to define the machine-dependent bits as well as the machine-independent bits that have machine-dependent values. - Explicitly generate an error if _UC_TLSBASE, _UC_SETSTACK, or _UC_CLRSTACK are not defined by <machine/mcontext.h>. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/arch/alpha/include/mcontext.h cvs rdiff -u -r1.20 -r1.21 src/sys/arch/amd64/include/mcontext.h cvs rdiff -u -r1.23 -r1.24 src/sys/arch/arm/include/mcontext.h cvs rdiff -u -r1.12 -r1.13 src/sys/arch/hppa/include/mcontext.h cvs rdiff -u -r1.15 -r1.16 src/sys/arch/i386/include/mcontext.h cvs rdiff -u -r1.12 -r1.13 src/sys/arch/m68k/include/mcontext.h cvs rdiff -u -r1.22 -r1.23 src/sys/arch/powerpc/include/mcontext.h cvs rdiff -u -r1.12 -r1.13 src/sys/arch/sh3/include/mcontext.h cvs rdiff -u -r1.18 -r1.19 src/sys/arch/sparc/include/mcontext.h cvs rdiff -u -r1.10 -r1.11 src/sys/arch/sparc64/include/mcontext.h cvs rdiff -u -r1.11 -r1.12 src/sys/arch/vax/include/mcontext.h cvs rdiff -u -r1.19 -r1.20 src/sys/sys/ucontext.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/alpha/include/mcontext.h diff -u src/sys/arch/alpha/include/mcontext.h:1.11 src/sys/arch/alpha/include/mcontext.h:1.12 --- src/sys/arch/alpha/include/mcontext.h:1.11 Mon May 24 21:00:12 2021 +++ src/sys/arch/alpha/include/mcontext.h Sat May 18 00:37:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.11 2021/05/24 21:00:12 thorpej Exp $ */ +/* $NetBSD: mcontext.h,v 1.12 2024/05/18 00:37:40 thorpej Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -93,9 +93,9 @@ typedef struct { } mcontext_t; /* Machine-dependent uc_flags */ -#define _UC_TLSBASE 0x20 /* valid process-unique value in _REG_UNIQUE */ -#define _UC_SETSTACK 0x00010000 -#define _UC_CLRSTACK 0x00020000 +#define _UC_TLSBASE _UC_MD_BIT5 /* valid value in _REG_UNIQUE */ +#define _UC_SETSTACK _UC_MD_BIT16 +#define _UC_CLRSTACK _UC_MD_BIT17 #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) #define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_S6]) Index: src/sys/arch/amd64/include/mcontext.h diff -u src/sys/arch/amd64/include/mcontext.h:1.20 src/sys/arch/amd64/include/mcontext.h:1.21 --- src/sys/arch/amd64/include/mcontext.h:1.20 Fri Dec 27 00:32:16 2019 +++ src/sys/arch/amd64/include/mcontext.h Sat May 18 00:37:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.20 2019/12/27 00:32:16 kamil Exp $ */ +/* $NetBSD: mcontext.h,v 1.21 2024/05/18 00:37:40 thorpej Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -74,13 +74,13 @@ typedef struct { #define _UC_MACHINE_SET_PC(uc, pc) _UC_MACHINE_PC(uc) = (pc) -#define _UC_TLSBASE 0x00080000 +#define _UC_TLSBASE _UC_MD_BIT19 /* * mcontext extensions to handle signal delivery. */ -#define _UC_SETSTACK 0x00010000 -#define _UC_CLRSTACK 0x00020000 +#define _UC_SETSTACK _UC_MD_BIT16 +#define _UC_CLRSTACK _UC_MD_BIT17 #define __UCONTEXT_SIZE 784 @@ -155,7 +155,7 @@ typedef struct { uint32_t _mc_tlsbase; } mcontext32_t; -#define _UC_FXSAVE 0x20 /* FP state is in FXSAVE format in XMM space */ +#define _UC_FXSAVE _UC_MD_BIT5 /* FP state is in FXSAVE format in XMM space */ #define _UC_MACHINE32_PAD 4 #define __UCONTEXT32_SIZE 776 Index: src/sys/arch/arm/include/mcontext.h diff -u src/sys/arch/arm/include/mcontext.h:1.23 src/sys/arch/arm/include/mcontext.h:1.24 --- src/sys/arch/arm/include/mcontext.h:1.23 Wed Oct 6 05:33:15 2021 +++ src/sys/arch/arm/include/mcontext.h Sat May 18 00:37:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.23 2021/10/06 05:33:15 skrll Exp $ */ +/* $NetBSD: mcontext.h,v 1.24 2024/05/18 00:37:40 thorpej Exp $ */ /*- * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc. @@ -257,14 +257,14 @@ __END_DECLS #endif /* _RTLD_SOURCE || _LIBC_SOURCE || __LIBPTHREAD_SOURCE__ */ /* Machine-dependent uc_flags */ -#define _UC_TLSBASE 0x00080000 /* see <sys/ucontext.h> */ +#define _UC_TLSBASE _UC_MD_BIT19 /* see <sys/ucontext.h> */ /* Machine-dependent uc_flags for arm */ -#define _UC_ARM_VFP 0x00010000 /* FPU field is VFP */ +#define _UC_ARM_VFP _UC_MD_BIT16 /* FPU field is VFP */ /* used by signal delivery to indicate status of signal stack */ -#define _UC_SETSTACK 0x00020000 -#define _UC_CLRSTACK 0x00040000 +#define _UC_SETSTACK _UC_MD_BIT17 +#define _UC_CLRSTACK _UC_MD_BIT18 #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) #define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_FP]) Index: src/sys/arch/hppa/include/mcontext.h diff -u src/sys/arch/hppa/include/mcontext.h:1.12 src/sys/arch/hppa/include/mcontext.h:1.13 --- src/sys/arch/hppa/include/mcontext.h:1.12 Sun Jun 26 14:37:13 2022 +++ src/sys/arch/hppa/include/mcontext.h Sat May 18 00:37:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.12 2022/06/26 14:37:13 skrll Exp $ */ +/* $NetBSD: mcontext.h,v 1.13 2024/05/18 00:37:40 thorpej Exp $ */ #ifndef _HPPA_MCONTEXT_H_ #define _HPPA_MCONTEXT_H_ @@ -111,8 +111,8 @@ __END_DECLS #endif /* !__ASSEMBLER__ */ -#define _UC_SETSTACK 0x00010000 -#define _UC_CLRSTACK 0x00020000 -#define _UC_TLSBASE 0x00040000 +#define _UC_SETSTACK _UC_MD_BIT16 +#define _UC_CLRSTACK _UC_MD_BIT17 +#define _UC_TLSBASE _UC_MD_BIT18 #endif /* _HPPA_MCONTEXT_H_ */ Index: src/sys/arch/i386/include/mcontext.h diff -u src/sys/arch/i386/include/mcontext.h:1.15 src/sys/arch/i386/include/mcontext.h:1.16 --- src/sys/arch/i386/include/mcontext.h:1.15 Fri Dec 27 00:32:17 2019 +++ src/sys/arch/i386/include/mcontext.h Sat May 18 00:37:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.15 2019/12/27 00:32:17 kamil Exp $ */ +/* $NetBSD: mcontext.h,v 1.16 2024/05/18 00:37:40 thorpej Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -36,10 +36,10 @@ /* * mcontext extensions to handle signal delivery. */ -#define _UC_SETSTACK 0x00010000 -#define _UC_CLRSTACK 0x00020000 -#define _UC_VM 0x00040000 -#define _UC_TLSBASE 0x00080000 +#define _UC_SETSTACK _UC_MD_BIT16 +#define _UC_CLRSTACK _UC_MD_BIT17 +#define _UC_VM _UC_MD_BIT18 +#define _UC_TLSBASE _UC_MD_BIT19 /* * Layout of mcontext_t according to the System V Application Binary Interface, @@ -96,7 +96,7 @@ typedef struct { __greg_t _mc_tlsbase; } mcontext_t; -#define _UC_FXSAVE 0x20 /* FP state is in FXSAVE format in XMM space */ +#define _UC_FXSAVE _UC_MD_BIT5 /* FP state is in FXSAVE format in XMM space */ #define _UC_MACHINE_PAD 4 /* Padding appended to ucontext_t */ Index: src/sys/arch/m68k/include/mcontext.h diff -u src/sys/arch/m68k/include/mcontext.h:1.12 src/sys/arch/m68k/include/mcontext.h:1.13 --- src/sys/arch/m68k/include/mcontext.h:1.12 Sun Oct 4 10:34:18 2020 +++ src/sys/arch/m68k/include/mcontext.h Sat May 18 00:37:41 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.12 2020/10/04 10:34:18 rin Exp $ */ +/* $NetBSD: mcontext.h,v 1.13 2024/05/18 00:37:41 thorpej Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -39,8 +39,8 @@ /* * mcontext extensions to handle signal delivery. */ -#define _UC_SETSTACK 0x00010000 -#define _UC_CLRSTACK 0x00020000 +#define _UC_SETSTACK _UC_MD_BIT16 +#define _UC_CLRSTACK _UC_MD_BIT17 /* * General register state @@ -98,8 +98,8 @@ typedef struct { /* Note: no additional padding is to be performed in ucontext_t. */ /* Machine-specific uc_flags value */ -#define _UC_M68K_UC_USER 0x40000000 -#define _UC_TLSBASE 0x00080000 +#define _UC_M68K_UC_USER _UC_MD_BIT30 +#define _UC_TLSBASE _UC_MD_BIT19 #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_A7]) #define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_A6]) Index: src/sys/arch/powerpc/include/mcontext.h diff -u src/sys/arch/powerpc/include/mcontext.h:1.22 src/sys/arch/powerpc/include/mcontext.h:1.23 --- src/sys/arch/powerpc/include/mcontext.h:1.22 Sun Oct 4 10:34:18 2020 +++ src/sys/arch/powerpc/include/mcontext.h Sat May 18 00:37:41 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.22 2020/10/04 10:34:18 rin Exp $ */ +/* $NetBSD: mcontext.h,v 1.23 2024/05/18 00:37:41 thorpej Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -128,11 +128,11 @@ typedef struct { #endif /* Machine-dependent uc_flags */ -#define _UC_POWERPC_VEC 0x00010000 /* Vector Register File valid */ -#define _UC_POWERPC_SPE 0x00020000 /* Vector Register File valid */ -#define _UC_TLSBASE 0x00080000 /* thread context valid in R2 */ -#define _UC_SETSTACK 0x00100000 -#define _UC_CLRSTACK 0x00200000 +#define _UC_POWERPC_VEC _UC_MD_BIT16 /* Vector Register File valid */ +#define _UC_POWERPC_SPE _UC_MD_BIT17 /* Vector Register File valid */ +#define _UC_TLSBASE _UC_MD_BIT19 /* thread context valid in R2 */ +#define _UC_SETSTACK _UC_MD_BIT20 +#define _UC_CLRSTACK _UC_MD_BIT21 #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_R1]) #define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_R31]) Index: src/sys/arch/sh3/include/mcontext.h diff -u src/sys/arch/sh3/include/mcontext.h:1.12 src/sys/arch/sh3/include/mcontext.h:1.13 --- src/sys/arch/sh3/include/mcontext.h:1.12 Fri Dec 27 00:32:17 2019 +++ src/sys/arch/sh3/include/mcontext.h Sat May 18 00:37:41 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.12 2019/12/27 00:32:17 kamil Exp $ */ +/* $NetBSD: mcontext.h,v 1.13 2024/05/18 00:37:41 thorpej Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -91,9 +91,9 @@ typedef struct { /* * Machine dependent uc_flags */ -#define _UC_SETSTACK 0x10000 -#define _UC_CLRSTACK 0x20000 -#define _UC_TLSBASE 0x80000 +#define _UC_SETSTACK _UC_MD_BIT16 +#define _UC_CLRSTACK _UC_MD_BIT17 +#define _UC_TLSBASE _UC_MD_BIT19 #if defined(_RTLD_SOURCE) || defined(_LIBC_SOURCE) || \ defined(__LIBPTHREAD_SOURCE__) Index: src/sys/arch/sparc/include/mcontext.h diff -u src/sys/arch/sparc/include/mcontext.h:1.18 src/sys/arch/sparc/include/mcontext.h:1.19 --- src/sys/arch/sparc/include/mcontext.h:1.18 Fri Dec 27 00:32:17 2019 +++ src/sys/arch/sparc/include/mcontext.h Sat May 18 00:37:41 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.18 2019/12/27 00:32:17 kamil Exp $ */ +/* $NetBSD: mcontext.h,v 1.19 2024/05/18 00:37:41 thorpej Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -32,9 +32,9 @@ #ifndef _SPARC_MCONTEXT_H_ #define _SPARC_MCONTEXT_H_ -#define _UC_SETSTACK 0x00010000 -#define _UC_CLRSTACK 0x00020000 -#define _UC_TLSBASE 0x00080000 +#define _UC_SETSTACK _UC_MD_BIT16 +#define _UC_CLRSTACK _UC_MD_BIT17 +#define _UC_TLSBASE _UC_MD_BIT19 /* * Layout of mcontext_t according the System V Application Binary Interface, Index: src/sys/arch/sparc64/include/mcontext.h diff -u src/sys/arch/sparc64/include/mcontext.h:1.10 src/sys/arch/sparc64/include/mcontext.h:1.11 --- src/sys/arch/sparc64/include/mcontext.h:1.10 Mon Feb 19 08:31:13 2018 +++ src/sys/arch/sparc64/include/mcontext.h Sat May 18 00:37:41 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.10 2018/02/19 08:31:13 mrg Exp $ */ +/* $NetBSD: mcontext.h,v 1.11 2024/05/18 00:37:41 thorpej Exp $ */ #ifndef _SPARC64_MCONTEXT_H_ #define _SPARC64_MCONTEXT_H_ @@ -72,9 +72,9 @@ typedef struct { __xrs32_t __xrs; /* may indicate extra reg state */ } mcontext32_t; -#define _UC_SETSTACK 0x00010000 -#define _UC_CLRSTACK 0x00020000 -#define _UC_TLSBASE 0x00080000 +#define _UC_SETSTACK _UC_MD_BIT16 +#define _UC_CLRSTACK _UC_MD_BIT17 +#define _UC_TLSBASE _UC_MD_BIT19 #define _UC_MACHINE32_PAD 43 /* compat_netbsd32 variant */ #define _UC_MACHINE32_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_O6]) Index: src/sys/arch/vax/include/mcontext.h diff -u src/sys/arch/vax/include/mcontext.h:1.11 src/sys/arch/vax/include/mcontext.h:1.12 --- src/sys/arch/vax/include/mcontext.h:1.11 Fri May 17 21:37:07 2024 +++ src/sys/arch/vax/include/mcontext.h Sat May 18 00:37:41 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.11 2024/05/17 21:37:07 thorpej Exp $ */ +/* $NetBSD: mcontext.h,v 1.12 2024/05/18 00:37:41 thorpej Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -65,9 +65,9 @@ typedef struct { } mcontext_t; /* Machine-dependent uc_flags */ -#define _UC_SETSTACK 0x00010000 -#define _UC_CLRSTACK 0x00020000 -#define _UC_TLSBASE 0x00080000 +#define _UC_SETSTACK _UC_MD_BIT16 +#define _UC_CLRSTACK _UC_MD_BIT17 +#define _UC_TLSBASE _UC_MD_BIT19 #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) #define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_FP]) Index: src/sys/sys/ucontext.h diff -u src/sys/sys/ucontext.h:1.19 src/sys/sys/ucontext.h:1.20 --- src/sys/sys/ucontext.h:1.19 Tue Feb 27 23:09:02 2018 +++ src/sys/sys/ucontext.h Sat May 18 00:37:41 2024 @@ -1,7 +1,7 @@ -/* $NetBSD: ucontext.h,v 1.19 2018/02/27 23:09:02 uwe Exp $ */ +/* $NetBSD: ucontext.h,v 1.20 2024/05/18 00:37:41 thorpej Exp $ */ /*- - * Copyright (c) 1999, 2003 The NetBSD Foundation, Inc. + * Copyright (c) 1999, 2003, 2024 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation @@ -57,50 +57,42 @@ struct __ucontext { #define _UC_STACK 0x02 /* valid uc_stack */ #define _UC_CPU 0x04 /* valid GPR context in uc_mcontext */ #define _UC_FPU 0x08 /* valid FPU context in uc_mcontext */ -#define _UC_MD 0x400f0020 /* MD bits. see below */ +#define _UC_MD_BIT5 0x00000020 /* MD bits. see below */ +#define _UC_MD_BIT16 0x00010000 +#define _UC_MD_BIT17 0x00020000 +#define _UC_MD_BIT18 0x00040000 +#define _UC_MD_BIT19 0x00080000 +#define _UC_MD_BIT20 0x00100000 +#define _UC_MD_BIT21 0x00200000 +#define _UC_MD_BIT30 0x40000000 /* - * if your port needs more MD bits, please try to choose bits from _UC_MD - * first, rather than picking random unused bits. + * if your port needs more MD bits, please choose bits from _UC_MD_BIT* + * rather than picking random unused bits. * - * _UC_MD details + * For historical reasons, some common flags have machine-dependent + * definitions. All platforms must define and handle those flags, + * which are: * * _UC_TLSBASE Context contains valid pthread private pointer - * All ports must define this MD flag - * 0x00040000 hppa, mips - * 0x00000020 alpha - * 0x00080000 all other ports * * _UC_SETSTACK Context uses signal stack - * 0x00020000 arm - * [undefined] alpha, powerpc and vax - * 0x00010000 other ports * * _UC_CLRSTACK Context does not use signal stack - * 0x00040000 arm - * [undefined] alpha, powerpc and vax - * 0x00020000 other ports - * - * _UC_POWERPC_VEC Context contains valid AltiVec context - * 0x00010000 powerpc only - * - * _UC_POWERPC_SPE Context contains valid SPE context - * 0x00020000 powerpc only - * - * _UC_M68K_UC_USER Used by m68k machdep code, but undocumented - * 0x40000000 m68k only - * - * _UC_ARM_VFP Unused - * 0x00010000 arm only - * - * _UC_VM Context contains valid virtual 8086 context - * 0x00040000 i386, amd64 only - * - * _UC_FXSAVE Context contains FPU context in that - * is in FXSAVE format in XMM space - * 0x00000020 i386, amd64 only */ +#ifndef _UC_TLSBASE +#error _UC_TLSBASE not defined. +#endif + +#ifndef _UC_SETSTACK +#error _UC_SETSTACK not defined. +#endif + +#ifndef _UC_CLRSTACK +#error _UC_CLRSTACK not defined. +#endif + #ifdef _KERNEL struct lwp;