Browse Source

uppkg -> 110.0.5481.100-1

Noah Vogt 2 years ago
parent
commit
cf853384b1

+ 65 - 37
PKGBUILD

@@ -10,10 +10,11 @@
 # Contributor: Daniel J Griffiths <ghost1227@archlinux.us>
 # Contributor: Daniel J Griffiths <ghost1227@archlinux.us>
 
 
 pkgname=ungoogled-chromium-xdg
 pkgname=ungoogled-chromium-xdg
-pkgver=108.0.5359.124
+pkgver=110.0.5481.100
 pkgrel=1
 pkgrel=1
 _launcher_ver=8
 _launcher_ver=8
 _gcc_patchset=2
 _gcc_patchset=2
+_manual_clone=0
 pkgdesc="A lightweight approach to removing Google web service dependency - without creating a useless ~/.pki directory"
 pkgdesc="A lightweight approach to removing Google web service dependency - without creating a useless ~/.pki directory"
 arch=('x86_64')
 arch=('x86_64')
 url="https://github.com/ungoogled-software/ungoogled-chromium"
 url="https://github.com/ungoogled-software/ungoogled-chromium"
@@ -28,13 +29,12 @@ optdepends=('pipewire: WebRTC desktop sharing under Wayland'
             'qt5-base: enable Qt5 with --enable-features=AllowQt'
             'qt5-base: enable Qt5 with --enable-features=AllowQt'
             'org.freedesktop.secrets: password storage backend on GNOME / Xfce'
             'org.freedesktop.secrets: password storage backend on GNOME / Xfce'
             'kwallet: support for storing passwords in KWallet on Plasma')
             'kwallet: support for storing passwords in KWallet on Plasma')
