# HG changeset patch # User Sam Lantinga # Date 1198900229 0 # Node ID 3feb94233f90f198fac28a5068eda196256ecf00 # Parent 4e3b250c950e0fe396390bdffde17bd5bcb05177 Fixed bug #528 OpenBSD (and possibly others) do not have executable memory by default, so use mprotect() to allow execution of dynamic assembly block. diff -r 4e3b250c950e -r 3feb94233f90 src/video/SDL_stretch.c --- a/src/video/SDL_stretch.c Sat Dec 29 02:34:53 2007 +0000 +++ b/src/video/SDL_stretch.c Sat Dec 29 03:50:29 2007 +0000 @@ -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 +#include +#endif + #if defined(_M_IX86) || defined(i386) #define PREFIX16 0x66 #define STORE_BYTE 0xAA @@ -91,6 +100,9 @@ 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;