public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/chromium] epel9-next: Merge #32 `Fix for systems with page size larger than 4k`
@ 2026-08-07 16:04 Tom Callaway
  0 siblings, 0 replies; only message in thread
From: Tom Callaway @ 2026-08-07 16:04 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/chromium
Branch : epel9-next
Commit : fc64fd023d2cd6227b0cad37ce127ccc4e1716df
Author : Tom Callaway <spot@fedoraproject.org>
Date   : 2023-03-07T11:12:32+00:00
Stats  : +128/-3224 in 23 file(s)
URL    : https://src.fedoraproject.org/rpms/chromium/c/fc64fd023d2cd6227b0cad37ce127ccc4e1716df?branch=epel9-next

Log:
Merge #32 `Fix for systems with page size larger than 4k`

---
diff --git a/chromium-110-LargerThan4k.patch b/chromium-110-LargerThan4k.patch
new file mode 100644
index 0000000..374f487
--- /dev/null
+++ b/chromium-110-LargerThan4k.patch
@@ -0,0 +1,86 @@
+From 96ee2a8e20bb7a7c4fb19e27dc31ff5c6a472849 Mon Sep 17 00:00:00 2001
+From: Ryan Gonzalez <rymg19@gmail.com>
+Date: Mon, 06 Mar 2023 20:22:25 -0600
+Subject: [PATCH] AddressTrackerLinux: Increase the message buffer size
+
+On non-4k-page systems, the message sizes may be too large to fit into
+the buffer, resulting in MSG_TRUNC. Instead of using the fixed 4kb size,
+follow the kernel documentation guidelines as to how large the buffer
+should be.
+
+Originally found by Asahi Lina:
+
+https://vt.social/@lina/109976892758680822
+
+Bug: None
+Change-Id: I4790435190167a706fa7490ab57706db1f4a6120
+---
+
+diff --git a/net/base/address_tracker_linux.cc b/net/base/address_tracker_linux.cc
+index 4976cae..f1a1fff 100644
+--- a/net/base/address_tracker_linux.cc
++++ b/net/base/address_tracker_linux.cc
+@@ -14,6 +14,7 @@
+ #include "base/files/scoped_file.h"
+ #include "base/functional/callback_helpers.h"
+ #include "base/logging.h"
++#include "base/memory/page_size.h"
+ #include "base/posix/eintr_wrapper.h"
+ #include "base/task/current_thread.h"
+ #include "base/threading/scoped_blocking_call.h"
+@@ -323,8 +324,30 @@
+   *address_changed = false;
+   *link_changed = false;
+   *tunnel_changed = false;
+-  char buffer[4096];
+   bool first_loop = true;
++
++  // Varying sources have different opinions regarding the buffer size needed
++  // for netlink messages to avoid truncation:
++  // - The official documentation on netlink says messages are generally 8kb
++  //   or the system page size, whichever is *larger*:
++  //   https://www.kernel.org/doc/html/v6.2/userspace-api/netlink/intro.html#buffer-sizing
++  // - The kernel headers would imply that messages are generally the system
++  //   page size or 8kb, whichever is *smaller*:
++  //   https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/include/linux/netlink.h?h=v6.2.2#n226
++  //   (libmnl follows this.)
++  // - The netlink(7) man page's example always uses a fixed size 8kb buffer:
++  //   https://man7.org/linux/man-pages/man7/netlink.7.html
++  // Here, we follow the guidelines in the documentation, for two primary
++  // reasons:
++  // - Erring on the side of a larger size is the safer way to go to avoid
++  //   MSG_TRUNC.
++  // - Since this is heap-allocated anyway, there's no risk to the stack by
++  //   using the larger size.
++
++  constexpr size_t kMinNetlinkBufferSize = 8 * 1024;
++  std::vector<char> buffer(
++      std::max(base::GetPageSize(), kMinNetlinkBufferSize));
++
+   {
+     absl::optional<base::ScopedBlockingCall> blocking_call;
+     if (tracking_) {
+@@ -334,9 +357,10 @@
+     }
+ 
+     for (;;) {
+-      int rv = HANDLE_EINTR(recv(netlink_fd_.get(), buffer, sizeof(buffer),
+-                                 // Block the first time through loop.
+-                                 first_loop ? 0 : MSG_DONTWAIT));
++      int rv =
++          HANDLE_EINTR(recv(netlink_fd_.get(), buffer.data(), buffer.size(),
++                            // Block the first time through loop.
++                            first_loop ? 0 : MSG_DONTWAIT));
+       first_loop = false;
+       if (rv == 0) {
+         LOG(ERROR) << "Unexpected shutdown of NETLINK socket.";
+@@ -348,7 +372,8 @@
+         PLOG(ERROR) << "Failed to recv from netlink socket";
+         return;
+       }
+-      HandleMessage(buffer, rv, address_changed, link_changed, tunnel_changed);
++      HandleMessage(buffer.data(), rv, address_changed, link_changed,
++                    tunnel_changed);
+     }
+   }
+   if (*link_changed || *address_changed)

diff --git a/chromium.spec b/chromium.spec
index 81a6c64..44e9b54 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -365,6 +365,8 @@ Patch122: chromium-109-gcc13.patch
 # Patches by Stephan Hartmann, https://github.com/stha09/chromium-patches
 Patch130: chromium-103-VirtualCursor-std-layout.patch
 
+Patch146: chromium-110-LargerThan4k.patch
+
 # VAAPI
 # Upstream turned VAAPI on in Linux in 86
 Patch202: chromium-104.0.5112.101-enable-hardware-accelerated-mjpeg.patch
@@ -957,6 +959,8 @@ udev.
 
 %patch130 -p1 -b .VirtualCursor-std-layout
 
+%patch146 -p1 -b .LargerThan4k
+
 %if %{use_qt}
 %patch121 -p1 -b .enable-allowqt
 %endif

