chore: cherry-pick 0e1cc35 from v8 (#38490)

This commit is contained in:
Matt Henkes 2023-05-31 04:58:48 -05:00 committed by GitHub
parent 40e724e5dd
commit 2c742cfadb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 0 deletions

View file

@ -3,3 +3,4 @@ do_not_export_private_v8_symbols_on_windows.patch
fix_build_deprecated_attribute_for_older_msvc_versions.patch
fix_disable_implies_dcheck_for_node_stream_array_buffers.patch
chore_allow_customizing_microtask_policy_per_context.patch
fix_set_proper_instruction_start_for_builtin.patch

View file

@ -0,0 +1,35 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: mjhenkes <mjhenkes@gmail.com>
Date: Mon, 22 May 2023 15:52:36 -0500
Subject: Fix: Set proper instruction start for builtin
Added in this CL: https://chromium-review.googlesource.com/c/v8/v8/+/4547712
This patch makes the mksnapshot fix available sooner.
This patch can be removed when v8 reaches version 11.6.21
diff --git a/src/execution/isolate.cc b/src/execution/isolate.cc
index 40d1b394ef30c7cdf1d5aa05a051d3a497abf28e..9b646b1527e9e6595cc2530983feb0279452c7dc 100644
--- a/src/execution/isolate.cc
+++ b/src/execution/isolate.cc
@@ -3904,14 +3904,16 @@ void FinalizeBuiltinCodeObjects(Isolate* isolate) {
DCHECK_NOT_NULL(isolate->embedded_blob_data());
DCHECK_NE(0, isolate->embedded_blob_data_size());
+ EmbeddedData d = EmbeddedData::FromBlob(isolate);
HandleScope scope(isolate);
static_assert(Builtins::kAllBuiltinsAreIsolateIndependent);
for (Builtin builtin = Builtins::kFirst; builtin <= Builtins::kLast;
++builtin) {
Handle<Code> old_code = isolate->builtins()->code_handle(builtin);
- // Note we use `instruction_start` as given by the old code object (instead
- // of asking EmbeddedData) due to MaybeRemapEmbeddedBuiltinsIntoCodeRange.
- Address instruction_start = old_code->instruction_start();
+ // Note that `old_code.instruction_start` might point to `old_code`'s
+ // InstructionStream which might be GCed once we replace the old code
+ // with the new code.
+ Address instruction_start = d.InstructionStartOf(builtin);
Handle<Code> new_code = isolate->factory()->NewCodeObjectForEmbeddedBuiltin(
old_code, instruction_start);