<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>