Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package chromium for openSUSE:Factory 
checked in at 2025-06-05 20:33:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/chromium (Old)
 and      /work/SRC/openSUSE:Factory/.chromium.new.19631 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "chromium"

Thu Jun  5 20:33:19 2025 rev:463 rq:1282255 version:137.0.7151.68

Changes:
--------
--- /work/SRC/openSUSE:Factory/chromium/chromium.changes        2025-05-20 
09:33:20.645310006 +0200
+++ /work/SRC/openSUSE:Factory/.chromium.new.19631/chromium.changes     
2025-06-05 20:35:40.944644326 +0200
@@ -1,0 +2,56 @@
+Tue Jun  3 12:48:01 CEST 2025 - r...@suse.de
+
+- Chromium 137.0.7151.68
+  (stable release 2025-06-03) (boo#1244019)
+  * CVE-2025-5419: Out of bounds read and write in V8
+  * CVE-2025-5068: Use after free in Blink
+  - Google is aware that an exploit for CVE-2025-5419
+    exists in the wild.
+
+-------------------------------------------------------------------
+Fri May 30 00:25:43 CEST 2025 - r...@suse.de
+
+- added patches:
+  ppc-fedora-0001-add-xnn-ppc64el-support.patch 
+  ppc-fedora-0002-regenerate-xnn-buildgn.patch
+
+-------------------------------------------------------------------
+Wed May 28 01:08:19 CEST 2025 - r...@suse.de
+
+- Chromium 137.0.7151.55
+  (stable release 2025-05-27) (boo#1243741)
+  * CVE-2025-5063: Use after free in Compositing
+  * CVE-2025-5280: Out of bounds write in V8
+  * CVE-2025-5064: Inappropriate implementation in Background Fetch API
+  * CVE-2025-5065: Inappropriate implementation in FileSystemAccess API
+  * CVE-2025-5066: Inappropriate implementation in Messages
+  * CVE-2025-5281: Inappropriate implementation in BFCache
+  * CVE-2025-5283: Use after free in libvpx
+  * CVE-2025-5067: Inappropriate implementation in Tab Strip
+
+- dropped patches:
+  chromium-135-gperf-output.patch (upstream)
+- modified patches:
+  chromium-125-compiler.patch (context)
+  chromium-127-rust-clanglib.patch (context)
+  ffmpeg-new-channel-layout.patch
+  (drop one hunk where upstream dropped the code)
+  system-libdrm.patch (context)
+  ppc-fedora-fix-partition-alloc-compile.patch (context)
+  ppc-fedora-0002-third_party-libvpx-Remove-bad-ppc64-config.patch (context)
+  ppc-fedora-0001-sandbox-Enable-seccomp_bpf-for-ppc64.patch (context)
+- added patches:
+  chromium-137-pdfium_fix_pattribute.patch
+  (fix typo in pAttribute attributes)
+  chromium-137-heuristics_missing_includes.patch
+  (upstream patch 4c736420952f355f18bdc4f4ea2d16e4514fa034)
+  
chromium-137-disruptive_notification_permissions_manager-missing_include.patch
+  (missing include)
+  - revert last skia patches for gather_unaligned until we have a port for 
ppc64le
+    ppc-skia-revert-1.patch
+    ppc-skia-revert-2.patch
+    ppc-skia-revert-3.patch
+- keeplibs:
+  added third_party/compiler-rt
+
+-------------------------------------------------------------------

Old:
----
  chromium-135-gperf-output.patch
  chromium-136.0.7103.113.tar.xz

New:
----
  chromium-137-disruptive_notification_permissions_manager-missing_include.patch
  chromium-137-heuristics_missing_includes.patch
  chromium-137-pdfium_fix_pattribute.patch
  chromium-137.0.7151.68.tar.xz
  ppc-fedora-0001-add-xnn-ppc64el-support.patch
  ppc-fedora-0002-regenerate-xnn-buildgn.patch
  ppc-skia-revert-1.patch
  ppc-skia-revert-2.patch
  ppc-skia-revert-3.patch

BETA DEBUG BEGIN:
  Old:- dropped patches:
  chromium-135-gperf-output.patch (upstream)
- modified patches:
BETA DEBUG END:

BETA DEBUG BEGIN:
  New:  (upstream patch 4c736420952f355f18bdc4f4ea2d16e4514fa034)
  chromium-137-disruptive_notification_permissions_manager-missing_include.patch
  (missing include)
  New:  (fix typo in pAttribute attributes)
  chromium-137-heuristics_missing_includes.patch
  (upstream patch 4c736420952f355f18bdc4f4ea2d16e4514fa034)
  New:- added patches:
  chromium-137-pdfium_fix_pattribute.patch
  (fix typo in pAttribute attributes)
  New:- added patches:
  ppc-fedora-0001-add-xnn-ppc64el-support.patch 
  ppc-fedora-0002-regenerate-xnn-buildgn.patch
  New:  ppc-fedora-0001-add-xnn-ppc64el-support.patch 
  ppc-fedora-0002-regenerate-xnn-buildgn.patch
  New:  - revert last skia patches for gather_unaligned until we have a port 
for ppc64le
    ppc-skia-revert-1.patch
    ppc-skia-revert-2.patch
  New:    ppc-skia-revert-1.patch
    ppc-skia-revert-2.patch
    ppc-skia-revert-3.patch
  New:    ppc-skia-revert-2.patch
    ppc-skia-revert-3.patch
- keeplibs:
BETA DEBUG END:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ chromium.spec ++++++
--- /var/tmp/diff_new_pack.AvyN3L/_old  2025-06-05 20:36:07.669755548 +0200
+++ /var/tmp/diff_new_pack.AvyN3L/_new  2025-06-05 20:36:07.669755548 +0200
@@ -33,6 +33,9 @@
 %bcond_with qt5
 %endif
 %ifarch aarch64 ppc64le riscv64
+# ERROR Unresolved dependencies.
+# 
//third_party/swiftshader/src/Reactor:swiftshader_reactor(//build/toolchain/linux/unbundle:default)
+#   needs 
//third_party/swiftshader/src/Reactor:swiftshader_subzero_reactor(//build/toolchain/linux/unbundle:default)
 %bcond_with swiftshader
 %else
 %bcond_without swiftshader
@@ -107,7 +110,7 @@
 %define n_suffix %{nil}
 %endif
 Name:           chromium%{n_suffix}
-Version:        136.0.7103.113
+Version:        137.0.7151.68
 Release:        0
 Summary:        Google's open source browser project
 License:        BSD-3-Clause AND LGPL-2.1-or-later
@@ -157,7 +160,9 @@
 Patch373:       chromium-134-type-mismatch-error.patch
 Patch375:       chromium-131-fix-qt-ui.pach
 Patch376:       chromium-135-add_map_droppable.patch
-Patch377:       chromium-135-gperf-output.patch
+Patch377:       chromium-137-pdfium_fix_pattribute.patch
+Patch378:       chromium-137-heuristics_missing_includes.patch
+Patch379:       
chromium-137-disruptive_notification_permissions_manager-missing_include.patch
 # conditionally applied patches ppc64le only
 Patch401:       ppc-fedora-add-ppc64-architecture-string.patch
 Patch402:       
ppc-fedora-0001-linux-seccomp-bpf-ppc64-glibc-workaround-in-SIGSYS-h.patch
@@ -216,6 +221,8 @@
 Patch455:       ppc-fedora-add-ppc64-pthread-stack-size.patch
 Patch456:       ppc-fedora-fix-ppc64-rust_png-build-error.patch
 Patch457:       ppc-chromium-136-clang-config.patch
+Patch458:       ppc-fedora-0001-add-xnn-ppc64el-support.patch
+Patch459:       ppc-fedora-0002-regenerate-xnn-buildgn.patch
 # conditionally applied patches
 # patch where ffmpeg < 5
 Patch1002:      chromium-125-ffmpeg-5.x-reordered_opaque.patch
@@ -231,6 +238,9 @@
 Patch1040:      gtk-414.patch
 # clang is too old
 Patch1050:      chromium-warning-suppression-mappings.patch
+#Patch1061:      ppc-skia-revert-1.patch
+Patch1062:      ppc-skia-revert-2.patch
+Patch1063:      ppc-skia-revert-3.patch
 # end conditionally applied patches
 BuildRequires:  SDL-devel
 BuildRequires:  bison
@@ -522,6 +532,13 @@
 %patch -p1 -R -P 1050
 fi
 
+%ifarch ppc64le
+pushd third_party/skia
+%patch -p1 -R -P 1062
+%patch -p1 -R -P 1063
+popd
+%endif
+
 %build
 # esbuild
 rm third_party/devtools-frontend/src/third_party/esbuild/esbuild
@@ -628,6 +645,7 @@
     third_party/ced
     third_party/cld_3
     third_party/closure_compiler
+    third_party/compiler-rt
     third_party/content_analysis_sdk
     third_party/cpuinfo
     third_party/crashpad

++++++ _constraints ++++++
--- /var/tmp/diff_new_pack.AvyN3L/_old  2025-06-05 20:36:07.833762367 +0200
+++ /var/tmp/diff_new_pack.AvyN3L/_new  2025-06-05 20:36:07.837762534 +0200
@@ -21,5 +21,15 @@
       </memory>
     </hardware>
   </overwrite>
+  <overwrite>
+    <conditions>
+      <arch>ppc64le</arch>
+    </conditions>
+    <hardware>
+      <disk>
+        <size unit="G">50</size>
+      </disk>
+    </hardware>
+  </overwrite>
 </constraints>
 

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.AvyN3L/_old  2025-06-05 20:36:07.853763199 +0200
+++ /var/tmp/diff_new_pack.AvyN3L/_new  2025-06-05 20:36:07.857763365 +0200
@@ -1,6 +1,6 @@
-mtime: 1747267435
-commit: 59433e07513aea31b8cdc823c99d2c5bed10d7ab34db6aa110c2cc8b8355fc29
+mtime: 1748948004
+commit: 92cf0b9d013dd842ba3c39f3ff8e9d418337da8b0ade3539c2d15d4dc1b19dea
 url: https://src.opensuse.org/chromium/chromium.git
-revision: 59433e07513aea31b8cdc823c99d2c5bed10d7ab34db6aa110c2cc8b8355fc29
+revision: 92cf0b9d013dd842ba3c39f3ff8e9d418337da8b0ade3539c2d15d4dc1b19dea
 projectscmsync: https://src.opensuse.org/chromium/_ObsPrj.git
 

++++++ build.specials.obscpio ++++++

++++++ chromium-125-compiler.patch ++++++
--- /var/tmp/diff_new_pack.AvyN3L/_old  2025-06-05 20:36:07.989768854 +0200
+++ /var/tmp/diff_new_pack.AvyN3L/_new  2025-06-05 20:36:07.993769020 +0200
@@ -1,6 +1,6 @@
---- chromium-136.0.7103.17/build/config/compiler/BUILD.gn      2025/04/04 
13:01:25     1.1
-+++ chromium-136.0.7103.17/build/config/compiler/BUILD.gn      2025/04/04 
13:02:18
-@@ -307,9 +307,7 @@
+--- chromium-137.0.7151.15/build/config/compiler/BUILD.gn      2025/05/08 
22:34:27     1.1
++++ chromium-137.0.7151.15/build/config/compiler/BUILD.gn      2025/05/08 
22:36:47
+@@ -308,9 +308,7 @@
  
    configs += [
      # See the definitions below.
@@ -10,7 +10,7 @@
      ":compiler_codegen",
      ":compiler_deterministic",
      ":clang_warning_suppression",
-@@ -567,62 +565,6 @@
+@@ -569,69 +567,6 @@
      ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
    }
  
@@ -64,16 +64,23 @@
 -
 -    # Enable ELF CREL (see crbug.com/357878242) for all platforms that use ELF
 -    # (excluding toolchains that use an older version of LLVM).
--    if (is_linux && !llvm_android_mainline &&
+-    if (is_linux && use_lld && !llvm_android_mainline &&
 -        default_toolchain != "//build/toolchain/cros:target") {
 -      cflags += [ "-Wa,--crel,--allow-experimental-crel" ]
 -    }
+-
+-    # TODO(crbug.com/413427035): Remove once
+-    # https://github.com/llvm/llvm-project/pull/136867/ is landed.
+-    if (!is_win && !llvm_android_mainline &&
+-        default_toolchain != "//build/toolchain/cros:target") {
+-      cflags += [ "-fextend-variable-liveness=none" ]
+-    }
 -  }
 -
    # C11/C++11 compiler flags setup.
    # ---------------------------
    if (is_linux || is_chromeos || is_android || (is_nacl && is_clang) ||
-@@ -1554,52 +1496,6 @@
+@@ -1569,52 +1504,6 @@
      }
    }
  
@@ -126,36 +133,88 @@
    # 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 RBE cache entries.
-@@ -1618,28 +1514,6 @@
+@@ -1633,80 +1522,6 @@
    }
  }
  
 -config("clang_revision") {
 -  if (is_clang && clang_base_path == default_clang_base_path &&
 -      current_os != "zos") {
--    update_args = [
--      "--print-revision",
--      "--verify-version=$clang_version",
--    ]
+-    _perform_consistency_checks = current_toolchain == default_toolchain
 -    if (llvm_force_head_revision) {
--      update_args += [ "--llvm-force-head-revision" ]
+-      _head_revision_stamp_path = 
"//third_party/llvm-build/force_head_revision"
+-      _head_revision = ""
+-      if (path_exists(_head_revision_stamp_path)) {
+-        _head_revision = read_file(_head_revision_stamp_path, "trim string")
+-      }
+-      assert(
+-          _head_revision != "",
+-          "llvm_force_head_revision=true, but no locally built version was 
detected.")
+-      _clang_revision = _head_revision
+-    } else {
+-      _clang_revision = read_file(
+-              "//third_party/llvm-build/Release+Asserts/cr_build_revision",
+-              "trim string")
+-
+-      # Ensure that the synced clang version matches what's in git.
+-      if (_perform_consistency_checks) {
+-        # Parse the clang version from the Python script.
+-        _clang_version_lines = filter_include(
+-                read_file("//tools/clang/scripts/update.py", "list lines"),
+-                [ "CLANG_*REVISION = *" ])
+-        _py_revision =
+-            string_replace(_clang_version_lines[0], "CLANG_REVISION = '", "")
+-        _py_revision = string_replace(_py_revision, "'", "")
+-        _py_subrevision =
+-            string_replace(_clang_version_lines[1], "CLANG_SUB_REVISION = ", 
"")
+-        _expected_clang_revision = "$_py_revision-$_py_subrevision"
+-
+-        assert(
+-            _clang_revision == _expected_clang_revision,
+-            "clang_revision=\"$_clang_revision\" but update.py expected 
\"$_expected_clang_revision\". Did you forget to gclient sync?")
+-      }
+-    }
+-
+-    if (_perform_consistency_checks) {
+-      # Ensure that the revision matches the version major expected by GN.
+-      _versions_match = filter_include([ _clang_revision ],
+-                                       [ "llvmorg-$clang_version-*" ]) != []
+-      assert(
+-          _versions_match,
+-          "clang_revision=\"$_clang_revision\" but 
clang_version=\"$clang_version\". clang_version in 
build/toolchain/toolchain.gni is likely outdated.")
+-    }
+-
+-    if (toolchain_has_rust && _perform_consistency_checks) {
+-      # Ensure that the synced rust version matches what's in git.
+-      _rust_revision_lines =
+-          filter_include(read_file("//tools/rust/update_rust.py", "list 
lines"),
+-                         [ "RUST_*REVISION = *" ])
+-      _py_revision =
+-          string_replace(_rust_revision_lines[0], "RUST_REVISION = '", "")
+-      _py_revision = string_replace(_py_revision, "'", "")
+-      _py_subrevision =
+-          string_replace(_rust_revision_lines[1], "RUST_SUB_REVISION = ", "")
+-      _expected_rust_revision = "$_py_revision-$_py_subrevision"
+-
+-      # Ensure the rust version matches the clang version.
+-      assert(
+-          filter_include([ rustc_revision ],
+-                         [ "*-$_expected_rust_revision-*" ]) != [],
+-          "rustc_revision=\"$rustc_revision\" but update_rust.py expected 
\"$_expected_rust_revision\". Run \"gclient sync\"?")
 -    }
--    clang_revision = exec_script("//tools/clang/scripts/update.py",
--                                 update_args,
--                                 "trim string")
 -
 -    # This is here so that all files get recompiled after a clang roll and
 -    # when turning clang on or off. (defines are passed via the command line,
 -    # and build system rebuild things when their commandline changes). Nothing
 -    # should ever read this define.
--    defines = [ "CR_CLANG_REVISION=\"$clang_revision\"" ]
+-    defines = [ "CR_CLANG_REVISION=\"$_clang_revision\"" ]
 -  }
 -}
 -
  # Controls the usage of a warning suppression mapping (WSM) file to suppress
  # warnings based on the path of the file they come from. It's controlled by 
the
  # `clang_warning_suppression_file` gn argument , which points to a text file
-@@ -2112,10 +1986,6 @@
+@@ -2180,10 +1995,6 @@
      }
    } else {
      cflags = [ "-Wall" ]
@@ -166,7 +225,7 @@
  
      # In Chromium code, we define __STDC_foo_MACROS in order to get the
      # C99 macros on Mac and Linux.
-@@ -2124,24 +1994,6 @@
+@@ -2192,24 +2003,6 @@
        "__STDC_FORMAT_MACROS",
      ]
  
@@ -191,7 +250,7 @@
      if (is_apple) {
        cflags_objc = [ "-Wimplicit-retain-self" ]
        cflags_objcc = [ "-Wimplicit-retain-self" ]
-@@ -2564,7 +2416,8 @@
+@@ -2625,7 +2418,8 @@
  # [0]: https://pinpoint-dot-chromeperf.appspot.com/job/147634a8be0000
  # [1]: https://pinpoint-dot-chromeperf.appspot.com/job/132bc772be0000
  # [2]: https://crrev.com/c/5447532
@@ -201,7 +260,7 @@
    if (is_win) {
      # clang-cl's /O2 corresponds to clang's -O3, and really want -O2 for
      # consistency with the other platforms.
-@@ -2613,7 +2466,8 @@
+@@ -2674,7 +2468,8 @@
  }
  
  # Turn off optimizations.
@@ -211,7 +270,7 @@
    if (is_win) {
      cflags = [
        "/Od",  # Disable optimization.
-@@ -2648,7 +2502,8 @@
+@@ -2709,7 +2504,8 @@
  # Turns up the optimization level. Used to explicitly enable -O2 instead of
  # -Os for select targets on platforms that use optimize_for_size. No-op
  # elsewhere.
@@ -221,7 +280,7 @@
    if (is_nacl && is_nacl_irt) {
      # The NaCl IRT is a special case and always wants its own config.
      # Various components do:
-@@ -2681,7 +2536,8 @@
+@@ -2742,7 +2538,8 @@
  #
  # TODO(crbug.com/41259697) - rework how all of these configs are related
  # so that we don't need this disclaimer.
@@ -231,7 +290,7 @@
    if (is_nacl && is_nacl_irt) {
      # The NaCl IRT is a special case and always wants its own config.
      # Various components do:
-@@ -2710,7 +2566,8 @@
+@@ -2771,7 +2568,8 @@
    }
  }
  
@@ -241,7 +300,7 @@
    cflags = [ "-O1" ] + common_optimize_on_cflags
    rustflags = [ "-Copt-level=1" ]
    ldflags = common_optimize_on_ldflags
-@@ -2841,7 +2698,8 @@
+@@ -2902,7 +2700,8 @@
  }
  
  # Full symbols.
@@ -251,7 +310,7 @@
    rustflags = []
    configs = []
    if (is_win) {
-@@ -3003,7 +2861,8 @@
+@@ -3064,7 +2863,8 @@
  # Minimal symbols.
  # This config guarantees to hold symbol for stack trace which are shown to 
user
  # when crash happens in unittests running on buildbot.
@@ -261,7 +320,7 @@
    rustflags = []
    if (is_win) {
      # Functions, files, and line tables only.
-@@ -3088,7 +2947,8 @@
+@@ -3149,7 +2949,8 @@
  # 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.

++++++ chromium-127-rust-clanglib.patch ++++++
--- /var/tmp/diff_new_pack.AvyN3L/_old  2025-06-05 20:36:08.021770184 +0200
+++ /var/tmp/diff_new_pack.AvyN3L/_new  2025-06-05 20:36:08.025770351 +0200
@@ -1,7 +1,7 @@
 diff -up chromium-127.0.6533.72/build/rust/rust_bindgen.gni.me 
chromium-127.0.6533.72/build/rust/rust_bindgen.gni
 --- chromium-127.0.6533.72/build/rust/rust_bindgen.gni.me      2024-07-25 
16:11:18.754551595 +0200
 +++ chromium-127.0.6533.72/build/rust/rust_bindgen.gni 2024-07-25 
16:11:33.997837660 +0200
-@@ -22,7 +22,7 @@ _libclang_path = rust_bindgen_root
+@@ -23,7 +23,7 @@
  if (host_os == "win") {
    _libclang_path += "/bin"
  } else {
@@ -10,11 +10,10 @@
  }
  
  # Template to build Rust/C bindings with bindgen.
-@@ -105,6 +105,14 @@
-       # it's declared.
-       deps = [ ":${_rust_bindgen_generator_name}_static_fns" ]
+@@ -111,6 +111,13 @@
+       deps += [ ":${_rust_bindgen_generator_name}_static_fns" ]
      }
-+
+ 
 +    # Default configs include "-fvisibility=hidden", and for some reason this
 +    # causes bindgen not to emit function bindings. Override it.
 +    args = []

++++++ 
chromium-137-disruptive_notification_permissions_manager-missing_include.patch 
++++++
--- 
chromium-137.0.7151.15/chrome/browser/ui/safety_hub/disruptive_notification_permissions_manager.h
   2025/05/12 22:24:56     1.1
+++ 
chromium-137.0.7151.15/chrome/browser/ui/safety_hub/disruptive_notification_permissions_manager.h
   2025/05/12 22:25:05
@@ -6,6 +6,7 @@
 #define 
CHROME_BROWSER_UI_SAFETY_HUB_DISRUPTIVE_NOTIFICATION_PERMISSIONS_MANAGER_H_
 
 #include <memory>
+#include <set>
 
 #include "base/scoped_observation.h"
 #include "base/time/clock.h"

++++++ chromium-137-heuristics_missing_includes.patch ++++++
--- 
chromium-137.0.7151.15/content/browser/tpcd_heuristics/opener_heuristic_utils.h 
    2025/05/12 14:08:09     1.1
+++ 
chromium-137.0.7151.15/content/browser/tpcd_heuristics/opener_heuristic_utils.h 
    2025/05/12 14:08:21
@@ -6,6 +6,9 @@
 #define CONTENT_BROWSER_TPCD_HEURISTICS_OPENER_HEURISTIC_UTILS_H_
 
 #include <map>
+#include <set>
+#include <string>
+#include <utility>
 
 #include "base/types/optional_ref.h"
 #include "content/common/content_export.h"

++++++ chromium-137-pdfium_fix_pattribute.patch ++++++
--- chromium-137.0.7151.15/third_party/pdfium/core/fxcodec/png/png_decoder.cpp  
2025/05/12 14:04:10     1.1
+++ chromium-137.0.7151.15/third_party/pdfium/core/fxcodec/png/png_decoder.cpp  
2025/05/12 14:04:27
@@ -52,8 +52,8 @@
                              CFX_DIBAttribute* pAttribute) {
   if (pAttribute) {
 #if defined(PNG_pHYs_SUPPORTED)
-    pAttribute->xdpi_ = png_get_x_pixels_per_meter(png_ptr, info_ptr);
-    pAttribute->ydpi_ = png_get_y_pixels_per_meter(png_ptr, info_ptr);
+    pAttribute->x_dpi_ = png_get_x_pixels_per_meter(png_ptr, info_ptr);
+    pAttribute->y_dpi_ = png_get_y_pixels_per_meter(png_ptr, info_ptr);
     png_uint_32 res_x, res_y;
     int unit_type;
     png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y, &unit_type);

++++++ chromium-136.0.7103.113.tar.xz -> chromium-137.0.7151.68.tar.xz ++++++
/work/SRC/openSUSE:Factory/chromium/chromium-136.0.7103.113.tar.xz 
/work/SRC/openSUSE:Factory/.chromium.new.19631/chromium-137.0.7151.68.tar.xz 
differ: char 15, line 1


++++++ ffmpeg-new-channel-layout.patch ++++++
--- /var/tmp/diff_new_pack.AvyN3L/_old  2025-06-05 20:36:08.157775839 +0200
+++ /var/tmp/diff_new_pack.AvyN3L/_new  2025-06-05 20:36:08.161776006 +0200
@@ -269,20 +269,6 @@
    if (channel_layout == CHANNEL_LAYOUT_UNSUPPORTED &&
        config_.channel_layout() == CHANNEL_LAYOUT_DISCRETE) {
      channel_layout = CHANNEL_LAYOUT_DISCRETE;
-@@ -348,11 +348,11 @@ bool FFmpegAudioDecoder::ConfigureDecoder(const 
AudioDecoderConfig& config) {
-   // Success!
-   av_sample_format_ = codec_context_->sample_fmt;
- 
--  if (codec_context_->channels != config.channels()) {
-+  if (codec_context_->ch_layout.nb_channels != config.channels()) {
-     MEDIA_LOG(ERROR, media_log_)
-         << "Audio configuration specified " << config.channels()
-         << " channels, but FFmpeg thinks the file contains "
--        << codec_context_->channels << " channels";
-+        << codec_context_->ch_layout.nb_channels << " channels";
-     ReleaseFFmpegResources();
-     state_ = DecoderState::kUninitialized;
-     return false;
 @@ -403,7 +403,7 @@ int FFmpegAudioDecoder::GetAudioBuffer(struct 
AVCodecContext* s,
    if (frame->nb_samples <= 0)
      return AVERROR(EINVAL);

++++++ ppc-fedora-0001-add-xnn-ppc64el-support.patch ++++++
--- a/third_party/xnnpack/generate_build_gn.py
+++ b/third_party/xnnpack/generate_build_gn.py
@@ -236,7 +236,10 @@
     _Platform(gn_cpu='x64', bazel_cpu='k8', bazel_platform='//:linux_x64'),
     _Platform(gn_cpu='arm64',
               bazel_cpu='aarch64',
-              bazel_platform='//:linux_aarch64')
+              bazel_platform='//:linux_aarch64'),
+    _Platform(gn_cpu='ppc64',
+              bazel_cpu='ppc64le',
+              bazel_platform='//:linux_ppc64le')
 ]
 
 
--- a/third_party/xnnpack/bazelroot/BUILD
+++ b/third_party/xnnpack/bazelroot/BUILD
@@ -21,6 +21,14 @@
     ],
 )
 
+platform(
+    name = "linux_ppc64le",
+    constraint_values = [
+        "@platforms//os:linux",
+        "@platforms//cpu:ppc64le",
+    ],
+)
+
 # A dummy clang toolchain for building them for any arch.
 
 filegroup(name = "empty")

++++++ ppc-fedora-0001-sandbox-Enable-seccomp_bpf-for-ppc64.patch ++++++
--- /var/tmp/diff_new_pack.AvyN3L/_old  2025-06-05 20:36:08.233779000 +0200
+++ /var/tmp/diff_new_pack.AvyN3L/_new  2025-06-05 20:36:08.241779332 +0200
@@ -11,14 +11,11 @@
 ===================================================================
 --- chromium-128.0.6613.113.orig/sandbox/features.gni
 +++ chromium-128.0.6613.113/sandbox/features.gni
-@@ -9,7 +9,8 @@
+@@ -9,4 +9,5 @@
  use_seccomp_bpf = (is_linux || is_chromeos || is_android) &&
                    (current_cpu == "x86" || current_cpu == "x64" ||
                     current_cpu == "arm" || current_cpu == "arm64" ||
 -                   current_cpu == "mipsel" || current_cpu == "mips64el")
 +                   current_cpu == "mipsel" || current_cpu == "mips64el" ||
 +                   current_cpu == "ppc64")
- 
- # SSBD (Speculative Store Bypass Disable) is a mitigation of Spectre Variant 
4.
- # As Spectre Variant 4 can be mitigated by site isolation, opt-out SSBD on 
site
 

++++++ ppc-fedora-0002-regenerate-xnn-buildgn.patch ++++++
++++ 80682 lines (skipped)

++++++ ppc-fedora-0002-third_party-libvpx-Remove-bad-ppc64-config.patch ++++++
++++ 3176 lines (skipped)
++++ between 
/work/SRC/openSUSE:Factory/chromium/ppc-fedora-0002-third_party-libvpx-Remove-bad-ppc64-config.patch
++++ and 
/work/SRC/openSUSE:Factory/.chromium.new.19631/ppc-fedora-0002-third_party-libvpx-Remove-bad-ppc64-config.patch

++++++ ppc-fedora-fix-partition-alloc-compile.patch ++++++
--- /var/tmp/diff_new_pack.AvyN3L/_old  2025-06-05 20:36:08.405786152 +0200
+++ /var/tmp/diff_new_pack.AvyN3L/_new  2025-06-05 20:36:08.409786318 +0200
@@ -4,14 +4,14 @@
 ===================================================================
 --- 
chromium-128.0.6613.113.orig/base/allocator/partition_allocator/partition_alloc.gni
 +++ 
chromium-128.0.6613.113/base/allocator/partition_allocator/partition_alloc.gni
-@@ -69,7 +69,8 @@
-   # NaCl targets don't use 64-bit pointers.
+@@ -70,7 +70,8 @@
    has_64_bit_pointers = false
  } else if (current_cpu == "x64" || current_cpu == "arm64" ||
--           current_cpu == "loong64" || current_cpu == "riscv64") {
-+           current_cpu == "loong64" || current_cpu == "riscv64" ||
-+           current_cpu == "ppc64") {
+            current_cpu == "arm64e" || current_cpu == "loong64" ||
+-           current_cpu == "riscv64") {
++           current_cpu == "riscv64" || current_cpu == "ppc64") {
++
+   assert(current_cpu != "arm64e" || (is_ios && target_environment == 
"device"))
    has_64_bit_pointers = true
  } else if (current_cpu == "x86" || current_cpu == "arm" ||
-            current_cpu == "wasm") {
 

++++++ ppc-fedora-fix-ppc64-linux-syscalls-headers.patch ++++++
--- /var/tmp/diff_new_pack.AvyN3L/_old  2025-06-05 20:36:08.421786817 +0200
+++ /var/tmp/diff_new_pack.AvyN3L/_new  2025-06-05 20:36:08.425786983 +0200
@@ -2,7 +2,7 @@
 ===================================================================
 --- 
chromium-128.0.6613.113.orig/sandbox/linux/system_headers/ppc64_linux_syscalls.h
 +++ chromium-128.0.6613.113/sandbox/linux/system_headers/ppc64_linux_syscalls.h
-@@ -8,5 +8,18 @@
+@@ -8,5 +8,21 @@
  #include <asm/unistd.h>
  
  //TODO: is it necessary to redefine syscall numbers for PPC64?
@@ -19,6 +19,9 @@
 +#if !defined(__NR_shmat)
 +#define __NR_shmat      397
 +#endif
++#if !defined(__NR_mseal)
++#define __NR_mseal      462
++#endif
  
  #endif  // SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
 

++++++ ppc-skia-revert-1.patch ++++++
>From bb255dd0252e256a28542475b22711346c319030 Mon Sep 17 00:00:00 2001
From: Jason Simmons <jsimm...@google.com>
Date: Fri, 16 May 2025 01:08:27 +0000
Subject: [PATCH] Fix shift of the blue component in store_1010102_xr

Bug: https://github.com/flutter/flutter/issues/168849
Change-Id: I43c21535fbea6749f644301e162aacb2bbd5f5c3
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/994956
Reviewed-by: Michael Ludwig <michaellud...@google.com>
Commit-Queue: Jason Simmons <jsimm...@google.com>

diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h
index fb644ba5e3..3784ccbde5 100644
--- a/src/opts/SkRasterPipeline_opts.h
+++ b/src/opts/SkRasterPipeline_opts.h
@@ -3137,7 +3137,7 @@ HIGHP_STAGE(store_1010102_xr, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
     // This is the inverse of from_1010102_xr, e.g. (v * 510 + 384)
     U32 px = to_unorm(r, /*scale=*/510, /*bias=*/384, /*maxI=*/1023)
            | to_unorm(g, /*scale=*/510, /*bias=*/384, /*maxI=*/1023) << 10
-           | to_unorm(b, /*scale=*/510, /*bias=*/384, /*maxI=*/1023) << 10
+           | to_unorm(b, /*scale=*/510, /*bias=*/384, /*maxI=*/1023) << 20
            | to_unorm(a, /*scale=*/3) << 30;
     store(ptr, px);
 }

++++++ ppc-skia-revert-2.patch ++++++
>From c759c1a4717afadfedab300b6314f428b05741ac Mon Sep 17 00:00:00 2001
From: Kaylee Lubick <kjlub...@google.com>
Date: Mon, 21 Apr 2025 14:51:16 -0400
Subject: [PATCH] Remove alignment assumptions in highp gather

Follow-up to http://review.skia.org/981638

We didn't have any reports that this was causing a problem
but I didn't want to leave the same root cause lurking.

Change-Id: I0d42c4abf4d642f5a33e094f88bde7bf387d2f2f
Bug: b/409859319
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/983176
Reviewed-by: Daniel Dilan <danieldi...@google.com>

diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h
index d14df3677c..fb644ba5e3 100644
--- a/src/opts/SkRasterPipeline_opts.h
+++ b/src/opts/SkRasterPipeline_opts.h
@@ -161,6 +161,8 @@ namespace SK_OPTS_NS {
 
     template <typename T>
     SI T gather(const T* p, U32 ix) { return p[ix]; }
+    template <typename T>
+    SI T gather_unaligned(const T* p, U32 ix) { return gather<T>(p, ix); }
 
     SI void scatter_masked(I32 src, int* dst, U32 ix, I32 mask) {
         dst[ix] = mask ? src : dst[ix];
@@ -274,9 +276,23 @@ namespace SK_OPTS_NS {
     #endif
 
     template <typename T>
-    SI V<T> gather(const T* p, U32 ix) {
-        return V<T>{p[ix[0]], p[ix[1]], p[ix[2]], p[ix[3]]};
+    SI V<T> gather(const T* ptr, U32 ix) {
+        // The compiler assumes ptr is aligned, which caused crashes on some
+        // arm32 chips because a register was marked as "aligned to 32 bits"
+        // incorrectly. https://crbug.com/skia/409859319
+        SkASSERTF(reinterpret_cast<uintptr_t>(ptr) % alignof(T) == 0,
+                 "Should use gather_unaligned");
+        return V<T>{ptr[ix[0]], ptr[ix[1]], ptr[ix[2]], ptr[ix[3]]};
+    }
+    template <typename T>
+    SI V<T> gather_unaligned(const T* ptr, U32 ix) {
+        // This tells the compiler ptr might not be aligned appropriately, so
+        // it generates better assembly.
+        typedef T __attribute__ ((aligned (1))) unaligned_ptr;
+        const unaligned_ptr* uptr = static_cast<const unaligned_ptr*>(ptr);
+        return V<T>{uptr[ix[0]], uptr[ix[1]], uptr[ix[2]], uptr[ix[3]]};
     }
+
     SI void scatter_masked(I32 src, int* dst, U32 ix, I32 mask) {
         I32 before = gather(dst, ix);
         I32 after = if_then_else(mask, src, before);
@@ -389,6 +405,11 @@ namespace SK_OPTS_NS {
         };
         return sk_bit_cast<U64>(parts);
     }
+    template <typename T>
+    SI V<T> gather_unaligned(const T* p, U32 ix) {
+        return gather(p, ix);
+    }
+
     template <typename V, typename S>
     SI void scatter_masked(V src, S* dst, U32 ix, I32 mask) {
         V before = gather(dst, ix);
@@ -627,6 +648,11 @@ namespace SK_OPTS_NS {
         };
         return sk_bit_cast<U64>(parts);
     }
+    template <typename T>
+    SI V<T> gather_unaligned(const T* p, U32 ix) {
+        return gather(p, ix);
+    }
+
     SI void scatter_masked(I32 src, int* dst, U32 ix, I32 mask) {
         I32 before = gather(dst, ix);
         I32 after = if_then_else(mask, src, before);
@@ -827,6 +853,10 @@ namespace SK_OPTS_NS {
     SI V<T> gather(const T* p, U32 ix) {
         return V<T>{p[ix[0]], p[ix[1]], p[ix[2]], p[ix[3]]};
     }
+    template <typename T>
+    SI V<T> gather_unaligned(const T* p, U32 ix) {
+        return gather(p, ix);
+    }
     SI void scatter_masked(I32 src, int* dst, U32 ix, I32 mask) {
         I32 before = gather(dst, ix);
         I32 after = if_then_else(mask, src, before);
@@ -988,6 +1018,10 @@ namespace SK_OPTS_NS {
         return V<T>{ p[ix[0]], p[ix[1]], p[ix[2]], p[ix[3]],
                      p[ix[4]], p[ix[5]], p[ix[6]], p[ix[7]], };
     }
+    template <typename T>
+    SI V<T> gather_unaligned(const T* p, U32 ix) {
+        return gather(p, ix);
+    }
 
     template <typename V, typename S>
     SI void scatter_masked(V src, S* dst, U32 ix, I32 mask) {
@@ -1195,6 +1229,10 @@ namespace SK_OPTS_NS {
        ret = (F)__lsx_vinsgr2vr_w(ret, p[ix3], 3);
        return ret;
     }
+    template <typename T>
+    SI V<T> gather_unaligned(const T* p, U32 ix) {
+        return gather(p, ix);
+    }
 
     template <typename V, typename S>
     SI void scatter_masked(V src, S* dst, U32 ix, I32 mask) {
@@ -2854,7 +2892,7 @@ HIGHP_STAGE(load_565_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 HIGHP_STAGE(gather_565, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint16_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r,g);
-    from_565(gather(ptr, ix), &r,&g,&b);
+    from_565(gather_unaligned(ptr, ix), &r,&g,&b);
     a = F1;
 }
 HIGHP_STAGE(store_565, const SkRasterPipelineContexts::MemoryCtx* ctx) {
@@ -2877,7 +2915,7 @@ HIGHP_STAGE(load_4444_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 HIGHP_STAGE(gather_4444, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint16_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r,g);
-    from_4444(gather(ptr, ix), &r,&g,&b,&a);
+    from_4444(gather_unaligned(ptr, ix), &r,&g,&b,&a);
 }
 HIGHP_STAGE(store_4444, const SkRasterPipelineContexts::MemoryCtx* ctx) {
     auto ptr = ptr_at_xy<uint16_t>(ctx, dx,dy);
@@ -2899,7 +2937,7 @@ HIGHP_STAGE(load_8888_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 HIGHP_STAGE(gather_8888, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint32_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r,g);
-    from_8888(gather(ptr, ix), &r,&g,&b,&a);
+    from_8888(gather_unaligned(ptr, ix), &r,&g,&b,&a);
 }
 HIGHP_STAGE(store_8888, const SkRasterPipelineContexts::MemoryCtx* ctx) {
     auto ptr = ptr_at_xy<uint32_t>(ctx, dx,dy);
@@ -2926,7 +2964,7 @@ HIGHP_STAGE(load_rg88_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 HIGHP_STAGE(gather_rg88, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint16_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r, g);
-    from_88(gather(ptr, ix), &r, &g);
+    from_88(gather_unaligned(ptr, ix), &r, &g);
     b = F0;
     a = F1;
 }
@@ -2950,7 +2988,7 @@ HIGHP_STAGE(gather_a16, const 
SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint16_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r, g);
     r = g = b = F0;
-    a = from_short(gather(ptr, ix));
+    a = from_short(gather_unaligned(ptr, ix));
 }
 HIGHP_STAGE(store_a16, const SkRasterPipelineContexts::MemoryCtx* ctx) {
     auto ptr = ptr_at_xy<uint16_t>(ctx, dx,dy);
@@ -2974,7 +3012,7 @@ HIGHP_STAGE(load_rg1616_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 HIGHP_STAGE(gather_rg1616, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint32_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r, g);
-    from_1616(gather(ptr, ix), &r, &g);
+    from_1616(gather_unaligned(ptr, ix), &r, &g);
     b = F0;
     a = F1;
 }
@@ -2997,7 +3035,7 @@ HIGHP_STAGE(load_16161616_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 HIGHP_STAGE(gather_16161616, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint64_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r, g);
-    from_16161616(gather(ptr, ix), &r, &g, &b, &a);
+    from_16161616(gather_unaligned(ptr, ix), &r, &g, &b, &a);
 }
 HIGHP_STAGE(store_16161616, const SkRasterPipelineContexts::MemoryCtx* ctx) {
     auto ptr = ptr_at_xy<uint16_t>(ctx, 4*dx,4*dy);
@@ -3021,7 +3059,7 @@ HIGHP_STAGE(load_10x6_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 HIGHP_STAGE(gather_10x6, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint64_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r, g);
-    from_10x6(gather(ptr, ix), &r, &g, &b, &a);
+    from_10x6(gather_unaligned(ptr, ix), &r, &g, &b, &a);
 }
 HIGHP_STAGE(store_10x6, const SkRasterPipelineContexts::MemoryCtx* ctx) {
     auto ptr = ptr_at_xy<uint16_t>(ctx, 4*dx,4*dy);
@@ -3053,17 +3091,17 @@ HIGHP_STAGE(load_1010102_xr_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx)
 HIGHP_STAGE(gather_1010102, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint32_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r,g);
-    from_1010102(gather(ptr, ix), &r,&g,&b,&a);
+    from_1010102(gather_unaligned(ptr, ix), &r,&g,&b,&a);
 }
 HIGHP_STAGE(gather_1010102_xr, const SkRasterPipelineContexts::GatherCtx* ctx) 
{
     const uint32_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r, g);
-    from_1010102_xr(gather(ptr, ix), &r,&g,&b,&a);
+    from_1010102_xr(gather_unaligned(ptr, ix), &r,&g,&b,&a);
 }
 HIGHP_STAGE(gather_10101010_xr, const SkRasterPipelineContexts::GatherCtx* 
ctx) {
     const uint64_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r, g);
-    from_10101010_xr(gather(ptr, ix), &r, &g, &b, &a);
+    from_10101010_xr(gather_unaligned(ptr, ix), &r, &g, &b, &a);
 }
 HIGHP_STAGE(load_10101010_xr, const SkRasterPipelineContexts::MemoryCtx* ctx) {
     auto ptr = ptr_at_xy<const uint64_t>(ctx, dx, dy);
@@ -3127,7 +3165,7 @@ HIGHP_STAGE(load_f16_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 HIGHP_STAGE(gather_f16, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint64_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r,g);
-    auto px = gather(ptr, ix);
+    auto px = gather_unaligned(ptr, ix);
 
     U16 R,G,B,A;
     load4((const uint16_t*)&px, &R,&G,&B,&A);
@@ -3164,7 +3202,7 @@ HIGHP_STAGE(gather_af16, const 
SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint16_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r, g);
     r = g = b = F0;
-    a = from_half(gather(ptr, ix));
+    a = from_half(gather_unaligned(ptr, ix));
 }
 HIGHP_STAGE(store_af16, const SkRasterPipelineContexts::MemoryCtx* ctx) {
     auto ptr = ptr_at_xy<uint16_t>(ctx, dx,dy);
@@ -3194,7 +3232,7 @@ HIGHP_STAGE(load_rgf16_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 HIGHP_STAGE(gather_rgf16, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint32_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r, g);
-    auto px = gather(ptr, ix);
+    auto px = gather_unaligned(ptr, ix);
 
     U16 R,G;
     load2((const uint16_t*)&px, &R, &G);
@@ -3220,10 +3258,10 @@ HIGHP_STAGE(load_f32_dst, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 HIGHP_STAGE(gather_f32, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const float* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, r,g);
-    r = gather(ptr, 4*ix + 0);
-    g = gather(ptr, 4*ix + 1);
-    b = gather(ptr, 4*ix + 2);
-    a = gather(ptr, 4*ix + 3);
+    r = gather_unaligned(ptr, 4*ix + 0);
+    g = gather_unaligned(ptr, 4*ix + 1);
+    b = gather_unaligned(ptr, 4*ix + 2);
+    a = gather_unaligned(ptr, 4*ix + 3);
 }
 HIGHP_STAGE(store_f32, const SkRasterPipelineContexts::MemoryCtx* ctx) {
     auto ptr = ptr_at_xy<float>(ctx, 4*dx,4*dy);
@@ -5009,7 +5047,7 @@ HIGHP_STAGE(bilerp_clamp_8888, const 
SkRasterPipelineContexts::GatherCtx* ctx) {
         U32 ix = ix_and_ptr(&ptr, ctx, x,y);
 
         F sr,sg,sb,sa;
-        from_8888(gather(ptr, ix), &sr,&sg,&sb,&sa);
+        from_8888(gather_unaligned(ptr, ix), &sr,&sg,&sb,&sa);
 
         // In bilinear interpolation, the 4 pixels at +/- 0.5 offsets from the 
sample pixel center
         // are combined in direct proportion to their area overlapping that 
logical query pixel.
@@ -5061,7 +5099,7 @@ HIGHP_STAGE(bicubic_clamp_8888, const 
SkRasterPipelineContexts::GatherCtx* ctx)
             U32 ix = ix_and_ptr(&ptr, ctx, sample_x, sample_y);
 
             F sr,sg,sb,sa;
-            from_8888(gather(ptr, ix), &sr,&sg,&sb,&sa);
+            from_8888(gather_unaligned(ptr, ix), &sr,&sg,&sb,&sa);
 
             r = mad(scale, sr, r);
             g = mad(scale, sg, g);
@@ -5959,7 +5997,6 @@ SI void store(T* ptr, V v) {
     }
 #endif
 
-
 // ~~~~~~ 32-bit memory loads and stores ~~~~~~ //
 
 SI void from_8888(U32 rgba, U16* r, U16* g, U16* b, U16* a) {

++++++ ppc-skia-revert-3.patch ++++++
>From 68e53210b76cadb14e98aaea58e30388f94bc9a1 Mon Sep 17 00:00:00 2001
From: Kaylee Lubick <kjlub...@google.com>
Date: Mon, 21 Apr 2025 14:19:04 -0400
Subject: [PATCH] Avoid assumption of 32 bit aligned pixel data in RP's lowp
 gather()

The attached bug has most of the context, but the problem boils down
to the compiler assuming that a uint32_t* was aligned to 32 bits
and generated instructions like:
    vld1.32     {d16[0]}, [r4:32]
where the :32 means "aligned to 32 bits" [1]. Pixel data is usually
aligned to the so-called natural alignment (pointer size) because
we allocate it with `new` or `calloc`. However, if we were to call
drawRect and use a source starting at x = 1, this eventually leads
to SkBitmap::extractSubset creating a SkPixelRef that starts at
the original pixel* + 1 (which is now no longer evenly divisible
by 4).

Certain ARM devices were crashing on this generated assembly. Rather
than trying to write the assembly code by hand or use intrinsics,
we can tell GCC and Clang that the pointer might be unaligned and
then the generated instructions lack the :32 modifier (and make these
devices not crash anymore):
    vld1.32     {d16[0]}, [r4]

This fix is in our low precision pipeline code but may also be needed
in our high precision code too (which uses similar code). I wanted
to be careful with this change because it's pretty critical to
performance, so I kept the aligned version for cases where we know
the data is aligned (e.g. reading factors and biases for our gradient
stages).

This solution was inspired by Open CV
https://github.com/opencv/opencv/issues/25265

[1] 
https://developer.arm.com/documentation/ddi0597/2025-03/SIMD-FP-Instructions/VLD1--multiple-single-elements---Load-multiple-single-1-element-structures-to-one--two--three--or-four-registers-

Change-Id: I2892740acbb9db7434aab897e11fa41c3548a196
Bug: b/409859319
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/981638
Commit-Queue: Kaylee Lubick <kjlub...@google.com>
Commit-Queue: Daniel Dilan <danieldi...@google.com>
Auto-Submit: Kaylee Lubick <kjlub...@google.com>
Reviewed-by: Daniel Dilan <danieldi...@google.com>

diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h
index 9573b84baf..d14df3677c 100644
--- a/src/opts/SkRasterPipeline_opts.h
+++ b/src/opts/SkRasterPipeline_opts.h
@@ -5877,6 +5877,10 @@ SI void store(T* ptr, V v) {
         return (U32)_mm512_i32gather_epi32((__m512i)ix, ptr, 4);
     }
 
+    template <typename V, typename T>
+    SI V gather_unaligned(const T* ptr, U32 ix) {
+        return gather<V, T>(ptr, ix);
+    }
 #elif defined(SKRP_CPU_HSW)
     template <typename V, typename T>
     SI V gather(const T* ptr, U32 ix) {
@@ -5903,6 +5907,11 @@ SI void store(T* ptr, V v) {
         return join<U32>(_mm256_i32gather_epi32((const int*)ptr, lo, 4),
                          _mm256_i32gather_epi32((const int*)ptr, hi, 4));
     }
+
+    template <typename V, typename T>
+    SI V gather_unaligned(const T* ptr, U32 ix) {
+        return gather<V, T>(ptr, ix);
+    }
 #elif defined(SKRP_CPU_LASX)
     template <typename V, typename T>
     SI V gather(const T* ptr, U32 ix) {
@@ -5911,12 +5920,43 @@ SI void store(T* ptr, V v) {
                   ptr[ix[ 8]], ptr[ix[ 9]], ptr[ix[10]], ptr[ix[11]],
                   ptr[ix[12]], ptr[ix[13]], ptr[ix[14]], ptr[ix[15]], };
     }
+
+    template <typename V, typename T>
+    SI V gather_unaligned(const T* ptr, U32 ix) {
+        return gather<V, T>(ptr, ix);
+    }
+#elif defined(SKRP_CPU_NEON)
+    template <typename V, typename T>
+    SI V gather(const T* ptr, U32 ix) {
+        // The compiler assumes ptr is aligned, which caused crashes on some
+        // arm32 chips because a register was marked as "aligned to 32 bits"
+        // incorrectly. https://crbug.com/skia/409859319
+        SkASSERTF(reinterpret_cast<uintptr_t>(ptr) % alignof(T) == 0,
+                 "Should use gather_unaligned");
+        return V{ ptr[ix[ 0]], ptr[ix[ 1]], ptr[ix[ 2]], ptr[ix[ 3]],
+                  ptr[ix[ 4]], ptr[ix[ 5]], ptr[ix[ 6]], ptr[ix[ 7]], };
+    }
+
+    template <typename V, typename T>
+    SI V gather_unaligned(const T* ptr, U32 ix) {
+        // This tells the compiler ptr might not be aligned appropriately, so
+        // it generates better assembly.
+        typedef T __attribute__ ((aligned (1))) unaligned_ptr;
+        const unaligned_ptr* uptr = static_cast<const unaligned_ptr*>(ptr);
+        return V{ uptr[ix[ 0]], uptr[ix[ 1]], uptr[ix[ 2]], uptr[ix[ 3]],
+                  uptr[ix[ 4]], uptr[ix[ 5]], uptr[ix[ 6]], uptr[ix[ 7]], };
+    }
 #else
     template <typename V, typename T>
     SI V gather(const T* ptr, U32 ix) {
         return V{ ptr[ix[ 0]], ptr[ix[ 1]], ptr[ix[ 2]], ptr[ix[ 3]],
                   ptr[ix[ 4]], ptr[ix[ 5]], ptr[ix[ 6]], ptr[ix[ 7]], };
     }
+
+    template <typename V, typename T>
+    SI V gather_unaligned(const T* ptr, U32 ix) {
+        return gather<V, T>(ptr, ix);
+    }
 #endif
 
 
@@ -6049,7 +6089,7 @@ LOWP_STAGE_PP(store_8888, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 LOWP_STAGE_GP(gather_8888, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint32_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, x,y);
-    from_8888(gather<U32>(ptr, ix), &r, &g, &b, &a);
+    from_8888(gather_unaligned<U32>(ptr, ix), &r, &g, &b, &a);
 }
 
 // ~~~~~~ 16-bit memory loads and stores ~~~~~~ //
@@ -6099,7 +6139,7 @@ LOWP_STAGE_PP(store_565, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 LOWP_STAGE_GP(gather_565, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint16_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, x,y);
-    from_565(gather<U16>(ptr, ix), &r, &g, &b);
+    from_565(gather_unaligned<U16>(ptr, ix), &r, &g, &b);
     a = U16_255;
 }
 
@@ -6149,7 +6189,7 @@ LOWP_STAGE_PP(store_4444, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 LOWP_STAGE_GP(gather_4444, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint16_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, x,y);
-    from_4444(gather<U16>(ptr, ix), &r,&g,&b,&a);
+    from_4444(gather_unaligned<U16>(ptr, ix), &r,&g,&b,&a);
 }
 
 SI void from_88(U16 rg, U16* r, U16* g) {
@@ -6198,7 +6238,7 @@ LOWP_STAGE_PP(store_rg88, const 
SkRasterPipelineContexts::MemoryCtx* ctx) {
 LOWP_STAGE_GP(gather_rg88, const SkRasterPipelineContexts::GatherCtx* ctx) {
     const uint16_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, x, y);
-    from_88(gather<U16>(ptr, ix), &r, &g);
+    from_88(gather_unaligned<U16>(ptr, ix), &r, &g);
     b = U16_0;
     a = U16_255;
 }
@@ -6625,11 +6665,11 @@ LOWP_STAGE_GP(bilerp_clamp_8888, const 
SkRasterPipelineContexts::GatherCtx* ctx)
     const uint32_t* ptr;
     U32 ix = ix_and_ptr(&ptr, ctx, sx, sy);
     U16 leftR, leftG, leftB, leftA;
-    from_8888(gather<U32>(ptr, ix), &leftR,&leftG,&leftB,&leftA);
+    from_8888(gather_unaligned<U32>(ptr, ix), &leftR,&leftG,&leftB,&leftA);
 
     ix = ix_and_ptr(&ptr, ctx, sx+1, sy);
     U16 rightR, rightG, rightB, rightA;
-    from_8888(gather<U32>(ptr, ix), &rightR,&rightG,&rightB,&rightA);
+    from_8888(gather_unaligned<U32>(ptr, ix), &rightR,&rightG,&rightB,&rightA);
 
     U16 topR = lerpX(leftR, rightR),
         topG = lerpX(leftG, rightG),
@@ -6637,10 +6677,10 @@ LOWP_STAGE_GP(bilerp_clamp_8888, const 
SkRasterPipelineContexts::GatherCtx* ctx)
         topA = lerpX(leftA, rightA);
 
     ix = ix_and_ptr(&ptr, ctx, sx, sy+1);
-    from_8888(gather<U32>(ptr, ix), &leftR,&leftG,&leftB,&leftA);
+    from_8888(gather_unaligned<U32>(ptr, ix), &leftR,&leftG,&leftB,&leftA);
 
     ix = ix_and_ptr(&ptr, ctx, sx+1, sy+1);
-    from_8888(gather<U32>(ptr, ix), &rightR,&rightG,&rightB,&rightA);
+    from_8888(gather_unaligned<U32>(ptr, ix), &rightR,&rightG,&rightB,&rightA);
 
     U16 bottomR = lerpX(leftR, rightR),
         bottomG = lerpX(leftG, rightG),

++++++ system-libdrm.patch ++++++
--- /var/tmp/diff_new_pack.AvyN3L/_old  2025-06-05 20:36:08.489789645 +0200
+++ /var/tmp/diff_new_pack.AvyN3L/_new  2025-06-05 20:36:08.493789811 +0200
@@ -31,8 +31,8 @@
 ===================================================================
 --- 
chromium-114.0.5735.90.orig/media/gpu/chromeos/video_decoder_pipeline_unittest.cc
 +++ 
chromium-114.0.5735.90/media/gpu/chromeos/video_decoder_pipeline_unittest.cc
-@@ -25,7 +25,7 @@
- #include "media/gpu/chromeos/dmabuf_video_frame_pool.h"
+@@ -26,7 +26,7 @@
+ #include "media/gpu/chromeos/frame_resource_converter.h"
  #include "testing/gmock/include/gmock/gmock.h"
  #include "testing/gtest/include/gtest/gtest.h"
 -#include "third_party/libdrm/src/include/drm/drm_fourcc.h"

Reply via email to