summaryrefslogtreecommitdiff
path: root/devel/pcre2/patches/patch-src_sljit_sljitProtExecAllocator.c
diff options
context:
space:
mode:
Diffstat (limited to 'devel/pcre2/patches/patch-src_sljit_sljitProtExecAllocator.c')
-rw-r--r--devel/pcre2/patches/patch-src_sljit_sljitProtExecAllocator.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/devel/pcre2/patches/patch-src_sljit_sljitProtExecAllocator.c b/devel/pcre2/patches/patch-src_sljit_sljitProtExecAllocator.c
new file mode 100644
index 00000000000..a42e867a7c5
--- /dev/null
+++ b/devel/pcre2/patches/patch-src_sljit_sljitProtExecAllocator.c
@@ -0,0 +1,43 @@
+$NetBSD: patch-src_sljit_sljitProtExecAllocator.c,v 1.4 2020/05/28 07:53:05 wiz Exp $
+
+cleanup alloc_chunk() in sljitProtExec for NetBSD
+https://github.com/zherczeg/sljit/pull/40/commits
+
+--- src/sljit/sljitProtExecAllocator.c.orig 2020-04-14 15:20:34.000000000 +0000
++++ src/sljit/sljitProtExecAllocator.c
+@@ -220,28 +220,26 @@ static SLJIT_INLINE struct chunk_header*
+ static SLJIT_INLINE struct chunk_header* alloc_chunk(sljit_uw size)
+ {
+ struct chunk_header *retval;
+- void *maprx;
+
+ retval = (struct chunk_header *)mmap(NULL, size,
+- PROT_MPROTECT(PROT_EXEC|PROT_WRITE|PROT_READ),
+- MAP_ANON, -1, 0);
++ PROT_READ | PROT_WRITE | PROT_MPROTECT(PROT_EXEC),
++ MAP_ANON | MAP_SHARED, -1, 0);
+
+ if (retval == MAP_FAILED)
+ return NULL;
+
+- maprx = mremap(retval, size, NULL, size, MAP_REMAPDUP);
+- if (maprx == MAP_FAILED) {
++ retval->executable = mremap(retval, size, NULL, size, MAP_REMAPDUP);
++ if (retval->executable == MAP_FAILED) {
+ munmap((void *)retval, size);
+ return NULL;
+ }
+
+- if (mprotect(retval, size, PROT_READ | PROT_WRITE) == -1 ||
+- mprotect(maprx, size, PROT_READ | PROT_EXEC) == -1) {
+- munmap(maprx, size);
++ if (mprotect(retval->executable, size, PROT_READ | PROT_EXEC) == -1) {
++ munmap(retval->executable, size);
+ munmap((void *)retval, size);
+ return NULL;
+ }
+- retval->executable = maprx;
++
+ return retval;
+ }
+ #endif /* NetBSD >= 8 */