Module Name: src Committed By: kamil Date: Thu Feb 15 15:53:57 UTC 2018
Modified Files: src/sys/arch/aarch64/include: mcontext.h 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/ia64/include: mcontext.h src/sys/arch/m68k/include: mcontext.h src/sys/arch/mips/include: mcontext.h src/sys/arch/or1k/include: mcontext.h src/sys/arch/powerpc/include: mcontext.h src/sys/arch/riscv/include: mcontext.h src/sys/arch/sh3/include: mcontext.h src/sys/arch/sparc/include: mcontext.h src/sys/arch/vax/include: mcontext.h Log Message: Introduce _UC_MACHINE_FP() as a macro _UC_MACHINE_FP() is a helper macro to extract from mcontext a frame pointer. Don't rely on this interface as a compiler might strip frame pointer or optimize it making this interface unreliable. For hppa assume a small frame context, for larger frames FP might be located in a different register (4 instead of 3). For ia64 there is no strict frame pointer, and registers might rotate. Reuse 79 following: ./gcc/config/ia64/ia64.h:#define HARD_FRAME_POINTER_REGNUM LOC_REG (79) Once ia64 will mature, this should be revisited. A macro can encapsulate a real function for extracting Frame Pointer on more complex CPUs / ABIs. For the remaining CPUs, reuse standard register as defined in appropriate ABI. The direct users of this macro are LLVM and GCC with Sanitizers. Proposed on tech-userlevel@. Sponsored by <The NetBSD Foundation> To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/aarch64/include/mcontext.h cvs rdiff -u -r1.8 -r1.9 src/sys/arch/alpha/include/mcontext.h cvs rdiff -u -r1.18 -r1.19 src/sys/arch/amd64/include/mcontext.h cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/include/mcontext.h cvs rdiff -u -r1.8 -r1.9 src/sys/arch/hppa/include/mcontext.h cvs rdiff -u -r1.13 -r1.14 src/sys/arch/i386/include/mcontext.h cvs rdiff -u -r1.5 -r1.6 src/sys/arch/ia64/include/mcontext.h cvs rdiff -u -r1.9 -r1.10 src/sys/arch/m68k/include/mcontext.h cvs rdiff -u -r1.21 -r1.22 src/sys/arch/mips/include/mcontext.h cvs rdiff -u -r1.1 -r1.2 src/sys/arch/or1k/include/mcontext.h cvs rdiff -u -r1.17 -r1.18 src/sys/arch/powerpc/include/mcontext.h cvs rdiff -u -r1.4 -r1.5 src/sys/arch/riscv/include/mcontext.h cvs rdiff -u -r1.10 -r1.11 src/sys/arch/sh3/include/mcontext.h cvs rdiff -u -r1.13 -r1.14 src/sys/arch/sparc/include/mcontext.h cvs rdiff -u -r1.8 -r1.9 src/sys/arch/vax/include/mcontext.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/aarch64/include/mcontext.h diff -u src/sys/arch/aarch64/include/mcontext.h:1.1 src/sys/arch/aarch64/include/mcontext.h:1.2 --- src/sys/arch/aarch64/include/mcontext.h:1.1 Sun Aug 10 05:47:38 2014 +++ src/sys/arch/aarch64/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.1 2014/08/10 05:47:38 matt Exp $ */ +/* $NetBSD: mcontext.h,v 1.2 2018/02/15 15:53:56 kamil 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 src/sys/arch/alpha/include/mcontext.h:1.9 --- src/sys/arch/alpha/include/mcontext.h:1.8 Wed Sep 12 02:00:54 2012 +++ src/sys/arch/alpha/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.8 2012/09/12 02:00:54 manu Exp $ */ +/* $NetBSD: mcontext.h,v 1.9 2018/02/15 15:53:56 kamil 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 src/sys/arch/amd64/include/mcontext.h:1.19 --- src/sys/arch/amd64/include/mcontext.h:1.18 Mon May 12 22:50:03 2014 +++ src/sys/arch/amd64/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.18 2014/05/12 22:50:03 uebayasi Exp $ */ +/* $NetBSD: mcontext.h,v 1.19 2018/02/15 15:53:56 kamil 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 src/sys/arch/arm/include/mcontext.h:1.19 --- src/sys/arch/arm/include/mcontext.h:1.18 Tue Mar 24 08:38:29 2015 +++ src/sys/arch/arm/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.18 2015/03/24 08:38:29 matt Exp $ */ +/* $NetBSD: mcontext.h,v 1.19 2018/02/15 15:53:56 kamil 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 src/sys/arch/hppa/include/mcontext.h:1.9 --- src/sys/arch/hppa/include/mcontext.h:1.8 Wed Feb 19 13:01:51 2014 +++ src/sys/arch/hppa/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.8 2014/02/19 13:01:51 skrll Exp $ */ +/* $NetBSD: mcontext.h,v 1.9 2018/02/15 15:53:56 kamil Exp $ */ #ifndef _HPPA_MCONTEXT_H_ #define _HPPA_MCONTEXT_H_ @@ -50,6 +50,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[3]) #define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PCOQH]) #define _UC_MACHINE_SET_PC(uc, pc) \ do { \ Index: src/sys/arch/i386/include/mcontext.h diff -u src/sys/arch/i386/include/mcontext.h:1.13 src/sys/arch/i386/include/mcontext.h:1.14 --- src/sys/arch/i386/include/mcontext.h:1.13 Sat Aug 12 07:35:08 2017 +++ src/sys/arch/i386/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.13 2017/08/12 07:35:08 maxv Exp $ */ +/* $NetBSD: mcontext.h,v 1.14 2018/02/15 15:53:56 kamil Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -105,6 +105,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 src/sys/arch/ia64/include/mcontext.h:1.6 --- src/sys/arch/ia64/include/mcontext.h:1.5 Fri Aug 5 17:01:13 2016 +++ src/sys/arch/ia64/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.5 2016/08/05 17:01:13 scole Exp $ */ +/* $NetBSD: mcontext.h,v 1.6 2018/02/15 15:53:56 kamil Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -112,6 +112,7 @@ 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) Index: src/sys/arch/m68k/include/mcontext.h diff -u src/sys/arch/m68k/include/mcontext.h:1.9 src/sys/arch/m68k/include/mcontext.h:1.10 --- src/sys/arch/m68k/include/mcontext.h:1.9 Tue Nov 22 15:25:28 2011 +++ src/sys/arch/m68k/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.9 2011/11/22 15:25:28 joerg Exp $ */ +/* $NetBSD: mcontext.h,v 1.10 2018/02/15 15:53:56 kamil 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 src/sys/arch/mips/include/mcontext.h:1.22 --- src/sys/arch/mips/include/mcontext.h:1.21 Tue May 26 02:16:38 2015 +++ src/sys/arch/mips/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.21 2015/05/26 02:16:38 matt Exp $ */ +/* $NetBSD: mcontext.h,v 1.22 2018/02/15 15:53:56 kamil 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 src/sys/arch/or1k/include/mcontext.h:1.2 --- src/sys/arch/or1k/include/mcontext.h:1.1 Wed Sep 3 19:34:26 2014 +++ src/sys/arch/or1k/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.1 2014/09/03 19:34:26 matt Exp $ */ +/* $NetBSD: mcontext.h,v 1.2 2018/02/15 15:53:56 kamil 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 src/sys/arch/powerpc/include/mcontext.h:1.18 --- src/sys/arch/powerpc/include/mcontext.h:1.17 Tue Aug 12 20:27:10 2014 +++ src/sys/arch/powerpc/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.17 2014/08/12 20:27:10 joerg Exp $ */ +/* $NetBSD: mcontext.h,v 1.18 2018/02/15 15:53:56 kamil 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 src/sys/arch/riscv/include/mcontext.h:1.5 --- src/sys/arch/riscv/include/mcontext.h:1.4 Wed Apr 1 21:55:33 2015 +++ src/sys/arch/riscv/include/mcontext.h Thu Feb 15 15:53:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.4 2015/04/01 21:55:33 matt Exp $ */ +/* $NetBSD: mcontext.h,v 1.5 2018/02/15 15:53:56 kamil 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 src/sys/arch/sh3/include/mcontext.h:1.11 --- src/sys/arch/sh3/include/mcontext.h:1.10 Wed Sep 12 02:00:54 2012 +++ src/sys/arch/sh3/include/mcontext.h Thu Feb 15 15:53:57 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.10 2012/09/12 02:00:54 manu Exp $ */ +/* $NetBSD: mcontext.h,v 1.11 2018/02/15 15:53:57 kamil 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 src/sys/arch/sparc/include/mcontext.h:1.14 --- src/sys/arch/sparc/include/mcontext.h:1.13 Wed Sep 12 02:00:54 2012 +++ src/sys/arch/sparc/include/mcontext.h Thu Feb 15 15:53:57 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.13 2012/09/12 02:00:54 manu Exp $ */ +/* $NetBSD: mcontext.h,v 1.14 2018/02/15 15:53:57 kamil Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -146,11 +146,14 @@ typedef struct { #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_MACHINE_FP(uc) (((uc)->uc_mcontext.__gregs[_REG_O6])+0x80e) #define _UC_MACHINE32_PAD 43 /* compat_netbsd32 variant */ #define _UC_MACHINE32_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_O6]) +#define _UC_MACHINE32_FP(uc) (((uc)->uc_mcontext.__gregs[_REG_O6])+0xf) #else #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) (((uc)->uc_mcontext.__gregs[_REG_O6])+0xf) #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/vax/include/mcontext.h diff -u src/sys/arch/vax/include/mcontext.h:1.8 src/sys/arch/vax/include/mcontext.h:1.9 --- src/sys/arch/vax/include/mcontext.h:1.8 Thu Feb 2 18:32:16 2012 +++ src/sys/arch/vax/include/mcontext.h Thu Feb 15 15:53:57 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: mcontext.h,v 1.8 2012/02/02 18:32:16 matt Exp $ */ +/* $NetBSD: mcontext.h,v 1.9 2018/02/15 15:53:57 kamil 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])