Module Name: src Committed By: martin Date: Wed Mar 21 10:08:03 UTC 2018
Modified Files: src/external/gpl3/gcc/dist/libsanitizer/asan [netbsd-8]: asan_linux.cc src/sys/arch/aarch64/include [netbsd-8]: mcontext.h src/sys/arch/alpha/include [netbsd-8]: mcontext.h src/sys/arch/amd64/include [netbsd-8]: mcontext.h src/sys/arch/arm/include [netbsd-8]: mcontext.h src/sys/arch/hppa/include [netbsd-8]: mcontext.h src/sys/arch/i386/include [netbsd-8]: mcontext.h src/sys/arch/ia64/include [netbsd-8]: mcontext.h src/sys/arch/m68k/include [netbsd-8]: mcontext.h src/sys/arch/mips/include [netbsd-8]: mcontext.h src/sys/arch/or1k/include [netbsd-8]: mcontext.h src/sys/arch/powerpc/include [netbsd-8]: mcontext.h src/sys/arch/riscv/include [netbsd-8]: mcontext.h src/sys/arch/sh3/include [netbsd-8]: mcontext.h src/sys/arch/sparc/include [netbsd-8]: mcontext.h src/sys/arch/sparc64/include [netbsd-8]: mcontext.h src/sys/arch/vax/include [netbsd-8]: mcontext.h src/tests/lib/libc/sys [netbsd-8]: Makefile t_ucontext.c Log Message: Pull up the following, requested by kamil in ticket #552: external/gpl3/gcc{.old}/dist/libsanitizer/asan/asan_linux.cc 1.4 sys/arch/aarch64/include/mcontext.h 1.2 sys/arch/alpha/include/mcontext.h 1.9 sys/arch/amd64/include/mcontext.h 1.19 sys/arch/arm/include/mcontext.h 1.19 sys/arch/hppa/include/mcontext.h 1.9 sys/arch/i386/include/mcontext.h 1.14 sys/arch/ia64/include/mcontext.h 1.6 sys/arch/m68k/include/mcontext.h 1.10 sys/arch/mips/include/mcontext.h 1.22 sys/arch/or1k/include/mcontext.h 1.2 sys/arch/powerpc/include/mcontext.h 1.18 sys/arch/riscv/include/mcontext.h 1.5 sys/arch/sh3/include/mcontext.h 1.11 sys/arch/sparc/include/mcontext.h 1.14-1.17 sys/arch/sparc64/include/mcontext.h 1.10 sys/arch/vax/include/mcontext.h 1.9 tests/lib/libc/sys/Makefile 1.50 tests/lib/libc/sys/t_ucontext.c 1.2-1.5 sys/arch/hppa/include/mcontext.h 1.10 sys/arch/ia64/include/mcontext.h 1.7 - Introduce _UC_MACHINE_FP(). _UC_MACHINE_FP() is a helper macro to extract from mcontext a frame pointer. - Add new tests in lib/libc/sys/t_ucontext: * ucontext_sp (testing _UC_MACHINE_SP) * ucontext_fp (testing _UC_MACHINE_FP) * ucontext_pc (testing _UC_MACHINE_PC) * ucontext_intrv (testing _UC_MACHINE_INTRV) Add a dummy implementation of _UC_MACHINE_INTRV() for ia64. Implement _UC_MACHINE_INTRV() for hppa. Make the t_ucontext.c test more portable. We now have _UC_MACHINE_FP. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.9.8.1 \ src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc cvs rdiff -u -r1.1.22.2 -r1.1.22.3 src/sys/arch/aarch64/include/mcontext.h cvs rdiff -u -r1.8.32.2 -r1.8.32.3 src/sys/arch/alpha/include/mcontext.h cvs rdiff -u -r1.18.20.2 -r1.18.20.3 src/sys/arch/amd64/include/mcontext.h cvs rdiff -u -r1.18.10.2 -r1.18.10.3 src/sys/arch/arm/include/mcontext.h cvs rdiff -u -r1.8.22.2 -r1.8.22.3 src/sys/arch/hppa/include/mcontext.h cvs rdiff -u -r1.12.22.2 -r1.12.22.3 src/sys/arch/i386/include/mcontext.h cvs rdiff -u -r1.5.8.2 -r1.5.8.3 src/sys/arch/ia64/include/mcontext.h cvs rdiff -u -r1.9.42.2 -r1.9.42.3 src/sys/arch/m68k/include/mcontext.h cvs rdiff -u -r1.21.10.2 -r1.21.10.3 src/sys/arch/mips/include/mcontext.h cvs rdiff -u -r1.1.12.2 -r1.1.12.3 src/sys/arch/or1k/include/mcontext.h cvs rdiff -u -r1.17.12.2 -r1.17.12.3 src/sys/arch/powerpc/include/mcontext.h cvs rdiff -u -r1.4.10.2 -r1.4.10.3 src/sys/arch/riscv/include/mcontext.h cvs rdiff -u -r1.10.32.2 -r1.10.32.3 src/sys/arch/sh3/include/mcontext.h cvs rdiff -u -r1.13.32.2 -r1.13.32.3 src/sys/arch/sparc/include/mcontext.h cvs rdiff -u -r1.9.32.2 -r1.9.32.3 src/sys/arch/sparc64/include/mcontext.h cvs rdiff -u -r1.8.40.2 -r1.8.40.3 src/sys/arch/vax/include/mcontext.h cvs rdiff -u -r1.49.4.2 -r1.49.4.3 src/tests/lib/libc/sys/Makefile cvs rdiff -u -r1.1.34.2 -r1.1.34.3 src/tests/lib/libc/sys/t_ucontext.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc diff -u src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc:1.9 src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc:1.9.8.1 --- src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc:1.9 Wed Jun 1 00:53:35 2016 +++ src/external/gpl3/gcc/dist/libsanitizer/asan/asan_linux.cc Wed Mar 21 10:08:03 2018 @@ -162,40 +162,42 @@ void AsanCheckIncompatibleRT() { void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) { #ifdef __NetBSD__ -# define __UC_MACHINE_FP(ucontext, r) \ +# ifndef _UC_MACHINE_FP +# define __UC_MACHINE_FP(ucontext, r) \ (ucontext)->uc_mcontext.__gregs[(r)] /* * Unfortunately we don't have a portable frame pointer (yet) */ -# if defined(__alpha__) -# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_S6) -# elif defined(__arm__) -# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_FP) -# elif defined(__x86_64__) -# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_RBP) -# elif defined(__i386__) -# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_EBP) -# elif defined(__m68k__) -# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_A6) -# elif defined(__mips__) -# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_S8) -# elif defined(__powerpc__) || defined(__powerpc64__) -# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_R1) -# elif defined(__riscv__) -# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_S0) -# elif defined(__sparc__) -# define _UC_MACHINE_FP(ucontext) sp[15] -# elif defined(__sh3__) -# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_R14) -# elif defined(__vax__) -# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_FP) -# else -# define _UC_MACHINE_FP(ucontext) 0 -# endif +# if defined(__alpha__) +# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_S6) +# elif defined(__arm__) +# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_FP) +# elif defined(__x86_64__) +# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_RBP) +# elif defined(__i386__) +# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_EBP) +# elif defined(__m68k__) +# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_A6) +# elif defined(__mips__) +# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_S8) +# elif defined(__powerpc__) || defined(__powerpc64__) +# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_R1) +# elif defined(__riscv__) +# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_S0) +# elif defined(__sparc__) +# define _UC_MACHINE_FP(ucontext) sp[15] +# elif defined(__sh3__) +# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_R14) +# elif defined(__vax__) +# define _UC_MACHINE_FP(ucontext) __UC_MACHINE_FP(ucontext, _REG_FP) +# else +# define _UC_MACHINE_FP(ucontext) 0 +# endif ucontext_t *ucontext = (ucontext_t*)context; *pc = _UC_MACHINE_PC(ucontext); *sp = _UC_MACHINE_SP(ucontext); *bp = _UC_MACHINE_FP(ucontext); +# endif #elif ASAN_ANDROID *pc = *sp = *bp = 0; #elif defined(__arm__) Index: src/sys/arch/aarch64/include/mcontext.h diff -u src/sys/arch/aarch64/include/mcontext.h:1.1.22.2 src/sys/arch/aarch64/include/mcontext.h:1.1.22.3 --- src/sys/arch/aarch64/include/mcontext.h:1.1.22.2 Mon Feb 26 04:32:29 2018 +++ src/sys/arch/aarch64/include/mcontext.h Wed Mar 21 10:08:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.1.22.2 2018/02/26 04:32:29 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.1.22.3 2018/03/21 10:08:02 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -106,6 +106,7 @@ typedef struct { #define _UC_TLSBASE 0x00080000 /* see <sys/ucontext.h> */ #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_X29]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_X0]) Index: src/sys/arch/alpha/include/mcontext.h diff -u src/sys/arch/alpha/include/mcontext.h:1.8.32.2 src/sys/arch/alpha/include/mcontext.h:1.8.32.3 --- src/sys/arch/alpha/include/mcontext.h:1.8.32.2 Mon Feb 26 04:32:29 2018 +++ src/sys/arch/alpha/include/mcontext.h Wed Mar 21 10:08:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.8.32.2 2018/02/26 04:32:29 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.8.32.3 2018/03/21 10:08:02 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -96,6 +96,7 @@ typedef struct { #define _UC_TLSBASE 0x20 /* valid process-unique value in _REG_UNIQUE */ #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_S6]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_V0]) Index: src/sys/arch/amd64/include/mcontext.h diff -u src/sys/arch/amd64/include/mcontext.h:1.18.20.2 src/sys/arch/amd64/include/mcontext.h:1.18.20.3 --- src/sys/arch/amd64/include/mcontext.h:1.18.20.2 Mon Feb 26 04:32:29 2018 +++ src/sys/arch/amd64/include/mcontext.h Wed Mar 21 10:08:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.18.20.2 2018/02/26 04:32:29 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.18.20.3 2018/03/21 10:08:02 martin Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -68,6 +68,7 @@ typedef struct { /* AMD64 ABI 128-bytes "red zone". */ #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_RSP] - 128) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_RBP]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_RIP]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_RAX]) Index: src/sys/arch/arm/include/mcontext.h diff -u src/sys/arch/arm/include/mcontext.h:1.18.10.2 src/sys/arch/arm/include/mcontext.h:1.18.10.3 --- src/sys/arch/arm/include/mcontext.h:1.18.10.2 Mon Feb 26 04:32:29 2018 +++ src/sys/arch/arm/include/mcontext.h Wed Mar 21 10:08:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.18.10.2 2018/02/26 04:32:29 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.18.10.3 2018/03/21 10:08:02 martin Exp $ */ /*- * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc. @@ -110,6 +110,7 @@ typedef struct { #define _UC_MACHINE_PAD 1 /* Padding appended to ucontext_t */ #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_R11]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_R0]) Index: src/sys/arch/hppa/include/mcontext.h diff -u src/sys/arch/hppa/include/mcontext.h:1.8.22.2 src/sys/arch/hppa/include/mcontext.h:1.8.22.3 --- src/sys/arch/hppa/include/mcontext.h:1.8.22.2 Mon Feb 26 04:32:29 2018 +++ src/sys/arch/hppa/include/mcontext.h Wed Mar 21 10:08:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.8.22.2 2018/02/26 04:32:29 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.8.22.3 2018/03/21 10:08:02 martin Exp $ */ #ifndef _HPPA_MCONTEXT_H_ #define _HPPA_MCONTEXT_H_ @@ -50,12 +50,14 @@ typedef struct { } mcontext_t; #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[3]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PCOQH]) #define _UC_MACHINE_SET_PC(uc, pc) \ do { \ (uc)->uc_mcontext.__gregs[_REG_PCOQH] = (pc); \ (uc)->uc_mcontext.__gregs[_REG_PCOQT] = (pc) + 4; \ } while (/*CONSTCOND*/0) +#define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_RET0]) static __inline void * __lwp_getprivate_fast(void) Index: src/sys/arch/i386/include/mcontext.h diff -u src/sys/arch/i386/include/mcontext.h:1.12.22.2 src/sys/arch/i386/include/mcontext.h:1.12.22.3 --- src/sys/arch/i386/include/mcontext.h:1.12.22.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/i386/include/mcontext.h Wed Mar 21 10:08:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.12.22.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.12.22.3 2018/03/21 10:08:02 martin Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -116,6 +116,7 @@ typedef struct { #ifndef _UC_MACHINE_SP #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_UESP]) #endif +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_EBP]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_EIP]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_EAX]) Index: src/sys/arch/ia64/include/mcontext.h diff -u src/sys/arch/ia64/include/mcontext.h:1.5.8.2 src/sys/arch/ia64/include/mcontext.h:1.5.8.3 --- src/sys/arch/ia64/include/mcontext.h:1.5.8.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/ia64/include/mcontext.h Wed Mar 21 10:08:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.5.8.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.5.8.3 2018/03/21 10:08:02 martin Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -112,8 +112,10 @@ typedef struct __mcontext { } mcontext_t; #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.mc_special.sp) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[79]) /* XXX or assembly "mov Rn = ip" or ...? */ #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.mc_special.iip) +#define _UC_MACHINE_INTRV(uc) 0 /* XXX */ static __inline void * __lwp_getprivate_fast(void) Index: src/sys/arch/m68k/include/mcontext.h diff -u src/sys/arch/m68k/include/mcontext.h:1.9.42.2 src/sys/arch/m68k/include/mcontext.h:1.9.42.3 --- src/sys/arch/m68k/include/mcontext.h:1.9.42.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/m68k/include/mcontext.h Wed Mar 21 10:08:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.9.42.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.9.42.3 2018/03/21 10:08:02 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -102,6 +102,7 @@ typedef struct { #define _UC_TLSBASE 0x00080000 #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_A7]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_A6]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_D0]) Index: src/sys/arch/mips/include/mcontext.h diff -u src/sys/arch/mips/include/mcontext.h:1.21.10.2 src/sys/arch/mips/include/mcontext.h:1.21.10.3 --- src/sys/arch/mips/include/mcontext.h:1.21.10.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/mips/include/mcontext.h Wed Mar 21 10:08:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.21.10.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.21.10.3 2018/03/21 10:08:02 martin Exp $ */ /*- * Copyright (c) 1999, 2002 The NetBSD Foundation, Inc. @@ -159,6 +159,7 @@ typedef struct { #define _UC_TLSBASE 0x00040000 #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_S8]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_EPC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_V0]) Index: src/sys/arch/or1k/include/mcontext.h diff -u src/sys/arch/or1k/include/mcontext.h:1.1.12.2 src/sys/arch/or1k/include/mcontext.h:1.1.12.3 --- src/sys/arch/or1k/include/mcontext.h:1.1.12.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/or1k/include/mcontext.h Wed Mar 21 10:08:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.1.12.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.1.12.3 2018/03/21 10:08:02 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -88,6 +88,7 @@ typedef struct { #define _UC_TLSBASE 0x00080000 /* see <sys/ucontext.h> */ #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_R2]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_RV]) Index: src/sys/arch/powerpc/include/mcontext.h diff -u src/sys/arch/powerpc/include/mcontext.h:1.17.12.2 src/sys/arch/powerpc/include/mcontext.h:1.17.12.3 --- src/sys/arch/powerpc/include/mcontext.h:1.17.12.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/powerpc/include/mcontext.h Wed Mar 21 10:08:03 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.17.12.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.17.12.3 2018/03/21 10:08:03 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -133,6 +133,7 @@ typedef struct { #define _UC_TLSBASE 0x00080000 /* thread context valid in R2 */ #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_R1]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_R31]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_R3]) Index: src/sys/arch/riscv/include/mcontext.h diff -u src/sys/arch/riscv/include/mcontext.h:1.4.10.2 src/sys/arch/riscv/include/mcontext.h:1.4.10.3 --- src/sys/arch/riscv/include/mcontext.h:1.4.10.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/riscv/include/mcontext.h Wed Mar 21 10:08:03 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.4.10.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.4.10.3 2018/03/21 10:08:03 martin Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -118,6 +118,7 @@ typedef struct { #define _UC_TLSBASE 0x00080000 /* see <sys/ucontext.h> */ #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_S0]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_RV]) Index: src/sys/arch/sh3/include/mcontext.h diff -u src/sys/arch/sh3/include/mcontext.h:1.10.32.2 src/sys/arch/sh3/include/mcontext.h:1.10.32.3 --- src/sys/arch/sh3/include/mcontext.h:1.10.32.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/sh3/include/mcontext.h Wed Mar 21 10:08:03 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.10.32.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.10.32.3 2018/03/21 10:08:03 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -82,6 +82,7 @@ typedef struct { } mcontext_t; #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_R14]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_R0]) Index: src/sys/arch/sparc/include/mcontext.h diff -u src/sys/arch/sparc/include/mcontext.h:1.13.32.2 src/sys/arch/sparc/include/mcontext.h:1.13.32.3 --- src/sys/arch/sparc/include/mcontext.h:1.13.32.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/sparc/include/mcontext.h Wed Mar 21 10:08:03 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.13.32.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.13.32.3 2018/03/21 10:08:03 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -30,11 +30,11 @@ */ #ifndef _SPARC_MCONTEXT_H_ -#define _SPARC_MCONTEXT_H_ +#define _SPARC_MCONTEXT_H_ -#define _UC_SETSTACK 0x00010000 -#define _UC_CLRSTACK 0x00020000 -#define _UC_TLSBASE 0x00080000 +#define _UC_SETSTACK 0x00010000 +#define _UC_CLRSTACK 0x00020000 +#define _UC_TLSBASE 0x00080000 /* * Layout of mcontext_t according the System V Application Binary Interface, @@ -144,13 +144,13 @@ typedef struct { } mcontext_t; #ifdef __arch64__ -#define _UC_MACHINE_PAD 8 /* Padding appended to ucontext_t */ -#define _UC_MACHINE_SP(uc) (((uc)->uc_mcontext.__gregs[_REG_O6])+0x7ff) -#define _UC_MACHINE32_PAD 43 /* compat_netbsd32 variant */ -#define _UC_MACHINE32_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_O6]) +#define _UC_MACHINE_PAD 8 /* Padding appended to ucontext_t */ +#define _UC_MACHINE_SP(uc) (((uc)->uc_mcontext.__gregs[_REG_O6]) + 0x7ff) +#define _UC_MACHINE_FP(uc) (((__greg_t *)_UC_MACHINE_SP(uc))[15]) #else -#define _UC_MACHINE_PAD 43 /* Padding appended to ucontext_t */ +#define _UC_MACHINE_PAD 43 /* Padding appended to ucontext_t */ #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_O6]) +#define _UC_MACHINE_FP(uc) (((__greg_t *)_UC_MACHINE_SP(uc))[15]) #endif #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_O0]) Index: src/sys/arch/sparc64/include/mcontext.h diff -u src/sys/arch/sparc64/include/mcontext.h:1.9.32.2 src/sys/arch/sparc64/include/mcontext.h:1.9.32.3 --- src/sys/arch/sparc64/include/mcontext.h:1.9.32.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/sparc64/include/mcontext.h Wed Mar 21 10:08:03 2018 @@ -1,11 +1,11 @@ -/* $NetBSD: mcontext.h,v 1.9.32.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.9.32.3 2018/03/21 10:08:03 martin Exp $ */ #ifndef _SPARC64_MCONTEXT_H_ -#define _SPARC64_MCONTEXT_H_ +#define _SPARC64_MCONTEXT_H_ #include <sparc/mcontext.h> -#define _NGREG32 19 /* %psr, pc, npc, %g1-7, %o0-7 */ +#define _NGREG32 19 /* %psr, pc, npc, %g1-7, %o0-7 */ typedef int __greg32_t; typedef __greg32_t __gregset32_t[_NGREG32]; @@ -76,4 +76,8 @@ typedef struct { #define _UC_CLRSTACK 0x00020000 #define _UC_TLSBASE 0x00080000 +#define _UC_MACHINE32_PAD 43 /* compat_netbsd32 variant */ +#define _UC_MACHINE32_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_O6]) +#define _UC_MACHINE32_FP(uc) (((__greg32_t *)_UC_MACHINE32_SP(uc))[15]) + #endif /* _SPARC64_MCONTEXT_H_ */ Index: src/sys/arch/vax/include/mcontext.h diff -u src/sys/arch/vax/include/mcontext.h:1.8.40.2 src/sys/arch/vax/include/mcontext.h:1.8.40.3 --- src/sys/arch/vax/include/mcontext.h:1.8.40.2 Mon Feb 26 04:32:30 2018 +++ src/sys/arch/vax/include/mcontext.h Wed Mar 21 10:08:03 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.8.40.2 2018/02/26 04:32:30 snj Exp $ */ +/* $NetBSD: mcontext.h,v 1.8.40.3 2018/03/21 10:08:03 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -68,6 +68,7 @@ typedef struct { #define _UC_TLSBASE 0x00080000 #define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) +#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_FP]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) #define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_R0]) Index: src/tests/lib/libc/sys/Makefile diff -u src/tests/lib/libc/sys/Makefile:1.49.4.2 src/tests/lib/libc/sys/Makefile:1.49.4.3 --- src/tests/lib/libc/sys/Makefile:1.49.4.2 Mon Feb 26 04:32:31 2018 +++ src/tests/lib/libc/sys/Makefile Wed Mar 21 10:08:03 2018 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.49.4.2 2018/02/26 04:32:31 snj Exp $ +# $NetBSD: Makefile,v 1.49.4.3 2018/03/21 10:08:03 martin Exp $ MKMAN= no @@ -96,6 +96,7 @@ CPPFLAGS.t_ptrace_wait4.c += -D_KERNTYPE CPPFLAGS.t_ptrace_wait6.c += -D_KERNTYPES CPPFLAGS.t_ptrace_waitid.c += -D_KERNTYPES CPPFLAGS.t_ptrace_waitpid.c += -D_KERNTYPES +CPPFLAGS.t_ucontext.c += -D_KERNTYPES FILES= truncate_test.root_owned FILESBUILD= yes Index: src/tests/lib/libc/sys/t_ucontext.c diff -u src/tests/lib/libc/sys/t_ucontext.c:1.1.34.2 src/tests/lib/libc/sys/t_ucontext.c:1.1.34.3 --- src/tests/lib/libc/sys/t_ucontext.c:1.1.34.2 Mon Feb 26 04:32:31 2018 +++ src/tests/lib/libc/sys/t_ucontext.c Wed Mar 21 10:08:03 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: t_ucontext.c,v 1.1.34.2 2018/02/26 04:32:31 snj Exp $ */ +/* $NetBSD: t_ucontext.c,v 1.1.34.3 2018/03/21 10:08:03 martin Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -29,11 +29,12 @@ #include <sys/cdefs.h> __COPYRIGHT("@(#) Copyright (c) 2008\ The NetBSD Foundation, inc. All rights reserved."); -__RCSID("$NetBSD: t_ucontext.c,v 1.1.34.2 2018/02/26 04:32:31 snj Exp $"); +__RCSID("$NetBSD: t_ucontext.c,v 1.1.34.3 2018/03/21 10:08:03 martin Exp $"); #include <atf-c.h> #include <stdio.h> #include <ucontext.h> +#include <inttypes.h> ATF_TC(ucontext_basic); ATF_TC_HEAD(ucontext_basic, tc) @@ -68,9 +69,73 @@ ATF_TC_BODY(ucontext_basic, tc) ATF_REQUIRE_EQ(y, 21); } +ATF_TC(ucontext_sp); +ATF_TC_HEAD(ucontext_sp, tc) +{ + atf_tc_set_md_var(tc, "descr", "Retrieve _UC_MACHINE_SP()"); +} + +ATF_TC_BODY(ucontext_sp, tc) +{ + ucontext_t u; + + getcontext(&u); + + printf("_UC_MACHINE_SP(u)=%" PRIxREGISTER "\n", (register_t)_UC_MACHINE_SP(&u)); +} + +ATF_TC(ucontext_fp); +ATF_TC_HEAD(ucontext_fp, tc) +{ + atf_tc_set_md_var(tc, "descr", "Retrieve _UC_MACHINE_FP()"); +} + +ATF_TC_BODY(ucontext_fp, tc) +{ + ucontext_t u; + + getcontext(&u); + + printf("_UC_MACHINE_FP(u)=%" PRIxREGISTER "\n", (register_t)_UC_MACHINE_FP(&u)); +} + +ATF_TC(ucontext_pc); +ATF_TC_HEAD(ucontext_pc, tc) +{ + atf_tc_set_md_var(tc, "descr", "Retrieve _UC_MACHINE_PC()"); +} + +ATF_TC_BODY(ucontext_pc, tc) +{ + ucontext_t u; + + getcontext(&u); + + printf("_UC_MACHINE_PC(u)=%" PRIxREGISTER "\n", (register_t)_UC_MACHINE_PC(&u)); +} + +ATF_TC(ucontext_intrv); +ATF_TC_HEAD(ucontext_intrv, tc) +{ + atf_tc_set_md_var(tc, "descr", "Retrieve _UC_MACHINE_INTRV()"); +} + +ATF_TC_BODY(ucontext_intrv, tc) +{ + ucontext_t u; + + getcontext(&u); + + printf("_UC_MACHINE_INTRV(u)=%" PRIxREGISTER "\n", (register_t)_UC_MACHINE_INTRV(&u)); +} + ATF_TP_ADD_TCS(tp) { ATF_TP_ADD_TC(tp, ucontext_basic); + ATF_TP_ADD_TC(tp, ucontext_sp); + ATF_TP_ADD_TC(tp, ucontext_fp); + ATF_TP_ADD_TC(tp, ucontext_pc); + ATF_TP_ADD_TC(tp, ucontext_intrv); return atf_no_error(); }