mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-10 08:57:09 +08:00
netbsd.h (NETBSD_ENABLE_EXECUTE_STACK): Define __enable_execute_stack function.
* config/netbsd.h (NETBSD_ENABLE_EXECUTE_STACK): Define __enable_execute_stack function. * config/alpha/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Define as NETBSD_ENABLE_EXECUTE_STACK. * config/i386/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Ditto. * config/i386/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Ditto. * config/i386/netbsd64.h (TRANSFER_FROM_TRAMPOLINE): Ditto. * config/sparc/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Ditto. * config/sparc/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Ditto. From-SVN: r58292
This commit is contained in:
parent
5791cc2970
commit
90e021a061
@ -1,3 +1,15 @@
|
||||
2002-10-18 Jason Thorpe <thorpej@wasabisystems.com>
|
||||
|
||||
* config/netbsd.h (NETBSD_ENABLE_EXECUTE_STACK): Define
|
||||
__enable_execute_stack function.
|
||||
* config/alpha/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Define
|
||||
as NETBSD_ENABLE_EXECUTE_STACK.
|
||||
* config/i386/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
|
||||
* config/i386/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
|
||||
* config/i386/netbsd64.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
|
||||
* config/sparc/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
|
||||
* config/sparc/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
|
||||
|
||||
2002-10-18 Jason Thorpe <thorpej@wasabisystems.com>
|
||||
|
||||
* config/i386/i386.c (x86_initialize_trampoline): Emit a call
|
||||
|
@ -75,5 +75,10 @@ Boston, MA 02111-1307, USA. */
|
||||
%{!shared:crtend%O%s} %{shared:crtendS%O%s}"
|
||||
|
||||
|
||||
/* Attempt to enable execute permissions on the stack. */
|
||||
|
||||
#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
|
||||
|
||||
|
||||
#undef TARGET_VERSION
|
||||
#define TARGET_VERSION fprintf (stderr, " (NetBSD/alpha ELF)");
|
||||
|
@ -121,4 +121,7 @@ Boston, MA 02111-1307, USA. */
|
||||
we don't care about compatibility with older gcc versions. */
|
||||
#define DEFAULT_PCC_STRUCT_RETURN 1
|
||||
|
||||
/* Attempt to enable execute permissions on the stack. */
|
||||
#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
|
||||
|
||||
#define TARGET_VERSION fprintf (stderr, " (NetBSD/i386 ELF)");
|
||||
|
@ -67,3 +67,6 @@
|
||||
prefix is added. */
|
||||
#undef GOT_SYMBOL_NAME
|
||||
#define GOT_SYMBOL_NAME "GLOBAL_OFFSET_TABLE_"
|
||||
|
||||
/* Attempt to enable execute permissions on the stack. */
|
||||
#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
|
||||
|
@ -69,5 +69,7 @@ Boston, MA 02111-1307, USA. */
|
||||
fprintf (FILE, "\tcall __mcount\n"); \
|
||||
}
|
||||
|
||||
/* Attempt to enable execute permissions on the stack. */
|
||||
#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
|
||||
|
||||
#define TARGET_VERSION fprintf (stderr, " (NetBSD/x86_64 ELF)");
|
||||
|
@ -161,3 +161,51 @@ Boston, MA 02111-1307, USA. */
|
||||
|
||||
#undef WINT_TYPE
|
||||
#define WINT_TYPE "int"
|
||||
|
||||
|
||||
/* Attempt to turn on execute permission for the stack. This may be
|
||||
used by TRANSFER_FROM_TRAMPOLINE of the target needs it (that is,
|
||||
if the target machine can change execute permissions on a page).
|
||||
|
||||
There is no way to query the execute permission of the stack, so
|
||||
we always issue the mprotect() call.
|
||||
|
||||
Note that we go out of our way to use namespace-non-invasive calls
|
||||
here. Unfortunately, there is no libc-internal name for mprotect().
|
||||
|
||||
Also note that no errors should be emitted by this code; it is considered
|
||||
dangerous for library calls to send messages to stdout/stderr. */
|
||||
|
||||
#define NETBSD_ENABLE_EXECUTE_STACK \
|
||||
extern void __enable_execute_stack (void *); \
|
||||
void \
|
||||
__enable_execute_stack (addr) \
|
||||
void *addr; \
|
||||
{ \
|
||||
extern int mprotect (void *, size_t, int); \
|
||||
extern int __sysctl (int *, unsigned int, void *, size_t *, \
|
||||
void *, size_t); \
|
||||
\
|
||||
static int size; \
|
||||
static long mask; \
|
||||
\
|
||||
char *page, *end; \
|
||||
\
|
||||
if (size == 0) \
|
||||
{ \
|
||||
int mib[2]; \
|
||||
size_t len; \
|
||||
\
|
||||
mib[0] = 6; /* CTL_HW */ \
|
||||
mib[1] = 7; /* HW_PAGESIZE */ \
|
||||
len = sizeof (size); \
|
||||
(void) __sysctl (mib, 2, &size, &len, NULL, 0); \
|
||||
mask = ~((long) size - 1); \
|
||||
} \
|
||||
\
|
||||
page = (char *) (((long) addr) & mask); \
|
||||
end = (char *) ((((long) (addr + TRAMPOLINE_SIZE)) & mask) + size); \
|
||||
\
|
||||
/* 7 == PROT_READ | PROT_WRITE | PROT_EXEC */ \
|
||||
(void) mprotect (page, end - page, 7); \
|
||||
}
|
||||
|
@ -102,6 +102,9 @@ Boston, MA 02111-1307, USA. */
|
||||
|
||||
#undef STDC_0_IN_SYSTEM_HEADERS
|
||||
|
||||
/* Attempt to enable execute permissions on the stack. */
|
||||
#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
|
||||
|
||||
#undef TARGET_VERSION
|
||||
#define TARGET_VERSION fprintf (stderr, " (%s)", TARGET_NAME);
|
||||
|
||||
|
@ -44,3 +44,6 @@
|
||||
/* Until they use ELF or something that handles dwarf2 unwinds
|
||||
and initialization stuff better. */
|
||||
#define DWARF2_UNWIND_INFO 0
|
||||
|
||||
/* Attempt to enable execute permissions on the stack. */
|
||||
#define TRANSFER_FROM_TRAMPOLINE NETBSD_ENABLE_EXECUTE_STACK
|
||||
|
Loading…
Reference in New Issue
Block a user