<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/b1554ba47aa6f47b1555ef912133468dd32c25e6">https://github.com/macports/macports-ports/commit/b1554ba47aa6f47b1555ef912133468dd32c25e6</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 b1554ba47aa erlang: update to 27.1.2
</span>b1554ba47aa is described below
<span style='display:block; white-space:pre;color:#808000;'>commit b1554ba47aa6f47b1555ef912133468dd32c25e6
</span>Author: Paul Guyot <pguyot@kallisys.net>
AuthorDate: Sat Oct 19 20:59:32 2024 +0200
<span style='display:block; white-space:pre;color:#404040;'> erlang: update to 27.1.2
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Also fix support for JIT which was disabled by default by upstream on
</span><span style='display:block; white-space:pre;color:#404040;'> macOS/amd64 because of an annoying popup starting from Sonoma. Fix was
</span><span style='display:block; white-space:pre;color:#404040;'> eventually provided by asmjit and this is backported here as a patch.
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> Also fix issue with symlinks to erlang tools that was broken with erlang 27
</span><span style='display:block; white-space:pre;color:#404040;'> upgrade.
</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 | 29 +-
lang/erlang/files/patch-asmjit-dualmap.diff | 457 ++++++++++++++++++++++++++++
2 files changed, 473 insertions(+), 13 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 8eaaf69f15f..64d6315a21b 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.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version 27.1.2
</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 b3d8528389c497ee547bf94b0ad2c33cbb0290de \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 56412677466b756740fb2dbf4a8019e7c7cc38f01bd30c4cac5210214cafeef6 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 101038198 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 81fd4dce5ef82df0e986a0299ce27c871cb211fe \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 1772e9fa07b2b020ed5911d6ce78b251dfb6ed8509ed7de9d372e96b87251d14 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 101338359 \
</span> otp_doc_man_${doc_version}.tar.gz \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 14a6963ba477eabdd3e27324afa839686b07c364 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 95a2ea0e22ea4b7d58e74df145b52e2c85b642434391c814300824204a107c38 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 1764909 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 9bae6ac9e6cdb09e0f1e7de8acfa504513f7c271 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 76f01e6833d841e614929a2b7426b0b08b32daae985ee3e81f2dedb17d367048 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 45065 \
</span> otp_doc_html_${doc_version}.tar.gz \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- rmd160 a769c4f2f72019e00978a60a1ac002cd993a81f7 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 69c926bbf1b3fed93f361317a481910dae98f9700f58765b36c4875044bcc9d7 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 29506649
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rmd160 a9c21d599f5de594a67b5005234c23c773634f7f \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 a46eea48eab01404eddd649f044bd30f5e4fb432df94be26345410590d1c3f53 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 29910123
</span>
worksrcdir otp_src_${version}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -83,9 +83,8 @@ post-destroot {
</span> system "tar -C ${destroot}${prefix}/lib/erlang -zxvf [shellescape ${distpath}/otp_doc_html_${doc_version}${extract.suffix}]"
system "tar -C ${destroot}${prefix}/lib/erlang -zxvf [shellescape ${distpath}/otp_doc_man_${doc_version}${extract.suffix}]"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set erts_dir erts-12.2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set erl_interface_dir erl_interface-5.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set wx_dir wx-2.1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set erts_dir [glob -tails -directory ${destroot}${prefix}/lib/erlang/lib/ erts-*]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set erl_interface_dir [glob -tails -directory ${destroot}${prefix}/lib/erlang/lib/ erl_interface-*]
</span>
foreach x {dialyzer ear ecc elink epmd erl erlc escript run_erl start to_erl typer} {
delete ${destroot}${prefix}/bin/${x}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -120,6 +119,10 @@ platform darwin {
</span> # also "-framework Appkit"?
configure.ldflags-append -framework CoreFoundation
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # asmjit fix for Sonoma annoying popup with JIT on amd64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Upstream didn't want to include it yet
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ patchfiles-append patch-asmjit-dualmap.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>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..062079718e9
</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-asmjit-dualmap.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,457 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --color=auto -ru erts/emulator/asmjit/core/globals.cpp asmjit.patched/core/globals.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- erts/emulator/asmjit/core/globals.cpp 2024-10-17 10:41:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ asmjit.patched/core/globals.cpp 2024-10-19 09:24:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -87,6 +87,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "ExpressionOverflow\0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "FailedToOpenAnonymousMemory\0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "FailedToOpenFile\0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ "ProtectionFailure\0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "<Unknown>\0";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static const uint16_t sErrorIndex[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -94,7 +95,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 247, 264, 283, 298, 314, 333, 352, 370, 392, 410, 429, 444, 460, 474, 488,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 508, 533, 551, 573, 595, 612, 629, 645, 661, 677, 694, 709, 724, 744, 764,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 784, 817, 837, 852, 869, 888, 909, 929, 943, 964, 978, 996, 1012, 1028, 1047,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- 1073, 1088, 1104, 1119, 1134, 1164, 1188, 1207, 1235, 1252
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 1073, 1088, 1104, 1119, 1134, 1164, 1188, 1207, 1235, 1252, 1270
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // @EnumStringEnd@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --color=auto -ru erts/emulator/asmjit/core/globals.h asmjit.patched/core/globals.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- erts/emulator/asmjit/core/globals.h 2024-10-17 10:41:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ asmjit.patched/core/globals.h 2024-10-19 09:24:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -330,6 +330,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //! \note This is a generic error that is used by internal filesystem API.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ kErrorFailedToOpenFile,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ //! 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:#e0ffe0;'>++ //! permissions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ kErrorProtectionFailure,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // @EnumValuesEnd@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //! Count of AsmJit error codes.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --color=auto -ru erts/emulator/asmjit/core/virtmem.cpp asmjit.patched/core/virtmem.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- erts/emulator/asmjit/core/virtmem.cpp 2024-10-17 10:41:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ asmjit.patched/core/virtmem.cpp 2024-10-19 09:24:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -76,8 +76,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define MAP_ANONYMOUS MAP_ANON
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- #define ASMJIT_ANONYMOUS_MEMORY_USE_FD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Android NDK doesn't provide `shm_open()` and `shm_unlink()`.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if !defined(__BIONIC__) && !defined(ASMJIT_NO_SHM_OPEN)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ASMJIT_HAS_SHM_OPEN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -89,18 +87,60 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ASMJIT_VM_SHM_DETECT 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- #if defined(__APPLE__) && TARGET_OS_OSX && ASMJIT_ARCH_ARM >= 64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- #define ASMJIT_HAS_PTHREAD_JIT_WRITE_PROTECT_NP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #if defined(__APPLE__) && TARGET_OS_OSX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #if ASMJIT_ARCH_X86 != 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #define ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #if ASMJIT_ARCH_ARM >= 64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #define ASMJIT_HAS_PTHREAD_JIT_WRITE_PROTECT_NP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #if defined(__APPLE__) && ASMJIT_ARCH_X86 == 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #define ASMJIT_NO_DUAL_MAPPING
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(__NetBSD__) && defined(MAP_REMAPDUP) && defined(PROT_MPROTECT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- #undef ASMJIT_ANONYMOUS_MEMORY_USE_FD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define ASMJIT_ANONYMOUS_MEMORY_USE_REMAPDUP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #if !defined(ASMJIT_ANONYMOUS_MEMORY_USE_REMAPDUP) && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ !defined(ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP) && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ !defined(ASMJIT_NO_DUAL_MAPPING)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #define ASMJIT_ANONYMOUS_MEMORY_USE_FD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <atomic>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <mach/mach.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <mach/mach_time.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern "C" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef mig_external
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++mig_external
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++kern_return_t mach_vm_remap(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ vm_map_t target_task,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mach_vm_address_t *target_address,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mach_vm_size_t size,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mach_vm_offset_t mask,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int flags,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ vm_map_t src_task,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mach_vm_address_t src_address,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ boolean_t copy,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ vm_prot_t *cur_protection,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ vm_prot_t *max_protection,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ vm_inherit_t inheritance
</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;'>++} // {extern "C"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_BEGIN_SUB_NAMESPACE(VirtMem)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Virtual Memory Utilities
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -141,6 +181,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return ::GetLargePageMinimum();
</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;'>++static bool hasDualMappingSupport() noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // TODO: This assumption works on X86 platforms, this may not work on AArch64.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return true;
</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;'>+ // Returns windows-specific protectFlags from \ref MemoryFlags.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static DWORD protectFlagsFromMemoryFlags(MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ DWORD protectFlags;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -165,7 +210,12 @@
</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;'>+ static HardenedRuntimeFlags getHardenedRuntimeFlags() noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return HardenedRuntimeFlags::kNone;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ HardenedRuntimeFlags flags = HardenedRuntimeFlags::kNone;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (hasDualMappingSupport())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ flags |= HardenedRuntimeFlags::kDualMapping;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return flags;
</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;'>+ Error alloc(void** p, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -703,8 +753,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Detects whether MAP_JIT is available.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static inline bool hasMapJitSupport() noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(__APPLE__) && TARGET_OS_OSX && ASMJIT_ARCH_ARM >= 64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- // OSX on AArch64 always uses hardened runtime + MAP_JIT:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && TARGET_OS_OSX && ASMJIT_ARCH_X86 == 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // Apple platforms always use hardened runtime + MAP_JIT on non-x86 hardware:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // - https://developer.apple.com/documentation/apple_silicon/porting_just-in-time_compilers_to_apple_silicon
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #elif defined(__APPLE__) && TARGET_OS_OSX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -746,6 +796,14 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</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;'>++static inline bool hasDualMappingSupport() noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(ASMJIT_NO_DUAL_MAPPING)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</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;'>+ static HardenedRuntimeFlags getHardenedRuntimeFlags() noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HardenedRuntimeFlags flags = HardenedRuntimeFlags::kNone;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -755,6 +813,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (hasMapJitSupport())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ flags |= HardenedRuntimeFlags::kMapJit;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (hasDualMappingSupport())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ flags |= HardenedRuntimeFlags::kDualMapping;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return flags;
</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;'>+@@ -828,6 +889,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Virtual Memory [Posix] - Dual Mapping
</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;'>++#if !defined(ASMJIT_NO_DUAL_MAPPING)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static Error unmapDualMapping(DualMapping* dm, size_t size) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Error err1 = unmapMemory(dm->rx, size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Error err2 = kErrorOk;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -843,6 +905,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dm->rw = nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return kErrorOk;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // !ASMJIT_NO_DUAL_MAPPING
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(ASMJIT_ANONYMOUS_MEMORY_USE_REMAPDUP)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static Error allocDualMappingUsingRemapdup(DualMapping* dmOut, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -875,16 +938,105 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Error allocDualMapping(DualMapping* dm, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- dm->rx = nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- dm->rw = nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static Error asmjitErrorFromKernResult(kern_return_t result) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ switch (result) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case KERN_PROTECTION_FAILURE:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return DebugUtils::errored(kErrorProtectionFailure);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case KERN_NO_SPACE:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return DebugUtils::errored(kErrorOutOfMemory);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ case KERN_INVALID_ARGUMENT:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return DebugUtils::errored(kErrorInvalidArgument);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ default:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return DebugUtils::errored(kErrorInvalidState);
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- if (off_t(size) <= 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return DebugUtils::errored(size == 0 ? kErrorInvalidArgument : kErrorTooLarge);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static Error allocDualMappingUsingMachVmRemap(DualMapping* dmOut, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ DualMapping dm {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(ASMJIT_ANONYMOUS_MEMORY_USE_REMAPDUP)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- return allocDualMappingUsingRemapdup(dm, size, memoryFlags);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#elif defined(ASMJIT_ANONYMOUS_MEMORY_USE_FD)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ MemoryFlags mmapFlags = MemoryFlags::kAccessReadWrite | (memoryFlags & MemoryFlags::kMapShared);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASMJIT_PROPAGATE(mapMemory(&dm.rx, size, mmapFlags));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ vm_prot_t curProt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ vm_prot_t maxProt;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int rwProtectFlags = VM_PROT_READ | VM_PROT_WRITE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int rxProtectFlags = VM_PROT_READ;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (Support::test(memoryFlags, MemoryFlags::kAccessExecute))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rxProtectFlags |= VM_PROT_EXECUTE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ kern_return_t result {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ do {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ vm_map_t task = mach_task_self();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ mach_vm_address_t remappedAddr {};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(VM_FLAGS_RANDOM_ADDR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int remapFlags = VM_FLAGS_ANYWHERE | VM_FLAGS_RANDOM_ADDR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ int remapFlags = VM_FLAGS_ANYWHERE;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // Try to remap the existing memory into a different address.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ result = mach_vm_remap(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ task, // target_task
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ &remappedAddr, // target_address
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ size, // size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0, // mask
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ remapFlags, // flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ task, // src_task
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (mach_vm_address_t)dm.rx, // src_address
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ false, // copy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ &curProt, // cur_protection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ &maxProt, // max_protection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ VM_INHERIT_DEFAULT); // inheritance
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (result != KERN_SUCCESS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ dm.rw = (void*)remappedAddr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ // 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:#e0ffe0;'>++ // 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:#e0ffe0;'>++ // allowed to change the RX region back to RW or RWX (if RWX is allowed).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uint32_t i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ for (i = 0; i < 2; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ bool setMaximum = (i == 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ result = vm_protect(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ task, // target_task
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (vm_address_t)dm.rx, // address
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ size, // size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ setMaximum, // set_maximum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rxProtectFlags); // new_protection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (result != KERN_SUCCESS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ result = vm_protect(task, // target_task
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ (vm_address_t)dm.rw, // address
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ size, // size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ setMaximum, // set_maximum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ rwProtectFlags); // new_protection
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (result != KERN_SUCCESS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ } while (0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (result != KERN_SUCCESS) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ unmapDualMapping(&dm, size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return DebugUtils::errored(asmjitErrorFromKernResult(result));
</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;'>++ *dmOut = dm;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return kErrorOk;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(ASMJIT_ANONYMOUS_MEMORY_USE_FD)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static Error allocDualMappingUsingFile(DualMapping* dm, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ bool preferTmpOverDevShm = Support::test(memoryFlags, MemoryFlags::kMappingPreferTmp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (!preferTmpOverDevShm) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ AnonymousMemoryStrategy strategy;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -910,13 +1062,39 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dm->rx = ptr[0];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dm->rw = ptr[1];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return kErrorOk;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // ASMJIT_ANONYMOUS_MEMORY_USE_FD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Error allocDualMapping(DualMapping* dm, size_t size, MemoryFlags memoryFlags) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ dm->rx = nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ dm->rw = nullptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(ASMJIT_NO_DUAL_MAPPING)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ DebugUtils::unused(size, memoryFlags);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return DebugUtils::errored(kErrorFeatureNotEnabled);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- #error "[asmjit] VirtMem::allocDualMapping() doesn't have implementation for the target OS and compiler"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (off_t(size) <= 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return DebugUtils::errored(size == 0 ? kErrorInvalidArgument : kErrorTooLarge);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(ASMJIT_ANONYMOUS_MEMORY_USE_REMAPDUP)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return allocDualMappingUsingRemapdup(dm, size, memoryFlags);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(ASMJIT_ANONYMOUS_MEMORY_USE_MACH_VM_REMAP)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return allocDualMappingUsingMachVmRemap(dm, size, memoryFlags);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(ASMJIT_ANONYMOUS_MEMORY_USE_FD)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return allocDualMappingUsingFile(dm, size, memoryFlags);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #error "[asmjit] VirtMem::allocDualMapping() doesn't have implementation for the target OS or architecture"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // ASMJIT_NO_DUAL_MAPPING
</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;'>+ Error releaseDualMapping(DualMapping* dm, size_t size) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(ASMJIT_NO_DUAL_MAPPING)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ DebugUtils::unused(dm, size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return DebugUtils::errored(kErrorFeatureNotEnabled);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return unmapDualMapping(dm, size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif // ASMJIT_NO_DUAL_MAPPING
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1017,8 +1195,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ INFO("VirtMem::hardenedRuntimeInfo():");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ INFO(" flags:");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- INFO(" kEnabled: %s", Support::test(hardenedFlags, VirtMem::HardenedRuntimeFlags::kEnabled) ? "true" : "false");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- INFO(" kMapJit: %s", Support::test(hardenedFlags, VirtMem::HardenedRuntimeFlags::kMapJit) ? "true" : "false");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ INFO(" kEnabled: %s" , Support::test(hardenedFlags, VirtMem::HardenedRuntimeFlags::kEnabled ) ? "true" : "false");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ INFO(" kMapJit: %s" , Support::test(hardenedFlags, VirtMem::HardenedRuntimeFlags::kMapJit ) ? "true" : "false");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ INFO(" kDualMapping: %s", Support::test(hardenedFlags, VirtMem::HardenedRuntimeFlags::kDualMapping) ? "true" : "false");
</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;'>+ ASMJIT_END_NAMESPACE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --color=auto -ru erts/emulator/asmjit/core/virtmem.h asmjit.patched/core/virtmem.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- erts/emulator/asmjit/core/virtmem.h 2024-10-17 10:41:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ asmjit.patched/core/virtmem.h 2024-10-19 09:24:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -10,6 +10,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef ASMJIT_NO_JIT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "../core/globals.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "../core/support.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_BEGIN_NAMESPACE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -215,15 +216,31 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //! architecture.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ kEnabled = 0x00000001u,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- //! 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:#e0ffe0;'>+- kMapJit = 0x00000002u
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ //! 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:#e0ffe0;'>++ kMapJit = 0x00000002u,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ //! 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:#e0ffe0;'>++ kDualMapping = 0x00000004u
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_DEFINE_ENUM_FLAGS(HardenedRuntimeFlags)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //! Hardened runtime information.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct HardenedRuntimeInfo {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ //! \name Members
</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;'>+ //! Hardened runtime flags.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HardenedRuntimeFlags flags;
</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;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ //! \name Accessors
</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;'>++ //! Tests whether the hardened runtime `flag` is set.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASMJIT_INLINE_NODEBUG bool hasFlag(HardenedRuntimeFlags flag) const noexcept { return Support::test(flags, flag); }
</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;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //! Returns runtime features provided by the OS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --color=auto -ru erts/emulator/asmjit/x86/x86emitter.h asmjit.patched/x86/x86emitter.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- erts/emulator/asmjit/x86/x86emitter.h 2024-10-17 10:41:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ asmjit.patched/x86/x86emitter.h 2024-10-19 09:24:53
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2827,7 +2827,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_3x(vpand, Vpand, Vec, Vec, Mem) // AVX+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_3x(vpandd, Vpandd, Vec, Vec, Vec) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_3x(vpandd, Vpandd, Vec, Vec, Mem) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ASMJIT_INST_3x(vpandn, Vpandn, Vec, Vec, Vec) // AV+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASMJIT_INST_3x(vpandn, Vpandn, Vec, Vec, Vec) // AVX+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_3x(vpandn, Vpandn, Vec, Vec, Mem) // AVX+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_3x(vpandnd, Vpandnd, Vec, Vec, Vec) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_3x(vpandnd, Vpandnd, Vec, Vec, Mem) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3186,7 +3186,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_2x(vpopcntq, Vpopcntq, Vec, Mem) // AVX512_VPOPCNTDQ{kz|b64}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_2x(vpopcntw, Vpopcntw, Vec, Vec) // AVX512_BITALG{kz|b32}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_2x(vpopcntw, Vpopcntw, Vec, Mem) // AVX512_BITALG{kz|b32}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- ASMJIT_INST_3x(vpor, Vpor, Vec, Vec, Vec) // AV+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ ASMJIT_INST_3x(vpor, Vpor, Vec, Vec, Vec) // AVX+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_3x(vpor, Vpor, Vec, Vec, Mem) // AVX+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_3x(vpord, Vpord, Vec, Vec, Vec) // AVX512_F{kz|b32}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ASMJIT_INST_3x(vpord, Vpord, Vec, Vec, Mem) // AVX512_F{kz|b32}
</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>