diff --git a/chromium-105.0.5195.52-update-wayland-client-core.patch b/chromium-105.0.5195.52-update-wayland-client-core.patch
deleted file mode 100644
index 86c5c22..0000000
--- a/chromium-105.0.5195.52-update-wayland-client-core.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-diff -up chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h.old-wayland chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h
---- chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h.old-wayland	2022-09-01 19:36:06.099483374 +0000
-+++ chromium-105.0.5195.52/third_party/wayland/src/src/wayland-client-core.h	2022-09-01 22:09:56.523353619 +0000
-@@ -119,9 +119,27 @@ struct wl_display;
-  */
- struct wl_event_queue;
- 
-+/** Destroy proxy after marshalling
-+ * @ingroup wl_proxy
-+ */
-+#define WL_MARSHAL_FLAG_DESTROY (1 << 0)
-+
- void
- wl_event_queue_destroy(struct wl_event_queue *queue);
- 
-+struct wl_proxy *
-+wl_proxy_marshal_flags(struct wl_proxy *proxy, uint32_t opcode,
-+		       const struct wl_interface *interface,
-+		       uint32_t version,
-+		       uint32_t flags, ...);
-+
-+struct wl_proxy *
-+wl_proxy_marshal_array_flags(struct wl_proxy *proxy, uint32_t opcode,
-+			     const struct wl_interface *interface,
-+			     uint32_t version,
-+			     uint32_t flags,
-+			     union wl_argument *args);
-+
- void
- wl_proxy_marshal(struct wl_proxy *p, uint32_t opcode, ...);
- 

