mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
deps: V8: cherry-pick 0c8b6e415c30
Original commit message:
[mac][wasm] 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 <jkummerow@chromium.org>
Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
Auto-Submit: Jakob Kummerow <jkummerow@chromium.org>
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#72559}
Refs: https://github.com/v8/v8/commit/0c8b6e415c3020a987d2287f1543d629cd993535
Fixes: https://github.com/nodejs/node/issues/37061
PR-URL: https://github.com/nodejs/node/pull/37276
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Ash Cripps <acripps@redhat.com>
This commit is contained in:
1 parent
bb2a98ff41
commit
d6b50611f4
2 files changed
+11
-1
No files matched your search
+1
-1
@@ -36,7 +36,7 @@
|
||||
|
||||
# Reset this number to 0 on major V8 upgrades.
|
||||
# Increment by one for each non-official patch applied to deps/v8.
|
||||
'v8_embedder_string': '-node.12',
|
||||
'v8_embedder_string': '-node.13',
|
||||
|
||||
##### V8 defaults for Node.js #####
|
||||
|
||||
|
||||
+10
@@ -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));
|
||||
|
||||
Reference in new issue
Block a user