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
|
||||
|
||||
/* 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)
|
||||
#define PREFIX16 0x66
|
||||
#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);
|
||||
return(-1);
|
||||
}
|
||||
#ifdef USE_MPROTECT
|
||||
mprotect(copy_row, sizeof(copy_row), PROT_READ|PROT_WRITE|PROT_EXEC);
|
||||
#endif
|
||||
pos = 0x10000;
|
||||
inc = (src_w << 16) / dst_w;
|
||||
eip = copy_row;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue