mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
chore: cherry-pick 3 changes from 0-M133 (#45706)
* chore: [32-x-y] cherry-pick 3 changes from 0-M133 * 51cd241b7b13 from chromium * 1c7ff4d5477f from v8 * 8834c16acfcc from v8 * fixup patch for 32-x-y --------- Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1,6 +1,5 @@
|
||||
# `git apply` and friends don't understand CRLF, even on windows. Force those
|
||||
# files to be checked out with LF endings even if core.autocrlf is true.
|
||||
*.patch text eol=lf
|
||||
DEPS text eol=lf
|
||||
yarn.lock text eol=lf
|
||||
script/zip_manifests/*.manifest text eol=lf
|
||||
|
||||
@@ -147,3 +147,4 @@ cherry-pick-a51e7ebb7663.patch
|
||||
cherry-pick-f3300abe2fcd.patch
|
||||
remove_persistentmemoryallocator_getallocsize.patch
|
||||
fix_osr_stutter_in_both_cpu_and_gpu_capture_when_page_has_animation.patch
|
||||
reland_lzma_sdk_update_to_24_09.patch
|
||||
|
||||
17465
patches/chromium/reland_lzma_sdk_update_to_24_09.patch
Normal file
17465
patches/chromium/reland_lzma_sdk_update_to_24_09.patch
Normal file
File diff suppressed because it is too large
Load Diff
@@ -22,3 +22,5 @@ merged_maglev_fix_phi_untagging_bug_with_checknumber_holeyfloat64.patch
|
||||
cherry-pick-9209292e7898.patch
|
||||
cherry-pick-97e828af5cbc.patch
|
||||
cherry-pick-ca504d096c39.patch
|
||||
cherry-pick-1c7ff4d5477f.patch
|
||||
cherry-pick-8834c16acfcc.patch
|
||||
|
||||
57
patches/v8/cherry-pick-1c7ff4d5477f.patch
Normal file
57
patches/v8/cherry-pick-1c7ff4d5477f.patch
Normal file
@@ -0,0 +1,57 @@
|
||||
From 1c7ff4d5477f0e2bc7e20ce3b0f4f8eef71e6d13 Mon Sep 17 00:00:00 2001
|
||||
From: Olivier Flückiger <olivf@chromium.org>
|
||||
Date: Mon, 27 Jan 2025 14:50:34 +0100
|
||||
Subject: [PATCH] Merged: [turbofan] LoadField's type with recorded FieldType depends on stability
|
||||
|
||||
Bug: 390465670
|
||||
(cherry picked from commit f920b6b2c2b1132cd1fbe1198500ceeaedcaa146)
|
||||
|
||||
Change-Id: I0b430909275e583e5c0ecf2840e143fef461cbad
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6218882
|
||||
Reviewed-by: Darius Mercadier <dmercadier@chromium.org>
|
||||
Commit-Queue: Darius Mercadier <dmercadier@chromium.org>
|
||||
Auto-Submit: Olivier Flückiger <olivf@chromium.org>
|
||||
Commit-Queue: Olivier Flückiger <olivf@chromium.org>
|
||||
Cr-Commit-Position: refs/branch-heads/13.2@{#72}
|
||||
Cr-Branched-From: 24068c59cedad9ee976ddc05431f5f497b1ebd71-refs/heads/13.2.152@{#1}
|
||||
Cr-Branched-From: 6054ba94db0969220be4f94dc1677fc4696bdc4f-refs/heads/main@{#97085}
|
||||
---
|
||||
|
||||
diff --git a/src/compiler/access-info.cc b/src/compiler/access-info.cc
|
||||
index 7247c49..53e55a6 100644
|
||||
--- a/src/compiler/access-info.cc
|
||||
+++ b/src/compiler/access-info.cc
|
||||
@@ -484,8 +484,9 @@
|
||||
OptionalMapRef maybe_field_map =
|
||||
TryMakeRef(broker(), FieldType::AsClass(*descriptors_field_type));
|
||||
if (!maybe_field_map.has_value()) return Invalid();
|
||||
- field_type = Type::For(maybe_field_map.value(), broker());
|
||||
field_map = maybe_field_map;
|
||||
+ // field_type can only be inferred from field_map if it is stable and we
|
||||
+ // add a stability dependency. This happens on use in the access builder.
|
||||
}
|
||||
} else {
|
||||
CHECK(details_representation.IsTagged());
|
||||
@@ -1186,8 +1187,9 @@
|
||||
OptionalMapRef maybe_field_map =
|
||||
TryMakeRef(broker(), FieldType::AsClass(*descriptors_field_type));
|
||||
if (!maybe_field_map.has_value()) return Invalid();
|
||||
- field_type = Type::For(maybe_field_map.value(), broker());
|
||||
field_map = maybe_field_map;
|
||||
+ // field_type can only be inferred from field_map if it is stable and we
|
||||
+ // add a stability dependency. This happens on use in the access builder.
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/compiler/property-access-builder.cc b/src/compiler/property-access-builder.cc
|
||||
index 32c0ccf..bcaf221 100644
|
||||
--- a/src/compiler/property-access-builder.cc
|
||||
+++ b/src/compiler/property-access-builder.cc
|
||||
@@ -337,6 +337,7 @@
|
||||
if (field_map->is_stable()) {
|
||||
dependencies()->DependOnStableMap(field_map.value());
|
||||
field_access.map = field_map;
|
||||
+ field_access.type = Type::For(*field_map, broker());
|
||||
}
|
||||
}
|
||||
}
|
||||
152
patches/v8/cherry-pick-8834c16acfcc.patch
Normal file
152
patches/v8/cherry-pick-8834c16acfcc.patch
Normal file
@@ -0,0 +1,152 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Olivier=20Fl=C3=BCckiger?= <olivf@chromium.org>
|
||||
Date: Mon, 3 Feb 2025 10:18:36 +0100
|
||||
Subject: Merged: [runtime] Fix write barrier check in FastCloneJSObject
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add missing check for page being marked.
|
||||
|
||||
Fixed: 392521083
|
||||
(cherry picked from commit ce071a295e54b32bf7f03373da943678231cb1ee)
|
||||
|
||||
Change-Id: Iccfc1617862a6010ab34389aa4931f45e7389c05
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6221320
|
||||
Auto-Submit: Olivier Flückiger <olivf@chromium.org>
|
||||
Commit-Queue: Igor Sheludko <ishell@chromium.org>
|
||||
Commit-Queue: Olivier Flückiger <olivf@chromium.org>
|
||||
Reviewed-by: Igor Sheludko <ishell@chromium.org>
|
||||
Cr-Commit-Position: refs/branch-heads/13.2@{#74}
|
||||
Cr-Branched-From: 24068c59cedad9ee976ddc05431f5f497b1ebd71-refs/heads/13.2.152@{#1}
|
||||
Cr-Branched-From: 6054ba94db0969220be4f94dc1677fc4696bdc4f-refs/heads/main@{#97085}
|
||||
|
||||
diff --git a/src/codegen/code-stub-assembler-inl.h b/src/codegen/code-stub-assembler-inl.h
|
||||
index 4a51a0d00f2798512ad6ef80a36b043626dac599..043375f4323afd353380dfd738aa8dcf5774ddbd 100644
|
||||
--- a/src/codegen/code-stub-assembler-inl.h
|
||||
+++ b/src/codegen/code-stub-assembler-inl.h
|
||||
@@ -213,9 +213,8 @@ TNode<Object> CodeStubAssembler::FastCloneJSObject(
|
||||
Label if_no_write_barrier(this),
|
||||
if_needs_write_barrier(this, Label::kDeferred);
|
||||
|
||||
- TNode<BoolT> needs_write_barrier = IsPageFlagReset(
|
||||
- BitcastTaggedToWord(target), MemoryChunk::kIsInYoungGenerationMask);
|
||||
- Branch(needs_write_barrier, &if_needs_write_barrier, &if_no_write_barrier);
|
||||
+ TrySkipWriteBarrier(target, &if_needs_write_barrier);
|
||||
+ Goto(&if_no_write_barrier);
|
||||
|
||||
BIND(&if_needs_write_barrier);
|
||||
EmitCopyLoop(true);
|
||||
diff --git a/src/codegen/code-stub-assembler.cc b/src/codegen/code-stub-assembler.cc
|
||||
index 3dba65a85e07b03268785876fc4ee5538dbc361a..1de4772a2cef0b22754f180a6ae19468d941ffa9 100644
|
||||
--- a/src/codegen/code-stub-assembler.cc
|
||||
+++ b/src/codegen/code-stub-assembler.cc
|
||||
@@ -5505,21 +5505,18 @@ void CodeStubAssembler::FillFixedDoubleArrayWithZero(
|
||||
std::make_pair(MachineType::UintPtr(), byte_length));
|
||||
}
|
||||
|
||||
-void CodeStubAssembler::JumpIfPointersFromHereAreInteresting(
|
||||
- TNode<Object> object, Label* interesting) {
|
||||
- Label finished(this);
|
||||
- TNode<IntPtrT> object_word = BitcastTaggedToWord(object);
|
||||
- TNode<IntPtrT> object_page_header = MemoryChunkFromAddress(object_word);
|
||||
- TNode<IntPtrT> page_flags = UncheckedCast<IntPtrT>(
|
||||
- Load(MachineType::IntPtr(), object_page_header,
|
||||
- IntPtrConstant(MemoryChunkLayout::kFlagsOffset)));
|
||||
- Branch(
|
||||
- WordEqual(WordAnd(page_flags,
|
||||
- IntPtrConstant(
|
||||
- MemoryChunk::kPointersFromHereAreInterestingMask)),
|
||||
- IntPtrConstant(0)),
|
||||
- &finished, interesting);
|
||||
- BIND(&finished);
|
||||
+void CodeStubAssembler::TrySkipWriteBarrier(TNode<Object> object,
|
||||
+ Label* if_needs_write_barrier) {
|
||||
+ TNode<BoolT> may_need_write_barrier =
|
||||
+ IsPageFlagSet(BitcastTaggedToWord(object),
|
||||
+ MemoryChunk::kPointersFromHereAreInterestingMask);
|
||||
+ // TODO(olivf): Also skip the WB with V8_ENABLE_STICKY_MARK_BITS if the mark
|
||||
+ // bit is set.
|
||||
+ GotoIf(may_need_write_barrier, if_needs_write_barrier);
|
||||
+
|
||||
+ CSA_DCHECK(this, TaggedEqual(CallRuntime(Runtime::kIsNoWriteBarrierNeeded,
|
||||
+ NoContextConstant(), object),
|
||||
+ TrueConstant()));
|
||||
}
|
||||
|
||||
void CodeStubAssembler::MoveElements(ElementsKind kind,
|
||||
@@ -5547,7 +5544,7 @@ void CodeStubAssembler::MoveElements(ElementsKind kind,
|
||||
// The write barrier can be ignored if {dst_elements} is in new space, or if
|
||||
// the elements pointer is FixedDoubleArray.
|
||||
if (needs_barrier_check) {
|
||||
- JumpIfPointersFromHereAreInteresting(elements, &needs_barrier);
|
||||
+ TrySkipWriteBarrier(elements, &needs_barrier);
|
||||
}
|
||||
|
||||
const TNode<IntPtrT> source_byte_length =
|
||||
@@ -5641,7 +5638,7 @@ void CodeStubAssembler::CopyElements(ElementsKind kind,
|
||||
// The write barrier can be ignored if {dst_elements} is in new space, or if
|
||||
// the elements pointer is FixedDoubleArray.
|
||||
if (needs_barrier_check) {
|
||||
- JumpIfPointersFromHereAreInteresting(dst_elements, &needs_barrier);
|
||||
+ TrySkipWriteBarrier(dst_elements, &needs_barrier);
|
||||
}
|
||||
|
||||
TNode<IntPtrT> source_byte_length =
|
||||
diff --git a/src/codegen/code-stub-assembler.h b/src/codegen/code-stub-assembler.h
|
||||
index cf7b52c8aed277219483b6a6f6a17cc9b28c9456..c03482cbfa0b1924be93c0a9076c338c066afde7 100644
|
||||
--- a/src/codegen/code-stub-assembler.h
|
||||
+++ b/src/codegen/code-stub-assembler.h
|
||||
@@ -2365,8 +2365,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler
|
||||
HoleConversionMode convert_holes = HoleConversionMode::kDontConvert,
|
||||
TVariable<BoolT>* var_holes_converted = nullptr);
|
||||
|
||||
- void JumpIfPointersFromHereAreInteresting(TNode<Object> object,
|
||||
- Label* interesting);
|
||||
+ void TrySkipWriteBarrier(TNode<Object> object, Label* if_needs_write_barrier);
|
||||
|
||||
// Efficiently copy elements within a single array. The regions
|
||||
// [src_index, src_index + length) and [dst_index, dst_index + length)
|
||||
diff --git a/src/runtime/runtime-test.cc b/src/runtime/runtime-test.cc
|
||||
index c67550f82ef881cdabfc1837d4234a360fff929b..f0d1d6f5f0457da8b7e41b64b1e6bf6b04ba9061 100644
|
||||
--- a/src/runtime/runtime-test.cc
|
||||
+++ b/src/runtime/runtime-test.cc
|
||||
@@ -2120,5 +2120,26 @@ RUNTIME_FUNCTION(Runtime_IsolateCountForTesting) {
|
||||
return Smi::FromInt(g_num_isolates_for_testing);
|
||||
}
|
||||
|
||||
+RUNTIME_FUNCTION(Runtime_IsNoWriteBarrierNeeded) {
|
||||
+ HandleScope scope(isolate);
|
||||
+ DisallowGarbageCollection no_gc;
|
||||
+ if (args.length() != 1) {
|
||||
+ return CrashUnlessFuzzing(isolate);
|
||||
+ }
|
||||
+ DirectHandle<Object> object = args.at(0);
|
||||
+ if (!(*object).IsHeapObject()) {
|
||||
+ return CrashUnlessFuzzing(isolate);
|
||||
+ }
|
||||
+ auto heap_object = Cast<HeapObject>(object);
|
||||
+ if (InReadOnlySpace(*heap_object)) {
|
||||
+ return ReadOnlyRoots(isolate).true_value();
|
||||
+ }
|
||||
+ if (GetWriteBarrierModeForObject(*heap_object, &no_gc) !=
|
||||
+ WriteBarrierMode::SKIP_WRITE_BARRIER) {
|
||||
+ return ReadOnlyRoots(isolate).false_value();
|
||||
+ }
|
||||
+ return ReadOnlyRoots(isolate).true_value();
|
||||
+}
|
||||
+
|
||||
} // namespace internal
|
||||
} // namespace v8
|
||||
diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h
|
||||
index 3fa07b54517f8097947ff3eead162b0f4c8031bd..6bd33f3ce945ee94745d11ccc3650c6cb996bc83 100644
|
||||
--- a/src/runtime/runtime.h
|
||||
+++ b/src/runtime/runtime.h
|
||||
@@ -573,6 +573,7 @@ namespace internal {
|
||||
F(IsEfficiencyModeEnabled, 0, 1) \
|
||||
F(IsInPlaceInternalizableString, 1, 1) \
|
||||
F(IsInternalizedString, 1, 1) \
|
||||
+ F(IsNoWriteBarrierNeeded, 1, 1) \
|
||||
F(IsMaglevEnabled, 0, 1) \
|
||||
F(IsSameHeapObject, 2, 1) \
|
||||
F(IsSharedString, 1, 1) \
|
||||
Reference in New Issue
Block a user