aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/sparc
diff options
context:
space:
mode:
authorDavid O'Brien <obrien@FreeBSD.org>2002-10-31 09:08:11 +0000
committerDavid O'Brien <obrien@gcc.gnu.org>2002-10-31 09:08:11 +0000
commite8e4c876bcf67039d8f9a8694a4cac4c82f1fb55 (patch)
tree998807df78f2320e5bb9d2f86b70e5f8dbcfc32b /gcc/config/sparc
parent0d55d45aa5ce43c9b2050c7625e3d7a0a6319cf6 (diff)
downloadgcc-e8e4c876bcf67039d8f9a8694a4cac4c82f1fb55.zip
gcc-e8e4c876bcf67039d8f9a8694a4cac4c82f1fb55.tar.gz
gcc-e8e4c876bcf67039d8f9a8694a4cac4c82f1fb55.tar.bz2
freebsd.h (TRANSFER_FROM_TRAMPOLINE): Define __enable_execute_stack function.
2002-10-31 David O'Brien <obrien@FreeBSD.org> * config/sparc/freebsd.h (TRANSFER_FROM_TRAMPOLINE): Define __enable_execute_stack function. Approved by: David S. Miller <davem@redhat.com> Message-Id: <20021031.005015.22856738.davem@redhat.com> From-SVN: r58674
Diffstat (limited to 'gcc/config/sparc')
-rw-r--r--gcc/config/sparc/freebsd.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/gcc/config/sparc/freebsd.h b/gcc/config/sparc/freebsd.h
index 8149923..73155ae 100644
--- a/gcc/config/sparc/freebsd.h
+++ b/gcc/config/sparc/freebsd.h
@@ -96,6 +96,37 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#undef SPARC_DEFAULT_CMODEL
#define SPARC_DEFAULT_CMODEL CM_MEDLOW
+#define TRANSFER_FROM_TRAMPOLINE \
+static int need_enable_exec_stack; \
+ \
+static void check_enabling(void) __attribute__ ((constructor)); \
+static void check_enabling(void) \
+{ \
+ extern int sysctlbyname(const char *, void *, size_t *, void *, size_t);\
+ size_t len; \
+ int prot; \
+ \
+ prot = 0; \
+ len = sizeof(prot); \
+ sysctlbyname ("kern.stackprot", &prot, &len, NULL, 0); \
+ if (prot != 7) \
+ need_enable_exec_stack = 1; \
+} \
+ \
+extern void __enable_execute_stack (void *); \
+void \
+__enable_execute_stack (addr) \
+ void *addr; \
+{ \
+ if (!need_enable_exec_stack) \
+ return; \
+ else { \
+ /* 7 is PROT_READ | PROT_WRITE | PROT_EXEC */ \
+ if (mprotect (addr, TRAMPOLINE_SIZE, 7) < 0) \
+ perror ("mprotect of trampoline code"); \
+ } \
+}
+
/************************[ Assembler stuff ]********************************/