summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/builtins/enable_execute_stack.c
diff options
context:
space:
mode:
Diffstat (limited to 'compiler-rt/lib/builtins/enable_execute_stack.c')
-rw-r--r--compiler-rt/lib/builtins/enable_execute_stack.c43
1 files changed, 22 insertions, 21 deletions
diff --git a/compiler-rt/lib/builtins/enable_execute_stack.c b/compiler-rt/lib/builtins/enable_execute_stack.c
index 1318ea92c82..d1ad90bf9d5 100644
--- a/compiler-rt/lib/builtins/enable_execute_stack.c
+++ b/compiler-rt/lib/builtins/enable_execute_stack.c
@@ -29,43 +29,44 @@
#endif /* _WIN32 */
#if __LP64__
- #define TRAMPOLINE_SIZE 48
+#define TRAMPOLINE_SIZE 48
#else
- #define TRAMPOLINE_SIZE 40
+#define TRAMPOLINE_SIZE 40
#endif
/*
- * The compiler generates calls to __enable_execute_stack() when creating
+ * The compiler generates calls to __enable_execute_stack() when creating
* trampoline functions on the stack for use with nested functions.
- * It is expected to mark the page(s) containing the address
+ * It is expected to mark the page(s) containing the address
* and the next 48 bytes as executable. Since the stack is normally rw-
- * that means changing the protection on those page(s) to rwx.
+ * that means changing the protection on those page(s) to rwx.
*/
-COMPILER_RT_ABI void
-__enable_execute_stack(void* addr)
-{
+COMPILER_RT_ABI void __enable_execute_stack(void *addr) {
#if _WIN32
- MEMORY_BASIC_INFORMATION mbi;
- if (!VirtualQuery (addr, &mbi, sizeof(mbi)))
- return; /* We should probably assert here because there is no return value */
- VirtualProtect (mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE, &mbi.Protect);
+ MEMORY_BASIC_INFORMATION mbi;
+ if (!VirtualQuery(addr, &mbi, sizeof(mbi)))
+ return; /* We should probably assert here because there is no return value
+ */
+ VirtualProtect(mbi.BaseAddress, mbi.RegionSize, PAGE_EXECUTE_READWRITE,
+ &mbi.Protect);
#else
#if __APPLE__
- /* On Darwin, pagesize is always 4096 bytes */
- const uintptr_t pageSize = 4096;
+ /* On Darwin, pagesize is always 4096 bytes */
+ const uintptr_t pageSize = 4096;
#elif !defined(HAVE_SYSCONF)
#error "HAVE_SYSCONF not defined! See enable_execute_stack.c"
#else
- const uintptr_t pageSize = sysconf(_SC_PAGESIZE);
+ const uintptr_t pageSize = sysconf(_SC_PAGESIZE);
#endif /* __APPLE__ */
- const uintptr_t pageAlignMask = ~(pageSize-1);
- uintptr_t p = (uintptr_t)addr;
- unsigned char* startPage = (unsigned char*)(p & pageAlignMask);
- unsigned char* endPage = (unsigned char*)((p+TRAMPOLINE_SIZE+pageSize) & pageAlignMask);
- size_t length = endPage - startPage;
- (void) mprotect((void *)startPage, length, PROT_READ | PROT_WRITE | PROT_EXEC);
+ const uintptr_t pageAlignMask = ~(pageSize - 1);
+ uintptr_t p = (uintptr_t)addr;
+ unsigned char *startPage = (unsigned char *)(p & pageAlignMask);
+ unsigned char *endPage =
+ (unsigned char *)((p + TRAMPOLINE_SIZE + pageSize) & pageAlignMask);
+ size_t length = endPage - startPage;
+ (void)mprotect((void *)startPage, length, PROT_READ | PROT_WRITE | PROT_EXEC);
#endif
}
OpenPOWER on IntegriCloud