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();
}