diff --git a/chromium-110-CanvasResourceProvider-pragma.patch b/chromium-110-CanvasResourceProvider-pragma.patch
deleted file mode 100644
index 5732e49..0000000
--- a/chromium-110-CanvasResourceProvider-pragma.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 3e1e86ac882ae0ce4b9ec50834a4ff8becd912ab Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-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 <schenney@chromium.org>
-Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
-Cr-Commit-Position: refs/heads/main@{#1084983}
----
-
-diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
-index e898397f..214ab01 100644
---- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
-+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
-@@ -68,6 +68,8 @@
-  public:
-   // These values are persisted to logs. Entries should not be renumbered and
-   // numeric values should never be reused.
-+#pragma GCC diagnostic push
-+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-   enum ResourceProviderType {
-     kTexture [[deprecated]] = 0,
-     kBitmap = 1,
-@@ -79,11 +81,9 @@
-     kPassThrough = 7,
-     kSwapChain = 8,
-     kSkiaDawnSharedImage [[deprecated]] = 9,
--#pragma GCC diagnostic push
--#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-     kMaxValue = kSkiaDawnSharedImage,
--#pragma GCC diagnostic pop
-   };
-+#pragma GCC diagnostic pop
- 
-   // The following parameters attempt to reach a compromise between not flushing
-   // too often, and not accumulating an unreasonable backlog.  Flushing too

diff --git a/chromium-110-CredentialUIEntry-const.patch b/chromium-110-CredentialUIEntry-const.patch
deleted file mode 100644
index eb68aa2..0000000
--- a/chromium-110-CredentialUIEntry-const.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From b4e56d22275cae5a910463a966a96345430a83ea Mon Sep 17 00:00:00 2001
-From: Ivan Murashov <ivan.murashov@lge.com>
-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 <mamir@chromium.org>
-Commit-Queue: Mohamed Amir Yosef <mamir@chromium.org>
-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<const std::u16string> notes_with_duplicates;
-+  std::vector<std::u16string> 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::u16string>(std::move(notes_with_duplicates));
--  note = base::JoinString(std::vector<const std::u16string>(
-+  note = base::JoinString(std::vector<std::u16string>(
-                               unique_notes.begin(), unique_notes.end()),
-                           u"\n");
- 

diff --git a/chromium-110-DarkModeLABColorSpace-pow.patch b/chromium-110-DarkModeLABColorSpace-pow.patch
deleted file mode 100644
index 91f1aee..0000000
--- a/chromium-110-DarkModeLABColorSpace-pow.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 795c311aae4b718585bc6194189f061000c823a1 Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-Date: Fri, 23 Dec 2022 14:28:55 +0000
-Subject: [PATCH] libstdc++: fix narrowing in blink::DarkModeLABColorSpace
-
-Clang-14 errors out with narrowing from double to float. Use std::pow
-instead.
----
- .../renderer/platform/graphics/dark_mode_lab_color_space.h   | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h b/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h
-index 999c3e5..c18ea7b 100644
---- a/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h
-+++ b/third_party/blink/renderer/platform/graphics/dark_mode_lab_color_space.h
-@@ -125,7 +125,7 @@ class DarkModeLABColorSpace {
-   // https://en.wikipedia.org/wiki/CIELAB_color_space#Reverse_transformation.
-   SkV3 FromXYZ(const SkV3& v) const {
-     auto f = [](float x) {
--      return x > kSigma3 ? pow(x, 1.0f / 3.0f)
-+      return x > kSigma3 ? std::pow(x, 1.0f / 3.0f)
-                          : x / (3 * kSigma2) + 4.0f / 29.0f;
-     };
- 
-@@ -145,7 +145,8 @@ class DarkModeLABColorSpace {
-   // https://en.wikipedia.org/wiki/CIELAB_color_space#Forward_transformation.
-   SkV3 ToXYZ(const SkV3& lab) const {
-     auto invf = [](float x) {
--      return x > kSigma ? pow(x, 3.0f) : 3.0f * kSigma2 * (x - 4.0f / 29.0f);
-+      return x > kSigma ? std::pow(x, 3.0f)
-+                        : 3.0f * kSigma2 * (x - 4.0f / 29.0f);
-     };
- 
-     SkV3 v = {Clamp(lab.x, 0.0f, 100.0f), Clamp(lab.y, -128.0f, 128.0f),
--- 
-2.38.2
-

diff --git a/chromium-110-InProgressDownloadManager-include.patch b/chromium-110-InProgressDownloadManager-include.patch
deleted file mode 100644
index adc51db..0000000
--- a/chromium-110-InProgressDownloadManager-include.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 63027c62eaa1b6c5b0d2762a511f1611b15d3728 Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-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 <boliu@chromium.org>
-Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
-Cr-Commit-Position: refs/heads/main@{#1084924}
----
-
-diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
-index 6180969..22e9dbb 100644
---- a/content/browser/browser_context.cc
-+++ b/content/browser/browser_context.cc
-@@ -30,6 +30,7 @@
- #include "base/unguessable_token.h"
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
-+#include "components/download/public/common/in_progress_download_manager.h"
- #include "components/services/storage/privileged/mojom/indexed_db_control.mojom.h"
- #include "content/browser/blob_storage/chrome_blob_storage_context.h"
- #include "content/browser/browser_context_impl.h"

diff --git a/chromium-110-NativeThemeBase-fabs.patch b/chromium-110-NativeThemeBase-fabs.patch
deleted file mode 100644
index c7d0e8b..0000000
--- a/chromium-110-NativeThemeBase-fabs.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 07f0a87e4409f27854b3a1d17f270a3497f38947 Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-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 <pkasting@chromium.org>
-Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
-Cr-Commit-Position: refs/heads/main@{#1085034}
----
-
-diff --git a/ui/native_theme/native_theme_base.cc b/ui/native_theme/native_theme_base.cc
-index 169c60c..36db49a 100644
---- a/ui/native_theme/native_theme_base.cc
-+++ b/ui/native_theme/native_theme_base.cc
-@@ -1336,7 +1336,7 @@
-   // The following code has been tested to look OK with all of the
-   // default GTK themes.
-   SkScalar min_diff = base::clamp((hsv1[1] + hsv2[1]) * 1.2f, 0.28f, 0.5f);
--  SkScalar diff = base::clamp(fabs(hsv1[2] - hsv2[2]) / 2, min_diff, 0.5f);
-+  SkScalar diff = base::clamp(fabsf(hsv1[2] - hsv2[2]) / 2, min_diff, 0.5f);
- 
-   if (hsv1[2] + hsv2[2] > 1.0)
-     diff = -diff;

diff --git a/chromium-110-Presenter-include.patch b/chromium-110-Presenter-include.patch
deleted file mode 100644
index 7cfb84b..0000000
--- a/chromium-110-Presenter-include.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From c69b818a9fce2bf0fb81b280d6f4cc15e6fdb8af Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-Date: Fri, 16 Dec 2022 17:13:43 +0000
-Subject: [PATCH] GCC: fix incomplete type of gl::Presenter
-
-GCC requires full definition of gl::Presenter for return type
-of gl::GLOzoneEGL::CreateGLContext() with base::scoped_refptr.
----
- ui/ozone/common/gl_ozone_egl.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/ui/ozone/common/gl_ozone_egl.cc b/ui/ozone/common/gl_ozone_egl.cc
-index 9b1d37e..e745dd7 100644
---- a/ui/ozone/common/gl_ozone_egl.cc
-+++ b/ui/ozone/common/gl_ozone_egl.cc
-@@ -13,6 +13,7 @@
- #include "ui/gl/gl_share_group.h"
- #include "ui/gl/gl_surface.h"
- #include "ui/gl/gl_utils.h"
-+#include "ui/gl/presenter.h"
- 
- namespace ui {
- 
--- 
-2.37.4
-

diff --git a/chromium-110-StorageQueue-decltype.patch b/chromium-110-StorageQueue-decltype.patch
deleted file mode 100644
index cd0e66c..0000000
--- a/chromium-110-StorageQueue-decltype.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 200fc7c3ec95bc86f6afb55ca3c691e923463104 Mon Sep 17 00:00:00 2001
-From: Leonid Baraz <lbaraz@chromium.org>
-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 <lbaraz@chromium.org>
-Commit-Queue: Leonid Baraz <lbaraz@chromium.org>
-Reviewed-by: Hong Xu <xuhong@google.com>
-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<Status(test::StorageQueueOperationKind, int64_t)>;
-+
- }  // 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<Status(test::StorageQueueOperationKind, int64_t)>
--          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<Status(test::StorageQueueOperationKind, int64_t)>
--      test_injection_handler_;
-+  test::ErrorInjectionHandlerType test_injection_handler_{base::NullCallback()};
- 
-   // Weak pointer factory (must be last member in class).
-   base::WeakPtrFactory<StorageQueue> weakptr_factory_{this};

diff --git a/chromium-110-SyncIterator-template.patch b/chromium-110-SyncIterator-template.patch
deleted file mode 100644
index c65c7e2..0000000
--- a/chromium-110-SyncIterator-template.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From da8029438ea8f00a154cb6a1bbc8243de39690de Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-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 <stha09@googlemail.com>
-Reviewed-by: Kentaro Hara <haraken@chromium.org>
-Cr-Commit-Position: refs/heads/main@{#1084808}
----
-
-diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py b/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py
-index 1d67fa2..9cec5094 100644
---- a/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py
-+++ b/third_party/blink/renderer/bindings/scripts/bind_gen/sync_iterator.py
-@@ -36,7 +36,7 @@
-                        member_initializer_list=[
-                            "${base_class_name}(source, kind)",
-                        ]),
--        CxxFuncDeclNode(name="~${class_name}",
-+        CxxFuncDeclNode(name="~SyncIterator",
-                         arg_decls=[],
-                         return_type="",
-                         override=True,

diff --git a/chromium-110-dpf-arm64.patch b/chromium-110-dpf-arm64.patch
deleted file mode 100644
index a4ba87b..0000000
--- a/chromium-110-dpf-arm64.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From df728d2e2fe8284316ed083c5a210bca1e50986e Mon Sep 17 00:00:00 2001
-From: Jose Dapena Paz <jdapena@igalia.com>
-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<const uint64_t*>(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<const uint64_t*>(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<const uint64_t*>(correction_seeds + j));
--      vec ^= hn::BitCast(d8, hn::IfThenElseZero(control_mask, correction_seed));
-+      vec = hn::Xor(vec, hn::BitCast(d8, hn::IfThenElseZero(control_mask, correction_seed)));
-       const auto next_control_mask = IsBitSet(d8, vec, 0);
--      vec &= clear_lowest_bit;
-+      vec = hn::And(vec, clear_lowest_bit);
-       const auto correction_control_mask_left =
-           correction_controls_left[j] ? mask_all_one : mask_all_zero;
-       const auto correction_control_mask_right =

diff --git a/chromium-110-gtktheme.patch b/chromium-110-gtktheme.patch
index eb94e04..3fcaa26 100644
--- a/chromium-110-gtktheme.patch
+++ b/chromium-110-gtktheme.patch
@@ -23,6 +23,25 @@ index 758d0bf..8c91146 100644
  Lenny Khazan <lenny.khazan@gmail.com>
  Leo Wolf <jclw@ymail.com>
  Leon Han <leon.han@intel.com>
+diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
+index 85c3931..2b0c2a84 100644
+--- a/chrome/common/chrome_features.cc
++++ b/chrome/common/chrome_features.cc
+@@ -1430,12 +1430,12 @@
+ BASE_FEATURE(kWebUIDarkMode,
+              "WebUIDarkMode",
+ #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) || \
+-    BUILDFLAG(IS_CHROMEOS)
++    BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
+              base::FEATURE_ENABLED_BY_DEFAULT
+ #else
+              base::FEATURE_DISABLED_BY_DEFAULT
+ #endif  // BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) ||
+-        // BUILDFLAG(IS_CHROMEOS)
++        // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
+ );
+ 
+ #if BUILDFLAG(IS_CHROMEOS_ASH)
 diff --git a/ui/gtk/native_theme_gtk.cc b/ui/gtk/native_theme_gtk.cc
 index a60d6e3..1200a80 100644
 --- a/ui/gtk/native_theme_gtk.cc

diff --git a/chromium-110-kCustomizeChromeColors-type.patch b/chromium-110-kCustomizeChromeColors-type.patch
deleted file mode 100644
index ac214da..0000000
--- a/chromium-110-kCustomizeChromeColors-type.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 3084e834a211e85f6a17e6f8dceb6b44117211d2 Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-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 <tiborg@chromium.org>
-Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
-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<std::size(kCustomizeChromeColorIds)>{});
-+const decltype(kCustomizeChromeColors) kCustomizeChromeColors =
-+    MakeCustomizeChromeColors(
-+        std::make_index_sequence<std::size(kCustomizeChromeColorIds)>{});

diff --git a/chromium-110-limits.patch b/chromium-110-limits.patch
deleted file mode 100644
index 31a4c1e..0000000
--- a/chromium-110-limits.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up chromium-110.0.5481.177/base/memory/ref_counted.h.me chromium-110.0.5481.177/base/memory/ref_counted.h
---- chromium-110.0.5481.177/base/memory/ref_counted.h.me	2023-02-23 13:34:33.174817255 -0500
-+++ chromium-110.0.5481.177/base/memory/ref_counted.h	2023-02-23 13:42:28.646052469 -0500
-@@ -6,6 +6,7 @@
- #define BASE_MEMORY_REF_COUNTED_H_
- 
- #include <stddef.h>
-+#include <limits>
- 
- #include <utility>
- 

diff --git a/chromium-110-raw_ptr-constexpr.patch b/chromium-110-raw_ptr-constexpr.patch
deleted file mode 100644
index ded5855..0000000
--- a/chromium-110-raw_ptr-constexpr.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From bd3af998439424886c641279b6f9bb6e950c7142 Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-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 <bartekn@chromium.org>
-Commit-Queue: Stephan Hartmann <stha09@googlemail.com>
-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 <typename U = T,
-             typename Unused = std::enable_if_t<

diff --git a/chromium-110-url_canon_internal-cast.patch b/chromium-110-url_canon_internal-cast.patch
deleted file mode 100644
index 41064a7..0000000
--- a/chromium-110-url_canon_internal-cast.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 740d1102e3fdaaed5441b5656205df9d7e422c3a Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-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 <stha09@googlemail.com>
-Reviewed-by: Daniel Cheng <dcheng@chromium.org>
-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<uint8x16_t>(mask)) == 0) {
-       return i;
-     }
- #endif

diff --git a/chromium-110-v8-gcc.patch b/chromium-110-v8-gcc.patch
deleted file mode 100644
index 4bca19a..0000000
--- a/chromium-110-v8-gcc.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 15d123009b7e987e946309cd5724ae17f376bd16 Mon Sep 17 00:00:00 2001
-From: Stephan Hartmann <stha09@googlemail.com>
-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 <stha09@googlemail.com>
-Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
-Cr-Commit-Position: refs/heads/main@{#84923}
----
-
-diff --git a/src/base/immediate-crash.h b/src/base/immediate-crash.h
-index 770cb27..ce6240b 100644
---- a/v8/src/base/immediate-crash.h
-+++ b/v8/src/base/immediate-crash.h
-@@ -140,9 +140,9 @@
-     [] { TRAP_SEQUENCE_(); }();  \
-   } while (false)
- 
--#endif  // !V8_CC_GCC
-+#endif  // !V8_CC_GNU
- 
--#if defined(__clang__) || V8_CC_GCC
-+#if defined(__clang__) || V8_CC_GNU
- 
- // __builtin_unreachable() hints to the compiler that this is noreturn and can
- // be packed in the function epilogue.

diff --git a/chromium-111-v8-std-layout1.patch b/chromium-111-v8-std-layout1.patch
deleted file mode 100644
index 95b2633..0000000
--- a/chromium-111-v8-std-layout1.patch
+++ /dev/null
@@ -1,2229 +0,0 @@
-From 472429e623cf48e864a7a2f10d589817a88289a1 Mon Sep 17 00:00:00 2001
-From: Nikolaos Papaspyrou <nikolaos@chromium.org>
-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 <nikolaos@chromium.org>
-Reviewed-by: Omer Katz <omerkatz@chromium.org>
-Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
-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<void*>(stack->base()));
-+  heap()->SetStackStart(reinterpret_cast<void*>(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<Address>(
-       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 <src/heap/base/stack.h>
--
--// 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 <src/heap/base/stack.h>
--
--// 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 <src/heap/base/stack.h>
--
--// 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 <src/heap/base/stack.h>
--
--// 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 <src/heap/base/stack.h>
--
--// 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 <src/heap/base/stack.h>
--
--// 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 <src/heap/base/stack.h>
--
--// 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 <src/heap/base/stack.h>
--
--// 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 <src/heap/base/stack.h>
--
--// 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 <limits>
- 
-+#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<const void*>(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<uintptr_t>(context_->stack_marker) &
--                   (kMinStackAlignment - 1));
--  IteratePointersInStack(
--      visitor, reinterpret_cast<const void* const*>(context_->stack_marker),
--      stack_start_, asan_fake_stack);
-+  CHECK_EQ(0u,
-+           reinterpret_cast<uintptr_t>(stack_end) & (kMinStackAlignment - 1));
-+  IteratePointersInStack(visitor,
-+                         reinterpret_cast<const void* const*>(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<Context>(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 <memory>
-+#include <vector>
- 
- #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<intptr_t, kNumberOfCalleeSavedRegisters> registers;
--  };
-+  static void IteratePointersImpl(const Stack* stack, StackVisitor* visitor,
-+                                  const void* stack_end);
- 
-   const void* stack_start_;
--  std::unique_ptr<Context> 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<v8::Isolate*>(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<EmbedderStackState> 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<size_t> expected_marked_bytes) {
-+    StackState stack_state, const void* stack_end,
-+    v8::base::Optional<size_t> 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<size_t>);
-+  void Run(StackState, const void*, v8::base::Optional<size_t>);
- 
-  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<v8::internal::CppHeap*>(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<ObjectIterator> 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>{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>{SkipRoot::kWeak});
-+  // TODO(v8:11800): The heap snapshot generator incorrectly considers the weak
-+  // string tables as strong retainers. Move IterateWeakRoots after
-+  // SetVisitingWeakRoots.
-+  heap_->IterateWeakRoots(&extractor, {});
-+  extractor.SetVisitingWeakRoots();
-+  heap_->IterateWeakGlobalHandles(&extractor);
-+
-   bool interrupted = false;
- 
-   CombinedHeapObjectIterator iterator(heap_,

diff --git a/chromium-111-v8-std-layout2.patch b/chromium-111-v8-std-layout2.patch
deleted file mode 100644
index db983af..0000000
--- a/chromium-111-v8-std-layout2.patch
+++ /dev/null
@@ -1,198 +0,0 @@
-From 916641c08de44e0a915df223d55781c6c912717c Mon Sep 17 00:00:00 2001
-From: Nikolaos Papaspyrou <nikolaos@chromium.org>
-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<wasm::StackMemory>::cast(
--                                 WasmContinuationObject::cast(current).stack())
--                                 .get()
--                                 .get();
-+  stack().ClearStackSegments();
-+  wasm::StackMemory* wasm_stack =
-+      Managed<wasm::StackMemory>::cast(
-+          WasmContinuationObject::cast(current).stack())
-+          .get()
-+          .get();
-   current = WasmContinuationObject::cast(current).parent();
--  heap()->SetStackStart(reinterpret_cast<void*>(stack->base()));
-+  heap()->SetStackStart(reinterpret_cast<void*>(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<wasm::StackMemory>::cast(cont.stack()).get().get();
--    thread_local_top()->stack_.AddStackSegment(
--        reinterpret_cast<const void*>(stack->base()),
--        reinterpret_cast<const void*>(stack->jmpbuf()->sp));
-+    auto* wasm_stack =
-+        Managed<wasm::StackMemory>::cast(cont.stack()).get().get();
-+    stack().AddStackSegment(
-+        reinterpret_cast<const void*>(wasm_stack->base()),
-+        reinterpret_cast<const void*>(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<Address>(
-       trap_handler::GetThreadInWasmThreadLocalAddress());
--#else
--  stack_.SetStackStart(base::Stack::GetStackStart(), false);
- #endif  // V8_ENABLE_WEBASSEMBLY
- #ifdef USE_SIMULATOR
-   simulator_ = Simulator::current(isolate);
-diff --git a/src/execution/thread-local-top.h b/src/execution/thread-local-top.h
-index 43fec0a..989c817 100644
---- a/v8/src/execution/thread-local-top.h
-+++ b/v8/src/execution/thread-local-top.h
-@@ -10,7 +10,6 @@
- #include "include/v8-unwinder.h"
- #include "src/common/globals.h"
- #include "src/execution/thread-id.h"
--#include "src/heap/base/stack.h"
- #include "src/objects/contexts.h"
- #include "src/utils/utils.h"
- 
-@@ -30,7 +29,7 @@
-   // TODO(all): This is not particularly beautiful. We should probably
-   // refactor this to really consist of just Addresses and 32-bit
-   // integer fields.
--  static constexpr uint32_t kSizeInBytes = 30 * kSystemPointerSize;
-+  static constexpr uint32_t kSizeInBytes = 25 * kSystemPointerSize;
- 
-   // Does early low-level initialization that does not depend on the
-   // isolate being present.
-@@ -147,9 +146,6 @@
- 
-   // Address of the thread-local "thread in wasm" flag.
-   Address thread_in_wasm_flag_address_;
--
--  // Stack information.
--  ::heap::base::Stack stack_;
- };
- 
- }  // namespace internal
-diff --git a/src/heap/heap.cc b/src/heap/heap.cc
-index f4b7da0..6efd486 100644
---- a/v8/src/heap/heap.cc
-+++ b/v8/src/heap/heap.cc
-@@ -5830,9 +5830,7 @@
- #endif  // V8_ENABLE_WEBASSEMBLY
- }
- 
--::heap::base::Stack& Heap::stack() {
--  return isolate_->thread_local_top()->stack_;
--}
-+::heap::base::Stack& Heap::stack() { return isolate_->stack(); }
- 
- void Heap::StartTearDown() {
-   // Finish any ongoing sweeping to avoid stray background tasks still accessing

diff --git a/chromium-94.0.4606.71-InkDropHost-crash.patch b/chromium-94.0.4606.71-InkDropHost-crash.patch
deleted file mode 100644
index b5e2794..0000000
--- a/chromium-94.0.4606.71-InkDropHost-crash.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff -up chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h.InkDropHost-crash chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h
---- chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h.InkDropHost-crash	2021-10-05 16:04:46.313586509 -0400
-+++ chromium-94.0.4606.71/ui/views/animation/ink_drop_host_view.h	2021-10-05 16:05:12.213732558 -0400
-@@ -228,6 +228,11 @@ class VIEWS_EXPORT InkDropHost {
-   // Used to observe View and inform the InkDrop of host-transform changes.
-   ViewLayerTransformObserver host_view_transform_observer_;
- 
-+  // Declared before |ink_drop_|, because InkDropImpl may call
-+  // RemoveInkDropLayer on partly destructed InkDropHost. In
-+  // that case |ink_drop_mask_| must be still valid.
-+  std::unique_ptr<views::InkDropMask> ink_drop_mask_;
-+
-   // Should not be accessed directly. Use GetInkDrop() instead.
-   std::unique_ptr<InkDrop> ink_drop_;
- 
-@@ -249,8 +254,6 @@ class VIEWS_EXPORT InkDropHost {
-   int ink_drop_small_corner_radius_ = 2;
-   int ink_drop_large_corner_radius_ = 4;
- 
--  std::unique_ptr<views::InkDropMask> ink_drop_mask_;
--
-   base::RepeatingCallback<std::unique_ptr<InkDrop>()> create_ink_drop_callback_;
-   base::RepeatingCallback<std::unique_ptr<InkDropRipple>()>
-       create_ink_drop_ripple_callback_;

diff --git a/chromium-v4l2-fix.patch b/chromium-v4l2-fix.patch
deleted file mode 100644
index 1ae7530..0000000
--- a/chromium-v4l2-fix.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-commit e775ac4770bb1e5dfbfe22c5b56752ed4a2317c5
-Author: Hirokazu Honda <hiroh@chromium.org>
-Date:   Tue Jan 17 17:54:02 2023 +0000
-
-    Revert "media/gpu/v4l2VEA,IP: Workaround to USERPTR API against read-only buf"
-    
-    This reverts commit 203fdd03a4317f2eac57161ee101515a82df704f.
-    
-    Reason for revert: This workaround is no longer required because of
-    the kernel patch was reverted.
-    
-    Original change's description:
-    > media/gpu/v4l2VEA,IP: Workaround to USERPTR API against read-only buf
-    >
-    > VideoFrame fed in VEA::Encode() is read-only since R107 if the
-    > VideoFrame has a shared memory. V4L2VideoEncodeAccelerator fails
-    > because VIDOC_QBUF with USERPTR buffer fails if the pointers
-    > references a read-only buffer.
-    > The USERPTR API issue is apparently to be fixed by a kernel side.
-    > In the meantime, this CL adds the workaround to the issue; the read
-    > only buffer is copied to a writable temporary buffer every Encode
-    > before VIDIOC_QBUF.
-    > Not that VideoFrame has a shared memory in the case of screen share
-    > because a camera stack produces GpuMemoryBuffer.
-    >
-    > Bug: b:243883312
-    > Test: video_encode_accelerator_tests on elm, kevin and trogdor
-    > Test: screen share in Google Meet on elm, kevin and trogdor
-    > Change-Id: I922d98eaf52f80d9cd6c3784a8544bffb1232856
-    > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3891421
-    > Reviewed-by: Nathan Hebert <nhebert@chromium.org>
-    > Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
-    > Cr-Commit-Position: refs/heads/main@{#1046659}
-    
-    Bug: b:243883312, b:261660224
-    Change-Id: I6fe37276f2ebe8c8730cfd3dd766b04277b32a67
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4091205
-    Reviewed-by: Nathan Hebert <nhebert@chromium.org>
-    Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
-    Cr-Commit-Position: refs/heads/main@{#1093388}
-
-diff --git a/media/gpu/v4l2/v4l2_image_processor_backend.cc b/media/gpu/v4l2/v4l2_image_processor_backend.cc
-index dc72a4ac060a9..f3049f4546e2e 100644
---- a/media/gpu/v4l2/v4l2_image_processor_backend.cc
-+++ b/media/gpu/v4l2/v4l2_image_processor_backend.cc
-@@ -925,35 +925,16 @@ bool V4L2ImageProcessorBackend::EnqueueInputRecord(
- 
-   switch (input_memory_type_) {
-     case V4L2_MEMORY_USERPTR: {
--      VideoFrame& frame = *job_record->input_frame;
-       const size_t num_planes = V4L2Device::GetNumPlanesOfV4L2PixFmt(
-           input_config_.fourcc.ToV4L2PixFmt());
-       std::vector<void*> user_ptrs(num_planes);
--      if (frame.storage_type() == VideoFrame::STORAGE_SHMEM) {
--        // TODO(b/243883312): This copies the video frame to a writable buffer
--        // since the USERPTR API requires writable permission. Remove this
--        // workaround once the unreasonable permission is fixed.
--        const size_t buffer_size = frame.shm_region()->GetSize();
--        std::vector<uint8_t> writable_buffer(buffer_size);
--        std::memcpy(writable_buffer.data(), frame.data(0), buffer_size);
--        for (size_t i = 0; i < num_planes; ++i) {
--          const std::intptr_t plane_offset =
--              reinterpret_cast<std::intptr_t>(frame.data(i)) -
--              reinterpret_cast<std::intptr_t>(frame.data(0));
--          user_ptrs[i] = writable_buffer.data() + plane_offset;
--        }
--        job_record->input_frame->AddDestructionObserver(base::BindOnce(
--            [](std::vector<uint8_t>) {}, std::move(writable_buffer)));
--      } else {
--        for (size_t i = 0; i < num_planes; ++i)
--          user_ptrs[i] = frame.writable_data(i);
--      }
--
-       for (size_t i = 0; i < num_planes; ++i) {
-         int bytes_used =
--            VideoFrame::PlaneSize(frame.format(), i, input_config_.size)
-+            VideoFrame::PlaneSize(job_record->input_frame->format(), i,
-+                                  input_config_.size)
-                 .GetArea();
-         buffer.SetPlaneBytesUsed(i, bytes_used);
-+        user_ptrs[i] = const_cast<uint8_t*>(job_record->input_frame->data(i));
-       }
-       if (!std::move(buffer).QueueUserPtr(user_ptrs)) {
-         VPLOGF(1) << "Failed to queue a DMABUF buffer to input queue";
-diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
-index 56389ea3eec08..d452ba48a69e2 100644
---- a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
-+++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
-@@ -783,7 +783,7 @@ void V4L2VideoEncodeAccelerator::EncodeTask(scoped_refptr<VideoFrame> frame,
-     const bool is_expected_storage_type =
-         native_input_mode_
-             ? frame->storage_type() == VideoFrame::STORAGE_GPU_MEMORY_BUFFER
--            : frame->storage_type() == VideoFrame::STORAGE_SHMEM;
-+            : frame->IsMappable();
-     if (!is_expected_storage_type) {
-       VLOGF(1) << "Unexpected storage: "
-                << VideoFrame::StorageTypeToString(frame->storage_type());
-@@ -1392,27 +1392,16 @@ bool V4L2VideoEncodeAccelerator::EnqueueInputRecord(
-         NOTIFY_ERROR(kPlatformFailureError);
-       }
- 
--      // TODO(b/243883312): This copies the video frame to a writable buffer
--      // since the USERPTR API requires writable permission. Remove this
--      // workaround once the unreasonable permission is fixed.
--      const size_t buffer_size = frame->shm_region()->GetSize();
--      std::vector<uint8_t> writable_buffer(buffer_size);
--      std::memcpy(writable_buffer.data(), frame->data(0), buffer_size);
-+      // The frame data is readable only and the driver doesn't actually write
-+      // the buffer. But USRPTR buffer needs void*. So const_cast<> is required.
-       std::vector<void*> user_ptrs(num_planes);
-       for (size_t i = 0; i < num_planes; ++i) {
--        const std::intptr_t plane_offset =
--            reinterpret_cast<std::intptr_t>(frame->data(i)) -
--            reinterpret_cast<std::intptr_t>(frame->data(0));
--        user_ptrs[i] = writable_buffer.data() + plane_offset;
-+        user_ptrs[i] = const_cast<uint8_t*>(frame->data(i));
-       }
--
-       if (!std::move(input_buf).QueueUserPtr(std::move(user_ptrs))) {
--        VPLOGF(1) << "Failed to queue a USRPTR buffer to input queue";
--        NOTIFY_ERROR(kPlatformFailureError);
-+        VPLOGF(1) << "Failed queue a USRPTR buffer to input queue";
-         return false;
-       }
--      frame->AddDestructionObserver(
--          base::DoNothingWithBoundArgs(std::move(writable_buffer)));
-       break;
-     }
-     case V4L2_MEMORY_DMABUF: {
-@@ -1421,6 +1410,7 @@ bool V4L2VideoEncodeAccelerator::EnqueueInputRecord(
-         VPLOGF(1) << "Failed queue a DMABUF buffer to input queue";
-         return false;
-       }
-+
-       // Keep |gmb_handle| alive as long as |frame| is alive so that fds passed
-       // to the driver are valid during encoding.
-       frame->AddDestructionObserver(base::BindOnce(

diff --git a/chromium.spec b/chromium.spec
index 94535f3..44e9b54 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -190,8 +190,6 @@
 %global bundlelibwebp 0
 %global bundlelibpng 0
 %global bundlelibjpeg 0
-# Needs FT_ClipBox which was implemented after 2.11.0. Should be able to set this back to 0 later.
-%global bundlefreetype 1
 %global bundlelibdrm 0
 %global bundlefontconfig 0
 %global bundleffmpegfree 0
@@ -201,6 +199,12 @@
 %else
 %global bundlelibaom 0
 %endif
+# system freetype on fedora > 36
+%if 0%{?fedora} > 36
+%global bundlefreetype 0
+%else
+%global bundlefreetype 1
+%endif
 %endif
 
 ### From 2013 until early 2021, Google permitted distribution builds of
@@ -237,7 +241,7 @@
 %endif
 
 Name:	chromium%{chromium_channel}
-Version: 110.0.5481.177
+Version: 111.0.5563.50
 Release: 1%{?dist}
 Summary: A WebKit (Blink) powered web browser that Google doesn't want you to use
 Url: http://www.chromium.org/Home
@@ -274,9 +278,6 @@ Patch11: chromium-93.0.4577.63-py3-bootstrap.patch
 # Add "Fedora" to the user agent string
 Patch12: chromium-101.0.4951.41-fedora-user-agent.patch
 
-# numeric_limits is not a member of std
-Patch13: chromium-110-limits.patch
-
 # debian patch, disable font-test 
 Patch20: chromium-disable-font-tests.patch
 
@@ -292,9 +293,6 @@ Patch57: chromium-96.0.4664.45-missing-cstring.patch
 # Fix headers to look for system paths when we are using system minizip
 Patch61: chromium-109-system-minizip-header-fix.patch
 
-# Update bundled copy of wayland-client-core.h
-Patch62: chromium-105.0.5195.52-update-wayland-client-core.patch
-
 # Fix issue where closure_compiler thinks java is only allowed in android builds
 # https://bugs.chromium.org/p/chromium/issues/detail?id=1192875
 Patch65: chromium-91.0.4472.77-java-only-allowed-in-android-builds.patch
@@ -321,9 +319,6 @@ Patch91: chromium-108-system-opus.patch
 # fix prefers-color-scheme
 Patch92: chromium-110-gtktheme.patch
 
-# From gentoo
-Patch98: chromium-94.0.4606.71-InkDropHost-crash.patch
-
 # need to explicitly include a kernel header on EL7 to support MFD_CLOEXEC, F_SEAL_SHRINK, F_ADD_SEALS, F_SEAL_SEAL
 Patch100: chromium-108-el7-include-fcntl-memfd.patch
 
@@ -369,21 +364,6 @@ Patch122: chromium-109-gcc13.patch
 
 # Patches by Stephan Hartmann, https://github.com/stha09/chromium-patches
 Patch130: chromium-103-VirtualCursor-std-layout.patch
-Patch131: chromium-110-CanvasResourceProvider-pragma.patch
-Patch132: chromium-110-CredentialUIEntry-const.patch
-Patch133: chromium-110-DarkModeLABColorSpace-pow.patch
-Patch134: chromium-110-dpf-arm64.patch
-Patch135: chromium-110-InProgressDownloadManager-include.patch
-Patch136: chromium-110-kCustomizeChromeColors-type.patch
-Patch137: chromium-110-NativeThemeBase-fabs.patch
-Patch138: chromium-110-Presenter-include.patch
-Patch139: chromium-110-raw_ptr-constexpr.patch
-Patch140: chromium-110-StorageQueue-decltype.patch
-Patch141: chromium-110-SyncIterator-template.patch
-Patch142: chromium-110-url_canon_internal-cast.patch
-Patch143: chromium-110-v8-gcc.patch
-Patch144: chromium-111-v8-std-layout1.patch
-Patch145: chromium-111-v8-std-layout2.patch
 
 Patch146: chromium-110-LargerThan4k.patch
 
@@ -393,10 +373,6 @@ Patch202: chromium-104.0.5112.101-enable-hardware-accelerated-mjpeg.patch
 Patch205: chromium-86.0.4240.75-fix-vaapi-on-intel.patch
 Patch206: chromium-110-ozone-wayland-vaapi-support.patch
 
-# V4L2
-# Upstream
-Patch250: chromium-v4l2-fix.patch
-
 # Apply these patches to work around EPEL8 issues
 Patch300: chromium-99.0.4844.51-rhel8-force-disable-use_gnome_keyring.patch
 
@@ -909,8 +885,8 @@ without support for alsa, cups, dbus, gconf, gio, kerberos, pulseaudio, or
 udev.
 
 %prep
-
 %setup -q -n chromium-%{version}
+
 ### Chromium Fedora Patches ###
 %patch0 -p1 -b .sandboxpie
 %patch1 -p1 -b .etc
@@ -922,13 +898,6 @@ udev.
 %patch9 -p1 -b .widevine-no-download
 %patch11 -p1 -b .py3
 
-# Fedora branded user agent
-%if 0%{?fedora}
-%patch12 -p1 -b .fedora-user-agent
-%endif
-
-%patch13 -p1 -b .limits
-
 %patch20 -p1 -b .disable-font-test
 
 %if 0%{?fedora} || 0%{?rhel} >= 8
@@ -959,7 +928,10 @@ udev.
 
 %patch92 -p1 -b .gtk-prefers-color-scheme
 
-%patch98 -p1 -b .InkDropHost-crash
+# Fedora branded user agent
+%if 0%{?fedora}
+%patch12 -p1 -b .fedora-user-agent
+%endif
 
 %if ! %{bundleffmpegfree}
 %patch114 -p1 -b .system-ffmppeg
@@ -986,21 +958,6 @@ udev.
 %endif
 
 %patch130 -p1 -b .VirtualCursor-std-layout
-%patch131 -p1 -b .CanvasResourceProvider-pragma
-%patch132 -p1 -b .CredentialUIEntry-const
-%patch133 -p1 -b .DarkModeLABColorSpace-pow
-%patch134 -p1 -b .dpf-arm64
-%patch135 -p1 -b .InProgressDownloadManager-include
-%patch136 -p1 -b .kCustomizeChromeColors-type
-%patch137 -p1 -b .NativeThemeBase-fabs
-%patch138 -p1 -b .Presenter-include
-%patch139 -p1 -b .raw_ptr-constexpr
-%patch140 -p1 -b .StorageQueue-decltype
-%patch141 -p1 -b .SyncIterator-template
-%patch142 -p1 -b .url_canon_internal-cast
-%patch143 -p1 -b .v8-gcc
-%patch144 -p1 -b .v8-std-layout1
-%patch145 -p1 -b .v8-std-layout2
 
 %patch146 -p1 -b .LargerThan4k
 
@@ -1017,10 +974,6 @@ udev.
 %patch206 -p1 -b .wayland-vaapi
 %endif
 
-%if %{use_v4l2_codec}
-%patch250 -p1 -b .v4l2-fix
-%endif
-
 %if 0%{?rhel} >= 8
 %patch300 -p1 -b .disblegnomekeyring
 %endif
@@ -1184,12 +1137,6 @@ CHROMIUM_CORE_GN_DEFINES+=' enable_vr=false'
 CHROMIUM_CORE_GN_DEFINES+=' build_dawn_tests=false enable_perfetto_unittests=false'
 CHROMIUM_CORE_GN_DEFINES+=' disable_fieldtrial_testing_config=true'
 CHROMIUM_CORE_GN_DEFINES+=' blink_symbol_level=0 symbol_level=0 v8_symbol_level=0'
-%ifarch aarch64
-%if 0%{?rhel} == 8
-# workaround crash on el8
-CHROMIUM_CORE_GN_DEFINES+=' use_partition_alloc_as_malloc=false enable_backup_ref_ptr_support=false'
-%endif
-%endif
 export CHROMIUM_CORE_GN_DEFINES
 
 # browser gn defines
@@ -1597,11 +1544,11 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
 %{chromium_path}/libclearkeycdm.so
 %endif
 %ifarch x86_64 aarch64
-%{chromium_path}/libEGL.so*
-%{chromium_path}/libGLESv2.so*
 %{chromium_path}/libvk_swiftshader.so*
 %{chromium_path}/libvulkan.so*
 %{chromium_path}/vk_swiftshader_icd.json
+%{chromium_path}/libEGL.so*
+%{chromium_path}/libGLESv2.so*
 %endif
 %{chromium_path}/icudtl.dat
 %dir %{chromium_path}/
@@ -1703,6 +1650,10 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
 %{chromium_path}/chromedriver
 
 %changelog
+* Mon Mar 06 2023 Than Ngo <than@redhat.com> - 111.0.5563.50-1
+- update to 111.0.5563.50
+- system freetype on fedora > 36
+
 * Thu Feb 23 2023 Than Ngo <than@redhat.com> - 110.0.5481.177-1
 - update to 110.0.5481.177
 - workaround for crash on aarch64, rhel8

diff --git a/sources b/sources
index 9aca39c..7f2d4f8 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
 SHA512 (node-v16.17.0-linux-x64.tar.xz) = aedfeeb71420a7fbcb07fbc4c5d2ba74ffe4f88c15998809346a84148132ec866dbae4e848531a2a77ca41413f442e1046f981d4f188bdf667faf88069aa28cd
 SHA512 (node-v16.17.0-linux-arm64.tar.xz) = ae4aabc2389779c9e1b4a15622cae3ba50e0c313ca3d7a1dc7b2344df06ade1f303d6a75b941d37e2a0ef368cf047c862a822a893684494f55446afd6ab0610e
-SHA512 (chromium-110.0.5481.177-clean.tar.xz) = 3cc3fe325bf773e5da9137272741eda61ca620289a27c1bc16cd3e165f5adc6ebaa00139351c324fcc491497e47659188673edd9b7fd33a2771636d153b69213
+SHA512 (chromium-111.0.5563.50-clean.tar.xz) = 4576e080a55cc1dabf65e14d5380310ee93bfe50e40823adb963bf47d3bbe668b39ef41c3f5e7b8c2aebc8161915926a2f6b37c39cc0289898e515e600743e3c

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-07 16:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-07 16:04 [rpms/chromium] epel9-next: Merge #32 `Fix for systems with page size larger than 4k` Tom Callaway

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox