From c86221443c8502b82d97e6e1e914e274336b21af Mon Sep 17 00:00:00 2001 From: Than Ngo Date: Mon, 6 Mar 2023 16:24:25 +0100 Subject: [PATCH] - update to 111.0.5563.50 - system freetype on fedora > 36 --- ...0.5195.52-update-wayland-client-core.patch | 31 - ...um-110-CanvasResourceProvider-pragma.patch | 41 - chromium-110-CredentialUIEntry-const.patch | 41 - chromium-110-DarkModeLABColorSpace-pow.patch | 37 - ...10-InProgressDownloadManager-include.patch | 30 - chromium-110-NativeThemeBase-fabs.patch | 29 - chromium-110-Presenter-include.patch | 26 - chromium-110-StorageQueue-decltype.patch | 74 - chromium-110-SyncIterator-template.patch | 28 - chromium-110-dpf-arm64.patch | 94 - chromium-110-gtktheme.patch | 19 + ...mium-110-kCustomizeChromeColors-type.patch | 28 - chromium-110-limits.patch | 11 - chromium-110-raw_ptr-constexpr.patch | 31 - chromium-110-url_canon_internal-cast.patch | 34 - chromium-110-v8-gcc.patch | 33 - chromium-111-v8-std-layout1.patch | 2229 ----------------- chromium-111-v8-std-layout2.patch | 198 -- chromium-94.0.4606.71-InkDropHost-crash.patch | 24 - chromium-v4l2-fix.patch | 137 - chromium.spec | 85 +- sources | 2 +- 22 files changed, 38 insertions(+), 3224 deletions(-) delete mode 100644 chromium-105.0.5195.52-update-wayland-client-core.patch delete mode 100644 chromium-110-CanvasResourceProvider-pragma.patch delete mode 100644 chromium-110-CredentialUIEntry-const.patch delete mode 100644 chromium-110-DarkModeLABColorSpace-pow.patch delete mode 100644 chromium-110-InProgressDownloadManager-include.patch delete mode 100644 chromium-110-NativeThemeBase-fabs.patch delete mode 100644 chromium-110-Presenter-include.patch delete mode 100644 chromium-110-StorageQueue-decltype.patch delete mode 100644 chromium-110-SyncIterator-template.patch delete mode 100644 chromium-110-dpf-arm64.patch delete mode 100644 chromium-110-kCustomizeChromeColors-type.patch delete mode 100644 chromium-110-limits.patch delete mode 100644 chromium-110-raw_ptr-constexpr.patch delete mode 100644 chromium-110-url_canon_internal-cast.patch delete mode 100644 chromium-110-v8-gcc.patch delete mode 100644 chromium-111-v8-std-layout1.patch delete mode 100644 chromium-111-v8-std-layout2.patch delete mode 100644 chromium-94.0.4606.71-InkDropHost-crash.patch delete mode 100644 chromium-v4l2-fix.patch diff --git a/chromium-105.0.5195.52-update-wayland-client-core.patch b/chromium-105.0.5195.52-update-wayland-client-core.patch deleted file mode 100644 index 86c5c22..0000000 --- a/chromium-105.0.5195.52-update-wayland-client-core.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff -up chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h.old-wayland chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h ---- chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h.old-wayland 2022-09-01 19:36:06.099483374 +0000 -+++ chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h 2022-09-01 22:09:56.523353619 +0000 -@@ -119,9 +119,27 @@ struct wl_display; - */ - struct wl_event_queue; - -+/** Destroy proxy after marshalling -+ * @ingroup wl_proxy -+ */ -+#define WL_MARSHAL_FLAG_DESTROY (1 << 0) -+ - void - wl_event_queue_destroy(struct wl_event_queue *queue); - -+struct wl_proxy * -+wl_proxy_marshal_flags(struct wl_proxy *proxy, uint32_t opcode, -+ const struct wl_interface *interface, -+ uint32_t version, -+ uint32_t flags, ...); -+ -+struct wl_proxy * -+wl_proxy_marshal_array_flags(struct wl_proxy *proxy, uint32_t opcode, -+ const struct wl_interface *interface, -+ uint32_t version, -+ uint32_t flags, -+ union wl_argument *args); -+ - void - wl_proxy_marshal(struct wl_proxy *p, uint32_t opcode, ...); - diff --git a/chromium-110-CanvasResourceProvider-pragma.patch b/chromium-110-CanvasResourceProvider-pragma.patch deleted file mode 100644 index 5732e49..0000000 --- a/chromium-110-CanvasResourceProvider-pragma.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 3e1e86ac882ae0ce4b9ec50834a4ff8becd912ab Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -Date: Mon, 19 Dec 2022 16:59:46 +0000 -Subject: [PATCH] GCC: move pragmas in blink::CanvasResourceProvider - -GCC does not allow using #pragma inside an enum. - -Bug: 819294 -Change-Id: I637b5a616b080d17bb719aae9ec8cf06d0f8c464 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4111848 -Reviewed-by: Stephen Chenney -Commit-Queue: Stephan Hartmann -Cr-Commit-Position: refs/heads/main@{#1084983} ---- - -diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h -index e898397f..214ab01 100644 ---- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h -+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h -@@ -68,6 +68,8 @@ - public: - // These values are persisted to logs. Entries should not be renumbered and - // numeric values should never be reused. -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - enum ResourceProviderType { - kTexture [[deprecated]] = 0, - kBitmap = 1, -@@ -79,11 +81,9 @@ - kPassThrough = 7, - kSwapChain = 8, - kSkiaDawnSharedImage [[deprecated]] = 9, --#pragma GCC diagnostic push --#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - kMaxValue = kSkiaDawnSharedImage, --#pragma GCC diagnostic pop - }; -+#pragma GCC diagnostic pop - - // The following parameters attempt to reach a compromise between not flushing - // too often, and not accumulating an unreasonable backlog. Flushing too diff --git a/chromium-110-CredentialUIEntry-const.patch b/chromium-110-CredentialUIEntry-const.patch deleted file mode 100644 index eb68aa2..0000000 --- a/chromium-110-CredentialUIEntry-const.patch +++ /dev/null @@ -1,41 +0,0 @@ -From b4e56d22275cae5a910463a966a96345430a83ea Mon Sep 17 00:00:00 2001 -From: Ivan Murashov -Date: Sat, 17 Dec 2022 12:06:01 +0000 -Subject: [PATCH] libstdc++: Don't use const members in std::vector in password_manager::CredentialUIEntry - -Otherwise build fails when building with use_custom_libcxx=false. -The error example: -std::vector must have a non-const, non-volatile value_type - -Implementation of std::vector in libstdc++ does not allow const. - -Bug: 957519 -Change-Id: I089de2d52df25138d74dbf01fdf61d6301b4d871 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4111037 -Reviewed-by: Mohamed Amir Yosef -Commit-Queue: Mohamed Amir Yosef -Cr-Commit-Position: refs/heads/main@{#1084697} ---- - -diff --git a/components/password_manager/core/browser/ui/credential_ui_entry.cc b/components/password_manager/core/browser/ui/credential_ui_entry.cc -index 1e0766a..a9a34f7 100644 ---- a/components/password_manager/core/browser/ui/credential_ui_entry.cc -+++ b/components/password_manager/core/browser/ui/credential_ui_entry.cc -@@ -97,7 +97,7 @@ - // For cases when the notes differ within grouped passwords (e.g: a - // credential exists in both account and profile stores), respective notes - // should be concatenated and linebreak used as a delimiter. -- std::vector notes_with_duplicates; -+ std::vector notes_with_duplicates; - for (const auto& form : forms) { - // Only notes with an empty `unique_display_name` are supported in the - // settings UI. -@@ -109,7 +109,7 @@ - } - auto unique_notes = - base::MakeFlatSet(std::move(notes_with_duplicates)); -- note = base::JoinString(std::vector( -+ note = base::JoinString(std::vector( - unique_notes.begin(), unique_notes.end()), - u"\n"); - diff --git a/chromium-110-DarkModeLABColorSpace-pow.patch b/chromium-110-DarkModeLABColorSpace-pow.patch deleted file mode 100644 index 91f1aee..0000000 --- a/chromium-110-DarkModeLABColorSpace-pow.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 795c311aae4b718585bc6194189f061000c823a1 Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -Date: Fri, 23 Dec 2022 14:28:55 +0000 -Subject: [PATCH] libstdc++: fix narrowing in blink::DarkModeLABColorSpace - -Clang-14 errors out with narrowing from double to float. Use std::pow -instead. ---- - .../renderer/platform/graphics/dark_mode_lab_color_space.h | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h b/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h -index 999c3e5..c18ea7b 100644 ---- a/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h -+++ b/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h -@@ -125,7 +125,7 @@ class DarkModeLABColorSpace { - // https://en.wikipedia.org/wiki/CIELAB_color_space#Reverse_transformation. - SkV3 FromXYZ(const SkV3& v) const { - auto f = [](float x) { -- return x > kSigma3 ? pow(x, 1.0f / 3.0f) -+ return x > kSigma3 ? std::pow(x, 1.0f / 3.0f) - : x / (3 * kSigma2) + 4.0f / 29.0f; - }; - -@@ -145,7 +145,8 @@ class DarkModeLABColorSpace { - // https://en.wikipedia.org/wiki/CIELAB_color_space#Forward_transformation. - SkV3 ToXYZ(const SkV3& lab) const { - auto invf = [](float x) { -- return x > kSigma ? pow(x, 3.0f) : 3.0f * kSigma2 * (x - 4.0f / 29.0f); -+ return x > kSigma ? std::pow(x, 3.0f) -+ : 3.0f * kSigma2 * (x - 4.0f / 29.0f); - }; - - SkV3 v = {Clamp(lab.x, 0.0f, 100.0f), Clamp(lab.y, -128.0f, 128.0f), --- -2.38.2 - diff --git a/chromium-110-InProgressDownloadManager-include.patch b/chromium-110-InProgressDownloadManager-include.patch deleted file mode 100644 index adc51db..0000000 --- a/chromium-110-InProgressDownloadManager-include.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 63027c62eaa1b6c5b0d2762a511f1611b15d3728 Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -Date: Mon, 19 Dec 2022 13:56:17 +0000 -Subject: [PATCH] libstdc++: fix incomplete type of download::InProgressDownloadManager - -Destructor of std::unique_ptr in libstdc++ uses sizeof() which -requires full definition of download::InProgressDownloadManager -for return type of content::BrowserContext:: -RetrieveInProgressDownloadManager(). - -Bug: 957519 -Change-Id: If99aa8d52238bacb1cb559a300e14ed3a05b7297 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4111526 -Reviewed-by: Bo Liu -Commit-Queue: Stephan Hartmann -Cr-Commit-Position: refs/heads/main@{#1084924} ---- - -diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc -index 6180969..22e9dbb 100644 ---- a/content/browser/browser_context.cc -+++ b/content/browser/browser_context.cc -@@ -30,6 +30,7 @@ - #include "base/unguessable_token.h" - #include "build/build_config.h" - #include "build/chromeos_buildflags.h" -+#include "components/download/public/common/in_progress_download_manager.h" - #include "components/services/storage/privileged/mojom/indexed_db_control.mojom.h" - #include "content/browser/blob_storage/chrome_blob_storage_context.h" - #include "content/browser/browser_context_impl.h" diff --git a/chromium-110-NativeThemeBase-fabs.patch b/chromium-110-NativeThemeBase-fabs.patch deleted file mode 100644 index c7d0e8b..0000000 --- a/chromium-110-NativeThemeBase-fabs.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 07f0a87e4409f27854b3a1d17f270a3497f38947 Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -Date: Mon, 19 Dec 2022 19:07:37 +0000 -Subject: [PATCH] GCC: use fabsf in ui::NativeThemeBase::OutlineColor - -Template deduction fails for base::clamp, because return type of -fabs is double and all other parameters are float. - -Bug: 819294 -Change-Id: I34f1c9c99d13f69097d899bfcb0526cbdf4fe1c1 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4110869 -Reviewed-by: Peter Kasting -Commit-Queue: Stephan Hartmann -Cr-Commit-Position: refs/heads/main@{#1085034} ---- - -diff --git a/ui/native_theme/native_theme_base.cc b/ui/native_theme/native_theme_base.cc -index 169c60c..36db49a 100644 ---- a/ui/native_theme/native_theme_base.cc -+++ b/ui/native_theme/native_theme_base.cc -@@ -1336,7 +1336,7 @@ - // The following code has been tested to look OK with all of the - // default GTK themes. - SkScalar min_diff = base::clamp((hsv1[1] + hsv2[1]) * 1.2f, 0.28f, 0.5f); -- SkScalar diff = base::clamp(fabs(hsv1[2] - hsv2[2]) / 2, min_diff, 0.5f); -+ SkScalar diff = base::clamp(fabsf(hsv1[2] - hsv2[2]) / 2, min_diff, 0.5f); - - if (hsv1[2] + hsv2[2] > 1.0) - diff = -diff; diff --git a/chromium-110-Presenter-include.patch b/chromium-110-Presenter-include.patch deleted file mode 100644 index 7cfb84b..0000000 --- a/chromium-110-Presenter-include.patch +++ /dev/null @@ -1,26 +0,0 @@ -From c69b818a9fce2bf0fb81b280d6f4cc15e6fdb8af Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -Date: Fri, 16 Dec 2022 17:13:43 +0000 -Subject: [PATCH] GCC: fix incomplete type of gl::Presenter - -GCC requires full definition of gl::Presenter for return type -of gl::GLOzoneEGL::CreateGLContext() with base::scoped_refptr. ---- - ui/ozone/common/gl_ozone_egl.cc | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/ui/ozone/common/gl_ozone_egl.cc b/ui/ozone/common/gl_ozone_egl.cc -index 9b1d37e..e745dd7 100644 ---- a/ui/ozone/common/gl_ozone_egl.cc -+++ b/ui/ozone/common/gl_ozone_egl.cc -@@ -13,6 +13,7 @@ - #include "ui/gl/gl_share_group.h" - #include "ui/gl/gl_surface.h" - #include "ui/gl/gl_utils.h" -+#include "ui/gl/presenter.h" - - namespace ui { - --- -2.37.4 - diff --git a/chromium-110-StorageQueue-decltype.patch b/chromium-110-StorageQueue-decltype.patch deleted file mode 100644 index cd0e66c..0000000 --- a/chromium-110-StorageQueue-decltype.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 200fc7c3ec95bc86f6afb55ca3c691e923463104 Mon Sep 17 00:00:00 2001 -From: Leonid Baraz -Date: Mon, 19 Dec 2022 21:46:04 +0000 -Subject: [PATCH] GCC: fix usage of decltype in reporting::StorageQueue - -GCC does not allow to use decltype for the default value of -a function parameter. - -Bug: 819294 -Change-Id: I7ebb255634375ce889933f8b67acb10f0e56ca8d -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4111548 -Reviewed-by: Leonid Baraz -Commit-Queue: Leonid Baraz -Reviewed-by: Hong Xu -Cr-Commit-Position: refs/heads/main@{#1085129} ---- - -diff --git a/components/reporting/storage/storage_queue.cc b/components/reporting/storage/storage_queue.cc -index c546d55a..49e0f2c 100644 ---- a/components/reporting/storage/storage_queue.cc -+++ b/components/reporting/storage/storage_queue.cc -@@ -203,7 +203,6 @@ - encryption_module_(encryption_module), - compression_module_(compression_module) { - DETACH_FROM_SEQUENCE(storage_queue_sequence_checker_); -- DCHECK(write_contexts_queue_.empty()); - } - - StorageQueue::~StorageQueue() { -@@ -2133,9 +2132,7 @@ - } - - void StorageQueue::TestInjectErrorsForOperation( -- base::RepeatingCallback< -- Status(test::StorageQueueOperationKind operation_kind, int64_t)> -- handler) { -+ test::ErrorInjectionHandlerType handler) { - test_injection_handler_ = handler; - } - -diff --git a/components/reporting/storage/storage_queue.h b/components/reporting/storage/storage_queue.h -index 39edd8b..04d5f9f 100644 ---- a/components/reporting/storage/storage_queue.h -+++ b/components/reporting/storage/storage_queue.h -@@ -52,6 +52,9 @@ - kWriteLowDiskSpace, - }; - -+using ErrorInjectionHandlerType = -+ base::RepeatingCallback; -+ - } // namespace test - - // Storage queue represents single queue of data to be collected and stored -@@ -142,8 +145,7 @@ - // can be returned as a resulting operation status too. - // If `handler` is null, error injections is disabled. - void TestInjectErrorsForOperation( -- base::RepeatingCallback -- handler = decltype(handler)()); -+ test::ErrorInjectionHandlerType handler = base::NullCallback()); - - // Access queue options. - const QueueOptions& options() const { return options_; } -@@ -492,8 +494,7 @@ - // Test only: records callback to be invoked. It will be called with operation - // kind and seq id, and will return Status (non-OK status indicates the - // failure to be injected). In production code must be null. -- base::RepeatingCallback -- test_injection_handler_; -+ test::ErrorInjectionHandlerType test_injection_handler_{base::NullCallback()}; - - // Weak pointer factory (must be last member in class). - base::WeakPtrFactory weakptr_factory_{this}; diff --git a/chromium-110-SyncIterator-template.patch b/chromium-110-SyncIterator-template.patch deleted file mode 100644 index c65c7e2..0000000 --- a/chromium-110-SyncIterator-template.patch +++ /dev/null @@ -1,28 +0,0 @@ -From da8029438ea8f00a154cb6a1bbc8243de39690de Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -Date: Sun, 18 Dec 2022 22:11:58 +0000 -Subject: [PATCH] GCC: remove redundant template parameter from SyncIterator - -GCC 12 in C++20 mode does not allow this anymore. - -Bug: 819294 -Change-Id: I6b22d3919f08fb72a5b1d69eea59c6e95259c16f -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4111547 -Commit-Queue: Stephan Hartmann -Reviewed-by: Kentaro Hara -Cr-Commit-Position: refs/heads/main@{#1084808} ---- - -diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py b/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py -index 1d67fa2..9cec5094 100644 ---- a/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py -+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py -@@ -36,7 +36,7 @@ - member_initializer_list=[ - "${base_class_name}(source, kind)", - ]), -- CxxFuncDeclNode(name="~${class_name}", -+ CxxFuncDeclNode(name="~SyncIterator", - arg_decls=[], - return_type="", - override=True, diff --git a/chromium-110-dpf-arm64.patch b/chromium-110-dpf-arm64.patch deleted file mode 100644 index a4ba87b..0000000 --- a/chromium-110-dpf-arm64.patch +++ /dev/null @@ -1,94 +0,0 @@ -From df728d2e2fe8284316ed083c5a210bca1e50986e Mon Sep 17 00:00:00 2001 -From: Jose Dapena Paz -Date: Mon, 16 Jan 2023 12:53:21 +0100 -Subject: [PATCH] GCC: fix distributed point functions build in ARM64 with SVE - -SVE build is broken in ARM64, because distributed_point_functions -is trying to use operator& and operator|. - -Bug:819294 -Change-Id: I465efa475ed59031a2cfaf4172ef9fbd8bb05050 ---- - dpf/internal/evaluate_prg_hwy.cc | 34 ++++++++++++++------------------ - 1 file changed, 15 insertions(+), 19 deletions(-) - -diff --git a/dpf/internal/evaluate_prg_hwy.cc b/dpf/internal/evaluate_prg_hwy.cc -index 3d743f4..a1dd8e0 100644 ---- a//third_party/distributed_point_functions/code/dpf/internal/evaluate_prg_hwy.cc -+++ b//third_party/distributed_point_functions/code/dpf/internal/evaluate_prg_hwy.cc -@@ -124,14 +124,14 @@ auto IsBitSet(D d, const V input, int index) { - - // Compute input AND index_64 on 64-bit integers. - auto input_64 = hn::BitCast(d64, input); -- input_64 &= index_64; -+ input_64 = hn::And(input_64, index_64); - - // Take the OR of every two adjacent 64-bit integers. This ensures that each - // half of an 128-bit block is nonzero iff at least one half was nonzero. -- input_64 |= hn::Shuffle01(input_64); -+ input_64 = hn::Or(input_64, hn::Shuffle01(input_64)); - - // Compute a 64-bit mask that checks which integers are nonzero. -- return input_64 != hn::Zero(d64); -+ return hn::Ne(input_64, hn::Zero(d64)); - } - - // Dummy struct to get HWY_ALIGN as a number, for testing if an array of -@@ -236,24 +236,20 @@ absl::Status EvaluateSeedsHwy( - // Apply correction. - const auto correction_seed = hn::LoadDup128( - d64, reinterpret_cast(correction_seeds + j)); -- vec_0 ^= -- hn::BitCast(d8, hn::IfThenElseZero(control_mask_0, correction_seed)); -- vec_1 ^= -- hn::BitCast(d8, hn::IfThenElseZero(control_mask_1, correction_seed)); -- vec_2 ^= -- hn::BitCast(d8, hn::IfThenElseZero(control_mask_2, correction_seed)); -- vec_3 ^= -- hn::BitCast(d8, hn::IfThenElseZero(control_mask_3, correction_seed)); -+ vec_0 = hn::Xor(vec_0, hn::BitCast(d8, hn::IfThenElseZero(control_mask_0, correction_seed))); -+ vec_1 = hn::Xor(vec_1, hn::BitCast(d8, hn::IfThenElseZero(control_mask_1, correction_seed))); -+ vec_2 = hn::Xor(vec_2, hn::BitCast(d8, hn::IfThenElseZero(control_mask_2, correction_seed))); -+ vec_3 = hn::Xor(vec_3, hn::BitCast(d8, hn::IfThenElseZero(control_mask_3, correction_seed))); - - // Extract control bit for next level. - const auto next_control_mask_0 = IsBitSet(d8, vec_0, 0); - const auto next_control_mask_1 = IsBitSet(d8, vec_1, 0); - const auto next_control_mask_2 = IsBitSet(d8, vec_2, 0); - const auto next_control_mask_3 = IsBitSet(d8, vec_3, 0); -- vec_0 &= clear_lowest_bit; -- vec_1 &= clear_lowest_bit; -- vec_2 &= clear_lowest_bit; -- vec_3 &= clear_lowest_bit; -+ vec_0 = hn::And(vec_0, clear_lowest_bit); -+ vec_1 = hn::And(vec_1, clear_lowest_bit); -+ vec_2 = hn::And(vec_2, clear_lowest_bit); -+ vec_3 = hn::And(vec_3, clear_lowest_bit); - - // Perform control bit correction. - const auto correction_control_mask_left = -@@ -321,10 +317,10 @@ absl::Status EvaluateSeedsHwy( - // Apply correction. - const auto correction_seed = hn::LoadDup128( - d64, reinterpret_cast(correction_seeds + j)); -- vec ^= hn::BitCast(d8, hn::IfThenElseZero(control_mask, correction_seed)); -+ vec = hn::Xor(vec, hn::BitCast(d8, hn::IfThenElseZero(control_mask, correction_seed))); - // Extract control bit for next level. - const auto next_control_mask = IsBitSet(d8, vec, 0); -- vec &= clear_lowest_bit; -+ vec = hn::And(vec, clear_lowest_bit); - - // Perform control bit correction. - const auto correction_control_mask_left = -@@ -376,9 +372,9 @@ absl::Status EvaluateSeedsHwy( - // Perform seed correction. - const auto correction_seed = hn::LoadDup128( - d64, reinterpret_cast(correction_seeds + j)); -- vec ^= hn::BitCast(d8, hn::IfThenElseZero(control_mask, correction_seed)); -+ vec = hn::Xor(vec, hn::BitCast(d8, hn::IfThenElseZero(control_mask, correction_seed))); - const auto next_control_mask = IsBitSet(d8, vec, 0); -- vec &= clear_lowest_bit; -+ vec = hn::And(vec, clear_lowest_bit); - const auto correction_control_mask_left = - correction_controls_left[j] ? mask_all_one : mask_all_zero; - const auto correction_control_mask_right = diff --git a/chromium-110-gtktheme.patch b/chromium-110-gtktheme.patch index eb94e04..3fcaa26 100644 --- a/chromium-110-gtktheme.patch +++ b/chromium-110-gtktheme.patch @@ -23,6 +23,25 @@ index 758d0bf..8c91146 100644 Lenny Khazan Leo Wolf Leon Han +diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc +index 85c3931..2b0c2a84 100644 +--- a/chrome/common/chrome_features.cc ++++ b/chrome/common/chrome_features.cc +@@ -1430,12 +1430,12 @@ + BASE_FEATURE(kWebUIDarkMode, + "WebUIDarkMode", + #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) || \ +- BUILDFLAG(IS_CHROMEOS) ++ BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) + base::FEATURE_ENABLED_BY_DEFAULT + #else + base::FEATURE_DISABLED_BY_DEFAULT + #endif // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) || +- // BUILDFLAG(IS_CHROMEOS) ++ // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) + ); + + #if BUILDFLAG(IS_CHROMEOS_ASH) diff --git a/ui/gtk/native_theme_gtk.cc b/ui/gtk/native_theme_gtk.cc index a60d6e3..1200a80 100644 --- a/ui/gtk/native_theme_gtk.cc diff --git a/chromium-110-kCustomizeChromeColors-type.patch b/chromium-110-kCustomizeChromeColors-type.patch deleted file mode 100644 index ac214da..0000000 --- a/chromium-110-kCustomizeChromeColors-type.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 3084e834a211e85f6a17e6f8dceb6b44117211d2 Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -Date: Wed, 21 Dec 2022 19:22:46 +0000 -Subject: [PATCH] GCC: fix conflicting type for kCustomizeChromeColors - -GCC cannot match auto with previous declaration. - -Bug: 819294 -Change-Id: Ie648daaf264fb2ea177ac46c8a510d481f6fa2f4 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4110870 -Reviewed-by: Tibor Goldschwendt -Commit-Queue: Stephan Hartmann -Cr-Commit-Position: refs/heads/main@{#1086011} ---- - -diff --git a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_colors.cc b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_colors.cc -index 2fccadb..383c9e5 100644 ---- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_colors.cc -+++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_chrome_colors.cc -@@ -31,5 +31,6 @@ - - } // namespace - --const auto kCustomizeChromeColors = MakeCustomizeChromeColors( -- std::make_index_sequence{}); -+const decltype(kCustomizeChromeColors) kCustomizeChromeColors = -+ MakeCustomizeChromeColors( -+ std::make_index_sequence{}); diff --git a/chromium-110-limits.patch b/chromium-110-limits.patch deleted file mode 100644 index 31a4c1e..0000000 --- a/chromium-110-limits.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -up chromium-110.0.5481.177/base/memory/ref_counted.h.me chromium-110.0.5481.177/base/memory/ref_counted.h ---- chromium-110.0.5481.177/base/memory/ref_counted.h.me 2023-02-23 13:34:33.174817255 -0500 -+++ chromium-110.0.5481.177/base/memory/ref_counted.h 2023-02-23 13:42:28.646052469 -0500 -@@ -6,6 +6,7 @@ - #define BASE_MEMORY_REF_COUNTED_H_ - - #include -+#include - - #include - diff --git a/chromium-110-raw_ptr-constexpr.patch b/chromium-110-raw_ptr-constexpr.patch deleted file mode 100644 index ded5855..0000000 --- a/chromium-110-raw_ptr-constexpr.patch +++ /dev/null @@ -1,31 +0,0 @@ -From bd3af998439424886c641279b6f9bb6e950c7142 Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -Date: Sun, 18 Dec 2022 16:12:29 +0000 -Subject: [PATCH] GCC: make raw_ptr::operator bool constexpr - -Required because autofill::internal::FormForest uses it in -a constexpr method. - -Bug: 819294 -Change-Id: Ib2258c9d98c2e7f88ad192b517b487f834a87481 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4110924 -Reviewed-by: Bartek Nowierski -Commit-Queue: Stephan Hartmann -Cr-Commit-Position: refs/heads/main@{#1084785} ---- - -diff --git a/base/memory/raw_ptr.h b/base/memory/raw_ptr.h -index 4191f0e..a22f64b7 100644 ---- a/base/memory/raw_ptr.h -+++ b/base/memory/raw_ptr.h -@@ -1301,7 +1301,9 @@ - // possible, so use it only if absolutely necessary (e.g. for const_cast). - PA_ALWAYS_INLINE T* get() const { return GetForExtraction(); } - -- explicit PA_ALWAYS_INLINE operator bool() const { return !!wrapped_ptr_; } -+ constexpr explicit PA_ALWAYS_INLINE operator bool() const { -+ return !!wrapped_ptr_; -+ } - - template -Date: Tue, 20 Dec 2022 20:41:12 +0000 -Subject: [PATCH] GCC: add cast for vector types in url/url_canon_internal.cc - -GCC requires lax vector conversion for converting __vector(16) to -SIMD types. Add explicit cast instead. - -Bug: 819294 -Change-Id: Icfc9d3586350af469bfd9d83b355d94806430c43 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4110786 -Commit-Queue: Stephan Hartmann -Reviewed-by: Daniel Cheng -Cr-Commit-Position: refs/heads/main@{#1085617} ---- - -diff --git a/url/url_canon_internal.cc b/url/url_canon_internal.cc -index e4f7949..f621920 100644 ---- a/url/url_canon_internal.cc -+++ b/url/url_canon_internal.cc -@@ -49,11 +49,11 @@ - auto mask = b >= 0x24 && b <= 0x7e && b != 0x27 && b != 0x3c && b != 0x3e; - - #ifdef __SSE2__ -- if (_mm_movemask_epi8(mask) != 0xffff) { -+ if (_mm_movemask_epi8(reinterpret_cast<__m128i>(mask)) != 0xffff) { - return i; - } - #else -- if (vminvq_u8(mask) == 0) { -+ if (vminvq_u8(reinterpret_cast(mask)) == 0) { - return i; - } - #endif diff --git a/chromium-110-v8-gcc.patch b/chromium-110-v8-gcc.patch deleted file mode 100644 index 4bca19a..0000000 --- a/chromium-110-v8-gcc.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 15d123009b7e987e946309cd5724ae17f376bd16 Mon Sep 17 00:00:00 2001 -From: Stephan Hartmann -Date: Sun, 18 Dec 2022 16:26:02 +0100 -Subject: [PATCH] GCC: fix selection of IMMEDIATE_CRASH - -immediate_crash.h still uses V8_CC_GCC define to determine which -IMMEDIATE_CRASH macro is used. This should be V8_CC_GNU instead. -Otherwise weird compile errors are happening with turboshaft. - -Bug: chromium:819294 -Change-Id: Id77fe7406ae16a804e1e466844f81d6c728ec008 -Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4111849 -Commit-Queue: Stephan Hartmann -Reviewed-by: Michael Lippautz -Cr-Commit-Position: refs/heads/main@{#84923} ---- - -diff --git a/src/base/immediate-crash.h b/src/base/immediate-crash.h -index 770cb27..ce6240b 100644 ---- a/v8/src/base/immediate-crash.h -+++ b/v8/src/base/immediate-crash.h -@@ -140,9 +140,9 @@ - [] { TRAP_SEQUENCE_(); }(); \ - } while (false) - --#endif // !V8_CC_GCC -+#endif // !V8_CC_GNU - --#if defined(__clang__) || V8_CC_GCC -+#if defined(__clang__) || V8_CC_GNU - - // __builtin_unreachable() hints to the compiler that this is noreturn and can - // be packed in the function epilogue. diff --git a/chromium-111-v8-std-layout1.patch b/chromium-111-v8-std-layout1.patch deleted file mode 100644 index 95b2633..0000000 --- a/chromium-111-v8-std-layout1.patch +++ /dev/null @@ -1,2229 +0,0 @@ -From 472429e623cf48e864a7a2f10d589817a88289a1 Mon Sep 17 00:00:00 2001 -From: Nikolaos Papaspyrou -Date: Wed, 18 Jan 2023 21:11:59 +0100 -Subject: [PATCH] [heap] Fix saving the callee-saved registers on stack - -This CL reinstates the trampoline for pushing the values of -callee-saved registers on the stack, which is used for stack scanning. -It reintroduces the set of architecture-specific functions -PushAllRegistersAndIterateStack, removed in crrev.com/c/3989143. -The reason for this change is that the simpler architecture-specific -functions SaveCalleeSavedRegisters failed to correctly save the -values of the registers, in the presence of C++ compiler optimizations. - -It also removes the stack context, introduced in crrev.com/c/4017512, -and uses again the trampoline for iterating through the stack. - -Bug: v8:13257 -Change-Id: I9e656a9b3ba6616168602300f2180b4f340593f3 -Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4171639 -Commit-Queue: Nikolaos Papaspyrou -Reviewed-by: Omer Katz -Reviewed-by: Michael Lippautz -Cr-Commit-Position: refs/heads/main@{#85394} - -(stripped tests) ---- - -diff --git a/BUILD.bazel b/BUILD.bazel -index 283eeff..e3269a4 100644 ---- a/v8/BUILD.bazel -+++ b/v8/BUILD.bazel -@@ -3201,16 +3201,16 @@ - # Note these cannot be v8_target_is_* selects because these contain - # inline assembly that runs inside the executable. Since these are - # linked directly into mksnapshot, they must use the actual target cpu. -- "@v8//bazel/config:is_inline_asm_ia32": ["src/heap/base/asm/ia32/save_registers_asm.cc"], -- "@v8//bazel/config:is_inline_asm_x64": ["src/heap/base/asm/x64/save_registers_asm.cc"], -- "@v8//bazel/config:is_inline_asm_arm": ["src/heap/base/asm/arm/save_registers_asm.cc"], -- "@v8//bazel/config:is_inline_asm_arm64": ["src/heap/base/asm/arm64/save_registers_asm.cc"], -- "@v8//bazel/config:is_inline_asm_s390x": ["src/heap/base/asm/s390/save_registers_asm.cc"], -- "@v8//bazel/config:is_inline_asm_riscv64": ["src/heap/base/asm/riscv64/save_registers_asm.cc"], -- "@v8//bazel/config:is_inline_asm_ppc64le": ["src/heap/base/asm/ppc/save_registers_asm.cc"], -- "@v8//bazel/config:is_msvc_asm_ia32": ["src/heap/base/asm/ia32/save_registers_masm.asm"], -- "@v8//bazel/config:is_msvc_asm_x64": ["src/heap/base/asm/x64/save_registers_masm.asm"], -- "@v8//bazel/config:is_msvc_asm_arm64": ["src/heap/base/asm/arm64/save_registers_masm.S"], -+ "@v8//bazel/config:is_inline_asm_ia32": ["src/heap/base/asm/ia32/push_registers_asm.cc"], -+ "@v8//bazel/config:is_inline_asm_x64": ["src/heap/base/asm/x64/push_registers_asm.cc"], -+ "@v8//bazel/config:is_inline_asm_arm": ["src/heap/base/asm/arm/push_registers_asm.cc"], -+ "@v8//bazel/config:is_inline_asm_arm64": ["src/heap/base/asm/arm64/push_registers_asm.cc"], -+ "@v8//bazel/config:is_inline_asm_s390x": ["src/heap/base/asm/s390/push_registers_asm.cc"], -+ "@v8//bazel/config:is_inline_asm_riscv64": ["src/heap/base/asm/riscv64/push_registers_asm.cc"], -+ "@v8//bazel/config:is_inline_asm_ppc64le": ["src/heap/base/asm/ppc/push_registers_asm.cc"], -+ "@v8//bazel/config:is_msvc_asm_ia32": ["src/heap/base/asm/ia32/push_registers_masm.asm"], -+ "@v8//bazel/config:is_msvc_asm_x64": ["src/heap/base/asm/x64/push_registers_masm.asm"], -+ "@v8//bazel/config:is_msvc_asm_arm64": ["src/heap/base/asm/arm64/push_registers_masm.S"], - }), - ) - -diff --git a/BUILD.gn b/BUILD.gn -index 80a7eb6..56798db 100644 ---- a/v8/BUILD.gn -+++ b/v8/BUILD.gn -@@ -5989,31 +5989,31 @@ - - if (is_clang || !is_win) { - if (current_cpu == "x64") { -- sources += [ "src/heap/base/asm/x64/save_registers_asm.cc" ] -+ sources += [ "src/heap/base/asm/x64/push_registers_asm.cc" ] - } else if (current_cpu == "x86") { -- sources += [ "src/heap/base/asm/ia32/save_registers_asm.cc" ] -+ sources += [ "src/heap/base/asm/ia32/push_registers_asm.cc" ] - } else if (current_cpu == "arm") { -- sources += [ "src/heap/base/asm/arm/save_registers_asm.cc" ] -+ sources += [ "src/heap/base/asm/arm/push_registers_asm.cc" ] - } else if (current_cpu == "arm64") { -- sources += [ "src/heap/base/asm/arm64/save_registers_asm.cc" ] -+ sources += [ "src/heap/base/asm/arm64/push_registers_asm.cc" ] - } else if (current_cpu == "ppc64") { -- sources += [ "src/heap/base/asm/ppc/save_registers_asm.cc" ] -+ sources += [ "src/heap/base/asm/ppc/push_registers_asm.cc" ] - } else if (current_cpu == "s390x") { -- sources += [ "src/heap/base/asm/s390/save_registers_asm.cc" ] -+ sources += [ "src/heap/base/asm/s390/push_registers_asm.cc" ] - } else if (current_cpu == "mips64el") { -- sources += [ "src/heap/base/asm/mips64/save_registers_asm.cc" ] -+ sources += [ "src/heap/base/asm/mips64/push_registers_asm.cc" ] - } else if (current_cpu == "loong64") { -- sources += [ "src/heap/base/asm/loong64/save_registers_asm.cc" ] -+ sources += [ "src/heap/base/asm/loong64/push_registers_asm.cc" ] - } else if (current_cpu == "riscv64" || current_cpu == "riscv32") { -- sources += [ "src/heap/base/asm/riscv/save_registers_asm.cc" ] -+ sources += [ "src/heap/base/asm/riscv/push_registers_asm.cc" ] - } - } else if (is_win) { - if (current_cpu == "x64") { -- sources += [ "src/heap/base/asm/x64/save_registers_masm.asm" ] -+ sources += [ "src/heap/base/asm/x64/push_registers_masm.asm" ] - } else if (current_cpu == "x86") { -- sources += [ "src/heap/base/asm/ia32/save_registers_masm.asm" ] -+ sources += [ "src/heap/base/asm/ia32/push_registers_masm.asm" ] - } else if (current_cpu == "arm64") { -- sources += [ "src/heap/base/asm/arm64/save_registers_masm.S" ] -+ sources += [ "src/heap/base/asm/arm64/push_registers_masm.S" ] - } - } - -diff --git a/src/execution/isolate.cc b/src/execution/isolate.cc -index 8a2ec80..31536a1 100644 ---- a/v8/src/execution/isolate.cc -+++ b/v8/src/execution/isolate.cc -@@ -3075,8 +3075,7 @@ - .get() - .get(); - current = WasmContinuationObject::cast(current).parent(); -- thread_local_top()->stack_.SetStackStart( -- reinterpret_cast(stack->base())); -+ heap()->SetStackStart(reinterpret_cast(stack->base())); - // We don't need to add all inactive stacks. Only the ones in the active chain - // may contain cpp heap pointers. - while (!current.IsUndefined()) { -@@ -3372,9 +3371,12 @@ - Isolate* saved_isolate = isolate->TryGetCurrent(); - SetIsolateThreadLocals(isolate, nullptr); - isolate->set_thread_id(ThreadId::Current()); -- isolate->thread_local_top()->stack_ = -- saved_isolate ? std::move(saved_isolate->thread_local_top()->stack_) -- : ::heap::base::Stack(base::Stack::GetStackStart()); -+ if (saved_isolate) { -+ isolate->thread_local_top()->stack_ = -+ std::move(saved_isolate->thread_local_top()->stack_); -+ } else { -+ isolate->heap()->SetStackStart(base::Stack::GetStackStart()); -+ } - - bool owns_shared_isolate = isolate->owns_shared_isolate_; - Isolate* maybe_shared_isolate = isolate->shared_isolate_; -diff --git a/src/execution/thread-local-top.cc b/src/execution/thread-local-top.cc -index 0d7071d..c115ae0 100644 ---- a/v8/src/execution/thread-local-top.cc -+++ b/v8/src/execution/thread-local-top.cc -@@ -44,10 +44,13 @@ - Clear(); - isolate_ = isolate; - thread_id_ = ThreadId::Current(); -- stack_.SetStackStart(base::Stack::GetStackStart()); - #if V8_ENABLE_WEBASSEMBLY -+ stack_.SetStackStart(base::Stack::GetStackStart(), -+ v8_flags.experimental_wasm_stack_switching); - thread_in_wasm_flag_address_ = reinterpret_cast
( - trap_handler::GetThreadInWasmThreadLocalAddress()); -+#else -+ stack_.SetStackStart(base::Stack::GetStackStart(), false); - #endif // V8_ENABLE_WEBASSEMBLY - #ifdef USE_SIMULATOR - simulator_ = Simulator::current(isolate); -diff --git a/src/heap/base/asm/arm/push_registers_asm.cc b/src/heap/base/asm/arm/push_registers_asm.cc -new file mode 100644 -index 0000000..5246c3f ---- /dev/null -+++ b/v8/src/heap/base/asm/arm/push_registers_asm.cc -@@ -0,0 +1,39 @@ -+// Copyright 2020 the V8 project authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Push all callee-saved registers to get them on the stack for conservative -+// stack scanning. -+// -+// See asm/x64/push_registers_clang.cc for why the function is not generated -+// using clang. -+// -+// Do not depend on V8_TARGET_OS_* defines as some embedders may override the -+// GN toolchain (e.g. ChromeOS) and not provide them. -+ -+// We maintain 8-byte alignment at calls by pushing an additional -+// non-callee-saved register (r3). -+// -+// Calling convention source: -+// https://en.wikipedia.org/wiki/Calling_convention#ARM_(A32) -+// http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4127.html -+asm(".globl PushAllRegistersAndIterateStack \n" -+ ".type PushAllRegistersAndIterateStack, %function \n" -+ ".hidden PushAllRegistersAndIterateStack \n" -+ "PushAllRegistersAndIterateStack: \n" -+ // Push all callee-saved registers and save return address. -+ // Only {r4-r11} are callee-saved registers. Push r3 in addition to align -+ // the stack back to 8 bytes. -+ " push {r3-r11, lr} \n" -+ // Pass 1st parameter (r0) unchanged (Stack*). -+ // Pass 2nd parameter (r1) unchanged (StackVisitor*). -+ // Save 3rd parameter (r2; IterateStackCallback). -+ " mov r3, r2 \n" -+ // Pass 3rd parameter as sp (stack pointer). -+ " mov r2, sp \n" -+ // Call the callback. -+ " blx r3 \n" -+ // Discard all the registers. -+ " add sp, sp, #36 \n" -+ // Pop lr into pc which returns and switches mode if needed. -+ " pop {pc} \n"); -diff --git a/src/heap/base/asm/arm/save_registers_asm.cc b/src/heap/base/asm/arm/save_registers_asm.cc -deleted file mode 100644 -index ace9503..0000000 ---- a/v8/src/heap/base/asm/arm/save_registers_asm.cc -+++ /dev/null -@@ -1,36 +0,0 @@ --// Copyright 2020 the V8 project authors. All rights reserved. --// Use of this source code is governed by a BSD-style license that can be --// found in the LICENSE file. -- --#include -- --// Save all callee-saved registers in the specified buffer. --// extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- --// See asm/x64/save_registers_asm.cc for why the function is not generated --// using clang. --// --// Do not depend on V8_TARGET_OS_* defines as some embedders may override the --// GN toolchain (e.g. ChromeOS) and not provide them. --// --// We maintain 8-byte alignment at calls by pushing an additional --// non-callee-saved register (r3). --// --// Calling convention source: --// https://en.wikipedia.org/wiki/Calling_convention#ARM_(A32) --// http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4127.html -- --// 8 32-bit registers = 8 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 8, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 4, "Mismatch in word size"); -- --asm(".globl SaveCalleeSavedRegisters \n" -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" -- // r0: [ intptr_t* buffer ] -- // Save the callee-saved registers: {r4-r11}. -- " stm r0, {r4-r11} \n" -- // Return. -- " bx lr \n"); -diff --git a/src/heap/base/asm/arm64/push_registers_asm.cc b/src/heap/base/asm/arm64/push_registers_asm.cc -new file mode 100644 -index 0000000..1efcc34 ---- /dev/null -+++ b/v8/src/heap/base/asm/arm64/push_registers_asm.cc -@@ -0,0 +1,62 @@ -+// Copyright 2020 the V8 project authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Push all callee-saved registers to get them on the stack for conservative -+// stack scanning. -+// -+// See asm/x64/push_registers_clang.cc for why the function is not generated -+// using clang. -+// -+// Do not depend on V8_TARGET_OS_* defines as some embedders may override the -+// GN toolchain (e.g. ChromeOS) and not provide them. -+ -+// We maintain 16-byte alignment. -+// -+// Calling convention source: -+// https://en.wikipedia.org/wiki/Calling_convention#ARM_(A64) -+ -+asm( -+#if defined(__APPLE__) -+ ".globl _PushAllRegistersAndIterateStack \n" -+ ".private_extern _PushAllRegistersAndIterateStack \n" -+ ".p2align 2 \n" -+ "_PushAllRegistersAndIterateStack: \n" -+#else // !defined(__APPLE__) -+ ".globl PushAllRegistersAndIterateStack \n" -+#if !defined(_WIN64) -+ ".type PushAllRegistersAndIterateStack, %function \n" -+ ".hidden PushAllRegistersAndIterateStack \n" -+#endif // !defined(_WIN64) -+ ".p2align 2 \n" -+ "PushAllRegistersAndIterateStack: \n" -+#endif // !defined(__APPLE__) -+ // x19-x29 are callee-saved. -+ " stp x19, x20, [sp, #-16]! \n" -+ " stp x21, x22, [sp, #-16]! \n" -+ " stp x23, x24, [sp, #-16]! \n" -+ " stp x25, x26, [sp, #-16]! \n" -+ " stp x27, x28, [sp, #-16]! \n" -+#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY -+ // Sign return address. -+ " paciasp \n" -+#endif -+ " stp fp, lr, [sp, #-16]! \n" -+ // Maintain frame pointer. -+ " mov fp, sp \n" -+ // Pass 1st parameter (x0) unchanged (Stack*). -+ // Pass 2nd parameter (x1) unchanged (StackVisitor*). -+ // Save 3rd parameter (x2; IterateStackCallback) -+ " mov x7, x2 \n" -+ // Pass 3rd parameter as sp (stack pointer). -+ " mov x2, sp \n" -+ " blr x7 \n" -+ // Load return address and frame pointer. -+ " ldp fp, lr, [sp], #16 \n" -+#ifdef V8_ENABLE_CONTROL_FLOW_INTEGRITY -+ // Authenticate return address. -+ " autiasp \n" -+#endif -+ // Drop all callee-saved registers. -+ " add sp, sp, #80 \n" -+ " ret \n"); -diff --git a/src/heap/base/asm/arm64/push_registers_masm.S b/src/heap/base/asm/arm64/push_registers_masm.S -new file mode 100644 -index 0000000..888523a ---- /dev/null -+++ b/v8/src/heap/base/asm/arm64/push_registers_masm.S -@@ -0,0 +1,32 @@ -+; Copyright 2020 the V8 project authors. All rights reserved. -+; Use of this source code is governed by a BSD-style license that can be -+; found in the LICENSE file. -+ -+; This file is exactly the same as push_registers_asm.cc, just formatted for -+; the Microsoft Arm Assembler. -+ -+ AREA |.text|, CODE, ALIGN=4, READONLY -+ EXPORT PushAllRegistersAndIterateStack -+PushAllRegistersAndIterateStack -+ ; x19-x29 are callee-saved -+ STP x19, x20, [sp, #-16]! -+ STP x21, x22, [sp, #-16]! -+ STP x23, x24, [sp, #-16]! -+ STP x25, x26, [sp, #-16]! -+ STP x27, x28, [sp, #-16]! -+ STP fp, lr, [sp, #-16]! -+ ; Maintain frame pointer -+ MOV fp, sp -+ ; Pass 1st parameter (x0) unchanged (Stack*). -+ ; Pass 2nd parameter (x1) unchanged (StackVisitor*). -+ ; Save 3rd parameter (x2; IterateStackCallback) -+ MOV x7, x2 -+ ; Pass 3rd parameter as sp (stack pointer) -+ MOV x2, sp -+ BLR x7 -+ ; Load return address -+ LDR lr, [sp, #8] -+ ; Restore frame pointer and pop all callee-saved registers. -+ LDR fp, [sp], #96 -+ RET -+ END -diff --git a/src/heap/base/asm/arm64/save_registers_asm.cc b/src/heap/base/asm/arm64/save_registers_asm.cc -deleted file mode 100644 -index 5fe81d8..0000000 ---- a/v8/src/heap/base/asm/arm64/save_registers_asm.cc -+++ /dev/null -@@ -1,50 +0,0 @@ --// Copyright 2020 the V8 project authors. All rights reserved. --// Use of this source code is governed by a BSD-style license that can be --// found in the LICENSE file. -- --#include -- --// Save all callee-saved registers in the specified buffer. --// extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- --// See asm/x64/save_registers_asm.cc for why the function is not generated --// using clang. --// --// Do not depend on V8_TARGET_OS_* defines as some embedders may override the --// GN toolchain (e.g. ChromeOS) and not provide them. --// --// We maintain 16-byte alignment. --// --// Calling convention source: --// https://en.wikipedia.org/wiki/Calling_convention#ARM_(A64) -- --// 11 64-bit registers = 11 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 11, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 8, "Mismatch in word size"); -- --asm( --#if defined(__APPLE__) -- ".globl _SaveCalleeSavedRegisters \n" -- ".private_extern _SaveCalleeSavedRegisters \n" -- ".p2align 2 \n" -- "_SaveCalleeSavedRegisters: \n" --#else // !defined(__APPLE__) -- ".globl SaveCalleeSavedRegisters \n" --#if !defined(_WIN64) -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" --#endif // !defined(_WIN64) -- ".p2align 2 \n" -- "SaveCalleeSavedRegisters: \n" --#endif // !defined(__APPLE__) -- // $x0: [ intptr_t* buffer ] -- // Save the callee-saved registers: x19-x29. -- " stp x19, x20, [x0], #16 \n" -- " stp x21, x22, [x0], #16 \n" -- " stp x23, x24, [x0], #16 \n" -- " stp x25, x26, [x0], #16 \n" -- " stp x27, x28, [x0], #16 \n" -- " str x29, [x0] \n" -- // Return. -- " ret \n"); -diff --git a/src/heap/base/asm/arm64/save_registers_masm.S b/src/heap/base/asm/arm64/save_registers_masm.S -deleted file mode 100644 -index ab79055..0000000 ---- a/v8/src/heap/base/asm/arm64/save_registers_masm.S -+++ /dev/null -@@ -1,24 +0,0 @@ --; Copyright 2020 the V8 project authors. All rights reserved. --; Use of this source code is governed by a BSD-style license that can be --; found in the LICENSE file. -- --; This file is exactly the same as save_registers_asm.cc, just formatted for --; the Microsoft Arm Assembler. -- --; Save all callee-saved registers in the specified buffer. --; extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- -- AREA |.text|, CODE, ALIGN=4, READONLY -- EXPORT SaveCalleeSavedRegisters --SaveCalleeSavedRegisters -- ; x0: [ intptr_t* buffer ] -- ; x19-x29 are callee-saved -- STP x19, x20, [x0], #16 -- STP x21, x22, [x0], #16 -- STP x23, x24, [x0], #16 -- STP x25, x26, [x0], #16 -- STP x27, x28, [x0], #16 -- STR x29, [x0] -- ; Return. -- RET -- END -diff --git a/src/heap/base/asm/ia32/push_registers_asm.cc b/src/heap/base/asm/ia32/push_registers_asm.cc -new file mode 100644 -index 0000000..ed9c14a ---- /dev/null -+++ b/v8/src/heap/base/asm/ia32/push_registers_asm.cc -@@ -0,0 +1,53 @@ -+// Copyright 2020 the V8 project authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Push all callee-saved registers to get them on the stack for conservative -+// stack scanning. -+// -+// See asm/x64/push_registers_clang.cc for why the function is not generated -+// using clang. -+// -+// Do not depend on V8_TARGET_OS_* defines as some embedders may override the -+// GN toolchain (e.g. ChromeOS) and not provide them. -+ -+// We maintain 16-byte alignment at calls. There is an 4-byte return address -+// on the stack and we push 28 bytes which maintains 16-byte stack alignment -+// at the call. -+// -+// The following assumes cdecl calling convention. -+// Source: https://en.wikipedia.org/wiki/X86_calling_conventions#cdecl -+asm( -+#ifdef _WIN32 -+ ".globl _PushAllRegistersAndIterateStack \n" -+ "_PushAllRegistersAndIterateStack: \n" -+#else // !_WIN32 -+ ".globl PushAllRegistersAndIterateStack \n" -+ ".type PushAllRegistersAndIterateStack, %function \n" -+ ".hidden PushAllRegistersAndIterateStack \n" -+ "PushAllRegistersAndIterateStack: \n" -+#endif // !_WIN32 -+ // [ IterateStackCallback ] -+ // [ StackVisitor* ] -+ // [ Stack* ] -+ // [ ret ] -+ // ebp is callee-saved. Maintain proper frame pointer for debugging. -+ " push %ebp \n" -+ " movl %esp, %ebp \n" -+ " push %ebx \n" -+ " push %esi \n" -+ " push %edi \n" -+ // Save 3rd parameter (IterateStackCallback). -+ " movl 28(%esp), %ecx \n" -+ // Pass 3rd parameter as esp (stack pointer). -+ " push %esp \n" -+ // Pass 2nd parameter (StackVisitor*). -+ " push 28(%esp) \n" -+ // Pass 1st parameter (Stack*). -+ " push 28(%esp) \n" -+ " call *%ecx \n" -+ // Pop the callee-saved registers. -+ " addl $24, %esp \n" -+ // Restore rbp as it was used as frame pointer. -+ " pop %ebp \n" -+ " ret \n"); -diff --git a/src/heap/base/asm/ia32/push_registers_masm.asm b/src/heap/base/asm/ia32/push_registers_masm.asm -new file mode 100644 -index 0000000..a35fd6e ---- /dev/null -+++ b/v8/src/heap/base/asm/ia32/push_registers_masm.asm -@@ -0,0 +1,48 @@ -+;; Copyright 2020 the V8 project authors. All rights reserved. -+;; Use of this source code is governed by a BSD-style license that can be -+;; found in the LICENSE file. -+ -+;; MASM syntax -+;; https://docs.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference?view=vs-2019 -+ -+.model flat, C -+ -+public PushAllRegistersAndIterateStack -+ -+.code -+PushAllRegistersAndIterateStack: -+ ;; Push all callee-saved registers to get them on the stack for conservative -+ ;; stack scanning. -+ ;; -+ ;; We maintain 16-byte alignment at calls. There is an 8-byte return address -+ ;; on the stack and we push 72 bytes which maintains 16-byte stack alignment -+ ;; at the call. -+ ;; -+ ;; The following assumes cdecl calling convention. -+ ;; Source: https://docs.microsoft.com/en-us/cpp/cpp/cdecl?view=vs-2019 -+ ;; -+ ;; [ IterateStackCallback ] -+ ;; [ StackVisitor* ] -+ ;; [ Stack* ] -+ ;; [ ret ] -+ push ebp -+ mov ebp, esp -+ push ebx -+ push esi -+ push edi -+ ;; Save 3rd parameter (IterateStackCallback). -+ mov ecx, [ esp + 28 ] -+ ;; Pass 3rd parameter as esp (stack pointer). -+ push esp -+ ;; Pass 2nd parameter (StackVisitor*). -+ push [ esp + 28 ] -+ ;; Pass 1st parameter (Stack*). -+ push [ esp + 28 ] -+ call ecx -+ ;; Pop the callee-saved registers. -+ add esp, 24 -+ ;; Restore rbp as it was used as frame pointer. -+ pop ebp -+ ret -+ -+end -diff --git a/src/heap/base/asm/ia32/save_registers_asm.cc b/src/heap/base/asm/ia32/save_registers_asm.cc -deleted file mode 100644 -index 7c05247..0000000 ---- a/v8/src/heap/base/asm/ia32/save_registers_asm.cc -+++ /dev/null -@@ -1,48 +0,0 @@ --// Copyright 2020 the V8 project authors. All rights reserved. --// Use of this source code is governed by a BSD-style license that can be --// found in the LICENSE file. -- --#include -- --// Save all callee-saved registers in the specified buffer. --// extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- --// See asm/x64/save_registers_asm.cc for why the function is not generated --// using clang. --// --// Do not depend on V8_TARGET_OS_* defines as some embedders may override the --// GN toolchain (e.g. ChromeOS) and not provide them. --// --// The following assumes cdecl calling convention. --// Source: https://en.wikipedia.org/wiki/X86_calling_conventions#cdecl -- --// 3 32-bit registers = 3 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 3, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 4, "Mismatch in word size"); -- --asm( --#ifdef _WIN32 -- ".globl _SaveCalleeSavedRegisters \n" -- "_SaveCalleeSavedRegisters: \n" --#else // !_WIN32 -- ".globl SaveCalleeSavedRegisters \n" -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" --#endif // !_WIN32 -- // 8: [ intptr_t* buffer ] -- // 4: [ ret ] -- // 0: [ saved %ebp ] -- // %ebp is callee-saved. Maintain proper frame pointer for debugging. -- " push %ebp \n" -- " movl %esp, %ebp \n" -- // Load the buffer's address in %ecx. -- " movl 8(%ebp), %ecx \n" -- // Save the callee-saved registers. -- " movl %ebx, 0(%ecx) \n" -- " movl %esi, 4(%ecx) \n" -- " movl %edi, 8(%ecx) \n" -- // Restore %ebp as it was used as frame pointer and return. -- " pop %ebp \n" -- " ret \n"); -diff --git a/src/heap/base/asm/ia32/save_registers_masm.asm b/src/heap/base/asm/ia32/save_registers_masm.asm -deleted file mode 100644 -index 0892b02..0000000 ---- a/v8/src/heap/base/asm/ia32/save_registers_masm.asm -+++ /dev/null -@@ -1,36 +0,0 @@ --;; Copyright 2020 the V8 project authors. All rights reserved. --;; Use of this source code is governed by a BSD-style license that can be --;; found in the LICENSE file. -- --;; MASM syntax --;; https://docs.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference?view=vs-2019 -- --.model flat, C -- --public SaveCalleeSavedRegisters -- --.code -- ;; Save all callee-saved registers in the specified buffer. -- ;; extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- ;; -- ;; The following assumes cdecl calling convention. -- ;; Source: https://docs.microsoft.com/en-us/cpp/cpp/cdecl?view=vs-2019 -- --SaveCalleeSavedRegisters: -- ;; 8: [ intptr_t* buffer ] -- ;; 4: [ ret ] -- ;; 0: [ saved %ebp ] -- ;; %ebp is callee-saved. Maintain proper frame pointer for debugging. -- push ebp -- mov ebp, esp -- ;; Load the buffer's address in %ecx. -- mov ecx, [ebp + 8] -- ;; Save the callee-saved registers. -- mov [ecx], ebx -- mov [ecx + 4], esi -- mov [ecx + 8], edi -- ;; Restore %ebp as it was used as frame pointer and return. -- pop ebp -- ret -- --end -diff --git a/src/heap/base/asm/loong64/push_registers_asm.cc b/src/heap/base/asm/loong64/push_registers_asm.cc -new file mode 100644 -index 0000000..aa8dcd3 ---- /dev/null -+++ b/v8/src/heap/base/asm/loong64/push_registers_asm.cc -@@ -0,0 +1,48 @@ -+// Copyright 2021 the V8 project authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Push all callee-saved registers to get them on the stack for conservative -+// stack scanning. -+// -+// See asm/x64/push_registers_clang.cc for why the function is not generated -+// using clang. -+// -+// Do not depend on V8_TARGET_OS_* defines as some embedders may override the -+// GN toolchain (e.g. ChromeOS) and not provide them. -+asm(".text \n" -+ ".global PushAllRegistersAndIterateStack \n" -+ ".type PushAllRegistersAndIterateStack, %function \n" -+ ".hidden PushAllRegistersAndIterateStack \n" -+ "PushAllRegistersAndIterateStack: \n" -+ // Push all callee-saved registers and save return address. -+ " addi.d $sp, $sp, -96 \n" -+ " st.d $ra, $sp, 88 \n" -+ " st.d $s8, $sp, 80 \n" -+ " st.d $sp, $sp, 72 \n" -+ " st.d $fp, $sp, 64 \n" -+ " st.d $s7, $sp, 56 \n" -+ " st.d $s6, $sp, 48 \n" -+ " st.d $s5, $sp, 40 \n" -+ " st.d $s4, $sp, 32 \n" -+ " st.d $s3, $sp, 24 \n" -+ " st.d $s2, $sp, 16 \n" -+ " st.d $s1, $sp, 8 \n" -+ " st.d $s0, $sp, 0 \n" -+ // Maintain frame pointer. -+ " addi.d $s8, $sp, 0 \n" -+ // Pass 1st parameter (a0) unchanged (Stack*). -+ // Pass 2nd parameter (a1) unchanged (StackVisitor*). -+ // Save 3rd parameter (a2; IterateStackCallback). -+ " addi.d $a3, $a2, 0 \n" -+ // Call the callback. -+ // Pass 3rd parameter as sp (stack pointer). -+ " addi.d $a2, $sp, 0 \n" -+ " jirl $ra, $a3, 0 \n" -+ // Load return address. -+ " ld.d $ra, $sp, 88 \n" -+ // Restore frame pointer. -+ " ld.d $s8, $sp, 80 \n" -+ // Discard all callee-saved registers. -+ " addi.d $sp, $sp, 96 \n" -+ " jirl $zero, $ra, 0 \n"); -diff --git a/src/heap/base/asm/loong64/save_registers_asm.cc b/src/heap/base/asm/loong64/save_registers_asm.cc -deleted file mode 100644 -index d5b110d..0000000 ---- a/v8/src/heap/base/asm/loong64/save_registers_asm.cc -+++ /dev/null -@@ -1,40 +0,0 @@ --// Copyright 2021 the V8 project authors. All rights reserved. --// Use of this source code is governed by a BSD-style license that can be --// found in the LICENSE file. -- --#include -- --// Save all callee-saved registers in the specified buffer. --// extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- --// See asm/x64/save_registers_asm.cc for why the function is not generated --// using clang. --// --// Do not depend on V8_TARGET_OS_* defines as some embedders may override the --// GN toolchain (e.g. ChromeOS) and not provide them. -- --// 11 64-bit registers = 11 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 11, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 8, "Mismatch in word size"); -- --asm(".text \n" -- ".global SaveCalleeSavedRegisters \n" -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" -- // $a0: [ intptr_t* buffer ] -- // Save the callee-saved registers. -- " st.d $s8, $a0, 0 \n" -- " st.d $sp, $a0, 8 \n" -- " st.d $fp, $a0, 16 \n" -- " st.d $s7, $a0, 24 \n" -- " st.d $s6, $a0, 32 \n" -- " st.d $s5, $a0, 40 \n" -- " st.d $s4, $a0, 48 \n" -- " st.d $s3, $a0, 56 \n" -- " st.d $s2, $a0, 64 \n" -- " st.d $s1, $a0, 72 \n" -- " st.d $s0, $a0, 80 \n" -- // Return. -- " jirl $zero, $ra, 0 \n"); -diff --git a/src/heap/base/asm/mips64/push_registers_asm.cc b/src/heap/base/asm/mips64/push_registers_asm.cc -new file mode 100644 -index 0000000..47779e0 ---- /dev/null -+++ b/v8/src/heap/base/asm/mips64/push_registers_asm.cc -@@ -0,0 +1,49 @@ -+// Copyright 2020 the V8 project authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Push all callee-saved registers to get them on the stack for conservative -+// stack scanning. -+// -+// See asm/x64/push_registers_clang.cc for why the function is not generated -+// using clang. -+// -+// Do not depend on V8_TARGET_OS_* defines as some embedders may override the -+// GN toolchain (e.g. ChromeOS) and not provide them. -+asm(".text \n" -+ ".set noreorder \n" -+ ".global PushAllRegistersAndIterateStack \n" -+ ".type PushAllRegistersAndIterateStack, %function \n" -+ ".hidden PushAllRegistersAndIterateStack \n" -+ "PushAllRegistersAndIterateStack: \n" -+ // Push all callee-saved registers and save return address. -+ " daddiu $sp, $sp, -96 \n" -+ " sd $ra, 88($sp) \n" -+ " sd $s8, 80($sp) \n" -+ " sd $sp, 72($sp) \n" -+ " sd $gp, 64($sp) \n" -+ " sd $s7, 56($sp) \n" -+ " sd $s6, 48($sp) \n" -+ " sd $s5, 40($sp) \n" -+ " sd $s4, 32($sp) \n" -+ " sd $s3, 24($sp) \n" -+ " sd $s2, 16($sp) \n" -+ " sd $s1, 8($sp) \n" -+ " sd $s0, 0($sp) \n" -+ // Maintain frame pointer. -+ " move $s8, $sp \n" -+ // Pass 1st parameter (a0) unchanged (Stack*). -+ // Pass 2nd parameter (a1) unchanged (StackVisitor*). -+ // Save 3rd parameter (a2; IterateStackCallback). -+ " move $a3, $a2 \n" -+ // Call the callback. -+ " jalr $a3 \n" -+ // Delay slot: Pass 3rd parameter as sp (stack pointer). -+ " move $a2, $sp \n" -+ // Load return address. -+ " ld $ra, 88($sp) \n" -+ // Restore frame pointer. -+ " ld $s8, 80($sp) \n" -+ " jr $ra \n" -+ // Delay slot: Discard all callee-saved registers. -+ " daddiu $sp, $sp, 96 \n"); -diff --git a/src/heap/base/asm/mips64/save_registers_asm.cc b/src/heap/base/asm/mips64/save_registers_asm.cc -deleted file mode 100644 -index 95bcc31..0000000 ---- a/v8/src/heap/base/asm/mips64/save_registers_asm.cc -+++ /dev/null -@@ -1,41 +0,0 @@ --// Copyright 2020 the V8 project authors. All rights reserved. --// Use of this source code is governed by a BSD-style license that can be --// found in the LICENSE file. -- --#include -- --// Save all callee-saved registers in the specified buffer. --// extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- --// See asm/x64/save_registers_asm.cc for why the function is not generated --// using clang. --// --// Do not depend on V8_TARGET_OS_* defines as some embedders may override the --// GN toolchain (e.g. ChromeOS) and not provide them. -- --// 9 64-bit registers = 9 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 9, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 8, "Mismatch in word size"); -- --asm(".text \n" -- ".set noreorder \n" -- ".global SaveCalleeSavedRegisters \n" -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" -- // $a0: [ intptr_t* buffer ] -- // Save the callee-saved registers. -- " sd $gp, 64($a0) \n" -- " sd $s7, 56($a0) \n" -- " sd $s6, 48($a0) \n" -- " sd $s5, 40($a0) \n" -- " sd $s4, 32($a0) \n" -- " sd $s3, 24($a0) \n" -- " sd $s2, 16($a0) \n" -- " sd $s1, 8($a0) \n" -- // ... one more in the delay slot! -- // Return. -- " jr $ra \n" -- // Delay slot: -- " sd $s0, 0($a0) \n"); -diff --git a/src/heap/base/asm/ppc/push_registers_asm.cc b/src/heap/base/asm/ppc/push_registers_asm.cc -new file mode 100644 -index 0000000..f879980 ---- /dev/null -+++ b/v8/src/heap/base/asm/ppc/push_registers_asm.cc -@@ -0,0 +1,97 @@ -+// Copyright 2020 the V8 project authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Push all callee-saved registers to get them on the stack for conservative -+// stack scanning. -+// -+// See asm/x64/push_registers_clang.cc for why the function is not generated -+// using clang. -+ -+// Do not depend on V8_TARGET_OS_* defines as some embedders may override the -+// GN toolchain (e.g. ChromeOS) and not provide them. -+ -+// PPC ABI source: -+// http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html -+ -+// AIX Runtime process stack: -+// https://www.ibm.com/support/knowledgecenter/ssw_aix_71/assembler/idalangref_runtime_process.html -+asm( -+#if defined(_AIX) -+ ".csect .text[PR] \n" -+ ".align 2 \n" -+ ".globl .PushAllRegistersAndIterateStack, hidden \n" -+ ".PushAllRegistersAndIterateStack: \n" -+#else -+ ".text \n" -+ ".align 2 \n" -+ ".globl PushAllRegistersAndIterateStack \n" -+ ".type PushAllRegistersAndIterateStack, %function \n" -+ ".hidden PushAllRegistersAndIterateStack \n" -+ "PushAllRegistersAndIterateStack: \n" -+#endif -+ // Push all callee-saved registers. -+ // lr, TOC pointer, r16 to r31. 160 bytes. -+ // The parameter save area shall be allocated by the caller. 112 bytes. -+ // At anytime, SP (r1) needs to be multiple of 16 (i.e. 16-aligned). -+ " mflr 0 \n" -+ " std 0, 16(1) \n" -+#if defined(_AIX) -+ " std 2, 40(1) \n" -+#else -+ " std 2, 24(1) \n" -+#endif -+ " stdu 1, -256(1) \n" -+ " std 14, 112(1) \n" -+ " std 15, 120(1) \n" -+ " std 16, 128(1) \n" -+ " std 17, 136(1) \n" -+ " std 18, 144(1) \n" -+ " std 19, 152(1) \n" -+ " std 20, 160(1) \n" -+ " std 21, 168(1) \n" -+ " std 22, 176(1) \n" -+ " std 23, 184(1) \n" -+ " std 24, 192(1) \n" -+ " std 25, 200(1) \n" -+ " std 26, 208(1) \n" -+ " std 27, 216(1) \n" -+ " std 28, 224(1) \n" -+ " std 29, 232(1) \n" -+ " std 30, 240(1) \n" -+ " std 31, 248(1) \n" -+ // Pass 1st parameter (r3) unchanged (Stack*). -+ // Pass 2nd parameter (r4) unchanged (StackVisitor*). -+ // Save 3rd parameter (r5; IterateStackCallback). -+ " mr 6, 5 \n" -+#if defined(_AIX) -+ // Set up TOC for callee. -+ " ld 2,8(5) \n" -+ // AIX uses function descriptors, which means that -+ // pointers to functions do not point to code, but -+ // instead point to metadata about them, hence -+ // need to deterrence. -+ " ld 6,0(6) \n" -+#endif -+ // Pass 3rd parameter as sp (stack pointer). -+ " mr 5, 1 \n" -+#if !defined(_AIX) -+ // Set up r12 to be equal to the callee address (in order for TOC -+ // relocation). Only needed on LE Linux. -+ " mr 12, 6 \n" -+#endif -+ // Call the callback. -+ " mtctr 6 \n" -+ " bctrl \n" -+ // Discard all the registers. -+ " addi 1, 1, 256 \n" -+ // Restore lr. -+ " ld 0, 16(1) \n" -+ " mtlr 0 \n" -+#if defined(_AIX) -+ // Restore TOC pointer. -+ " ld 2, 40(1) \n" -+#else -+ " ld 2, 24(1) \n" -+#endif -+ " blr \n"); -diff --git a/src/heap/base/asm/ppc/save_registers_asm.cc b/src/heap/base/asm/ppc/save_registers_asm.cc -deleted file mode 100644 -index 9e8102a..0000000 ---- a/v8/src/heap/base/asm/ppc/save_registers_asm.cc -+++ /dev/null -@@ -1,113 +0,0 @@ --// Copyright 2020 the V8 project authors. All rights reserved. --// Use of this source code is governed by a BSD-style license that can be --// found in the LICENSE file. -- --#include -- --// Save all callee-saved registers in the specified buffer. --// extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- --// See asm/x64/save_registers_asm.cc for why the function is not generated --// using clang. --// --// Do not depend on V8_TARGET_OS_* defines as some embedders may override the --// GN toolchain (e.g. ChromeOS) and not provide them. --// --// PPC ABI source: --// http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html -- --// AIX Runtime process stack: --// https://www.ibm.com/support/knowledgecenter/ssw_aix_71/assembler/idalangref_runtime_process.html -- --#ifdef __PPC64__ -- --// 20 64-bit registers = 20 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 20, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 8, "Mismatch in word size"); -- --asm( --#if defined(_AIX) -- ".csect .text[PR] \n" -- ".align 2 \n" -- ".globl .SaveCalleeSavedRegisters, hidden \n" -- ".SaveCalleeSavedRegisters: \n" --#else -- ".text \n" -- ".align 2 \n" -- ".globl SaveCalleeSavedRegisters \n" -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" --#endif -- // r3: [ intptr_t* buffer ] -- // Save the callee-saved registers: lr, TOC pointer (r2), r14-r31. -- " mflr 0 \n" -- " std 0, 8(3) \n" -- " std 2, 16(3) \n" -- " std 14, 24(3) \n" -- " std 15, 32(3) \n" -- " std 16, 40(3) \n" -- " std 17, 48(3) \n" -- " std 18, 56(3) \n" -- " std 19, 64(3) \n" -- " std 20, 72(3) \n" -- " std 21, 80(3) \n" -- " std 22, 88(3) \n" -- " std 23, 96(3) \n" -- " std 24, 104(3) \n" -- " std 25, 112(3) \n" -- " std 26, 120(3) \n" -- " std 27, 128(3) \n" -- " std 28, 136(3) \n" -- " std 29, 144(3) \n" -- " std 30, 152(3) \n" -- " std 31, 160(3) \n" -- // Return. -- " blr \n"); -- --#else // !__PPC64__ -- --// 20 32-bit registers = 20 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 20, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 4, "Mismatch in word size"); -- --asm( --#if defined(_AIX) -- ".globl .SaveCalleeSavedRegisters, hidden \n" -- ".csect .text[PR] \n" -- ".SaveCalleeSavedRegisters: \n" --#else -- ".globl SaveCalleeSavedRegisters \n" -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" --#endif -- // r3: [ intptr_t* buffer ] -- // Save the callee-saved registers: lr, TOC pointer (r2), r14-r31. -- " mflr 0 \n" -- " st 0, 4(3) \n" -- " st 2, 8(3) \n" -- " st 14, 12(3) \n" -- " st 15, 16(3) \n" -- " st 16, 20(3) \n" -- " st 17, 24(3) \n" -- " st 18, 28(3) \n" -- " st 19, 32(3) \n" -- " st 20, 36(3) \n" -- " st 21, 40(3) \n" -- " st 22, 44(3) \n" -- " st 23, 48(3) \n" -- " st 24, 52(3) \n" -- " st 25, 56(3) \n" -- " st 26, 60(3) \n" -- " st 27, 64(3) \n" -- " st 28, 68(3) \n" -- " st 29, 72(3) \n" -- " st 30, 76(3) \n" -- " st 31, 80(3) \n" -- // Return. -- " blr \n"); -- --#endif // __PPC64__ -diff --git a/src/heap/base/asm/riscv/push_registers_asm.cc b/src/heap/base/asm/riscv/push_registers_asm.cc -new file mode 100644 -index 0000000..7cc13ea ---- /dev/null -+++ b/v8/src/heap/base/asm/riscv/push_registers_asm.cc -@@ -0,0 +1,93 @@ -+// Copyright 2020 the V8 project authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Push all callee-saved registers to get them on the stack for conservative -+// stack scanning. -+// -+// See asm/x64/push_registers_asm.cc for why the function is not generated -+// using clang. -+// -+// Calling convention source: -+// https://riscv.org/wp-content/uploads/2015/01/riscv-calling.pdf Table 18.2 -+#ifdef V8_TARGET_ARCH_RISCV64 -+asm(".global PushAllRegistersAndIterateStack \n" -+ ".type PushAllRegistersAndIterateStack, %function \n" -+ ".hidden PushAllRegistersAndIterateStack \n" -+ "PushAllRegistersAndIterateStack: \n" -+ // Push all callee-saved registers and save return address. -+ " addi sp, sp, -112 \n" -+ // Save return address. -+ " sd ra, 104(sp) \n" -+ // sp is callee-saved. -+ " sd sp, 96(sp) \n" -+ // s0-s11 are callee-saved. -+ " sd s11, 88(sp) \n" -+ " sd s10, 80(sp) \n" -+ " sd s9, 72(sp) \n" -+ " sd s8, 64(sp) \n" -+ " sd s7, 56(sp) \n" -+ " sd s6, 48(sp) \n" -+ " sd s5, 40(sp) \n" -+ " sd s4, 32(sp) \n" -+ " sd s3, 24(sp) \n" -+ " sd s2, 16(sp) \n" -+ " sd s1, 8(sp) \n" -+ " sd s0, 0(sp) \n" -+ // Maintain frame pointer(fp is s0). -+ " mv s0, sp \n" -+ // Pass 1st parameter (a0) unchanged (Stack*). -+ // Pass 2nd parameter (a1) unchanged (StackVisitor*). -+ // Save 3rd parameter (a2; IterateStackCallback) to a3. -+ " mv a3, a2 \n" -+ // Pass 3rd parameter as sp (stack pointer). -+ " mv a2, sp \n" -+ // Call the callback. -+ " jalr a3 \n" -+ // Load return address. -+ " ld ra, 104(sp) \n" -+ // Restore frame pointer. -+ " ld s0, 0(sp) \n" -+ " addi sp, sp, 112 \n" -+ " jr ra \n"); -+#elif V8_TARGET_ARCH_RISCV32 -+asm(".global PushAllRegistersAndIterateStack \n" -+ ".type PushAllRegistersAndIterateStack, %function \n" -+ ".hidden PushAllRegistersAndIterateStack \n" -+ "PushAllRegistersAndIterateStack: \n" -+ // Push all callee-saved registers and save return address. -+ " addi sp, sp, -56 \n" -+ // Save return address. -+ " sw ra, 52(sp) \n" -+ // sp is callee-saved. -+ " sw sp, 48(sp) \n" -+ // s0-s11 are callee-saved. -+ " sw s11, 44(sp) \n" -+ " sw s10, 40(sp) \n" -+ " sw s9, 36(sp) \n" -+ " sw s8, 32(sp) \n" -+ " sw s7, 28(sp) \n" -+ " sw s6, 24(sp) \n" -+ " sw s5, 20(sp) \n" -+ " sw s4, 16(sp) \n" -+ " sw s3, 12(sp) \n" -+ " sw s2, 8(sp) \n" -+ " sw s1, 4(sp) \n" -+ " sw s0, 0(sp) \n" -+ // Maintain frame pointer(fp is s0). -+ " mv s0, sp \n" -+ // Pass 1st parameter (a0) unchanged (Stack*). -+ // Pass 2nd parameter (a1) unchanged (StackVisitor*). -+ // Save 3rd parameter (a2; IterateStackCallback) to a3. -+ " mv a3, a2 \n" -+ // Pass 3rd parameter as sp (stack pointer). -+ " mv a2, sp \n" -+ // Call the callback. -+ " jalr a3 \n" -+ // Load return address. -+ " lw ra, 52(sp) \n" -+ // Restore frame pointer. -+ " lw s0, 0(sp) \n" -+ " addi sp, sp, 56 \n" -+ " jr ra \n"); -+#endif -diff --git a/src/heap/base/asm/riscv/save_registers_asm.cc b/src/heap/base/asm/riscv/save_registers_asm.cc -deleted file mode 100644 -index ad0bf98..0000000 ---- a/v8/src/heap/base/asm/riscv/save_registers_asm.cc -+++ /dev/null -@@ -1,68 +0,0 @@ --// Copyright 2020 the V8 project authors. All rights reserved. --// Use of this source code is governed by a BSD-style license that can be --// found in the LICENSE file. -- --#include -- --// Save all callee-saved registers in the specified buffer. --// extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- --// See asm/x64/save_registers_asm.cc for why the function is not generated --// using clang. --// --// Calling convention source: --// https://riscv.org/wp-content/uploads/2015/01/riscv-calling.pdf Table 18.2 -- --#if V8_HOST_ARCH_RISCV64 --// 12 64-bit registers = 12 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 12, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 8, "Mismatch in word size"); -- --asm(".global SaveCalleeSavedRegisters \n" -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" -- // a0: [ intptr_t* buffer ] -- // Save the callee-saved registers: s0-s11. -- " sd s11, 88(a0) \n" -- " sd s10, 80(a0) \n" -- " sd s9, 72(a0) \n" -- " sd s8, 64(a0) \n" -- " sd s7, 56(a0) \n" -- " sd s6, 48(a0) \n" -- " sd s5, 40(a0) \n" -- " sd s4, 32(a0) \n" -- " sd s3, 24(a0) \n" -- " sd s2, 16(a0) \n" -- " sd s1, 8(a0) \n" -- " sd s0, 0(a0) \n" -- // Return. -- " jr ra \n"); --#elif V8_HOST_ARCH_RISCV32 --// 12 32-bit registers = 12 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 12, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 4, "Mismatch in word size"); -- --asm(".global SaveCalleeSavedRegisters \n" -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" -- // a0: [ intptr_t* buffer ] -- // Save the callee-saved registers: s0-s11. -- " sw s11, 44(a0) \n" -- " sw s10, 40(a0) \n" -- " sw s9, 36(a0) \n" -- " sw s8, 32(a0) \n" -- " sw s7, 28(a0) \n" -- " sw s6, 24(a0) \n" -- " sw s5, 20(a0) \n" -- " sw s4, 16(a0) \n" -- " sw s3, 12(a0) \n" -- " sw s2, 8(a0) \n" -- " sw s1, 4(a0) \n" -- " sw s0, 0(a0) \n" -- // Return. -- " jr ra \n"); --#endif -diff --git a/src/heap/base/asm/s390/push_registers_asm.cc b/src/heap/base/asm/s390/push_registers_asm.cc -new file mode 100644 -index 0000000..ef954fa ---- /dev/null -+++ b/v8/src/heap/base/asm/s390/push_registers_asm.cc -@@ -0,0 +1,37 @@ -+// Copyright 2020 the V8 project authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Push all callee-saved registers to get them on the stack for conservative -+// stack scanning. -+ -+// See asm/x64/push_registers_clang.cc for why the function is not generated -+// using clang. -+ -+// Do not depend on V8_TARGET_OS_* defines as some embedders may override the -+// GN toolchain (e.g. ChromeOS) and not provide them. -+ -+// S390 ABI source: -+// http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_zSeries.html -+asm(".text \n" -+ ".align 8 \n" -+ ".globl PushAllRegistersAndIterateStack \n" -+ ".type PushAllRegistersAndIterateStack, %function \n" -+ ".hidden PushAllRegistersAndIterateStack \n" -+ "PushAllRegistersAndIterateStack: \n" -+ // Push all callee-saved registers. -+ // r6-r13, r14 and sp(r15) -+ " stmg %r6, %sp, 48(%sp) \n" -+ // Allocate frame. -+ " lay %sp, -160(%sp) \n" -+ // Pass 1st parameter (r2) unchanged (Stack*). -+ // Pass 2nd parameter (r3) unchanged (StackVisitor*). -+ // Save 3rd parameter (r4; IterateStackCallback). -+ " lgr %r5, %r4 \n" -+ // Pass sp as 3rd parameter. 160+48 to point -+ // to callee saved region stored above. -+ " lay %r4, 208(%sp) \n" -+ // Call the callback. -+ " basr %r14, %r5 \n" -+ " lmg %r14,%sp, 272(%sp) \n" -+ " br %r14 \n"); -diff --git a/src/heap/base/asm/s390/save_registers_asm.cc b/src/heap/base/asm/s390/save_registers_asm.cc -deleted file mode 100644 -index be92cc2..0000000 ---- a/v8/src/heap/base/asm/s390/save_registers_asm.cc -+++ /dev/null -@@ -1,34 +0,0 @@ --// Copyright 2020 the V8 project authors. All rights reserved. --// Use of this source code is governed by a BSD-style license that can be --// found in the LICENSE file. -- --#include -- --// Save all callee-saved registers in the specified buffer. --// extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- --// See asm/x64/save_registers_asm.cc for why the function is not generated --// using clang. --// --// Do not depend on V8_TARGET_OS_* defines as some embedders may override the --// GN toolchain (e.g. ChromeOS) and not provide them. -- --// S390 ABI source: --// http://refspecs.linuxbase.org/ELF/zSeries/lzsabi0_zSeries.html -- --// 10 64-bit registers = 10 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 10, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 8, "Mismatch in word size"); -- --asm(".text \n" -- ".align 8 \n" -- ".globl SaveCalleeSavedRegisters \n" -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" -- // r2: [ intptr_t* buffer ] -- // Save the callee-saved registers: r6-r13, r14 and sp(r15). -- " stmg %r6, %sp, 0(%r2) \n" -- // Return. -- " br %r14 \n"); -diff --git a/src/heap/base/asm/x64/push_registers_asm.cc b/src/heap/base/asm/x64/push_registers_asm.cc -new file mode 100644 -index 0000000..1781a58 ---- /dev/null -+++ b/v8/src/heap/base/asm/x64/push_registers_asm.cc -@@ -0,0 +1,106 @@ -+// Copyright 2020 the V8 project authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+// Push all callee-saved registers to get them on the stack for conservative -+// stack scanning. -+// -+// We cannot rely on clang generating the function and right symbol mangling -+// as `__attribute__((naked))` does not prevent clang from generating TSAN -+// function entry stubs (`__tsan_func_entry`). Even with -+// `__attribute__((no_sanitize_thread)` annotation clang generates the entry -+// stub. -+// See https://bugs.llvm.org/show_bug.cgi?id=45400. -+ -+// Do not depend on V8_TARGET_OS_* defines as some embedders may override the -+// GN toolchain (e.g. ChromeOS) and not provide them. -+// _WIN64 Defined as 1 when the compilation target is 64-bit ARM or x64. -+// Otherwise, undefined. -+#ifdef _WIN64 -+ -+// We maintain 16-byte alignment at calls. There is an 8-byte return address -+// on the stack and we push 232 bytes which maintains 16-byte stack alignment -+// at the call. -+// Source: https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention -+asm(".globl PushAllRegistersAndIterateStack \n" -+ "PushAllRegistersAndIterateStack: \n" -+ // rbp is callee-saved. Maintain proper frame pointer for debugging. -+ " push %rbp \n" -+ " mov %rsp, %rbp \n" -+ // Dummy for alignment. -+ " push $0xCDCDCD \n" -+ " push %rsi \n" -+ " push %rdi \n" -+ " push %rbx \n" -+ " push %r12 \n" -+ " push %r13 \n" -+ " push %r14 \n" -+ " push %r15 \n" -+ " sub $160, %rsp \n" -+ // Use aligned instrs as we are certain that the stack is properly aligned. -+ " movdqa %xmm6, 144(%rsp) \n" -+ " movdqa %xmm7, 128(%rsp) \n" -+ " movdqa %xmm8, 112(%rsp) \n" -+ " movdqa %xmm9, 96(%rsp) \n" -+ " movdqa %xmm10, 80(%rsp) \n" -+ " movdqa %xmm11, 64(%rsp) \n" -+ " movdqa %xmm12, 48(%rsp) \n" -+ " movdqa %xmm13, 32(%rsp) \n" -+ " movdqa %xmm14, 16(%rsp) \n" -+ " movdqa %xmm15, (%rsp) \n" -+ // Pass 1st parameter (rcx) unchanged (Stack*). -+ // Pass 2nd parameter (rdx) unchanged (StackVisitor*). -+ // Save 3rd parameter (r8; IterateStackCallback) -+ " mov %r8, %r9 \n" -+ // Pass 3rd parameter as rsp (stack pointer). -+ " mov %rsp, %r8 \n" -+ // Call the callback. -+ " call *%r9 \n" -+ // Pop the callee-saved registers. -+ " add $224, %rsp \n" -+ // Restore rbp as it was used as frame pointer. -+ " pop %rbp \n" -+ " ret \n"); -+ -+#else // !_WIN64 -+ -+// We maintain 16-byte alignment at calls. There is an 8-byte return address -+// on the stack and we push 56 bytes which maintains 16-byte stack alignment -+// at the call. -+// Source: https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-1.0.pdf -+asm( -+#ifdef __APPLE__ -+ ".globl _PushAllRegistersAndIterateStack \n" -+ ".private_extern _PushAllRegistersAndIterateStack \n" -+ "_PushAllRegistersAndIterateStack: \n" -+#else // !__APPLE__ -+ ".globl PushAllRegistersAndIterateStack \n" -+ ".type PushAllRegistersAndIterateStack, %function \n" -+ ".hidden PushAllRegistersAndIterateStack \n" -+ "PushAllRegistersAndIterateStack: \n" -+#endif // !__APPLE__ -+ // rbp is callee-saved. Maintain proper frame pointer for debugging. -+ " push %rbp \n" -+ " mov %rsp, %rbp \n" -+ // Dummy for alignment. -+ " push $0xCDCDCD \n" -+ " push %rbx \n" -+ " push %r12 \n" -+ " push %r13 \n" -+ " push %r14 \n" -+ " push %r15 \n" -+ // Pass 1st parameter (rdi) unchanged (Stack*). -+ // Pass 2nd parameter (rsi) unchanged (StackVisitor*). -+ // Save 3rd parameter (rdx; IterateStackCallback) -+ " mov %rdx, %r8 \n" -+ // Pass 3rd parameter as rsp (stack pointer). -+ " mov %rsp, %rdx \n" -+ // Call the callback. -+ " call *%r8 \n" -+ // Pop the callee-saved registers. -+ " add $48, %rsp \n" -+ // Restore rbp as it was used as frame pointer. -+ " pop %rbp \n" -+ " ret \n"); -+ -+#endif // !_WIN64 -diff --git a/src/heap/base/asm/x64/push_registers_masm.asm b/src/heap/base/asm/x64/push_registers_masm.asm -new file mode 100644 -index 0000000..a32e193 ---- /dev/null -+++ b/v8/src/heap/base/asm/x64/push_registers_masm.asm -@@ -0,0 +1,57 @@ -+;; Copyright 2020 the V8 project authors. All rights reserved. -+;; Use of this source code is governed by a BSD-style license that can be -+;; found in the LICENSE file. -+ -+;; MASM syntax -+;; https://docs.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference?view=vs-2019 -+ -+public PushAllRegistersAndIterateStack -+ -+.code -+PushAllRegistersAndIterateStack: -+ ;; Push all callee-saved registers to get them on the stack for conservative -+ ;; stack scanning. -+ ;; -+ ;; We maintain 16-byte alignment at calls. There is an 8-byte return address -+ ;; on the stack and we push 232 bytes which maintains 16-byte stack -+ ;; alignment at the call. -+ ;; Source: https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention -+ ;; -+ ;; rbp is callee-saved. Maintain proper frame pointer for debugging. -+ push rbp -+ mov rbp, rsp -+ push 0CDCDCDh ;; Dummy for alignment. -+ push rsi -+ push rdi -+ push rbx -+ push r12 -+ push r13 -+ push r14 -+ push r15 -+ sub rsp, 160 -+ ;; Use aligned instrs as we are certain that the stack is properly aligned. -+ movdqa xmmword ptr [rsp + 144], xmm6 -+ movdqa xmmword ptr [rsp + 128], xmm7 -+ movdqa xmmword ptr [rsp + 112], xmm8 -+ movdqa xmmword ptr [rsp + 96], xmm9 -+ movdqa xmmword ptr [rsp + 80], xmm10 -+ movdqa xmmword ptr [rsp + 64], xmm11 -+ movdqa xmmword ptr [rsp + 48], xmm12 -+ movdqa xmmword ptr [rsp + 32], xmm13 -+ movdqa xmmword ptr [rsp + 16], xmm14 -+ movdqa xmmword ptr [rsp], xmm15 -+ ;; Pass 1st parameter (rcx) unchanged (Stack*). -+ ;; Pass 2nd parameter (rdx) unchanged (StackVisitor*). -+ ;; Save 3rd parameter (r8; IterateStackCallback) -+ mov r9, r8 -+ ;; Pass 3rd parameter as rsp (stack pointer). -+ mov r8, rsp -+ ;; Call the callback. -+ call r9 -+ ;; Pop the callee-saved registers. -+ add rsp, 224 -+ ;; Restore rbp as it was used as frame pointer. -+ pop rbp -+ ret -+ -+end -diff --git a/src/heap/base/asm/x64/save_registers_asm.cc b/src/heap/base/asm/x64/save_registers_asm.cc -deleted file mode 100644 -index 855a654..0000000 ---- a/v8/src/heap/base/asm/x64/save_registers_asm.cc -+++ /dev/null -@@ -1,94 +0,0 @@ --// Copyright 2020 the V8 project authors. All rights reserved. --// Use of this source code is governed by a BSD-style license that can be --// found in the LICENSE file. -- --#include -- --// Save all callee-saved registers in the specified buffer. --// extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); --// --// We cannot rely on clang generating the function and right symbol mangling --// as `__attribute__((naked))` does not prevent clang from generating TSAN --// function entry stubs (`__tsan_func_entry`). Even with --// `__attribute__((no_sanitize_thread)` annotation clang generates the entry --// stub. --// See https://bugs.llvm.org/show_bug.cgi?id=45400. --// --// Do not depend on V8_TARGET_OS_* defines as some embedders may override the --// GN toolchain (e.g. ChromeOS) and not provide them. --// _WIN64 Defined as 1 when the compilation target is 64-bit ARM or x64. --// Otherwise, undefined. -- --#ifdef _WIN64 --// Source: https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention -- --// 7 64-bit registers + 1 for alignment purposes = 8 * 1 = 8 intprt_t --// 10 128-bit registers = 10 * 2 = 20 intptr_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 28, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 8, "Mismatch in word size"); -- --asm(".globl SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" -- // %rcx: [ intptr_t* buffer ] -- // %rbp is callee-saved. Maintain proper frame pointer for debugging. -- " push %rbp \n" -- " mov %rsp, %rbp \n" -- // Save the callee-saved registers. -- " mov %rsi, 0(%rcx) \n" -- " mov %rdi, 8(%rcx) \n" -- " mov %rbx, 16(%rcx) \n" -- " mov %r12, 24(%rcx) \n" -- " mov %r13, 32(%rcx) \n" -- " mov %r14, 40(%rcx) \n" -- " mov %r15, 48(%rcx) \n" -- // Skip one slot to achieve proper alignment and use aligned instructions, -- // as we are sure that the buffer is properly aligned. -- " movdqa %xmm6, 64(%rcx) \n" -- " movdqa %xmm7, 80(%rcx) \n" -- " movdqa %xmm8, 96(%rcx) \n" -- " movdqa %xmm9, 112(%rcx) \n" -- " movdqa %xmm10, 128(%rcx) \n" -- " movdqa %xmm11, 144(%rcx) \n" -- " movdqa %xmm12, 160(%rcx) \n" -- " movdqa %xmm13, 176(%rcx) \n" -- " movdqa %xmm14, 192(%rcx) \n" -- " movdqa %xmm15, 208(%rcx) \n" -- // Return. -- " pop %rbp \n" -- " ret \n"); -- --#else // !_WIN64 --// Source: https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-1.0.pdf -- --// 5 64-bit registers = 5 intprt_t --static_assert(heap::base::Stack::NumberOfCalleeSavedRegisters() == 5, -- "Mismatch in the number of callee-saved registers"); --static_assert(sizeof(intptr_t) == 8, "Mismatch in word size"); -- --asm( --#ifdef __APPLE__ -- ".globl _SaveCalleeSavedRegisters \n" -- ".private_extern _SaveCalleeSavedRegisters \n" -- "_SaveCalleeSavedRegisters: \n" --#else // !__APPLE__ -- ".globl SaveCalleeSavedRegisters \n" -- ".type SaveCalleeSavedRegisters, %function \n" -- ".hidden SaveCalleeSavedRegisters \n" -- "SaveCalleeSavedRegisters: \n" --#endif // !__APPLE__ -- // %rdi: [ intptr_t* buffer ] -- // %rbp is callee-saved. Maintain proper frame pointer for debugging. -- " push %rbp \n" -- " mov %rsp, %rbp \n" -- // Save the callee-saved registers. -- " mov %rbx, 0(%rdi) \n" -- " mov %r12, 8(%rdi) \n" -- " mov %r13, 16(%rdi) \n" -- " mov %r14, 24(%rdi) \n" -- " mov %r15, 32(%rdi) \n" -- // Restore %rbp as it was used as frame pointer and return. -- " pop %rbp \n" -- " ret \n"); -- --#endif // !_WIN64 -diff --git a/src/heap/base/asm/x64/save_registers_masm.asm b/src/heap/base/asm/x64/save_registers_masm.asm -deleted file mode 100644 -index 29946a4..0000000 ---- a/v8/src/heap/base/asm/x64/save_registers_masm.asm -+++ /dev/null -@@ -1,43 +0,0 @@ --;; Copyright 2020 the V8 project authors. All rights reserved. --;; Use of this source code is governed by a BSD-style license that can be --;; found in the LICENSE file. -- --;; MASM syntax --;; https://docs.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference?view=vs-2019 -- --public SaveCalleeSavedRegisters -- --.code -- ;; Save all callee-saved registers in the specified buffer. -- ;; extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -- --SaveCalleeSavedRegisters: -- ;; %rcx: [ intptr_t* buffer ] -- ;; %rbp is callee-saved. Maintain proper frame pointer for debugging. -- push rbp -- mov rbp, rsp -- ;; Save the callee-saved registers. -- mov qword ptr [rcx], rsi -- mov qword ptr [rcx + 8], rdi -- mov qword ptr [rcx + 16], rbx -- mov qword ptr [rcx + 24], r12 -- mov qword ptr [rcx + 32], r13 -- mov qword ptr [rcx + 40], r14 -- mov qword ptr [rcx + 48], r15 -- ;; Skip one slot to achieve proper alignment and use aligned instructions, -- ;; as we are sure that the buffer is properly aligned. -- movdqa xmmword ptr [rcx + 64], xmm6 -- movdqa xmmword ptr [rcx + 80], xmm7 -- movdqa xmmword ptr [rcx + 96], xmm8 -- movdqa xmmword ptr [rcx + 112], xmm9 -- movdqa xmmword ptr [rcx + 128], xmm10 -- movdqa xmmword ptr [rcx + 144], xmm11 -- movdqa xmmword ptr [rcx + 160], xmm12 -- movdqa xmmword ptr [rcx + 176], xmm13 -- movdqa xmmword ptr [rcx + 192], xmm14 -- movdqa xmmword ptr [rcx + 208], xmm15 -- ;; Restore %rbp as it was used as frame pointer and return. -- pop rbp -- ret -- --end -diff --git a/src/heap/base/stack.cc b/src/heap/base/stack.cc -index d8e618d..54a8697 100644 ---- a/v8/src/heap/base/stack.cc -+++ b/v8/src/heap/base/stack.cc -@@ -6,18 +6,21 @@ - - #include - -+#include "src/base/platform/platform.h" - #include "src/base/sanitizer/asan.h" - #include "src/base/sanitizer/msan.h" - #include "src/base/sanitizer/tsan.h" - - namespace heap::base { - --Stack::Stack(const void* stack_start) : stack_start_(stack_start) {} -- --void Stack::SetStackStart(const void* stack_start) { -- DCHECK(!context_); -- stack_start_ = stack_start; --} -+// Function with architecture-specific implementation: -+// Pushes all callee-saved registers to the stack and invokes the callback, -+// passing the supplied pointers (stack and argument) and the intended stack -+// marker. -+using IterateStackCallback = void (*)(const Stack*, StackVisitor*, const void*); -+extern "C" void PushAllRegistersAndIterateStack(const Stack* stack, -+ StackVisitor* visitor, -+ IterateStackCallback callback); - - bool Stack::IsOnStack(const void* slot) const { - DCHECK_NOT_NULL(stack_start_); -@@ -141,97 +144,62 @@ - - } // namespace - --void Stack::IteratePointers(StackVisitor* visitor) const { -- DCHECK_NOT_NULL(stack_start_); -- DCHECK(context_); -- DCHECK_NOT_NULL(context_->stack_marker); -- -+// static -+void Stack::IteratePointersImpl(const Stack* stack, StackVisitor* visitor, -+ const void* stack_end) { - #ifdef V8_USE_ADDRESS_SANITIZER - const void* asan_fake_stack = __asan_get_current_fake_stack(); - #else - const void* asan_fake_stack = nullptr; - #endif // V8_USE_ADDRESS_SANITIZER - -- // Iterate through the registers. -- for (intptr_t value : context_->registers) { -- const void* address = reinterpret_cast(value); -- MSAN_MEMORY_IS_INITIALIZED(&address, sizeof(address)); -- if (address == nullptr) continue; -- visitor->VisitPointer(address); -- IterateAsanFakeFrameIfNecessary(visitor, asan_fake_stack, stack_start_, -- context_->stack_marker, address); -- } -- - // Iterate through the stack. - // All supported platforms should have their stack aligned to at least - // sizeof(void*). - constexpr size_t kMinStackAlignment = sizeof(void*); -- CHECK_EQ(0u, reinterpret_cast(context_->stack_marker) & -- (kMinStackAlignment - 1)); -- IteratePointersInStack( -- visitor, reinterpret_cast(context_->stack_marker), -- stack_start_, asan_fake_stack); -+ CHECK_EQ(0u, -+ reinterpret_cast(stack_end) & (kMinStackAlignment - 1)); -+ IteratePointersInStack(visitor, -+ reinterpret_cast(stack_end), -+ stack->stack_start_, asan_fake_stack); - -- for (const auto& stack : inactive_stacks_) { -- IteratePointersInStack(visitor, stack.top, stack.start, asan_fake_stack); -+ for (const auto& segment : stack->inactive_stacks_) { -+ IteratePointersInStack(visitor, segment.top, segment.start, -+ asan_fake_stack); - } - - IterateUnsafeStackIfNecessary(visitor); - } - --namespace { --// Function with architecture-specific implementation: --// Saves all callee-saved registers in the specified buffer. --extern "C" void SaveCalleeSavedRegisters(intptr_t* buffer); -+void Stack::IteratePointers(StackVisitor* visitor) const { -+ // TODO(v8:13493): Remove the implication as soon as IsOnCurrentStack is -+ // compatible with stack switching. -+ DCHECK_IMPLIES(!wasm_stack_switching_, IsOnCurrentStack(stack_start_)); -+ PushAllRegistersAndIterateStack(this, visitor, &IteratePointersImpl); -+ // No need to deal with callee-saved registers as they will be kept alive by -+ // the regular conservative stack iteration. -+ // TODO(chromium:1056170): Add support for SIMD and/or filtering. -+ IterateUnsafeStackIfNecessary(visitor); -+} -+ -+void Stack::IteratePointersUnsafe(StackVisitor* visitor, -+ const void* stack_end) const { -+ DCHECK_NOT_NULL(stack_start_); -+ DCHECK_NOT_NULL(stack_end); -+ DCHECK_GE(stack_start_, stack_end); -+ IteratePointersImpl(this, visitor, stack_end); -+} - - #ifdef DEBUG -- --bool IsOnCurrentStack(const void* ptr) { -+// static -+bool Stack::IsOnCurrentStack(const void* ptr) { - DCHECK_NOT_NULL(ptr); - const void* current_stack_start = v8::base::Stack::GetStackStart(); - const void* current_stack_top = v8::base::Stack::GetCurrentStackPosition(); - return ptr <= current_stack_start && ptr >= current_stack_top; - } -- - #endif // DEBUG - --} // namespace -- --void Stack::SaveContext(bool check_invariant) { -- // TODO(v8:13493): Remove the method's parameter and the implication as soon -- // as IsOnCurrentStack is compatible with stack switching. -- DCHECK_IMPLIES(check_invariant, IsOnCurrentStack(stack_start_)); -- // Contexts can be nested but the marker and the registers are only saved on -- // the first invocation. -- if (context_) { -- ++context_->nesting_counter; -- return; -- } -- // Allocate the context and set the marker. -- const void* stack_top = v8::base::Stack::GetCurrentStackPosition(); -- DCHECK_NOT_NULL(stack_top); -- context_ = std::make_unique(stack_top); -- // TODO(v8:13493): Remove the implication as soon as IsValidMarker is -- // compatible with stack switching. -- DCHECK_IMPLIES(check_invariant, stack_top <= stack_start_); -- context_->stack_marker = stack_top; -- // Save the registers. -- SaveCalleeSavedRegisters(context_->registers.data()); --} -- --void Stack::ClearContext(bool check_invariant) { -- // TODO(v8:13493): Remove the method's parameter and the implication as soon -- // as IsOnCurrentStack is compatible with stack switching. -- DCHECK_IMPLIES(check_invariant, IsOnCurrentStack(stack_start_)); -- DCHECK(context_); -- // Skip clearing the context if that was a nested invocation. -- if (context_->nesting_counter > 0) { -- --context_->nesting_counter; -- return; -- } -- context_.reset(); --} -- - void Stack::AddStackSegment(const void* start, const void* top) { - DCHECK_LE(top, start); - inactive_stacks_.push_back({start, top}); -diff --git a/src/heap/base/stack.h b/src/heap/base/stack.h -index 06edf4c..4b0a14e 100644 ---- a/v8/src/heap/base/stack.h -+++ b/v8/src/heap/base/stack.h -@@ -5,10 +5,9 @@ - #ifndef V8_HEAP_BASE_STACK_H_ - #define V8_HEAP_BASE_STACK_H_ - --#include -+#include - - #include "src/base/macros.h" --#include "src/base/platform/platform.h" - - namespace heap::base { - -@@ -30,96 +29,54 @@ - // of relevant GC stack regions where interesting pointers can be found. - class V8_EXPORT_PRIVATE Stack final { - public: -- // The size of the buffer for storing the callee-saved registers is going to -- // be equal to kNumberOfCalleeSavedRegisters * sizeof(intptr_t). -- // This is architecture-specific. -- static constexpr int NumberOfCalleeSavedRegisters() { -- return Context::kNumberOfCalleeSavedRegisters; -- } -- -- explicit Stack(const void* stack_start = nullptr); -+ explicit Stack(const void* stack_start = nullptr, -+ bool wasm_stack_switching = false) -+ : stack_start_(stack_start), -+ wasm_stack_switching_(wasm_stack_switching) {} - - // Sets the start of the stack. -- void SetStackStart(const void* stack_start); -+ void SetStackStart(const void* stack_start, bool wasm_stack_switching) { -+ stack_start_ = stack_start; -+ wasm_stack_switching_ = wasm_stack_switching; -+ } - - // Returns true if |slot| is part of the stack and false otherwise. - bool IsOnStack(const void* slot) const; - -- // Word-aligned iteration of the stack and the saved registers. -- // Slot values are passed on to `visitor`. -+ // Word-aligned iteration of the stack. Callee-saved registers are pushed to -+ // the stack before iterating pointers. Slot values are passed on to -+ // `visitor`. - void IteratePointers(StackVisitor* visitor) const; - -- // Saves and clears the stack context, i.e., it sets the stack marker and -- // saves the registers. -- // TODO(v8:13493): The parameter is for suppressing the invariant check in -- // the case of WASM stack switching. It will be removed as soon as context -- // saving becomes compatible with stack switching. -- void SaveContext(bool check_invariant = true); -- void ClearContext(bool check_invariant = true); -+ // Word-aligned iteration of the stack, starting at `stack_end`. Slot values -+ // are passed on to `visitor`. This is intended to be used with verifiers that -+ // only visit a subset of the stack of IteratePointers(). -+ // -+ // **Ignores:** -+ // - Callee-saved registers. -+ // - SafeStack. -+ void IteratePointersUnsafe(StackVisitor* visitor, -+ const void* stack_end) const; - - void AddStackSegment(const void* start, const void* top); - void ClearStackSegments(); - - private: -- struct Context { -- // The following constant is architecture-specific. --#if V8_HOST_ARCH_IA32 -- // Must be consistent with heap/base/asm/ia32/. -- static constexpr int kNumberOfCalleeSavedRegisters = 3; --#elif V8_HOST_ARCH_X64 --#ifdef _WIN64 -- // Must be consistent with heap/base/asm/x64/. -- static constexpr int kNumberOfCalleeSavedRegisters = 28; --#else // !_WIN64 -- // Must be consistent with heap/base/asm/x64/. -- static constexpr int kNumberOfCalleeSavedRegisters = 5; --#endif // !_WIN64 --#elif V8_HOST_ARCH_ARM64 -- // Must be consistent with heap/base/asm/arm64/. -- static constexpr int kNumberOfCalleeSavedRegisters = 11; --#elif V8_HOST_ARCH_ARM -- // Must be consistent with heap/base/asm/arm/. -- static constexpr int kNumberOfCalleeSavedRegisters = 8; --#elif V8_HOST_ARCH_PPC64 -- // Must be consistent with heap/base/asm/ppc/. -- static constexpr int kNumberOfCalleeSavedRegisters = 20; --#elif V8_HOST_ARCH_PPC -- // Must be consistent with heap/base/asm/ppc/. -- static constexpr int kNumberOfCalleeSavedRegisters = 20; --#elif V8_HOST_ARCH_MIPS64 -- // Must be consistent with heap/base/asm/mips64el/. -- static constexpr int kNumberOfCalleeSavedRegisters = 9; --#elif V8_HOST_ARCH_LOONG64 -- // Must be consistent with heap/base/asm/loong64/. -- static constexpr int kNumberOfCalleeSavedRegisters = 11; --#elif V8_HOST_ARCH_S390 -- // Must be consistent with heap/base/asm/s390/. -- static constexpr int kNumberOfCalleeSavedRegisters = 10; --#elif V8_HOST_ARCH_RISCV32 -- // Must be consistent with heap/base/asm/riscv/. -- static constexpr int kNumberOfCalleeSavedRegisters = 12; --#elif V8_HOST_ARCH_RISCV64 -- // Must be consistent with heap/base/asm/riscv/. -- static constexpr int kNumberOfCalleeSavedRegisters = 12; --#else --#error Unknown architecture. -+#ifdef DEBUG -+ static bool IsOnCurrentStack(const void* ptr); - #endif - -- explicit Context(const void* marker) : stack_marker(marker) {} -- -- int nesting_counter = 0; -- const void* stack_marker; -- // We always double-align this buffer, to support for longer registers, -- // e.g., 128-bit registers in WIN64. -- alignas(2 * sizeof(intptr_t)) -- std::array registers; -- }; -+ static void IteratePointersImpl(const Stack* stack, StackVisitor* visitor, -+ const void* stack_end); - - const void* stack_start_; -- std::unique_ptr context_; - -- // Stack segments that may also contain pointers and should be -- // scanned. -+ // TODO(v8:13493): This is for suppressing the check that we are in the -+ // correct stack, in the case of WASM stack switching. It will be removed as -+ // soon as context saving becomes compatible with stack switching. -+ bool wasm_stack_switching_; -+ -+ // Stack segments that may also contain pointers and should be scanned. - struct StackSegments { - const void* start; - const void* top; -diff --git a/src/heap/cppgc-js/cpp-heap.cc b/src/heap/cppgc-js/cpp-heap.cc -index c27c612..63c5212 100644 ---- a/v8/src/heap/cppgc-js/cpp-heap.cc -+++ b/v8/src/heap/cppgc-js/cpp-heap.cc -@@ -16,6 +16,7 @@ - #include "src/base/logging.h" - #include "src/base/macros.h" - #include "src/base/optional.h" -+#include "src/base/platform/platform.h" - #include "src/base/platform/time.h" - #include "src/execution/isolate-inl.h" - #include "src/flags/flags.h" -@@ -839,7 +840,7 @@ - const size_t bytes_allocated_in_prefinalizers = ExecutePreFinalizers(); - #if CPPGC_VERIFY_HEAP - UnifiedHeapMarkingVerifier verifier(*this, *collection_type_); -- verifier.Run(stack_state_of_prev_gc(), -+ verifier.Run(stack_state_of_prev_gc(), stack_end_of_current_gc(), - stats_collector()->marked_bytes_on_current_cycle() + - bytes_allocated_in_prefinalizers); - #endif // CPPGC_VERIFY_HEAP -@@ -942,7 +943,7 @@ - // Finish sweeping in case it is still running. - sweeper().FinishIfRunning(); - -- SaveStackContextScope stack_context_scope(stack()); -+ SetStackEndOfCurrentGC(v8::base::Stack::GetCurrentStackPosition()); - - if (isolate_) { - reinterpret_cast(isolate_) -diff --git a/src/heap/cppgc/heap-base.h b/src/heap/cppgc/heap-base.h -index ac1dd3f..29a88b2 100644 ---- a/v8/src/heap/cppgc/heap-base.h -+++ b/v8/src/heap/cppgc/heap-base.h -@@ -183,6 +183,13 @@ - stack_state_of_prev_gc_ = stack_state; - } - -+ const void* stack_end_of_current_gc() const { -+ return stack_end_of_current_gc_; -+ } -+ void SetStackEndOfCurrentGC(const void* stack_end) { -+ stack_end_of_current_gc_ = stack_end; -+ } -+ - void SetInAtomicPauseForTesting(bool value) { in_atomic_pause_ = value; } - - virtual void StartIncrementalGarbageCollectionForTesting() = 0; -@@ -288,6 +295,10 @@ - EmbedderStackState::kNoHeapPointers; - std::unique_ptr override_stack_state_; - -+ // Marker that signals end of the interesting stack region in which on-heap -+ // pointers can be found. -+ const void* stack_end_of_current_gc_ = nullptr; -+ - bool in_atomic_pause_ = false; - - int creation_thread_id_ = v8::base::OS::GetCurrentThreadId(); -diff --git a/src/heap/cppgc/heap.cc b/src/heap/cppgc/heap.cc -index 7769412..28a11fc 100644 ---- a/v8/src/heap/cppgc/heap.cc -+++ b/v8/src/heap/cppgc/heap.cc -@@ -166,10 +166,9 @@ - DCHECK(!in_no_gc_scope()); - CHECK(!in_disallow_gc_scope()); - config_.stack_state = stack_state; -+ SetStackEndOfCurrentGC(v8::base::Stack::GetCurrentStackPosition()); - in_atomic_pause_ = true; - -- stack()->SaveContext(); -- - #if defined(CPPGC_YOUNG_GENERATION) - // Check if the young generation was enabled. We must enable young generation - // before calling the custom weak callbacks to make sure that the callbacks -@@ -188,7 +187,7 @@ - const size_t bytes_allocated_in_prefinalizers = ExecutePreFinalizers(); - #if CPPGC_VERIFY_HEAP - MarkingVerifier verifier(*this, config_.collection_type); -- verifier.Run(config_.stack_state, -+ verifier.Run(config_.stack_state, stack_end_of_current_gc(), - stats_collector()->marked_bytes_on_current_cycle() + - bytes_allocated_in_prefinalizers); - #endif // CPPGC_VERIFY_HEAP -@@ -197,8 +196,6 @@ - #endif - USE(bytes_allocated_in_prefinalizers); - -- stack()->ClearContext(); -- - #if defined(CPPGC_YOUNG_GENERATION) - ResetRememberedSet(); - #endif // defined(CPPGC_YOUNG_GENERATION) -diff --git a/src/heap/cppgc/marking-verifier.cc b/src/heap/cppgc/marking-verifier.cc -index 5508766..b7127c2 100644 ---- a/v8/src/heap/cppgc/marking-verifier.cc -+++ b/v8/src/heap/cppgc/marking-verifier.cc -@@ -45,7 +45,8 @@ - collection_type_(collection_type) {} - - void MarkingVerifierBase::Run( -- StackState stack_state, v8::base::Optional expected_marked_bytes) { -+ StackState stack_state, const void* stack_end, -+ v8::base::Optional expected_marked_bytes) { - Traverse(heap_.raw_heap()); - // Avoid verifying the stack when running with TSAN as the TSAN runtime changes - // stack contents when e.g. working with locks. Specifically, the marker uses -@@ -62,7 +63,7 @@ - #if !defined(THREAD_SANITIZER) && !defined(CPPGC_POINTER_COMPRESSION) - if (stack_state == StackState::kMayContainHeapPointers) { - in_construction_objects_ = &in_construction_objects_stack_; -- heap_.stack()->IteratePointers(this); -+ heap_.stack()->IteratePointersUnsafe(this, stack_end); - // The objects found through the unsafe iteration are only a subset of the - // regular iteration as they miss objects held alive only from callee-saved - // registers that are never pushed on the stack and SafeStack. -diff --git a/src/heap/cppgc/marking-verifier.h b/src/heap/cppgc/marking-verifier.h -index 5132b3a..5136f29 100644 ---- a/v8/src/heap/cppgc/marking-verifier.h -+++ b/v8/src/heap/cppgc/marking-verifier.h -@@ -41,7 +41,7 @@ - MarkingVerifierBase(const MarkingVerifierBase&) = delete; - MarkingVerifierBase& operator=(const MarkingVerifierBase&) = delete; - -- void Run(StackState, v8::base::Optional); -+ void Run(StackState, const void*, v8::base::Optional); - - protected: - MarkingVerifierBase(HeapBase&, CollectionType, VerificationState&, -diff --git a/src/heap/heap.cc b/src/heap/heap.cc -index 4994a3a..f4b7da0 100644 ---- a/v8/src/heap/heap.cc -+++ b/v8/src/heap/heap.cc -@@ -1685,7 +1685,22 @@ - DevToolsTraceEventScope devtools_trace_event_scope( - this, IsYoungGenerationCollector(collector) ? "MinorGC" : "MajorGC", - GarbageCollectionReasonToString(gc_reason)); -- SaveStackContextScope stack_context_scope(&stack()); -+ -+ if (cpp_heap()) { -+ if (collector == GarbageCollector::MARK_COMPACTOR || -+ (collector == GarbageCollector::MINOR_MARK_COMPACTOR && -+ CppHeap::From(cpp_heap())->generational_gc_supported())) { -+ // CppHeap needs a stack marker at the top of all entry points to allow -+ // deterministic passes over the stack. E.g., a verifier that should -+ // only find a subset of references of the marker. -+ // -+ // TODO(chromium:1056170): Consider adding a component that keeps track -+ // of relevant GC stack regions where interesting pointers can be found. -+ static_cast(cpp_heap()) -+ ->SetStackEndOfCurrentGC( -+ v8::base::Stack::GetCurrentStackPosition()); -+ } -+ } - - GarbageCollectionPrologue(gc_reason, gc_callback_flags); - { -@@ -2396,8 +2411,6 @@ - DCHECK(incremental_marking_->IsStopped()); - DCHECK_NOT_NULL(isolate()->global_safepoint()); - -- SaveStackContextScope stack_context_scope(&stack()); -- - isolate()->global_safepoint()->IterateClientIsolates([](Isolate* client) { - client->heap()->FreeSharedLinearAllocationAreas(); - -@@ -5809,7 +5822,12 @@ - } - - void Heap::SetStackStart(void* stack_start) { -- stack().SetStackStart(stack_start); -+#if V8_ENABLE_WEBASSEMBLY -+ stack().SetStackStart(stack_start, -+ v8_flags.experimental_wasm_stack_switching); -+#else -+ stack().SetStackStart(stack_start, false); -+#endif // V8_ENABLE_WEBASSEMBLY - } - - ::heap::base::Stack& Heap::stack() { -@@ -6391,8 +6409,7 @@ - filtering_(filtering), - filter_(nullptr), - space_iterator_(nullptr), -- object_iterator_(nullptr), -- stack_context_scope_(&heap->stack()) { -+ object_iterator_(nullptr) { - heap_->MakeHeapIterable(); - // Start the iteration. - space_iterator_ = new SpaceIterator(heap_); -@@ -7371,28 +7388,5 @@ - CppClassNamesAsHeapObjectNameScope::~CppClassNamesAsHeapObjectNameScope() = - default; - --SaveStackContextScope::SaveStackContextScope(::heap::base::Stack* stack) -- : stack_(stack) { --#if V8_ENABLE_WEBASSEMBLY -- // TODO(v8:13493): Do not check the stack context invariant if WASM stack -- // switching is enabled. This will be removed as soon as context saving -- // becomes compatible with stack switching. -- stack_->SaveContext(!v8_flags.experimental_wasm_stack_switching); --#else -- stack_->SaveContext(); --#endif // V8_ENABLE_WEBASSEMBLY --} -- --SaveStackContextScope::~SaveStackContextScope() { --#if V8_ENABLE_WEBASSEMBLY -- // TODO(v8:13493): Do not check the stack context invariant if WASM stack -- // switching is enabled. This will be removed as soon as context saving -- // becomes compatible with stack switching. -- stack_->ClearContext(!v8_flags.experimental_wasm_stack_switching); --#else -- stack_->ClearContext(); --#endif // V8_ENABLE_WEBASSEMBLY --} -- - } // namespace internal - } // namespace v8 -diff --git a/src/heap/heap.h b/src/heap/heap.h -index c93d89c..bc565ca 100644 ---- a/v8/src/heap/heap.h -+++ b/v8/src/heap/heap.h -@@ -2633,17 +2633,6 @@ - Heap* heap_; - }; - --// TODO(v8:13493): This class will move to src/heap/base/stack.h once its --// implementation no longer needs access to V8 flags. --class V8_EXPORT_PRIVATE V8_NODISCARD SaveStackContextScope { -- public: -- explicit SaveStackContextScope(::heap::base::Stack* stack); -- ~SaveStackContextScope(); -- -- protected: -- ::heap::base::Stack* stack_; --}; -- - class V8_NODISCARD DisableConservativeStackScanningScopeForTesting { - public: - explicit inline DisableConservativeStackScanningScopeForTesting(Heap* heap) -@@ -2695,7 +2684,6 @@ - SpaceIterator* space_iterator_; - // Object iterator for the space currently being iterated. - std::unique_ptr object_iterator_; -- SaveStackContextScope stack_context_scope_; - - DISALLOW_GARBAGE_COLLECTION(no_heap_allocation_) - }; -diff --git a/src/profiler/heap-snapshot-generator.cc b/src/profiler/heap-snapshot-generator.cc -index e076418..f0b3058 100644 ---- a/v8/src/profiler/heap-snapshot-generator.cc -+++ b/v8/src/profiler/heap-snapshot-generator.cc -@@ -2055,16 +2055,14 @@ - // its custom name to a generic builtin. - RootsReferencesExtractor extractor(this); - ReadOnlyRoots(heap_).Iterate(&extractor); -- { -- SaveStackContextScope scope(&heap_->stack()); -- heap_->IterateRoots(&extractor, base::EnumSet{SkipRoot::kWeak}); -- // TODO(v8:11800): The heap snapshot generator incorrectly considers the -- // weak string tables as strong retainers. Move IterateWeakRoots after -- // SetVisitingWeakRoots. -- heap_->IterateWeakRoots(&extractor, {}); -- extractor.SetVisitingWeakRoots(); -- heap_->IterateWeakGlobalHandles(&extractor); -- } -+ heap_->IterateRoots(&extractor, base::EnumSet{SkipRoot::kWeak}); -+ // TODO(v8:11800): The heap snapshot generator incorrectly considers the weak -+ // string tables as strong retainers. Move IterateWeakRoots after -+ // SetVisitingWeakRoots. -+ heap_->IterateWeakRoots(&extractor, {}); -+ extractor.SetVisitingWeakRoots(); -+ heap_->IterateWeakGlobalHandles(&extractor); -+ - bool interrupted = false; - - CombinedHeapObjectIterator iterator(heap_, diff --git a/chromium-111-v8-std-layout2.patch b/chromium-111-v8-std-layout2.patch deleted file mode 100644 index db983af..0000000 --- a/chromium-111-v8-std-layout2.patch +++ /dev/null @@ -1,198 +0,0 @@ -From 916641c08de44e0a915df223d55781c6c912717c Mon Sep 17 00:00:00 2001 -From: Nikolaos Papaspyrou -Date: Thu, 19 Jan 2023 13:43:10 +0100 -Subject: [PATCH] [heap] Move the Stack object from ThreadLocalTop to Isolate - -Stack information is thread-specific and, until now, it was stored in a -field in ThreadLocalTop. This CL moves stack information to the isolate -and makes sure to update the stack start whenever a main thread enters -the isolate. At the same time, the Stack object is refactored and -simplified. - -As a side effect, after removing the Stack object, ThreadLocalTop -satisfies the std::standard_layout trait; this fixes some issues -observed with different C++ compilers. - -Bug: v8:13630 -Bug: v8:13257 -Change-Id: I026a35af3bc6999a09b21f277756d4454c086343 - -(stripped tests) ---- - -diff --git a/src/execution/isolate.cc b/src/execution/isolate.cc -index 31536a1..22b8492 100644 ---- a/v8/src/execution/isolate.cc -+++ b/v8/src/execution/isolate.cc -@@ -3069,21 +3069,23 @@ - void Isolate::RecordStackSwitchForScanning() { - Object current = root(RootIndex::kActiveContinuation); - DCHECK(!current.IsUndefined()); -- thread_local_top()->stack_.ClearStackSegments(); -- wasm::StackMemory* stack = Managed::cast( -- WasmContinuationObject::cast(current).stack()) -- .get() -- .get(); -+ stack().ClearStackSegments(); -+ wasm::StackMemory* wasm_stack = -+ Managed::cast( -+ WasmContinuationObject::cast(current).stack()) -+ .get() -+ .get(); - current = WasmContinuationObject::cast(current).parent(); -- heap()->SetStackStart(reinterpret_cast(stack->base())); -+ heap()->SetStackStart(reinterpret_cast(wasm_stack->base())); - // We don't need to add all inactive stacks. Only the ones in the active chain - // may contain cpp heap pointers. - while (!current.IsUndefined()) { - auto cont = WasmContinuationObject::cast(current); -- auto* stack = Managed::cast(cont.stack()).get().get(); -- thread_local_top()->stack_.AddStackSegment( -- reinterpret_cast(stack->base()), -- reinterpret_cast(stack->jmpbuf()->sp)); -+ auto* wasm_stack = -+ Managed::cast(cont.stack()).get().get(); -+ stack().AddStackSegment( -+ reinterpret_cast(wasm_stack->base()), -+ reinterpret_cast(wasm_stack->jmpbuf()->sp)); - current = cont.parent(); - } - } -@@ -3371,23 +3373,13 @@ - Isolate* saved_isolate = isolate->TryGetCurrent(); - SetIsolateThreadLocals(isolate, nullptr); - isolate->set_thread_id(ThreadId::Current()); -- if (saved_isolate) { -- isolate->thread_local_top()->stack_ = -- std::move(saved_isolate->thread_local_top()->stack_); -- } else { -- isolate->heap()->SetStackStart(base::Stack::GetStackStart()); -- } -+ isolate->heap()->SetStackStart(base::Stack::GetStackStart()); - - bool owns_shared_isolate = isolate->owns_shared_isolate_; - Isolate* maybe_shared_isolate = isolate->shared_isolate_; - - isolate->Deinit(); - -- // Restore the saved isolate's stack. -- if (saved_isolate) -- saved_isolate->thread_local_top()->stack_ = -- std::move(isolate->thread_local_top()->stack_); -- - #ifdef DEBUG - non_disposed_isolates_--; - #endif // DEBUG -@@ -4652,6 +4644,10 @@ - void Isolate::Enter() { - Isolate* current_isolate = nullptr; - PerIsolateThreadData* current_data = CurrentPerIsolateThreadData(); -+ -+ // Set the stack start for the main thread that enters the isolate. -+ heap()->SetStackStart(base::Stack::GetStackStart()); -+ - if (current_data != nullptr) { - current_isolate = current_data->isolate_; - DCHECK_NOT_NULL(current_isolate); -diff --git a/src/execution/isolate.h b/src/execution/isolate.h -index afc3d0b..415e476 100644 ---- a/v8/src/execution/isolate.h -+++ b/v8/src/execution/isolate.h -@@ -32,6 +32,7 @@ - #include "src/execution/stack-guard.h" - #include "src/handles/handles.h" - #include "src/handles/traced-handles.h" -+#include "src/heap/base/stack.h" - #include "src/heap/factory.h" - #include "src/heap/heap.h" - #include "src/heap/read-only-heap.h" -@@ -2028,6 +2029,8 @@ - SimulatorData* simulator_data() { return simulator_data_; } - #endif - -+ ::heap::base::Stack& stack() { return stack_; } -+ - #ifdef V8_ENABLE_WEBASSEMBLY - wasm::StackMemory*& wasm_stacks() { return wasm_stacks_; } - // Update the thread local's Stack object so that it is aware of the new stack -@@ -2526,6 +2529,9 @@ - // The mutex only guards adding pages, the retrieval is signal safe. - base::Mutex code_pages_mutex_; - -+ // Stack information for the main thread. -+ ::heap::base::Stack stack_; -+ - #ifdef V8_ENABLE_WEBASSEMBLY - wasm::StackMemory* wasm_stacks_; - #endif -diff --git a/src/execution/thread-local-top.cc b/src/execution/thread-local-top.cc -index c115ae0..05cc20b 100644 ---- a/v8/src/execution/thread-local-top.cc -+++ b/v8/src/execution/thread-local-top.cc -@@ -37,7 +37,6 @@ - current_embedder_state_ = nullptr; - failed_access_check_callback_ = nullptr; - thread_in_wasm_flag_address_ = kNullAddress; -- stack_ = ::heap::base::Stack(); - } - - void ThreadLocalTop::Initialize(Isolate* isolate) { -@@ -45,12 +44,8 @@ - isolate_ = isolate; - thread_id_ = ThreadId::Current(); - #if V8_ENABLE_WEBASSEMBLY -- stack_.SetStackStart(base::Stack::GetStackStart(), -- v8_flags.experimental_wasm_stack_switching); - thread_in_wasm_flag_address_ = reinterpret_cast
( - trap_handler::GetThreadInWasmThreadLocalAddress()); --#else -- stack_.SetStackStart(base::Stack::GetStackStart(), false); - #endif // V8_ENABLE_WEBASSEMBLY - #ifdef USE_SIMULATOR - simulator_ = Simulator::current(isolate); -diff --git a/src/execution/thread-local-top.h b/src/execution/thread-local-top.h -index 43fec0a..989c817 100644 ---- a/v8/src/execution/thread-local-top.h -+++ b/v8/src/execution/thread-local-top.h -@@ -10,7 +10,6 @@ - #include "include/v8-unwinder.h" - #include "src/common/globals.h" - #include "src/execution/thread-id.h" --#include "src/heap/base/stack.h" - #include "src/objects/contexts.h" - #include "src/utils/utils.h" - -@@ -30,7 +29,7 @@ - // TODO(all): This is not particularly beautiful. We should probably - // refactor this to really consist of just Addresses and 32-bit - // integer fields. -- static constexpr uint32_t kSizeInBytes = 30 * kSystemPointerSize; -+ static constexpr uint32_t kSizeInBytes = 25 * kSystemPointerSize; - - // Does early low-level initialization that does not depend on the - // isolate being present. -@@ -147,9 +146,6 @@ - - // Address of the thread-local "thread in wasm" flag. - Address thread_in_wasm_flag_address_; -- -- // Stack information. -- ::heap::base::Stack stack_; - }; - - } // namespace internal -diff --git a/src/heap/heap.cc b/src/heap/heap.cc -index f4b7da0..6efd486 100644 ---- a/v8/src/heap/heap.cc -+++ b/v8/src/heap/heap.cc -@@ -5830,9 +5830,7 @@ - #endif // V8_ENABLE_WEBASSEMBLY - } - --::heap::base::Stack& Heap::stack() { -- return isolate_->thread_local_top()->stack_; --} -+::heap::base::Stack& Heap::stack() { return isolate_->stack(); } - - void Heap::StartTearDown() { - // Finish any ongoing sweeping to avoid stray background tasks still accessing diff --git a/chromium-94.0.4606.71-InkDropHost-crash.patch b/chromium-94.0.4606.71-InkDropHost-crash.patch deleted file mode 100644 index b5e2794..0000000 --- a/chromium-94.0.4606.71-InkDropHost-crash.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -up chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h.InkDropHost-crash chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h ---- chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h.InkDropHost-crash 2021-10-05 16:04:46.313586509 -0400 -+++ chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h 2021-10-05 16:05:12.213732558 -0400 -@@ -228,6 +228,11 @@ class VIEWS_EXPORT InkDropHost { - // Used to observe View and inform the InkDrop of host-transform changes. - ViewLayerTransformObserver host_view_transform_observer_; - -+ // Declared before |ink_drop_|, because InkDropImpl may call -+ // RemoveInkDropLayer on partly destructed InkDropHost. In -+ // that case |ink_drop_mask_| must be still valid. -+ std::unique_ptr ink_drop_mask_; -+ - // Should not be accessed directly. Use GetInkDrop() instead. - std::unique_ptr ink_drop_; - -@@ -249,8 +254,6 @@ class VIEWS_EXPORT InkDropHost { - int ink_drop_small_corner_radius_ = 2; - int ink_drop_large_corner_radius_ = 4; - -- std::unique_ptr ink_drop_mask_; -- - base::RepeatingCallback()> create_ink_drop_callback_; - base::RepeatingCallback()> - create_ink_drop_ripple_callback_; diff --git a/chromium-v4l2-fix.patch b/chromium-v4l2-fix.patch deleted file mode 100644 index 1ae7530..0000000 --- a/chromium-v4l2-fix.patch +++ /dev/null @@ -1,137 +0,0 @@ -commit e775ac4770bb1e5dfbfe22c5b56752ed4a2317c5 -Author: Hirokazu Honda -Date: Tue Jan 17 17:54:02 2023 +0000 - - Revert "media/gpu/v4l2VEA,IP: Workaround to USERPTR API against read-only buf" - - This reverts commit 203fdd03a4317f2eac57161ee101515a82df704f. - - Reason for revert: This workaround is no longer required because of - the kernel patch was reverted. - - Original change's description: - > media/gpu/v4l2VEA,IP: Workaround to USERPTR API against read-only buf - > - > VideoFrame fed in VEA::Encode() is read-only since R107 if the - > VideoFrame has a shared memory. V4L2VideoEncodeAccelerator fails - > because VIDOC_QBUF with USERPTR buffer fails if the pointers - > references a read-only buffer. - > The USERPTR API issue is apparently to be fixed by a kernel side. - > In the meantime, this CL adds the workaround to the issue; the read - > only buffer is copied to a writable temporary buffer every Encode - > before VIDIOC_QBUF. - > Not that VideoFrame has a shared memory in the case of screen share - > because a camera stack produces GpuMemoryBuffer. - > - > Bug: b:243883312 - > Test: video_encode_accelerator_tests on elm, kevin and trogdor - > Test: screen share in Google Meet on elm, kevin and trogdor - > Change-Id: I922d98eaf52f80d9cd6c3784a8544bffb1232856 - > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3891421 - > Reviewed-by: Nathan Hebert - > Commit-Queue: Hirokazu Honda - > Cr-Commit-Position: refs/heads/main@{#1046659} - - Bug: b:243883312, b:261660224 - Change-Id: I6fe37276f2ebe8c8730cfd3dd766b04277b32a67 - Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4091205 - Reviewed-by: Nathan Hebert - Commit-Queue: Hirokazu Honda - Cr-Commit-Position: refs/heads/main@{#1093388} - -diff --git a/media/gpu/v4l2/v4l2_image_processor_backend.cc b/media/gpu/v4l2/v4l2_image_processor_backend.cc -index dc72a4ac060a9..f3049f4546e2e 100644 ---- a/media/gpu/v4l2/v4l2_image_processor_backend.cc -+++ b/media/gpu/v4l2/v4l2_image_processor_backend.cc -@@ -925,35 +925,16 @@ bool V4L2ImageProcessorBackend::EnqueueInputRecord( - - switch (input_memory_type_) { - case V4L2_MEMORY_USERPTR: { -- VideoFrame& frame = *job_record->input_frame; - const size_t num_planes = V4L2Device::GetNumPlanesOfV4L2PixFmt( - input_config_.fourcc.ToV4L2PixFmt()); - std::vector user_ptrs(num_planes); -- if (frame.storage_type() == VideoFrame::STORAGE_SHMEM) { -- // TODO(b/243883312): This copies the video frame to a writable buffer -- // since the USERPTR API requires writable permission. Remove this -- // workaround once the unreasonable permission is fixed. -- const size_t buffer_size = frame.shm_region()->GetSize(); -- std::vector writable_buffer(buffer_size); -- std::memcpy(writable_buffer.data(), frame.data(0), buffer_size); -- for (size_t i = 0; i < num_planes; ++i) { -- const std::intptr_t plane_offset = -- reinterpret_cast(frame.data(i)) - -- reinterpret_cast(frame.data(0)); -- user_ptrs[i] = writable_buffer.data() + plane_offset; -- } -- job_record->input_frame->AddDestructionObserver(base::BindOnce( -- [](std::vector) {}, std::move(writable_buffer))); -- } else { -- for (size_t i = 0; i < num_planes; ++i) -- user_ptrs[i] = frame.writable_data(i); -- } -- - for (size_t i = 0; i < num_planes; ++i) { - int bytes_used = -- VideoFrame::PlaneSize(frame.format(), i, input_config_.size) -+ VideoFrame::PlaneSize(job_record->input_frame->format(), i, -+ input_config_.size) - .GetArea(); - buffer.SetPlaneBytesUsed(i, bytes_used); -+ user_ptrs[i] = const_cast(job_record->input_frame->data(i)); - } - if (!std::move(buffer).QueueUserPtr(user_ptrs)) { - VPLOGF(1) << "Failed to queue a DMABUF buffer to input queue"; -diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc -index 56389ea3eec08..d452ba48a69e2 100644 ---- a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc -+++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc -@@ -783,7 +783,7 @@ void V4L2VideoEncodeAccelerator::EncodeTask(scoped_refptr frame, - const bool is_expected_storage_type = - native_input_mode_ - ? frame->storage_type() == VideoFrame::STORAGE_GPU_MEMORY_BUFFER -- : frame->storage_type() == VideoFrame::STORAGE_SHMEM; -+ : frame->IsMappable(); - if (!is_expected_storage_type) { - VLOGF(1) << "Unexpected storage: " - << VideoFrame::StorageTypeToString(frame->storage_type()); -@@ -1392,27 +1392,16 @@ bool V4L2VideoEncodeAccelerator::EnqueueInputRecord( - NOTIFY_ERROR(kPlatformFailureError); - } - -- // TODO(b/243883312): This copies the video frame to a writable buffer -- // since the USERPTR API requires writable permission. Remove this -- // workaround once the unreasonable permission is fixed. -- const size_t buffer_size = frame->shm_region()->GetSize(); -- std::vector writable_buffer(buffer_size); -- std::memcpy(writable_buffer.data(), frame->data(0), buffer_size); -+ // The frame data is readable only and the driver doesn't actually write -+ // the buffer. But USRPTR buffer needs void*. So const_cast<> is required. - std::vector user_ptrs(num_planes); - for (size_t i = 0; i < num_planes; ++i) { -- const std::intptr_t plane_offset = -- reinterpret_cast(frame->data(i)) - -- reinterpret_cast(frame->data(0)); -- user_ptrs[i] = writable_buffer.data() + plane_offset; -+ user_ptrs[i] = const_cast(frame->data(i)); - } -- - if (!std::move(input_buf).QueueUserPtr(std::move(user_ptrs))) { -- VPLOGF(1) << "Failed to queue a USRPTR buffer to input queue"; -- NOTIFY_ERROR(kPlatformFailureError); -+ VPLOGF(1) << "Failed queue a USRPTR buffer to input queue"; - return false; - } -- frame->AddDestructionObserver( -- base::DoNothingWithBoundArgs(std::move(writable_buffer))); - break; - } - case V4L2_MEMORY_DMABUF: { -@@ -1421,6 +1410,7 @@ bool V4L2VideoEncodeAccelerator::EnqueueInputRecord( - VPLOGF(1) << "Failed queue a DMABUF buffer to input queue"; - return false; - } -+ - // Keep |gmb_handle| alive as long as |frame| is alive so that fds passed - // to the driver are valid during encoding. - frame->AddDestructionObserver(base::BindOnce( diff --git a/chromium.spec b/chromium.spec index 8c8cd9b..81a6c64 100644 --- a/chromium.spec +++ b/chromium.spec @@ -190,8 +190,6 @@ %global bundlelibwebp 0 %global bundlelibpng 0 %global bundlelibjpeg 0 -# Needs FT_ClipBox which was implemented after 2.11.0. Should be able to set this back to 0 later. -%global bundlefreetype 1 %global bundlelibdrm 0 %global bundlefontconfig 0 %global bundleffmpegfree 0 @@ -201,6 +199,12 @@ %else %global bundlelibaom 0 %endif +# system freetype on fedora > 36 +%if 0%{?fedora} > 36 +%global bundlefreetype 0 +%else +%global bundlefreetype 1 +%endif %endif ### From 2013 until early 2021, Google permitted distribution builds of @@ -237,7 +241,7 @@ %endif Name: chromium%{chromium_channel} -Version: 110.0.5481.177 +Version: 111.0.5563.50 Release: 1%{?dist} Summary: A WebKit (Blink) powered web browser that Google doesn't want you to use Url: http://www.chromium.org/Home @@ -274,9 +278,6 @@ Patch11: chromium-93.0.4577.63-py3-bootstrap.patch # Add "Fedora" to the user agent string Patch12: chromium-101.0.4951.41-fedora-user-agent.patch -# numeric_limits is not a member of std -Patch13: chromium-110-limits.patch - # debian patch, disable font-test Patch20: chromium-disable-font-tests.patch @@ -292,9 +293,6 @@ Patch57: chromium-96.0.4664.45-missing-cstring.patch # Fix headers to look for system paths when we are using system minizip Patch61: chromium-109-system-minizip-header-fix.patch -# Update bundled copy of wayland-client-core.h -Patch62: chromium-105.0.5195.52-update-wayland-client-core.patch - # Fix issue where closure_compiler thinks java is only allowed in android builds # https://bugs.chromium.org/p/chromium/issues/detail?id=1192875 Patch65: chromium-91.0.4472.77-java-only-allowed-in-android-builds.patch @@ -321,9 +319,6 @@ Patch91: chromium-108-system-opus.patch # fix prefers-color-scheme Patch92: chromium-110-gtktheme.patch -# From gentoo -Patch98: chromium-94.0.4606.71-InkDropHost-crash.patch - # need to explicitly include a kernel header on EL7 to support MFD_CLOEXEC, F_SEAL_SHRINK, F_ADD_SEALS, F_SEAL_SEAL Patch100: chromium-108-el7-include-fcntl-memfd.patch @@ -369,21 +364,6 @@ Patch122: chromium-109-gcc13.patch # Patches by Stephan Hartmann, https://github.com/stha09/chromium-patches Patch130: chromium-103-VirtualCursor-std-layout.patch -Patch131: chromium-110-CanvasResourceProvider-pragma.patch -Patch132: chromium-110-CredentialUIEntry-const.patch -Patch133: chromium-110-DarkModeLABColorSpace-pow.patch -Patch134: chromium-110-dpf-arm64.patch -Patch135: chromium-110-InProgressDownloadManager-include.patch -Patch136: chromium-110-kCustomizeChromeColors-type.patch -Patch137: chromium-110-NativeThemeBase-fabs.patch -Patch138: chromium-110-Presenter-include.patch -Patch139: chromium-110-raw_ptr-constexpr.patch -Patch140: chromium-110-StorageQueue-decltype.patch -Patch141: chromium-110-SyncIterator-template.patch -Patch142: chromium-110-url_canon_internal-cast.patch -Patch143: chromium-110-v8-gcc.patch -Patch144: chromium-111-v8-std-layout1.patch -Patch145: chromium-111-v8-std-layout2.patch # VAAPI # Upstream turned VAAPI on in Linux in 86 @@ -391,10 +371,6 @@ Patch202: chromium-104.0.5112.101-enable-hardware-accelerated-mjpeg.patch Patch205: chromium-86.0.4240.75-fix-vaapi-on-intel.patch Patch206: chromium-110-ozone-wayland-vaapi-support.patch -# V4L2 -# Upstream -Patch250: chromium-v4l2-fix.patch - # Apply these patches to work around EPEL8 issues Patch300: chromium-99.0.4844.51-rhel8-force-disable-use_gnome_keyring.patch @@ -907,8 +883,8 @@ without support for alsa, cups, dbus, gconf, gio, kerberos, pulseaudio, or udev. %prep - %setup -q -n chromium-%{version} + ### Chromium Fedora Patches ### %patch0 -p1 -b .sandboxpie %patch1 -p1 -b .etc @@ -920,13 +896,6 @@ udev. %patch9 -p1 -b .widevine-no-download %patch11 -p1 -b .py3 -# Fedora branded user agent -%if 0%{?fedora} -%patch12 -p1 -b .fedora-user-agent -%endif - -%patch13 -p1 -b .limits - %patch20 -p1 -b .disable-font-test %if 0%{?fedora} || 0%{?rhel} >= 8 @@ -957,7 +926,10 @@ udev. %patch92 -p1 -b .gtk-prefers-color-scheme -%patch98 -p1 -b .InkDropHost-crash +# Fedora branded user agent +%if 0%{?fedora} +%patch12 -p1 -b .fedora-user-agent +%endif %if ! %{bundleffmpegfree} %patch114 -p1 -b .system-ffmppeg @@ -984,21 +956,6 @@ udev. %endif %patch130 -p1 -b .VirtualCursor-std-layout -%patch131 -p1 -b .CanvasResourceProvider-pragma -%patch132 -p1 -b .CredentialUIEntry-const -%patch133 -p1 -b .DarkModeLABColorSpace-pow -%patch134 -p1 -b .dpf-arm64 -%patch135 -p1 -b .InProgressDownloadManager-include -%patch136 -p1 -b .kCustomizeChromeColors-type -%patch137 -p1 -b .NativeThemeBase-fabs -%patch138 -p1 -b .Presenter-include -%patch139 -p1 -b .raw_ptr-constexpr -%patch140 -p1 -b .StorageQueue-decltype -%patch141 -p1 -b .SyncIterator-template -%patch142 -p1 -b .url_canon_internal-cast -%patch143 -p1 -b .v8-gcc -%patch144 -p1 -b .v8-std-layout1 -%patch145 -p1 -b .v8-std-layout2 %if %{use_qt} %patch121 -p1 -b .enable-allowqt @@ -1013,10 +970,6 @@ udev. %patch206 -p1 -b .wayland-vaapi %endif -%if %{use_v4l2_codec} -%patch250 -p1 -b .v4l2-fix -%endif - %if 0%{?rhel} >= 8 %patch300 -p1 -b .disblegnomekeyring %endif @@ -1180,12 +1133,6 @@ CHROMIUM_CORE_GN_DEFINES+=' enable_vr=false' CHROMIUM_CORE_GN_DEFINES+=' build_dawn_tests=false enable_perfetto_unittests=false' CHROMIUM_CORE_GN_DEFINES+=' disable_fieldtrial_testing_config=true' CHROMIUM_CORE_GN_DEFINES+=' blink_symbol_level=0 symbol_level=0 v8_symbol_level=0' -%ifarch aarch64 -%if 0%{?rhel} == 8 -# workaround crash on el8 -CHROMIUM_CORE_GN_DEFINES+=' use_partition_alloc_as_malloc=false enable_backup_ref_ptr_support=false' -%endif -%endif export CHROMIUM_CORE_GN_DEFINES # browser gn defines @@ -1593,11 +1540,11 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt %{chromium_path}/libclearkeycdm.so %endif %ifarch x86_64 aarch64 -%{chromium_path}/libEGL.so* -%{chromium_path}/libGLESv2.so* %{chromium_path}/libvk_swiftshader.so* %{chromium_path}/libvulkan.so* %{chromium_path}/vk_swiftshader_icd.json +%{chromium_path}/libEGL.so* +%{chromium_path}/libGLESv2.so* %endif %{chromium_path}/icudtl.dat %dir %{chromium_path}/ @@ -1699,6 +1646,10 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt %{chromium_path}/chromedriver %changelog +* Mon Mar 06 2023 Than Ngo - 111.0.5563.50-1 +- update to 111.0.5563.50 +- system freetype on fedora > 36 + * Thu Feb 23 2023 Than Ngo - 110.0.5481.177-1 - update to 110.0.5481.177 - workaround for crash on aarch64, rhel8 diff --git a/sources b/sources index 9aca39c..7f2d4f8 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (node-v16.17.0-linux-x64.tar.xz) = aedfeeb71420a7fbcb07fbc4c5d2ba74ffe4f88c15998809346a84148132ec866dbae4e848531a2a77ca41413f442e1046f981d4f188bdf667faf88069aa28cd SHA512 (node-v16.17.0-linux-arm64.tar.xz) = ae4aabc2389779c9e1b4a15622cae3ba50e0c313ca3d7a1dc7b2344df06ade1f303d6a75b941d37e2a0ef368cf047c862a822a893684494f55446afd6ab0610e -SHA512 (chromium-110.0.5481.177-clean.tar.xz) = 3cc3fe325bf773e5da9137272741eda61ca620289a27c1bc16cd3e165f5adc6ebaa00139351c324fcc491497e47659188673edd9b7fd33a2771636d153b69213 +SHA512 (chromium-111.0.5563.50-clean.tar.xz) = 4576e080a55cc1dabf65e14d5380310ee93bfe50e40823adb963bf47d3bbe668b39ef41c3f5e7b8c2aebc8161915926a2f6b37c39cc0289898e515e600743e3c