mirror of
https://github.com/opnsense/src.git
synced 2026-06-11 09:41:03 -04:00
Sync with the stock FSF 3.2 file. This adds TRANSFER_FROM_TRAMPOLINE,
which is needed in order for nexted C functions to work.
This commit is contained in:
parent
851c3ad031
commit
81ac040a36
1 changed files with 26 additions and 0 deletions
|
|
@ -26,6 +26,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#undef CPP_CPU64_DEFAULT_SPEC
|
||||
#define CPP_CPU64_DEFAULT_SPEC "-D__sparc64__ -D__sparc_v9__ -D__arch64__"
|
||||
|
||||
/* Because we include sparc/sysv4.h. */
|
||||
#undef CPP_PREDEFINES
|
||||
#define CPP_PREDEFINES FBSD_CPP_PREDEFINES
|
||||
|
||||
|
|
@ -102,6 +103,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 ]********************************/
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue