Fixed bug #528
OpenBSD (and possibly others) do not have executable memory by default, so use mprotect() to allow execution of dynamic assembly block. --HG-- branch : SDL-1.2 extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/branches/SDL-1.2%402662
This commit is contained in:
parent
f037300cd2
commit
47781d53a0
1 changed files with 12 additions and 0 deletions
|
@ -42,6 +42,15 @@
|
||||||
|
|
||||||
#ifdef USE_ASM_STRETCH
|
#ifdef USE_ASM_STRETCH
|
||||||
|
|
||||||
|
/* OpenBSD has non-executable memory by default, so use mprotect() */
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
#define USE_MPROTECT
|
||||||
|
#endif
|
||||||
|
#ifdef USE_MPROTECT
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(_M_IX86) || defined(i386)
|
#if defined(_M_IX86) || defined(i386)
|
||||||
#define PREFIX16 0x66
|
#define PREFIX16 0x66
|
||||||
#define STORE_BYTE 0xAA
|
#define STORE_BYTE 0xAA
|
||||||
|
@ -91,6 +100,9 @@ static int generate_rowbytes(int src_w, int dst_w, int bpp)
|
||||||
SDL_SetError("ASM stretch of %d bytes isn't supported\n", bpp);
|
SDL_SetError("ASM stretch of %d bytes isn't supported\n", bpp);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
#ifdef USE_MPROTECT
|
||||||
|
mprotect(copy_row, sizeof(copy_row), PROT_READ|PROT_WRITE|PROT_EXEC);
|
||||||
|
#endif
|
||||||
pos = 0x10000;
|
pos = 0x10000;
|
||||||
inc = (src_w << 16) / dst_w;
|
inc = (src_w << 16) / dst_w;
|
||||||
eip = copy_row;
|
eip = copy_row;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue