changeset 21462:bd6a451d2588

mmap memory area for generated code to avoid crashes on machines which support noexec
author reimar
date Sun, 03 Dec 2006 20:26:00 +0000
parents 71235c49d6ac
children c355981eebfd
files loader/win32.c
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/loader/win32.c	Sun Dec 03 19:49:39 2006 +0000
+++ b/loader/win32.c	Sun Dec 03 20:26:00 2006 +0000
@@ -70,6 +70,9 @@
 #include <kstat.h>
 #endif
 
+#include <sys/mman.h>
+#include "osdep/mmap_anon.h"
+
 #if HAVE_VSSCANF
 int vsscanf( const char *str, const char *format, va_list ap);
 #else
@@ -5299,14 +5302,18 @@
 #define MAX_STUB_SIZE 0x60
 #define MAX_NUM_STUBS 200
 static int pos=0;
-static char extcode[MAX_NUM_STUBS * MAX_STUB_SIZE];
+static char *extcode = NULL;
 
 static void* add_stub(void)
 {
     int i;
     int found = 0;
     // generated code in runtime!
-    char* answ = extcode + pos * MAX_STUB_SIZE;
+    char* answ;
+    if (!extcode)
+      extcode = mmap_anon(NULL, MAX_NUM_STUBS * MAX_STUB_SIZE,
+                  PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, 0);
+    answ = extcode + pos * MAX_STUB_SIZE;
     if (pos >= MAX_NUM_STUBS) {
       printf("too many stubs, expect crash\n");
       return NULL;