From a37d07694aea0d14b9a4bf415e2ef2cd990db6e2 Mon Sep 17 00:00:00 2001 From: David O'Brien Date: Fri, 1 Nov 2002 19:48:06 +0000 Subject: [PATCH] freebsd.h (TRANSFER_FROM_TRAMPOLINE): Define __enable_execute_stack function. 2002-11-01 David O'Brien * config/sparc/freebsd.h (TRANSFER_FROM_TRAMPOLINE): Define __enable_execute_stack function. Approved by: Mark Mitchell Message-ID: <79240000.1036086868@warlock.codesourcery.com> From-SVN: r58726 --- gcc/ChangeLog | 5 +++++ gcc/config/sparc/freebsd.h | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bf62e0fca519..6ee80175b474 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-11-01 David O'Brien + + * config/sparc/freebsd.h (TRANSFER_FROM_TRAMPOLINE): Define + __enable_execute_stack function. + 2002-11-01 Richard Earnshaw (rearnsha@arm.com) PR target/7856 diff --git a/gcc/config/sparc/freebsd.h b/gcc/config/sparc/freebsd.h index 54b5f0ae5c49..67f17d036aa0 100644 --- a/gcc/config/sparc/freebsd.h +++ b/gcc/config/sparc/freebsd.h @@ -99,6 +99,31 @@ 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);\ + int prot = 0; \ + size_t 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 (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 ]********************************/ -- 2.47.2