diff options
author | zherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15> | 2018-12-13 13:24:22 +0000 |
---|---|---|
committer | zherczeg <zherczeg@2f5784b3-3f2a-0410-8824-cb99058d5e15> | 2018-12-13 13:24:22 +0000 |
commit | d1aab866c14cf0fcdb754fe409aef66a6150c96c (patch) | |
tree | 698d87e68278d300f619738e710f24ade3da8d79 | |
parent | 7f71ad0c4a5b09bf9791a278abf06fbbae16acc6 (diff) | |
download | pcre-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.c | 29 |
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 */ |