From 0d39a0e365a913fbaa800520706201eafbeaee7d Mon Sep 17 00:00:00 2001 From: Aleksey Demakov Date: Fri, 23 May 2008 14:53:30 +0000 Subject: [PATCH] on win32 use VirtualAlloc and VirtualFree to allocate/free executable memory --- ChangeLog | 5 +++++ jit/jit-alloc.c | 20 +++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index c50b998..a4c22b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-05-23 Juan Jesus Garcia de Soria + + * jit/jit-alloc.c (jit_malloc_exec, jit_free_exec): on win32 use + VirtualAlloc and VirtualFree to allocate/free executable memory. + 2008-05-23 Klaus Treichel * dpas/dpas-scanner.l, tools/gen-rules-scanner.l, diff --git a/jit/jit-alloc.c b/jit/jit-alloc.c index 225208c..6713b64 100644 --- a/jit/jit-alloc.c +++ b/jit/jit-alloc.c @@ -143,10 +143,14 @@ void jit_free(void *ptr) @*/ void *jit_malloc_exec(unsigned int size) { -#ifdef JIT_USE_MMAP - void *ptr = mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, - MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - +#if defined(JIT_WIN32_PLATFORM) + return VirtualAlloc(NULL, size, + MEM_COMMIT | MEM_RESERVE, + PAGE_EXECUTE_READWRITE); +#elif defined(JIT_USE_MMAP) + void *ptr = mmap(0, size, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if(ptr == (void *)-1) { return (void *)0; @@ -169,11 +173,13 @@ void jit_free_exec(void *ptr, unsigned int size) { if(ptr) { - #ifdef JIT_USE_MMAP +#if defined(JIT_WIN32_PLATFORM) + VirtualFree(ptr, size, MEM_DECOMMIT | MEM_RELEASE); +#elif defined(JIT_USE_MMAP) munmap(ptr, size); - #else +#else free(ptr); - #endif +#endif } } -- 2.47.3