]> git.unchartedbackwaters.co.uk Git - francis/libjit.git/commitdiff
on win32 use VirtualAlloc and VirtualFree to allocate/free executable memory
authorAleksey Demakov <ademakov@gmail.com>
Fri, 23 May 2008 14:53:30 +0000 (14:53 +0000)
committerAleksey Demakov <ademakov@gmail.com>
Fri, 23 May 2008 14:53:30 +0000 (14:53 +0000)
ChangeLog
jit/jit-alloc.c

index c50b998539292c51e765a89e653eb0f14e56670f..a4c22b833a7f4c866835f8af34f0518bcdc2fcc1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-23  Juan Jesus Garcia de Soria  <juanj.g_soria@grupobbva.com>
+
+       * 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   <ktreichel@web.de>
 
        * dpas/dpas-scanner.l, tools/gen-rules-scanner.l,
index 225208c6b530b5d9b0cd2bdf504b2cf85b6ba25e..6713b64a0e84b8eec066ac1d5d55c58907d7d32a 100644 (file)
@@ -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
        }
 }