summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15>2018-12-13 13:24:22 +0000
committerzherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15>2018-12-13 13:24:22 +0000
commitd1aab866c14cf0fcdb754fe409aef66a6150c96c (patch)
tree698d87e68278d300f619738e710f24ade3da8d79
parent7f71ad0c4a5b09bf9791a278abf06fbbae16acc6 (diff)
downloadpcre-d1aab866c14cf0fcdb754fe409aef66a6150c96c.tar.gz
Fix MAP_JIT issues on Mac. Patch by Carlo Arenas.
git-svn-id: svn://vcs.exim.org/pcre/code/trunk@1743 2f5784b3-3f2a-0410-8824-cb99058d5e15
-rw-r--r--sljit/sljitExecAllocator.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/sljit/sljitExecAllocator.c b/sljit/sljitExecAllocator.c
index d056561..6e3b295 100644
--- a/sljit/sljitExecAllocator.c
+++ b/sljit/sljitExecAllocator.c
@@ -96,32 +96,31 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size)
#ifdef MAP_JIT
+#ifdef __APPLE__
+#include <sys/utsname.h>
+#endif /* __APPLE__ */
+
static SLJIT_INLINE int get_map_jit_flag()
{
-#ifdef TARGET_OS_MAC
+#ifdef __APPLE__
/* On macOS systems, returns MAP_JIT if it is defined _and_ we're running on a version
of macOS where it's OK to have more than one JIT block. On non-macOS systems, returns
MAP_JIT if it is defined. */
+ static int map_jit_flag = -1;
- static dispatch_once_t _inited;
- static int map_jit_flag;
-
- dispatch_once(&_inited,
- ^() {
- struct utsname name;
+ if (map_jit_flag == -1) {
+ struct utsname name;
- uname(&name);
+ uname(&name);
- /* Kernel version for 10.14.0 (Mojave) */
- if (atoi(name.release) >= 18)
- map_jit_flag = MAP_JIT;
- }
- );
+ /* Kernel version for 10.14.0 (Mojave) */
+ map_jit_flag = (atoi(name.release) >= 18) ? MAP_JIT : 0;
+ }
return map_jit_flag;
-#else /* !TARGET_OS_MAC */
+#else /* !__APPLE__ */
return MAP_JIT;
-#endif /* TARGET_OS_MAC */
+#endif /* __APPLE__ */
}
#endif /* MAP_JIT */