From: Aleksey Demakov Date: Fri, 23 May 2008 14:53:30 +0000 (+0000) Subject: on win32 use VirtualAlloc and VirtualFree to allocate/free executable memory X-Git-Tag: before.move.to.git~73 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=0d39a0e365a913fbaa800520706201eafbeaee7d;p=francis%2Flibjit.git on win32 use VirtualAlloc and VirtualFree to allocate/free executable memory --- 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 } }