aboutsummaryrefslogtreecommitdiff
path: root/src/lj_ccallback.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_ccallback.c')
-rw-r--r--src/lj_ccallback.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lj_ccallback.c b/src/lj_ccallback.c
index 9de86258..8d6cb737 100644
--- a/src/lj_ccallback.c
+++ b/src/lj_ccallback.c
@@ -256,6 +256,11 @@ static void *callback_mcode_init(global_State *g, uint32_t *page)
256#ifndef MAP_ANONYMOUS 256#ifndef MAP_ANONYMOUS
257#define MAP_ANONYMOUS MAP_ANON 257#define MAP_ANONYMOUS MAP_ANON
258#endif 258#endif
259#ifdef PROT_MPROTECT
260#define CCPROT_CREATE (PROT_MPROTECT(PROT_EXEC))
261#else
262#define CCPROT_CREATE 0
263#endif
259 264
260#endif 265#endif
261 266
@@ -271,7 +276,7 @@ static void callback_mcode_new(CTState *cts)
271 if (!p) 276 if (!p)
272 lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV); 277 lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV);
273#elif LJ_TARGET_POSIX 278#elif LJ_TARGET_POSIX
274 p = mmap(NULL, sz, (PROT_READ|PROT_WRITE), MAP_PRIVATE|MAP_ANONYMOUS, 279 p = mmap(NULL, sz, (PROT_READ|PROT_WRITE|CCPROT_CREATE), MAP_PRIVATE|MAP_ANONYMOUS,
275 -1, 0); 280 -1, 0);
276 if (p == MAP_FAILED) 281 if (p == MAP_FAILED)
277 lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV); 282 lj_err_caller(cts->L, LJ_ERR_FFI_CBACKOV);