-options=('debug' '!lto') # Chromium adds its own flags for ThinLTO
+options=('!lto') # Chromium adds its own flags for ThinLTO
 source=(https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$pkgver.tar.xz
 source=(https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$pkgver.tar.xz
         https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver/chromium-launcher-$_launcher_ver.tar.gz
         https://github.com/foutrelis/chromium-launcher/archive/v$_launcher_ver/chromium-launcher-$_launcher_ver.tar.gz
         https://github.com/stha09/chromium-patches/releases/download/chromium-${pkgver%%.*}-patchset-$_gcc_patchset/chromium-${pkgver%%.*}-patchset-$_gcc_patchset.tar.xz
         https://github.com/stha09/chromium-patches/releases/download/chromium-${pkgver%%.*}-patchset-$_gcc_patchset/chromium-${pkgver%%.*}-patchset-$_gcc_patchset.tar.xz
-        re-fix-TFLite-build-error-on-linux-with-system-zlib.patch
-        chromium-icu72.patch
-        v8-enhance-Date-parser-to-take-Unicode-SPACE.patch
+        fix-the-way-to-handle-codecs-in-the-system-icu.patch
+        v8-move-the-Stack-object-from-ThreadLocalTop.patch
         REVERT-roll-src-third_party-ffmpeg-m102.patch
         REVERT-roll-src-third_party-ffmpeg-m102.patch
         REVERT-roll-src-third_party-ffmpeg-m106.patch
         REVERT-roll-src-third_party-ffmpeg-m106.patch
         disable-GlobalMediaControlsCastStartStop.patch
         disable-GlobalMediaControlsCastStartStop.patch
@@ -43,12 +43,11 @@ source=(https://commondatastorage.googleapis.com/chromium-browser-official/chrom
         xdg-basedir.patch
         xdg-basedir.patch
         no-omnibox-suggestion-autocomplete.patch
         no-omnibox-suggestion-autocomplete.patch
         index.html)
         index.html)
-sha256sums=('d48dfac2a61b14a5d7d2f460b09b70ef3ab88e27b82e3173938cb54eaa612a75'
+sha256sums=('6d870d690c1f2c41a288011b0149752681077f1459ebe7a4f9215dbfde21f633'
             '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a'
             '213e50f48b67feb4441078d50b0fd431df34323be15be97c55302d3fdac4483a'
-            '40ef8af65e78901bb8554eddbbb5ebc55c0b8e7927f6ca51b2a353d1c7c50652'
-            '9015b9d6d5b4c1e7248d6477a4b4b6bd6a3ebdc57225d2d8efcd79fc61790716'
-            'dabb5ab204b63be73d3c5c8b7c1fa74053105a285852ba3bbc4fb77646608572'
-            'b83406a881d66627757d9cbc05e345cbb2bd395a48b6d4c970e5e1cb3f6ed454'
+            '8c7f93037cc236024cc8be815b2c2bd84f6dc9e32685299e31d4c6c42efde8b7'
+            'a5d5c532b0b059895bc13aaaa600d21770eab2afa726421b78cb597a78a3c7e3'
+            '49c3e599366909ddac6a50fa6f9420e01a7c0ffd029a20567a41d741a15ec9f7'
             '30df59a9e2d95dcb720357ec4a83d9be51e59cc5551365da4c0073e68ccdec44'
             '30df59a9e2d95dcb720357ec4a83d9be51e59cc5551365da4c0073e68ccdec44'
             '4c12d31d020799d31355faa7d1fe2a5a807f7458e7f0c374adf55edb37032152'
             '4c12d31d020799d31355faa7d1fe2a5a807f7458e7f0c374adf55edb37032152'
             '7f3b1b22d6a271431c1f9fc92b6eb49c6d80b8b3f868bdee07a6a1a16630a302'
             '7f3b1b22d6a271431c1f9fc92b6eb49c6d80b8b3f868bdee07a6a1a16630a302'
@@ -57,6 +56,12 @@ sha256sums=('d48dfac2a61b14a5d7d2f460b09b70ef3ab88e27b82e3173938cb54eaa612a75'
             'cd844867b5b2197ad097662fee32579a7091dfba1d46cb438c4c7e696690440a'
             'cd844867b5b2197ad097662fee32579a7091dfba1d46cb438c4c7e696690440a'
             'ff1591fa38e0ede7e883dc7494b813641b7a1a7cb1ded00d9baaee987c1dbea8'
             'ff1591fa38e0ede7e883dc7494b813641b7a1a7cb1ded00d9baaee987c1dbea8'
             'a4cdd2b86f32d5302c2792be841ff40d982b19bb58a4e63df9d77f4c706b8665')
             'a4cdd2b86f32d5302c2792be841ff40d982b19bb58a4e63df9d77f4c706b8665')
+
+if (( _manual_clone )); then
+  source[0]=fetch-chromium-release
+  makedepends+=('python-httplib2' 'python-pyparsing' 'python-six')
+fi
+
 provides=('chromium')
 provides=('chromium')
 conflicts=('chromium')
 conflicts=('chromium')
 _uc_usr=ungoogled-software
 _uc_usr=ungoogled-software
@@ -64,13 +69,13 @@ _uc_ver=$pkgver-1
 source=(${source[@]}
 source=(${source[@]}
         ${pkgname%-*}-$_uc_ver.tar.gz::https://github.com/$_uc_usr/ungoogled-chromium/archive/$_uc_ver.tar.gz
         ${pkgname%-*}-$_uc_ver.tar.gz::https://github.com/$_uc_usr/ungoogled-chromium/archive/$_uc_ver.tar.gz
         ozone-add-va-api-support-to-wayland.patch
         ozone-add-va-api-support-to-wayland.patch
-        remove-main-main10-profile-limit.patch
-        chromium-drirc-disable-10bpc-color-configs.conf)
+        vaapi-add-av1-support.patch
+        remove-main-main10-profile-limit.patch)
 sha256sums=(${sha256sums[@]}
 sha256sums=(${sha256sums[@]}
-            'ac71aa130e70bcb5b30fc5f899239851b4bff05938cf4fe6d3f8c2da04e85f70'
+            '994a7241ed09e98337832628f145ee21265d81c7c5ed2a5099dfb7e11b01ee18'
             'e9e8d3a82da818f0a67d4a09be4ecff5680b0534d7f0198befb3654e9fab5b69'
             'e9e8d3a82da818f0a67d4a09be4ecff5680b0534d7f0198befb3654e9fab5b69'
-            'fc810e3c495c77ac60b383a27e48cf6a38b4a95b65dd2984baa297c5df83133c'
-            'babda4f5c1179825797496898d77334ac067149cac03d797ab27ac69671a7feb')
+            'e742cc5227b6ad6c3e0c2026edd561c6d3151e7bf0afb618578ede181451b307'
+            'fc810e3c495c77ac60b383a27e48cf6a38b4a95b65dd2984baa297c5df83133c')
 
 
 # Possible replacements are listed in build/linux/unbundle/replace_gn_files.py
 # Possible replacements are listed in build/linux/unbundle/replace_gn_files.py
 # Keys are the names in the above script; values are the dependencies in Arch
 # Keys are the names in the above script; values are the dependencies in Arch
@@ -83,10 +88,10 @@ declare -gA _system_libs=(
   [freetype]=freetype2
   [freetype]=freetype2
   [harfbuzz-ng]=harfbuzz
   [harfbuzz-ng]=harfbuzz
   [icu]=icu
   [icu]=icu
-  [libdrm]=
   [jsoncpp]=jsoncpp
   [jsoncpp]=jsoncpp
   [libaom]=aom
   [libaom]=aom
-  [libavif]=libavif
+  #[libavif]=libavif # https://github.com/AOMediaCodec/libavif/commit/4d2776a3
+  [libdrm]=
   [libjpeg]=libjpeg
   [libjpeg]=libjpeg
   [libpng]=libpng
   [libpng]=libpng
   #[libvpx]=libvpx
   #[libvpx]=libvpx
@@ -104,7 +109,18 @@ _unwanted_bundled_libs=(
 )
 )
 depends+=(${_system_libs[@]})
 depends+=(${_system_libs[@]})
 
 
+# Google API keys (see https://www.chromium.org/developers/how-tos/api-keys)
+# Note: These are for Arch Linux use ONLY. For your own distribution, please
+# get your own set of keys.
+#
+# Starting with Chromium 89 (2021-03-02) the OAuth2 credentials have been left
+# out: https://archlinux.org/news/chromium-losing-sync-support-in-early-march/
+_google_api_key=AIzaSyDwr302FpOSkGRpLlUpPThNTDPbXcIn_FM
+
 prepare() {
 prepare() {
+  if (( _manual_clone )); then
+    ./fetch-chromium-release $pkgver
+  fi
   cd "$srcdir/chromium-$pkgver"
   cd "$srcdir/chromium-$pkgver"
 
 
   # Allow building against system libraries in official builds
   # Allow building against system libraries in official builds
@@ -124,9 +140,12 @@ prepare() {
   patch -Np1 -i ../use-oauth2-client-switches-as-default.patch
   patch -Np1 -i ../use-oauth2-client-switches-as-default.patch
 
 
    # Upstream fixes
    # Upstream fixes
-  patch -Np1 -i ../chromium-icu72.patch
-  patch -Np1 -d v8 <../v8-enhance-Date-parser-to-take-Unicode-SPACE.patch
-  patch -Np1 -i ../re-fix-TFLite-build-error-on-linux-with-system-zlib.patch
+  patch -Np1 -i ../fix-the-way-to-handle-codecs-in-the-system-icu.patch
+
+  # https://crbug.com/v8/13630
+  # https://crrev.com/c/4200636
+  # https://github.com/nodejs/node/pull/46125#issuecomment-1407721276
+  patch -Np1 -d v8 <../v8-move-the-Stack-object-from-ThreadLocalTop.patch
 
 
   # Revert ffmpeg roll requiring new channel layout API support
   # Revert ffmpeg roll requiring new channel layout API support
   # https://crbug.com/1325301
   # https://crbug.com/1325301
@@ -138,11 +157,16 @@ prepare() {
   # https://crbug.com/1314342
   # https://crbug.com/1314342
   patch -Np1 -i ../disable-GlobalMediaControlsCastStartStop.patch
   patch -Np1 -i ../disable-GlobalMediaControlsCastStartStop.patch
 
 
-  # https://crbug.com/angleproject/7582
-  patch -Np0 -i ../angle-wayland-include-protocol.patch
-
   # Fixes for building with libstdc++ instead of libc++
   # Fixes for building with libstdc++ instead of libc++
   patch -Np1 -i ../patches/chromium-103-VirtualCursor-std-layout.patch
   patch -Np1 -i ../patches/chromium-103-VirtualCursor-std-layout.patch
+  patch -Np1 -i ../patches/chromium-110-NativeThemeBase-fabs.patch
+  patch -Np1 -i ../patches/chromium-110-CredentialUIEntry-const.patch
+  patch -Np1 -i ../patches/chromium-110-DarkModeLABColorSpace-pow.patch
+
+  # Custom Patches
+  patch -Np1 -i ../ozone-add-va-api-support-to-wayland.patch
+  patch -Np1 -i ../remove-main-main10-profile-limit.patch
+  patch -Np1 -i ../vaapi-add-av1-support.patch
 
 
   # move ~/.pki directory to ${XDG_DATA_HOME:-$HOME/.local}/share/pki
   # move ~/.pki directory to ${XDG_DATA_HOME:-$HOME/.local}/share/pki
   patch -p1 -i ../xdg-basedir.patch
   patch -p1 -i ../xdg-basedir.patch
@@ -152,14 +176,14 @@ prepare() {
   # called 'shoulder surfing').
   # called 'shoulder surfing').
   patch -p1 -i ../no-omnibox-suggestion-autocomplete.patch
   patch -p1 -i ../no-omnibox-suggestion-autocomplete.patch
 
 
-  # Enable vaapi on wayland
-  patch -Np1 -i ../ozone-add-va-api-support-to-wayland.patch
-
   # Ungoogled Chromium changes
   # Ungoogled Chromium changes
   _ungoogled_repo="$srcdir/${pkgname%xdg*}$_uc_ver"
   _ungoogled_repo="$srcdir/${pkgname%xdg*}$_uc_ver"
   _utils="${_ungoogled_repo}/utils"
   _utils="${_ungoogled_repo}/utils"
+  msg2 'Pruning binaries'
   python "$_utils/prune_binaries.py" ./ "$_ungoogled_repo/pruning.list"
   python "$_utils/prune_binaries.py" ./ "$_ungoogled_repo/pruning.list"
+  msg2 'Applying patches'
   python "$_utils/patches.py" apply ./ "$_ungoogled_repo/patches"
   python "$_utils/patches.py" apply ./ "$_ungoogled_repo/patches"
+  msg2 'Applying domain substitution'
   python "$_utils/domain_substitution.py" apply -r "$_ungoogled_repo/domain_regex.list" \
   python "$_utils/domain_substitution.py" apply -r "$_ungoogled_repo/domain_regex.list" \
     -f "$_ungoogled_repo/domain_substitution.list" -c domainsubcache.tar.gz ./
     -f "$_ungoogled_repo/domain_substitution.list" -c domainsubcache.tar.gz ./
 
 
@@ -198,10 +222,12 @@ build() {
   local _flags=(
   local _flags=(
     'custom_toolchain="//build/toolchain/linux/unbundle:default"'
     'custom_toolchain="//build/toolchain/linux/unbundle:default"'
     'host_toolchain="//build/toolchain/linux/unbundle:default"'
     'host_toolchain="//build/toolchain/linux/unbundle:default"'
+    'clang_base_path="/usr"'
+    'clang_use_chrome_plugins=false'
     'is_official_build=true' # implies is_cfi=true on x86_64
     'is_official_build=true' # implies is_cfi=true on x86_64
     'symbol_level=0' # sufficient for backtraces on x86(_64)
     'symbol_level=0' # sufficient for backtraces on x86(_64)
-    'clang_base_path="/usr"'
-    'chrome_pgo_phase=0' # needs newer clang to read the bundled PGO profile
+    #'chrome_pgo_phase=0' # needs newer clang to read the bundled PGO profile
+    'treat_warnings_as_errors=false'
     'disable_fieldtrial_testing_config=true'
     'disable_fieldtrial_testing_config=true'
     'blink_enable_generated_code_formatting=false'
     'blink_enable_generated_code_formatting=false'
     'ffmpeg_branding="Chrome"'
     'ffmpeg_branding="Chrome"'
@@ -211,18 +237,23 @@ build() {
     'use_custom_libcxx=false'
     'use_custom_libcxx=false'
     'use_gnome_keyring=false'
     'use_gnome_keyring=false'
     'use_sysroot=false'
     'use_sysroot=false'
-    'use_system_libwayland=true'
-    'use_system_wayland_scanner=true'
-    'use_custom_libcxx=false'
+    'use_system_libffi=true'
+    'enable_hangout_services_extension=true'
     'enable_widevine=true'
     'enable_widevine=true'
-    'enable_platform_hevc=true'
-    'enable_hevc_parser_and_hw_decoder=true'
+    'enable_nacl=false'
+    "google_api_key=\"$_google_api_key\""
   )
   )
 
 
   if [[ -n ${_system_libs[icu]+set} ]]; then
   if [[ -n ${_system_libs[icu]+set} ]]; then
     _flags+=('icu_use_data_file=false')
     _flags+=('icu_use_data_file=false')
   fi
   fi
 
 
+  # enable HEVC decoding
+  _flags+=(
+    'enable_platform_hevc=true'
+    'enable_hevc_parser_and_hw_decoder=true'
+  )
+
   # Append ungoogled chromium flags to _flags array
   # Append ungoogled chromium flags to _flags array
   _ungoogled_repo="$srcdir/${pkgname%xdg*}$_uc_ver"
   _ungoogled_repo="$srcdir/${pkgname%xdg*}$_uc_ver"
   readarray -t -O ${#_flags[@]} _flags < "${_ungoogled_repo}/flags.gn"
   readarray -t -O ${#_flags[@]} _flags < "${_ungoogled_repo}/flags.gn"
@@ -270,9 +301,6 @@ package() {
   install -D out/Release/chromedriver "$pkgdir/usr/bin/chromedriver"
   install -D out/Release/chromedriver "$pkgdir/usr/bin/chromedriver"
   install -Dm4755 out/Release/chrome_sandbox "$pkgdir/usr/lib/chromium/chrome-sandbox"
   install -Dm4755 out/Release/chrome_sandbox "$pkgdir/usr/lib/chromium/chrome-sandbox"
 
 
-  install -Dm644 ../chromium-drirc-disable-10bpc-color-configs.conf \
-    "$pkgdir/usr/share/drirc.d/10-$pkgname.conf"
-
   install -Dm644 chrome/installer/linux/common/desktop.template \
   install -Dm644 chrome/installer/linux/common/desktop.template \
     "$pkgdir/usr/share/applications/chromium.desktop"
     "$pkgdir/usr/share/applications/chromium.desktop"
   install -Dm644 chrome/app/resources/manpage.1.in \
   install -Dm644 chrome/app/resources/manpage.1.in \
@@ -297,8 +325,8 @@ package() {
     chrome_100_percent.pak
     chrome_100_percent.pak
     chrome_200_percent.pak
     chrome_200_percent.pak
     chrome_crashpad_handler
     chrome_crashpad_handler
-    resources.pak
     libqt5_shim.so
     libqt5_shim.so
+    resources.pak
     v8_context_snapshot.bin
     v8_context_snapshot.bin
 
 
     # ANGLE
     # ANGLE

+ 60 - 0
fix-the-way-to-handle-codecs-in-the-system-icu.patch

@@ -0,0 +1,60 @@
+From 4885090741554be61cb2ed10194cefb29bf8be64 Mon Sep 17 00:00:00 2001
+From: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+Date: Wed, 11 Jan 2023 23:51:39 +0000
+Subject: [PATCH] Fix the way to handle codecs in the system icu.
+
+The previous code does not register codecs whose standard name is
+different from the bundled ICU.  As a result, looking up such codecs
+seems to fail unexpectedly.
+
+Bug: 1382032
+Change-Id: I8a61f77d0f70104415d24dd954b3b7061ffca556
+Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4154277
+Reviewed-by: Kent Tamura <tkent@chromium.org>
+Commit-Queue: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+Cr-Commit-Position: refs/heads/main@{#1091571}
+---
+ .../renderer/platform/wtf/text/text_codec_icu.cc   | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc b/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc
+index a70b359984f..33ce43f3563 100644
+--- a/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc
++++ b/third_party/blink/renderer/platform/wtf/text/text_codec_icu.cc
+@@ -116,6 +116,10 @@ void TextCodecICU::RegisterEncodingNames(EncodingNameRegistrar registrar) {
+       continue;
+     }
+ #endif
++    // Avoid codecs supported by `TextCodecCJK`.
++    if (is_text_codec_cjk_enabled && TextCodecCJK::IsSupported(standard_name)) {
++      continue;
++    }
+ 
+ // A number of these aliases are handled in Chrome's copy of ICU, but
+ // Chromium can be compiled with the system ICU.
+@@ -144,12 +148,13 @@ void TextCodecICU::RegisterEncodingNames(EncodingNameRegistrar registrar) {
+     }
+ #endif
+ 
+-    if (is_text_codec_cjk_enabled && TextCodecCJK::IsSupported(standard_name)) {
+-      continue;
++    // Avoid registering codecs registered by
++    // `TextCodecCJK::RegisterEncodingNames`.
++    if (!is_text_codec_cjk_enabled ||
++        !TextCodecCJK::IsSupported(standard_name)) {
++      registrar(standard_name, standard_name);
+     }
+ 
+-    registrar(standard_name, standard_name);
+-
+     uint16_t num_aliases = ucnv_countAliases(name, &error);
+     DCHECK(U_SUCCESS(error));
+     if (U_SUCCESS(error))
+@@ -289,6 +294,7 @@ void TextCodecICU::RegisterCodecs(TextCodecRegistrar registrar) {
+       continue;
+     }
+ #endif
++    // Avoid codecs supported by `TextCodecCJK`.
+     if (is_text_codec_cjk_enabled && TextCodecCJK::IsSupported(standard_name)) {
+       continue;
+     }

+ 205 - 0
v8-move-the-Stack-object-from-ThreadLocalTop.patch

@@ -0,0 +1,205 @@
+From 7b6fbcd0a6700db498ad55db046ecda92c8ee8c1 Mon Sep 17 00:00:00 2001
+From: Nikolaos Papaspyrou <nikolaos@chromium.org>
+Date: Sun, 29 Jan 2023 17:18:08 +0100
+Subject: [PATCH] Merge: [heap] Move the Stack object from ThreadLocalTop to
+ Isolate
+
+This is just for nodejs, do not backmerge to 11.0.
+(cherry picked from commit 1e4b71d99fea5ea6bb4bf6420585a7819872bb0f)
+
+> Change-Id: I026a35af3bc6999a09b21f277756d4454c086343
+> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4152476
+> Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
+> Reviewed-by: Omer Katz <omerkatz@chromium.org>
+> Commit-Queue: Nikolaos Papaspyrou <nikolaos@chromium.org>
+> Cr-Commit-Position: refs/heads/main@{#85445}
+
+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: I4be1f04fe90699e1a6e456dad3e0dd623851acce
+---
+ src/execution/isolate.cc          | 36 +++++++++++++++----------------
+ src/execution/isolate.h           |  6 ++++++
+ src/execution/thread-local-top.cc |  2 --
+ src/execution/thread-local-top.h  |  6 +-----
+ src/heap/heap.cc                  |  4 +---
+ 5 files changed, 25 insertions(+), 29 deletions(-)
+
+diff --git a/src/execution/isolate.cc b/src/execution/isolate.cc
+index 4edf364e0a..be4fd400d2 100644
+--- a/src/execution/isolate.cc
++++ b/src/execution/isolate.cc
+@@ -3074,22 +3074,23 @@ void Isolate::AddSharedWasmMemory(Handle<WasmMemoryObject> memory_object) {
+ 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();
+-  thread_local_top()->stack_.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();
+   }
+ }
+@@ -3377,20 +3378,13 @@ void Isolate::Delete(Isolate* isolate) {
+   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());
++  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
+@@ -4647,6 +4641,10 @@ bool Isolate::Init(SnapshotData* startup_snapshot_data,
+ 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 a32f999fe5..1cb6e10661 100644
+--- a/src/execution/isolate.h
++++ b/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"
+@@ -2022,6 +2023,8 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory {
+   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
+@@ -2520,6 +2523,9 @@ class V8_EXPORT_PRIVATE Isolate final : private HiddenFactory {
+   // 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 0d7071ddda..05cc20b8e4 100644
+--- a/src/execution/thread-local-top.cc
++++ b/src/execution/thread-local-top.cc
+@@ -37,14 +37,12 @@ void ThreadLocalTop::Clear() {
+   current_embedder_state_ = nullptr;
+   failed_access_check_callback_ = nullptr;
+   thread_in_wasm_flag_address_ = kNullAddress;
+-  stack_ = ::heap::base::Stack();
+ }
+ 
+ void ThreadLocalTop::Initialize(Isolate* isolate) {
+   Clear();
+   isolate_ = isolate;
+   thread_id_ = ThreadId::Current();
+-  stack_.SetStackStart(base::Stack::GetStackStart());
+ #if V8_ENABLE_WEBASSEMBLY
+   thread_in_wasm_flag_address_ = reinterpret_cast<Address>(
+       trap_handler::GetThreadInWasmThreadLocalAddress());
+diff --git a/src/execution/thread-local-top.h b/src/execution/thread-local-top.h
+index 43fec0a7df..989c817f31 100644
+--- a/src/execution/thread-local-top.h
++++ b/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 @@ class ThreadLocalTop {
+   // 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 @@ class ThreadLocalTop {
+ 
+   // 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 51a90ddcab..b5722ab6ec 100644
+--- a/src/heap/heap.cc
++++ b/src/heap/heap.cc
+@@ -5851,9 +5851,7 @@ void Heap::SetStackStart(void* stack_start) {
+   stack().SetStackStart(stack_start);
+ }
+ 
+-::heap::base::Stack& Heap::stack() {
+-  return isolate_->thread_local_top()->stack_;
+-}
++::heap::base::Stack& Heap::stack() { return isolate_->stack(); }
+ 
+ void Heap::RegisterExternallyReferencedObject(Address* location) {
+   Object object = TracedHandles::Mark(location, TracedHandles::MarkMode::kAll);