mirror of https://github.com/mpv-player/mpv
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:
parent
80439005c7
commit
190f080791
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue