<pre style='margin:0'>
Renee Otten (reneeotten) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/68164fa718889e7a79681a2c4a0eb25f2dae0565">https://github.com/macports/macports-ports/commit/68164fa718889e7a79681a2c4a0eb25f2dae0565</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 68164fa7188 erlang: update to 28.0
</span>68164fa7188 is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 68164fa718889e7a79681a2c4a0eb25f2dae0565
</span>Author: Paul Guyot <pguyot@kallisys.net>
AuthorDate: Sat May 24 22:57:52 2025 +0200
<span style='display:block; white-space:pre;color:#404040;'> erlang: update to 28.0
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Signed-off-by: Paul Guyot <pguyot@kallisys.net>
</span>---
lang/erlang/Portfile | 24 +-
lang/erlang/files/patch-asmjit-dualmap.diff | 457 ----------------------------
lang/erlang/files/patch-enable-jit-x86.diff | 36 +++
3 files changed, 48 insertions(+), 469 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/erlang/Portfile b/lang/erlang/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index fd0176571ab..5daccfcd2da 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/erlang/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/erlang/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -9,7 +9,7 @@ PortGroup legacysupport 1.1
</span> legacysupport.newest_darwin_requires_legacy 10
name erlang
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version 27.3.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version 28.0
</span> revision 0
set doc_version ${version}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -46,17 +46,17 @@ distfiles otp_src_${version}${extract.suffix} \
</span> otp_doc_html_${doc_version}${extract.suffix}
checksums otp_src_${version}.tar.gz \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 832cb2bea4c43f7bbb13bbc0c20f23c3e63e5852 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 7997a0900d149c82ae3d0f523d7dfa960ac3cd58acf0b158519c108eb5c65661 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 101464740 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 e13c2f2470897a4d4dc39aefbf583dcfee67b67d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 71b5bf16e5b7b5d9fae98576c87aceac447964aaa3b4b457a5f60906839af92c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 104134559 \
</span> otp_doc_man_${doc_version}.tar.gz \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 7afcd072596a7b591a48794cd3cb03df3348951d \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 3d05f15e226cb447e031e71f541ac7a39351bdb55c2a1929ca37dbfe111872d4 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 45128 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 f7802d48cac3ade3cdb1bfb036bb47f0a6c6cbb9 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 41bcdb85b1f8b8a944fa42137311e4454778d4dbbd13f95659d14c2e9eb50d62 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 44905 \
</span> otp_doc_html_${doc_version}.tar.gz \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 a48b22ba119e8a2f217aa6188e2ff3a85ce1cfbc \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 eef65d2a8cef838640fb4367d657615cac22cd4f2d5c44284943dc714fb1548f \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 26081286
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 7ded67f8b8b7337685e00a20371ce7c222401c9c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 9eebbb8820f0a75d70d88758b32d3d9009828cf7d954f448a586639e74c5c65d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 26565055
</span>
worksrcdir otp_src_${version}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -121,8 +121,8 @@ platform darwin {
</span> }
# asmjit fix for Sonoma annoying popup with JIT on amd64
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # Upstream didn't want to include it yet
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- patchfiles-append patch-asmjit-dualmap.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Upstream included it but forgot to enable JIT on amd64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patchfiles-append patch-enable-jit-x86.diff
</span> }
# FIXME: allow building with wxGTK on older systems.
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/erlang/files/patch-asmjit-dualmap.diff b/lang/erlang/files/patch-asmjit-dualmap.diff
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 062079718e9..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/erlang/files/patch-asmjit-dualmap.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,457 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --color=auto -ru erts/emulator/asmjit/core/globals.cpp asmjit.patched/core/globals.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- erts/emulator/asmjit/core/globals.cpp 2024-10-17 10:41:53
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ asmjit.patched/core/globals.cpp 2024-10-19 09:24:53
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -87,6 +87,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "ExpressionOverflow\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "FailedToOpenAnonymousMemory\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "FailedToOpenFile\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "ProtectionFailure\0"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "<Unknown>\0";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static const uint16_t sErrorIndex[] = {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -94,7 +95,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 247, 264, 283, 298, 314, 333, 352, 370, 392, 410, 429, 444, 460, 474, 488,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 508, 533, 551, 573, 595, 612, 629, 645, 661, 677, 694, 709, 724, 744, 764,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 784, 817, 837, 852, 869, 888, 909, 929, 943, 964, 978, 996, 1012, 1028, 1047,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- 1073, 1088, 1104, 1119, 1134, 1164, 1188, 1207, 1235, 1252
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ 1073, 1088, 1104, 1119, 1134, 1164, 1188, 1207, 1235, 1252, 1270
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // @EnumStringEnd@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --color=auto -ru erts/emulator/asmjit/core/globals.h asmjit.patched/core/globals.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- erts/emulator/asmjit/core/globals.h 2024-10-17 10:41:53
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ asmjit.patched/core/globals.h 2024-10-19 09:24:53
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -330,6 +330,10 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- //! \note This is a generic error that is used by internal filesystem API.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kErrorFailedToOpenFile,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! Protection failure can be returned from a virtual memory allocator or when trying to change memory access
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! permissions.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ kErrorProtectionFailure,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // @EnumValuesEnd@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- //! Count of AsmJit error codes.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --color=auto -ru erts/emulator/asmjit/core/virtmem.cpp asmjit.patched/core/virtmem.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- erts/emulator/asmjit/core/virtmem.cpp 2024-10-17 10:41:53
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ asmjit.patched/core/virtmem.cpp 2024-10-19 09:24:53
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -76,8 +76,6 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define MAP_ANONYMOUS MAP_ANON
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- #define ASMJIT_ANONYMOUS_MEMORY_USE_FD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Android NDK doesn't provide `shm_open()` and `shm_unlink()`.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #if !defined(__BIONIC__) && !defined(ASMJIT_NO_SHM_OPEN)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define ASMJIT_HAS_SHM_OPEN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -89,18 +87,60 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define ASMJIT_VM_SHM_DETECT 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- #if defined(__APPLE__) && TARGET_OS_OSX && ASMJIT_ARCH_ARM >= 64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- #define ASMJIT_HAS_PTHREAD_JIT_WRITE_PROTECT_NP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #if defined(__APPLE__) && TARGET_OS_OSX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #if ASMJIT_ARCH_X86 != 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #define ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #if ASMJIT_ARCH_ARM >= 64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #define ASMJIT_HAS_PTHREAD_JIT_WRITE_PROTECT_NP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #if defined(__APPLE__) && ASMJIT_ARCH_X86 == 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #define ASMJIT_NO_DUAL_MAPPING
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #if defined(__NetBSD__) && defined(MAP_REMAPDUP) && defined(PROT_MPROTECT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- #undef ASMJIT_ANONYMOUS_MEMORY_USE_FD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define ASMJIT_ANONYMOUS_MEMORY_USE_REMAPDUP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #if !defined(ASMJIT_ANONYMOUS_MEMORY_USE_REMAPDUP) && \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ !defined(ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP) && \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ !defined(ASMJIT_NO_DUAL_MAPPING)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #define ASMJIT_ANONYMOUS_MEMORY_USE_FD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <atomic>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <mach/mach.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <mach/mach_time.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern "C" {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef mig_external
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+mig_external
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+kern_return_t mach_vm_remap(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ vm_map_t target_task,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ mach_vm_address_t *target_address,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ mach_vm_size_t size,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ mach_vm_offset_t mask,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int flags,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ vm_map_t src_task,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ mach_vm_address_t src_address,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ boolean_t copy,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ vm_prot_t *cur_protection,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ vm_prot_t *max_protection,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ vm_inherit_t inheritance
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+} // {extern "C"}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_BEGIN_SUB_NAMESPACE(VirtMem)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Virtual Memory Utilities
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -141,6 +181,11 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return ::GetLargePageMinimum();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static bool hasDualMappingSupport() noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // TODO: This assumption works on X86 platforms, this may not work on AArch64.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return true;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Returns windows-specific protectFlags from \ref MemoryFlags.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static DWORD protectFlagsFromMemoryFlags(MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- DWORD protectFlags;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -165,7 +210,12 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static HardenedRuntimeFlags getHardenedRuntimeFlags() noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return HardenedRuntimeFlags::kNone;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ HardenedRuntimeFlags flags = HardenedRuntimeFlags::kNone;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (hasDualMappingSupport())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ flags |= HardenedRuntimeFlags::kDualMapping;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return flags;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Error alloc(void** p, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -703,8 +753,8 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Detects whether MAP_JIT is available.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static inline bool hasMapJitSupport() noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#if defined(__APPLE__) && TARGET_OS_OSX && ASMJIT_ARCH_ARM >= 64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- // OSX on AArch64 always uses hardened runtime + MAP_JIT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(__APPLE__) && TARGET_OS_OSX && ASMJIT_ARCH_X86 == 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // Apple platforms always use hardened runtime + MAP_JIT on non-x86 hardware:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // - https://developer.apple.com/documentation/apple_silicon/porting_just-in-time_compilers_to_apple_silicon
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return true;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #elif defined(__APPLE__) && TARGET_OS_OSX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -746,6 +796,14 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static inline bool hasDualMappingSupport() noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(ASMJIT_NO_DUAL_MAPPING)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return false;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return true;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static HardenedRuntimeFlags getHardenedRuntimeFlags() noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- HardenedRuntimeFlags flags = HardenedRuntimeFlags::kNone;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -755,6 +813,9 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (hasMapJitSupport())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- flags |= HardenedRuntimeFlags::kMapJit;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (hasDualMappingSupport())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ flags |= HardenedRuntimeFlags::kDualMapping;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return flags;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -828,6 +889,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Virtual Memory [Posix] - Dual Mapping
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // =====================================
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if !defined(ASMJIT_NO_DUAL_MAPPING)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static Error unmapDualMapping(DualMapping* dm, size_t size) noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Error err1 = unmapMemory(dm->rx, size);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Error err2 = kErrorOk;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -843,6 +905,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dm->rw = nullptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return kErrorOk;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // !ASMJIT_NO_DUAL_MAPPING
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #if defined(ASMJIT_ANONYMOUS_MEMORY_USE_REMAPDUP)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- static Error allocDualMappingUsingRemapdup(DualMapping* dmOut, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -875,16 +938,105 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Error allocDualMapping(DualMapping* dm, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- dm->rx = nullptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- dm->rw = nullptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static Error asmjitErrorFromKernResult(kern_return_t result) noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ switch (result) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ case KERN_PROTECTION_FAILURE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return DebugUtils::errored(kErrorProtectionFailure);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ case KERN_NO_SPACE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return DebugUtils::errored(kErrorOutOfMemory);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ case KERN_INVALID_ARGUMENT:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return DebugUtils::errored(kErrorInvalidArgument);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ default:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return DebugUtils::errored(kErrorInvalidState);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if (off_t(size) <= 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return DebugUtils::errored(size == 0 ? kErrorInvalidArgument : kErrorTooLarge);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static Error allocDualMappingUsingMachVmRemap(DualMapping* dmOut, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DualMapping dm {};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#if defined(ASMJIT_ANONYMOUS_MEMORY_USE_REMAPDUP)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- return allocDualMappingUsingRemapdup(dm, size, memoryFlags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#elif defined(ASMJIT_ANONYMOUS_MEMORY_USE_FD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ MemoryFlags mmapFlags = MemoryFlags::kAccessReadWrite | (memoryFlags & MemoryFlags::kMapShared);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ASMJIT_PROPAGATE(mapMemory(&dm.rx, size, mmapFlags));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ vm_prot_t curProt;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ vm_prot_t maxProt;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int rwProtectFlags = VM_PROT_READ | VM_PROT_WRITE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int rxProtectFlags = VM_PROT_READ;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (Support::test(memoryFlags, MemoryFlags::kAccessExecute))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ rxProtectFlags |= VM_PROT_EXECUTE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ kern_return_t result {};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ do {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ vm_map_t task = mach_task_self();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ mach_vm_address_t remappedAddr {};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(VM_FLAGS_RANDOM_ADDR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int remapFlags = VM_FLAGS_ANYWHERE | VM_FLAGS_RANDOM_ADDR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ int remapFlags = VM_FLAGS_ANYWHERE;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // Try to remap the existing memory into a different address.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ result = mach_vm_remap(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ task, // target_task
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ &remappedAddr, // target_address
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ size, // size
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ 0, // mask
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ remapFlags, // flags
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ task, // src_task
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ (mach_vm_address_t)dm.rx, // src_address
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ false, // copy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ &curProt, // cur_protection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ &maxProt, // max_protection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ VM_INHERIT_DEFAULT); // inheritance
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (result != KERN_SUCCESS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ dm.rw = (void*)remappedAddr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // Now, try to change permissions of both map regions into RW and RX. The vm_protect()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // API is used twice as we also want to set maximum permissions, so nobody would be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ // allowed to change the RX region back to RW or RWX (if RWX is allowed).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ uint32_t i;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ for (i = 0; i < 2; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ bool setMaximum = (i == 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ result = vm_protect(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ task, // target_task
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ (vm_address_t)dm.rx, // address
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ size, // size
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ setMaximum, // set_maximum
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ rxProtectFlags); // new_protection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (result != KERN_SUCCESS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ result = vm_protect(task, // target_task
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ (vm_address_t)dm.rw, // address
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ size, // size
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ setMaximum, // set_maximum
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ rwProtectFlags); // new_protection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (result != KERN_SUCCESS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ } while (0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (result != KERN_SUCCESS) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ unmapDualMapping(&dm, size);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return DebugUtils::errored(asmjitErrorFromKernResult(result));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ *dmOut = dm;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return kErrorOk;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(ASMJIT_ANONYMOUS_MEMORY_USE_FD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static Error allocDualMappingUsingFile(DualMapping* dm, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- bool preferTmpOverDevShm = Support::test(memoryFlags, MemoryFlags::kMappingPreferTmp);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (!preferTmpOverDevShm) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- AnonymousMemoryStrategy strategy;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -910,13 +1062,39 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dm->rx = ptr[0];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dm->rw = ptr[1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return kErrorOk;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // ASMJIT_ANONYMOUS_MEMORY_USE_FD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Error allocDualMapping(DualMapping* dm, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ dm->rx = nullptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ dm->rw = nullptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(ASMJIT_NO_DUAL_MAPPING)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DebugUtils::unused(size, memoryFlags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return DebugUtils::errored(kErrorFeatureNotEnabled);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- #error "[asmjit] VirtMem::allocDualMapping() doesn't have implementation for the target OS and compiler"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (off_t(size) <= 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return DebugUtils::errored(size == 0 ? kErrorInvalidArgument : kErrorTooLarge);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(ASMJIT_ANONYMOUS_MEMORY_USE_REMAPDUP)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return allocDualMappingUsingRemapdup(dm, size, memoryFlags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#elif defined(ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return allocDualMappingUsingMachVmRemap(dm, size, memoryFlags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#elif defined(ASMJIT_ANONYMOUS_MEMORY_USE_FD)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return allocDualMappingUsingFile(dm, size, memoryFlags);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #error "[asmjit] VirtMem::allocDualMapping() doesn't have implementation for the target OS or architecture"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // ASMJIT_NO_DUAL_MAPPING
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- Error releaseDualMapping(DualMapping* dm, size_t size) noexcept {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(ASMJIT_NO_DUAL_MAPPING)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ DebugUtils::unused(dm, size);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return DebugUtils::errored(kErrorFeatureNotEnabled);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return unmapDualMapping(dm, size);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif // ASMJIT_NO_DUAL_MAPPING
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1017,8 +1195,9 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- INFO("VirtMem::hardenedRuntimeInfo():");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- INFO(" flags:");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- INFO(" kEnabled: %s", Support::test(hardenedFlags, VirtMem::HardenedRuntimeFlags::kEnabled) ? "true" : "false");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- INFO(" kMapJit: %s", Support::test(hardenedFlags, VirtMem::HardenedRuntimeFlags::kMapJit) ? "true" : "false");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ INFO(" kEnabled: %s" , Support::test(hardenedFlags, VirtMem::HardenedRuntimeFlags::kEnabled ) ? "true" : "false");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ INFO(" kMapJit: %s" , Support::test(hardenedFlags, VirtMem::HardenedRuntimeFlags::kMapJit ) ? "true" : "false");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ INFO(" kDualMapping: %s", Support::test(hardenedFlags, VirtMem::HardenedRuntimeFlags::kDualMapping) ? "true" : "false");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_END_NAMESPACE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --color=auto -ru erts/emulator/asmjit/core/virtmem.h asmjit.patched/core/virtmem.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- erts/emulator/asmjit/core/virtmem.h 2024-10-17 10:41:53
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ asmjit.patched/core/virtmem.h 2024-10-19 09:24:53
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -10,6 +10,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifndef ASMJIT_NO_JIT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include "../core/globals.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "../core/support.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_BEGIN_NAMESPACE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -215,15 +216,31 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- //! architecture.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- kEnabled = 0x00000001u,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- //! Read+Write+Execute can only be allocated with MAP_JIT flag (Apple specific, only available on OSX).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- kMapJit = 0x00000002u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! Read+Write+Execute can only be allocated with MAP_JIT flag (Apple specific, only available on Apple platforms).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ kMapJit = 0x00000002u,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! Read+Write+Execute can be allocated with dual mapping approach (one region with RW and the other with RX).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ kDualMapping = 0x00000004u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_DEFINE_ENUM_FLAGS(HardenedRuntimeFlags)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- //! Hardened runtime information.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- struct HardenedRuntimeInfo {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! \name Members
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! \{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- //! Hardened runtime flags.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- HardenedRuntimeFlags flags;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! \}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! \name Accessors
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! \{
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! Tests whether the hardened runtime `flag` is set.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ASMJIT_INLINE_NODEBUG bool hasFlag(HardenedRuntimeFlags flag) const noexcept { return Support::test(flags, flag); }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ //! \}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- //! Returns runtime features provided by the OS.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --color=auto -ru erts/emulator/asmjit/x86/x86emitter.h asmjit.patched/x86/x86emitter.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- erts/emulator/asmjit/x86/x86emitter.h 2024-10-17 10:41:53
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ asmjit.patched/x86/x86emitter.h 2024-10-19 09:24:53
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -2827,7 +2827,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_3x(vpand, Vpand, Vec, Vec, Mem) // AVX+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_3x(vpandd, Vpandd, Vec, Vec, Vec) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_3x(vpandd, Vpandd, Vec, Vec, Mem) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ASMJIT_INST_3x(vpandn, Vpandn, Vec, Vec, Vec) // AV+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ASMJIT_INST_3x(vpandn, Vpandn, Vec, Vec, Vec) // AVX+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_3x(vpandn, Vpandn, Vec, Vec, Mem) // AVX+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_3x(vpandnd, Vpandnd, Vec, Vec, Vec) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_3x(vpandnd, Vpandnd, Vec, Vec, Mem) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -3186,7 +3186,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_2x(vpopcntq, Vpopcntq, Vec, Mem) // AVX512_VPOPCNTDQ{kz|b64}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_2x(vpopcntw, Vpopcntw, Vec, Vec) // AVX512_BITALG{kz|b32}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_2x(vpopcntw, Vpopcntw, Vec, Mem) // AVX512_BITALG{kz|b32}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ASMJIT_INST_3x(vpor, Vpor, Vec, Vec, Vec) // AV+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ ASMJIT_INST_3x(vpor, Vpor, Vec, Vec, Vec) // AVX+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_3x(vpor, Vpor, Vec, Vec, Mem) // AVX+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_3x(vpord, Vpord, Vec, Vec, Vec) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ASMJIT_INST_3x(vpord, Vpord, Vec, Vec, Mem) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- erts/configure 2024-10-19 20:50:46
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ erts/configure 2024-10-19 20:51:39
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -25482,32 +25482,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case "$ARCH" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- amd64)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- case "$OPSYS" in
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- darwin)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- # macOS Sonoma introduced some very annoying popups when
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- # dual-mapping memory through the documented APIs, and we did
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- # not wish to start using undocumented functionality in a patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- # release, so we have disabled the JIT by default on this
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- # platform.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- # The previous version, macOS Ventura, does not have the
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- # annoying popups, so it is still possible to explicitly
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- # enable the JIT.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- #
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- # The ARM JIT is unaffected because it uses per-thread
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- # permissions instead of dual-mapped memory.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- if test ${enable_jit} = yes; then
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- JIT_ARCH=x86
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- enable_jit=no
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: JIT disabled due to annoying popus on x86 Macs with Sononma" >&5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--printf "%s\n" "$as_me: WARNING: JIT disabled due to annoying popus on x86 Macs with Sononma" >&2;}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- fi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- *)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- JIT_ARCH=x86
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-- esac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ JIT_ARCH=x86
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ;;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- arm64)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- case "$OPSYS" in
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/erlang/files/patch-enable-jit-x86.diff b/lang/erlang/files/patch-enable-jit-x86.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..aa1832452b1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/erlang/files/patch-enable-jit-x86.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,36 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- erts/configure 2024-10-19 20:50:46
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ erts/configure 2024-10-19 20:51:39
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -25482,32 +25482,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case "$ARCH" in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ amd64)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- case "$OPSYS" in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- darwin)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- # macOS Sonoma introduced some very annoying popups when
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- # dual-mapping memory through the documented APIs, and we did
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- # not wish to start using undocumented functionality in a patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- # release, so we have disabled the JIT by default on this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- # platform.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- # The previous version, macOS Ventura, does not have the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- # annoying popups, so it is still possible to explicitly
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- # enable the JIT.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- # The ARM JIT is unaffected because it uses per-thread
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- # permissions instead of dual-mapped memory.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if test ${enable_jit} = yes; then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- JIT_ARCH=x86
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- enable_jit=no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: JIT disabled due to annoying popus on x86 Macs with Sononma" >&5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-printf "%s\n" "$as_me: WARNING: JIT disabled due to annoying popus on x86 Macs with Sononma" >&2;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ;;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- *)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- JIT_ARCH=x86
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ;;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- esac
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ JIT_ARCH=x86
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ;;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ arm64)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ case "$OPSYS" in
</span></pre><pre style='margin:0'>
</pre>