mmap memory area for generated code to avoid crashes on machines which

support noexec


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21478 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2006-12-03 20:26:00 +00:00
parent 80439005c7
commit 190f080791
1 changed files with 9 additions and 2 deletions

View File

@ -70,6 +70,9 @@ for DLL to know too much about its environment.
#include <kstat.h> #include <kstat.h>
#endif #endif
#include <sys/mman.h>
#include "osdep/mmap_anon.h"
#if HAVE_VSSCANF #if HAVE_VSSCANF
int vsscanf( const char *str, const char *format, va_list ap); int vsscanf( const char *str, const char *format, va_list ap);
#else #else
@ -5299,14 +5302,18 @@ static void ext_stubs(void)
#define MAX_STUB_SIZE 0x60 #define MAX_STUB_SIZE 0x60
#define MAX_NUM_STUBS 200 #define MAX_NUM_STUBS 200
static int pos=0; static int pos=0;
static char extcode[MAX_NUM_STUBS * MAX_STUB_SIZE]; static char *extcode = NULL;
static void* add_stub(void) static void* add_stub(void)
{ {
int i; int i;
int found = 0; int found = 0;
// generated code in runtime! // 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) { if (pos >= MAX_NUM_STUBS) {
printf("too many stubs, expect crash\n"); printf("too many stubs, expect crash\n");
return NULL; return NULL;