diff --git a/patches/v8/.patches b/patches/v8/.patches index c1cd326e70b..ad912cca664 100644 --- a/patches/v8/.patches +++ b/patches/v8/.patches @@ -8,3 +8,4 @@ do_not_export_private_v8_symbols_on_windows.patch revert_cleanup_switch_offset_of_to_offsetof_where_possible.patch fix_build_deprecated_attirbute_for_older_msvc_versions.patch chore_disallow_copying_cppheapcreateparams.patch +mac_wasm_work_around_macos_11_2_code_page_decommit_failures.patch diff --git a/patches/v8/mac_wasm_work_around_macos_11_2_code_page_decommit_failures.patch b/patches/v8/mac_wasm_work_around_macos_11_2_code_page_decommit_failures.patch new file mode 100644 index 00000000000..7758aa2fa86 --- /dev/null +++ b/patches/v8/mac_wasm_work_around_macos_11_2_code_page_decommit_failures.patch @@ -0,0 +1,42 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: deepak1556 +Date: Mon, 8 Feb 2021 13:20:09 -0800 +Subject: Work around MacOS 11.2 code page decommit failures + +MacOS 11.2 refuses to set "no access" permissions on memory that +we previously used for JIT-compiled code. It is still unclear +whether this is WAI on the part of the kernel. In the meantime, +as a workaround, we use madvise(..., MADV_FREE_REUSABLE) instead +of mprotect(..., NONE) when discarding code pages. This is inspired +by what Chromium's gin platform does. + +Fixed: v8:11389 +Change-Id: I866586932573b4253002436ae5eee4e0411c45fc +Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2679688 +Commit-Queue: Jakob Kummerow +Commit-Queue: Michael Lippautz +Auto-Submit: Jakob Kummerow +Reviewed-by: Michael Lippautz +Cr-Commit-Position: refs/heads/master@{#72559} + +diff --git a/src/base/platform/platform-posix.cc b/src/base/platform/platform-posix.cc +index ab0d7839a453d87a8404ca791c1022871e8fd606..67746173d582c5c404083be8ef3fa36c7dfc8cfe 100644 +--- a/src/base/platform/platform-posix.cc ++++ b/src/base/platform/platform-posix.cc +@@ -415,6 +415,16 @@ bool OS::SetPermissions(void* address, size_t size, MemoryPermission access) { + + int prot = GetProtectionFromMemoryPermission(access); + int ret = mprotect(address, size, prot); ++ ++ // MacOS 11.2 on Apple Silicon refuses to switch permissions from ++ // rwx to none. Just use madvise instead. ++#if defined(V8_OS_MACOSX) ++ if (ret != 0 && access == OS::MemoryPermission::kNoAccess) { ++ ret = madvise(address, size, MADV_FREE_REUSABLE); ++ return ret == 0; ++ } ++#endif ++ + if (ret == 0 && access == OS::MemoryPermission::kNoAccess) { + // This is advisory; ignore errors and continue execution. + USE(DiscardSystemPages(address, size));