[svn:parrot] r37991 - in trunk: config/gen/platform config/gen/platform/generic config/gen/platform/openbsd src src/jit/i386

Infinoid at svn.parrot.org Infinoid at svn.parrot.org
Thu Apr 9 02:03:14 UTC 2009


Author: Infinoid
Date: Thu Apr  9 02:03:12 2009
New Revision: 37991
URL: https://trac.parrot.org/parrot/changeset/37991

Log:
[core] Extend the mem_free_executable() API to always take a "size" argument. (needed for munmap)
Extend mem_realloc_executable() to add an "oldsize" argument. (needed for mremap)

Modified:
   trunk/config/gen/platform/generic/memexec.c
   trunk/config/gen/platform/openbsd/memexec.c
   trunk/config/gen/platform/platform_interface.h
   trunk/src/jit.c
   trunk/src/jit/i386/jit_defs.c

Modified: trunk/config/gen/platform/generic/memexec.c
==============================================================================
--- trunk/config/gen/platform/generic/memexec.c	Wed Apr  8 23:50:11 2009	(r37990)
+++ trunk/config/gen/platform/generic/memexec.c	Thu Apr  9 02:03:12 2009	(r37991)
@@ -47,21 +47,23 @@
 
 /*
 
-=item C<void mem_free_executable(void *p)>
+=item C<void mem_free_executable(void *p, size_t)>
+
+Free a buffer allocated with mem_alloc_executable().
 
 =cut
 
 */
 
 void
-mem_free_executable(void *p)
+mem_free_executable(void *p, size_t size)
 {
     free(p);
 }
 
 /*
 
-=item C<void * mem_realloc_executable(void* oldp, size_t newsize)>
+=item C<void * mem_realloc_executable(void* oldp, size_t oldsize, size_t newsize)>
 
 Reallocate executable memory
 Round up to page size because the whole page will be marked as executable
@@ -72,7 +74,7 @@
 */
 
 void *
-mem_realloc_executable(void* oldp, size_t newsize)
+mem_realloc_executable(void* oldp, size_t oldsize, size_t newsize)
 {
     void *temp;
     void *newp;

Modified: trunk/config/gen/platform/openbsd/memexec.c
==============================================================================
--- trunk/config/gen/platform/openbsd/memexec.c	Wed Apr  8 23:50:11 2009	(r37990)
+++ trunk/config/gen/platform/openbsd/memexec.c	Thu Apr  9 02:03:12 2009	(r37991)
@@ -49,21 +49,23 @@
 
 /*
 
-=item C<void mem_free_executable(void *p)>
+=item C<void mem_free_executable(void *p, size_t size)>
+
+Free a buffer allocated with mem_alloc_executable().
 
 =cut
 
 */
 
 void
-mem_free_executable(void *p)
+mem_free_executable(void *p, size_t size)
 {
     free(p);
 }
 
 /*
 
-=item C<void * mem_realloc_executable(void* oldp, size_t newsize)>
+=item C<void * mem_realloc_executable(void* oldp, size_t oldsize, size_t newsize)>
 
 Reallocate executable memory
 Round up to page size because the whole page will be marked as executable
@@ -73,7 +75,7 @@
 */
 
 void *
-mem_realloc_executable(void* oldp, size_t newsize)
+mem_realloc_executable(void* oldp, size_t oldsize, size_t newsize)
 {
     size_t pagesize = sysconf(_SC_PAGESIZE);
     size_t roundup = (newsize + pagesize - 1) & ~(pagesize-1);

Modified: trunk/config/gen/platform/platform_interface.h
==============================================================================
--- trunk/config/gen/platform/platform_interface.h	Wed Apr  8 23:50:11 2009	(r37990)
+++ trunk/config/gen/platform/platform_interface.h	Thu Apr  9 02:03:12 2009	(r37991)
@@ -40,12 +40,12 @@
 
 #ifdef PARROT_HAS_EXEC_PROTECT
 void *mem_alloc_executable(size_t);
-void mem_free_executable(void *);
-void *mem_realloc_executable(void *, size_t);
+void mem_free_executable(void *, size_t);
+void *mem_realloc_executable(void *, size_t, size_t);
 #else
 #  define mem_alloc_executable mem_sys_allocate
-#  define mem_free_executable mem_sys_free
-#  define mem_realloc_executable mem_sys_realloc
+#  define mem_free_executable(a, b) mem_sys_free(a)
+#  define mem_realloc_executable(a, b, c) mem_sys_realloc((a), (c))
 #endif
 
 void* Parrot_memcpy_aligned(void*, void*, size_t);

Modified: trunk/src/jit.c
==============================================================================
--- trunk/src/jit.c	Wed Apr  8 23:50:11 2009	(r37990)
+++ trunk/src/jit.c	Thu Apr  9 02:03:12 2009	(r37991)
@@ -1257,7 +1257,7 @@
     }
     /* arena stuff */
     mem_sys_free(jit_info->arena.op_map);
-    mem_free_executable(jit_info->arena.start);
+    mem_free_executable(jit_info->arena.start, jit_info->arena.size);
     fixup = jit_info->arena.fixups;
     while (fixup) {
         next_f = fixup->next;
@@ -1525,7 +1525,7 @@
                 Parrot_jit_extend_arena(jit_info);
 #else
                 new_arena = (char *)mem_realloc_executable(jit_info->arena.start,
-                        (size_t)jit_info->arena.size * 2);
+                        jit_info->arena.size, (size_t)jit_info->arena.size * 2);
                 jit_info->arena.size *= 2;
                 jit_info->native_ptr  = new_arena +
                     (jit_info->native_ptr - jit_info->arena.start);

Modified: trunk/src/jit/i386/jit_defs.c
==============================================================================
--- trunk/src/jit/i386/jit_defs.c	Wed Apr  8 23:50:11 2009	(r37990)
+++ trunk/src/jit/i386/jit_defs.c	Thu Apr  9 02:03:12 2009	(r37991)
@@ -2289,7 +2289,7 @@
             case '2':
             case '3':
             case '4':
-                mem_free_executable(jit_info.native_ptr);
+                mem_free_executable(jit_info.native_ptr, JIT_ALLOC_SIZE);
                 return NULL;
                 break;
                 /* This might be right. Or not... */
@@ -2306,7 +2306,7 @@
                  * oops unknown signature:
                  * cleanup and try nci.c
                  */
-                mem_free_executable(jit_info.native_ptr);
+                mem_free_executable(jit_info.native_ptr, JIT_ALLOC_SIZE);
                 return NULL;
         }
         args_offset +=4;
@@ -2435,7 +2435,7 @@
              * oops unknown signature:
              * cleanup and try nci.c
              */
-            mem_free_executable(jit_info.native_ptr);
+            mem_free_executable(jit_info.native_ptr, JIT_ALLOC_SIZE);
             return NULL;
     }
 


More information about the parrot-commits mailing list