diff --git a/chromium-107.0.5304.110-remoting-extra-qualification.patch b/chromium-107.0.5304.110-remoting-extra-qualification.patch deleted file mode 100644 index 9b9ce184..00000000 --- a/chromium-107.0.5304.110-remoting-extra-qualification.patch +++ /dev/null @@ -1,237 +0,0 @@ -diff -up chromium-107.0.5304.110/remoting/host/mojom/remoting_mojom_traits.h.remoting-extra-qualification chromium-107.0.5304.110/remoting/host/mojom/remoting_mojom_traits.h ---- chromium-107.0.5304.110/remoting/host/mojom/remoting_mojom_traits.h.remoting-extra-qualification 2022-11-20 19:56:00.897740616 +0100 -+++ chromium-107.0.5304.110/remoting/host/mojom/remoting_mojom_traits.h 2022-11-21 09:21:47.967180137 +0100 -@@ -42,7 +42,7 @@ - namespace mojo { - - template <> --class mojo::StructTraits { -+class StructTraits { - public: - static bool value(bool value) { return value; } - -@@ -53,7 +53,7 @@ class mojo::StructTraits --class mojo::StructTraits { -+class StructTraits { - public: - static float value(float value) { return value; } - -@@ -64,7 +64,7 @@ class mojo::StructTraits --class mojo::StructTraits { -+class StructTraits { - public: - static int32_t value(int32_t value) { return value; } - -@@ -76,7 +76,7 @@ class mojo::StructTraits --class mojo::StructTraits { -+class StructTraits { - public: - static uint32_t value(uint32_t value) { return value; } - -@@ -88,7 +88,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static bool use_update_notifications( -@@ -113,7 +113,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static bool enable_curtaining( -@@ -210,7 +210,7 @@ struct EnumTraits --class mojo::StructTraits { - public: - static int32_t left(const ::webrtc::DesktopRect& rect) { return rect.left(); } -@@ -230,7 +230,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static int32_t width(const ::webrtc::DesktopSize& size) { -@@ -246,7 +246,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static int32_t x(const ::webrtc::DesktopVector& vector) { return vector.x(); } -@@ -258,7 +258,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static const webrtc::DesktopSize& image_size( -@@ -511,7 +511,7 @@ struct EnumTraits --class mojo::StructTraits> { - public: - static int32_t timestamp( -@@ -549,7 +549,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static const std::string& mime_type( -@@ -567,7 +567,7 @@ class mojo::StructTraits --class mojo::UnionTraits< -+class UnionTraits< - remoting::mojom::ReadChunkResultDataView, - ::remoting::Result, - ::remoting::protocol::FileTransfer_Error>> { -@@ -606,7 +606,7 @@ class mojo::UnionTraits< - }; - - template <> --class mojo::StructTraits { - public: - static ::remoting::protocol::FileTransfer_Error_Type type( -@@ -745,7 +745,7 @@ class mojo::UnionTraits< - #endif // BUILDFLAG(IS_WIN) - - template <> --class mojo::StructTraits { - public: - static const ::google::protobuf:: -@@ -759,7 +759,7 @@ class mojo::StructTraits --class mojo::UnionTraits { - public: - static remoting::mojom::KeyActionDataView::Tag GetTag( -@@ -792,7 +792,7 @@ class mojo::UnionTraits --class mojo::StructTraits { - public: - static const ::google::protobuf::Map< -@@ -1150,7 +1150,7 @@ struct EnumTraits --class mojo::StructTraits { - public: - static bool pressed(const ::remoting::protocol::KeyEvent& event) { -@@ -1186,7 +1186,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static absl::optional x( -@@ -1275,7 +1275,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static const ::webrtc::DesktopSize& dimensions( -@@ -1293,7 +1293,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static const std::string& text(const ::remoting::protocol::TextEvent& event) { -@@ -1305,7 +1305,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static uint32_t id(const ::remoting::protocol::TouchEventPoint& event) { -@@ -1382,7 +1382,7 @@ struct EnumTraits --class mojo::StructTraits { - public: - static ::remoting::protocol::TouchEvent::TouchEventType event_type( -@@ -1442,7 +1442,7 @@ struct EnumTraits --class mojo::StructTraits { - public: - static ::remoting::protocol::TransportRoute::RouteType type( -@@ -1589,7 +1589,7 @@ struct EnumTraits --class mojo::StructTraits { - public: - static const ::google::protobuf::RepeatedPtrField< -@@ -1608,7 +1608,7 @@ class mojo::StructTraits --class mojo::StructTraits { - public: - static int64_t screen_id( diff --git a/chromium-108-enable-WebRTCPipeWireCapturer-byDefault.patch b/chromium-108-enable-WebRTCPipeWireCapturer-byDefault.patch deleted file mode 100644 index a8bad1b9..00000000 --- a/chromium-108-enable-WebRTCPipeWireCapturer-byDefault.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up chromium-108.0.5359.124/content/public/common/content_features.cc.me chromium-108.0.5359.124/content/public/common/content_features.cc ---- chromium-108.0.5359.124/content/public/common/content_features.cc.me 2022-12-24 11:02:56.417773922 +0100 -+++ chromium-108.0.5359.124/content/public/common/content_features.cc 2022-12-24 11:04:41.641696681 +0100 -@@ -1479,7 +1479,7 @@ BASE_FEATURE(kRetryGetVideoCaptureDevice - // Wayland display server. - BASE_FEATURE(kWebRtcPipeWireCapturer, - "WebRTCPipeWireCapturer", -- base::FEATURE_DISABLED_BY_DEFAULT); -+ base::FEATURE_ENABLED_BY_DEFAULT); - #endif // defined(WEBRTC_USE_PIPEWIRE) - - enum class VideoCaptureServiceConfiguration { diff --git a/chromium-110-CanvasResourceProvider-pragma.patch b/chromium-110-CanvasResourceProvider-pragma.patch new file mode 100644 index 00000000..5732e49e --- /dev/null +++ b/chromium-110-CanvasResourceProvider-pragma.patch @@ -0,0 +1,41 @@ +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 new file mode 100644 index 00000000..eb68aa27 --- /dev/null +++ b/chromium-110-CredentialUIEntry-const.patch @@ -0,0 +1,41 @@ +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 new file mode 100644 index 00000000..91f1aee0 --- /dev/null +++ b/chromium-110-DarkModeLABColorSpace-pow.patch @@ -0,0 +1,37 @@ +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 new file mode 100644 index 00000000..adc51dbb --- /dev/null +++ b/chromium-110-InProgressDownloadManager-include.patch @@ -0,0 +1,30 @@ +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 new file mode 100644 index 00000000..c7d0e8b1 --- /dev/null +++ b/chromium-110-NativeThemeBase-fabs.patch @@ -0,0 +1,29 @@ +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 new file mode 100644 index 00000000..7cfb84b9 --- /dev/null +++ b/chromium-110-Presenter-include.patch @@ -0,0 +1,26 @@ +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 new file mode 100644 index 00000000..cd0e66cb --- /dev/null +++ b/chromium-110-StorageQueue-decltype.patch @@ -0,0 +1,74 @@ +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 new file mode 100644 index 00000000..c65c7e28 --- /dev/null +++ b/chromium-110-SyncIterator-template.patch @@ -0,0 +1,28 @@ +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 new file mode 100644 index 00000000..a4ba87b5 --- /dev/null +++ b/chromium-110-dpf-arm64.patch @@ -0,0 +1,94 @@ +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-kCustomizeChromeColors-type.patch b/chromium-110-kCustomizeChromeColors-type.patch new file mode 100644 index 00000000..ac214da6 --- /dev/null +++ b/chromium-110-kCustomizeChromeColors-type.patch @@ -0,0 +1,28 @@ +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-109-ozone-wayland-vaapi-support.patch b/chromium-110-ozone-wayland-vaapi-support.patch similarity index 84% rename from chromium-109-ozone-wayland-vaapi-support.patch rename to chromium-110-ozone-wayland-vaapi-support.patch index 6aa61314..fdcff26e 100644 --- a/chromium-109-ozone-wayland-vaapi-support.patch +++ b/chromium-110-ozone-wayland-vaapi-support.patch @@ -243,192 +243,6 @@ diff -up chromium-109.0.5359.124/ui/ozone/public/ozone_platform.h.wayland-vaapi #endif // Indicates that the platform allows client applications to manipulate -diff -up chromium-109.0.5414.74/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc.orig chromium-109.0.5414.74/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc ---- chromium-109.0.5414.74/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc.orig 2023-01-04 20:20:18.000000000 +0100 -+++ chromium-109.0.5414.74/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc 2023-01-11 14:31:01.033496121 +0100 -@@ -39,6 +39,11 @@ struct TestParams { - bool decode_using_client_picture_buffers; - }; - -+#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) -+// TODO: Add it in TestParams to cover Ozone/Wayland. -+bool kMayUseVaapiOverX11 = true; -+#endif // BUILDFLAG(SUPPORT_VAAPI_OVER_X11) -+ - constexpr int32_t kBitstreamId = 123; - constexpr size_t kInputSize = 256; - -@@ -131,7 +136,13 @@ class MockVaapiPicture : public VaapiPic - - class MockVaapiPictureFactory : public VaapiPictureFactory { - public: -+#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) -+ explicit MockVaapiPictureFactory(absl::optional may_use_vaapi_over_x11) -+ : VaapiPictureFactory(may_use_vaapi_over_x11) {} -+#else - MockVaapiPictureFactory() = default; -+#endif // BUILDFLAG(SUPPORT_VAAPI_OVER_X11) -+ - ~MockVaapiPictureFactory() override = default; - - MOCK_METHOD3(MockCreateVaapiPicture, -@@ -165,7 +176,12 @@ class VaapiVideoDecodeAcceleratorTest : - bool can_bind_to_sampler) { return true; })), - decoder_thread_("VaapiVideoDecodeAcceleratorTestThread"), - mock_decoder_(new ::testing::StrictMock), -+#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) -+ mock_vaapi_picture_factory_( -+ new MockVaapiPictureFactory(kMayUseVaapiOverX11)), -+#else - mock_vaapi_picture_factory_(new MockVaapiPictureFactory()), -+#endif // BUILDFLAG(SUPPORT_VAAPI_OVER_X11) - mock_vaapi_wrapper_(new MockVaapiWrapper(VaapiWrapper::kDecode)), - mock_vpp_vaapi_wrapper_(new MockVaapiWrapper(VaapiWrapper::kDecode)), - weak_ptr_factory_(this) { -@@ -421,14 +437,16 @@ TEST_P(VaapiVideoDecodeAcceleratorTest, - mock_vaapi_picture_factory_->GetVaapiImplementation( - gl::kGLImplementationEGLGLES2)); - --#if BUILDFLAG(USE_VAAPI_X11) -- EXPECT_EQ(VaapiPictureFactory::kVaapiImplementationAngle, -- mock_vaapi_picture_factory_->GetVaapiImplementation( -- gl::kGLImplementationEGLANGLE)); -- EXPECT_EQ(VaapiPictureFactory::kVaapiImplementationX11, -- mock_vaapi_picture_factory_->GetVaapiImplementation( -- gl::kGLImplementationDesktopGL)); --#elif BUILDFLAG(IS_OZONE) -+#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) -+ if (kMayUseVaapiOverX11) { -+ EXPECT_EQ(VaapiPictureFactory::kVaapiImplementationAngle, -+ mock_vaapi_picture_factory_->GetVaapiImplementation( -+ gl::kGLImplementationEGLANGLE)); -+ EXPECT_EQ(VaapiPictureFactory::kVaapiImplementationX11, -+ mock_vaapi_picture_factory_->GetVaapiImplementation( -+ gl::kGLImplementationDesktopGL)); -+ } -+#else - EXPECT_EQ(VaapiPictureFactory::kVaapiImplementationDrm, - mock_vaapi_picture_factory_->GetVaapiImplementation( - gl::kGLImplementationEGLANGLE)); -diff -up chromium-109.0.5414.74/media/gpu/vaapi/vaapi_picture_factory.cc.orig chromium-109.0.5414.74/media/gpu/vaapi/vaapi_picture_factory.cc ---- chromium-109.0.5414.74/media/gpu/vaapi/vaapi_picture_factory.cc.orig 2023-01-04 20:20:18.000000000 +0100 -+++ chromium-109.0.5414.74/media/gpu/vaapi/vaapi_picture_factory.cc 2023-01-11 14:45:36.405506479 +0100 -@@ -13,10 +13,10 @@ - #if BUILDFLAG(IS_OZONE) - #include "media/gpu/vaapi/vaapi_picture_native_pixmap_ozone.h" - #endif // BUILDFLAG(IS_OZONE) --#if BUILDFLAG(USE_VAAPI_X11) -+#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) - #include "media/gpu/vaapi/vaapi_picture_native_pixmap_angle.h" - #include "media/gpu/vaapi/vaapi_picture_tfp.h" --#endif // BUILDFLAG(USE_VAAPI_X11) -+#endif // BUILDFLAG(SUPPORT_VAAPI_OVER_X11) - #if defined(USE_EGL) - #include "media/gpu/vaapi/vaapi_picture_native_pixmap_egl.h" - #endif -@@ -42,22 +42,32 @@ - - } // namespace - -+#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) -+VaapiPictureFactory::VaapiPictureFactory( -+ absl::optional may_use_vaapi_over_x11) -+ : may_use_vaapi_over_x11_(may_use_vaapi_over_x11) { -+#else - VaapiPictureFactory::VaapiPictureFactory() { -+#endif // BUILDFLAG(SUPPORT_VAAPI_OVER_X11) - vaapi_impl_pairs_.insert( - std::make_pair(gl::kGLImplementationEGLGLES2, - VaapiPictureFactory::kVaapiImplementationDrm)); --#if BUILDFLAG(USE_VAAPI_X11) -- vaapi_impl_pairs_.insert( -- std::make_pair(gl::kGLImplementationEGLANGLE, -- VaapiPictureFactory::kVaapiImplementationAngle)); -- vaapi_impl_pairs_.insert( -- std::make_pair(gl::kGLImplementationDesktopGL, -- VaapiPictureFactory::kVaapiImplementationX11)); --#elif BUILDFLAG(IS_OZONE) -+ -+#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) -+ CHECK(may_use_vaapi_over_x11_.has_value()); -+ if (may_use_vaapi_over_x11_.value()) { -+ vaapi_impl_pairs_.insert( -+ std::make_pair(gl::kGLImplementationEGLANGLE, -+ VaapiPictureFactory::kVaapiImplementationAngle)); -+ vaapi_impl_pairs_.insert( -+ std::make_pair(gl::kGLImplementationDesktopGL, -+ VaapiPictureFactory::kVaapiImplementationX11)); -+ } -+#else - vaapi_impl_pairs_.insert( - std::make_pair(gl::kGLImplementationEGLANGLE, - VaapiPictureFactory::kVaapiImplementationDrm)); --#endif -+#endif // BUILDFLAG(SUPPORT_VAAPI_OVER_X11) - - DeterminePictureCreationAndDownloadingMechanism(); - } -@@ -98,19 +108,19 @@ - } - - uint32_t VaapiPictureFactory::GetGLTextureTarget() { --#if BUILDFLAG(USE_VAAPI_X11) -- return GL_TEXTURE_2D; --#else -+#if BUILDFLAG(IS_CHROMEOS) - return GL_TEXTURE_EXTERNAL_OES; --#endif -+#else -+ return GL_TEXTURE_2D; -+#endif // BUILDFLAG(IS_CHROMEOS) - } - - gfx::BufferFormat VaapiPictureFactory::GetBufferFormat() { --#if BUILDFLAG(USE_VAAPI_X11) -- return gfx::BufferFormat::RGBX_8888; --#else -+#if BUILDFLAG(IS_CHROMEOS) - return gfx::BufferFormat::YUV_420_BIPLANAR; --#endif -+#else -+ return gfx::BufferFormat::RGBX_8888; -+#endif // BUILDFLAG(IS_CHROMEOS) - } - - void VaapiPictureFactory::DeterminePictureCreationAndDownloadingMechanism() { -@@ -118,25 +128,30 @@ - #if BUILDFLAG(IS_OZONE) - // We can be called without GL initialized, which is valid if we use Ozone. - case kVaapiImplementationNone: -+#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) -+ DCHECK(may_use_vaapi_over_x11_.value_or(false)); -+#endif - create_picture_cb_ = base::BindRepeating( - &CreateVaapiPictureNativeImpl); - needs_vpp_for_downloading_ = true; - break; - #endif // BUILDFLAG(IS_OZONE) --#if BUILDFLAG(USE_VAAPI_X11) -+#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) - case kVaapiImplementationX11: -+ DCHECK(may_use_vaapi_over_x11_.value_or(false)); - create_picture_cb_ = - base::BindRepeating(&CreateVaapiPictureNativeImpl); - // Neither VaapiTFPPicture or VaapiPictureNativePixmapAngle needs the VPP. - needs_vpp_for_downloading_ = false; - break; - case kVaapiImplementationAngle: -+ DCHECK(may_use_vaapi_over_x11_.value_or(false)); - create_picture_cb_ = base::BindRepeating( - &CreateVaapiPictureNativeImpl); - // Neither VaapiTFPPicture or VaapiPictureNativePixmapAngle needs the VPP. - needs_vpp_for_downloading_ = false; - break; --#endif // BUILDFLAG(USE_VAAPI_X11) -+#endif // BUILDFLAG(SUPPORT_VAAPI_OVER_X11) - case kVaapiImplementationDrm: - #if BUILDFLAG(IS_OZONE) - create_picture_cb_ = base::BindRepeating( diff -up chromium-109.0.5414.74/media/gpu/vaapi/vaapi_wrapper.cc.orig chromium-109.0.5414.74/media/gpu/vaapi/vaapi_wrapper.cc --- chromium-109.0.5414.74/media/gpu/vaapi/vaapi_wrapper.cc.orig 2023-01-04 20:20:18.000000000 +0100 +++ chromium-109.0.5414.74/media/gpu/vaapi/vaapi_wrapper.cc 2023-01-11 15:08:02.721768243 +0100 @@ -664,3 +478,107 @@ diff -up chromium-109.0.5414.74/media/gpu/vaapi/vaapi_picture_native_pixmap_ozon // The 'VaapiVideoDecodeAccelerator' requires the VPP to download the decoded // frame from the internal surface to the allocated native pixmap. // 'SCANOUT_VDA_WRITE' is used for 'YUV_420_BIPLANAR' on ChromeOS; For Linux, +diff -up chromium-110.0.5481.61/media/gpu/vaapi/vaapi_picture_factory.cc.me1 chromium-110.0.5481.61/media/gpu/vaapi/vaapi_picture_factory.cc +--- chromium-110.0.5481.61/media/gpu/vaapi/vaapi_picture_factory.cc.me1 2023-02-01 16:42:01.000000000 +0100 ++++ chromium-110.0.5481.61/media/gpu/vaapi/vaapi_picture_factory.cc 2023-02-04 16:45:27.769211581 +0100 +@@ -13,9 +13,9 @@ + #if BUILDFLAG(IS_OZONE) + #include "media/gpu/vaapi/vaapi_picture_native_pixmap_ozone.h" + #endif // BUILDFLAG(IS_OZONE) +-#if BUILDFLAG(USE_VAAPI_X11) ++#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) + #include "media/gpu/vaapi/vaapi_picture_native_pixmap_angle.h" +-#endif // BUILDFLAG(USE_VAAPI_X11) ++#endif // BUILDFLAG(SUPPORT_VAAPI_OVER_X11) + #if defined(USE_EGL) + #include "media/gpu/vaapi/vaapi_picture_native_pixmap_egl.h" + #endif +@@ -41,19 +41,28 @@ std::unique_ptr CreateVaap + + } // namespace + ++#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) ++VaapiPictureFactory::VaapiPictureFactory( ++ absl::optional may_use_vaapi_over_x11) ++ : may_use_vaapi_over_x11_(may_use_vaapi_over_x11) { ++#else + VaapiPictureFactory::VaapiPictureFactory() { ++#endif + vaapi_impl_pairs_.insert( + std::make_pair(gl::kGLImplementationEGLGLES2, + VaapiPictureFactory::kVaapiImplementationDrm)); +-#if BUILDFLAG(USE_VAAPI_X11) +- vaapi_impl_pairs_.insert( +- std::make_pair(gl::kGLImplementationEGLANGLE, +- VaapiPictureFactory::kVaapiImplementationAngle)); +-#elif BUILDFLAG(IS_OZONE) ++#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) ++ CHECK(may_use_vaapi_over_x11_.has_value()); ++ if (may_use_vaapi_over_x11_.value()) { ++ vaapi_impl_pairs_.insert( ++ std::make_pair(gl::kGLImplementationEGLANGLE, ++ VaapiPictureFactory::kVaapiImplementationAngle)); ++ } ++#else + vaapi_impl_pairs_.insert( + std::make_pair(gl::kGLImplementationEGLANGLE, + VaapiPictureFactory::kVaapiImplementationDrm)); +-#endif ++#endif // BUILDFLAG(SUPPORT_VAAPI_OVER_X11) + + DeterminePictureCreationAndDownloadingMechanism(); + } +@@ -93,19 +102,19 @@ VaapiPictureFactory::GetVaapiImplementat + } + + uint32_t VaapiPictureFactory::GetGLTextureTarget() { +-#if BUILDFLAG(USE_VAAPI_X11) +- return GL_TEXTURE_2D; +-#else ++#if BUILDFLAG(IS_CHROMEOS) + return GL_TEXTURE_EXTERNAL_OES; +-#endif ++#else ++ return GL_TEXTURE_2D; ++#endif // BUILDFLAG(IS_CHROMEOS) + } + + gfx::BufferFormat VaapiPictureFactory::GetBufferFormat() { +-#if BUILDFLAG(USE_VAAPI_X11) +- return gfx::BufferFormat::RGBX_8888; +-#else ++#if BUILDFLAG(IS_CHROMEOS) + return gfx::BufferFormat::YUV_420_BIPLANAR; +-#endif ++#else ++ return gfx::BufferFormat::RGBX_8888; ++#endif // BUILDFLAG(IS_CHROMEOS) + } + + void VaapiPictureFactory::DeterminePictureCreationAndDownloadingMechanism() { +@@ -113,19 +122,23 @@ void VaapiPictureFactory::DeterminePictu + #if BUILDFLAG(IS_OZONE) + // We can be called without GL initialized, which is valid if we use Ozone. + case kVaapiImplementationNone: ++#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) ++ DCHECK(may_use_vaapi_over_x11_.value_or(false)); ++#endif + create_picture_cb_ = base::BindRepeating( + &CreateVaapiPictureNativeImpl); + needs_vpp_for_downloading_ = true; + break; + #endif // BUILDFLAG(IS_OZONE) +-#if BUILDFLAG(USE_VAAPI_X11) ++#if BUILDFLAG(SUPPORT_VAAPI_OVER_X11) + case kVaapiImplementationAngle: ++ CHECK(may_use_vaapi_over_x11_.value_or(false)); + create_picture_cb_ = base::BindRepeating( + &CreateVaapiPictureNativeImpl); + // Neither VaapiTFPPicture or VaapiPictureNativePixmapAngle needs the VPP. + needs_vpp_for_downloading_ = false; + break; +-#endif // BUILDFLAG(USE_VAAPI_X11) ++#endif // BUILDFLAG(SUPPORT_VAAPI_OVER_X11) + case kVaapiImplementationDrm: + #if BUILDFLAG(IS_OZONE) + create_picture_cb_ = base::BindRepeating( diff --git a/chromium-110-raw_ptr-constexpr.patch b/chromium-110-raw_ptr-constexpr.patch new file mode 100644 index 00000000..ded5855f --- /dev/null +++ b/chromium-110-raw_ptr-constexpr.patch @@ -0,0 +1,31 @@ +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 new file mode 100644 index 00000000..4bca19a1 --- /dev/null +++ b/chromium-110-v8-gcc.patch @@ -0,0 +1,33 @@ +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 new file mode 100644 index 00000000..95b2633a --- /dev/null +++ b/chromium-111-v8-std-layout1.patch @@ -0,0 +1,2229 @@ +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 new file mode 100644 index 00000000..db983af4 --- /dev/null +++ b/chromium-111-v8-std-layout2.patch @@ -0,0 +1,198 @@ +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-60.0.3112.78-no-libpng-prefix.patch b/chromium-60.0.3112.78-no-libpng-prefix.patch deleted file mode 100644 index 0dbdcf97..00000000 --- a/chromium-60.0.3112.78-no-libpng-prefix.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff -up chromium-60.0.3112.78/third_party/libpng/pnglibconf.h.noprefix chromium-60.0.3112.78/third_party/libpng/pnglibconf.h ---- chromium-60.0.3112.78/third_party/libpng/pnglibconf.h.noprefix 2017-08-01 14:42:54.321986758 -0400 -+++ chromium-60.0.3112.78/third_party/libpng/pnglibconf.h 2017-08-01 14:43:01.493845832 -0400 -@@ -225,13 +225,4 @@ - #define PNG_USER_CHUNK_MALLOC_MAX 4000000L - /* end of chromium settings */ - --/* chromium prefixing */ --/* -- * This is necessary to build multiple copies of libpng. We need this while pdfium builds -- * its own copy of libpng. -- */ --#define PNG_PREFIX --#include "pngprefix.h" --/* end of chromium prefixing */ -- - #endif /* PNGLCONF_H */ diff --git a/chromium-90.0.4430.93-epel8-aarch64-libpng16-symbol-prefixes.patch b/chromium-90.0.4430.93-epel8-aarch64-libpng16-symbol-prefixes.patch deleted file mode 100644 index fdde71ea..00000000 --- a/chromium-90.0.4430.93-epel8-aarch64-libpng16-symbol-prefixes.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff -up chromium-90.0.4430.93/third_party/llvm/lldb/test/API/functionalities/postmortem/netbsd-core/1lwp_SIGSEGV.aarch64 chromium-90.0.4430.93/third_party/llvm/lldb/test/API/functionalities/postmortem/netbsd-core/1lwp_SIGSEGV -diff -up chromium-90.0.4430.93/third_party/llvm/lldb/test/API/functionalities/postmortem/netbsd-core/2lwp_process_SIGSEGV.aarch64 chromium-90.0.4430.93/third_party/llvm/lldb/test/API/functionalities/postmortem/netbsd-core/2lwp_process_SIGSEGV -diff -up chromium-90.0.4430.93/third_party/llvm/lldb/test/API/functionalities/postmortem/netbsd-core/2lwp_t2_SIGSEGV.aarch64 chromium-90.0.4430.93/third_party/llvm/lldb/test/API/functionalities/postmortem/netbsd-core/2lwp_t2_SIGSEGV -diff -up chromium-90.0.4430.93/third_party/pdfium/third_party/libpng16/pngprefix.h.aarch64 chromium-90.0.4430.93/third_party/pdfium/third_party/libpng16/pngprefix.h ---- chromium-90.0.4430.93/third_party/pdfium/third_party/libpng16/pngprefix.h.aarch64 2021-05-03 14:08:47.184438786 -0400 -+++ chromium-90.0.4430.93/third_party/pdfium/third_party/libpng16/pngprefix.h 2021-05-03 14:09:59.289797317 -0400 -@@ -458,4 +458,11 @@ - #define png_zlib_inflate PDFIUM_png_zlib_inflate - #define png_zstream_error PDFIUM_png_zstream_error - -+#if PNG_ARM_NEON_IMPLEMENTATION == 1 -+#define png_riffle_palette_neon PDFIUM_png_riffle_palette_neon -+#define png_do_expand_palette_rgba8_neon PDFIUM_png_do_expand_palette_rgba8_neon -+#define png_do_expand_palette_rgb8_neon PDFIUM_png_do_expand_palette_rgb8_neon -+#endif -+ -+ - #endif // PNGPREFIX_H diff --git a/chromium.spec b/chromium.spec index 0db6deee..50f47708 100644 --- a/chromium.spec +++ b/chromium.spec @@ -227,8 +227,8 @@ %endif Name: chromium%{chromium_channel} -Version: 109.0.5414.119 -Release: 2%{?dist} +Version: 110.0.5481.61 +Release: 1%{?dist} Summary: A WebKit (Blink) powered web browser that Google doesn't want you to use Url: http://www.chromium.org/Home License: BSD and LGPLv2+ and ASL 2.0 and IJG and MIT and GPLv2+ and ISC and OpenSSL and (MPLv1.1 or GPLv2 or LGPLv2) @@ -242,9 +242,6 @@ Patch1: chromium-91.0.4472.77-initial_prefs-etc-path.patch # Use gn system files Patch2: chromium-107.0.5304.110-gn-system.patch -# Do not prefix libpng functions -Patch3: chromium-60.0.3112.78-no-libpng-prefix.patch - # Do not mangle zlib Patch5: chromium-77.0.3865.75-no-zlib-mangle.patch @@ -279,9 +276,6 @@ Patch56: chromium-96.0.4664.45-missing-cstdint-header.patch # Missing (thanks c++17) Patch57: chromium-96.0.4664.45-missing-cstring.patch -# https://github.com/stha09/chromium-patches/blob/master/chromium-103-VirtualCursor-std-layout.patch -Patch59: chromium-103-VirtualCursor-std-layout.patch - # Fix headers to look for system paths when we are using system minizip Patch61: chromium-109-system-minizip-header-fix.patch @@ -315,15 +309,9 @@ Patch90: chromium-109-disable-GlobalMediaControlsCastStartStop.patch # patch for using system opus Patch91: chromium-108-system-opus.patch -# Fix extra qualification error -Patch97: chromium-107.0.5304.110-remoting-extra-qualification.patch - # From gentoo Patch98: chromium-94.0.4606.71-InkDropHost-crash.patch -# Enable WebRTCPPipeWireCapturer by default -Patch99: chromium-108-enable-WebRTCPipeWireCapturer-byDefault.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 @@ -349,10 +337,6 @@ Patch106: chromium-98.0.4758.80-epel7-erase-fix.patch # Add additional operator== to make el7 happy. Patch107: chromium-99.0.4844.51-el7-extra-operator==.patch -# Again, not sure how epel8 is the only one to hit this... -# AARCH64 neon symbols need to be prefixed too to prevent multiple definition issue at linktime -Patch110: chromium-90.0.4430.93-epel8-aarch64-libpng16-symbol-prefixes.patch - # system ffmpeg Patch114: chromium-107-ffmpeg-duration.patch Patch115: chromium-107-proprietary-codecs.patch @@ -371,11 +355,29 @@ Patch121: chromium-108-enable-allowqt.patch # gcc13 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 Patch202: chromium-104.0.5112.101-enable-hardware-accelerated-mjpeg.patch Patch205: chromium-86.0.4240.75-fix-vaapi-on-intel.patch -Patch206: chromium-109-ozone-wayland-vaapi-support.patch +Patch206: chromium-110-ozone-wayland-vaapi-support.patch # Apply these patches to work around EPEL8 issues Patch300: chromium-99.0.4844.51-rhel8-force-disable-use_gnome_keyring.patch @@ -947,7 +949,6 @@ udev. %patch0 -p1 -b .sandboxpie %patch1 -p1 -b .etc %patch2 -p1 -b .gnsystem -%patch3 -p1 -b .nolibpngprefix %patch5 -p1 -b .nozlibmangle %patch6 -p1 -b .nounrar %patch7 -p1 -b .widevine-hack @@ -964,7 +965,6 @@ udev. %patch56 -p1 -b .missing-cstdint %patch57 -p1 -b .missing-cstring -%patch59 -p1 -b .VirtualCursor-std-layout %if ! %{bundleminizip} %patch61 -p1 -b .system-minizip @@ -986,9 +986,7 @@ udev. %patch91 -p1 -b .system-opus %endif -%patch97 -p1 -b .remoting-extra-qualification %patch98 -p1 -b .InkDropHost-crash -%patch99 -p1 -b .enable-WebRTCPipeWireCapturer-byDefault # Fedora branded user agent %if 0%{?fedora} @@ -1015,14 +1013,27 @@ udev. %patch107 -p1 -b .el7-extra-operator-equalequal %endif -%if 0%{?rhel} == 8 -%patch110 -p1 -b .el8-aarch64-libpng16-symbol-prefixes -%endif - %if 0%{?rhel} || 0%{?fedora} == 36 %patch120 -p1 -b .link-error-clang14 %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 %endif @@ -1168,7 +1179,7 @@ sed -i 's|moc|moc-qt5|g' ui/qt/moc_wrapper.py export LANG=en_US.UTF-8 # Turning the buildsystem up to 11. -ulimit -n 4096 +ulimit -n 2048 # reduce warnings FLAGS=' -Wno-deprecated-declarations -Wno-unknown-warning-option -Wno-unused-command-line-argument' @@ -1187,6 +1198,7 @@ CXXFLAGS="$CFLAGS" # override system build flags CFLAGS="$FLAGS" CXXFLAGS="$FLAGS" +LDFLAGS="" %endif %if %{clang} @@ -1198,6 +1210,7 @@ export CXX=g++ %endif export CFLAGS export CXXFLAGS +export LDFLAGS export AR=ar export NM=nm @@ -1788,6 +1801,9 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt %{chromium_path}/chromedriver %changelog +* Sat Feb 04 2023 Than Ngo - 110.0.5481.61-1 +- update to 110.0.5481.61 + * Thu Feb 02 2023 Jan Grulich - 109.0.5414.119-2 - Use ffmpeg decoders for h264 support diff --git a/clean_ffmpeg.sh b/clean_ffmpeg.sh index 16a59a74..d2f50ad3 100755 --- a/clean_ffmpeg.sh +++ b/clean_ffmpeg.sh @@ -105,8 +105,6 @@ header_files=" libavcodec/x86/inline_asm.h \ libavcodec/internal.h \ libavcodec/kbdwin.h \ libavcodec/mathops.h \ - libavcodec/mdct15.c \ - libavcodec/mdct15.h \ libavcodec/me_cmp.h \ libavcodec/mlp_parse.h \ libavcodec/motion_est.h \ @@ -235,15 +233,12 @@ manual_files=" libavcodec/aarch64/fft_neon.S \ libavcodec/aarch64/vp8dsp_neon.S \ libavcodec/x86/hpeldsp.asm \ libavcodec/x86/hpeldsp_rnd_template.c \ - libavcodec/x86/mdct15.asm \ - libavcodec/x86/mdct15_init.c \ libavcodec/x86/rnd_template.c \ libavcodec/x86/videodsp.asm \ libavcodec/x86/videodsp_init.c \ libavcodec/x86/vorbisdsp_init.c \ libavcodec/x86/vp3dsp.asm \ libavcodec/x86/vp8dsp.asm \ - libavcodec/autorename_libavcodec_mdct15.c \ libavcodec/bit_depth_template.c \ libavcodec/fft_template.c \ libavcodec/flacdec.c \ @@ -253,7 +248,6 @@ manual_files=" libavcodec/aarch64/fft_neon.S \ libavcodec/h264pred_template.c \ libavcodec/hpel_template.c \ libavcodec/hpeldsp.c \ - libavcodec/mdct15.c \ libavcodec/mdct_template.c \ libavcodec/options.c \ libavcodec/pcm.c \ diff --git a/sources b/sources index 28b9d339..38b873fd 100644 --- a/sources +++ b/sources @@ -19,4 +19,4 @@ SHA512 (NotoSansSymbols2-Regular.ttf) = 2644b42c3fdccfe12395f9b61553aced169a0f1d SHA512 (NotoSansTibetan-Regular.ttf) = fb5a48fcaea80eebe7d692f6fcf00d59d47658a358d0ec8e046fc559873f88bd595b2da474d2826abd9e9305f3741c69058d867b1e6048f37fe7d71b5d3af36a SHA512 (node-v16.17.0-linux-x64.tar.xz) = aedfeeb71420a7fbcb07fbc4c5d2ba74ffe4f88c15998809346a84148132ec866dbae4e848531a2a77ca41413f442e1046f981d4f188bdf667faf88069aa28cd SHA512 (node-v16.17.0-linux-arm64.tar.xz) = ae4aabc2389779c9e1b4a15622cae3ba50e0c313ca3d7a1dc7b2344df06ade1f303d6a75b941d37e2a0ef368cf047c862a822a893684494f55446afd6ab0610e -SHA512 (chromium-109.0.5414.119-clean.tar.xz) = 140d10b025379781ac8b94386ed453bd3814228c70a303392c1506494228bf3b5f839a5166dcb1182af0d942039dfc1d6710b5f417c9d74f21b1f185d2f107b7 +SHA512 (chromium-110.0.5481.61-clean.tar.xz) = bc655e72ca94c741eede89f66e76f7829e59bf2edc1c3b5c19271317a2061a9a6b176da90357ca73d325047cd9ba24549da29e735b96ecc31244e2c2adbe65fd