Browse Source

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

* fix: v8 patch [mksnapshot] Set proper instruction start for builtins

Co-authored-by: mjhenkes <[email protected]>

* update index

Co-authored-by: mjhenkes <[email protected]>

* apply ci generated patch

Co-authored-by: mjhenkes <[email protected]>

* chore: update patches

---------

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: mjhenkes <[email protected]>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
trop[bot] 1 year ago
parent
commit
b19a3a65a4
2 changed files with 36 additions and 0 deletions
  1. 1 0
      patches/v8/.patches
  2. 35 0
      patches/v8/fix_set_proper_instruction_start_for_builtin.patch

+ 1 - 0
patches/v8/.patches

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

+ 35 - 0
patches/v8/fix_set_proper_instruction_start_for_builtin.patch

@@ -0,0 +1,35 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: mjhenkes <[email protected]>
+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 e6514136101ecbe430693d423d1b92c683e6eb15..1dcc61de1ceae9754cb5e867a04a0721d6aefcb8 100644
+--- a/src/execution/isolate.cc
++++ b/src/execution/isolate.cc
+@@ -3872,14 +3872,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);
+