Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package chromium for openSUSE:Factory checked in at 2023-02-10 14:34:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/chromium (Old) and /work/SRC/openSUSE:Factory/.chromium.new.1848 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "chromium" Fri Feb 10 14:34:30 2023 rev:368 rq:1064085 version:110.0.5481.77 Changes: -------- --- /work/SRC/openSUSE:Factory/chromium/chromium.changes 2023-01-25 17:45:27.880790391 +0100 +++ /work/SRC/openSUSE:Factory/.chromium.new.1848/chromium.changes 2023-02-10 14:34:57.389790082 +0100 @@ -1,0 +2,27 @@ +Wed Feb 8 20:16:01 UTC 2023 - Andreas Stieger <andreas.stie...@gmx.de> + +- Chromium 110.0.5481.77 (boo#1208029): + * CVE-2023-0696: Type Confusion in V8 + * CVE-2023-0697: Inappropriate implementation in Full screen mode + * CVE-2023-0698: Out of bounds read in WebRTC + * CVE-2023-0699: Use after free in GPU + * CVE-2023-0700: Inappropriate implementation in Download + * CVE-2023-0701: Heap buffer overflow in WebUI + * CVE-2023-0702: Type Confusion in Data Transfer + * CVE-2023-0703: Type Confusion in DevTools + * CVE-2023-0704: Insufficient policy enforcement in DevTools + * CVE-2023-0705: Integer overflow in Core + * Various fixes from internal audits, fuzzing and other initiatives +- build with bundled libavif +- dropped patches: + * chromium-109-compiler.patch + * chromium-icu72-3.patch +- added patches: + * chromium-110-compiler.patch + * chromium-110-system-libffi.patch + * chromium-110-NativeThemeBase-fabs.patch + * chromium-110-CredentialUIEntry-const.patch + * chromium-110-DarkModeLABColorSpace-pow.patch + * v8-move-the-Stack-object-from-ThreadLocalTop.patch + +------------------------------------------------------------------- Old: ---- chromium-109-compiler.patch chromium-109.0.5414.119.tar.xz chromium-icu72-3.patch New: ---- chromium-110-CredentialUIEntry-const.patch chromium-110-DarkModeLABColorSpace-pow.patch chromium-110-NativeThemeBase-fabs.patch chromium-110-compiler.patch chromium-110-system-libffi.patch chromium-110.0.5481.77.tar.xz v8-move-the-Stack-object-from-ThreadLocalTop.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ chromium.spec ++++++ --- /var/tmp/diff_new_pack.JfleFk/_old 2023-02-10 14:34:58.157794671 +0100 +++ /var/tmp/diff_new_pack.JfleFk/_new 2023-02-10 14:34:58.165794719 +0100 @@ -40,15 +40,14 @@ %bcond_without arm_bti %bcond_without system_icu %bcond_without ffmpeg_51 -%bcond_without system_avif %else %bcond_with system_harfbuzz %bcond_with system_freetype %bcond_with arm_bti %bcond_with system_icu %bcond_with ffmpeg_51 -%bcond_with system_avif %endif +%bcond_with system_avif # LLVM version %if 0%{?suse_version} < 1550 && 0%{?sle_version} < 150400 %define llvm_version 12 @@ -74,7 +73,7 @@ %define ffmpeg_version 58 %endif Name: chromium -Version: 109.0.5414.119 +Version: 110.0.5481.77 Release: 0 Summary: Google's open source browser project License: BSD-3-Clause AND LGPL-2.1-or-later @@ -108,7 +107,7 @@ Patch10: chromium-disable-parallel-gold.patch Patch11: chromium-lp151-old-drm.patch # gentoo/fedora/arch patchset -Patch15: chromium-109-compiler.patch +Patch15: chromium-110-compiler.patch Patch17: chromium-86-ImageMemoryBarrierData-init.patch Patch40: chromium-91-java-only-allowed-in-android-builds.patch Patch50: chromium-clang-nomerge.patch @@ -121,6 +120,10 @@ Patch90: chromium-100-InMilliseconds-constexpr.patch Patch98: chromium-102-regex_pattern-array.patch Patch103: chromium-103-VirtualCursor-std-layout.patch +Patch104: chromium-110-NativeThemeBase-fabs.patch +Patch105: chromium-110-CredentialUIEntry-const.patch +Patch106: chromium-110-DarkModeLABColorSpace-pow.patch +Patch107: v8-move-the-Stack-object-from-ThreadLocalTop.patch Patch201: chromium-86-fix-vaapi-on-intel.patch # PATCH-FIX-SUSE: allow prop codecs to be set with chromium branding Patch202: chromium-prop-codecs.patch @@ -129,7 +132,7 @@ Patch206: chromium-109-clang-lp154.patch Patch207: chromium-icu72-1.patch Patch208: chromium-icu72-2.patch -Patch209: chromium-icu72-3.patch +Patch210: chromium-110-system-libffi.patch BuildRequires: SDL-devel BuildRequires: bison BuildRequires: cups-devel @@ -413,11 +416,8 @@ net/third_party/uri_template third_party/abseil-cpp third_party/angle - third_party/angle/src/common/third_party/base - third_party/angle/src/common/third_party/smhasher third_party/angle/src/common/third_party/xxhash third_party/angle/src/third_party/libXNVCtrl - third_party/angle/src/third_party/trace_event third_party/angle/src/third_party/volk third_party/apple_apsl third_party/axe-core @@ -469,7 +469,6 @@ third_party/devtools-frontend/src/front_end/third_party/i18n third_party/devtools-frontend/src/front_end/third_party/intl-messageformat third_party/devtools-frontend/src/front_end/third_party/lighthouse - third_party/devtools-frontend/src/front_end/third_party/lit-html third_party/devtools-frontend/src/front_end/third_party/lodash-isequal third_party/devtools-frontend/src/front_end/third_party/marked third_party/devtools-frontend/src/front_end/third_party/puppeteer @@ -511,7 +510,6 @@ third_party/libaom/source/libaom/third_party/SVT-AV1 third_party/libgav1 third_party/libjingle - third_party/libjxl third_party/libphonenumber third_party/libsecret third_party/libsrtp @@ -550,7 +548,6 @@ third_party/pdfium/third_party/bigint third_party/pdfium/third_party/freetype third_party/pdfium/third_party/lcms - third_party/pdfium/third_party/libpng16 third_party/pdfium/third_party/libtiff third_party/pdfium/third_party/skia_shared third_party/pdfium/third_party/libopenjpeg @@ -619,6 +616,7 @@ v8/src/third_party/siphash v8/src/third_party/utf8-decoder v8/src/third_party/valgrind + v8/third_party/glibc v8/third_party/inspector_protocol v8/third_party/v8/builtins ) @@ -831,8 +829,6 @@ %if %{with system_freetype} myconf_gn+=" use_system_freetype=true" %endif -myconf_gn+=" use_system_libwayland=true" -myconf_gn+=" use_system_wayland_scanner=true" myconf_gn+=" enable_hangout_services_extension=true" myconf_gn+=" enable_vulkan=true" %if %{with pipewire} ++++++ chromium-110-CredentialUIEntry-const.patch ++++++ >From b4e56d22275cae5a910463a966a96345430a83ea Mon Sep 17 00:00:00 2001 From: Ivan Murashov <ivan.muras...@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 <ma...@chromium.org> Commit-Queue: Mohamed Amir Yosef <ma...@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"); ++++++ chromium-110-DarkModeLABColorSpace-pow.patch ++++++ >From 795c311aae4b718585bc6194189f061000c823a1 Mon Sep 17 00:00:00 2001 From: Stephan Hartmann <sth...@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 ++++++ chromium-110-NativeThemeBase-fabs.patch ++++++ >From 07f0a87e4409f27854b3a1d17f270a3497f38947 Mon Sep 17 00:00:00 2001 From: Stephan Hartmann <sth...@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 <pkast...@chromium.org> Commit-Queue: Stephan Hartmann <sth...@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; ++++++ chromium-109-compiler.patch -> chromium-110-compiler.patch ++++++ --- /work/SRC/openSUSE:Factory/chromium/chromium-109-compiler.patch 2023-01-11 14:36:43.693798597 +0100 +++ /work/SRC/openSUSE:Factory/.chromium.new.1848/chromium-110-compiler.patch 2023-02-10 14:34:42.581701596 +0100 @@ -1,6 +1,6 @@ From 307a0f63dd9b118f4b8470ed3d7567e81fdb7a6d Mon Sep 17 00:00:00 2001 From: Mike Gilbert <flop...@gentoo.org> -Date: Sat, 17 Dec 2022 10:49:23 +0000 +Date: Tue, 15 Nov 2022 10:27:58 +0000 Subject: [PATCH] Disable various compiler configs --- @@ -8,7 +8,7 @@ 1 file changed, 17 insertions(+), 117 deletions(-) diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn -index d72f810..35db3da 100644 +index bd039fc..4d3759a 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn @@ -276,9 +276,7 @@ config("compiler") { @@ -59,7 +59,7 @@ # Rust compiler setup (for either clang or rustc). if (enable_rust) { defines += [ "RUST_ENABLED" ] -@@ -1300,46 +1267,6 @@ config("compiler_deterministic") { +@@ -1301,46 +1268,6 @@ config("compiler_deterministic") { } } @@ -106,7 +106,7 @@ # Tells the compiler not to use absolute paths when passing the default # paths to the tools it invokes. We don't want this because we don't # really need it and it can mess up the goma cache entries. -@@ -1358,27 +1285,6 @@ config("compiler_deterministic") { +@@ -1359,27 +1286,6 @@ config("compiler_deterministic") { } } @@ -134,7 +134,7 @@ config("rustc_revision") { if (enable_rust && defined(rustc_version)) { # Similar to the above config, this is here so that all files get -@@ -1668,7 +1574,7 @@ config("chromium_code") { +@@ -1669,7 +1575,7 @@ config("chromium_code") { defines = [ "_HAS_NODISCARD" ] } } else { @@ -143,7 +143,7 @@ if (treat_warnings_as_errors) { cflags += [ "-Werror" ] -@@ -1677,10 +1583,6 @@ config("chromium_code") { +@@ -1678,10 +1584,6 @@ config("chromium_code") { # well. ldflags = [ "-Werror" ] } @@ -154,7 +154,7 @@ # In Chromium code, we define __STDC_foo_MACROS in order to get the # C99 macros on Mac and Linux. -@@ -1689,16 +1591,6 @@ config("chromium_code") { +@@ -1690,16 +1592,6 @@ config("chromium_code") { "__STDC_FORMAT_MACROS", ] @@ -171,7 +171,7 @@ if (is_mac) { cflags_objc = [ "-Wobjc-missing-property-synthesis" ] cflags_objcc = [ "-Wobjc-missing-property-synthesis" ] -@@ -2091,7 +1983,8 @@ config("default_stack_frames") { +@@ -2092,7 +1984,8 @@ config("default_stack_frames") { } # Default "optimization on" config. @@ -181,7 +181,7 @@ if (is_win) { if (chrome_pgo_phase != 2) { # Favor size over speed, /O1 must be before the common flags. -@@ -2136,7 +2029,8 @@ config("optimize") { +@@ -2137,7 +2030,8 @@ config("optimize") { } # Turn off optimizations. @@ -191,7 +191,7 @@ if (is_win) { cflags = [ "/Od", # Disable optimization. -@@ -2176,7 +2070,8 @@ config("no_optimize") { +@@ -2177,7 +2071,8 @@ config("no_optimize") { # Turns up the optimization level. On Windows, this implies whole program # optimization and link-time code generation which is very expensive and should # be used sparingly. @@ -201,7 +201,7 @@ if (is_nacl && is_nacl_irt) { # The NaCl IRT is a special case and always wants its own config. # Various components do: -@@ -2209,7 +2104,8 @@ config("optimize_max") { +@@ -2210,7 +2105,8 @@ config("optimize_max") { # # TODO(crbug.com/621335) - rework how all of these configs are related # so that we don't need this disclaimer. @@ -211,7 +211,7 @@ if (is_nacl && is_nacl_irt) { # The NaCl IRT is a special case and always wants its own config. # Various components do: -@@ -2235,7 +2131,8 @@ config("optimize_speed") { +@@ -2236,7 +2132,8 @@ config("optimize_speed") { } } @@ -221,7 +221,7 @@ cflags = [ "-O1" ] + common_optimize_on_cflags rustflags = [ "-Copt-level=1" ] ldflags = common_optimize_on_ldflags -@@ -2355,7 +2252,8 @@ config("win_pdbaltpath") { +@@ -2356,7 +2253,8 @@ config("win_pdbaltpath") { } # Full symbols. @@ -230,8 +230,8 @@ +config("xsymbols") { if (is_win) { if (is_clang) { - cflags = [ "/Z7" ] # Debug information in the .obj files. -@@ -2487,7 +2385,8 @@ config("symbols") { + cflags = [ +@@ -2495,7 +2393,8 @@ config("symbols") { # Minimal symbols. # This config guarantees to hold symbol for stack trace which are shown to user # when crash happens in unittests running on buildbot. @@ -241,7 +241,7 @@ if (is_win) { # Functions, files, and line tables only. cflags = [] -@@ -2560,7 +2459,8 @@ config("minimal_symbols") { +@@ -2568,7 +2467,8 @@ config("minimal_symbols") { # This configuration contains function names only. That is, the compiler is # told to not generate debug information and the linker then just puts function # names in the final debug information. @@ -252,5 +252,5 @@ ldflags = [ "/DEBUG" ] -- -2.38.2 +2.37.4 ++++++ chromium-110-system-libffi.patch ++++++ Index: chromium-110.0.5481.30/build/config/linux/libffi/BUILD.gn =================================================================== --- chromium-110.0.5481.30.orig/build/config/linux/libffi/BUILD.gn +++ chromium-110.0.5481.30/build/config/linux/libffi/BUILD.gn @@ -4,21 +4,6 @@ import("//build/config/linux/pkg_config.gni") -declare_args() { - # Controls whether the build should use the version of libffi library shipped - # with the system. By default, we only use the system version on Chrome OS: - # on Linux, libffi must be statically linked to prevent a situation where the - # runtime version of libffi is different from the build-time version from the - # sysroot. - use_system_libffi = default_toolchain == "//build/toolchain/cros:target" -} - -if (use_system_libffi) { pkg_config("libffi") { packages = [ "libffi" ] } -} else { - config("libffi") { - libs = [ ":libffi_pic.a" ] - } -} ++++++ chromium-109.0.5414.119.tar.xz -> chromium-110.0.5481.77.tar.xz ++++++ /work/SRC/openSUSE:Factory/chromium/chromium-109.0.5414.119.tar.xz /work/SRC/openSUSE:Factory/.chromium.new.1848/chromium-110.0.5481.77.tar.xz differ: char 15, line 1 ++++++ chromium-icu72-2.patch ++++++ --- /var/tmp/diff_new_pack.JfleFk/_old 2023-02-10 14:34:58.365795914 +0100 +++ /var/tmp/diff_new_pack.JfleFk/_new 2023-02-10 14:34:58.369795938 +0100 @@ -33,13 +33,13 @@ .../idn_spoof_checker_unittest.cc | 28 +++++++++++-------- 2 files changed, 25 insertions(+), 12 deletions(-) -diff --git a/components/url_formatter/spoof_checks/idn_spoof_checker.cc b/components/url_formatter/spoof_checks/idn_spoof_checker.cc -index aaff7c60bb918..87f62e49f487f 100644 ---- a/components/url_formatter/spoof_checks/idn_spoof_checker.cc -+++ b/components/url_formatter/spoof_checks/idn_spoof_checker.cc -@@ -713,6 +713,15 @@ void IDNSpoofChecker::SetAllowedUnicodeSet(UErrorCode* status) { - allowed_set.remove(0xA640u, 0xA69Fu); // Cyrillic Extended-B - allowed_set.remove(0xA720u, 0xA7FFu); // Latin Extended-D +Index: chromium-110.0.5481.38/components/url_formatter/spoof_checks/idn_spoof_checker.cc +=================================================================== +--- chromium-110.0.5481.38.orig/components/url_formatter/spoof_checks/idn_spoof_checker.cc ++++ chromium-110.0.5481.38/components/url_formatter/spoof_checks/idn_spoof_checker.cc +@@ -722,6 +722,15 @@ void IDNSpoofChecker::SetAllowedUnicodeS + allowed_set.remove(0x200Du); // Zero Width Joiner + #endif +#if U_ICU_VERSION_MAJOR_NUM < 72 + // Unicode 15 changes ZWJ and ZWNJ from allowed to restricted. Restrict them ++++++ chromium-system-libusb.patch ++++++ --- /var/tmp/diff_new_pack.JfleFk/_old 2023-02-10 14:34:58.401796129 +0100 +++ /var/tmp/diff_new_pack.JfleFk/_new 2023-02-10 14:34:58.405796153 +0100 @@ -1,7 +1,7 @@ -Index: chromium-70.0.3538.54/build/linux/unbundle/libusb.gn +Index: chromium-110.0.5481.30/build/linux/unbundle/libusb.gn =================================================================== --- /dev/null -+++ chromium-70.0.3538.54/build/linux/unbundle/libusb.gn ++++ chromium-110.0.5481.30/build/linux/unbundle/libusb.gn @@ -0,0 +1,24 @@ +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be @@ -27,13 +27,13 @@ + ] + public_configs = [ ":system_libusb" ] +} -Index: chromium-70.0.3538.54/build/linux/unbundle/replace_gn_files.py +Index: chromium-110.0.5481.30/build/linux/unbundle/replace_gn_files.py =================================================================== ---- chromium-70.0.3538.54.orig/build/linux/unbundle/replace_gn_files.py -+++ chromium-70.0.3538.54/build/linux/unbundle/replace_gn_files.py -@@ -27,6 +27,7 @@ REPLACEMENTS = { +--- chromium-110.0.5481.30.orig/build/linux/unbundle/replace_gn_files.py ++++ chromium-110.0.5481.30/build/linux/unbundle/replace_gn_files.py +@@ -54,6 +54,7 @@ REPLACEMENTS = { + 'libevent': 'third_party/libevent/BUILD.gn', 'libjpeg': 'third_party/libjpeg.gni', - 'libjxl' : 'third_party/libjxl/BUILD.gn', 'libpng': 'third_party/libpng/BUILD.gn', + 'libusb': 'third_party/libusb/BUILD.gn', 'libvpx': 'third_party/libvpx/BUILD.gn', ++++++ v8-move-the-Stack-object-from-ThreadLocalTop.patch ++++++ >From 7b6fbcd0a6700db498ad55db046ecda92c8ee8c1 Mon Sep 17 00:00:00 2001 From: Nikolaos Papaspyrou <nikol...@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 <mlippa...@chromium.org> > Reviewed-by: Omer Katz <omerk...@chromium.org> > Commit-Queue: Nikolaos Papaspyrou <nikol...@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/v8/src/execution/isolate.cc index 4edf364e0a..be4fd400d2 100644 --- a/v8/src/execution/isolate.cc +++ b/v8/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/v8/src/execution/isolate.h b/v8/src/execution/isolate.h index a32f999fe5..1cb6e10661 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" @@ -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/v8/src/execution/thread-local-top.cc b/v8/src/execution/thread-local-top.cc index 0d7071ddda..05cc20b8e4 100644 --- a/v8/src/execution/thread-local-top.cc +++ b/v8/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/v8/src/execution/thread-local-top.h b/v8/src/execution/thread-local-top.h index 43fec0a7df..989c817f31 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 @@ 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/v8/src/heap/heap.cc b/v8/src/heap/heap.cc index 51a90ddcab..b5722ab6ec 100644 --- a/v8/src/heap/heap.cc +++ b/v8/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);