From: voidlinux-github@inbox.vuxu.org
To: ml@inbox.vuxu.org
Subject: Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
Date: Fri, 21 Jun 2019 18:22:45 +0200 [thread overview]
Message-ID: <20190621162245.8frBncmKYRY0p8ijBuN_ERc7g6GumsJw81JxF0u54bE@z> (raw)
In-Reply-To: <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
[-- Attachment #1: Type: text/plain, Size: 645 bytes --]
There is an updated pull request by Johnnynator against master on the void-packages repository
https://github.com/Johnnynator/void-packages qt5.13
https://github.com/void-linux/void-packages/pull/11891
[WIP] qt5: update to 5.13.0
Test repo up on https://void.johnnynator.dev/qt5.13/
Qt5-webengine now always requires a 32bit host compiler when cross compiling to a 32bit cross arch (e.g. x86_64 -> arm*), so we have to disable it for now on all 32bit arm* architectures.
Status: qt5-webengine is still broken on musl
Should resolve #12550
A patch file from https://github.com/void-linux/void-packages/pull/11891.patch is attached
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-qt5.13-11891.patch --]
[-- Type: application/text/x-diff, Size: 486627 bytes --]
From a0dd45a593fa68c6dad960685226d1261063536e Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/5] qt5: update to 5.13.0
qt5: update ppc64(le) support + add big endian
---
common/shlibs | 3 +
srcpkgs/{qt5-canvas3d => qt5-lottie} | 0
srcpkgs/qt5-lottie-devel | 1 +
.../0090-hard-disable-qmlchachegen.patch | 10 +
srcpkgs/qt5/files/assistant.pro | 2 -
srcpkgs/qt5/files/lrelease.pro | 10 +-
srcpkgs/qt5/files/lupdate.pro | 8 +-
srcpkgs/qt5/files/moc/moc.pro | 8 -
.../qt5/files/qdbuscpp2xml/qdbuscpp2xml.pro | 8 -
srcpkgs/qt5/files/qlalr/qlalr.pro | 23 -
srcpkgs/qt5/files/qmlimportscanner.pro | 2 +-
srcpkgs/qt5/files/qmllint.pro | 4 +-
srcpkgs/qt5/files/qmlmin.pro | 2 +-
srcpkgs/qt5/files/qttools_src.pro | 1 -
srcpkgs/qt5/files/rcc.pro | 2 +
srcpkgs/qt5/files/rcc/rcc.pro | 6 -
srcpkgs/qt5/files/uic.pro | 1 +
srcpkgs/qt5/files/uic/uic.pro | 11 -
...t-between-musl-libc-dirent.h-and-lss.patch | 35 -
.../patches/0004-musl-dispatch-to-musl.patch | 26 +-
...-is-a-nonportable-alias-for-signal.h.patch | 81 -
.../qt5/patches/0008-musl-no-mallinfo.patch | 11 -
srcpkgs/qt5/patches/0013-musl-serialio.patch | 12 -
.../qt5/patches/0017-musl-stackstart.patch | 4 +-
.../qt5/patches/0021-chromium-mojo-gcc8.patch | 18 -
.../qt5/patches/0022-libressl-compat.patch | 27 +-
.../qt5/patches/0023-enable_tools-cross.patch | 35 +-
srcpkgs/qt5/patches/0027-skia_cpu-be.patch | 12 -
srcpkgs/qt5/patches/0028-webrtc-be.patch | 12 -
srcpkgs/qt5/patches/0029-musl-libevent.patch | 121 -
..._remove_our_use_of_syscall_for-statx.patch | 119 -
srcpkgs/qt5/patches/0034-gcc-8.3-build.patch | 236 -
srcpkgs/qt5/patches/0035-gcc-9.1-build.patch | 35 -
srcpkgs/qt5/patches/0040-yasm-nls.patch | 13 +
srcpkgs/qt5/patches/0041-libressl.patch | 11 +
.../0042-arm-void-is-not-android.patch | 21 +
...io.patch => 0043-libressl-const-bio.patch} | 8 +-
...info.patch => 0044-qt-musl-execinfo.patch} | 85 +-
.../0045-qt-musl-thread-stacksize.patch | 26 +
.../qt5/patches/0046-sandbox-membarrier.patch | 60 +
.../qt5/patches/0047-gn-cross-sysroot.patch | 24 +
.../qt5/patches/0089-webengine-ppc64.patch | 20 +
.../qt5/patches/0090-chromium-ppc64le.patch | 4267 +++++++++++++++++
.../patches/0091-chromium-ppc64-musl.patch | 141 +
.../qt5/patches/0092-chromium-ppc64-be.patch | 2970 ++++++++++++
.../qt5/patches/0093-chromium-v8-elfv2.patch | 43 +
.../0094-big-endian-skia-portable.patch | 17 +
.../patches/qtwebengine-chromium-ppc64.patch | 2112 --------
.../patches/qtwebengine-enable-ppc64.patch | 41 -
srcpkgs/qt5/template | 141 +-
50 files changed, 7807 insertions(+), 3079 deletions(-)
rename srcpkgs/{qt5-canvas3d => qt5-lottie} (100%)
create mode 120000 srcpkgs/qt5-lottie-devel
create mode 100644 srcpkgs/qt5/files/0090-hard-disable-qmlchachegen.patch
delete mode 100644 srcpkgs/qt5/files/moc/moc.pro
delete mode 100644 srcpkgs/qt5/files/qdbuscpp2xml/qdbuscpp2xml.pro
delete mode 100644 srcpkgs/qt5/files/qlalr/qlalr.pro
delete mode 100644 srcpkgs/qt5/files/rcc/rcc.pro
delete mode 100644 srcpkgs/qt5/files/uic/uic.pro
delete mode 100644 srcpkgs/qt5/patches/0001-Fix-conflict-between-musl-libc-dirent.h-and-lss.patch
delete mode 100644 srcpkgs/qt5/patches/0006-sys-signal.h-is-a-nonportable-alias-for-signal.h.patch
delete mode 100644 srcpkgs/qt5/patches/0013-musl-serialio.patch
delete mode 100644 srcpkgs/qt5/patches/0021-chromium-mojo-gcc8.patch
delete mode 100644 srcpkgs/qt5/patches/0027-skia_cpu-be.patch
delete mode 100644 srcpkgs/qt5/patches/0028-webrtc-be.patch
delete mode 100644 srcpkgs/qt5/patches/0029-musl-libevent.patch
delete mode 100644 srcpkgs/qt5/patches/0033-revert_remove_our_use_of_syscall_for-statx.patch
delete mode 100644 srcpkgs/qt5/patches/0034-gcc-8.3-build.patch
delete mode 100644 srcpkgs/qt5/patches/0035-gcc-9.1-build.patch
create mode 100644 srcpkgs/qt5/patches/0040-yasm-nls.patch
create mode 100644 srcpkgs/qt5/patches/0041-libressl.patch
create mode 100644 srcpkgs/qt5/patches/0042-arm-void-is-not-android.patch
rename srcpkgs/qt5/patches/{libressl-const-bio.patch => 0043-libressl-const-bio.patch} (84%)
rename srcpkgs/qt5/patches/{0005-musl-no-execinfo.patch => 0044-qt-musl-execinfo.patch} (56%)
create mode 100644 srcpkgs/qt5/patches/0045-qt-musl-thread-stacksize.patch
create mode 100644 srcpkgs/qt5/patches/0046-sandbox-membarrier.patch
create mode 100644 srcpkgs/qt5/patches/0047-gn-cross-sysroot.patch
create mode 100644 srcpkgs/qt5/patches/0089-webengine-ppc64.patch
create mode 100644 srcpkgs/qt5/patches/0090-chromium-ppc64le.patch
create mode 100644 srcpkgs/qt5/patches/0091-chromium-ppc64-musl.patch
create mode 100644 srcpkgs/qt5/patches/0092-chromium-ppc64-be.patch
create mode 100644 srcpkgs/qt5/patches/0093-chromium-v8-elfv2.patch
create mode 100644 srcpkgs/qt5/patches/0094-big-endian-skia-portable.patch
delete mode 100644 srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
delete mode 100644 srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
diff --git a/common/shlibs b/common/shlibs
index 0f6742b2fa4..96ee3526e57 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -1850,10 +1850,13 @@ libQt5Quick.so.5 qt5-declarative-5.6.0_1
libQt5QuickTest.so.5 qt5-declarative-5.6.0_1
libQt5QuickWidgets.so.5 qt5-declarative-5.6.0_1
libQt5QuickParticles.so.5 qt5-declarative-5.6.0_1
+libQt5QuickShapes.so.5 qt5-declarative-5.12.1_1
libQt5QuickControls2.so.5 qt5-quickcontrols2-5.7.1_1
libQt5QuickTemplates2.so.5 qt5-quickcontrols2-5.7.1_1
libQt5Positioning.so.5 qt5-location-5.6.0_1
libQt5Location.so.5 qt5-location-5.6.0_1
+libQt5PositioningQuick.so.5 qt5-location-5.12.1_1
+libQt5VirtualKeyboard.so.5 qt5-virtualkeyboard-5.12.1_1
libQt5Multimedia.so.5 qt5-multimedia-5.6.0_1
libQt5MultimediaGstTools.so.5 qt5-multimedia-5.10.1_1
libQt5MultimediaQuick.so.5 qt5-multimedia-5.10.1_1
diff --git a/srcpkgs/qt5-canvas3d b/srcpkgs/qt5-lottie
similarity index 100%
rename from srcpkgs/qt5-canvas3d
rename to srcpkgs/qt5-lottie
diff --git a/srcpkgs/qt5-lottie-devel b/srcpkgs/qt5-lottie-devel
new file mode 120000
index 00000000000..75793eb6664
--- /dev/null
+++ b/srcpkgs/qt5-lottie-devel
@@ -0,0 +1 @@
+qt5
\ No newline at end of file
diff --git a/srcpkgs/qt5/files/0090-hard-disable-qmlchachegen.patch b/srcpkgs/qt5/files/0090-hard-disable-qmlchachegen.patch
new file mode 100644
index 00000000000..5ecdfb30f5b
--- /dev/null
+++ b/srcpkgs/qt5/files/0090-hard-disable-qmlchachegen.patch
@@ -0,0 +1,10 @@
+--- qtdeclarative/tools/tools.pro 2019-04-09 01:01:07.000000000 +0200
++++ - 2019-04-21 00:24:16.192966345 +0200
+@@ -7,7 +7,6 @@
+ qmlmin \
+ qmlimportscanner
+
+- qtConfig(commandlineparser):qtConfig(xmlstreamwriter): SUBDIRS += qmlcachegen
+ }
+
+ qtConfig(thread):!android|android_app:!wasm {
diff --git a/srcpkgs/qt5/files/assistant.pro b/srcpkgs/qt5/files/assistant.pro
index 3e32776a827..5100f61105e 100644
--- a/srcpkgs/qt5/files/assistant.pro
+++ b/srcpkgs/qt5/files/assistant.pro
@@ -5,9 +5,7 @@ SUBDIRS += \
assistant \
qhelpgenerator \
qcollectiongenerator \
- qhelpconverter
assistant.depends = help
-qhelpgenerator.depends = help
qcollectiongenerator.depends = help
qhelpconverter.depends = help
diff --git a/srcpkgs/qt5/files/lrelease.pro b/srcpkgs/qt5/files/lrelease.pro
index 4dbd4ce5327..bab6b2928e4 100644
--- a/srcpkgs/qt5/files/lrelease.pro
+++ b/srcpkgs/qt5/files/lrelease.pro
@@ -1,10 +1,16 @@
QT = core qml network core-private
DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
-SOURCES += main.cpp
+HEADERS += \
+ ../shared/projectdescriptionreader.h \
+ ../shared/runqttool.h
+
+SOURCES += \
+ ../shared/projectdescriptionreader.cpp \
+ ../shared/runqttool.cpp \
+ main.cpp
include(../shared/formats.pri)
-include(../shared/proparser.pri)
qmake.name = QMAKE
qmake.value = $$shell_path($$QMAKE_QMAKE)
diff --git a/srcpkgs/qt5/files/lupdate.pro b/srcpkgs/qt5/files/lupdate.pro
index c867ace9099..bf687113c86 100644
--- a/srcpkgs/qt5/files/lupdate.pro
+++ b/srcpkgs/qt5/files/lupdate.pro
@@ -3,13 +3,14 @@ QT = core qml network core-private qmldevtools-private
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
include(../shared/formats.pri)
-include(../shared/proparser.pri)
-DEFINES += PROEVALUATOR_DEBUG
SOURCES += \
main.cpp \
merge.cpp \
+ ../shared/projectdescriptionreader.cpp \
+ ../shared/runqttool.cpp \
+ ../shared/qrcreader.cpp \
../shared/simtexth.cpp \
\
cpp.cpp \
@@ -20,6 +21,9 @@ SOURCES += qdeclarative.cpp
HEADERS += \
lupdate.h \
+ ../shared/projectdescriptionreader.h \
+ ../shared/qrcreader.h \
+ ../shared/runqttool.h \
../shared/simtexth.h
mingw {
diff --git a/srcpkgs/qt5/files/moc/moc.pro b/srcpkgs/qt5/files/moc/moc.pro
deleted file mode 100644
index 54425cfb462..00000000000
--- a/srcpkgs/qt5/files/moc/moc.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT += core-private
-DEFINES += QT_MOC
-
-include(moc.pri)
-HEADERS += qdatetime_p.h
-SOURCES += main.cpp
-
-load(qt_tool)
diff --git a/srcpkgs/qt5/files/qdbuscpp2xml/qdbuscpp2xml.pro b/srcpkgs/qt5/files/qdbuscpp2xml/qdbuscpp2xml.pro
deleted file mode 100644
index 7ca6d36bcb8..00000000000
--- a/srcpkgs/qt5/files/qdbuscpp2xml/qdbuscpp2xml.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-QT = core-private dbus-private
-QMAKE_CXXFLAGS += $$QT_HOST_CFLAGS_DBUS
-
-include(../moc/moc.pri)
-
-SOURCES += qdbuscpp2xml.cpp
-
-load(qt_tool)
diff --git a/srcpkgs/qt5/files/qlalr/qlalr.pro b/srcpkgs/qt5/files/qlalr/qlalr.pro
deleted file mode 100644
index 3d776727fef..00000000000
--- a/srcpkgs/qt5/files/qlalr/qlalr.pro
+++ /dev/null
@@ -1,23 +0,0 @@
-SOURCES += \
- compress.cpp \
- cppgenerator.cpp \
- dotgraph.cpp \
- lalr.cpp \
- main.cpp \
- parsetable.cpp \
- recognizer.cpp \
- grammar.cpp
-
-HEADERS += \
- compress.h \
- cppgenerator.h \
- dotgraph.h \
- lalr.h \
- parsetable.h \
- recognizer.h \
- grammar_p.h
-
-OTHER_FILES += \
- lalr.g
-
-load(qt_tool)
diff --git a/srcpkgs/qt5/files/qmlimportscanner.pro b/srcpkgs/qt5/files/qmlimportscanner.pro
index f92234ad442..57c228b8540 100644
--- a/srcpkgs/qt5/files/qmlimportscanner.pro
+++ b/srcpkgs/qt5/files/qmlimportscanner.pro
@@ -1,7 +1,7 @@
QT = core qml network qmldevtools-private
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
-SOURCES += main.cpp ../../src/qml/parser/qqmljsgrammar.cpp
+SOURCES += main.cpp ../../src/qml/qqmljsgrammar.cpp
QMAKE_TARGET_DESCRIPTION = QML Import Scanner
diff --git a/srcpkgs/qt5/files/qmllint.pro b/srcpkgs/qt5/files/qmllint.pro
index 032d02cf33b..409a378bfcb 100644
--- a/srcpkgs/qt5/files/qmllint.pro
+++ b/srcpkgs/qt5/files/qmllint.pro
@@ -1,6 +1,6 @@
-QT = core qml network qmldevtools-private
+QT = core qml qmldevtools-private
-SOURCES += main.cpp ../../src/qml/parser/qqmljsgrammar.cpp
+SOURCES += main.cpp ../../src/qml/qqmljsgrammar.cpp
QMAKE_TARGET_DESCRIPTION = QML Syntax Verifier
diff --git a/srcpkgs/qt5/files/qmlmin.pro b/srcpkgs/qt5/files/qmlmin.pro
index 58f75c76e01..f096b414bf4 100644
--- a/srcpkgs/qt5/files/qmlmin.pro
+++ b/srcpkgs/qt5/files/qmlmin.pro
@@ -1,5 +1,5 @@
QT = core qml network qmldevtools-private
-SOURCES += main.cpp ../../src/qml/parser/qqmljsgrammar.cpp
+SOURCES += main.cpp ../../src/qml/qqmljsgrammar.cpp
QMAKE_TARGET_DESCRIPTION = QML/JS Minifier
diff --git a/srcpkgs/qt5/files/qttools_src.pro b/srcpkgs/qt5/files/qttools_src.pro
index 7b39f929e77..c7344404c05 100644
--- a/srcpkgs/qt5/files/qttools_src.pro
+++ b/srcpkgs/qt5/files/qttools_src.pro
@@ -5,7 +5,6 @@ SUBDIRS = assistant \
designer \
linguist \
qdbus \
- qdoc \
qtattributionsscanner
linguist.depends = designer
diff --git a/srcpkgs/qt5/files/rcc.pro b/srcpkgs/qt5/files/rcc.pro
index 8046b72b48d..3296979769b 100644
--- a/srcpkgs/qt5/files/rcc.pro
+++ b/srcpkgs/qt5/files/rcc.pro
@@ -6,3 +6,5 @@ SOURCES += main.cpp
QMAKE_TARGET_DESCRIPTION = "Qt Resource Compiler"
load(qt_tool)
+
+DEFINES += QT_FEATURE_zstd=-1
diff --git a/srcpkgs/qt5/files/rcc/rcc.pro b/srcpkgs/qt5/files/rcc/rcc.pro
deleted file mode 100644
index 581cd4564f6..00000000000
--- a/srcpkgs/qt5/files/rcc/rcc.pro
+++ /dev/null
@@ -1,6 +0,0 @@
-DEFINES += QT_RCC
-
-include(rcc.pri)
-SOURCES += main.cpp
-
-load(qt_tool)
diff --git a/srcpkgs/qt5/files/uic.pro b/srcpkgs/qt5/files/uic.pro
index 30f98644eb7..74d7dbd878f 100644
--- a/srcpkgs/qt5/files/uic.pro
+++ b/srcpkgs/qt5/files/uic.pro
@@ -2,6 +2,7 @@ QT = core qml core-private qmldevtools-private
DEFINES += QT_UIC QT_NO_CAST_FROM_ASCII QT_NO_FOREACH
include(uic.pri)
+include(shared/shared.pri)
include(cpp/cpp.pri)
HEADERS += uic.h
diff --git a/srcpkgs/qt5/files/uic/uic.pro b/srcpkgs/qt5/files/uic/uic.pro
deleted file mode 100644
index c78b123759f..00000000000
--- a/srcpkgs/qt5/files/uic/uic.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-DEFINES += QT_UIC
-
-include(uic.pri)
-include(cpp/cpp.pri)
-
-HEADERS += uic.h
-
-SOURCES += main.cpp \
- uic.cpp
-
-load(qt_tool)
diff --git a/srcpkgs/qt5/patches/0001-Fix-conflict-between-musl-libc-dirent.h-and-lss.patch b/srcpkgs/qt5/patches/0001-Fix-conflict-between-musl-libc-dirent.h-and-lss.patch
deleted file mode 100644
index 4f23a22f450..00000000000
--- a/srcpkgs/qt5/patches/0001-Fix-conflict-between-musl-libc-dirent.h-and-lss.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 1ac282ad3a859077cbff8bf4773db9bb5b6a5bbd Mon Sep 17 00:00:00 2001
-From: Felix Janda <felix.janda@posteo.de>
-Date: Sun, 1 Feb 2015 13:41:08 +0100
-Subject: [PATCH 1/6] Fix conflict between musl libc <dirent.h> and lss
-
-Include <dirent.h> late to avoid the macro getdents64 in musl
-libc's <dirent.h> to conflict with linux_sycall_support.h.
----
- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/crash_generation/crash_generation_server.cc | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/client/linux/crash_generation/crash_generation_server.cc b/src/client/linux/crash_generation/crash_generation_server.cc
-index 860e8bc..f0aa801 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/crash_generation/crash_generation_server.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/crash_generation/crash_generation_server.cc
-@@ -28,7 +28,6 @@
- // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- #include <assert.h>
--#include <dirent.h>
- #include <fcntl.h>
- #include <limits.h>
- #include <poll.h>
-@@ -49,6 +48,8 @@
- #include "common/linux/guid_creator.h"
- #include "common/linux/safe_readlink.h"
-
-+#include <dirent.h>
-+
- static const char kCommandQuit = 'x';
-
- namespace google_breakpad {
---
-2.0.5
-
diff --git a/srcpkgs/qt5/patches/0004-musl-dispatch-to-musl.patch b/srcpkgs/qt5/patches/0004-musl-dispatch-to-musl.patch
index 86e09d5cfd3..de32a3dab95 100644
--- a/srcpkgs/qt5/patches/0004-musl-dispatch-to-musl.patch
+++ b/srcpkgs/qt5/patches/0004-musl-dispatch-to-musl.patch
@@ -1,5 +1,5 @@
---- qtwebengine/src/3rdparty/chromium/base/allocator/allocator_shim_default_dispatch_to_glibc.cc 2017-09-19 18:15:15.000000000 +0200
-+++ qtwebengine/src/3rdparty/chromium/base/allocator/allocator_shim_default_dispatch_to_glibc.cc 2017-10-09 19:35:11.762384809 +0200
+--- qtwebengine/src/3rdparty/chromium/base/allocator/allocator_shim_default_dispatch_to_glibc.cc
+--- qtwebengine/src/3rdparty/chromium/base/allocator/allocator_shim_default_dispatch_to_glibc.cc
@@ -6,6 +6,7 @@
#include <malloc.h>
@@ -8,8 +8,8 @@
// This translation unit defines a default dispatch for the allocator shim which
// routes allocations to libc functions.
// The code here is strongly inspired from tcmalloc's libc_override_glibc.h.
-@@ -59,3 +60,98 @@
- &GlibcGetSizeEstimate, /* get_size_estimate_function */
+@@ -73,3 +74,92 @@ const AllocatorDispatch AllocatorDispatch::default_dispatch = {
+ nullptr, /* free_definite_size_function */
nullptr, /* next */
};
+
@@ -37,18 +37,12 @@
+// resolve the symbols in libc.so
+void musl_libc_memory_init(void)
+{
-+ void* libc = dlopen("libc", RTLD_LAZY);
-+ if (!libc)
-+ libc = dlopen("libc.so", RTLD_LAZY);
-+ if (!libc)
-+ libc = dlopen("libc.so.6", RTLD_LAZY);
-+ libc_malloc = (t_libc_malloc) dlsym(libc, "malloc");
-+ libc_calloc = (t_libc_calloc) dlsym(libc, "calloc");
-+ libc_realloc = (t_libc_realloc) dlsym(libc, "realloc");
-+ libc_memalign = (t_libc_memalign) dlsym(libc, "memalign");
-+ libc_free = (t_libc_free) dlsym(libc, "free");
-+ libc_malloc_usable_size = (t_libc_malloc_usable_size) dlsym(libc, "malloc_usable_size");
-+ dlclose(libc);
++ libc_malloc = (t_libc_malloc) dlsym(RTLD_NEXT, "malloc");
++ libc_calloc = (t_libc_calloc) dlsym(RTLD_NEXT, "calloc");
++ libc_realloc = (t_libc_realloc) dlsym(RTLD_NEXT, "realloc");
++ libc_memalign = (t_libc_memalign) dlsym(RTLD_NEXT, "memalign");
++ libc_free = (t_libc_free) dlsym(RTLD_NEXT, "free");
++ libc_malloc_usable_size = (t_libc_malloc_usable_size) dlsym(RTLD_NEXT, "malloc_usable_size");
+}
+} // extern "C"
+
diff --git a/srcpkgs/qt5/patches/0006-sys-signal.h-is-a-nonportable-alias-for-signal.h.patch b/srcpkgs/qt5/patches/0006-sys-signal.h-is-a-nonportable-alias-for-signal.h.patch
deleted file mode 100644
index 5491d6440e1..00000000000
--- a/srcpkgs/qt5/patches/0006-sys-signal.h-is-a-nonportable-alias-for-signal.h.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-From 7e0a2a72d16c11699558054c01a2082517f7dac1 Mon Sep 17 00:00:00 2001
-From: Felix Janda <felix.janda@posteo.de>
-Date: Sun, 1 Feb 2015 14:40:41 +0100
-Subject: [PATCH 6/6] <sys/signal.h> is a nonportable alias for <signal.h>
-
----
- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc | 2 +-
- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/android/include/sys/signal.h | 35 ---------------------------
- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/common.gyp | 1 -
- 3 files changed, 1 insertion(+), 37 deletions(-)
- delete mode 100644 src/common/android/include/sys/signal.h
-
-diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc
-index 3e2d196..cc3b1d3 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
-@@ -78,7 +78,7 @@
- #include <sys/wait.h>
- #include <unistd.h>
-
--#include <sys/signal.h>
-+#include <signal.h>
- #include <sys/ucontext.h>
- #include <sys/user.h>
- #include <ucontext.h>
-diff --git a/src/common/android/include/sys/signal.h b/src/common/android/include/sys/signal.h
-deleted file mode 100644
-index 20c81e9..0000000
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/android/include/sys/signal.h
-+++ /dev/null
-@@ -1,35 +0,0 @@
--// Copyright (c) 2012, Google Inc.
--// All rights reserved.
--//
--// Redistribution and use in source and binary forms, with or without
--// modification, are permitted provided that the following conditions are
--// met:
--//
--// * Redistributions of source code must retain the above copyright
--// notice, this list of conditions and the following disclaimer.
--// * Redistributions in binary form must reproduce the above
--// copyright notice, this list of conditions and the following disclaimer
--// in the documentation and/or other materials provided with the
--// distribution.
--// * Neither the name of Google Inc. nor the names of its
--// contributors may be used to endorse or promote products derived from
--// this software without specific prior written permission.
--//
--// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
--// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
--// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
--// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
--// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
--// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
--// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
--// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
--// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
--// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
--// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--
--#ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_SIGNAL_H
--#define GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_SIGNAL_H
--
--#include <signal.h>
--
--#endif // GOOGLE_BREAKPAD_COMMON_ANDROID_INCLUDE_SYS_SIGNAL_H
-diff --git a/src/common/common.gyp b/src/common/common.gyp
-index c49ff85..1a6b1ae 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/common.gyp
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/common.gyp
-@@ -47,7 +47,6 @@
- 'android/include/link.h',
- 'android/include/sgidefs.h',
- 'android/include/sys/procfs.h',
-- 'android/include/sys/signal.h',
- 'android/include/sys/user.h',
- 'android/include/ucontext.h',
- 'android/testing/include/wchar.h',
---
-2.0.5
-
diff --git a/srcpkgs/qt5/patches/0008-musl-no-mallinfo.patch b/srcpkgs/qt5/patches/0008-musl-no-mallinfo.patch
index 67ce2cb3f79..7b30717136a 100644
--- a/srcpkgs/qt5/patches/0008-musl-no-mallinfo.patch
+++ b/srcpkgs/qt5/patches/0008-musl-no-mallinfo.patch
@@ -29,14 +29,3 @@
struct mallinfo minfo = mallinfo();
#if defined(USE_TCMALLOC)
return minfo.uordblks;
---- qtwebengine/src/3rdparty/chromium/content/child/content_child_helpers.cc 2017-11-28 14:06:53.000000000 +0100
-+++ qtwebengine/src/3rdparty/chromium/content/child/content_child_helpers.cc 2018-01-28 06:23:14.891238507 +0100
-@@ -25,7 +25,7 @@
- // though, this provides only a partial and misleading value.
- // Unfortunately some telemetry benchmark rely on it and these need to
- // be refactored before getting rid of this. See crbug.com/581365 .
--#if defined(OS_LINUX) || defined(OS_ANDROID)
-+#if defined(__GLIBC__) || defined(OS_ANDROID)
- size_t GetMemoryUsageKB() {
- struct mallinfo minfo = mallinfo();
- uint64_t mem_usage =
diff --git a/srcpkgs/qt5/patches/0013-musl-serialio.patch b/srcpkgs/qt5/patches/0013-musl-serialio.patch
deleted file mode 100644
index cf0e0fa768f..00000000000
--- a/srcpkgs/qt5/patches/0013-musl-serialio.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- qtwebengine/src/3rdparty/chromium/device/serial/serial_io_handler_posix.cc 2017-01-03 10:28:53.000000000 +0100
-+++ qtwebengine/src/3rdparty/chromium/device/serial/serial_io_handler_posix.cc 2017-02-23 21:20:42.650669563 +0100
-@@ -12,6 +12,9 @@
-
- #if defined(OS_LINUX)
- #include <linux/serial.h>
-+#if !defined(__GLIBC__)
-+#include <asm-generic/ioctls.h>
-+#endif
-
- // The definition of struct termios2 is copied from asm-generic/termbits.h
- // because including that header directly conflicts with termios.h.
diff --git a/srcpkgs/qt5/patches/0017-musl-stackstart.patch b/srcpkgs/qt5/patches/0017-musl-stackstart.patch
index d8dd1aa90f6..57136bc2bcd 100644
--- a/srcpkgs/qt5/patches/0017-musl-stackstart.patch
+++ b/srcpkgs/qt5/patches/0017-musl-stackstart.patch
@@ -1,5 +1,5 @@
---- qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/wtf/StackUtil.cpp 2018-01-27 23:08:43.586475349 +0100
-+++ qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/wtf/StackUtil.cpp 2018-01-27 23:18:22.274505203 +0100
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/stack_util.cc 2018-01-27 23:08:43.586475349 +0100
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/stack_util.cc 2018-01-27 23:18:22.274505203 +0100
@@ -28,7 +28,7 @@
// FIXME: On Mac OSX and Linux, this method cannot estimate stack size
// correctly for the main thread.
diff --git a/srcpkgs/qt5/patches/0021-chromium-mojo-gcc8.patch b/srcpkgs/qt5/patches/0021-chromium-mojo-gcc8.patch
deleted file mode 100644
index cc4f3a979b2..00000000000
--- a/srcpkgs/qt5/patches/0021-chromium-mojo-gcc8.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- qtwebengine/src/3rdparty/chromium/mojo/public/c/system/macros.h 2018-05-15 14:58:46.448912634 -0400
-+++ qtwebengine/src/3rdparty/chromium/mojo/public/c/system/macros.h 2018-05-15 14:58:52.041784613 -0400
-@@ -18,7 +18,13 @@
- #endif
-
- // Like the C++11 |alignof| operator.
--#if __cplusplus >= 201103L
-+#if defined(__GNUC__) && __GNUC__ >= 8
-+// GCC 8 has changed the alignof operator to return the minimal alignment
-+// required by the target ABI, instead of the preferred alignment.
-+// This means that on 32-bit x86, it will return 4 instead of 8.
-+// Use __alignof__ instead to avoid this.
-+#define MOJO_ALIGNOF(type) __alignof__(type)
-+#elif __cplusplus >= 201103L
- #define MOJO_ALIGNOF(type) alignof(type)
- #elif defined(__GNUC__)
- #define MOJO_ALIGNOF(type) __alignof__(type)
-generated by cgit v1.1 at 2018-05-28 17:38:41 +0000
diff --git a/srcpkgs/qt5/patches/0022-libressl-compat.patch b/srcpkgs/qt5/patches/0022-libressl-compat.patch
index 277cc60858f..4e5f697d72c 100644
--- a/srcpkgs/qt5/patches/0022-libressl-compat.patch
+++ b/srcpkgs/qt5/patches/0022-libressl-compat.patch
@@ -1,15 +1,3 @@
---- qtbase/config.tests/unix/openssl11/openssl.cpp 2017-11-05 16:07:40.963385070 -0500
-+++ qtbase/config.tests/unix/openssl11/openssl.cpp 2017-11-05 16:07:51.755255545 -0500
-@@ -39,7 +39,7 @@
-
- #include <openssl/opensslv.h>
-
--#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10100000L
-+#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
- # error "OpenSSL >= 1.1 is required"
- #endif
-
-
diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp
index 41b759364b..17ce5b4b30 100644
--- qtbase/src/network/ssl/qsslcontext_openssl.cpp
@@ -31,10 +19,10 @@ index 82ff5e9e3a..77e5d03b7d 100644
@@ -402,7 +402,7 @@ DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a, EVP_PKEY *b, b, return -
DEFINEFUNC2(int, SSL_CTX_use_RSAPrivateKey, SSL_CTX *a, a, RSA *b, b, return -1, return)
DEFINEFUNC3(int, SSL_CTX_use_PrivateKey_file, SSL_CTX *a, a, const char *b, b, int c, c, return -1, return)
- DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *a, a, return 0, return)
+ DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *a, a, return nullptr, return)
-#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(LIBRESSL_VERSION_NUMBER)
- DEFINEFUNC(SSL_CONF_CTX *, SSL_CONF_CTX_new, DUMMYARG, DUMMYARG, return 0, return);
+ DEFINEFUNC(SSL_CONF_CTX *, SSL_CONF_CTX_new, DUMMYARG, DUMMYARG, return nullptr, return);
DEFINEFUNC(void, SSL_CONF_CTX_free, SSL_CONF_CTX *a, a, return ,return);
DEFINEFUNC2(void, SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX *a, a, SSL_CTX *b, b, return, return);
diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h
@@ -50,3 +38,14 @@ index 4fb8f26cf6..3a7de93113 100644
SSL_CONF_CTX *q_SSL_CONF_CTX_new();
void q_SSL_CONF_CTX_free(SSL_CONF_CTX *a);
void q_SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *a, SSL_CTX *b);
+--- qtbase/src/network/configure.json 2019-01-28 18:11:52.000000000 +0100
++++ - 2019-03-11 00:31:42.883264246 +0100
+@@ -165,7 +165,7 @@
+ "test": {
+ "include": "openssl/opensslv.h",
+ "tail": [
+- "#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10100000L",
++ "#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)",
+ "# error OpenSSL >= 1.1 is required",
+ "#endif"
+ ]
diff --git a/srcpkgs/qt5/patches/0023-enable_tools-cross.patch b/srcpkgs/qt5/patches/0023-enable_tools-cross.patch
index 81092c77b41..9eac4e70efa 100644
--- a/srcpkgs/qt5/patches/0023-enable_tools-cross.patch
+++ b/srcpkgs/qt5/patches/0023-enable_tools-cross.patch
@@ -1,28 +1,37 @@
--- qttools/src/src.pro 2018-06-09 13:10:38.000000000 +0200
+++ qttools/src/src.pro 2018-08-19 09:34:29.803670205 +0200
-@@ -1,16 +1,10 @@
+@@ -1,20 +1,14 @@
TEMPLATE = subdirs
-qtHaveModule(widgets) {
- no-png {
- message("Some graphics-related tools are unavailable without PNG support")
- } else {
-- SUBDIRS = assistant \
-- pixeltool \
-- designer
-+SUBDIRS = assistant \
-+ pixeltool \
-+ designer
-
-- linguist.depends = designer
+- QT_FOR_CONFIG += widgets
+- qtConfig(pushbutton):qtConfig(toolbutton) {
+- SUBDIRS = assistant \
+- designer \
+- pixeltool
+-
+- linguist.depends = designer
+- }
+- qtHaveModule(quick):qtConfig(thread):qtConfig(toolbutton): SUBDIRS += distancefieldgenerator
- }
-}
++QT_FOR_CONFIG += widgets
++
++SUBDIRS = assistant \
++ designer \
++ pixeltool
++
+linguist.depends = designer
++
++SUBDIRS += distancefieldgenerator
SUBDIRS += linguist \
qtattributionsscanner
-@@ -31,11 +25,11 @@
- SUBDIRS += androiddeployqt
+@@ -31,11 +25,11 @@ macos {
+ SUBDIRS += macdeployqt
}
-qtHaveModule(dbus): SUBDIRS += qdbus
@@ -30,8 +39,8 @@
win32|winrt:SUBDIRS += windeployqt
winrt:SUBDIRS += winrtrunner
--qtHaveModule(gui):!android:!uikit:!qnx:!winrt: SUBDIRS += qtdiag
+-qtHaveModule(gui):!wasm:!android:!uikit:!qnx:!winrt: SUBDIRS += qtdiag
+SUBDIRS += qtdiag
qtNomakeTools( \
- pixeltool \
+ distancefieldgenerator \
diff --git a/srcpkgs/qt5/patches/0027-skia_cpu-be.patch b/srcpkgs/qt5/patches/0027-skia_cpu-be.patch
deleted file mode 100644
index 9352f190a3b..00000000000
--- a/srcpkgs/qt5/patches/0027-skia_cpu-be.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- qtwebengine/src/3rdparty/chromium/third_party/skia/include/gpu/GrTypes.h.orig 2018-09-11 14:37:56.832822055 +0200
-+++ qtwebengine/src/3rdparty/chromium/third_party/skia/include/gpu/GrTypes.h 2018-09-11 14:38:11.464821183 +0200
-@@ -348,9 +348,6 @@
- static const int kGrPixelConfigCnt = kLast_GrPixelConfig + 1;
-
- // Aliases for pixel configs that match skia's byte order.
--#ifndef SK_CPU_LENDIAN
-- #error "Skia gpu currently assumes little endian"
--#endif
- #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
- static const GrPixelConfig kSkia8888_GrPixelConfig = kBGRA_8888_GrPixelConfig;
- #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
diff --git a/srcpkgs/qt5/patches/0028-webrtc-be.patch b/srcpkgs/qt5/patches/0028-webrtc-be.patch
deleted file mode 100644
index c71c65c926b..00000000000
--- a/srcpkgs/qt5/patches/0028-webrtc-be.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- qtwebengine/src/3rdparty/chromium/third_party/webrtc/typedefs.h 2018-06-15 09:47:20.000000000 +0200
-+++ qtwebengine/src/3rdparty/chromium/third_party/webrtc/typedefs.h 2018-09-14 17:50:45.198153942 +0200
-@@ -47,6 +47,9 @@
- #elif defined(__pnacl__)
- #define WEBRTC_ARCH_32_BITS
- #define WEBRTC_ARCH_LITTLE_ENDIAN
-+#elif defined(__MIPSEB__)
-+#define WEBRTC_ARCH_MIPS_FAMILY
-+#define WEBRTC_ARCH_BIG_ENDIAN
- #else
- #error Please add support for your architecture in typedefs.h
- #endif
diff --git a/srcpkgs/qt5/patches/0029-musl-libevent.patch b/srcpkgs/qt5/patches/0029-musl-libevent.patch
deleted file mode 100644
index 62265b63994..00000000000
--- a/srcpkgs/qt5/patches/0029-musl-libevent.patch
+++ /dev/null
@@ -1,121 +0,0 @@
---- qtwebengine/src/3rdparty/chromium/base/message_loop/message_pump_libevent.cc
-+++ qtwebengine/src/3rdparty/chromium/base/message_loop/message_pump_libevent.cc
-@@ -14,7 +14,7 @@
- #include "base/files/file_util.h"
- #include "base/logging.h"
- #include "base/posix/eintr_wrapper.h"
--#include "base/third_party/libevent/event.h"
-+#include "event.h"
- #include "base/time/time.h"
- #include "base/trace_event/trace_event.h"
- #include "build/build_config.h"
---- qtwebengine/src/3rdparty/chromium/tools/gn/bootstrap/bootstrap.py 2018-10-18 01:20:19.224169786 +0200
-+++ qtwebengine/src/3rdparty/chromium/tools/gn/bootstrap/bootstrap.py 2018-10-18 01:26:11.273148802 +0200
-@@ -32,6 +32,7 @@
-
- is_win = sys.platform.startswith('win')
- is_linux = sys.platform.startswith('linux')
-+is_gnu_linux = is_linux and platform.libc_ver()[0].startswith('glibc')
- is_mac = sys.platform.startswith('darwin')
- is_aix = sys.platform.startswith('aix')
- is_posix = is_linux or is_mac or is_aix
-@@ -193,7 +193,7 @@
- {'ENABLE_MUTEX_PRIORITY_INHERITANCE': 'false'})
-
- write_buildflag_header_manually(root_gen_dir, 'base/allocator/features.h',
-- {'USE_ALLOCATOR_SHIM': 'true' if is_linux else 'false'})
-+ {'USE_ALLOCATOR_SHIM': 'true' if is_gnu_linux else 'false'})
-
- write_buildflag_header_manually(root_gen_dir, 'base/debug/debugging_flags.h',
- {
-@@ -453,8 +453,6 @@
- 'base/third_party/superfasthash/superfasthash.c',
- ])
- static_libraries['base']['sources'].extend([
-- 'base/allocator/allocator_check.cc',
-- 'base/allocator/allocator_extension.cc',
- 'base/at_exit.cc',
- 'base/base_paths.cc',
- 'base/base_switches.cc',
-@@ -625,6 +623,11 @@
- 'base/values.cc',
- 'base/vlog.cc',
- ])
-+ if is_gnu_linux:
-+ static_libraries['base']['sources'].extend([
-+ 'base/allocator/allocator_check.cc',
-+ 'base/allocator/allocator_extension.cc',
-+ ])
-
- if is_posix:
- static_libraries['base']['sources'].extend([
-@@ -663,29 +666,31 @@
- 'base/time/time_exploded_posix.cc',
- ])
-
-- static_libraries['libevent'] = {
-- 'sources': [
-- 'base/third_party/libevent/buffer.c',
-- 'base/third_party/libevent/evbuffer.c',
-- 'base/third_party/libevent/evdns.c',
-- 'base/third_party/libevent/event.c',
-- 'base/third_party/libevent/event_tagging.c',
-- 'base/third_party/libevent/evrpc.c',
-- 'base/third_party/libevent/evutil.c',
-- 'base/third_party/libevent/http.c',
-- 'base/third_party/libevent/log.c',
-- 'base/third_party/libevent/poll.c',
-- 'base/third_party/libevent/select.c',
-- 'base/third_party/libevent/signal.c',
-- 'base/third_party/libevent/strlcpy.c',
-- ],
-- 'tool': 'cc',
-- 'include_dirs': [],
-- 'cflags': cflags + ['-DHAVE_CONFIG_H'],
-- }
-+ if is_gnu_linux:
-+ static_libraries['libevent'] = {
-+ 'sources': [
-+ 'base/third_party/libevent/buffer.c',
-+ 'base/third_party/libevent/evbuffer.c',
-+ 'base/third_party/libevent/evdns.c',
-+ 'base/third_party/libevent/event.c',
-+ 'base/third_party/libevent/event_tagging.c',
-+ 'base/third_party/libevent/evrpc.c',
-+ 'base/third_party/libevent/evutil.c',
-+ 'base/third_party/libevent/http.c',
-+ 'base/third_party/libevent/log.c',
-+ 'base/third_party/libevent/poll.c',
-+ 'base/third_party/libevent/select.c',
-+ 'base/third_party/libevent/signal.c',
-+ 'base/third_party/libevent/strlcpy.c',
-+ ],
-+ 'tool': 'cc',
-+ 'include_dirs': [],
-+ 'cflags': cflags + ['-DHAVE_CONFIG_H'],
-+ }
-
- if is_linux or is_aix:
- ldflags.extend(['-pthread'])
-+ ldflags.extend(['-levent'])
-
- static_libraries['xdg_user_dirs'] = {
- 'sources': [
-@@ -709,7 +714,7 @@
- 'base/sys_info_linux.cc',
- 'base/threading/platform_thread_linux.cc',
- ])
-- if is_linux:
-+ if is_gnu_linux:
- static_libraries['base']['sources'].extend([
- 'base/allocator/allocator_shim.cc',
- 'base/allocator/allocator_shim_default_dispatch_to_glibc.cc',
-@@ -721,7 +726,7 @@
- static_libraries['libevent']['sources'].extend([
- 'base/third_party/libevent/epoll.c',
- ])
-- else:
-+ if is_aix:
- libs.extend(['-lrt'])
- static_libraries['base']['sources'].extend([
- 'base/process/internal_aix.cc'
diff --git a/srcpkgs/qt5/patches/0033-revert_remove_our_use_of_syscall_for-statx.patch b/srcpkgs/qt5/patches/0033-revert_remove_our_use_of_syscall_for-statx.patch
deleted file mode 100644
index 8e779a09cd0..00000000000
--- a/srcpkgs/qt5/patches/0033-revert_remove_our_use_of_syscall_for-statx.patch
+++ /dev/null
@@ -1,119 +0,0 @@
-Description: revert upstream commit that removes use of syscall() and statx(2)
- The commit https://code.qt.io/cgit/qt/qtbase.git/commit/?id=b7887f9b4faad222
- removes the use of the above mentioned syscalls. This makes Qt not able
- to run on current stable servers under a testing/unstable VM.
- .
- This patch should be removed in testing/unstable after Buster gets released.
-Author: Lisandro Damián Nicanor Pérez Meyer <lisandro@debian.org>
-Forwarded: not-needed
-
----
- src/corelib/global/minimum-linux_p.h | 7 ----
- src/corelib/io/qfilesystemengine_unix.cpp | 45 ++++++++++++++++++++++++++++--
- 2 files changed, 43 insertions(+), 9 deletions(-)
-
---- qtbase/src/corelib/global/minimum-linux_p.h
-+++ qtbase/src/corelib/global/minimum-linux_p.h
-@@ -75,14 +75,9 @@ QT_BEGIN_NAMESPACE
- * - accept4 2.6.28
- * - renameat2 3.16 QT_CONFIG(renameat2)
- * - getrandom 3.17 QT_CONFIG(getentropy)
-- * - statx 4.11 QT_CONFIG(statx)
- */
-
--#if QT_CONFIG(statx)
--# define MINLINUX_MAJOR 4
--# define MINLINUX_MINOR 11
--# define MINLINUX_PATCH 0
--#elif QT_CONFIG(getentropy)
-+#if QT_CONFIG(getentropy)
- # define MINLINUX_MAJOR 3
- # define MINLINUX_MINOR 17
- # define MINLINUX_PATCH 0
---- qtbase/src/corelib/io/qfilesystemengine_unix.cpp
-+++ qtbase/src/corelib/io/qfilesystemengine_unix.cpp
-@@ -1,6 +1,6 @@
- /****************************************************************************
- **
--** Copyright (C) 2018 Intel Corporation.
-+** Copyright (C) 2017 Intel Corporation.
- ** Copyright (C) 2016 The Qt Company Ltd.
- ** Copyright (C) 2013 Samuel Gaist <samuel.gaist@edeltech.ch>
- ** Contact: https://www.qt.io/licensing/
-@@ -88,6 +88,7 @@ extern "C" NSString *NSTemporaryDirector
-
- #if defined(Q_OS_LINUX)
- # include <sys/ioctl.h>
-+# include <sys/syscall.h>
- # include <sys/sendfile.h>
- # include <linux/fs.h>
-
-@@ -95,6 +96,28 @@ extern "C" NSString *NSTemporaryDirector
- #ifndef FICLONE
- # define FICLONE _IOW(0x94, 9, int)
- #endif
-+
-+# if defined(Q_OS_ANDROID)
-+// renameat2() and statx() are disabled on Android because quite a few systems
-+// come with sandboxes that kill applications that make system calls outside a
-+// whitelist and several Android vendors can't be bothered to update the list.
-+# undef SYS_renameat2
-+# undef SYS_statx
-+# undef STATX_BASIC_STATS
-+# else
-+# if !QT_CONFIG(renameat2) && defined(SYS_renameat2)
-+static int renameat2(int oldfd, const char *oldpath, int newfd, const char *newpath, unsigned flags)
-+{ return syscall(SYS_renameat2, oldfd, oldpath, newfd, newpath, flags); }
-+# endif
-+
-+# if !QT_CONFIG(statx) && defined(SYS_statx)
-+# include <linux/stat.h>
-+static int statx(int dirfd, const char *pathname, int flag, unsigned mask, struct statx *statxbuf)
-+{ return syscall(SYS_statx, dirfd, pathname, flag, mask, statxbuf); }
-+# elif !QT_CONFIG(statx) && !defined(SYS_statx)
-+# undef STATX_BASIC_STATS
-+# endif
-+# endif // !Q_OS_ANDROID
- #endif
-
- #if defined(Q_OS_ANDROID)
-@@ -315,8 +338,22 @@ mtime(const T &statBuffer, int)
- #ifdef STATX_BASIC_STATS
- static int qt_real_statx(int fd, const char *pathname, int flags, struct statx *statxBuffer)
- {
-+#ifdef Q_ATOMIC_INT8_IS_SUPPORTED
-+ static QBasicAtomicInteger<qint8> statxTested = Q_BASIC_ATOMIC_INITIALIZER(0);
-+#else
-+ static QBasicAtomicInt statxTested = Q_BASIC_ATOMIC_INITIALIZER(0);
-+#endif
-+
-+ if (statxTested.load() == -1)
-+ return -ENOSYS;
-+
- unsigned mask = STATX_BASIC_STATS | STATX_BTIME;
- int ret = statx(fd, pathname, flags, mask, statxBuffer);
-+ if (ret == -1 && errno == ENOSYS) {
-+ statxTested.store(-1);
-+ return -ENOSYS;
-+ }
-+ statxTested.store(1);
- return ret == -1 ? -errno : 0;
- }
-
-@@ -1252,12 +1289,14 @@ bool QFileSystemEngine::renameFile(const
- if (Q_UNLIKELY(srcPath.isEmpty() || tgtPath.isEmpty()))
- return emptyFileEntryWarning(), false;
-
--#if defined(RENAME_NOREPLACE) && QT_CONFIG(renameat2)
-+#if defined(RENAME_NOREPLACE) && (QT_CONFIG(renameat2) || defined(SYS_renameat2))
- if (renameat2(AT_FDCWD, srcPath, AT_FDCWD, tgtPath, RENAME_NOREPLACE) == 0)
- return true;
-
-+ // If we're using syscall(), check for ENOSYS;
-+ // if renameat2 came from libc, we don't accept ENOSYS.
- // We can also get EINVAL for some non-local filesystems.
-- if (errno != EINVAL) {
-+ if ((QT_CONFIG(renameat2) || errno != ENOSYS) && errno != EINVAL) {
- error = QSystemError(errno, QSystemError::StandardLibraryError);
- return false;
- }
diff --git a/srcpkgs/qt5/patches/0034-gcc-8.3-build.patch b/srcpkgs/qt5/patches/0034-gcc-8.3-build.patch
deleted file mode 100644
index b9b45c31396..00000000000
--- a/srcpkgs/qt5/patches/0034-gcc-8.3-build.patch
+++ /dev/null
@@ -1,236 +0,0 @@
-From 97ec1d1882a83c23c91f0f7daea48e05858d8c32 Mon Sep 17 00:00:00 2001
-From: Thiago Macieira <thiago.macieira@intel.com>
-Date: Mon, 28 Jan 2019 14:33:12 -0800
-Subject: [PATCH] Fix build with GCC 8.3
-
-Qualifiers in the asm statement are not allowed in the global scope. I
-thought they were necessary for LTO, but I the commit to this file that
-added them predates my work on setting up LTO for GCC.
-
-Change-Id: Id98140e1c2f0426cabbefffd157e23e5ece67a49
-Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
----
- .../JavaScriptCore/jit/JITStubs.cpp | 48 +++++++++----------
- 1 file changed, 24 insertions(+), 24 deletions(-)
-
-diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp
-index 1abdf8b..9f60761 100644
---- qtscript/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp
-+++ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp
-@@ -116,7 +116,7 @@ COMPILE_ASSERT(offsetof(struct JITStackFrame, savedEBX) == 0x3c, JITStackFrame_s
- COMPILE_ASSERT(offsetof(struct JITStackFrame, callFrame) == 0x58, JITStackFrame_callFrame_offset_matches_ctiTrampoline);
- COMPILE_ASSERT(offsetof(struct JITStackFrame, code) == 0x50, JITStackFrame_code_offset_matches_ctiTrampoline);
-
--asm volatile (
-+asm (
- ".text\n"
- ".globl " SYMBOL_STRING(ctiTrampoline) "\n"
- HIDE_SYMBOL(ctiTrampoline) "\n"
-@@ -138,7 +138,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
- "ret" "\n"
- );
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
- HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
- SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
-@@ -154,7 +154,7 @@ SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
- "ret" "\n"
- );
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
- HIDE_SYMBOL(ctiOpThrowNotCaught) "\n"
- SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
-@@ -179,7 +179,7 @@ COMPILE_ASSERT(offsetof(struct JITStackFrame, savedRBX) == 0x48, JITStackFrame_s
- COMPILE_ASSERT(offsetof(struct JITStackFrame, callFrame) == 0x90, JITStackFrame_callFrame_offset_matches_ctiTrampoline);
- COMPILE_ASSERT(offsetof(struct JITStackFrame, code) == 0x80, JITStackFrame_code_offset_matches_ctiTrampoline);
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiTrampoline) "\n"
- HIDE_SYMBOL(ctiTrampoline) "\n"
- SYMBOL_STRING(ctiTrampoline) ":" "\n"
-@@ -206,7 +206,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
- "ret" "\n"
- );
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
- HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
- SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
-@@ -222,7 +222,7 @@ SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
- "ret" "\n"
- );
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
- HIDE_SYMBOL(ctiOpThrowNotCaught) "\n"
- SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
-@@ -242,7 +242,7 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
- #error "JIT_STUB_ARGUMENT_VA_LIST not supported on ARMv7."
- #endif
-
--asm volatile (
-+asm (
- ".text" "\n"
- ".align 2" "\n"
- ".globl " SYMBOL_STRING(ctiTrampoline) "\n"
-@@ -269,7 +269,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
- "bx lr" "\n"
- );
-
--asm volatile (
-+asm (
- ".text" "\n"
- ".align 2" "\n"
- ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
-@@ -287,7 +287,7 @@ SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
- "bx lr" "\n"
- );
-
--asm volatile (
-+asm (
- ".text" "\n"
- ".align 2" "\n"
- ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
-@@ -305,7 +305,7 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
-
- #elif COMPILER(GCC) && CPU(ARM_TRADITIONAL)
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiTrampoline) "\n"
- HIDE_SYMBOL(ctiTrampoline) "\n"
- SYMBOL_STRING(ctiTrampoline) ":" "\n"
-@@ -323,7 +323,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
- "mov pc, lr" "\n"
- );
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
- HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
- SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
-@@ -418,7 +418,7 @@ COMPILE_ASSERT(offsetof(struct JITStackFrame, callFrame) == 0x38, JITStackFrame_
- COMPILE_ASSERT(offsetof(struct JITStackFrame, code) == 0x30, JITStackFrame_code_offset_matches_ctiTrampoline);
- COMPILE_ASSERT(offsetof(struct JITStackFrame, savedEBX) == 0x1c, JITStackFrame_stub_argument_space_matches_ctiTrampoline);
-
--asm volatile (
-+asm (
- ".text\n"
- ".globl " SYMBOL_STRING(ctiTrampoline) "\n"
- HIDE_SYMBOL(ctiTrampoline) "\n"
-@@ -440,7 +440,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
- "ret" "\n"
- );
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
- HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
- SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
-@@ -456,7 +456,7 @@ SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
- "ret" "\n"
- );
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
- HIDE_SYMBOL(ctiOpThrowNotCaught) "\n"
- SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
-@@ -480,7 +480,7 @@ COMPILE_ASSERT(offsetof(struct JITStackFrame, callFrame) == 0x58, JITStackFrame_
- COMPILE_ASSERT(offsetof(struct JITStackFrame, code) == 0x48, JITStackFrame_code_offset_matches_ctiTrampoline);
- COMPILE_ASSERT(offsetof(struct JITStackFrame, savedRBX) == 0x78, JITStackFrame_stub_argument_space_matches_ctiTrampoline);
-
--asm volatile (
-+asm (
- ".text\n"
- ".globl " SYMBOL_STRING(ctiTrampoline) "\n"
- HIDE_SYMBOL(ctiTrampoline) "\n"
-@@ -515,7 +515,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
- "ret" "\n"
- );
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
- HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
- SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
-@@ -531,7 +531,7 @@ SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
- "ret" "\n"
- );
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
- HIDE_SYMBOL(ctiOpThrowNotCaught) "\n"
- SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
-@@ -551,7 +551,7 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
- #error "JIT_STUB_ARGUMENT_VA_LIST not supported on ARMv7."
- #endif
-
--asm volatile (
-+asm (
- ".text" "\n"
- ".align 2" "\n"
- ".globl " SYMBOL_STRING(ctiTrampoline) "\n"
-@@ -578,7 +578,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
- "bx lr" "\n"
- );
-
--asm volatile (
-+asm (
- ".text" "\n"
- ".align 2" "\n"
- ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
-@@ -596,7 +596,7 @@ SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
- "bx lr" "\n"
- );
-
--asm volatile (
-+asm (
- ".text" "\n"
- ".align 2" "\n"
- ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
-@@ -614,7 +614,7 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
-
- #elif COMPILER(GCC) && CPU(ARM_TRADITIONAL)
-
--asm volatile (
-+asm (
- ".text\n"
- ".globl " SYMBOL_STRING(ctiTrampoline) "\n"
- HIDE_SYMBOL(ctiTrampoline) "\n"
-@@ -632,7 +632,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
- "mov pc, lr" "\n"
- );
-
--asm volatile (
-+asm (
- ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
- HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
- SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
-@@ -1024,7 +1024,7 @@ static NEVER_INLINE void throwStackOverflowError(CallFrame* callFrame, JSGlobalD
- extern "C" { \
- rtype JITStubThunked_##op(STUB_ARGS_DECLARATION); \
- }; \
-- asm volatile ( \
-+ asm ( \
- ".text" "\n" \
- ".align 2" "\n" \
- ".globl " SYMBOL_STRING(cti_##op) "\n" \
-@@ -1053,7 +1053,7 @@ COMPILE_ASSERT(offsetof(struct JITStackFrame, thunkReturnAddress) == THUNK_RETUR
- extern "C" { \
- rtype JITStubThunked_##op(STUB_ARGS_DECLARATION); \
- }; \
-- asm volatile ( \
-+ asm ( \
- ".globl " SYMBOL_STRING(cti_##op) "\n" \
- HIDE_SYMBOL(cti_##op) "\n" \
- SYMBOL_STRING(cti_##op) ":" "\n" \
-
diff --git a/srcpkgs/qt5/patches/0035-gcc-9.1-build.patch b/srcpkgs/qt5/patches/0035-gcc-9.1-build.patch
deleted file mode 100644
index 04da3d4c708..00000000000
--- a/srcpkgs/qt5/patches/0035-gcc-9.1-build.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 0d89dead4396126606fb7954c0bb0a2734d2347b Mon Sep 17 00:00:00 2001
-From: Allan Sandfeld Jensen <allan.jensen@qt.io>
-Date: Tue, 13 Nov 2018 16:00:23 +0100
-Subject: [PATCH] Fix compile issue with gcc 9
-
-It appears messenne_twisters in the latest libstdc++ has one more
-requirement before it is willing to construct with our
-SystemGenerator struct as an sseq provider.
-
-Upstream-Status: Backport
-
-Change-Id: If38151d1fa6f40a80274acc26d9ed6b4ac6049fe
-Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
----
-
- qtbase/src/corelib/global/qrandom.cpp | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/corelib/global/qrandom.cpp b/src/corelib/global/qrandom.cpp
-index ebf9864b15..577736a867 100644
---- qtbase/src/corelib/global/qrandom.cpp
-+++ qtbase/src/corelib/global/qrandom.cpp
-@@ -218,6 +218,7 @@ struct QRandomGenerator::SystemGenerator
- #endif // Q_OS_WINRT
-
- static SystemGenerator &self();
-+ typedef quint32 result_type;
- void generate(quint32 *begin, quint32 *end) Q_DECL_NOEXCEPT_EXPR(FillBufferNoexcept);
-
- // For std::mersenne_twister_engine implementations that use something
---
-2.20.1
-
-
diff --git a/srcpkgs/qt5/patches/0040-yasm-nls.patch b/srcpkgs/qt5/patches/0040-yasm-nls.patch
new file mode 100644
index 00000000000..22ac0420764
--- /dev/null
+++ b/srcpkgs/qt5/patches/0040-yasm-nls.patch
@@ -0,0 +1,13 @@
+diff --git src/3rdparty/chromium/third_party/yasm/source/config/linux/config.h src/3rdparty/chromium/third_party/yasm/source/config/linux/config.h
+index 9e36539..f588083 100644
+--- qtwebengine/src/3rdparty/chromium//third_party/yasm/source/config/linux/config.h
+--- qtwebengine/src/3rdparty/chromium//third_party/yasm/source/config/linux/config.h
+@@ -5,7 +5,7 @@
+ #define CPP_PROG "gcc -E"
+
+ /* */
+-#define ENABLE_NLS 1
++/* #undef ENABLE_NLS 1 */
+
+ /* Define to 1 if you have the `abort' function. */
+ #define HAVE_ABORT 1
diff --git a/srcpkgs/qt5/patches/0041-libressl.patch b/srcpkgs/qt5/patches/0041-libressl.patch
new file mode 100644
index 00000000000..b89fddd01ab
--- /dev/null
+++ b/srcpkgs/qt5/patches/0041-libressl.patch
@@ -0,0 +1,11 @@
+--- qtbase/src/network/ssl/qsslsocket_openssl.cpp 2019-06-13 06:18:18.000000000 +0200
++++ - 2019-06-17 14:59:22.501460882 +0200
+@@ -604,7 +604,7 @@
+ q_SSL_set_psk_server_callback(ssl, &q_ssl_psk_server_callback);
+ }
+ #endif
+-#if OPENSSL_VERSION_NUMBER >= 0x10101006L
++#if OPENSSL_VERSION_NUMBER >= 0x10101006L && !defined(LIBRESSL_VERSION_NUMBER)
+ // Set the client callback for TLSv1.3 PSK
+ if (mode == QSslSocket::SslClientMode
+ && QSslSocket::sslLibraryBuildVersionNumber() >= 0x10101006L) {
diff --git a/srcpkgs/qt5/patches/0042-arm-void-is-not-android.patch b/srcpkgs/qt5/patches/0042-arm-void-is-not-android.patch
new file mode 100644
index 00000000000..b13290d3ccd
--- /dev/null
+++ b/srcpkgs/qt5/patches/0042-arm-void-is-not-android.patch
@@ -0,0 +1,21 @@
+--- qtwebengine/src/3rdparty/chromium//third_party/openmax_dl/dl/BUILD.gn 2019-04-09 09:31:16.000000000 +0200
++++ - 2019-05-06 23:08:09.537346546 +0200
+@@ -206,18 +206,6 @@
+ "sp/src/arm/armv7/omxSP_FFTFwd_RToCCS_F32_Sfs_s.S",
+ "sp/src/arm/armv7/omxSP_FFTInv_CCSToR_F32_Sfs_s.S",
+ ]
+- if (arm_optionally_use_neon) {
+- # Run-time NEON detection.
+- deps = [
+- "//third_party/android_tools:cpu_features",
+- ]
+-
+- # To get the __android_log_print routine
+- libs = [ "log" ]
+-
+- # Detection routine
+- sources += [ "sp/src/arm/detect.c" ]
+- }
+ }
+
+ # NEON implementation of FFT. This library is NOT
diff --git a/srcpkgs/qt5/patches/libressl-const-bio.patch b/srcpkgs/qt5/patches/0043-libressl-const-bio.patch
similarity index 84%
rename from srcpkgs/qt5/patches/libressl-const-bio.patch
rename to srcpkgs/qt5/patches/0043-libressl-const-bio.patch
index f3493862cd4..d3a1fe96c53 100644
--- a/srcpkgs/qt5/patches/libressl-const-bio.patch
+++ b/srcpkgs/qt5/patches/0043-libressl-const-bio.patch
@@ -4,10 +4,10 @@
#endif
DEFINEFUNC2(BIO *, BIO_new_file, const char *filename, filename, const char *mode, mode, return 0, return)
DEFINEFUNC(void, ERR_clear_error, DUMMYARG, DUMMYARG, return, DUMMYARG)
--DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return 0, return)
--DEFINEFUNC(BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return)
-+DEFINEFUNC(BIO *, BIO_new, const BIO_METHOD *a, a, return 0, return)
-+DEFINEFUNC(const BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return)
+-DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return nullptr, return)
+-DEFINEFUNC(BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return nullptr, return)
++DEFINEFUNC(BIO *, BIO_new, const BIO_METHOD *a, a, return nullptr, return)
++DEFINEFUNC(const BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return nullptr, return)
DEFINEFUNC(int, CRYPTO_num_locks, DUMMYARG, DUMMYARG, return 0, return)
DEFINEFUNC(void, CRYPTO_set_locking_callback, void (*a)(int, int, const char *, int), a, return, DUMMYARG)
DEFINEFUNC(void, CRYPTO_set_id_callback, unsigned long (*a)(), a, return, DUMMYARG)
diff --git a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch b/srcpkgs/qt5/patches/0044-qt-musl-execinfo.patch
similarity index 56%
rename from srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
rename to srcpkgs/qt5/patches/0044-qt-musl-execinfo.patch
index 615177ba16e..98f3a38745a 100644
--- a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
+++ b/srcpkgs/qt5/patches/0044-qt-musl-execinfo.patch
@@ -1,6 +1,6 @@
---- qtwebengine/src/3rdparty/chromium/base/debug/stack_trace_posix.cc 2017-11-28 14:06:53.000000000 +0100
-+++ qtwebengine/src/3rdparty/chromium/base/debug/stack_trace_posix.cc 2018-01-27 21:50:04.693231905 +0100
-@@ -26,7 +26,7 @@
+--- qtwebengine/src/3rdparty/chromium//base/debug/stack_trace_posix.cc.orig 2019-04-09 09:31:16.000000000 +0200
++++ qtwebengine/src/3rdparty/chromium//base/debug/stack_trace_posix.cc 2019-05-06 23:16:13.245502467 +0200
+@@ -27,7 +27,7 @@
#if !defined(USE_SYMBOLIZE)
#include <cxxabi.h>
#endif
@@ -9,7 +9,7 @@
#include <execinfo.h>
#endif
-@@ -82,7 +82,7 @@
+@@ -86,7 +86,7 @@
// Note: code in this function is NOT async-signal safe (std::string uses
// malloc internally).
@@ -18,7 +18,7 @@
std::string::size_type search_from = 0;
while (search_from < text->size()) {
// Look for the start of a mangled symbol, from search_from.
-@@ -117,7 +117,7 @@
+@@ -121,7 +121,7 @@
search_from = mangled_start + 2;
}
}
@@ -27,8 +27,8 @@
}
#endif // !defined(USE_SYMBOLIZE)
-@@ -129,7 +129,7 @@
- virtual ~BacktraceOutputHandler() {}
+@@ -133,7 +133,7 @@
+ virtual ~BacktraceOutputHandler() = default;
};
-#if !defined(__UCLIBC__) && !defined(_AIX)
@@ -36,7 +36,7 @@
void OutputPointer(void* pointer, BacktraceOutputHandler* handler) {
// This should be more than enough to store a 64-bit number in hex:
// 16 hex digits + 1 for null-terminator.
-@@ -206,7 +206,7 @@
+@@ -216,7 +216,7 @@
}
#endif // defined(USE_SYMBOLIZE)
}
@@ -45,44 +45,44 @@
void PrintToStderr(const char* output) {
// NOTE: This code MUST be async-signal safe (it's used by in-process
-@@ -749,7 +749,7 @@
- // NOTE: This code MUST be async-signal safe (it's used by in-process
- // stack dumping signal handler). NO malloc or stdio is allowed here.
+@@ -812,7 +812,7 @@
+ // NOTE: This code MUST be async-signal safe (it's used by in-process
+ // stack dumping signal handler). NO malloc or stdio is allowed here.
-#if !defined(__UCLIBC__) && !defined(_AIX)
+#if defined(__GLIBC__) && !defined(_AIX)
- count = std::min(arraysize(trace_), count);
-
// Though the backtrace API man page does not list any possible negative
-@@ -764,13 +764,13 @@
- // NOTE: This code MUST be async-signal safe (it's used by in-process
- // stack dumping signal handler). NO malloc or stdio is allowed here.
+ // return values, we take no chance.
+ return base::saturated_cast<size_t>(backtrace(trace, count));
+@@ -825,13 +825,13 @@
+ // NOTE: This code MUST be async-signal safe (it's used by in-process
+ // stack dumping signal handler). NO malloc or stdio is allowed here.
-#if !defined(__UCLIBC__) && !defined(_AIX)
+#if defined(__GLIBC__) && !defined(_AIX)
PrintBacktraceOutputHandler handler;
- ProcessBacktrace(trace_, count_, &handler);
+ ProcessBacktrace(trace_, count_, prefix_string, &handler);
#endif
}
-#if !defined(__UCLIBC__) && !defined(_AIX)
+#if defined(__GLIBC__) && !defined(_AIX)
- void StackTrace::OutputToStream(std::ostream* os) const {
+ void StackTrace::OutputToStreamWithPrefix(std::ostream* os,
+ const char* prefix_string) const {
StreamBacktraceOutputHandler handler(os);
- ProcessBacktrace(trace_, count_, &handler);
---- qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.cc 2017-11-28 14:06:53.000000000 +0100
-+++ qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.cc 2018-01-27 22:31:08.296359000 +0100
-@@ -214,7 +214,7 @@
-
- std::string StackTrace::ToString() const {
+--- qtwebengine/src/3rdparty/chromium/base/debug/stack_trace.cc 2019-04-09 09:31:16.000000000 +0200
++++ - 2019-05-06 23:18:14.923566992 +0200
+@@ -233,7 +233,7 @@
+ }
+ std::string StackTrace::ToStringWithPrefix(const char* prefix_string) const {
std::stringstream stream;
-#if !defined(__UCLIBC__) && !defined(_AIX)
+#if defined(__GLIBC__) && !defined(_AIX)
- OutputToStream(&stream);
+ OutputToStreamWithPrefix(&stream, prefix_string);
#endif
return stream.str();
---- qtwebengine/src/3rdparty/chromium/base/logging.cc 2017-11-28 14:06:53.000000000 +0100
-+++ qtwebengine/src/3rdparty/chromium/base/logging.cc 2018-01-27 22:46:34.970406807 +0100
+--- qtwebengine/src/3rdparty/chromium//base/logging.cc 2017-11-28 14:06:53.000000000 +0100
+--- qtwebengine/src/3rdparty/chromium//base/logging.cc 2018-01-27 22:46:34.970406807 +0100
@@ -546,7 +546,7 @@
LogMessage::~LogMessage() {
@@ -92,33 +92,16 @@
!defined(OS_AIX)
if (severity_ == LOG_FATAL && !base::debug::BeingDebugged()) {
// Include a stack trace on a fatal, unless a debugger is attached.
---- qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/wtf/Assertions.cpp 2017-11-28 14:06:53.000000000 +0100
-+++ qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/wtf/Assertions.cpp 2018-01-29 20:23:26.498185623 +0100
-@@ -59,7 +59,6 @@
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/assertions.cc 2019-04-09 09:31:16.000000000 +0200
++++ - 2019-05-06 23:12:07.040977258 +0200
+@@ -51,8 +51,10 @@
#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(__UCLIBC__))
#include <cxxabi.h>
#include <dlfcn.h>
--#include <execinfo.h>
++#if defined(__GLIBC__)
+ #include <execinfo.h>
#endif
++#endif
#if defined(OS_ANDROID)
---- qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/checks.cc 2017-11-28 14:06:53.000000000 +0100
-+++ qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/checks.cc 2018-01-29 20:32:41.070163511 +0100
-@@ -16,7 +16,7 @@
- #include <cstdio>
- #include <cstdlib>
-
--#if defined(__GLIBCXX__) && !defined(__UCLIBC__)
-+#if defined(__GLIBCXX__) && defined(__GLIBC__)
- #include <cxxabi.h>
- #include <execinfo.h>
- #endif
-@@ -60,7 +60,7 @@
- // to get usable symbols on Linux. This is copied from V8. Chromium has a more
- // advanced stace trace system; also more difficult to copy.
- void DumpBacktrace() {
--#if defined(__GLIBCXX__) && !defined(__UCLIBC__)
-+#if defined(__GLIBCXX__) && defined(__GLIBC__)
- void* trace[100];
- int size = backtrace(trace, sizeof(trace) / sizeof(*trace));
- char** symbols = backtrace_symbols(trace, size);
+ #include <android/log.h>
diff --git a/srcpkgs/qt5/patches/0045-qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/0045-qt-musl-thread-stacksize.patch
new file mode 100644
index 00000000000..496753bef30
--- /dev/null
+++ b/srcpkgs/qt5/patches/0045-qt-musl-thread-stacksize.patch
@@ -0,0 +1,26 @@
+diff --git a/src/3rdparty/chromium/ppapi/utility/threading/simple_thread.cc b/src/3rdparty/chromium/ppapi/utility/threading/simple_thread.cc
+index 02bf49b..05ee182 100644
+--- qtwebengine/src/3rdparty/chromium/ppapi/utility/threading/simple_thread.cc
++++ qtwebengine/src/3rdparty/chromium/ppapi/utility/threading/simple_thread.cc
+@@ -13,7 +13,7 @@ namespace pp {
+ namespace {
+
+ // Use 2MB default stack size for Native Client, otherwise use system default.
+-#if defined(__native_client__)
++#if defined(__native_client__) || !defined(__GLIBC__)
+ const size_t kDefaultStackSize = 2 * 1024 * 1024;
+ #else
+ const size_t kDefaultStackSize = 0;
+diff --git a/src/3rdparty/chromium/v8/src/base/platform/platform-posix.cc b/src/3rdparty/chromium/v8/src/base/platform/platform-posix.cc
+index cf7f3ec..e06a5ce 100644
+--- qtwebengine/src/3rdparty/chromium/v8/src/base/platform/platform-posix.cc
++++ qtwebengine/src/3rdparty/chromium/v8/src/base/platform/platform-posix.cc
+@@ -761,7 +761,7 @@ void Thread::Start() {
+ #if V8_OS_MACOSX
+ // Default on Mac OS X is 512kB -- bump up to 1MB
+ stack_size = 1 * 1024 * 1024;
+-#elif V8_OS_AIX
++#elif V8_OS_AIX || !defined(__GLIBC__)
+ // Default on AIX is 96kB -- bump up to 2MB
+ stack_size = 2 * 1024 * 1024;
+ #endif
diff --git a/srcpkgs/qt5/patches/0046-sandbox-membarrier.patch b/srcpkgs/qt5/patches/0046-sandbox-membarrier.patch
new file mode 100644
index 00000000000..b73971f2432
--- /dev/null
+++ b/srcpkgs/qt5/patches/0046-sandbox-membarrier.patch
@@ -0,0 +1,60 @@
+--- qtwebengine/src/3rdparty/chromium//sandbox/linux/system_headers/arm64_linux_syscalls.h
++++ qtwebengine/src/3rdparty/chromium//sandbox/linux/system_headers/arm64_linux_syscalls.h
+@@ -1063,4 +1063,8 @@
+ #define __NR_memfd_create 279
+ #endif
+
++#if !defined(__NR_membarrier)
++#define __NR_membarrier 283
++#endif
++
+ #endif // SANDBOX_LINUX_SYSTEM_HEADERS_ARM64_LINUX_SYSCALLS_H_
+
+--- qtwebengine/src/3rdparty/chromium//sandbox/linux/system_headers/arm_linux_syscalls.h
++++ qtwebengine/src/3rdparty/chromium//sandbox/linux/system_headers/arm_linux_syscalls.h
+@@ -1385,6 +1385,10 @@
+ #define __NR_memfd_create (__NR_SYSCALL_BASE+385)
+ #endif
+
++#if !defined(__NR_membarrier)
++#define __NR_membarrier (__NR_SYSCALL_BASE+389)
++#endif
++
+ // ARM private syscalls.
+ #if !defined(__ARM_NR_BASE)
+ #define __ARM_NR_BASE (__NR_SYSCALL_BASE + 0xF0000)
+
+--- qtwebengine/src/3rdparty/chromium//sandbox/linux/system_headers/x86_32_linux_syscalls.h
++++ qtwebengine/src/3rdparty/chromium//sandbox/linux/system_headers/x86_32_linux_syscalls.h
+@@ -1422,5 +1422,9 @@
+ #define __NR_memfd_create 356
+ #endif
+
++#if !defined(__NR_membarrier)
++#define __NR_membarrier 375
++#endif
++
+ #endif // SANDBOX_LINUX_SYSTEM_HEADERS_X86_32_LINUX_SYSCALLS_H_
+
+--- qtwebengine/src/3rdparty/chromium//sandbox/linux/system_headers/x86_64_linux_syscalls.h
++++ qtwebengine/src/3rdparty/chromium//sandbox/linux/system_headers/x86_64_linux_syscalls.h
+@@ -1290,5 +1290,9 @@
+ #define __NR_memfd_create 319
+ #endif
+
++#if !defined(__NR_membarrier)
++#define __NR_membarrier 324
++#endif
++
+ #endif // SANDBOX_LINUX_SYSTEM_HEADERS_X86_64_LINUX_SYSCALLS_H_
+
+--- qtwebengine/src/3rdparty/chromium//sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
++++ qtwebengine/src/3rdparty/chromium//sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
+@@ -370,6 +370,7 @@
+ switch (sysno) {
+ case __NR_exit:
+ case __NR_exit_group:
++ case __NR_membarrier:
+ case __NR_wait4:
+ case __NR_waitid:
+ #if defined(__i386__)
diff --git a/srcpkgs/qt5/patches/0047-gn-cross-sysroot.patch b/srcpkgs/qt5/patches/0047-gn-cross-sysroot.patch
new file mode 100644
index 00000000000..ee6689a4183
--- /dev/null
+++ b/srcpkgs/qt5/patches/0047-gn-cross-sysroot.patch
@@ -0,0 +1,24 @@
+There is no reason to run this script and running it fails on architectures
+chromium does not officially support (such as ppc64).
+
+--- qtwebengine/src/3rdparty/chromium/build/config/posix/BUILD.gn
++++ qtwebengine/src/3rdparty/chromium/build/config/posix/BUILD.gn
+@@ -102,12 +102,12 @@ config("runtime_library") {
+ # when turning the sysroot on or off. (defines are passed via the command
+ # line, and build system rebuilds things when their commandline
+ # changes). Nothing should ever read this define.
+- sysroot_hash =
+- exec_script("//build/linux/sysroot_scripts/install-sysroot.py",
+- [ "--print-hash=$current_cpu" ],
+- "trim string",
+- [ "//build/linux/sysroot_scripts/sysroots.json" ])
+- defines += [ "CR_SYSROOT_HASH=$sysroot_hash" ]
++ #sysroot_hash =
++ # exec_script("//build/linux/sysroot_scripts/install-sysroot.py",
++ # [ "--print-hash=$current_cpu" ],
++ # "trim string",
++ # [ "//build/linux/sysroot_scripts/sysroots.json" ])
++ #defines += [ "CR_SYSROOT_HASH=$sysroot_hash" ]
+ }
+ asmflags += sysroot_flags
+
diff --git a/srcpkgs/qt5/patches/0089-webengine-ppc64.patch b/srcpkgs/qt5/patches/0089-webengine-ppc64.patch
new file mode 100644
index 00000000000..402d7e2d622
--- /dev/null
+++ b/srcpkgs/qt5/patches/0089-webengine-ppc64.patch
@@ -0,0 +1,20 @@
+--- qtwebengine/mkspecs/features/functions.prf
++++ qtwebengine/mkspecs/features/functions.prf
+@@ -95,6 +95,7 @@
+ contains(qtArch, "arm64"): return(arm64)
+ contains(qtArch, "mips"): return(mipsel)
+ contains(qtArch, "mips64"): return(mips64el)
++ contains(qtArch, "power64"): return(ppc64)
+ return(unknown)
+ }
+
+--- qtwebengine/mkspecs/features/platform.prf
++++ qtwebengine/mkspecs/features/platform.prf
+@@ -82,6 +82,7 @@
+ contains(QT_ARCH, "arm")|contains(QT_ARCH, "arm64"): return(true)
+ contains(QT_ARCH, "mips"): return(true)
+ # contains(QT_ARCH, "mips64"): return(true)
++ contains(QT_ARCH, "power64"): return(true)
+
+ skipBuild("QtWebEngine can only be built for x86, x86-64, ARM, Aarch64, and MIPSel architectures.")
+ return(false)
diff --git a/srcpkgs/qt5/patches/0090-chromium-ppc64le.patch b/srcpkgs/qt5/patches/0090-chromium-ppc64le.patch
new file mode 100644
index 00000000000..04d8d3efaac
--- /dev/null
+++ b/srcpkgs/qt5/patches/0090-chromium-ppc64le.patch
@@ -0,0 +1,4267 @@
+This is a base patch that adds support for ppc64le glibc. Big endian and musl
+support is added in extra patches afterwards.
+
+Ping q66 if you're updating qt5 and the patch does not apply anymore.
+
+Source: https://wiki.raptorcs.com/w/index.php?title=Porting/Chromium
+Upstream: Currently being submitted
+
+--- qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/page_allocator_constants.h
++++ qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/page_allocator_constants.h
+@@ -10,7 +10,7 @@
+ #include "build/build_config.h"
+
+ namespace base {
+-#if defined(OS_WIN)
++#if defined(OS_WIN) || defined(ARCH_CPU_PPC64)
+ static constexpr size_t kPageAllocationGranularityShift = 16; // 64KB
+ #elif defined(_MIPS_ARCH_LOONGSON)
+ static constexpr size_t kPageAllocationGranularityShift = 14; // 16KB
+@@ -26,6 +26,10 @@ static constexpr size_t kPageAllocationGranularityBaseMask =
+
+ #if defined(_MIPS_ARCH_LOONGSON)
+ static constexpr size_t kSystemPageSize = 16384;
++#elif defined(ARCH_CPU_PPC64)
++// TODO: modern ppc64 can do 4k and 64k page sizes
++// for now, 64k is assumed
++static constexpr size_t kSystemPageSize = 65536;
+ #else
+ static constexpr size_t kSystemPageSize = 4096;
+ #endif
+--- qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc_constants.h
++++ qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc_constants.h
+@@ -35,6 +35,8 @@ static const size_t kBucketShift = (kAllocationGranularity == 8) ? 3 : 2;
+
+ #if defined(_MIPS_ARCH_LOONGSON)
+ static const size_t kPartitionPageShift = 16; // 64 KiB
++#elif defined(ARCH_CPU_PPC64)
++static const size_t kPartitionPageShift = 18; // 256 KiB
+ #else
+ static const size_t kPartitionPageShift = 14; // 16 KiB
+ #endif
+--- qtwebengine/src/3rdparty/chromium/build/download_nacl_toolchains.py
++++ qtwebengine/src/3rdparty/chromium/build/download_nacl_toolchains.py
+@@ -11,6 +11,10 @@ import sys
+
+
+ def Main(args):
++ # If `disable_nacl=1` is in GYP_DEFINES, exit
++ if 'disable_nacl=1' in os.environ.get('GYP_DEFINES', ''):
++ return 0
++
+ script_dir = os.path.dirname(os.path.abspath(__file__))
+ src_dir = os.path.dirname(script_dir)
+ nacl_dir = os.path.join(src_dir, 'native_client')
+--- qtwebengine/src/3rdparty/chromium/build/toolchain/linux/BUILD.gn
++++ qtwebengine/src/3rdparty/chromium/build/toolchain/linux/BUILD.gn
+@@ -5,6 +5,14 @@
+ import("//build/config/sysroot.gni")
+ import("//build/toolchain/gcc_toolchain.gni")
+
++clang_toolchain("clang_ppc64") {
++ enable_linker_map = true
++ toolchain_args = {
++ current_cpu = "ppc64"
++ current_os = "linux"
++ }
++}
++
+ clang_toolchain("clang_arm") {
+ toolprefix = "arm-linux-gnueabihf-"
+ toolchain_args = {
+--- qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.cc
++++ qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.cc
+@@ -55,6 +55,8 @@ const char kArch[] =
+ "mips64el";
+ #elif defined(__mips__)
+ "mipsel";
++#elif defined(__powerpc64__)
++ "ppc64";
+ #else
+ #error "unknown arch"
+ #endif
+@@ -127,6 +129,8 @@ const char* UpdateQueryParams::GetNaclArch() {
+ return "mips32";
+ #elif defined(ARCH_CPU_MIPS64EL)
+ return "mips64";
++#elif defined(ARCH_CPU_PPC64)
++ return "ppc64";
+ #else
+ // NOTE: when adding new values here, please remember to update the
+ // comment in the .h file about possible return values from this function.
+--- qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.h
++++ qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.h
+@@ -45,7 +45,7 @@ class UpdateQueryParams {
+ // Returns the value we use for the "nacl_arch" parameter. Note that this may
+ // be different from the "arch" parameter above (e.g. one may be 32-bit and
+ // the other 64-bit). Possible return values include: "x86-32", "x86-64",
+- // "arm", and "mips32".
++ // "arm", "mips32", and "ppc64".
+ static const char* GetNaclArch();
+
+ // Returns the current version of Chrome/Chromium.
+--- qtwebengine/src/3rdparty/chromium/sandbox/features.gni
++++ qtwebengine/src/3rdparty/chromium/sandbox/features.gni
+@@ -12,6 +12,6 @@ use_seccomp_bpf =
+ (is_linux || is_android) &&
+ (current_cpu == "x86" || current_cpu == "x64" || current_cpu == "arm" ||
+ current_cpu == "arm64" || current_cpu == "mipsel" ||
+- current_cpu == "mips64el")
++ current_cpu == "mips64el" || current_cpu == "ppc64")
+
+ use_seccomp_bpf = use_seccomp_bpf || is_nacl_nonsfi
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/BUILD.gn
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/BUILD.gn
+@@ -416,6 +416,8 @@ component("sandbox_services") {
+
+ source_set("sandbox_services_headers") {
+ sources = [
++ "system_headers/ppc64_linux_syscalls.h",
++ "system_headers/ppc64_linux_ucontext.h",
+ "system_headers/arm64_linux_syscalls.h",
+ "system_headers/arm_linux_syscalls.h",
+ "system_headers/arm_linux_ucontext.h",
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/linux_syscall_ranges.h
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/linux_syscall_ranges.h
+@@ -55,6 +55,13 @@
+ #define MAX_PUBLIC_SYSCALL 279u
+ #define MAX_SYSCALL MAX_PUBLIC_SYSCALL
+
++#elif defined(__powerpc64__)
++
++#include <asm/unistd.h>
++#define MIN_SYSCALL 0u
++#define MAX_PUBLIC_SYSCALL 386u
++#define MAX_SYSCALL MAX_PUBLIC_SYSCALL
++
+ #else
+ #error "Unsupported architecture"
+ #endif
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/seccomp_macros.h
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/seccomp_macros.h
+@@ -16,6 +16,9 @@
+ #if defined(__mips__)
+ // sys/user.h in eglibc misses size_t definition
+ #include <stddef.h>
++#elif defined(__powerpc64__)
++// Manually define greg_t on ppc64
++typedef unsigned long long greg_t;
+ #endif
+ #endif
+
+@@ -346,6 +349,51 @@ struct regs_struct {
+ #define SECCOMP_PT_PARM4(_regs) (_regs).regs[3]
+ #define SECCOMP_PT_PARM5(_regs) (_regs).regs[4]
+ #define SECCOMP_PT_PARM6(_regs) (_regs).regs[5]
++
++#elif defined(__powerpc64__)
++#include <asm/ptrace.h>
++
++typedef struct pt_regs regs_struct;
++
++#ifdef ARCH_CPU_LITTLE_ENDIAN
++#define SECCOMP_ARCH AUDIT_ARCH_PPC64LE
++#else
++#define SECCOMP_ARCH AUDIT_ARCH_PPC64
++#endif
++
++#define SECCOMP_REG(_ctx, _reg) ((_ctx)->uc_mcontext.regs->gpr[_reg])
++
++#define SECCOMP_RESULT(_ctx) SECCOMP_REG(_ctx, 3)
++#define SECCOMP_SYSCALL(_ctx) SECCOMP_REG(_ctx, 0)
++#define SECCOMP_IP(_ctx) (_ctx)->uc_mcontext.regs->nip
++#define SECCOMP_PARM1(_ctx) SECCOMP_REG(_ctx, 3)
++#define SECCOMP_PARM2(_ctx) SECCOMP_REG(_ctx, 4)
++#define SECCOMP_PARM3(_ctx) SECCOMP_REG(_ctx, 5)
++#define SECCOMP_PARM4(_ctx) SECCOMP_REG(_ctx, 6)
++#define SECCOMP_PARM5(_ctx) SECCOMP_REG(_ctx, 7)
++#define SECCOMP_PARM6(_ctx) SECCOMP_REG(_ctx, 8)
++
++#define SECCOMP_NR_IDX (offsetof(struct arch_seccomp_data, nr))
++#define SECCOMP_ARCH_IDX (offsetof(struct arch_seccomp_data, arch))
++#define SECCOMP_IP_MSB_IDX \
++ (offsetof(struct arch_seccomp_data, instruction_pointer) + 4)
++#define SECCOMP_IP_LSB_IDX \
++ (offsetof(struct arch_seccomp_data, instruction_pointer) + 0)
++#define SECCOMP_ARG_MSB_IDX(nr) \
++ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 4)
++#define SECCOMP_ARG_LSB_IDX(nr) \
++ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 0)
++
++#define SECCOMP_PT_RESULT(_regs) (_regs).gpr[3]
++#define SECCOMP_PT_SYSCALL(_regs) (_regs).gpr[0]
++#define SECCOMP_PT_IP(_regs) (_regs).nip
++#define SECCOMP_PT_PARM1(_regs) (_regs).gpr[3]
++#define SECCOMP_PT_PARM2(_regs) (_regs).gpr[4]
++#define SECCOMP_PT_PARM3(_regs) (_regs).gpr[5]
++#define SECCOMP_PT_PARM4(_regs) (_regs).gpr[6]
++#define SECCOMP_PT_PARM5(_regs) (_regs).gpr[7]
++#define SECCOMP_PT_PARM6(_regs) (_regs).gpr[8]
++
+ #else
+ #error Unsupported target platform
+
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
+@@ -87,7 +87,8 @@ bool IsBaselinePolicyWatched(int sysno) {
+ SyscallSets::IsPrctl(sysno) ||
+ SyscallSets::IsProcessGroupOrSession(sysno) ||
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ SyscallSets::IsSocketCall(sysno) ||
+ #endif
+ #if defined(__arm__)
+@@ -190,7 +191,7 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno,
+ }
+
+ #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ if (sysno == __NR_mmap)
+ return RestrictMmapFlags();
+ #endif
+@@ -208,7 +209,7 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno,
+ return RestrictPrctl();
+
+ #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ if (sysno == __NR_socketpair) {
+ // Only allow AF_UNIX, PF_UNIX. Crash if anything else is seen.
+ static_assert(AF_UNIX == PF_UNIX,
+@@ -248,7 +249,8 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno,
+ }
+
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ if (SyscallSets::IsSocketCall(sysno))
+ return RestrictSocketcallCommand();
+ #endif
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy_unittest.cc
+@@ -257,7 +257,7 @@ TEST_BASELINE_SIGSYS(__NR_sysinfo);
+ TEST_BASELINE_SIGSYS(__NR_syslog);
+ TEST_BASELINE_SIGSYS(__NR_timer_create);
+
+-#if !defined(__aarch64__)
++#if !defined(__aarch64__) && !defined(__powerpc64__)
+ TEST_BASELINE_SIGSYS(__NR_eventfd);
+ TEST_BASELINE_SIGSYS(__NR_inotify_init);
+ TEST_BASELINE_SIGSYS(__NR_vserver);
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
+@@ -35,7 +35,8 @@
+ #include <sys/ioctl.h>
+ #include <sys/ptrace.h>
+ #if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(__arm__) && \
+- !defined(__aarch64__) && !defined(PTRACE_GET_THREAD_AREA)
++ !defined(__aarch64__) && !defined(__powerpc64__) && \
++ !defined(PTRACE_GET_THREAD_AREA)
+ // Also include asm/ptrace-abi.h since ptrace.h in older libc (for instance
+ // the one in Ubuntu 16.04 LTS) is missing PTRACE_GET_THREAD_AREA.
+ // asm/ptrace-abi.h doesn't exist on arm32 and PTRACE_GET_THREAD_AREA isn't
+@@ -44,6 +44,11 @@
+ #endif
+ #endif // !OS_NACL_NONSFI
+
++// On PPC64, TCGETS is defined in terms of struct termios, so we must include termios.h
++#ifdef __powerpc64__
++#include <termios.h>
++#endif
++
+ #if defined(OS_ANDROID)
+
+ #if !defined(F_DUPFD_CLOEXEC)
+@@ -106,6 +111,15 @@ inline bool IsArchitectureMips() {
+ #endif
+ }
+
++inline bool IsArchitecturePPC64() {
++#if defined(__powerpc64__)
++ return true;
++#else
++ return false;
++#endif
++}
++
++
+ // Ubuntu's version of glibc has a race condition in sem_post that can cause
+ // it to call futex(2) with bogus op arguments. To workaround this, we need
+ // to allow those futex(2) calls to fail with EINVAL, instead of crashing the
+@@ -247,7 +261,8 @@ ResultExpr RestrictFcntlCommands() {
+ // operator.
+ // Glibc overrides the kernel's O_LARGEFILE value. Account for this.
+ uint64_t kOLargeFileFlag = O_LARGEFILE;
+- if (IsArchitectureX86_64() || IsArchitectureI386() || IsArchitectureMips())
++ if (IsArchitectureX86_64() || IsArchitectureI386() || IsArchitectureMips() \
++ || IsArchitecturePPC64())
+ kOLargeFileFlag = 0100000;
+
+ const Arg<int> cmd(1);
+@@ -270,7 +285,7 @@ ResultExpr RestrictFcntlCommands() {
+ .Default(CrashSIGSYS());
+ }
+
+-#if defined(__i386__) || defined(__mips__)
++#if defined(__i386__) || defined(__mips__) || defined(__powerpc64__)
+ ResultExpr RestrictSocketcallCommand() {
+ // Unfortunately, we are unable to restrict the first parameter to
+ // socketpair(2). Whilst initially sounding bad, it's noteworthy that very
+@@ -421,7 +422,7 @@ ResultExpr RestrictPrlimit(pid_t target_pid) {
+ ResultExpr RestrictPtrace() {
+ const Arg<int> request(0);
+ return Switch(request).CASES((
+-#if !defined(__aarch64__)
++#if !defined(__aarch64__) && !defined(__powerpc64__)
+ PTRACE_GETREGS,
+ PTRACE_GETFPREGS,
+ PTRACE_GET_THREAD_AREA,
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
+@@ -48,7 +48,7 @@ SANDBOX_EXPORT bpf_dsl::ResultExpr RestrictMprotectFlags();
+ // O_NONBLOCK | O_SYNC | O_LARGEFILE | O_CLOEXEC | O_NOATIME.
+ SANDBOX_EXPORT bpf_dsl::ResultExpr RestrictFcntlCommands();
+
+-#if defined(__i386__) || defined(__mips__)
++#if defined(__i386__) || defined(__mips__) || defined(__powerpc64__)
+ // Restrict socketcall(2) to only allow socketpair(2), send(2), recv(2),
+ // sendto(2), recvfrom(2), shutdown(2), sendmsg(2) and recvmsg(2).
+ SANDBOX_EXPORT bpf_dsl::ResultExpr RestrictSocketcallCommand();
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
+@@ -29,7 +29,8 @@ bool SyscallSets::IsAllowedGettime(int sysno) {
+ switch (sysno) {
+ case __NR_gettimeofday:
+ #if defined(__i386__) || defined(__x86_64__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_time:
+ #endif
+ return true;
+@@ -45,7 +46,8 @@ bool SyscallSets::IsAllowedGettime(int sysno) {
+ #endif
+ case __NR_settimeofday: // Privileged.
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_stime:
+ #endif
+ default:
+@@ -111,7 +113,7 @@ bool SyscallSets::IsFileSystem(int sysno) {
+ case __NR_faccessat: // EPERM not a valid errno.
+ case __NR_fchmodat:
+ case __NR_fchownat: // Should be called chownat ?
+-#if defined(__x86_64__) || defined(__aarch64__)
++#if defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_newfstatat: // fstatat(). EPERM not a valid errno.
+ #elif defined(__i386__) || defined(__arm__) || \
+ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
+@@ -130,7 +132,7 @@ bool SyscallSets::IsFileSystem(int sysno) {
+ case __NR_memfd_create:
+ case __NR_mkdirat:
+ case __NR_mknodat:
+-#if defined(__i386__)
++#if defined(__i386__) || defined(__powerpc64__)
+ case __NR_oldlstat:
+ case __NR_oldstat:
+ #endif
+@@ -154,7 +156,8 @@ bool SyscallSets::IsFileSystem(int sysno) {
+ case __NR_truncate64:
+ #endif
+ case __NR_unlinkat:
+-#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
++ defined(__powerpc64__)
+ case __NR_utime:
+ #endif
+ case __NR_utimensat: // New.
+@@ -173,7 +176,8 @@ bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) {
+ #endif
+ return true;
+ // TODO(jln): these should be denied gracefully as well (moved below).
+-#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
++ defined(__powerpc64__)
+ case __NR_fadvise64: // EPERM not a valid errno.
+ #endif
+ #if defined(__i386__)
+@@ -186,7 +190,8 @@ bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) {
+ case __NR_flock: // EPERM not a valid errno.
+ case __NR_fstatfs: // Give information about the whole filesystem.
+ #if defined(__i386__) || defined(__arm__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_fstatfs64:
+ #endif
+ case __NR_fsync: // EPERM not a valid errno.
+@@ -198,6 +203,8 @@ bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) {
+ case __NR_sync_file_range: // EPERM not a valid errno.
+ #elif defined(__arm__)
+ case __NR_arm_sync_file_range: // EPERM not a valid errno.
++#elif defined(__powerpc64__)
++ case __NR_sync_file_range2: // EPERM not a valid errno.
+ #endif
+ default:
+ return false;
+@@ -223,7 +230,8 @@ bool SyscallSets::IsDeniedFileSystemAccessViaFd(int sysno) {
+ #endif
+ case __NR_getdents64: // EPERM not a valid errno.
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_readdir:
+ #endif
+ return true;
+@@ -264,7 +272,7 @@ bool SyscallSets::IsGetSimpleId(int sysno) {
+ bool SyscallSets::IsProcessPrivilegeChange(int sysno) {
+ switch (sysno) {
+ case __NR_capset:
+-#if defined(__i386__) || defined(__x86_64__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc64__)
+ case __NR_ioperm: // Intel privilege.
+ case __NR_iopl: // Intel privilege.
+ #endif
+@@ -314,7 +322,8 @@ bool SyscallSets::IsAllowedSignalHandling(int sysno) {
+ case __NR_rt_sigprocmask:
+ case __NR_rt_sigreturn:
+ #if defined(__i386__) || defined(__arm__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_sigaction:
+ case __NR_sigprocmask:
+ case __NR_sigreturn:
+@@ -331,7 +340,8 @@ bool SyscallSets::IsAllowedSignalHandling(int sysno) {
+ #endif
+ case __NR_signalfd4:
+ #if defined(__i386__) || defined(__arm__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_sigpending:
+ case __NR_sigsuspend:
+ #endif
+@@ -355,7 +365,7 @@ bool SyscallSets::IsAllowedOperationOnFd(int sysno) {
+ #endif
+ case __NR_dup3:
+ #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_shutdown:
+ #endif
+ return true;
+@@ -389,7 +399,7 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) {
+ case __NR_membarrier:
+ case __NR_wait4:
+ case __NR_waitid:
+-#if defined(__i386__)
++#if defined(__i386__) || defined(__powerpc64__)
+ case __NR_waitpid:
+ #endif
+ #if !defined(__GLIBC__)
+@@ -411,7 +421,7 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) {
+ case __NR_set_tid_address:
+ #endif
+ case __NR_unshare:
+-#if !defined(__mips__) && !defined(__aarch64__)
++#if !defined(__mips__) && !defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_vfork:
+ #endif
+ default:
+@@ -460,7 +470,7 @@ bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) {
+ return true;
+ default:
+ #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_socketpair: // We will want to inspect its argument.
+ #endif
+ return false;
+@@ -470,7 +480,7 @@ bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) {
+ bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) {
+ switch (sysno) {
+ #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_accept:
+ case __NR_accept4:
+ case __NR_bind:
+@@ -485,7 +495,8 @@ bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) {
+ }
+
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ // Big multiplexing system call for sockets.
+ bool SyscallSets::IsSocketCall(int sysno) {
+ switch (sysno) {
+@@ -499,7 +510,8 @@ bool SyscallSets::IsSocketCall(int sysno) {
+ }
+ #endif
+
+-#if defined(__x86_64__) || defined(__arm__) || defined(__mips__)
++#if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
++ defined(__powerpc64__)
+ bool SyscallSets::IsNetworkSocketInformation(int sysno) {
+ switch (sysno) {
+ case __NR_getpeername:
+@@ -527,7 +539,7 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) {
+ case __NR_mincore:
+ case __NR_mlockall:
+ #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_mmap:
+ #endif
+ #if defined(__i386__) || defined(__arm__) || \
+@@ -559,7 +571,8 @@ bool SyscallSets::IsAllowedGeneralIo(int sysno) {
+ switch (sysno) {
+ case __NR_lseek:
+ #if defined(__i386__) || defined(__arm__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR__llseek:
+ #endif
+ #if !defined(__aarch64__)
+@@ -571,26 +584,28 @@ bool SyscallSets::IsAllowedGeneralIo(int sysno) {
+ case __NR_readv:
+ case __NR_pread64:
+ #if defined(__arm__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_recv:
+ #endif
+ #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_recvfrom: // Could specify source.
+ case __NR_recvmsg: // Could specify source.
+ #endif
+-#if defined(__i386__) || defined(__x86_64__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc64__)
+ case __NR_select:
+ #endif
+-#if defined(__i386__) || defined(__arm__) || defined(__mips__)
++#if defined(__i386__) || defined(__arm__) || defined(__mips__) || defined(__powerpc64__)
+ case __NR__newselect:
+ #endif
+ #if defined(__arm__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_send:
+ #endif
+ #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_sendmsg: // Could specify destination.
+ case __NR_sendto: // Could specify destination.
+ #endif
+@@ -647,7 +662,8 @@ bool SyscallSets::IsAllowedBasicScheduler(int sysno) {
+ return true;
+ case __NR_getpriority:
+ #if defined(__i386__) || defined(__arm__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_nice:
+ #endif
+ case __NR_setpriority:
+@@ -659,7 +675,8 @@ bool SyscallSets::IsAllowedBasicScheduler(int sysno) {
+ bool SyscallSets::IsAdminOperation(int sysno) {
+ switch (sysno) {
+ #if defined(__i386__) || defined(__arm__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_bdflush:
+ #endif
+ case __NR_kexec_load:
+@@ -675,7 +692,8 @@ bool SyscallSets::IsAdminOperation(int sysno) {
+
+ bool SyscallSets::IsKernelModule(int sysno) {
+ switch (sysno) {
+-#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
++ defined(__powerpc64__)
+ case __NR_create_module:
+ case __NR_get_kernel_syms: // Should ENOSYS.
+ case __NR_query_module:
+@@ -708,7 +726,8 @@ bool SyscallSets::IsFsControl(int sysno) {
+ case __NR_swapoff:
+ case __NR_swapon:
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_umount:
+ #endif
+ case __NR_umount2:
+@@ -724,7 +743,7 @@ bool SyscallSets::IsNuma(int sysno) {
+ case __NR_getcpu:
+ case __NR_mbind:
+ #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_migrate_pages:
+ #endif
+ case __NR_move_pages:
+@@ -753,14 +772,15 @@ bool SyscallSets::IsGlobalProcessEnvironment(int sysno) {
+ switch (sysno) {
+ case __NR_acct: // Privileged.
+ #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_getrlimit:
+ #endif
+-#if defined(__i386__) || defined(__arm__)
++#if defined(__i386__) || defined(__arm__) || defined(__powerpc64__)
+ case __NR_ugetrlimit:
+ #endif
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_ulimit:
+ #endif
+ case __NR_getrusage:
+@@ -794,7 +814,7 @@ bool SyscallSets::IsGlobalSystemStatus(int sysno) {
+ #endif
+ case __NR_sysinfo:
+ case __NR_uname:
+-#if defined(__i386__)
++#if defined(__i386__) || defined(__powerpc64__)
+ case __NR_olduname:
+ case __NR_oldolduname:
+ #endif
+@@ -888,7 +908,8 @@ bool SyscallSets::IsSystemVMessageQueue(int sysno) {
+ #endif
+
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ // Big system V multiplexing system call.
+ bool SyscallSets::IsSystemVIpc(int sysno) {
+ switch (sysno) {
+@@ -908,7 +929,8 @@ bool SyscallSets::IsAnySystemV(int sysno) {
+ return IsSystemVMessageQueue(sysno) || IsSystemVSemaphores(sysno) ||
+ IsSystemVSharedMemory(sysno);
+ #elif defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ return IsSystemVIpc(sysno);
+ #endif
+ }
+@@ -961,7 +983,8 @@ bool SyscallSets::IsFaNotify(int sysno) {
+ bool SyscallSets::IsTimer(int sysno) {
+ switch (sysno) {
+ case __NR_getitimer:
+-#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
++ defined(__powerpc64__)
+ case __NR_alarm:
+ #endif
+ case __NR_setitimer:
+@@ -1020,18 +1043,22 @@ bool SyscallSets::IsMisc(int sysno) {
+ case __NR_syncfs:
+ case __NR_vhangup:
+ // The system calls below are not implemented.
+-#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
++ defined(__powerpc64__)
+ case __NR_afs_syscall:
+ #endif
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_break:
+ #endif
+-#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
++ defined(__powerpc64__)
+ case __NR_getpmsg:
+ #endif
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_gtty:
+ case __NR_idle:
+ case __NR_lock:
+@@ -1039,20 +1066,22 @@ bool SyscallSets::IsMisc(int sysno) {
+ case __NR_prof:
+ case __NR_profil:
+ #endif
+-#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
++ defined(__powerpc64__)
+ case __NR_putpmsg:
+ #endif
+ #if defined(__x86_64__)
+ case __NR_security:
+ #endif
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ case __NR_stty:
+ #endif
+-#if defined(__x86_64__)
++#if defined(__x86_64__) || defined(__powerpc64__)
+ case __NR_tuxcall:
+ #endif
+-#if !defined(__aarch64__)
++#if !defined(__aarch64__) && !defined(__powerpc64__)
+ case __NR_vserver:
+ #endif
+ return true;
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h
+@@ -43,13 +43,14 @@ class SANDBOX_EXPORT SyscallSets {
+ static bool IsDeniedGetOrModifySocket(int sysno);
+
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ // Big multiplexing system call for sockets.
+ static bool IsSocketCall(int sysno);
+ #endif
+
+ #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+ static bool IsNetworkSocketInformation(int sysno);
+ #endif
+
+@@ -87,7 +88,8 @@ class SANDBOX_EXPORT SyscallSets {
+ #endif
+
+ #if defined(__i386__) || \
+- (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS))
++ (defined(ARCH_CPU_MIPS_FAMILY) && defined(ARCH_CPU_32_BITS)) || \
++ defined(__powerpc64__)
+ // Big system V multiplexing system call.
+ static bool IsSystemVIpc(int sysno);
+ #endif
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/syscall.cc
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/syscall.cc
+@@ -16,7 +16,7 @@ namespace sandbox {
+ namespace {
+
+ #if defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARM_FAMILY) || \
+- defined(ARCH_CPU_MIPS_FAMILY)
++ defined(ARCH_CPU_MIPS_FAMILY) || defined (ARCH_CPU_PPC64_FAMILY)
+ // Number that's not currently used by any Linux kernel ABIs.
+ const int kInvalidSyscallNumber = 0x351d3;
+ #else
+@@ -308,12 +308,56 @@ asm(// We need to be able to tell the kernel exactly where we made a
+ // Enter the kernel
+ "svc 0\n"
+ "2:ret\n"
++ ".cfi_endproc\n"
++ ".size SyscallAsm, .-SyscallAsm\n"
++#elif defined(__powerpc64__)
++ ".text\n"
++ ".align 4\n"
++ ".type SyscallAsm @function\n"
++ "SyscallAsm:\n"
++ ".cfi_startproc\n"
++
++ // Check if r3 is negative
++ "cmpdi 3, 0\n"
++ "bgt 2f\n"
++
++ // Load address of 3f into r3 and return
++ "mflr 10\n"
++ "bl 1f\n"
++ "1: mflr 3\n"
++ "mtlr 10\n"
++ "addi 3, 3, 4*13\n"
++ "blr\n"
++
++ // Load arguments from array into r3-8
++ // save param 3 in r10
++ "2:\n"
++ "mr 0, 3\n"
++ "ld 3, 0(4)\n"
++ "ld 5, 16(4)\n"
++ "ld 6, 24(4)\n"
++ "ld 7, 32(4)\n"
++ "ld 8, 40(4)\n"
++ "ld 4, 8(4)\n"
++ "li 9, 0\n"
++
++ // Enter kernel
++ "sc\n"
++
++ // Magic return address
++ "3:\n"
++ // Like MIPS, ppc64 return values are always positive.
++ // Check for error in cr0.SO and negate upon error
++ "bc 4, 3, 4f\n"
++ "neg 3, 3\n"
++ "4: blr\n"
++
+ ".cfi_endproc\n"
+ ".size SyscallAsm, .-SyscallAsm\n"
+ #endif
+ ); // asm
+
+-#if defined(__x86_64__)
++#if defined(__x86_64__) || defined(__powerpc64__)
+ extern "C" {
+ intptr_t SyscallAsm(intptr_t nr, const intptr_t args[6]);
+ }
+@@ -427,6 +471,8 @@ intptr_t Syscall::Call(int nr,
+ ret = inout;
+ }
+
++#elif defined(__powerpc64__)
++ intptr_t ret = SyscallAsm(nr, args);
+ #else
+ #error "Unimplemented architecture"
+ #endif
+@@ -443,8 +489,18 @@ void Syscall::PutValueInUcontext(intptr_t ret_val, ucontext_t* ctx) {
+ // needs to be changed back.
+ ret_val = -ret_val;
+ SECCOMP_PARM4(ctx) = 1;
+- } else
++ } else {
+ SECCOMP_PARM4(ctx) = 0;
++ }
++#endif
++#if defined(__powerpc64__)
++ // Same as MIPS, need to invert ret and set error register (cr0.SO)
++ if (ret_val <= -1 && ret_val >= -4095) {
++ ret_val = -ret_val;
++ ctx->uc_mcontext.regs->ccr |= (1 << 28);
++ } else {
++ ctx->uc_mcontext.regs->ccr &= ~(1 << 28);
++ }
+ #endif
+ SECCOMP_RESULT(ctx) = static_cast<greg_t>(ret_val);
+ }
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/trap.cc
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/trap.cc
+@@ -230,6 +230,20 @@ void Trap::SigSys(int nr, LinuxSigInfo* info, ucontext_t* ctx) {
+ SetIsInSigHandler();
+ }
+
++#if defined(__powerpc64__)
++ // On ppc64+glibc, some syscalls seem to accidentally negate the first
++ // parameter which causes checks against it to fail. For now, manually
++ // negate them back.
++ // TODO(shawn@anastas.io): investigate this issue further
++ auto nr = SECCOMP_SYSCALL(ctx);
++ if (nr == __NR_openat || nr == __NR_mkdirat || nr == __NR_faccessat || nr == __NR_readlinkat ||
++ nr == __NR_renameat || nr == __NR_renameat2 || nr == __NR_newfstatat || nr == __NR_unlinkat) {
++ if (static_cast<int>(SECCOMP_PARM1(ctx)) > 0) {
++ SECCOMP_PARM1(ctx) = -SECCOMP_PARM1(ctx);
++ }
++ }
++#endif
++
+ // Copy the seccomp-specific data into a arch_seccomp_data structure. This
+ // is what we are showing to TrapFnc callbacks that the system call
+ // evaluator registered with the sandbox.
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/services/credentials.cc
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/services/credentials.cc
+@@ -79,7 +79,7 @@ bool ChrootToSafeEmptyDir() {
+ pid_t pid = -1;
+ alignas(16) char stack_buf[PTHREAD_STACK_MIN];
+ #if defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARM_FAMILY) || \
+- defined(ARCH_CPU_MIPS_FAMILY)
++ defined(ARCH_CPU_MIPS_FAMILY) || defined(ARCH_CPU_PPC64_FAMILY)
+ // The stack grows downward.
+ void* stack = stack_buf + sizeof(stack_buf);
+ #else
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_process.cc
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_process.cc
+@@ -151,7 +151,7 @@ bool BrokerProcess::IsSyscallAllowed(int sysno) const {
+ #if defined(__NR_fstatat)
+ case __NR_fstatat:
+ #endif
+-#if defined(__x86_64__) || defined(__aarch64__)
++#if defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__)
+ case __NR_newfstatat:
+ #endif
+ return !fast_check_in_client_ || allowed_command_set_.test(COMMAND_STAT);
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h
+@@ -29,6 +29,9 @@
+ #ifndef EM_AARCH64
+ #define EM_AARCH64 183
+ #endif
++#ifndef EM_PPC64
++#define EM_PPC64 21
++#endif
+
+ #ifndef __AUDIT_ARCH_64BIT
+ #define __AUDIT_ARCH_64BIT 0x80000000
+@@ -54,6 +57,12 @@
+ #ifndef AUDIT_ARCH_AARCH64
+ #define AUDIT_ARCH_AARCH64 (EM_AARCH64 | __AUDIT_ARCH_64BIT | __AUDIT_ARCH_LE)
+ #endif
++#ifndef AUDIT_ARCH_PPC64
++#define AUDIT_ARCH_PPC64 (EM_PPC64 | __AUDIT_ARCH_64BIT)
++#endif
++#ifndef AUDIT_ARCH_PPC64LE
++#define AUDIT_ARCH_PPC64LE (EM_PPC64 | __AUDIT_ARCH_64BIT | __AUDIT_ARCH_LE)
++#endif
+
+ // For prctl.h
+ #ifndef PR_SET_SECCOMP
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_signal.h
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_signal.h
+@@ -13,7 +13,7 @@
+ // (not undefined, but defined different values and in different memory
+ // layouts). So, fill the gap here.
+ #if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || \
+- defined(__aarch64__)
++ defined(__aarch64__) || defined(__powerpc64__)
+
+ #define LINUX_SIGHUP 1
+ #define LINUX_SIGINT 2
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_syscalls.h
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_syscalls.h
+@@ -35,5 +35,9 @@
+ #include "sandbox/linux/system_headers/arm64_linux_syscalls.h"
+ #endif
+
++#if defined(__powerpc64__)
++#include "sandbox/linux/system_headers/ppc64_linux_syscalls.h"
++#endif
++
+ #endif // SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SYSCALLS_H_
+
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_ucontext.h
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_ucontext.h
+@@ -11,6 +11,8 @@
+ #include "sandbox/linux/system_headers/arm_linux_ucontext.h"
+ #elif defined(__i386__)
+ #include "sandbox/linux/system_headers/i386_linux_ucontext.h"
++#elif defined(__powerpc64__)
++#include "sandbox/linux/system_headers/ppc64_linux_ucontext.h"
+ #else
+ #error "No support for your architecture in PNaCl header"
+ #endif
+new file mode 100644
+--- /dev/null
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/ppc64_linux_syscalls.h
+@@ -0,0 +1,12 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
++#define SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
++
++#include <asm/unistd.h>
++
++//TODO: is it necessary to redefine syscall numbers for PPC64?
++
++#endif // SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
+new file mode 100644
+--- /dev/null
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/ppc64_linux_ucontext.h
+@@ -0,0 +1,12 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
++#define SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
++
++#include <sys/ucontext.h>
++
++//TODO: is it necessary to redefine ucontext on PPC64?
++
++#endif // SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
+--- qtwebengine/src/3rdparty/chromium/services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc
++++ qtwebengine/src/3rdparty/chromium/services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc
+@@ -15,6 +15,11 @@
+ #include "sandbox/linux/system_headers/linux_syscalls.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+
++// On PPC64, TCGETS is defined in terms of struct termios, so we must include termios.h
++#ifdef __powerpc64__
++#include <termios.h>
++#endif
++
+ // TODO(vignatti): replace the local definitions below with #include
+ // <linux/dma-buf.h> once kernel version 4.6 becomes widely used.
+ #include <linux/types.h>
+--- qtwebengine/src/3rdparty/chromium/third_party/angle/src/libANGLE/Constants.h
++++ qtwebengine/src/3rdparty/chromium/third_party/angle/src/libANGLE/Constants.h
+@@ -9,6 +9,7 @@
+ #ifndef LIBANGLE_CONSTANTS_H_
+ #define LIBANGLE_CONSTANTS_H_
+
++#include <cstddef>
+ #include "common/platform.h"
+
+ namespace gl
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/heap/asm/BUILD.gn
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/heap/asm/BUILD.gn
+@@ -46,6 +46,10 @@ if (current_cpu == "x86" || current_cpu == "x64") {
+ sources = [
+ "SaveRegisters_mips64.S",
+ ]
++ } else if (current_cpu == "ppc64") {
++ sources = [
++ "SaveRegisters_ppc64.S",
++ ]
+ }
+
+ if (current_cpu == "arm") {
+new file mode 100644
+--- /dev/null
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/heap/asm/SaveRegisters_ppc64.S
+@@ -0,0 +1,60 @@
++/*
++ * typedef void (*PushAllRegistersCallback)(SafePointBarrier*, ThreadState*, intptr_t*);
++ * extern "C" void PushAllRegisters(SafePointBarrier*, ThreadState*, PushAllRegistersCallback)
++ */
++
++.type PushAllRegisters, %function
++.global PushAllRegisters
++.hidden PushAllRegisters
++PushAllRegisters:
++ // Push all callee-saves registers to get them
++ // on the stack for conservative stack scanning.
++ // Reserve space for callee-saved registers and minimal stack frame.
++ mflr 0 # r0 = LR
++ std 0,16(1) # store LR at addr sp+16
++ stdu 1,-176(1) # grow stack by 176 bytes and store new stack top ptr to r1
++ # 3218*8 = min stack non-volatile registers
++
++ // Save the callee-saved registers
++ std 31,168(1) # store r31 to addr sp+168
++ std 30,160(1) # etc...
++ std 29,152(1)
++ std 28,144(1)
++ std 27,136(1)
++ std 26,128(1)
++ std 25,120(1)
++ std 24,112(1)
++ std 23,104(1)
++ std 22,96(1)
++ std 21,88(1)
++ std 20,80(1)
++ std 19,72(1)
++ std 18,64(1)
++ std 17,56(1)
++ std 16,48(1)
++ std 15,40(1)
++ std 14,32(1)
++
++ // Note: the callee-saved floating point registers do not need to be
++ // copied to the stack, because fp registers never hold heap pointers
++ // and so do not need to be kept visible to the garbage collector.
++
++ // Pass the two first arguments untouched in r3 and r4 and the
++ // stack pointer to the callback.
++
++ std 2, 24(1) # save r2 to sp+24 addr
++ mtctr 5 # copy 3rd function arg (callback fn pointer) to CTR
++ mr 12, 5 # r12 must hold address of callback we are going to call
++ # for position-idependent functions inside the callback to work
++ mr 5, 1 # set current sp (stack top) as 3rd argument for the callback
++ bctrl # set LR to PC+4 and call the callback
++ ld 2, 24(1) # restore r2 from sp+24 addr
++
++ // Adjust stack, restore return address and return.
++ // Note: the copied registers do not need to be reloaded here,
++ // because they were preserved by the called routine.
++ addi 1,1,176 # restore original SP by doing sp += 176
++ ld 0,16(1) # restore original LR from addr sp+16
++ mtlr 0 # ... copy it to the actual LR
++ blr # return to LR addr
++
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/heap/heap_page.h
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/heap/heap_page.h
+@@ -67,11 +67,12 @@ constexpr size_t kBlinkPageBaseMask = ~kBlinkPageOffsetMask;
+ constexpr size_t kBlinkPagesPerRegion = 10;
+
+ // TODO(nya): Replace this with something like #if ENABLE_NACL.
+-#if 0
++#if defined(ARCH_CPU_PPC64)
+ // NaCl's system page size is 64 KiB. This causes a problem in Oilpan's heap
+ // layout because Oilpan allocates two guard pages for each Blink page (whose
+ // size is kBlinkPageSize = 2^17 = 128 KiB). So we don't use guard pages in
+ // NaCl.
++// The same issue holds for ppc64 systems, which use a 64k page size.
+ constexpr size_t kBlinkGuardPageSize = 0;
+ #else
+ constexpr size_t kBlinkGuardPageSize = base::kSystemPageSize;
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/dtoa/utils.h
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/dtoa/utils.h
+@@ -45,7 +45,7 @@
+ // disabled.)
+ // On Linux,x86 89255e-22 != Div_double(89255.0/1e22)
+ #if defined(_M_X64) || defined(__x86_64__) || defined(__ARMEL__) || \
+- defined(__aarch64__) || defined(__MIPSEL__)
++ defined(__aarch64__) || defined(__MIPSEL__) || defined(__powerpc64__)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #elif defined(_M_IX86) || defined(__i386__)
+ #if defined(_WIN32)
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/BUILD.gn
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/BUILD.gn
+@@ -100,6 +100,13 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ } else {
+ public_configs = [ ":no_asm_config" ]
+ }
++ } else if (current_cpu == "ppc64") {
++ if (is_linux) {
++ # TODO: ppc64 (be) check
++ sources += crypto_sources_linux_ppc64le
++ } else {
++ public_configs = [ ":no_asm_config" ]
++ }
+ } else {
+ public_configs = [ ":no_asm_config" ]
+ }
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h
+@@ -44,6 +44,8 @@ typedef MDRawContextARM RawContextCPU;
+ typedef MDRawContextARM64_Old RawContextCPU;
+ #elif defined(__mips__)
+ typedef MDRawContextMIPS RawContextCPU;
++#elif defined(__powerpc64__)
++typedef MDRawContextPPC64 RawContextCPU;
+ #else
+ #error "This code has not been ported to your platform yet."
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc
+@@ -270,7 +270,42 @@ void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
+ out->float_save.fir = mcontext.fpc_eir;
+ #endif
+ }
+-#endif // __mips__
++
++#elif defined(__powerpc64__)
++
++uintptr_t ThreadInfo::GetInstructionPointer() const {
++ return mcontext.gp_regs[PT_NIP];
++}
++
++void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
++ out->context_flags = MD_CONTEXT_PPC64_FULL;
++ for (int i = 0; i < MD_CONTEXT_PPC64_GPR_COUNT; i++)
++ out->gpr[i] = mcontext.gp_regs[i];
++
++ out->lr = mcontext.gp_regs[PT_LNK];
++ out->srr0 = mcontext.gp_regs[PT_NIP];
++ out->srr1 = mcontext.gp_regs[PT_MSR];
++ out->cr = mcontext.gp_regs[PT_CCR];
++ out->xer = mcontext.gp_regs[PT_XER];
++ out->ctr = mcontext.gp_regs[PT_CTR];
++
++ for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++)
++ out->float_save.fpregs[i] = mcontext.fp_regs[i];
++
++ out->float_save.fpscr = mcontext.fp_regs[NFPREG-1];
++
++ for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++)
++ out->vector_save.save_vr[i] = \
++ {(((uint64_t)vregs.vrregs[i][0]) << 32)
++ | vregs.vrregs[i][1],
++ (((uint64_t)vregs.vrregs[i][2]) << 32)
++ | vregs.vrregs[i][3]};
++
++ out->vrsave = vregs.vrsave;
++ out->vector_save.save_vscr = {0, vregs.vscr.vscr_word};
++ out->vector_save.save_vrvalid = 0xFFFFFFFF;
++}
++#endif // __powerpc64__
+
+ void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) {
+ assert(gp_regs || size);
+@@ -279,6 +314,11 @@ void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) {
+ *gp_regs = mcontext.gregs;
+ if (size)
+ *size = sizeof(mcontext.gregs);
++#elif defined(__powerpc64__)
++ if (gp_regs)
++ *gp_regs = mcontext.gp_regs;
++ if (size)
++ *size = sizeof(mcontext.gp_regs);
+ #else
+ if (gp_regs)
+ *gp_regs = ®s;
+@@ -294,6 +334,11 @@ void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) {
+ *fp_regs = &mcontext.fpregs;
+ if (size)
+ *size = sizeof(mcontext.fpregs);
++#elif defined(__powerpc64__)
++ if (fp_regs)
++ *fp_regs = &mcontext.fp_regs;
++ if (size)
++ *size = sizeof(mcontext.fp_regs);
+ #else
+ if (fp_regs)
+ *fp_regs = &fpregs;
+@@ -302,4 +347,13 @@ void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) {
+ #endif
+ }
+
++#if defined(__powerpc64__)
++void ThreadInfo::GetVectorRegisters(void** v_regs, size_t* size) {
++ if (v_regs)
++ *v_regs = &vregs;
++ if (size)
++ *size = sizeof(vregs);
++}
++#endif
++
+ } // namespace google_breakpad
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h
+@@ -68,6 +68,10 @@ struct ThreadInfo {
+ // Use the structures defined in <sys/user.h>
+ struct user_regs_struct regs;
+ struct user_fpsimd_struct fpregs;
++#elif defined(__powerpc64__)
++ // Use the structures defined in <sys/ucontext.h>.
++ mcontext_t mcontext;
++ vrregset_t vregs;
+ #elif defined(__mips__)
+ // Use the structure defined in <sys/ucontext.h>.
+ mcontext_t mcontext;
+@@ -84,6 +88,11 @@ struct ThreadInfo {
+
+ // Returns the pointer and size of float point register area.
+ void GetFloatingPointRegisters(void** fp_regs, size_t* size);
++
++#if defined(__powerpc64__)
++ // Returns the pointer and size of the vector register area. (PPC64 only)
++ void GetVectorRegisters(void** v_regs, size_t* size);
++#endif
+ };
+
+ } // namespace google_breakpad
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
+@@ -254,6 +254,48 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) {
+ out->float_save.fir = uc->uc_mcontext.fpc_eir; // Unused.
+ #endif
+ }
++
++#elif defined(__powerpc64__)
++
++uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
++ return uc->uc_mcontext.gp_regs[MD_CONTEXT_PPC64_REG_SP];
++}
++
++uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
++ return uc->uc_mcontext.gp_regs[PT_NIP];
++}
++
++void UContextReader::FillCPUContext(RawContextCPU* out, const ucontext_t* uc,
++ const vrregset_t* vregs) {
++ out->context_flags = MD_CONTEXT_PPC64_FULL;
++
++ for (int i = 0; i < MD_CONTEXT_PPC64_GPR_COUNT; i++)
++ out->gpr[i] = uc->uc_mcontext.gp_regs[i];
++
++ out->lr = uc->uc_mcontext.gp_regs[PT_LNK];
++ out->srr0 = uc->uc_mcontext.gp_regs[PT_NIP];
++ out->srr1 = uc->uc_mcontext.gp_regs[PT_MSR];
++ out->cr = uc->uc_mcontext.gp_regs[PT_CCR];
++ out->xer = uc->uc_mcontext.gp_regs[PT_XER];
++ out->ctr = uc->uc_mcontext.gp_regs[PT_CTR];
++
++ for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++)
++ out->float_save.fpregs[i] = uc->uc_mcontext.fp_regs[i];
++
++ out->float_save.fpscr = uc->uc_mcontext.fp_regs[NFPREG-1];
++
++ for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++)
++ out->vector_save.save_vr[i] =
++ {(((uint64_t)vregs->vrregs[i][0]) << 32)
++ | vregs->vrregs[i][1],
++ (((uint64_t)vregs->vrregs[i][2]) << 32)
++ | vregs->vrregs[i][3]};
++
++ out->vrsave = vregs->vrsave;
++ out->vector_save.save_vscr = {0, vregs->vscr.vscr_word};
++ out->vector_save.save_vrvalid = 0xFFFFFFFF;
++}
++
+ #endif
+
+ } // namespace google_breakpad
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h
+@@ -54,6 +54,9 @@ struct UContextReader {
+ #elif defined(__aarch64__)
+ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
+ const struct fpsimd_context* fpregs);
++#elif defined(__powerpc64__)
++ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
++ const vrregset_t* vregs);
+ #else
+ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc);
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
+@@ -467,9 +467,16 @@ bool ExceptionHandler::HandleSignal(int /*sig*/, siginfo_t* info, void* uc) {
+ memcpy(&g_crash_context_.float_state, fp_ptr,
+ sizeof(g_crash_context_.float_state));
+ }
++#elif defined(__powerpc64__)
++ // On PPC64, we must copy VR state
++ ucontext_t* uc_ptr = (ucontext_t*)uc;
++ if (uc_ptr->uc_mcontext.v_regs) {
++ memcpy(&g_crash_context_.vector_state, uc_ptr->uc_mcontext.v_regs,
++ sizeof(g_crash_context_.vector_state));
++ }
+ #elif !defined(__ARM_EABI__) && !defined(__mips__)
+ // FP state is not part of user ABI on ARM Linux.
+- // In case of MIPS Linux FP state is already part of ucontext_t
++ // In case of MIPS, Linux FP state is already part of ucontext_t
+ // and 'float_state' is not a member of CrashContext.
+ ucontext_t* uc_ptr = (ucontext_t*)uc;
+ if (uc_ptr->uc_mcontext.fpregs) {
+@@ -707,11 +714,19 @@ bool ExceptionHandler::WriteMinidump() {
+ }
+ #endif
+
+-#if !defined(__ARM_EABI__) && !defined(__aarch64__) && !defined(__mips__)
++#if !defined(__ARM_EABI__) && !defined(__aarch64__) && !defined(__mips__) \
++ && !defined(__powerpc64__)
+ // FPU state is not part of ARM EABI ucontext_t.
+ memcpy(&context.float_state, context.context.uc_mcontext.fpregs,
+ sizeof(context.float_state));
+ #endif
++
++#if defined(__powerpc64__)
++ // Vector registers must be copied on PPC64
++ memcpy(&context.vector_state, context.context.uc_mcontext.v_regs,
++ sizeof(context.vector_state));
++#endif
++
+ context.tid = sys_gettid();
+
+ // Add an exception stream to the minidump for better reporting.
+@@ -732,6 +747,9 @@ bool ExceptionHandler::WriteMinidump() {
+ #elif defined(__mips__)
+ context.siginfo.si_addr =
+ reinterpret_cast<void*>(context.context.uc_mcontext.pc);
++#elif defined(__powerpc64__)
++ context.siginfo.si_addr =
++ reinterpret_cast<void*>(context.context.uc_mcontext.gp_regs[PT_NIP]);
+ #else
+ #error "This code has not been ported to your platform yet."
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h
+@@ -192,7 +192,11 @@ class ExceptionHandler {
+ siginfo_t siginfo;
+ pid_t tid; // the crashing thread.
+ ucontext_t context;
+-#if !defined(__ARM_EABI__) && !defined(__mips__)
++#if defined(__powerpc64__)
++ // PPC64's FP state is a part of ucontext_t like MIPS but the vector
++ // state is not, so a struct is needed.
++ vstate_t vector_state;
++#elif !defined(__ARM_EABI__) && !defined(__mips__)
+ // #ifdef this out because FP state is not part of user ABI for Linux ARM.
+ // In case of MIPS Linux FP state is already part of ucontext_t so
+ // 'float_state' is not required.
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler_unittest.cc
+@@ -307,7 +307,7 @@ TEST(ExceptionHandlerTest, ParallelChildCrashesDontHang) {
+ }
+
+ // Wait a while until the child should have crashed.
+- usleep(1000000);
++ usleep(2000000);
+ // Kill the child if it is still running.
+ kill(child, SIGKILL);
+
+@@ -576,6 +576,8 @@ const unsigned char kIllegalInstruction[] = {
+ #if defined(__mips__)
+ // mfc2 zero,Impl - usually illegal in userspace.
+ 0x48, 0x00, 0x00, 0x48
++#elif defined(__powerpc64__)
++ 0x01, 0x01, 0x01, 0x01 // Crashes on a tested POWER9 cpu
+ #else
+ // This crashes with SIGILL on x86/x86-64/arm.
+ 0xff, 0xff, 0xff, 0xff
+@@ -771,10 +773,10 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryMaxBound) {
+
+ // These are defined here so the parent can use them to check the
+ // data from the minidump afterwards.
+- // Use 4k here because the OS will hand out a single page even
++ // Use the page size here because the OS will hand out a single page even
+ // if a smaller size is requested, and this test wants to
+ // test the upper bound of the memory range.
+- const uint32_t kMemorySize = 4096; // bytes
++ const uint32_t kMemorySize = getpagesize(); // bytes
+ const int kOffset = kMemorySize - sizeof(kIllegalInstruction);
+
+ const pid_t child = fork();
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer.cc
+@@ -138,7 +138,9 @@ class MicrodumpWriter {
+ const MicrodumpExtraInfo& microdump_extra_info,
+ LinuxDumper* dumper)
+ : ucontext_(context ? &context->context : NULL),
+-#if !defined(__ARM_EABI__) && !defined(__mips__)
++#if defined(__powerpc64__)
++ vector_state_(context ? &context->vector_state : NULL),
++#elif !defined(__ARM_EABI__) && !defined(__mips__)
+ float_state_(context ? &context->float_state : NULL),
+ #endif
+ dumper_(dumper),
+@@ -337,6 +339,8 @@ class MicrodumpWriter {
+ # else
+ # error "This mips ABI is currently not supported (n32)"
+ #endif
++#elif defined(__powerpc64__)
++ const char kArch[] = "ppc64";
+ #else
+ #error "This code has not been ported to your platform yet"
+ #endif
+@@ -409,7 +413,9 @@ class MicrodumpWriter {
+ void DumpCPUState() {
+ RawContextCPU cpu;
+ my_memset(&cpu, 0, sizeof(RawContextCPU));
+-#if !defined(__ARM_EABI__) && !defined(__mips__)
++#if defined(__powerpc64__)
++ UContextReader::FillCPUContext(&cpu, ucontext_, vector_state_);
++#elif !defined(__ARM_EABI__) && !defined(__mips__)
+ UContextReader::FillCPUContext(&cpu, ucontext_, float_state_);
+ #else
+ UContextReader::FillCPUContext(&cpu, ucontext_);
+@@ -605,7 +611,9 @@ class MicrodumpWriter {
+ void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); }
+
+ const ucontext_t* const ucontext_;
+-#if !defined(__ARM_EABI__) && !defined(__mips__)
++#if defined(__powerpc64__)
++ const google_breakpad::vstate_t* const vector_state_;
++#elif !defined(__ARM_EABI__) && !defined(__mips__)
+ const google_breakpad::fpstate_t* const float_state_;
+ #endif
+ LinuxDumper* dumper_;
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc
+@@ -278,10 +278,19 @@ TEST(MicrodumpWriterTest, BasicWithMappings) {
+ CrashAndGetMicrodump(mappings, MicrodumpExtraInfo(), &buf);
+ ASSERT_TRUE(ContainsMicrodump(buf));
+
++ int page_size = getpagesize();
+ #ifdef __LP64__
+- ASSERT_NE(std::string::npos,
+- buf.find("M 0000000000001000 000000000000002A 0000000000001000 "
+- "33221100554477668899AABBCCDDEEFF0 libfoo.so"));
++ // This test is only available for the following page sizes
++ ASSERT_TRUE((page_size == 4096) || (page_size == 65536));
++ if (page_size == 4096) {
++ ASSERT_NE(std::string::npos,
++ buf.find("M 0000000000001000 000000000000002A 0000000000001000 "
++ "33221100554477668899AABBCCDDEEFF0 libfoo.so"));
++ } else {
++ ASSERT_NE(std::string::npos,
++ buf.find("M 0000000000010000 000000000000002A 0000000000010000 "
++ "33221100554477668899AABBCCDDEEFF0 libfoo.so"));
++ }
+ #else
+ ASSERT_NE(std::string::npos,
+ buf.find("M 00001000 0000002A 00001000 "
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc
+@@ -116,6 +116,9 @@ bool LinuxCoreDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) {
+ #elif defined(__mips__)
+ stack_pointer =
+ reinterpret_cast<uint8_t*>(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]);
++#elif defined(__powerpc64__)
++ stack_pointer =
++ reinterpret_cast<uint8_t*>(info->mcontext.gp_regs[MD_CONTEXT_PPC64_REG_SP]);
+ #else
+ #error "This code hasn't been ported to your platform yet."
+ #endif
+@@ -200,7 +203,10 @@ bool LinuxCoreDumper::EnumerateThreads() {
+ memset(&info, 0, sizeof(ThreadInfo));
+ info.tgid = status->pr_pgrp;
+ info.ppid = status->pr_ppid;
+-#if defined(__mips__)
++#if defined(__powerpc64__)
++ for (int i = 0; i < 31; i++)
++ info.mcontext.gp_regs[i] = status->pr_reg[i];
++#elif defined(__mips__)
+ #if defined(__ANDROID__)
+ for (int i = EF_R0; i <= EF_R31; i++)
+ info.mcontext.gregs[i - EF_R0] = status->pr_reg[i];
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.cc
+@@ -798,7 +798,9 @@ bool LinuxDumper::GetStackInfo(const void** stack, size_t* stack_len,
+ reinterpret_cast<uint8_t*>(int_stack_pointer & ~(page_size - 1));
+
+ // The number of bytes of stack which we try to capture.
+- static const ptrdiff_t kStackToCapture = 32 * 1024;
++ // This now depends on page_size to avoid missing data
++ // on systems with larger page sizes.
++ static const ptrdiff_t kStackToCapture = 8 * page_size;
+
+ const MappingInfo* mapping = FindMapping(stack_pointer);
+ if (!mapping)
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.h
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.h
+@@ -60,7 +60,8 @@ namespace google_breakpad {
+ (defined(__mips__) && _MIPS_SIM == _ABIO32)
+ typedef Elf32_auxv_t elf_aux_entry;
+ #elif defined(__x86_64) || defined(__aarch64__) || \
+- (defined(__mips__) && _MIPS_SIM != _ABIO32)
++ (defined(__mips__) && _MIPS_SIM != _ABIO32) || \
++ defined(__powerpc64__)
+ typedef Elf64_auxv_t elf_aux_entry;
+ #endif
+
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
+@@ -51,6 +51,8 @@
+ #define TID_PTR_REGISTER "rcx"
+ #elif defined(__mips__)
+ #define TID_PTR_REGISTER "$1"
++#elif defined(__powerpc64__)
++#define TID_PTR_REGISTER "r8"
+ #else
+ #error This test has not been ported to this platform.
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
+@@ -154,19 +154,27 @@ bool LinuxPtraceDumper::CopyFromProcess(void* dest, pid_t child,
+ return true;
+ }
+
+-bool LinuxPtraceDumper::ReadRegisterSet(ThreadInfo* info, pid_t tid)
+-{
++bool LinuxPtraceDumper::ReadRegisterSet(ThreadInfo* info, pid_t tid) {
+ #ifdef PTRACE_GETREGSET
+ struct iovec io;
+ info->GetGeneralPurposeRegisters(&io.iov_base, &io.iov_len);
+- if (sys_ptrace(PTRACE_GETREGSET, tid, (void*)NT_PRSTATUS, (void*)&io) == -1) {
++ if (ptrace(PTRACE_GETREGSET, tid, (void*)NT_PRSTATUS, (void*)&io) == -1) {
+ return false;
+ }
+
+ info->GetFloatingPointRegisters(&io.iov_base, &io.iov_len);
+- if (sys_ptrace(PTRACE_GETREGSET, tid, (void*)NT_FPREGSET, (void*)&io) == -1) {
++ if (ptrace(PTRACE_GETREGSET, tid, (void*)NT_FPREGSET, (void*)&io) == -1) {
+ return false;
+ }
++
++#if defined(__powerpc64__)
++ // Grab the vector registers on PPC64 too
++ info->GetVectorRegisters(&io.iov_base, &io.iov_len);
++ if (ptrace(PTRACE_GETREGSET, tid, (void*)NT_PPC_VMX, (void*)&io) == -1) {
++ return false;
++ }
++#endif // defined(__powerpc64__)
++
+ return true;
+ #else
+ return false;
+@@ -303,6 +311,9 @@ bool LinuxPtraceDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) {
+ #elif defined(__mips__)
+ stack_pointer =
+ reinterpret_cast<uint8_t*>(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]);
++#elif defined(__powerpc64__)
++ stack_pointer =
++ reinterpret_cast<uint8_t*>(info->mcontext.gp_regs[MD_CONTEXT_PPC64_REG_SP]);
+ #else
+ #error "This code hasn't been ported to your platform yet."
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc
+@@ -457,6 +457,9 @@ TEST(LinuxPtraceDumperTest, VerifyStackReadWithMultipleThreads) {
+ #elif defined(__mips__)
+ pid_t* process_tid_location =
+ reinterpret_cast<pid_t*>(one_thread.mcontext.gregs[1]);
++#elif defined(__powerpc64__)
++ pid_t* process_tid_location =
++ reinterpret_cast<pid_t*>(one_thread.mcontext.gp_regs[8]);
+ #else
+ #error This test has not been ported to this platform.
+ #endif
+@@ -553,6 +556,8 @@ TEST_F(LinuxPtraceDumperTest, SanitizeStackCopy) {
+ uintptr_t heap_addr = thread_info.regs.rcx;
+ #elif defined(__mips__)
+ uintptr_t heap_addr = thread_info.mcontext.gregs[1];
++#elif defined(__powerpc64__)
++ uintptr_t heap_addr = thread_info.mcontext.gp_regs[8];
+ #else
+ #error This test has not been ported to this platform.
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.cc
+@@ -136,7 +136,9 @@ class MinidumpWriter {
+ : fd_(minidump_fd),
+ path_(minidump_path),
+ ucontext_(context ? &context->context : NULL),
+-#if !defined(__ARM_EABI__) && !defined(__mips__)
++#if defined(__powerpc64__)
++ vector_state_(context ? &context->vector_state : NULL),
++#elif !defined(__ARM_EABI__) && !defined(__mips__)
+ float_state_(context ? &context->float_state : NULL),
+ #endif
+ dumper_(dumper),
+@@ -468,7 +470,9 @@ class MinidumpWriter {
+ if (!cpu.Allocate())
+ return false;
+ my_memset(cpu.get(), 0, sizeof(RawContextCPU));
+-#if !defined(__ARM_EABI__) && !defined(__mips__)
++#if defined(__powerpc64__)
++ UContextReader::FillCPUContext(cpu.get(), ucontext_, vector_state_);
++#elif !defined(__ARM_EABI__) && !defined(__mips__)
+ UContextReader::FillCPUContext(cpu.get(), ucontext_, float_state_);
+ #else
+ UContextReader::FillCPUContext(cpu.get(), ucontext_);
+@@ -891,7 +895,7 @@ class MinidumpWriter {
+ dirent->location.rva = 0;
+ }
+
+-#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
++#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || defined(__powerpc64__)
+ bool WriteCPUInformation(MDRawSystemInfo* sys_info) {
+ char vendor_id[sizeof(sys_info->cpu.x86_cpu_info.vendor_id) + 1] = {0};
+ static const char vendor_id_name[] = "vendor_id";
+@@ -911,7 +915,9 @@ class MinidumpWriter {
+
+ // processor_architecture should always be set, do this first
+ sys_info->processor_architecture =
+-#if defined(__mips__)
++#if defined(__powerpc64__)
++ MD_CPU_ARCHITECTURE_PPC64;
++#elif defined(__mips__)
+ # if _MIPS_SIM == _ABIO32
+ MD_CPU_ARCHITECTURE_MIPS;
+ # elif _MIPS_SIM == _ABI64
+@@ -1327,7 +1333,9 @@ class MinidumpWriter {
+ const char* path_; // Path to the file where the minidum should be written.
+
+ const ucontext_t* const ucontext_; // also from the signal handler
+-#if !defined(__ARM_EABI__) && !defined(__mips__)
++#if defined(__powerpc64__)
++ const google_breakpad::vstate_t* const vector_state_;
++#elif !defined(__ARM_EABI__) && !defined(__mips__)
+ const google_breakpad::fpstate_t* const float_state_; // ditto
+ #endif
+ LinuxDumper* dumper_;
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h
+@@ -47,6 +47,8 @@ class ExceptionHandler;
+
+ #if defined(__aarch64__)
+ typedef struct fpsimd_context fpstate_t;
++#elif defined(__powerpc64__)
++typedef vrregset_t vstate_t;
+ #elif !defined(__ARM_EABI__) && !defined(__mips__)
+ typedef struct _fpstate fpstate_t;
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc
+@@ -710,6 +710,9 @@ TEST(MinidumpWriterTest, InvalidStackPointer) {
+ #elif defined(__mips__)
+ context.context.uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP] =
+ invalid_stack_pointer;
++#elif defined(__powerpc64__)
++ context.context.uc_mcontext.gp_regs[MD_CONTEXT_PPC64_REG_SP] =
++ invalid_stack_pointer;
+ #else
+ # error "This code has not been ported to your platform yet."
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file.cc
+@@ -65,8 +65,7 @@ bool MemoryMappedFile::Map(const char* path, size_t offset) {
+ }
+
+ #if defined(__x86_64__) || defined(__aarch64__) || \
+- (defined(__mips__) && _MIPS_SIM == _ABI64)
+-
++ (defined(__mips__) && _MIPS_SIM == _ABI64) || defined(__powerpc64__)
+ struct kernel_stat st;
+ if (sys_fstat(fd, &st) == -1 || st.st_size < 0) {
+ #else
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file_unittest.cc
+@@ -176,9 +176,10 @@ TEST_F(MemoryMappedFileTest, RemapAfterMap) {
+ TEST_F(MemoryMappedFileTest, MapWithOffset) {
+ // Put more data in the test file this time. Offsets can only be
+ // done on page boundaries, so we need a two page file to test this.
+- const int page_size = 4096;
+- char data1[2 * page_size];
+- size_t data1_size = sizeof(data1);
++ const int page_size = getpagesize();
++ char *data1 = static_cast<char*>(malloc(2 * page_size));
++ EXPECT_TRUE(data1 != NULL);
++ size_t data1_size = (2 * page_size);
+ for (size_t i = 0; i < data1_size; ++i) {
+ data1[i] = i & 0x7f;
+ }
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/memory_allocator_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/memory_allocator_unittest.cc
+@@ -57,8 +57,9 @@ TEST(PageAllocatorTest, LargeObject) {
+
+ EXPECT_EQ(0U, allocator.pages_allocated());
+ uint8_t *p = reinterpret_cast<uint8_t*>(allocator.Alloc(10000));
++ uint64_t expected_pages = 1 + ((10000 - 1) / getpagesize());
+ ASSERT_FALSE(p == NULL);
+- EXPECT_EQ(3U, allocator.pages_allocated());
++ EXPECT_EQ(expected_pages, allocator.pages_allocated());
+ for (unsigned i = 1; i < 10; ++i) {
+ uint8_t *p = reinterpret_cast<uint8_t*>(allocator.Alloc(i));
+ ASSERT_FALSE(p == NULL);
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_linux.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_linux.cc
+@@ -202,12 +202,14 @@ bool ExploitabilityLinux::EndedOnIllegalWrite(uint64_t instruction_ptr) {
+ // Check architecture and set architecture variable to corresponding flag
+ // in objdump.
+ switch (context->GetContextCPU()) {
++#if defined(__i386) || defined(__x86_64)
+ case MD_CONTEXT_X86:
+ architecture = "i386";
+ break;
+ case MD_CONTEXT_AMD64:
+ architecture = "i386:x86-64";
+ break;
++#endif
+ default:
+ // Unsupported architecture. Note that ARM architectures are not
+ // supported because objdump does not support ARM.
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_unittest.cc
+@@ -104,6 +104,8 @@ ExploitabilityFor(const string& filename) {
+ }
+
+ TEST(ExploitabilityTest, TestWindowsEngine) {
++// The following tests are only executable on an x86-class linux machine.
++#if !defined(_WIN32) && (defined(__i386) || defined(__x86_64))
+ ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+ ExploitabilityFor("ascii_read_av.dmp"));
+ ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+@@ -136,9 +138,12 @@ TEST(ExploitabilityTest, TestWindowsEngine) {
+ ExploitabilityFor("read_av_clobber_write.dmp"));
+ ASSERT_EQ(google_breakpad::EXPLOITABILITY_LOW,
+ ExploitabilityFor("read_av_conditional.dmp"));
++#endif
+ }
+
+ TEST(ExploitabilityTest, TestLinuxEngine) {
++// The following tests are only executable on an x86-class linux machine.
++#if defined(__i386) || defined(__x86_64)
+ ASSERT_EQ(google_breakpad::EXPLOITABILITY_INTERESTING,
+ ExploitabilityFor("linux_null_read_av.dmp"));
+ ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+@@ -171,7 +176,8 @@ TEST(ExploitabilityTest, TestLinuxEngine) {
+ ExploitabilityFor("linux_executable_heap.dmp"));
+ ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+ ExploitabilityFor("linux_jmp_to_module_not_exe_region.dmp"));
+-#ifndef _WIN32
++#endif
++#if !defined(_WIN32) && (defined(__i386) || defined(__x86_64))
+ ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+ ExploitabilityFor("linux_write_to_nonwritable_module.dmp"));
+ ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
+@@ -182,10 +188,10 @@ TEST(ExploitabilityTest, TestLinuxEngine) {
+ ExploitabilityFor("linux_write_to_outside_module_via_math.dmp"));
+ ASSERT_EQ(google_breakpad::EXPLOITABILITY_INTERESTING,
+ ExploitabilityFor("linux_write_to_under_4k.dmp"));
+-#endif // _WIN32
++#endif // !defined(_WIN32) && (!defined(__i386) && !defined(__x86_64))
+ }
+
+-#ifndef _WIN32
++#if !defined(_WIN32) && (defined(__i386) || defined(__x86_64))
+ TEST(ExploitabilityLinuxUtilsTest, DisassembleBytesTest) {
+ ASSERT_FALSE(ExploitabilityLinuxTest::DisassembleBytes("", NULL, 5, NULL));
+ uint8_t bytes[6] = {0xc7, 0x0, 0x5, 0x0, 0x0, 0x0};
+@@ -301,6 +307,7 @@ TEST(ExploitabilityLinuxUtilsTest, CalculateAddressTest) {
+ context,
+ &write_address));
+ }
+-#endif // _WIN32
++#endif // !defined(_WIN32) && (defined(__i386) || defined(__x86_64))
++
+
+ } // namespace
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/tools/linux/md2core/minidump-2-core.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/tools/linux/md2core/minidump-2-core.cc
+@@ -76,6 +76,8 @@
+ #define ELF_ARCH EM_MIPS
+ #elif defined(__aarch64__)
+ #define ELF_ARCH EM_AARCH64
++#elif defined(__powerpc64__)
++ #define ELF_ARCH EM_PPC64
+ #endif
+
+ #if defined(__arm__)
+@@ -86,6 +88,8 @@ typedef user_regs user_regs_struct;
+ #elif defined (__mips__)
+ // This file-local typedef simplifies the source code.
+ typedef gregset_t user_regs_struct;
++#elif defined(__powerpc64__)
++typedef struct pt_regs user_regs_struct;
+ #endif
+
+ using google_breakpad::MDTypeHelper;
+@@ -320,6 +324,9 @@ struct CrashedProcess {
+ #endif
+ #if defined(__aarch64__)
+ user_fpsimd_struct fpregs;
++#endif
++#if defined(__powerpc64__)
++ mcontext_t mcontext;
+ #endif
+ uintptr_t stack_addr;
+ const uint8_t* stack;
+@@ -534,6 +541,38 @@ ParseThreadRegisters(CrashedProcess::Thread* thread,
+ thread->mcontext.fpc_eir = rawregs->float_save.fir;
+ #endif
+ }
++#elif defined(__powerpc64__)
++static void
++ParseThreadRegisters(CrashedProcess::Thread* thread,
++ const MinidumpMemoryRange& range) {
++ const MDRawContextPPC64* rawregs = range.GetData<MDRawContextPPC64>(0);
++
++ for (int i = 0; i < MD_CONTEXT_PPC64_GPR_COUNT; i++)
++ thread->mcontext.gp_regs[i] = rawregs->gpr[i];
++
++ thread->mcontext.gp_regs[PT_LNK] = rawregs->lr;
++ thread->mcontext.gp_regs[PT_NIP] = rawregs->srr0;
++ thread->mcontext.gp_regs[PT_MSR] = rawregs->srr1;
++ thread->mcontext.gp_regs[PT_CCR] = rawregs->cr;
++ thread->mcontext.gp_regs[PT_XER] = rawregs->xer;
++ thread->mcontext.gp_regs[PT_CTR] = rawregs->ctr;
++ thread->mcontext.v_regs->vrsave = rawregs->vrsave;
++
++ for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++)
++ thread->mcontext.fp_regs[i] = rawregs->float_save.fpregs[i];
++
++ thread->mcontext.fp_regs[NFPREG-1] = rawregs->float_save.fpscr;
++
++ for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++) {
++ thread->mcontext.v_regs->vrregs[i][0] = rawregs->vector_save.save_vr[i].high >> 32;
++ thread->mcontext.v_regs->vrregs[i][1] = rawregs->vector_save.save_vr[i].high;
++ thread->mcontext.v_regs->vrregs[i][2] = rawregs->vector_save.save_vr[i].low >> 32;
++ thread->mcontext.v_regs->vrregs[i][3] = rawregs->vector_save.save_vr[i].low;
++ }
++
++ thread->mcontext.v_regs->vscr.vscr_word = rawregs->vector_save.save_vscr.low & 0xFFFFFFFF;
++}
++
+ #else
+ #error "This code has not been ported to your platform yet"
+ #endif
+@@ -622,6 +661,12 @@ ParseSystemInfo(const Options& options, CrashedProcess* crashinfo,
+ # else
+ # error "This mips ABI is currently not supported (n32)"
+ # endif
++#elif defined(__powerpc64__)
++ if (sysinfo->processor_architecture != MD_CPU_ARCHITECTURE_PPC64) {
++ fprintf(stderr,
++ "This version of minidump-2-core only supports PPC64.\n");
++ exit(1);
++ }
+ #else
+ #error "This code has not been ported to your platform yet"
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/CONTRIBUTORS
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/CONTRIBUTORS
+@@ -13,3 +13,4 @@ Mark Mentovai <mark@chromium.org>
+ Robert Sesek <rsesek@chromium.org>
+ Scott Graham <scottmg@chromium.org>
+ Joshua Peraza <jperaza@chromium.org>
++Shawn Anastasio <shawn@anastas.io>
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/compat/linux/sys/user.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/compat/linux/sys/user.h
+@@ -15,6 +15,7 @@
+ #ifndef CRASHPAD_COMPAT_LINUX_SYS_USER_H_
+ #define CRASHPAD_COMPAT_LINUX_SYS_USER_H_
+
++#include <cstddef>
+ #include_next <sys/user.h>
+
+ #include <features.h>
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_context.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_context.h
+@@ -592,6 +592,70 @@ struct MinidumpContextMIPS64 {
+ uint64_t fir;
+ };
+
++//! \brief ppc64-specific flags for MinidumpPPC64::context_flags
++//! Based on minidump_cpu_ppc64.h from breakpad
++enum MinidumpContextPPC64Flags : uint32_t {
++ //! \brief Identifies the context as PPC64.
++ kMinidumpContextPPC64 = 0x01000000,
++
++ //! \brief Indicates the validity of general purpose registers.
++ //!
++ //! Registers `r0`-`r31`, `nip`, `msr`, `lr`, etc. are valid.
++ kMinidumpContextPPC64Base = kMinidumpContextPPC64 | 0x00000001,
++
++ //! \brief Indicates the validity of floating point registers.
++ //!
++ //! Registers `fp0`-`fp31`, `fpscr` are valid.
++ kMinidumpContextPPC64Floating = kMinidumpContextPPC64 | 0x00000008,
++
++ //! \brief Indicates the validity of Altivec/VMX registers.
++ //!
++ //! Registers `v0`-`v31`, `vscr`, `vrsave`.
++ kMinidumpContextPPC64Vector = kMinidumpContextPPC64 | 0x00000020,
++
++ //! \brief Indicates the validity of all registers
++ kMinidumpContextPPC64All = kMinidumpContextPPC64Base |
++ kMinidumpContextPPC64Floating |
++ kMinidumpContextPPC64Vector
++};
++
++//! \brief A PPC64 CPU context carried in a minidump file.
++//! Based on minidump_cpu_ppc64.h from breakpad.
++struct MinidumpContextPPC64 {
++ uint64_t context_flags;
++
++ //! \brief General purpose registers.
++ uint64_t nip;
++ uint64_t msr;
++ uint64_t regs[32];
++ uint64_t ccr;
++ uint64_t xer;
++ uint64_t lnk;
++ uint64_t ctr;
++
++ //! \brief Floating point registers.
++ double fpregs[32];
++
++ //! \brief FPU status register.
++ double fpscr;
++
++ //! \brief Altivec/VMX vector registers.
++ struct {
++ //! \brief Vector registers are 128bits.
++ uint128_struct save_vr[32];
++ uint128_struct save_vscr;
++
++ //! \brief Padding included for breakpad compatibiltiy.
++ uint32_t save_pad5[4];
++
++ //! \brief VRSAVE register.
++ uint32_t save_vrsave;
++
++ //! \brief Padding included for breakpad compatibiltiy.
++ uint32_t save_pad6[7];
++ } vregs;
++};
++
+ } // namespace crashpad
+
+ #endif // CRASHPAD_MINIDUMP_MINIDUMP_CONTEXT_H_
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_context_writer.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_context_writer.cc
+@@ -101,6 +101,13 @@ MinidumpContextWriter::CreateFromSnapshot(const CPUContext* context_snapshot) {
+ break;
+ }
+
++ case kCPUArchitecturePPC64: {
++ context = std::make_unique<MinidumpContextPPC64Writer>();
++ reinterpret_cast<MinidumpContextPPC64Writer*>(context.get())
++ ->InitalizeFromSnapshot(context_snapshot->ppc64);
++ break;
++ }
++
+ default: {
+ LOG(ERROR) << "unknown context architecture "
+ << context_snapshot->architecture;
+@@ -453,4 +460,47 @@ size_t MinidumpContextMIPS64Writer::ContextSize() const {
+ return sizeof(context_);
+ }
+
++MinidumpContextPPC64Writer::MinidumpContextPPC64Writer()
++ : MinidumpContextWriter(), context_() {
++ context_.context_flags = kMinidumpContextPPC64;
++}
++
++MinidumpContextPPC64Writer::~MinidumpContextPPC64Writer() = default;
++
++void MinidumpContextPPC64Writer::InitalizeFromSnapshot(
++ const CPUContextPPC64* context_snapshot) {
++ DCHECK_EQ(state(), kStateMutable);
++ DCHECK_EQ(context_.context_flags, kMinidumpContextPPC64);
++
++ context_.context_flags = kMinidumpContextPPC64All;
++
++ memcpy(context_.regs, context_snapshot->regs, sizeof(context_.regs));
++ context_.nip = context_snapshot->nip;
++ context_.msr = context_snapshot->msr;
++ context_.ccr = context_snapshot->ccr;
++ context_.xer = context_snapshot->xer;
++ context_.lnk = context_snapshot->lnk;
++ context_.ctr = context_snapshot->ctr;
++
++ memcpy(context_.fpregs, context_snapshot->fpregs, sizeof(context_.fpregs));
++ context_.fpscr = context_snapshot->fpscr;
++
++ memcpy(context_.vregs.save_vr, context_snapshot->vregs.save_vr,
++ sizeof(context_.vregs.save_vr));
++ memcpy(&context_.vregs.save_vscr, &context_snapshot->vregs.save_vscr,
++ sizeof(context_.vregs.save_vscr));
++ context_.vregs.save_vrsave = context_snapshot->vregs.save_vrsave;
++}
++
++bool MinidumpContextPPC64Writer::WriteObject(
++ FileWriterInterface* file_writer) {
++ DCHECK_EQ(state(), kStateWritable);
++ return file_writer->Write(&context_, sizeof(context_));
++}
++
++size_t MinidumpContextPPC64Writer::ContextSize() const {
++ DCHECK_GE(state(), kStateFrozen);
++ return sizeof(context_);
++}
++
+ } // namespace crashpad
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_context_writer.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_context_writer.h
+@@ -315,6 +315,45 @@ class MinidumpContextMIPS64Writer final : public MinidumpContextWriter {
+ DISALLOW_COPY_AND_ASSIGN(MinidumpContextMIPS64Writer);
+ };
+
++class MinidumpContextPPC64Writer final : public MinidumpContextWriter {
++ public:
++ MinidumpContextPPC64Writer();
++ ~MinidumpContextPPC64Writer() override;
++
++ //! \brief Initalizes the MinidumpContextPPC64 based on \a context_snapshot.
++ //!
++ //! \param[in] context_snapshot The context snapshot to use as source data.
++ //!
++ //! \note Valid in #kStateMutable. No mutation of context() may be done before
++ //! calling this method, and it is not normally necessary to alter
++ //! context() after calling this method.
++ void InitalizeFromSnapshot(const CPUContextPPC64* context_snapshot);
++
++ //! \brief Returns a pointer to the context structure that this object will
++ //! write.
++ //!
++ //! \attention This returns a non-`const` pointer to this object’s private
++ //! data so that a caller can populate the context structure directly.
++ //! This is done because providing setter interfaces to each field in the
++ //! context structure would be unwieldy and cumbersome. Care must be taken
++ //! to populate the context structure correctly. The context structure
++ //! must only be modified while this object is in the #kStateMutable
++ //! state.
++ MinidumpContextPPC64* context() { return &context_; }
++
++ protected:
++ // MinidumpWritable:
++ bool WriteObject(FileWriterInterface* file_writer) override;
++
++ // MinidumpContextWriter:
++ size_t ContextSize() const override;
++
++ private:
++ MinidumpContextPPC64 context_;
++
++ DISALLOW_COPY_AND_ASSIGN(MinidumpContextPPC64Writer);
++};
++
+ } // namespace crashpad
+
+ #endif // CRASHPAD_MINIDUMP_MINIDUMP_CONTEXT_WRITER_H_
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_context_writer_test.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_context_writer_test.cc
+@@ -213,6 +213,21 @@ TEST(MinidumpContextWriter, MIPS64_FromSnapshot) {
+ context, ExpectMinidumpContextMIPS64, kSeed);
+ }
+
++TEST(MinidumpContextWriter, PPC64_Zeros) {
++ EmptyContextTest<MinidumpContextPPC64Writer, MinidumpContextPPC64>(
++ ExpectMinidumpContextPPC64);
++}
++
++TEST(MinidumpContextWriter, PPC64_FromSnapshot) {
++ constexpr uint32_t kSeed = 64;
++ CPUContextPPC64 context_ppc64;
++ CPUContext context;
++ context.ppc64 = &context_ppc64;
++ InitializeCPUContextPPC64(&context, kSeed);
++ FromSnapshotTest<MinidumpContextPPC64Writer, MinidumpContextPPC64>(
++ context, ExpectMinidumpContextPPC64, kSeed);
++}
++
+ } // namespace
+ } // namespace test
+ } // namespace crashpad
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_misc_info_writer.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_misc_info_writer.cc
+@@ -126,6 +126,8 @@ std::string MinidumpMiscInfoDebugBuildString() {
+ static constexpr char kCPU[] = "mips";
+ #elif defined(ARCH_CPU_MIPS64EL)
+ static constexpr char kCPU[] = "mips64";
++#elif defined(ARCH_CPU_PPC64)
++ static constexpr char kCPU[] = "ppc64";
+ #else
+ #error define kCPU for this CPU
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/capture_memory.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/capture_memory.cc
+@@ -111,6 +111,11 @@ void CaptureMemory::PointedToByContext(const CPUContext& context,
+ for (size_t i = 0; i < base::size(context.mipsel->regs); ++i) {
+ MaybeCaptureMemoryAround(delegate, context.mipsel->regs[i]);
+ }
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ MaybeCaptureMemoryAround(delegate, context.ppc64->nip);
++ for (size_t i = 0; i < base::size(context.ppc64->regs); ++i) {
++ MaybeCaptureMemoryAround(delegate, context.ppc64->regs[i]);
++ }
+ #else
+ #error Port.
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/cpu_architecture.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/cpu_architecture.h
+@@ -43,7 +43,10 @@ enum CPUArchitecture {
+ kCPUArchitectureMIPSEL,
+
+ //! \brief 64-bit MIPSEL.
+- kCPUArchitectureMIPS64EL
++ kCPUArchitectureMIPS64EL,
++
++ //! \brief 64-bit PPC64.
++ kCPUArchitecturePPC64
+ };
+
+ } // namespace crashpad
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/cpu_context.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/cpu_context.cc
+@@ -169,6 +169,8 @@ uint64_t CPUContext::InstructionPointer() const {
+ return arm->pc;
+ case kCPUArchitectureARM64:
+ return arm64->pc;
++ case kCPUArchitecturePPC64:
++ return ppc64->nip;
+ default:
+ NOTREACHED();
+ return ~0ull;
+@@ -185,6 +187,8 @@ uint64_t CPUContext::StackPointer() const {
+ return arm->sp;
+ case kCPUArchitectureARM64:
+ return arm64->sp;
++ case kCPUArchitecturePPC64:
++ return ppc64->regs[1];
+ default:
+ NOTREACHED();
+ return ~0ull;
+@@ -196,6 +200,7 @@ bool CPUContext::Is64Bit() const {
+ case kCPUArchitectureX86_64:
+ case kCPUArchitectureARM64:
+ case kCPUArchitectureMIPS64EL:
++ case kCPUArchitecturePPC64:
+ return true;
+ case kCPUArchitectureX86:
+ case kCPUArchitectureARM:
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/cpu_context.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/cpu_context.h
+@@ -352,6 +352,24 @@ struct CPUContextMIPS64 {
+ uint64_t fir;
+ };
+
++//! \brief A context structure carrying PPC64 CPU state.
++struct CPUContextPPC64 {
++ uint64_t nip;
++ uint64_t msr;
++ uint64_t regs[32];
++ uint64_t ccr;
++ uint64_t xer;
++ uint64_t lnk;
++ uint64_t ctr;
++ double fpregs[32];
++ double fpscr;
++ struct {
++ uint128_struct save_vr[32];
++ uint128_struct save_vscr;
++ uint32_t save_vrsave;
++ } vregs;
++};
++
+ //! \brief A context structure capable of carrying the context of any supported
+ //! CPU architecture.
+ struct CPUContext {
+@@ -382,6 +400,7 @@ struct CPUContext {
+ CPUContextARM64* arm64;
+ CPUContextMIPS* mipsel;
+ CPUContextMIPS64* mips64;
++ CPUContextPPC64* ppc64;
+ };
+ };
+
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/cpu_context_linux.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/cpu_context_linux.h
+@@ -15,6 +15,7 @@
+ #ifndef CRASHPAD_SNAPSHOT_LINUX_CPU_CONTEXT_LINUX_H_
+ #define CRASHPAD_SNAPSHOT_LINUX_CPU_CONTEXT_LINUX_H_
+
++#include <cstring>
+ #include "build/build_config.h"
+ #include "snapshot/cpu_context.h"
+ #include "snapshot/linux/signal_context.h"
+@@ -174,6 +175,78 @@ void InitializeCPUContextMIPS(
+
+ #endif // ARCH_CPU_MIPS_FAMILY || DOXYGEN
+
++#if defined(ARCH_CPU_PPC64_FAMILY) || DOXYGEN
++
++//! \brief Initalizes a CPUContextPPC64 structure from native context
++//! structures on Linux.
++//!
++//! \param[in] thread_context The native thread context.
++//! \param[in] float_context The native float context.
++//! \param[in] vector_context The native vector context.
++//! \param[out] context The CPUContextPPC64 structure to initalize.
++template <typename Traits>
++void InitializeCPUContextPPC64(
++ const ThreadContext::t64_t& thread_context,
++ const FloatContext::f64_t& float_context,
++ const VectorContext::v64_t& vector_context,
++ typename Traits::CPUContext* context) {
++
++ memcpy(context->regs, thread_context.gpr, sizeof(context->regs));
++ context->nip = thread_context.nip;
++ context->msr = thread_context.msr;
++ context->ccr = thread_context.ccr;
++ context->xer = thread_context.xer;
++ context->lnk = thread_context.lnk;
++ context->ctr = thread_context.ctr;
++
++ memcpy(context->fpregs, float_context.fpregs, sizeof(context->fpregs));
++ context->fpscr = float_context.fpscr;
++
++ for (uint8_t i = 0; i < 32; i++) {
++ context->vregs.save_vr[i] = {
++ (((uint64_t)vector_context.vrregs[i][0]) << 32) |
++ vector_context.vrregs[i][1],
++ (((uint64_t)vector_context.vrregs[i][2]) << 32) |
++ vector_context.vrregs[i][3]
++ };
++ }
++ context->vregs.save_vrsave = vector_context.vrsave;
++ context->vregs.save_vscr = {0, (uint64_t)vector_context.vscr.vscr_word};
++}
++
++template <typename Traits>
++void InitializeCPUContextPPC64(
++ const SignalThreadContext64 &thread_context,
++ const SignalFloatContext64 &float_context,
++ const SignalVectorContext64 &vector_context,
++ typename Traits::CPUContext* context) {
++
++ memcpy(context->regs, thread_context.regs, sizeof(context->regs));
++ context->nip = thread_context.nip;
++ context->msr = thread_context.msr;
++ context->ccr = thread_context.ccr;
++ context->xer = thread_context.xer;
++ context->lnk = thread_context.lnk;
++ context->ctr = thread_context.ctr;
++
++ memcpy(context->fpregs, float_context.regs, sizeof(context->fpregs));
++ context->fpscr = float_context.fpscr;
++
++ for (uint8_t i = 0; i < 32; i++) {
++ context->vregs.save_vr[i] = {
++ (((uint64_t)vector_context.vrregs[i][0]) << 32) |
++ vector_context.vrregs[i][1],
++ (((uint64_t)vector_context.vrregs[i][2]) << 32) |
++ vector_context.vrregs[i][3]
++ };
++ }
++ context->vregs.save_vrsave = vector_context.vrsave;
++ context->vregs.save_vscr = {0, (uint64_t)vector_context.vscr.vscr_word};
++}
++
++
++#endif
++
+ } // namespace internal
+ } // namespace crashpad
+
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/debug_rendezvous_test.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/debug_rendezvous_test.cc
+@@ -159,9 +159,11 @@ void TestAgainstTarget(PtraceConnection* connection) {
+ const bool is_vdso_mapping =
+ device == 0 && inode == 0 && mapping_name == "[vdso]";
+ static constexpr char kPrefix[] = "linux-vdso.so.";
++ static constexpr char kPrefix64[] = "linux-vdso64.so.";
+ return is_vdso_mapping ==
+ (module_name.empty() ||
+- module_name.compare(0, strlen(kPrefix), kPrefix) == 0);
++ module_name.compare(0, strlen(kPrefix), kPrefix) == 0 ||
++ module_name.compare(0, strlen(kPrefix64), kPrefix64) == 0);
+ },
+ module_mapping->name,
+ module_mapping->device,
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/exception_snapshot_linux.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/exception_snapshot_linux.cc
+@@ -323,6 +323,69 @@ bool ExceptionSnapshotLinux::ReadContext<ContextTraits64>(
+ reader, context_address, context_.mips64);
+ }
+
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++
++template <typename Traits>
++static bool ReadContext(ProcessReaderLinux* reader,
++ LinuxVMAddress context_address,
++ typename Traits::CPUContext* dest_context) {
++ const ProcessMemory* memory = reader->Memory();
++
++ LinuxVMAddress gp_regs_address = context_address +
++ offsetof(UContext, mcontext) +
++ offsetof(typename Traits::MContext, gp_regs);
++
++ typename Traits::SignalThreadContext thread_context;
++ if (!memory->Read(gp_regs_address, sizeof(thread_context), &thread_context)) {
++ LOG(ERROR) << "Couldn't read gp_regs!";
++ return false;
++ }
++
++ LinuxVMAddress fp_regs_address = context_address +
++ offsetof(UContext, mcontext) +
++ offsetof(typename Traits::MContext, fp_regs);
++
++ typename Traits::SignalFloatContext fp_context;
++ if (!memory->Read(fp_regs_address, sizeof(fp_context), &fp_context)) {
++ LOG(ERROR) << "Couldn't read fp_regs!";
++ return false;
++ }
++
++ LinuxVMAddress v_regs_ptr_address = context_address +
++ offsetof(UContext, mcontext) +
++ offsetof(typename Traits::MContext, vmx_reserve) + 8;
++
++ typename Traits::SignalVectorContext v_context;
++ if (!memory->Read(v_regs_ptr_address, sizeof(v_context), &v_context)) {
++ LOG(ERROR) << "Couldn't read v_regs!";
++ return false;
++ }
++
++ InitializeCPUContextPPC64<ContextTraits64>(thread_context, fp_context,
++ v_context, dest_context);
++
++ return true;
++}
++
++template<>
++bool ExceptionSnapshotLinux::ReadContext<ContextTraits64>(
++ ProcessReaderLinux* reader,
++ LinuxVMAddress context_address) {
++ context_.architecture = kCPUArchitecturePPC64;
++ context_.ppc64 = &context_union_.ppc64;
++
++ return internal::ReadContext<ContextTraits64>(
++ reader, context_address, context_.ppc64);
++}
++
++template<>
++bool ExceptionSnapshotLinux::ReadContext<ContextTraits32>(
++ ProcessReaderLinux* reader,
++ LinuxVMAddress context_address) {
++ // PPC64 is 64-bit
++ return false;
++}
++
+ #endif // ARCH_CPU_X86_FAMILY
+
+ bool ExceptionSnapshotLinux::Initialize(ProcessReaderLinux* process_reader,
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/exception_snapshot_linux.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/exception_snapshot_linux.h
+@@ -84,6 +84,8 @@ class ExceptionSnapshotLinux final : public ExceptionSnapshot {
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ CPUContextMIPS mipsel;
+ CPUContextMIPS64 mips64;
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ CPUContextPPC64 ppc64;
+ #endif
+ } context_union_;
+ CPUContext context_;
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/exception_snapshot_linux_test.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/exception_snapshot_linux_test.cc
+@@ -296,7 +296,28 @@ void ExpectContext(const CPUContext& actual, const NativeCPUContext& expected) {
+ 0);
+ #undef CPU_ARCH_NAME
+ }
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++using NativeCPUContext = ucontext_t;
++
++void InitializeContext(NativeCPUContext* context) {
++ for (size_t reg = 0; reg < 32; ++reg) {
++ context->uc_mcontext.gp_regs[reg] = reg;
++ }
++
++ memset(&context->uc_mcontext.fp_regs, 44,
++ sizeof(context->uc_mcontext.fp_regs));
++}
+
++void ExpectContext(const CPUContext& actual, const NativeCPUContext& expected) {
++ EXPECT_EQ(actual.architecture, kCPUArchitecturePPC64);
++
++ for (size_t reg = 0; reg < 32; ++reg) {
++ EXPECT_EQ(actual.ppc64->regs[reg], expected.uc_mcontext.gp_regs[reg]);
++ }
++
++ EXPECT_EQ(memcmp(actual.ppc64->fpregs, expected.uc_mcontext.fp_regs,
++ sizeof(actual.ppc64->fpregs)), 0);
++}
+ #else
+ #error Port.
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/process_reader_linux.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/process_reader_linux.cc
+@@ -108,6 +108,8 @@ void ProcessReaderLinux::Thread::InitializeStack(ProcessReaderLinux* reader) {
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ stack_pointer = reader->Is64Bit() ? thread_info.thread_context.t64.regs[29]
+ : thread_info.thread_context.t32.regs[29];
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ stack_pointer = thread_info.thread_context.t64.gpr[1];
+ #else
+ #error Port.
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/process_reader_linux_test.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/process_reader_linux_test.cc
+@@ -591,6 +591,8 @@ bool WriteTestModule(const base::FilePath& module_path) {
+ module.ehdr.e_machine = EM_AARCH64;
+ #elif defined(ARCH_CPU_MIPSEL) || defined(ARCH_CPU_MIPS64EL)
+ module.ehdr.e_machine = EM_MIPS;
++#elif defined(ARCH_CPU_PPC64)
++ module.ehdr.e_machine = EM_PPC64;
+ #endif
+
+ module.ehdr.e_version = EV_CURRENT;
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/signal_context.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/signal_context.h
+@@ -422,6 +422,89 @@ static_assert(offsetof(UContext<ContextTraits64>, mcontext.fpregs) ==
+ "context offset mismatch");
+ #endif
+
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++
++struct SignalThreadContext64 {
++ uint64_t regs[32];
++ uint64_t nip;
++ uint64_t msr;
++ uint64_t orig_r3;
++ uint64_t ctr;
++ uint64_t lnk;
++ uint64_t xer;
++ uint64_t ccr;
++ uint64_t softe;
++ uint64_t trap;
++ uint64_t dar;
++ uint64_t dsisr;
++ uint64_t result;
++ uint64_t dscr;
++ uint64_t fpr0[3];
++};
++
++struct SignalFloatContext64 {
++ double regs[32];
++ double fpscr;
++};
++
++struct SignalVectorContext64 {
++ int32_t vrregs[32][4];
++ struct {
++ int32_t __pad[3];
++ int32_t vscr_word;
++ } vscr;
++ int32_t vrsave;
++ int32_t __pad[3];
++} __attribute__((__aligned__(16)));
++
++
++#pragma pack(pop)
++struct MContext64 {
++ uint64_t reserved[4];
++ int32_t signal;
++ int32_t __pad0;
++ uint64_t handler;
++ uint64_t oldmask;
++ uint64_t pt_regs_ptr;
++ SignalThreadContext64 gp_regs;
++ SignalFloatContext64 fp_regs;
++ SignalVectorContext64 *v_regs;
++ int64_t vmx_reserve[69];
++};
++
++struct ContextTraits64 : public Traits64 {
++ using MContext = MContext64;
++ using SignalThreadContext = SignalThreadContext64;
++ using SignalFloatContext = SignalFloatContext64;
++ using SignalVectorContext = SignalVectorContext64;
++ using CPUContext = CPUContextPPC64;
++};
++
++struct ContextTraits32 : public Traits32 {};
++
++struct UContext {
++ uint64_t flags;
++ uint64_t link;
++ SignalStack<ContextTraits64> stack;
++ Sigset<ContextTraits64> sigmask;
++ MContext64 mcontext;
++};
++#pragma pack(push, 1)
++
++static_assert(sizeof(UContext) == sizeof(ucontext_t),
++ "ucontext_t size mismatch");
++static_assert(sizeof(MContext64) == sizeof(mcontext_t),
++ "mcontext_t size mismatch");
++static_assert(sizeof(SignalThreadContext64) == sizeof(gregset_t),
++ "gregset_t size mismatch");
++static_assert(sizeof(SignalFloatContext64) == sizeof(fpregset_t),
++ "fpregset_t size mismatch");
++static_assert(sizeof(SignalVectorContext64) == sizeof(_libc_vrstate),
++ "vrstate size mismatch");
++static_assert(offsetof(UContext, mcontext) ==
++ offsetof(ucontext_t, uc_mcontext), "mcontext offset mismatch");
++static_assert(offsetof(MContext64, gp_regs) ==
++ offsetof(mcontext_t, gp_regs), "gp_regs offset mismatch");
+ #else
+ #error Port.
+ #endif // ARCH_CPU_X86_FAMILY
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/system_snapshot_linux.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/system_snapshot_linux.cc
+@@ -203,6 +203,8 @@ CPUArchitecture SystemSnapshotLinux::GetCPUArchitecture() const {
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ return process_reader_->Is64Bit() ? kCPUArchitectureMIPS64EL
+ : kCPUArchitectureMIPSEL;
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ return kCPUArchitecturePPC64;
+ #else
+ #error port to your architecture
+ #endif
+@@ -218,6 +220,9 @@ uint32_t SystemSnapshotLinux::CPURevision() const {
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ // Not implementable on MIPS
+ return 0;
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ // Not yet implemented on PPC64
++ return 0;
+ #else
+ #error port to your architecture
+ #endif
+@@ -238,6 +243,9 @@ std::string SystemSnapshotLinux::CPUVendor() const {
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ // Not implementable on MIPS
+ return std::string();
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ // Not yet implemented on PPC64
++ return std::string();
+ #else
+ #error port to your architecture
+ #endif
+@@ -371,6 +379,9 @@ bool SystemSnapshotLinux::NXEnabled() const {
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ // Not implementable on MIPS
+ return false;
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ // Not yet implemented on PPC64
++ return false;
+ #else
+ #error Port.
+ #endif // ARCH_CPU_X86_FAMILY
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/thread_snapshot_linux.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/thread_snapshot_linux.cc
+@@ -186,6 +186,14 @@ bool ThreadSnapshotLinux::Initialize(ProcessReaderLinux* process_reader,
+ thread.thread_info.float_context.f32,
+ context_.mipsel);
+ }
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ context_.architecture = kCPUArchitecturePPC64;
++ context_.ppc64 = &context_union_.ppc64;
++ InitializeCPUContextPPC64<ContextTraits64>(
++ thread.thread_info.thread_context.t64,
++ thread.thread_info.float_context.f64,
++ thread.thread_info.vector_context.v64,
++ context_.ppc64);
+ #else
+ #error Port.
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/thread_snapshot_linux.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/snapshot/linux/thread_snapshot_linux.h
+@@ -68,6 +68,8 @@ class ThreadSnapshotLinux final : public ThreadSnapshot {
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ CPUContextMIPS mipsel;
+ CPUContextMIPS64 mips64;
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ CPUContextPPC64 ppc64;
+ #else
+ #error Port.
+ #endif // ARCH_CPU_X86_FAMILY
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/linux/auxiliary_vector.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/linux/auxiliary_vector.cc
+@@ -56,6 +56,11 @@ bool AuxiliaryVector::Read(PtraceConnection* connection) {
+ if (type == AT_IGNORE) {
+ continue;
+ }
++#if defined(ARCH_CPU_PPC64_FAMILY)
++ if (type == AT_IGNOREPPC) {
++ continue;
++ }
++#endif
+ if (!MapInsertOrReplace(&values_, type, value, nullptr)) {
+ LOG(ERROR) << "duplicate auxv entry";
+ return false;
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/linux/ptrace_broker.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/linux/ptrace_broker.cc
+@@ -93,8 +93,8 @@ int PtraceBroker::Run() {
+ }
+
+ bool PtraceBroker::AllocateAttachments() {
+- constexpr size_t page_size = 4096;
+- constexpr size_t alloc_size =
++ static size_t page_size = getpagesize();
++ size_t alloc_size =
+ (sizeof(ScopedPtraceAttach) + page_size - 1) & ~(page_size - 1);
+ void* alloc = sbrk(alloc_size);
+ if (reinterpret_cast<intptr_t>(alloc) == -1) {
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/linux/ptracer.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/linux/ptracer.cc
+@@ -394,6 +394,64 @@ bool GetThreadArea64(pid_t tid,
+ return true;
+ }
+
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++// PPC64 has had HAVE_ARCH_TRACEHOOK set since 2.6.27 (even before x86 had it).
++// That means we can simply use PTRACE_GETREGESET.
++
++template <typename Destination>
++bool GetRegisterSet(pid_t tid, int set, Destination* dest, bool can_log) {
++ iovec iov;
++ iov.iov_base = reinterpret_cast<void*>(dest);
++ iov.iov_len = sizeof(*dest);
++ if (ptrace(PTRACE_GETREGSET, tid, reinterpret_cast<void*>(set), &iov) != 0) {
++ PLOG_IF(ERROR, can_log) << "ptrace";
++ return false;
++ }
++ if (iov.iov_len != sizeof(*dest)) {
++ LOG_IF(ERROR, can_log) << "Unexpected registers size";
++ return false;
++ }
++ return true;
++}
++
++bool GetVectorRegisters64(pid_t tid,
++ VectorContext* context,
++ bool can_log) {
++ return GetRegisterSet(tid, NT_PPC_VMX, &context->v64, can_log);
++}
++
++bool GetFloatingPointRegisters64(pid_t tid,
++ FloatContext* context,
++ bool can_log) {
++ return GetRegisterSet(tid, NT_PRFPREG, &context->f64, can_log);
++}
++
++bool GetThreadArea64(pid_t tid,
++ const ThreadContext& context,
++ LinuxVMAddress* address,
++ bool can_log) {
++ // PPC64 doesn't have PTRACE_GET_THREAD_AREA since the thread pointer
++ // is stored in GPR 13.
++ ThreadContext::t64_t tc;
++ if (!GetRegisterSet(tid, NT_PRSTATUS, &tc, can_log)) {
++ LOG_IF(ERROR, can_log) << "Unable to get thread pointer!";
++ return false;
++ }
++
++ *address = tc.gpr[13];
++
++ return true;
++}
++
++// Stubs for 32-bit functions not applicable on PPC64
++bool GetFloatingPointRegisters32(pid_t tid,
++ FloatContext* context,
++ bool can_log) { return false; }
++bool GetThreadArea32(pid_t tid,
++ const ThreadContext &context,
++ LinuxVMAddress *address,
++ bool can_log) { return false; }
++
+ #else
+ #error Port.
+ #endif // ARCH_CPU_X86_FAMILY
+@@ -486,6 +544,9 @@ bool Ptracer::GetThreadInfo(pid_t tid, ThreadInfo* info) {
+ if (is_64_bit_) {
+ return GetGeneralPurposeRegisters64(tid, &info->thread_context, can_log_) &&
+ GetFloatingPointRegisters64(tid, &info->float_context, can_log_) &&
++#if defined(ARCH_CPU_PPC64_FAMILY)
++ GetVectorRegisters64(tid, &info->vector_context, can_log_) &&
++#endif
+ GetThreadArea64(tid,
+ info->thread_context,
+ &info->thread_specific_data_address,
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/linux/thread_info.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/linux/thread_info.h
+@@ -28,6 +28,10 @@
+ #include <android/api-level.h>
+ #endif
+
++#if defined(ARCH_CPU_PPC64_FAMILY)
++#include <sys/ucontext.h>
++#endif
++
+ namespace crashpad {
+
+ //! \brief The set of general purpose registers for an architecture family.
+@@ -79,6 +83,8 @@ union ThreadContext {
+ uint32_t cp0_status;
+ uint32_t cp0_cause;
+ uint32_t padding1_;
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ // PPC64 is 64-bit
+ #else
+ #error Port.
+ #endif // ARCH_CPU_X86_FAMILY
+@@ -132,6 +138,21 @@ union ThreadContext {
+ uint64_t cp0_badvaddr;
+ uint64_t cp0_status;
+ uint64_t cp0_cause;
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ // Reflects struct pt_regs in asm/ptrace.h.
++ uint64_t gpr[32];
++ uint64_t nip;
++ uint64_t msr;
++ uint64_t orig_gpr3;
++ uint64_t ctr;
++ uint64_t lnk;
++ uint64_t xer;
++ uint64_t ccr;
++ uint64_t softe;
++ uint64_t trap;
++ uint64_t dar;
++ uint64_t dsisr;
++ uint64_t result;
+ #else
+ #error Port.
+ #endif // ARCH_CPU_X86_FAMILY
+@@ -143,6 +164,8 @@ union ThreadContext {
+ using NativeThreadContext = user_regs;
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ // No appropriate NativeThreadsContext type available for MIPS
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ using NativeThreadContext = struct pt_regs;
+ #else
+ #error Port.
+ #endif // ARCH_CPU_X86_FAMILY || ARCH_CPU_ARM64
+@@ -218,6 +241,9 @@ union FloatContext {
+ } fpregs[32];
+ uint32_t fpcsr;
+ uint32_t fpu_id;
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ // Crashpad's PPC support is 64-bit only, so this
++ // 32bit-only struct is declared as empty.
+ #else
+ #error Port.
+ #endif // ARCH_CPU_X86_FAMILY
+@@ -252,6 +278,10 @@ union FloatContext {
+ double fpregs[32];
+ uint32_t fpcsr;
+ uint32_t fpu_id;
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ // Reflects fpregset_t in sys/ucontext.h
++ double fpregs[32];
++ double fpscr;
+ #else
+ #error Port.
+ #endif // ARCH_CPU_X86_FAMILY
+@@ -280,6 +310,8 @@ union FloatContext {
+ static_assert(sizeof(f64) == sizeof(user_fpsimd_struct), "Size mismatch");
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ // No appropriate floating point context native type for available MIPS.
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ static_assert(sizeof(f64) == sizeof(fpregset_t), "Size mismatch");
+ #else
+ #error Port.
+ #endif // ARCH_CPU_X86
+@@ -287,6 +319,26 @@ union FloatContext {
+ static_assert(std::is_standard_layout<FloatContext>::value,
+ "Not standard layout");
+
++//! \brief The vector registers used for an architecture family
++union VectorContext {
++ struct v32_t {} v32;
++#if defined(ARCH_CPU_PPC64_FAMILY)
++ __attribute__((__aligned__(16))) // Vector context must be doubleword aligned.
++#endif
++ struct v64_t {
++#if defined(ARCH_CPU_PPC64_FAMILY)
++ // Reflects vrregset_t in sys/ucontext.h
++ uint32_t vrregs[32][4];
++ struct {
++ uint32_t __pad[3];
++ uint32_t vscr_word;
++ } vscr;
++ uint32_t vrsave;
++ uint32_t __pad[3];
++#endif
++ } v64;
++};
++
+ //! \brief A collection of `ptrace`-able information about a thread.
+ struct ThreadInfo {
+ ThreadInfo();
+@@ -298,6 +350,9 @@ struct ThreadInfo {
+ //! \brief The floating point registers for the thread.
+ FloatContext float_context;
+
++ //! \brief (Optional) The vector registers used for the thread.
++ VectorContext vector_context;
++
+ //! \brief The thread-local storage address for the thread.
+ LinuxVMAddress thread_specific_data_address;
+ };
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/misc/capture_context.h
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/misc/capture_context.h
+@@ -66,6 +66,7 @@ using NativeCPUContext = ucontext_t;
+ //! macOS/Linux/Fuchsia | x86_64 | `%%rdi`
+ //! Linux | ARM/ARM64 | `r0`/`x0`
+ //! Linux | MIPS/MIPS64 | `$a0`
++//! Linux | PPC64 | `r3`
+ //!
+ //! Additionally, the value `LR` on ARM/ARM64 will be the return address of
+ //! this function.
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/misc/capture_context_linux.S
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/misc/capture_context_linux.S
+@@ -28,7 +28,7 @@
+ .globl CAPTURECONTEXT_SYMBOL2
+ #if defined(__i386__) || defined(__x86_64__)
+ .balign 16, 0x90
+-#elif defined(__arm__) || defined(__aarch64__) || defined(__mips__)
++#elif defined(__arm__) || defined(__aarch64__) || defined(__mips__) || defined(__powerpc64__)
+ .balign 4, 0x0
+ #endif
+
+@@ -419,4 +419,214 @@ CAPTURECONTEXT_SYMBOL2:
+ jr $ra
+
+ .set at
++#elif defined(__powerpc64__)
++ // Store r0-r31
++ std 0, 0xe8(3) // context->uc_mcontext.gp_regs[0]
++ std 1, 0xf0(3) // context->uc_mcontext.gp_regs[1]
++ std 2, 0xf8(3) // context->uc_mcontext.gp_regs[2]
++ // note that r3's original value was lost
++ std 3, 0x100(3) // context->uc_mcontext.gp_regs[3]
++ std 4, 0x108(3) // context->uc_mcontext.gp_regs[4]
++ std 5, 0x110(3) // context->uc_mcontext.gp_regs[5]
++ std 6, 0x118(3) // context->uc_mcontext.gp_regs[6]
++ std 7, 0x120(3) // context->uc_mcontext.gp_regs[7]
++ std 8, 0x128(3) // context->uc_mcontext.gp_regs[8]
++ std 9, 0x130(3) // context->uc_mcontext.gp_regs[9]
++ std 10, 0x138(3) // context->uc_mcontext.gp_regs[10]
++ std 11, 0x140(3) // context->uc_mcontext.gp_regs[11]
++ std 12, 0x148(3) // context->uc_mcontext.gp_regs[12]
++ std 13, 0x150(3) // context->uc_mcontext.gp_regs[13]
++ std 14, 0x158(3) // context->uc_mcontext.gp_regs[14]
++ std 15, 0x160(3) // context->uc_mcontext.gp_regs[15]
++ std 16, 0x168(3) // context->uc_mcontext.gp_regs[16]
++ std 17, 0x170(3) // context->uc_mcontext.gp_regs[17]
++ std 18, 0x178(3) // context->uc_mcontext.gp_regs[18]
++ std 19, 0x180(3) // context->uc_mcontext.gp_regs[19]
++ std 20, 0x188(3) // context->uc_mcontext.gp_regs[20]
++ std 21, 0x190(3) // context->uc_mcontext.gp_regs[21]
++ std 22, 0x198(3) // context->uc_mcontext.gp_regs[22]
++ std 23, 0x1a0(3) // context->uc_mcontext.gp_regs[23]
++ std 24, 0x1a8(3) // context->uc_mcontext.gp_regs[24]
++ std 25, 0x1b0(3) // context->uc_mcontext.gp_regs[25]
++ std 26, 0x1b8(3) // context->uc_mcontext.gp_regs[26]
++ std 27, 0x1c0(3) // context->uc_mcontext.gp_regs[27]
++ std 28, 0x1c8(3) // context->uc_mcontext.gp_regs[28]
++ std 29, 0x1d0(3) // context->uc_mcontext.gp_regs[29]
++ std 30, 0x1d8(3) // context->uc_mcontext.gp_regs[30]
++ std 31, 0x1e0(3) // context->uc_mcontext.gp_regs[31]
++
++ // For NIP, we can use the value in the link register
++ mflr 0
++ std 0, 0x1e8(3) // context->uc_mcontext.gp_regs[PT_NIP]
++
++ // CTR
++ mfctr 0
++ std 0, 0x200(3) // context->uc_mcontext.gp_regs[PT_CTR]
++
++ // For LNK, we'll use the caller's LR save area (2 stack frames up).
++ // r4 can be used as a scratch register since it has already been saved.
++ ld 4, 0(1)
++ ld 4, 16(4)
++ std 4, 0x208(3) // context->uc_mcontext.gp_regs[PT_LNK]
++
++ // XER
++ mfxer 0
++ std 0, 0x210(3) // context->uc_mcontext.gp_regs[PT_XER]
++
++ // CCR
++ mfcr 0
++ std 0, 0x218(3) // context->uc_mcontext.gp_regs[PT_CCR]
++
++ // MSR, orig_r3, MQ, TRAP, DAR, DSISR, RESULT, DSCR,
++ // not used or not relevant, zero them out.
++ li 4, 0
++ std 4, 0x1f0(3) // context->uc_mcontext.gp_regs[PT_MSR]
++ std 4, 0x1f8(3) // context->uc_mcontext.gp_regs[PT_ORIG_R3]
++ std 4, 0x220(3) // context->uc_mcontext.gp_regs[PT_MQ]
++ std 4, 0x228(3) // context->uc_mcontext.gp_regs[PT_TRAP]
++ std 4, 0x230(3) // context->uc_mcontext.gp_regs[PT_DAR]
++ std 4, 0x238(3) // context->uc_mcontext.gp_regs[PT_DSISR]
++ std 4, 0x240(3) // context->uc_mcontext.gp_regs[PT_RESULT]
++ std 4, 0x248(3) // context->uc_mcontext.gp_regs[PT_DSCR]
++
++ // Update context->uc_mcontext.regs to point to gp_regs
++ addi 0, 3, 0xe8
++ std 0, 0xe0(3)
++
++ // Save floating point registers 0-31
++ stfd 0, 0x268(3) // context->uc_mcontext.fp_regs[0]
++ stfd 1, 0x270(3) // context->uc_mcontext.fp_regs[1]
++ stfd 2, 0x278(3) // context->uc_mcontext.fp_regs[2]
++ stfd 3, 0x280(3) // context->uc_mcontext.fp_regs[3]
++ stfd 4, 0x288(3) // context->uc_mcontext.fp_regs[4]
++ stfd 5, 0x290(3) // context->uc_mcontext.fp_regs[5]
++ stfd 6, 0x298(3) // context->uc_mcontext.fp_regs[6]
++ stfd 7, 0x2a0(3) // context->uc_mcontext.fp_regs[7]
++ stfd 8, 0x2a8(3) // context->uc_mcontext.fp_regs[8]
++ stfd 9, 0x2b0(3) // context->uc_mcontext.fp_regs[9]
++ stfd 10, 0x2b8(3) // context->uc_mcontext.fp_regs[10]
++ stfd 11, 0x2c0(3) // context->uc_mcontext.fp_regs[11]
++ stfd 12, 0x2c8(3) // context->uc_mcontext.fp_regs[12]
++ stfd 13, 0x2d0(3) // context->uc_mcontext.fp_regs[13]
++ stfd 14, 0x2d8(3) // context->uc_mcontext.fp_regs[14]
++ stfd 15, 0x2e0(3) // context->uc_mcontext.fp_regs[15]
++ stfd 16, 0x2e8(3) // context->uc_mcontext.fp_regs[16]
++ stfd 17, 0x2f0(3) // context->uc_mcontext.fp_regs[17]
++ stfd 18, 0x2f8(3) // context->uc_mcontext.fp_regs[18]
++ stfd 19, 0x300(3) // context->uc_mcontext.fp_regs[19]
++ stfd 20, 0x308(3) // context->uc_mcontext.fp_regs[20]
++ stfd 21, 0x310(3) // context->uc_mcontext.fp_regs[21]
++ stfd 22, 0x318(3) // context->uc_mcontext.fp_regs[22]
++ stfd 23, 0x320(3) // context->uc_mcontext.fp_regs[23]
++ stfd 24, 0x328(3) // context->uc_mcontext.fp_regs[24]
++ stfd 25, 0x330(3) // context->uc_mcontext.fp_regs[25]
++ stfd 26, 0x338(3) // context->uc_mcontext.fp_regs[26]
++ stfd 27, 0x340(3) // context->uc_mcontext.fp_regs[27]
++ stfd 28, 0x348(3) // context->uc_mcontext.fp_regs[28]
++ stfd 29, 0x350(3) // context->uc_mcontext.fp_regs[29]
++ stfd 30, 0x358(3) // context->uc_mcontext.fp_regs[30]
++ stfd 31, 0x360(3) // context->uc_mcontext.fp_regs[31]
++
++ // FPSCR
++ mffs 0
++ stfd 0, 0x368(3) // context->uc_mcontext.fp_regs[32]
++
++ // Save VMX Vector registers
++ // Update r4 to contain the base address of vmx_reserve
++ addi 4, 3, 0x378
++ // Ensure that it is quadword aligned
++ andi. 5, 4, 0xF
++ beq 1f // No alignment is necessary
++ // Address is doubleword aligned and not quadword aligned, add 8
++ addi 4, 4, 8
++
++1:
++ // Store VMX registers 0-31
++ // r4 will contain the base address
++ // r5 will contain the index
++ li 5, 0
++ stvx 0, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 0]
++ addi 5, 5, 16
++ stvx 1, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 1]
++ addi 5, 5, 16
++ stvx 2, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 2]
++ addi 5, 5, 16
++ stvx 3, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 3]
++ addi 5, 5, 16
++ stvx 4, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 4]
++ addi 5, 5, 16
++ stvx 5, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 5]
++ addi 5, 5, 16
++ stvx 6, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 6]
++ addi 5, 5, 16
++ stvx 7, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 7]
++ addi 5, 5, 16
++ stvx 8, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 8]
++ addi 5, 5, 16
++ stvx 9, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 9]
++ addi 5, 5, 16
++ stvx 10, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 10]
++ addi 5, 5, 16
++ stvx 11, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 11]
++ addi 5, 5, 16
++ stvx 12, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 12]
++ addi 5, 5, 16
++ stvx 13, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 13]
++ addi 5, 5, 16
++ stvx 14, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 14]
++ addi 5, 5, 16
++ stvx 15, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 15]
++ addi 5, 5, 16
++ stvx 16, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 16]
++ addi 5, 5, 16
++ stvx 17, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 17]
++ addi 5, 5, 16
++ stvx 18, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 18]
++ addi 5, 5, 16
++ stvx 19, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 19]
++ addi 5, 5, 16
++ stvx 20, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 20]
++ addi 5, 5, 16
++ stvx 21, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 21]
++ addi 5, 5, 16
++ stvx 22, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 22]
++ addi 5, 5, 16
++ stvx 23, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 23]
++ addi 5, 5, 16
++ stvx 24, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 24]
++ addi 5, 5, 16
++ stvx 25, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 25]
++ addi 5, 5, 16
++ stvx 26, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 26]
++ addi 5, 5, 16
++ stvx 27, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 27]
++ addi 5, 5, 16
++ stvx 28, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 28]
++ addi 5, 5, 16
++ stvx 29, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 29]
++ addi 5, 5, 16
++ stvx 30, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 30]
++ addi 5, 5, 16
++ stvx 31, 4, 5 // context->uc_mcontext.vmx_reserve[(align) + 31]
++ addi 5, 5, 16
++
++ // VSCR
++ mfvscr 0
++ stvx 0, 4, 5
++ addi 5, 5, 16
++
++ // VRSAVE
++ mfvrsave 0
++ stwx 0, 4, 5
++
++ // Update context->uc_mcontext.v_regs to point to vmx_reserve + alignment.
++ std 4, 0x370(3)
++
++ // Zero out all unused fields
++ li 4, 0
++ std 4, 0xc8(3) // context->uc_mcontext.signal
++ std 4, 0xd0(3) // context->uc_mcontext.handler
++ std 4, 0xd8(3) // context->uc_mcontext.oldmask
++
++ blr
+ #endif // __i386__
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/misc/capture_context_test.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/misc/capture_context_test.cc
+@@ -49,7 +49,8 @@ void TestCaptureContext() {
+ // reference program counter.
+ uintptr_t pc = ProgramCounterFromContext(context_1);
+
+-#if !defined(ADDRESS_SANITIZER) && !defined(ARCH_CPU_MIPS_FAMILY)
++#if !defined(ADDRESS_SANITIZER) && !defined(ARCH_CPU_MIPS_FAMILY) && \
++ !defined(ARCH_CPU_PPC64_FAMILY)
+ // AddressSanitizer can cause enough code bloat that the “nearby” check would
+ // likely fail.
+ const uintptr_t kReferencePC =
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/misc/capture_context_test_util_linux.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/misc/capture_context_test_util_linux.cc
+@@ -36,6 +36,8 @@ void SanityCheckContext(const NativeCPUContext& context) {
+ EXPECT_EQ(context.uc_mcontext.regs[0], FromPointerCast<uintptr_t>(&context));
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ EXPECT_EQ(context.uc_mcontext.gregs[4], FromPointerCast<uintptr_t>(&context));
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ EXPECT_EQ(context.uc_mcontext.gp_regs[3], FromPointerCast<uintptr_t>(&context));
+ #endif
+ }
+
+@@ -50,6 +52,8 @@ uintptr_t ProgramCounterFromContext(const NativeCPUContext& context) {
+ return context.uc_mcontext.pc;
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ return context.uc_mcontext.pc;
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ return context.uc_mcontext.gp_regs[PT_NIP];
+ #endif
+ }
+
+@@ -64,6 +68,8 @@ uintptr_t StackPointerFromContext(const NativeCPUContext& context) {
+ return context.uc_mcontext.sp;
+ #elif defined(ARCH_CPU_MIPS_FAMILY)
+ return context.uc_mcontext.gregs[29];
++#elif defined(ARCH_CPU_PPC64_FAMILY)
++ return context.uc_mcontext.gp_regs[1];
+ #endif
+ }
+
+--- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/posix/signals_test.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/util/posix/signals_test.cc
+@@ -46,12 +46,12 @@ bool CanCauseSignal(int sig) {
+ return sig == SIGABRT ||
+ sig == SIGALRM ||
+ sig == SIGBUS ||
+-#if !defined(ARCH_CPU_ARM64)
++#if !defined(ARCH_CPU_ARM64) && !defined(ARCH_CPU_PPC64)
+ sig == SIGFPE ||
+-#endif // !defined(ARCH_CPU_ARM64)
++#endif // !defined(ARCH_CPU_ARM64) && !defined(ARCH_CPU_PPC64)
+ #if defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARMEL)
+ sig == SIGILL ||
+-#endif // defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARMEL
++#endif // defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARMEL)
+ sig == SIGPIPE ||
+ sig == SIGSEGV ||
+ #if defined(OS_MACOSX)
+@@ -117,9 +117,11 @@ void CauseSignal(int sig) {
+ break;
+ }
+
+-#if !defined(ARCH_CPU_ARM64)
++#if !defined(ARCH_CPU_ARM64) && !defined(ARCH_CPU_PPC64)
+ // ARM64 has hardware integer division instructions that don’t generate a
+ // trap for divide-by-zero, so this doesn’t produce SIGFPE.
++ //
++ // PPC64 fixed-point division by zero also doesn't produce a SIGFPE.
+ case SIGFPE: {
+ // Optimization makes this tricky, so get zero from a system call likely
+ // to succeed, and try to do something with the result.
+@@ -137,7 +139,7 @@ void CauseSignal(int sig) {
+ fstat(quotient, &stat_buf);
+ break;
+ }
+-#endif // ARCH_CPU_ARM64
++#endif // !defined(ARCH_CPU_ARM64) && !defined(ARCH_CPU_PPC64)
+
+ #if defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARMEL)
+ case SIGILL: {
+--- qtwebengine/src/3rdparty/chromium/third_party/libpng/BUILD.gn
++++ qtwebengine/src/3rdparty/chromium/third_party/libpng/BUILD.gn
+@@ -93,6 +93,11 @@ source_set("libpng_sources") {
+ "mips/filter_msa_intrinsics.c",
+ "mips/mips_init.c",
+ ]
++ } else if (current_cpu == "ppc64") {
++ sources += [
++ "powerpc/filter_vsx_intrinsics.c",
++ "powerpc/powerpc_init.c",
++ ]
+ }
+
+ configs -= [ "//build/config/compiler:chromium_code" ]
+new file mode 100644
+--- /dev/null
++++ qtwebengine/src/3rdparty/chromium/third_party/libpng/powerpc/filter_vsx_intrinsics.c
+@@ -0,0 +1,767 @@
++/* filter_vsx_intrinsics.c - PowerPC optimised filter functions
++ *
++ * Copyright (c) 2017 Glenn Randers-Pehrson
++ * Written by Vadim Barkov, 2017.
++ * Last changed in libpng 1.6.29 [March 16, 2017]
++ *
++ * This code is released under the libpng license.
++ * For conditions of distribution and use, see the disclaimer
++ * and license in png.h
++ */
++#include <stdio.h>
++#include <stdint.h>
++#include "../pngpriv.h"
++
++#ifdef PNG_READ_SUPPORTED
++
++/* This code requires -maltivec and -mvsx on the command line: */
++#if PNG_POWERPC_VSX_IMPLEMENTATION == 1 /* intrinsics code from pngpriv.h */
++
++#include <altivec.h>
++
++#if PNG_POWERPC_VSX_OPT > 0
++
++#ifndef __VSX__
++# error "This code requires VSX support (POWER7 and later). Please provide -mvsx compiler flag."
++#endif
++
++#define vec_ld_unaligned(vec,data) vec = vec_vsx_ld(0,data)
++#define vec_st_unaligned(vec,data) vec_vsx_st(vec,0,data)
++
++
++/* Functions in this file look at most 3 pixels (a,b,c) to predict the 4th (d).
++ * They're positioned like this:
++ * prev: c b
++ * row: a d
++ * The Sub filter predicts d=a, Avg d=(a+b)/2, and Paeth predicts d to be
++ * whichever of a, b, or c is closest to p=a+b-c.
++ * ( this is taken from ../intel/filter_sse2_intrinsics.c )
++ */
++
++#define vsx_declare_common_vars(row_info,row,prev_row,offset) \
++ png_byte i;\
++ png_bytep rp = row + offset;\
++ png_const_bytep pp = prev_row;\
++ png_size_t unaligned_top = 16 - (((png_size_t)rp % 16));\
++ png_size_t istop;\
++ if(unaligned_top == 16)\
++ unaligned_top = 0;\
++ istop = row_info->rowbytes;\
++ if((unaligned_top < istop))\
++ istop -= unaligned_top;\
++ else{\
++ unaligned_top = istop;\
++ istop = 0;\
++ }
++
++void png_read_filter_row_up_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ vector unsigned char rp_vec;
++ vector unsigned char pp_vec;
++ vsx_declare_common_vars(row_info,row,prev_row,0)
++
++ /* Altivec operations require 16-byte aligned data
++ * but input can be unaligned. So we calculate
++ * unaligned part as usual.
++ */
++ for (i = 0; i < unaligned_top; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
++ rp++;
++ }
++
++ /* Using SIMD while we can */
++ while( istop >= 16 )
++ {
++ rp_vec = vec_ld(0,rp);
++ vec_ld_unaligned(pp_vec,pp);
++
++ rp_vec = vec_add(rp_vec,pp_vec);
++
++ vec_st(rp_vec,0,rp);
++
++ pp += 16;
++ rp += 16;
++ istop -= 16;
++ }
++
++ if(istop > 0)
++ {
++ /* If byte count of row is not divisible by 16
++ * we will process remaining part as usual
++ */
++ for (i = 0; i < istop; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
++ rp++;
++ }
++}
++
++}
++
++static const vector unsigned char VSX_LEFTSHIFTED1_4 = {16,16,16,16, 0, 1, 2, 3,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_LEFTSHIFTED2_4 = {16,16,16,16,16,16,16,16, 4, 5, 6, 7,16,16,16,16};
++static const vector unsigned char VSX_LEFTSHIFTED3_4 = {16,16,16,16,16,16,16,16,16,16,16,16, 8, 9,10,11};
++
++static const vector unsigned char VSX_LEFTSHIFTED1_3 = {16,16,16, 0, 1, 2,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_LEFTSHIFTED2_3 = {16,16,16,16,16,16, 3, 4, 5,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_LEFTSHIFTED3_3 = {16,16,16,16,16,16,16,16,16, 6, 7, 8,16,16,16,16};
++static const vector unsigned char VSX_LEFTSHIFTED4_3 = {16,16,16,16,16,16,16,16,16,16,16,16, 9,10,11,16};
++
++static const vector unsigned char VSX_NOT_SHIFTED1_4 = {16,16,16,16, 4, 5, 6, 7,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_NOT_SHIFTED2_4 = {16,16,16,16,16,16,16,16, 8, 9,10,11,16,16,16,16};
++static const vector unsigned char VSX_NOT_SHIFTED3_4 = {16,16,16,16,16,16,16,16,16,16,16,16,12,13,14,15};
++
++static const vector unsigned char VSX_NOT_SHIFTED1_3 = {16,16,16, 3, 4, 5,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_NOT_SHIFTED2_3 = {16,16,16,16,16,16, 6, 7, 8,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_NOT_SHIFTED3_3 = {16,16,16,16,16,16,16,16,16, 9,10,11,16,16,16,16};
++static const vector unsigned char VSX_NOT_SHIFTED4_3 = {16,16,16,16,16,16,16,16,16,16,16,16,12,13,14,16};
++
++static const vector unsigned char VSX_CHAR_ZERO = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
++#ifdef __LITTLE_ENDIAN__
++
++static const vector unsigned char VSX_CHAR_TO_SHORT1_4 = { 4,16, 5,16, 6,16, 7,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT2_4 = { 8,16, 9,16,10,16,11,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT3_4 = {12,16,13,16,14,16,15,16,16,16,16,16,16,16,16,16};
++
++static const vector unsigned char VSX_SHORT_TO_CHAR1_4 = {16,16,16,16, 0, 2, 4, 6,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR2_4 = {16,16,16,16,16,16,16,16, 0, 2, 4, 6,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR3_4 = {16,16,16,16,16,16,16,16,16,16,16,16, 0, 2, 4, 6};
++
++static const vector unsigned char VSX_CHAR_TO_SHORT1_3 = { 3,16, 4,16, 5,16,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT2_3 = { 6,16, 7,16, 8,16,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT3_3 = { 9,16,10,16,11,16,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT4_3 = {12,16,13,16,14,16,16,16,16,16,16,16,16,16,16,16};
++
++static const vector unsigned char VSX_SHORT_TO_CHAR1_3 = {16,16,16, 0, 2, 4,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR2_3 = {16,16,16,16,16,16, 0, 2, 4,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR3_3 = {16,16,16,16,16,16,16,16,16, 0, 2, 4,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR4_3 = {16,16,16,16,16,16,16,16,16,16,16,16, 0, 2, 4,16};
++
++#elif defined(__BIG_ENDIAN__)
++
++static const vector unsigned char VSX_CHAR_TO_SHORT1_4 = {16, 4,16, 5,16, 6,16, 7,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT2_4 = {16, 8,16, 9,16,10,16,11,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT3_4 = {16,12,16,13,16,14,16,15,16,16,16,16,16,16,16,16};
++
++static const vector unsigned char VSX_SHORT_TO_CHAR1_4 = {16,16,16,16, 1, 3, 5, 7,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR2_4 = {16,16,16,16,16,16,16,16, 1, 3, 5, 7,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR3_4 = {16,16,16,16,16,16,16,16,16,16,16,16, 1, 3, 5, 7};
++
++static const vector unsigned char VSX_CHAR_TO_SHORT1_3 = {16, 3,16, 4,16, 5,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT2_3 = {16, 6,16, 7,16, 8,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT3_3 = {16, 9,16,10,16,11,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_CHAR_TO_SHORT4_3 = {16,12,16,13,16,14,16,16,16,16,16,16,16,16,16,16};
++
++static const vector unsigned char VSX_SHORT_TO_CHAR1_3 = {16,16,16, 1, 3, 5,16,16,16,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR2_3 = {16,16,16,16,16,16, 1, 3, 5,16,16,16,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR3_3 = {16,16,16,16,16,16,16,16,16, 1, 3, 5,16,16,16,16};
++static const vector unsigned char VSX_SHORT_TO_CHAR4_3 = {16,16,16,16,16,16,16,16,16,16,16,16, 1, 3, 5,16};
++
++#endif
++
++#define vsx_char_to_short(vec,offset,bpp) (vector unsigned short)vec_perm((vec),VSX_CHAR_ZERO,VSX_CHAR_TO_SHORT##offset##_##bpp)
++#define vsx_short_to_char(vec,offset,bpp) vec_perm(((vector unsigned char)(vec)),VSX_CHAR_ZERO,VSX_SHORT_TO_CHAR##offset##_##bpp)
++
++#ifdef PNG_USE_ABS
++# define vsx_abs(number) abs(number)
++#else
++# define vsx_abs(number) (number > 0) ? (number) : -(number)
++#endif
++
++void png_read_filter_row_sub4_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 4;
++
++ vector unsigned char rp_vec;
++ vector unsigned char part_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++
++ PNG_UNUSED(pp)
++
++ /* Altivec operations require 16-byte aligned data
++ * but input can be unaligned. So we calculate
++ * unaligned part as usual.
++ */
++ for (i = 0; i < unaligned_top; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++
++ /* Using SIMD while we can */
++ while( istop >= 16 )
++ {
++ for(i=0;i < bpp ; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++ rp -= bpp;
++
++ rp_vec = vec_ld(0,rp);
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED1_4);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED2_4);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED3_4);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ vec_st(rp_vec,0,rp);
++
++ rp += 16;
++ istop -= 16;
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp - bpp))) & 0xff);
++ rp++;
++ }
++
++}
++
++void png_read_filter_row_sub3_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 3;
++
++ vector unsigned char rp_vec;
++ vector unsigned char part_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++
++ PNG_UNUSED(pp)
++
++ /* Altivec operations require 16-byte aligned data
++ * but input can be unaligned. So we calculate
++ * unaligned part as usual.
++ */
++ for (i = 0; i < unaligned_top; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++
++ /* Using SIMD while we can */
++ while( istop >= 16 )
++ {
++ for(i=0;i < bpp ; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++ rp -= bpp;
++
++ rp_vec = vec_ld(0,rp);
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED1_3);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED2_3);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED3_3);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED4_3);
++ rp_vec = vec_add(rp_vec,part_vec);
++
++ vec_st(rp_vec,0,rp);
++ rp += 15;
++ istop -= 16;
++
++ /* Since 16 % bpp = 16 % 3 = 1, last element of array must
++ * be proceeded manually
++ */
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
++ rp++;
++ }
++}
++
++void png_read_filter_row_avg4_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 4;
++
++ vector unsigned char rp_vec;
++ vector unsigned char pp_vec;
++ vector unsigned char pp_part_vec;
++ vector unsigned char rp_part_vec;
++ vector unsigned char avg_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++ rp -= bpp;
++ if(istop >= bpp)
++ istop -= bpp;
++
++ for (i = 0; i < bpp; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ ((int)(*pp++) / 2 )) & 0xff);
++
++ rp++;
++ }
++
++ /* Altivec operations require 16-byte aligned data
++ * but input can be unaligned. So we calculate
++ * unaligned part as usual.
++ */
++ for (i = 0; i < unaligned_top; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++
++ /* Using SIMD while we can */
++ while( istop >= 16 )
++ {
++ for(i=0;i < bpp ; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++ rp -= bpp;
++ pp -= bpp;
++
++ vec_ld_unaligned(pp_vec,pp);
++ rp_vec = vec_ld(0,rp);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED1_4);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED1_4);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED2_4);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED2_4);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED3_4);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED3_4);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ vec_st(rp_vec,0,rp);
++
++ rp += 16;
++ pp += 16;
++ istop -= 16;
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++}
++
++void png_read_filter_row_avg3_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 3;
++
++ vector unsigned char rp_vec;
++ vector unsigned char pp_vec;
++ vector unsigned char pp_part_vec;
++ vector unsigned char rp_part_vec;
++ vector unsigned char avg_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++ rp -= bpp;
++ if(istop >= bpp)
++ istop -= bpp;
++
++ for (i = 0; i < bpp; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ ((int)(*pp++) / 2 )) & 0xff);
++
++ rp++;
++ }
++
++ /* Altivec operations require 16-byte aligned data
++ * but input can be unaligned. So we calculate
++ * unaligned part as usual.
++ */
++ for (i = 0; i < unaligned_top; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++
++ /* Using SIMD while we can */
++ while( istop >= 16 )
++ {
++ for(i=0;i < bpp ; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++ rp -= bpp;
++ pp -= bpp;
++
++ vec_ld_unaligned(pp_vec,pp);
++ rp_vec = vec_ld(0,rp);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED1_3);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED1_3);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED2_3);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED2_3);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED3_3);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED3_3);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ rp_part_vec = vec_perm(rp_vec,VSX_CHAR_ZERO,VSX_LEFTSHIFTED4_3);
++ pp_part_vec = vec_perm(pp_vec,VSX_CHAR_ZERO,VSX_NOT_SHIFTED4_3);
++ avg_vec = vec_avg(rp_part_vec,pp_part_vec);
++ avg_vec = vec_sub(avg_vec, vec_and(vec_xor(rp_part_vec,pp_part_vec),vec_splat_u8(1)));
++ rp_vec = vec_add(rp_vec,avg_vec);
++
++ vec_st(rp_vec,0,rp);
++
++ rp += 15;
++ pp += 15;
++ istop -= 16;
++
++ /* Since 16 % bpp = 16 % 3 = 1, last element of array must
++ * be proceeded manually
++ */
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++ rp++;
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ *rp = (png_byte)(((int)(*rp) +
++ (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
++
++ rp++;
++ }
++}
++
++/* Bytewise c ? t : e. */
++#define if_then_else(c,t,e) vec_sel(e,t,c)
++
++#define vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp) {\
++ c = *(pp - bpp);\
++ a = *(rp - bpp);\
++ b = *pp++;\
++ p = b - c;\
++ pc = a - c;\
++ pa = vsx_abs(p);\
++ pb = vsx_abs(pc);\
++ pc = vsx_abs(p + pc);\
++ if (pb < pa) pa = pb, a = b;\
++ if (pc < pa) a = c;\
++ a += *rp;\
++ *rp++ = (png_byte)a;\
++ }
++
++void png_read_filter_row_paeth4_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 4;
++
++ int a, b, c, pa, pb, pc, p;
++ vector unsigned char rp_vec;
++ vector unsigned char pp_vec;
++ vector unsigned short a_vec,b_vec,c_vec,nearest_vec;
++ vector signed short pa_vec,pb_vec,pc_vec,smallest_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++ rp -= bpp;
++ if(istop >= bpp)
++ istop -= bpp;
++
++ /* Process the first pixel in the row completely (this is the same as 'up'
++ * because there is only one candidate predictor for the first row).
++ */
++ for(i = 0; i < bpp ; i++)
++ {
++ *rp = (png_byte)( *rp + *pp);
++ rp++;
++ pp++;
++ }
++
++ for(i = 0; i < unaligned_top ; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++
++ while( istop >= 16)
++ {
++ for(i = 0; i < bpp ; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++
++ rp -= bpp;
++ pp -= bpp;
++ rp_vec = vec_ld(0,rp);
++ vec_ld_unaligned(pp_vec,pp);
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED1_4),1,4);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED1_4),1,4);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED1_4),1,4);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,1,4)));
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED2_4),2,4);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED2_4),2,4);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED2_4),2,4);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,2,4)));
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED3_4),3,4);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED3_4),3,4);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED3_4),3,4);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,3,4)));
++
++ vec_st(rp_vec,0,rp);
++
++ rp += 16;
++ pp += 16;
++ istop -= 16;
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++}
++
++void png_read_filter_row_paeth3_vsx(png_row_infop row_info, png_bytep row,
++ png_const_bytep prev_row)
++{
++ const png_byte bpp = 3;
++
++ int a, b, c, pa, pb, pc, p;
++ vector unsigned char rp_vec;
++ vector unsigned char pp_vec;
++ vector unsigned short a_vec,b_vec,c_vec,nearest_vec;
++ vector signed short pa_vec,pb_vec,pc_vec,smallest_vec;
++
++ vsx_declare_common_vars(row_info,row,prev_row,bpp)
++ rp -= bpp;
++ if(istop >= bpp)
++ istop -= bpp;
++
++ /* Process the first pixel in the row completely (this is the same as 'up'
++ * because there is only one candidate predictor for the first row).
++ */
++ for(i = 0; i < bpp ; i++)
++ {
++ *rp = (png_byte)( *rp + *pp);
++ rp++;
++ pp++;
++ }
++
++ for(i = 0; i < unaligned_top ; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++
++ while( istop >= 16)
++ {
++ for(i = 0; i < bpp ; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++
++ rp -= bpp;
++ pp -= bpp;
++ rp_vec = vec_ld(0,rp);
++ vec_ld_unaligned(pp_vec,pp);
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED1_3),1,3);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED1_3),1,3);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED1_3),1,3);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,1,3)));
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED2_3),2,3);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED2_3),2,3);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED2_3),2,3);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,2,3)));
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED3_3),3,3);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED3_3),3,3);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED3_3),3,3);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,3,3)));
++
++ a_vec = vsx_char_to_short(vec_perm(rp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED4_3),4,3);
++ b_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_NOT_SHIFTED4_3),4,3);
++ c_vec = vsx_char_to_short(vec_perm(pp_vec , VSX_CHAR_ZERO , VSX_LEFTSHIFTED4_3),4,3);
++ pa_vec = (vector signed short) vec_sub(b_vec,c_vec);
++ pb_vec = (vector signed short) vec_sub(a_vec , c_vec);
++ pc_vec = vec_add(pa_vec,pb_vec);
++ pa_vec = vec_abs(pa_vec);
++ pb_vec = vec_abs(pb_vec);
++ pc_vec = vec_abs(pc_vec);
++ smallest_vec = vec_min(pc_vec, vec_min(pa_vec,pb_vec));
++ nearest_vec = if_then_else(
++ vec_cmpeq(pa_vec,smallest_vec),
++ a_vec,
++ if_then_else(
++ vec_cmpeq(pb_vec,smallest_vec),
++ b_vec,
++ c_vec
++ )
++ );
++ rp_vec = vec_add(rp_vec,(vsx_short_to_char(nearest_vec,4,3)));
++
++ vec_st(rp_vec,0,rp);
++
++ rp += 15;
++ pp += 15;
++ istop -= 16;
++
++ /* Since 16 % bpp = 16 % 3 = 1, last element of array must
++ * be proceeded manually
++ */
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++
++ if(istop > 0)
++ for (i = 0; i < istop % 16; i++)
++ {
++ vsx_paeth_process(rp,pp,a,b,c,pa,pb,pc,bpp)
++ }
++}
++
++#endif /* PNG_POWERPC_VSX_OPT > 0 */
++#endif /* PNG_POWERPC_VSX_IMPLEMENTATION == 1 (intrinsics) */
++#endif /* READ */
+new file mode 100644
+--- /dev/null
++++ qtwebengine/src/3rdparty/chromium/third_party/libpng/powerpc/powerpc_init.c
+@@ -0,0 +1,125 @@
++
++/* powerpc_init.c - POWERPC optimised filter functions
++ *
++ * Copyright (c) 2017 Glenn Randers-Pehrson
++ * Written by Vadim Barkov, 2017.
++ * Last changed in libpng 1.6.29 [March 16, 2017]
++ *
++ * This code is released under the libpng license.
++ * For conditions of distribution and use, see the disclaimer
++ * and license in png.h
++ */
++/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are
++ * called.
++ */
++#define _POSIX_SOURCE 1
++
++#include <stdio.h>
++#include "../pngpriv.h"
++
++#ifdef PNG_READ_SUPPORTED
++
++#if PNG_POWERPC_VSX_OPT > 0
++#ifdef PNG_POWERPC_VSX_CHECK_SUPPORTED /* Do run-time checks */
++/* WARNING: it is strongly recommended that you do not build libpng with
++ * run-time checks for CPU features if at all possible. In the case of the PowerPC
++ * VSX instructions there is no processor-specific way of detecting the
++ * presence of the required support, therefore run-time detection is extremely
++ * OS specific.
++ *
++ * You may set the macro PNG_POWERPC_VSX_FILE to the file name of file containing
++ * a fragment of C source code which defines the png_have_vsx function. There
++ * are a number of implementations in contrib/powerpc-vsx, but the only one that
++ * has partial support is contrib/powerpc-vsx/linux.c - a generic Linux
++ * implementation which reads /proc/cpufino.
++ */
++#ifndef PNG_POWERPC_VSX_FILE
++# ifdef __linux__
++# define PNG_POWERPC_VSX_FILE "contrib/powerpc-vsx/linux_aux.c"
++# endif
++#endif
++
++#ifdef PNG_POWERPC_VSX_FILE
++
++#include <signal.h> /* for sig_atomic_t */
++static int png_have_vsx(png_structp png_ptr);
++#include PNG_POWERPC_VSX_FILE
++
++#else /* PNG_POWERPC_VSX_FILE */
++# error "PNG_POWERPC_VSX_FILE undefined: no support for run-time POWERPC VSX checks"
++#endif /* PNG_POWERPC_VSX_FILE */
++#endif /* PNG_POWERPC_VSX_CHECK_SUPPORTED */
++
++void
++png_init_filter_functions_vsx(png_structp pp, unsigned int bpp)
++{
++ /* The switch statement is compiled in for POWERPC_VSX_API, the call to
++ * png_have_vsx is compiled in for POWERPC_VSX_CHECK. If both are defined
++ * the check is only performed if the API has not set the PowerPC option on
++ * or off explicitly. In this case the check controls what happens.
++ */
++
++#ifdef PNG_POWERPC_VSX_API_SUPPORTED
++ switch ((pp->options >> PNG_POWERPC_VSX) & 3)
++ {
++ case PNG_OPTION_UNSET:
++ /* Allow the run-time check to execute if it has been enabled -
++ * thus both API and CHECK can be turned on. If it isn't supported
++ * this case will fall through to the 'default' below, which just
++ * returns.
++ */
++#endif /* PNG_POWERPC_VSX_API_SUPPORTED */
++#ifdef PNG_POWERPC_VSX_CHECK_SUPPORTED
++ {
++ static volatile sig_atomic_t no_vsx = -1; /* not checked */
++
++ if (no_vsx < 0)
++ no_vsx = !png_have_vsx(pp);
++
++ if (no_vsx)
++ return;
++ }
++#ifdef PNG_POWERPC_VSX_API_SUPPORTED
++ break;
++#endif
++#endif /* PNG_POWERPC_VSX_CHECK_SUPPORTED */
++
++#ifdef PNG_POWERPC_VSX_API_SUPPORTED
++ default: /* OFF or INVALID */
++ return;
++
++ case PNG_OPTION_ON:
++ /* Option turned on */
++ break;
++ }
++#endif
++
++ /* IMPORTANT: any new internal functions used here must be declared using
++ * PNG_INTERNAL_FUNCTION in ../pngpriv.h. This is required so that the
++ * 'prefix' option to configure works:
++ *
++ * ./configure --with-libpng-prefix=foobar_
++ *
++ * Verify you have got this right by running the above command, doing a build
++ * and examining pngprefix.h; it must contain a #define for every external
++ * function you add. (Notice that this happens automatically for the
++ * initialization function.)
++ */
++ pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up_vsx;
++
++ if (bpp == 3)
++ {
++ pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_vsx;
++ pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_vsx;
++ pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth3_vsx;
++ }
++
++ else if (bpp == 4)
++ {
++ pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_vsx;
++ pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_vsx;
++ pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth4_vsx;
++ }
++}
++#endif /* PNG_POWERPC_VSX_OPT > 0 */
++#endif /* READ */
+--- qtwebengine/src/3rdparty/chromium/third_party/lss/linux_syscall_support.h
++++ qtwebengine/src/3rdparty/chromium/third_party/lss/linux_syscall_support.h
+@@ -3914,7 +3914,7 @@ struct kernel_statfs {
+ LSS_REG(2, buf);
+ LSS_BODY(void*, mmap2, "0"(__r2));
+ }
+-#else
++#elif !defined(__powerpc64__) /* ppc64 doesn't have mmap2 */
+ #define __NR__mmap2 __NR_mmap2
+ LSS_INLINE _syscall6(void*, _mmap2, void*, s,
+ size_t, l, int, p,
+@@ -4045,7 +4045,7 @@ struct kernel_statfs {
+ #if defined(__i386__) || \
+ defined(__ARM_ARCH_3__) || defined(__ARM_EABI__) || \
+ (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) || \
+- defined(__PPC__) || \
++ (defined(__PPC__) && !defined(__powerpc64__)) || \
+ (defined(__s390__) && !defined(__s390x__))
+ /* On these architectures, implement mmap() with mmap2(). */
+ LSS_INLINE void* LSS_NAME(mmap)(void *s, size_t l, int p, int f, int d,
+--- qtwebengine/src/3rdparty/chromium/third_party/node/node.py
++++ qtwebengine/src/3rdparty/chromium/third_party/node/node.py
+@@ -10,11 +10,12 @@ import sys
+
+
+ def GetBinaryPath():
+- return os_path.join(os_path.dirname(__file__), *{
+- 'Darwin': ('mac', 'node-darwin-x64', 'bin', 'node'),
+- 'Linux': ('linux', 'node-linux-x64', 'bin', 'node'),
+- 'Windows': ('win', 'node.exe'),
+- }[platform.system()])
++ return "/usr/bin/node"
++ #return os_path.join(os_path.dirname(__file__), *{
++ # 'Darwin': ('mac', 'node-darwin-x64', 'bin', 'node'),
++ # 'Linux': ('linux', 'node-linux-x64', 'bin', 'node'),
++ # 'Windows': ('win', 'node.exe'),
++ #}[platform.system()])
+
+
+ def RunNode(cmd_parts, stdout=None):
+--- qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator_constants.h
++++ qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator_constants.h
+@@ -11,7 +11,7 @@
+
+ namespace pdfium {
+ namespace base {
+-#if defined(OS_WIN)
++#if defined(OS_WIN) || defined(ARCH_CPU_PPC64)
+ static constexpr size_t kPageAllocationGranularityShift = 16; // 64KB
+ #elif defined(_MIPS_ARCH_LOONGSON)
+ static constexpr size_t kPageAllocationGranularityShift = 14; // 16KB
+@@ -27,6 +27,10 @@ static constexpr size_t kPageAllocationGranularityBaseMask =
+
+ #if defined(_MIPS_ARCH_LOONGSON)
+ static constexpr size_t kSystemPageSize = 16384;
++#elif defined(ARCH_CPU_PPC64)
++// TODO: modern ppc64 can do 4k and 64k page sizes
++// for now, 64k is assumed
++static constexpr size_t kSystemPageSize = 65536;
+ #else
+ static constexpr size_t kSystemPageSize = 4096;
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/partition_alloc_constants.h
++++ qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/partition_alloc_constants.h
+@@ -33,6 +33,8 @@ static const size_t kBucketShift = (kAllocationGranularity == 8) ? 3 : 2;
+ // up against the end of a system page.
+ #if defined(_MIPS_ARCH_LOONGSON)
+ static const size_t kPartitionPageShift = 16; // 64KB
++#elif defined(ARCH_CPU_PPC64)
++static const size_t kPartitionPageShift = 18; // 256KB
+ #else
+ static const size_t kPartitionPageShift = 14; // 16KB
+ #endif
+--- qtwebengine/src/3rdparty/chromium/third_party/sqlite/amalgamation/sqlite3.c
++++ qtwebengine/src/3rdparty/chromium/third_party/sqlite/amalgamation/sqlite3.c
+@@ -13937,7 +13937,8 @@ typedef INT16_TYPE LogEst;
+ # if defined(i386) || defined(__i386__) || defined(_M_IX86) || \
+ defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \
+ defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \
+- defined(__arm__) || defined(_M_ARM64)
++ defined(__arm__) || defined(_M_ARM64) || defined(__powerpc64__) && \
++ (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+ # define SQLITE_BYTEORDER 1234
+ # elif defined(sparc) || defined(__ppc__)
+ # define SQLITE_BYTEORDER 4321
+--- qtwebengine/src/3rdparty/chromium/third_party/sqlite/src/src/sqliteInt.h
++++ qtwebengine/src/3rdparty/chromium/third_party/sqlite/src/src/sqliteInt.h
+@@ -833,7 +833,8 @@ typedef INT16_TYPE LogEst;
+ # if defined(i386) || defined(__i386__) || defined(_M_IX86) || \
+ defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \
+ defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \
+- defined(__arm__) || defined(_M_ARM64)
++ defined(__arm__) || defined(_M_ARM64) || defined(__powerpc64__) && \
++ (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+ # define SQLITE_BYTEORDER 1234
+ # elif defined(sparc) || defined(__ppc__)
+ # define SQLITE_BYTEORDER 4321
+--- qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/differ_block.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/differ_block.cc
+@@ -30,11 +30,7 @@ bool VectorDifference(const uint8_t* image1, const uint8_t* image2) {
+ static bool (*diff_proc)(const uint8_t*, const uint8_t*) = nullptr;
+
+ if (!diff_proc) {
+-#if defined(WEBRTC_ARCH_ARM_FAMILY) || defined(WEBRTC_ARCH_MIPS_FAMILY)
+- // For ARM and MIPS processors, always use C version.
+- // TODO(hclam): Implement a NEON version.
+- diff_proc = &VectorDifference_C;
+-#else
++#if defined(WEBRTC_ARCH_X86_FAMILY)
+ bool have_sse2 = WebRtc_GetCPUInfo(kSSE2) != 0;
+ // For x86 processors, check if SSE2 is supported.
+ if (have_sse2 && kBlockSize == 32) {
+@@ -44,6 +40,10 @@ bool VectorDifference(const uint8_t* image1, const uint8_t* image2) {
+ } else {
+ diff_proc = &VectorDifference_C;
+ }
++#else
++ // For other processors, always use C version.
++ // TODO(hclam): Implement a NEON version.
++ diff_proc = &VectorDifference_C;
+ #endif
+ }
+
+--- qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/system/arch.h
++++ qtwebengine/src/3rdparty/chromium/third_party/webrtc/rtc_base/system/arch.h
+@@ -47,6 +47,18 @@
+ #elif defined(__pnacl__)
+ #define WEBRTC_ARCH_32_BITS
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
++#elif defined(__PPC__)
++#define WEBRTC_ARCH_PPC_FAMILY
++#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
++#define WEBRTC_ARCH_LITTLE_ENDIAN
++#else
++#define WEBRTC_ARCH_BIG_ENDIAN
++#endif
++#if defined(__LP64__)
++#define WEBRTC_ARCH_64_BITS
++#else
++#define WEBRTC_ARCH_32_BITS
++#endif
+ #else
+ #error Please add support for your architecture in typedefs.h
+ #endif
+--- qtwebengine/src/3rdparty/chromium/v8/BUILD.gn
++++ qtwebengine/src/3rdparty/chromium/v8/BUILD.gn
+@@ -544,6 +544,12 @@ config("toolchain") {
+ }
+ if (host_byteorder == "little") {
+ defines += [ "V8_TARGET_ARCH_PPC_LE" ]
++ cflags += [
++ # Enable usage of AltiVec, VSX, and other POWER8 and higher features
++ "-mcpu=power8",
++ "-maltivec",
++ "-mvsx",
++ ]
+ } else if (host_byteorder == "big") {
+ defines += [ "V8_TARGET_ARCH_PPC_BE" ]
+ if (current_os == "aix") {
+--- qtwebengine/src/3rdparty/chromium/v8/test/BUILD.gn
++++ qtwebengine/src/3rdparty/chromium/v8/test/BUILD.gn
+@@ -31,7 +31,7 @@ group("gn_all") {
+ deps += [
+ "cctest:cctest",
+ "cctest:generate-bytecode-expectations",
+- "unittests:unittests",
++ #"unittests:unittests",
+ ]
+ }
+ }
+@@ -80,9 +80,9 @@ group("v8_bot_default") {
+ "mjsunit:v8_mjsunit",
+ "mkgrokdump:mkgrokdump",
+ "preparser:v8_preparser",
+- "unittests:unittests",
++ #"unittests:unittests",
+ "wasm-js:v8_wasm_js",
+- "wasm-spec-tests:v8_wasm_spec_tests",
++ #"wasm-spec-tests:v8_wasm_spec_tests",
+ "webkit:v8_webkit",
+ ]
+ }
+@@ -100,9 +100,9 @@ group("v8_default") {
+ "mjsunit:v8_mjsunit",
+ "mkgrokdump:mkgrokdump",
+ "preparser:v8_preparser",
+- "unittests:unittests",
+- "wasm-js:v8_wasm_js",
+- "wasm-spec-tests:v8_wasm_spec_tests",
++ #"unittests:unittests",
++ #"wasm-js:v8_wasm_js",
++ #"wasm-spec-tests:v8_wasm_spec_tests",
+ ]
+ }
+
diff --git a/srcpkgs/qt5/patches/0091-chromium-ppc64-musl.patch b/srcpkgs/qt5/patches/0091-chromium-ppc64-musl.patch
new file mode 100644
index 00000000000..df014d8b598
--- /dev/null
+++ b/srcpkgs/qt5/patches/0091-chromium-ppc64-musl.patch
@@ -0,0 +1,141 @@
+This includes additional build fixes for the musl libc.
+
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/seccomp_macros.h
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/seccomp_macros.h
+@@ -11,12 +11,14 @@
+ // All x86_64 builds use a new enough bionic to have sys/user.h.
+ #if !defined(__BIONIC__) || defined(__x86_64__)
+ #if !defined(__native_client_nonsfi__)
++#if !defined(__powerpc64__) || defined(__GLIBC__)
+ #include <sys/user.h>
+ #endif
++#endif
+ #if defined(__mips__)
+ // sys/user.h in eglibc misses size_t definition
+ #include <stddef.h>
+-#elif defined(__powerpc64__)
++#elif defined(__powerpc64__) && defined(__GLIBC__)
+ // Manually define greg_t on ppc64
+ typedef unsigned long long greg_t;
+ #endif
+@@ -361,11 +363,11 @@ typedef struct pt_regs regs_struct;
+ #define SECCOMP_ARCH AUDIT_ARCH_PPC64
+ #endif
+
+-#define SECCOMP_REG(_ctx, _reg) ((_ctx)->uc_mcontext.regs->gpr[_reg])
++#define SECCOMP_REG(_ctx, _reg) (((struct pt_regs *)(_ctx)->uc_mcontext.regs)->gpr[_reg])
+
+ #define SECCOMP_RESULT(_ctx) SECCOMP_REG(_ctx, 3)
+ #define SECCOMP_SYSCALL(_ctx) SECCOMP_REG(_ctx, 0)
+-#define SECCOMP_IP(_ctx) (_ctx)->uc_mcontext.regs->nip
++#define SECCOMP_IP(_ctx) ((struct pt_regs *)(_ctx)->uc_mcontext.regs)->nip
+ #define SECCOMP_PARM1(_ctx) SECCOMP_REG(_ctx, 3)
+ #define SECCOMP_PARM2(_ctx) SECCOMP_REG(_ctx, 4)
+ #define SECCOMP_PARM3(_ctx) SECCOMP_REG(_ctx, 5)
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/syscall.cc
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/syscall.cc
+@@ -497,9 +497,9 @@ void Syscall::PutValueInUcontext(intptr_t ret_val, ucontext_t* ctx) {
+ // Same as MIPS, need to invert ret and set error register (cr0.SO)
+ if (ret_val <= -1 && ret_val >= -4095) {
+ ret_val = -ret_val;
+- ctx->uc_mcontext.regs->ccr |= (1 << 28);
++ ((struct pt_regs *)ctx->uc_mcontext.regs)->ccr |= (1 << 28);
+ } else {
+- ctx->uc_mcontext.regs->ccr &= ~(1 << 28);
++ ((struct pt_regs *)ctx->uc_mcontext.regs)->ccr &= ~(1 << 28);
+ }
+ #endif
+ SECCOMP_RESULT(ctx) = static_cast<greg_t>(ret_val);
+--- qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc
+@@ -20,7 +20,7 @@
+ #include <intrin.h>
+ #endif
+
+-#if defined(__powerpc__) || defined(__ppc__)
++#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)
+ #include <sys/platform/ppc.h>
+ #endif
+
+@@ -53,7 +53,7 @@ double UnscaledCycleClock::Frequency() {
+ return base_internal::NominalCPUFrequency();
+ }
+
+-#elif defined(__powerpc__) || defined(__ppc__)
++#elif (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)
+
+ int64_t UnscaledCycleClock::Now() {
+ return __ppc_get_timebase();
+--- qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h
++++ qtwebengine/src/3rdparty/chromium/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h
+@@ -46,7 +46,7 @@
+
+ // The following platforms have an implementation of a hardware counter.
+ #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
+- defined(__powerpc__) || defined(__ppc__) || \
++ ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \
+ defined(_M_IX86) || defined(_M_X64)
+ #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1
+ #else
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc
+@@ -273,6 +273,9 @@ void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
+
+ #elif defined(__powerpc64__)
+
++#include <asm/elf.h>
++#include <asm/ptrace.h>
++
+ uintptr_t ThreadInfo::GetInstructionPointer() const {
+ return mcontext.gp_regs[PT_NIP];
+ }
+@@ -290,9 +293,9 @@ void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
+ out->ctr = mcontext.gp_regs[PT_CTR];
+
+ for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++)
+- out->float_save.fpregs[i] = mcontext.fp_regs[i];
++ out->float_save.fpregs[i] = ((uint64_t *)&mcontext.fp_regs)[i];
+
+- out->float_save.fpscr = mcontext.fp_regs[NFPREG-1];
++ out->float_save.fpscr = ((uint64_t *)&mcontext.fp_regs)[ELF_NFPREG-1];
+
+ for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++)
+ out->vector_save.save_vr[i] = \
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
+@@ -257,6 +257,9 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) {
+
+ #elif defined(__powerpc64__)
+
++#include <asm/elf.h>
++#include <asm/ptrace.h>
++
+ uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
+ return uc->uc_mcontext.gp_regs[MD_CONTEXT_PPC64_REG_SP];
+ }
+@@ -280,9 +283,9 @@ void UContextReader::FillCPUContext(RawContextCPU* out, const ucontext_t* uc,
+ out->ctr = uc->uc_mcontext.gp_regs[PT_CTR];
+
+ for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++)
+- out->float_save.fpregs[i] = uc->uc_mcontext.fp_regs[i];
++ out->float_save.fpregs[i] = ((uint64_t *)&uc->uc_mcontext.fp_regs)[i];
+
+- out->float_save.fpscr = uc->uc_mcontext.fp_regs[NFPREG-1];
++ out->float_save.fpscr = ((uint64_t *)&uc->uc_mcontext.fp_regs)[ELF_NFPREG-1];
+
+ for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++)
+ out->vector_save.save_vr[i] =
+--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
+@@ -105,6 +105,11 @@
+ #define PR_SET_PTRACER 0x59616d61
+ #endif
+
++/* musl hack, can't include asm/ptrace.h as that causes conflicts */
++#if defined(__powerpc64__) && !defined(PT_NIP)
++#define PT_NIP 32
++#endif
++
+ namespace google_breakpad {
+
+ namespace {
diff --git a/srcpkgs/qt5/patches/0092-chromium-ppc64-be.patch b/srcpkgs/qt5/patches/0092-chromium-ppc64-be.patch
new file mode 100644
index 00000000000..ce8311c9ba2
--- /dev/null
+++ b/srcpkgs/qt5/patches/0092-chromium-ppc64-be.patch
@@ -0,0 +1,2970 @@
+This adds big endian support/fixes in addition to the base ppc64le patch.
+
+Ping q66 if you're updating qt5 and the patch does not apply anymore.
+
+Source: https://wiki.raptorcs.com/w/index.php?title=Porting/Chromium/BE
+
+--- qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.cc
++++ qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.cc
+@@ -440,7 +440,7 @@ static size_t PartitionPurgePage(internal::PartitionPage* page, bool discard) {
+ #endif
+ }
+ // Terminate the freelist chain.
+- *entry_ptr = nullptr;
++ *entry_ptr = internal::PartitionFreelistEntry::Transform(nullptr);
+ // The freelist head is stored unmasked.
+ page->freelist_head =
+ internal::PartitionFreelistEntry::Transform(page->freelist_head);
+--- qtwebengine/src/3rdparty/chromium/base/i18n/icu_util.cc
++++ qtwebengine/src/3rdparty/chromium/base/i18n/icu_util.cc
+@@ -75,7 +75,11 @@ wchar_t g_debug_icu_pf_filename[_MAX_PATH];
+ // No need to change the filename in multiple places (gyp files, windows
+ // build pkg configurations, etc). 'l' stands for Little Endian.
+ // This variable is exported through the header file.
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ const char kIcuDataFileName[] = "icudtl.dat";
++#else
++const char kIcuDataFileName[] = "icudtb.dat";
++#endif
+ #if defined(OS_ANDROID)
+ const char kAndroidAssetsIcuDataFileName[] = "assets/icudtl.dat";
+ #endif
+--- qtwebengine/src/3rdparty/chromium/base/memory/shared_memory_mapping_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/base/memory/shared_memory_mapping_unittest.cc
+@@ -12,6 +12,7 @@
+ #include "base/containers/span.h"
+ #include "base/memory/read_only_shared_memory_region.h"
+ #include "testing/gtest/include/gtest/gtest.h"
++#include "base/sys_byteorder.h"
+
+ namespace base {
+
+@@ -69,8 +70,8 @@ TEST_F(SharedMemoryMappingTest, SpanWithAutoDeducedElementCount) {
+
+ for (size_t i = 0; i < write_span.size(); ++i)
+ write_span[i] = i + 1;
+- EXPECT_EQ(0x04030201u, read_span[0]);
+- EXPECT_EQ(0x08070605u, read_span[1]);
++ EXPECT_EQ(HostToNet32(0x01020304u), read_span[0]);
++ EXPECT_EQ(HostToNet32(0x05060708u), read_span[1]);
+ }
+
+ TEST_F(SharedMemoryMappingTest, SpanWithExplicitElementCount) {
+@@ -95,13 +96,13 @@ TEST_F(SharedMemoryMappingTest, SpanWithExplicitElementCount) {
+
+ for (size_t i = 0; i < write_span.size(); ++i)
+ write_span[i] = i + 1;
+- EXPECT_EQ(0x04030201u, read_span[0]);
+- EXPECT_EQ(0x08070605u, read_span[1]);
+- EXPECT_EQ(0x04030201u, read_span_2[0]);
++ EXPECT_EQ(HostToNet32(0x01020304u), read_span[0]);
++ EXPECT_EQ(HostToNet32(0x05060708u), read_span[1]);
++ EXPECT_EQ(HostToNet32(0x01020304u), read_span_2[0]);
+
+ std::fill(write_span_2.begin(), write_span_2.end(), 0);
+ EXPECT_EQ(0u, read_span[0]);
+- EXPECT_EQ(0x08070605u, read_span[1]);
++ EXPECT_EQ(HostToNet32(0x05060708u), read_span[1]);
+ EXPECT_EQ(0u, read_span_2[0]);
+ }
+
+--- qtwebengine/src/3rdparty/chromium/base/metrics/bucket_ranges_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/base/metrics/bucket_ranges_unittest.cc
+@@ -7,6 +7,7 @@
+ #include <stdint.h>
+
+ #include "testing/gtest/include/gtest/gtest.h"
++#include "base/sys_byteorder.h"
+
+ namespace base {
+ namespace {
+@@ -64,13 +65,21 @@ TEST(BucketRangesTest, Checksum) {
+ ranges.set_range(2, 2);
+
+ ranges.ResetChecksum();
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ EXPECT_EQ(289217253u, ranges.checksum());
++#else
++ EXPECT_EQ(2767231596u, ranges.checksum());
++#endif
+
+ ranges.set_range(2, 3);
+ EXPECT_FALSE(ranges.HasValidChecksum());
+
+ ranges.ResetChecksum();
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ EXPECT_EQ(2843835776u, ranges.checksum());
++#else
++ EXPECT_EQ(3556223738u, ranges.checksum());
++#endif
+ EXPECT_TRUE(ranges.HasValidChecksum());
+ }
+
+--- qtwebengine/src/3rdparty/chromium/base/pickle.cc
++++ qtwebengine/src/3rdparty/chromium/base/pickle.cc
+@@ -82,7 +82,12 @@ inline const char* PickleIterator::GetReadPointerAndAdvance(
+ }
+
+ bool PickleIterator::ReadBool(bool* result) {
+- return ReadBuiltinType(result);
++ int int_result;
++ if (ReadBuiltinType(&int_result)) {
++ *result = static_cast<bool>(int_result);
++ return true;
++ } else
++ return false;
+ }
+
+ bool PickleIterator::ReadInt(int* result) {
+--- qtwebengine/src/3rdparty/chromium/base/sha1.cc
++++ qtwebengine/src/3rdparty/chromium/base/sha1.cc
+@@ -110,8 +110,10 @@ void SecureHashAlgorithm::Final() {
+ Pad();
+ Process();
+
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ for (auto& t : H)
+ t = ByteSwap(t);
++#endif
+ }
+
+ void SecureHashAlgorithm::Update(const void* data, size_t nbytes) {
+@@ -157,8 +159,10 @@ void SecureHashAlgorithm::Process() {
+ //
+ // W and M are in a union, so no need to memcpy.
+ // memcpy(W, M, sizeof(M));
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ for (t = 0; t < 16; ++t)
+ W[t] = ByteSwap(W[t]);
++#endif
+
+ // b.
+ for (t = 16; t < 80; ++t)
+--- qtwebengine/src/3rdparty/chromium/base/strings/string_number_conversions_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/base/strings/string_number_conversions_unittest.cc
+@@ -829,12 +829,21 @@ TEST(StringNumberConversionsTest, DoubleToString) {
+ }
+
+ // The following two values were seen in crashes in the wild.
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ const char input_bytes[8] = {0, 0, 0, 0, '\xee', '\x6d', '\x73', '\x42'};
++#else
++ const char input_bytes[8] = {'\x42', '\x73', '\x6d', '\xee', 0, 0, 0, 0};
++#endif
+ double input = 0;
+ memcpy(&input, input_bytes, base::size(input_bytes));
+ EXPECT_EQ("1335179083776", NumberToString(input));
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ const char input_bytes2[8] =
+ {0, 0, 0, '\xa0', '\xda', '\x6c', '\x73', '\x42'};
++#else
++ const char input_bytes2[8] =
++ {'\x42', '\x73', '\x6c', '\xda', '\xa0', 0, 0, 0};
++#endif
+ input = 0;
+ memcpy(&input, input_bytes2, base::size(input_bytes2));
+ EXPECT_EQ("1334890332160", NumberToString(input));
+--- qtwebengine/src/3rdparty/chromium/base/third_party/dmg_fp/dtoa.cc
++++ qtwebengine/src/3rdparty/chromium/base/third_party/dmg_fp/dtoa.cc
+@@ -186,7 +186,11 @@
+ * used for input more than STRTOD_DIGLIM digits long (default 40).
+ */
+
++#ifdef __BIG_ENDIAN__
++#define IEEE_MC68k
++#else
+ #define IEEE_8087
++#endif
+ #define NO_HEX_FP
+
+ #ifndef Long
+--- qtwebengine/src/3rdparty/chromium/components/safe_browsing/db/util_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/components/safe_browsing/db/util_unittest.cc
+@@ -12,6 +12,12 @@
+ #include "testing/gtest/include/gtest/gtest.h"
+ #include "url/gurl.h"
+
++#if defined(OS_WIN)
++#include <winsock2.h>
++#elif defined(OS_POSIX)
++#include <arpa/inet.h>
++#endif
++
+ namespace safe_browsing {
+
+ TEST(SafeBrowsingDbUtilTest, UrlToFullHashes) {
+@@ -83,7 +89,7 @@ TEST(SafeBrowsingDbUtilTest, StringToSBFullHashAndSBFullHashToString) {
+ // 31 chars plus the last \0 as full_hash.
+ const std::string hash_in = "12345678902234567890323456789012";
+ SBFullHash hash_out = StringToSBFullHash(hash_in);
+- EXPECT_EQ(0x34333231U, hash_out.prefix);
++ EXPECT_EQ(htonl(0x31323334U), hash_out.prefix);
+ EXPECT_EQ(0, memcmp(hash_in.data(), hash_out.full_hash, sizeof(SBFullHash)));
+
+ std::string hash_final = SBFullHashToString(hash_out);
+--- qtwebengine/src/3rdparty/chromium/components/safe_browsing/db/v4_rice.cc
++++ qtwebengine/src/3rdparty/chromium/components/safe_browsing/db/v4_rice.cc
+@@ -8,6 +8,7 @@
+ #include "base/logging.h"
+ #include "base/numerics/safe_math.h"
+ #include "base/strings/stringprintf.h"
++#include "base/sys_byteorder.h"
+ #include "build/build_config.h"
+ #include "components/safe_browsing/db/v4_rice.h"
+
+@@ -21,10 +22,6 @@ using ::google::protobuf::RepeatedField;
+ using ::google::protobuf::int32;
+ using ::google::protobuf::int64;
+
+-#if !defined(ARCH_CPU_LITTLE_ENDIAN) || (ARCH_CPU_LITTLE_ENDIAN != 1)
+-#error The code below assumes little-endianness.
+-#endif
+-
+ namespace safe_browsing {
+
+ namespace {
+@@ -117,7 +114,7 @@ V4DecodeResult V4RiceDecoder::DecodePrefixes(const int64 first_value,
+ out->reserve((num_entries + 1));
+
+ base::CheckedNumeric<uint32_t> last_value(first_value);
+- out->push_back(htonl(last_value.ValueOrDie()));
++ out->push_back(base::ByteSwap(static_cast<uint32_t>(last_value.ValueOrDie())));
+
+ if (num_entries > 0) {
+ V4RiceDecoder decoder(rice_parameter, num_entries, encoded_data);
+@@ -136,7 +133,7 @@ V4DecodeResult V4RiceDecoder::DecodePrefixes(const int64 first_value,
+
+ // This flipping is done so that the decoded uint32 is interpreted
+ // correcly as a string of 4 bytes.
+- out->push_back(htonl(last_value.ValueOrDie()));
++ out->push_back(base::ByteSwap(static_cast<uint32_t>(last_value.ValueOrDie())));
+ }
+ }
+
+--- qtwebengine/src/3rdparty/chromium/components/safe_browsing/db/v4_rice_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/components/safe_browsing/db/v4_rice_unittest.cc
+@@ -6,6 +6,12 @@
+ #include "base/logging.h"
+ #include "testing/platform_test.h"
+
++#if defined(OS_WIN)
++#include <winsock2.h>
++#elif defined(OS_POSIX)
++#include <arpa/inet.h>
++#endif
++
+ using ::google::protobuf::RepeatedField;
+ using ::google::protobuf::int32;
+
+@@ -247,7 +253,7 @@ TEST_F(V4RiceTest, TestDecoderPrefixesWithOneValue) {
+ EXPECT_EQ(DECODE_SUCCESS,
+ V4RiceDecoder::DecodePrefixes(0x69F67F51u, 2, 0, "", &out));
+ EXPECT_EQ(1u, out.size());
+- EXPECT_EQ(0x69F67F51u, out[0]);
++ EXPECT_EQ(htonl(0x517FF669u), out[0]);
+ }
+
+ TEST_F(V4RiceTest, TestDecoderPrefixesWithMultipleValues) {
+@@ -256,7 +262,7 @@ TEST_F(V4RiceTest, TestDecoderPrefixesWithMultipleValues) {
+ V4RiceDecoder::DecodePrefixes(
+ 5, 28, 3, "\xbf\xa8\x3f\xfb\xf\xf\x5e\x27\xe6\xc3\x1d\xc6\x38",
+ &out));
+- std::vector<uint32_t> expected = {5, 0xad934c0cu, 0x6ff67f56u, 0x81316fceu};
++ std::vector<uint32_t> expected = {htonl(0x05000000), htonl(0x0c4c93adu), htonl(0x567ff66fu), htonl(0xce6f3181u)};
+ EXPECT_EQ(expected.size(), out.size());
+ for (unsigned i = 0; i < expected.size(); i++) {
+ EXPECT_EQ(expected[i], out[i]);
+--- qtwebengine/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
++++ qtwebengine/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc
+@@ -686,10 +686,6 @@ ChannelLayout ChannelLayoutToChromeChannelLayout(int64_t layout, int channels) {
+ }
+ }
+
+-#if !defined(ARCH_CPU_LITTLE_ENDIAN)
+-#error The code below assumes little-endianness.
+-#endif
+-
+ VideoPixelFormat AVPixelFormatToVideoPixelFormat(AVPixelFormat pixel_format) {
+ // The YUVJ alternatives are FFmpeg's (deprecated, but still in use) way to
+ // specify a pixel format and full range color combination.
+--- qtwebengine/src/3rdparty/chromium/media/formats/mp4/box_definitions.cc
++++ qtwebengine/src/3rdparty/chromium/media/formats/mp4/box_definitions.cc
+@@ -1107,15 +1107,14 @@ bool OpusSpecificBox::Parse(BoxReader* reader) {
+ RCHECK(reader->Read4(&sample_rate));
+ RCHECK(reader->Read2s(&gain_db));
+
+-#if !defined(ARCH_CPU_LITTLE_ENDIAN)
+-#error The code below assumes little-endianness.
+-#endif
+-
+- memcpy(&extradata[OPUS_EXTRADATA_SKIP_SAMPLES_OFFSET], &codec_delay_in_frames,
+- sizeof(codec_delay_in_frames));
+- memcpy(&extradata[OPUS_EXTRADATA_SAMPLE_RATE_OFFSET], &sample_rate,
+- sizeof(sample_rate));
+- memcpy(&extradata[OPUS_EXTRADATA_GAIN_OFFSET], &gain_db, sizeof(gain_db));
++ extradata[OPUS_EXTRADATA_SKIP_SAMPLES_OFFSET] = (codec_delay_in_frames >> 0) & 0xff;
++ extradata[OPUS_EXTRADATA_SKIP_SAMPLES_OFFSET+1] = (codec_delay_in_frames >> 8) & 0xff;
++ extradata[OPUS_EXTRADATA_SAMPLE_RATE_OFFSET] = (sample_rate >> 0) & 0xff;
++ extradata[OPUS_EXTRADATA_SAMPLE_RATE_OFFSET+1] = (sample_rate >> 8) & 0xff;
++ extradata[OPUS_EXTRADATA_SAMPLE_RATE_OFFSET+2] = (sample_rate >> 16) & 0xff;
++ extradata[OPUS_EXTRADATA_SAMPLE_RATE_OFFSET+3] = (sample_rate >> 24) & 0xff;
++ extradata[OPUS_EXTRADATA_GAIN_OFFSET] = (gain_db >> 0) & 0xff;
++ extradata[OPUS_EXTRADATA_GAIN_OFFSET+1] = (gain_db >> 8) & 0xff;
+
+ channel_count = extradata[OPUS_EXTRADATA_CHANNELS_OFFSET];
+
+--- qtwebengine/src/3rdparty/chromium/media/renderers/paint_canvas_video_renderer.cc
++++ qtwebengine/src/3rdparty/chromium/media/renderers/paint_canvas_video_renderer.cc
+@@ -31,8 +31,7 @@
+
+ // Skia internal format depends on a platform. On Android it is ABGR, on others
+ // it is ARGB.
+-#if SK_B32_SHIFT == 0 && SK_G32_SHIFT == 8 && SK_R32_SHIFT == 16 && \
+- SK_A32_SHIFT == 24
++#if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
+ #define LIBYUV_I420_TO_ARGB libyuv::I420ToARGB
+ #define LIBYUV_I422_TO_ARGB libyuv::I422ToARGB
+ #define LIBYUV_I444_TO_ARGB libyuv::I444ToARGB
+@@ -42,8 +41,7 @@
+ #define LIBYUV_I010_TO_ARGB libyuv::I010ToARGB
+ #define LIBYUV_H010_TO_ARGB libyuv::H010ToARGB
+ #define LIBYUV_NV12_TO_ARGB libyuv::NV12ToARGB
+-#elif SK_R32_SHIFT == 0 && SK_G32_SHIFT == 8 && SK_B32_SHIFT == 16 && \
+- SK_A32_SHIFT == 24
++#elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
+ #define LIBYUV_I420_TO_ARGB libyuv::I420ToABGR
+ #define LIBYUV_I422_TO_ARGB libyuv::I422ToABGR
+ #define LIBYUV_I444_TO_ARGB libyuv::I444ToABGR
+--- qtwebengine/src/3rdparty/chromium/net/cert/crl_set.cc
++++ qtwebengine/src/3rdparty/chromium/net/cert/crl_set.cc
+@@ -6,6 +6,7 @@
+
+ #include "base/base64.h"
+ #include "base/json/json_reader.h"
++#include "base/sys_byteorder.h"
+ #include "base/time/time.h"
+ #include "base/trace_event/trace_event.h"
+ #include "base/values.h"
+@@ -44,9 +45,9 @@ base::DictionaryValue* ReadHeader(base::StringPiece* data) {
+ uint16_t header_len;
+ if (data->size() < sizeof(header_len))
+ return nullptr;
+- // Assumes little-endian.
+ memcpy(&header_len, data->data(), sizeof(header_len));
+ data->remove_prefix(sizeof(header_len));
++ header_len = base::ByteSwapToLE16(header_len);
+
+ if (data->size() < header_len)
+ return nullptr;
+@@ -79,9 +80,9 @@ bool ReadCRL(base::StringPiece* data,
+ uint32_t num_serials;
+ if (data->size() < sizeof(num_serials))
+ return false;
+- // Assumes little endian.
+ memcpy(&num_serials, data->data(), sizeof(num_serials));
+ data->remove_prefix(sizeof(num_serials));
++ num_serials = base::ByteSwapToLE32(num_serials);
+
+ if (num_serials > 32 * 1024 * 1024) // Sanity check.
+ return false;
+@@ -192,15 +193,6 @@ CRLSet::~CRLSet() = default;
+ // static
+ bool CRLSet::Parse(base::StringPiece data, scoped_refptr<CRLSet>* out_crl_set) {
+ TRACE_EVENT0(NetTracingCategory(), "CRLSet::Parse");
+-// Other parts of Chrome assume that we're little endian, so we don't lose
+-// anything by doing this.
+-#if defined(__BYTE_ORDER)
+- // Linux check
+- static_assert(__BYTE_ORDER == __LITTLE_ENDIAN, "assumes little endian");
+-#elif defined(__BIG_ENDIAN__)
+-// Mac check
+-#error assumes little endian
+-#endif
+
+ std::unique_ptr<base::DictionaryValue> header_dict(ReadHeader(&data));
+ if (!header_dict.get())
+--- qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/seccomp_macros.h
++++ qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/seccomp_macros.h
+@@ -377,6 +377,7 @@ typedef struct pt_regs regs_struct;
+
+ #define SECCOMP_NR_IDX (offsetof(struct arch_seccomp_data, nr))
+ #define SECCOMP_ARCH_IDX (offsetof(struct arch_seccomp_data, arch))
++#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+ #define SECCOMP_IP_MSB_IDX \
+ (offsetof(struct arch_seccomp_data, instruction_pointer) + 4)
+ #define SECCOMP_IP_LSB_IDX \
+@@ -385,6 +386,16 @@ typedef struct pt_regs regs_struct;
+ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 4)
+ #define SECCOMP_ARG_LSB_IDX(nr) \
+ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 0)
++#else
++#define SECCOMP_IP_MSB_IDX \
++ (offsetof(struct arch_seccomp_data, instruction_pointer) + 0)
++#define SECCOMP_IP_LSB_IDX \
++ (offsetof(struct arch_seccomp_data, instruction_pointer) + 4)
++#define SECCOMP_ARG_MSB_IDX(nr) \
++ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 0)
++#define SECCOMP_ARG_LSB_IDX(nr) \
++ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 4)
++#endif
+
+ #define SECCOMP_PT_RESULT(_regs) (_regs).gpr[3]
+ #define SECCOMP_PT_SYSCALL(_regs) (_regs).gpr[0]
+--- qtwebengine/src/3rdparty/chromium/skia/config/SkUserConfig.h
++++ qtwebengine/src/3rdparty/chromium/skia/config/SkUserConfig.h
+@@ -90,11 +90,18 @@ SK_API void SkDebugf_FileLine(const char* file, int line, bool fatal,
+ __FILE__, __LINE__, #cond); } } while (false)
+
+ #if !defined(ANDROID) // On Android, we use the skia default settings.
++#if defined(SK_CPU_BENDIAN)
++#define SK_A32_SHIFT 0
++#define SK_R32_SHIFT 8
++#define SK_G32_SHIFT 16
++#define SK_B32_SHIFT 24
++#else
+ #define SK_A32_SHIFT 24
+ #define SK_R32_SHIFT 16
+ #define SK_G32_SHIFT 8
+ #define SK_B32_SHIFT 0
+ #endif
++#endif
+
+ #if defined(SK_BUILD_FOR_MAC)
+
+@@ -108,17 +115,6 @@ SK_API void SkDebugf_FileLine(const char* file, int line, bool fatal,
+ // we should revisit this choice...
+ #define SK_USE_FREETYPE_EMBOLDEN
+
+-#if defined(SK_BUILD_FOR_UNIX) && defined(SK_CPU_BENDIAN)
+-// Above we set the order for ARGB channels in registers. I suspect that, on
+-// big endian machines, you can keep this the same and everything will work.
+-// The in-memory order will be different, of course, but as long as everything
+-// is reading memory as words rather than bytes, it will all work. However, if
+-// you find that colours are messed up I thought that I would leave a helpful
+-// locator for you. Also see the comments in
+-// base/gfx/bitmap_platform_device_linux.h
+-#error Read the comment at this location
+-#endif
+-
+ #endif
+
+ // The default crash macro writes to badbeef which can cause some strange
+--- qtwebengine/src/3rdparty/chromium/skia/ext/image_operations_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/skia/ext/image_operations_unittest.cc
+@@ -18,9 +18,11 @@
+ #include "skia/ext/image_operations.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+ #include "third_party/skia/include/core/SkBitmap.h"
++#include "third_party/skia/include/core/SkColorPriv.h"
+ #include "third_party/skia/include/core/SkColorSpace.h"
+ #include "third_party/skia/include/core/SkImageInfo.h"
+ #include "third_party/skia/include/core/SkRect.h"
++#include "third_party/skia/include/core/SkUnPreMultiply.h"
+ #include "ui/gfx/codec/png_codec.h"
+ #include "ui/gfx/geometry/size.h"
+
+@@ -151,7 +153,7 @@ void DrawCheckerToBitmap(int w, int h,
+
+ bool use_color2 = (x_bit != y_bit); // xor
+
+- *bmp->getAddr32(x, y) = (use_color2 ? color2 : color1);
++ *bmp->getAddr32(x, y) = SkPreMultiplyColor(use_color2 ? color2 : color1);
+ }
+ }
+ }
+@@ -273,7 +275,7 @@ void CheckResizeMethodShouldAverageGrid(
+ std::max(tested_pixel.max_color_distance,
+ tested_method.max_color_distance_override);
+
+- const SkColor actual_color = *dest.getAddr32(x, y);
++ const SkColor actual_color = SkUnPreMultiply::PMColorToColor(*dest.getAddr32(x, y));
+
+ // Check that the pixels away from the border region are very close
+ // to the expected average color
+@@ -528,7 +530,7 @@ TEST(ImageOperations, ScaleUp) {
+ for (int src_y = 0; src_y < src_h; ++src_y) {
+ for (int src_x = 0; src_x < src_w; ++src_x) {
+ *src.getAddr32(src_x, src_y) =
+- SkColorSetARGB(255, 10 + src_x * 100, 10 + src_y * 100, 0);
++ SkPackARGB32(255, 10 + src_x * 100, 10 + src_y * 100, 0);
+ }
+ }
+
+@@ -552,7 +554,7 @@ TEST(ImageOperations, ScaleUp) {
+ lanczos3(src_x + 0.5 - dst_x_in_src) *
+ lanczos3(src_y + 0.5 - dst_y_in_src);
+ sum += coeff;
+- SkColor tmp = *src.getAddr32(src_x, src_y);
++ SkColor tmp = SkUnPreMultiply::PMColorToColor(*src.getAddr32(src_x, src_y));
+ a += coeff * SkColorGetA(tmp);
+ r += coeff * SkColorGetR(tmp);
+ g += coeff * SkColorGetG(tmp);
+@@ -571,7 +573,7 @@ TEST(ImageOperations, ScaleUp) {
+ if (r > 255.0f) r = 255.0f;
+ if (g > 255.0f) g = 255.0f;
+ if (b > 255.0f) b = 255.0f;
+- SkColor dst_color = *dst.getAddr32(dst_x, dst_y);
++ SkColor dst_color = SkUnPreMultiply::PMColorToColor(*dst.getAddr32(dst_x, dst_y));
+ EXPECT_LE(fabs(SkColorGetA(dst_color) - a), 1.5f);
+ EXPECT_LE(fabs(SkColorGetR(dst_color) - r), 1.5f);
+ EXPECT_LE(fabs(SkColorGetG(dst_color) - g), 1.5f);
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/gpu/webgl_image_conversion.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/gpu/webgl_image_conversion.cc
+@@ -456,8 +456,8 @@ void Unpack<WebGLImageConversion::kDataFormatBGRA8, uint8_t, uint8_t>(
+ for (unsigned i = 0; i < pixels_per_row; ++i) {
+ uint32_t bgra = source32[i];
+ #if defined(ARCH_CPU_BIG_ENDIAN)
+- uint32_t brMask = 0xff00ff00;
+- uint32_t gaMask = 0x00ff00ff;
++ uint32_t br_mask = 0xff00ff00;
++ uint32_t ga_mask = 0x00ff00ff;
+ #else
+ uint32_t br_mask = 0x00ff00ff;
+ uint32_t ga_mask = 0xff00ff00;
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/gpu/webgl_image_conversion_test.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/gpu/webgl_image_conversion_test.cc
+@@ -76,9 +76,9 @@ TEST_F(WebGLImageConversionTest, convertBGRA8toRGBA8) {
+ 0x34567888, 0x12345678, 0x34567888,
+ 0x12345678, 0x34567888, 0x12345678};
+ #if defined(ARCH_CPU_BIG_ENDIAN)
+- uint32_t expectedData[9] = {0x56341278, 0x78563488, 0x56341278,
+- 0x78563488, 0x56341278, 0x78563488,
+- 0x56341278, 0x78563488, 0x56341278};
++ uint32_t expected_data[9] = {0x56341278, 0x78563488, 0x56341278,
++ 0x78563488, 0x56341278, 0x78563488,
++ 0x56341278, 0x78563488, 0x56341278};
+ #else
+ uint32_t expected_data[9] = {0x12785634, 0x34887856, 0x12785634,
+ 0x34887856, 0x12785634, 0x34887856,
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/graphics_context_test.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/graphics_context_test.cc
+@@ -52,7 +52,7 @@ namespace blink {
+ { \
+ for (int y = opaqueRect.Y(); y < opaqueRect.MaxY(); ++y) \
+ for (int x = opaqueRect.X(); x < opaqueRect.MaxX(); ++x) { \
+- int alpha = *bitmap.getAddr32(x, y) >> 24; \
++ int alpha = SkGetPackedA32(*bitmap.getAddr32(x, y)); \
+ EXPECT_EQ(255, alpha); \
+ } \
+ }
+@@ -61,12 +61,16 @@ namespace blink {
+ { \
+ for (int y = 0; y < bitmap.height(); ++y) \
+ for (int x = 0; x < bitmap.width(); ++x) { \
+- int alpha = *bitmap.getAddr32(x, y) >> 24; \
++ int alpha = SkGetPackedA32(*bitmap.getAddr32(x, y)); \
+ bool opaque = opaqueRect.Contains(x, y); \
+ EXPECT_EQ(opaque, alpha == 255); \
+ } \
+ }
+
++static inline uint32_t PackARGB32(uint32_t argb) {
++ return SkPackARGB32NoCheck(argb>>24, (argb<<8)>>24, (argb<<16)>>24, (argb<<24)>>24);
++}
++
+ TEST(GraphicsContextTest, Recording) {
+ SkBitmap bitmap;
+ bitmap.allocN32Pixels(100, 100);
+@@ -184,10 +188,10 @@ class GraphicsContextHighConstrastTest : public testing::Test {
+ TEST_F(GraphicsContextHighConstrastTest, MAYBE_NoHighContrast) {
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xffff0000, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xff808080, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xffff0000), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xff808080), *bitmap_.getAddr32(3, 0));
+ }
+
+ // TODO(crbug.com/850782): Reenable this.
+@@ -205,10 +209,10 @@ TEST_F(GraphicsContextHighConstrastTest, MAYBE_HighContrastOff) {
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xffff0000, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xff808080, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xffff0000), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xff808080), *bitmap_.getAddr32(3, 0));
+ }
+
+ // Simple invert for testing. Each color component |c|
+@@ -228,10 +232,10 @@ TEST_F(GraphicsContextHighConstrastTest, MAYBE_SimpleInvertForTesting) {
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xff00ffff, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xff7f7f7f, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xff00ffff), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xff7f7f7f), *bitmap_.getAddr32(3, 0));
+ }
+
+ // Invert brightness (with gamma correction).
+@@ -250,10 +254,10 @@ TEST_F(GraphicsContextHighConstrastTest, MAYBE_InvertBrightness) {
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xff00ffff, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xffdddddd, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xff00ffff), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xffdddddd), *bitmap_.getAddr32(3, 0));
+ }
+
+ // Invert lightness (in HSL space).
+@@ -272,10 +276,10 @@ TEST_F(GraphicsContextHighConstrastTest, MAYBE_InvertLightness) {
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xffff0000, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xffdddddd, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xffff0000), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xffdddddd), *bitmap_.getAddr32(3, 0));
+ }
+
+ // Invert lightness plus grayscale.
+@@ -288,10 +292,10 @@ TEST_F(GraphicsContextHighConstrastTest, InvertLightnessPlusGrayscale) {
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xffe2e2e2, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xffdddddd, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xffe2e2e2), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xffdddddd), *bitmap_.getAddr32(3, 0));
+ }
+
+ // TODO(crbug.com/850782): Reenable this.
+@@ -309,10 +313,10 @@ TEST_F(GraphicsContextHighConstrastTest, MAYBE_InvertLightnessPlusContrast) {
+
+ DrawColorsToContext();
+
+- EXPECT_EQ(0xffffffff, *bitmap_.getAddr32(0, 0));
+- EXPECT_EQ(0xff000000, *bitmap_.getAddr32(1, 0));
+- EXPECT_EQ(0xffff0000, *bitmap_.getAddr32(2, 0));
+- EXPECT_EQ(0xffeeeeee, *bitmap_.getAddr32(3, 0));
++ EXPECT_EQ(PackARGB32(0xffffffff), *bitmap_.getAddr32(0, 0));
++ EXPECT_EQ(PackARGB32(0xff000000), *bitmap_.getAddr32(1, 0));
++ EXPECT_EQ(PackARGB32(0xffff0000), *bitmap_.getAddr32(2, 0));
++ EXPECT_EQ(PackARGB32(0xffeeeeee), *bitmap_.getAddr32(3, 0));
+ }
+
+ } // namespace blink
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/highcontrast/highcontrast_classifier.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/highcontrast/highcontrast_classifier.cc
+@@ -1060,55 +1060,47 @@ void DequantizeMinFirst(const int32_t rank,
+
+ // -----------------------------------------------------------------------------
+ // CONSTANTS
+-// Note that for now, endianness of the target machine needs to match that of
+-// the one training was performed on.
+ // -----------------------------------------------------------------------------
+ const int32_t dnn_hiddenlayer_0_weights_part_0_shape[2] = {4, 10};
+ const union {
+- uint8_t bytes[160];
+ float values[40];
+ } dnn_hiddenlayer_0_weights_part_0 = {{
+- 0xbc, 0x22, 0x0a, 0xbf, 0xb4, 0x46, 0x8c, 0x3f, 0xba, 0x31, 0x34, 0xbe,
+- 0x4c, 0x65, 0xdb, 0xbe, 0xf0, 0x54, 0x5e, 0xbe, 0xc1, 0x5d, 0xb3, 0x3f,
+- 0xf4, 0xe6, 0x15, 0xbf, 0x05, 0xc6, 0x34, 0xbf, 0xc0, 0x37, 0x7e, 0xbd,
+- 0x6c, 0x35, 0x0b, 0xbf, 0xca, 0x53, 0x26, 0xbf, 0x58, 0xb4, 0x87, 0x3f,
+- 0x37, 0xee, 0x39, 0xbf, 0xda, 0xfa, 0xf9, 0xbe, 0x97, 0xc1, 0x06, 0xbf,
+- 0xf9, 0x4e, 0x81, 0x3f, 0xb2, 0x44, 0x85, 0xbf, 0x7f, 0x98, 0x7c, 0x3d,
+- 0x15, 0x26, 0xbc, 0xbe, 0x5c, 0x48, 0x05, 0x3f, 0xc8, 0xaa, 0xa1, 0xbd,
+- 0x35, 0xb3, 0x43, 0xbe, 0xeb, 0x46, 0x91, 0x3f, 0x80, 0x71, 0xe3, 0x3c,
+- 0xd1, 0x98, 0x79, 0x3f, 0x3c, 0xd0, 0x0d, 0xbf, 0x1e, 0x02, 0xd3, 0x3e,
+- 0x5d, 0x4b, 0xa2, 0xbf, 0x68, 0xac, 0xaa, 0xbd, 0xf8, 0xe1, 0x75, 0x3e,
+- 0x4a, 0x9c, 0x27, 0xbe, 0xf8, 0xae, 0xb2, 0xbe, 0x7f, 0x9d, 0x91, 0x3f,
+- 0x1e, 0x8b, 0xa8, 0xbe, 0x35, 0x7e, 0xb2, 0x3f, 0xbe, 0x8c, 0xd3, 0xbe,
+- 0xf9, 0xcd, 0xb5, 0x3f, 0xa1, 0x50, 0xaa, 0x3f, 0xe4, 0x6d, 0xdd, 0xbe,
+- 0x0d, 0xce, 0xd3, 0xbe,
++ -0.539592504501343, 1.09590768814087, -0.175970941781998, -0.428507208824158,
++ -0.217120885848999, 1.40129864215851, -0.5855553150177, -0.706146538257599,
++ -0.0620648860931396, -0.543783903121948, -0.649716019630432, 1.06019115447998,
++ -0.726291120052338, -0.488241970539093, -0.526391446590424, 1.01022255420685,
++ -1.04115891456604, 0.0616688691079617, -0.367478042840958, 0.520635366439819,
++ -0.0789390206336975, -0.19111330807209, 1.13497674465179, 0.0277640819549561,
++ 0.974988043308258, -0.553958654403687, 0.412125527858734, -1.2679249048233,
++ -0.0833366513252258, 0.240119814872742, -0.163682132959366, -0.34899115562439,
++ 1.1376188993454, -0.329186379909515, 1.3944765329361, -0.413183152675629,
++ 1.42034828662872, 1.33058559894562, -0.432479023933411, -0.413681417703629
+ }};
+ const int32_t dnn_hiddenlayer_0_biases_part_0_shape[1] = {10};
+ const union {
+- uint8_t bytes[40];
+ float values[10];
+ } dnn_hiddenlayer_0_biases_part_0 = {{
+- 0x00, 0x00, 0x00, 0x00, 0xbf, 0x6a, 0x53, 0x3e, 0xd3, 0xc1,
+- 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xd8, 0xc0, 0x3e,
+- 0xca, 0xe7, 0x35, 0x3e, 0x23, 0xa5, 0x44, 0x3f, 0x61, 0xfd,
+- 0xd2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xe0, 0x43, 0x3c,
++ 0.0, 0.206461891531944,
++ 0.407728761434555, 0.0,
++ 0.376653373241425, 0.177642017602921,
++ 0.76814478635788, 0.412089377641678,
++ 0.0, 0.0119554307311773
+ }};
+ const int32_t dnn_logits_biases_part_0_shape[1] = {1};
+ const union {
+- uint8_t bytes[4];
+ float values[1];
+ } dnn_logits_biases_part_0 = {{
+- 0x75, 0xca, 0xd7, 0xbe,
++ -0.421466499567032
+ }};
+ const int32_t dnn_logits_weights_part_0_shape[2] = {10, 1};
+ const union {
+- uint8_t bytes[40];
+ float values[10];
+ } dnn_logits_weights_part_0 = {{
+- 0x13, 0x12, 0x39, 0x3f, 0xf3, 0xa5, 0xc2, 0xbf, 0x81, 0x7f,
+- 0xbe, 0x3f, 0xf8, 0x17, 0x26, 0x3e, 0xa4, 0x19, 0xa6, 0x3f,
+- 0xf0, 0xc9, 0xb7, 0xbf, 0x6a, 0x99, 0xd2, 0x3f, 0x8a, 0x7d,
+- 0xe9, 0x3f, 0x83, 0x9a, 0x3a, 0xbf, 0xf1, 0x6c, 0x08, 0x3e,
++ 0.722932040691376, -1.52068936824799,
++ 1.48826611042023, 0.162200808525085,
++ 1.29765748977661, -1.43585014343262,
++ 1.64530682563782, 1.82414364814758,
++ -0.728920161724091, 0.133228078484535
+ }};
+
+ } // anonymous namespace
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_reader.h
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/bmp/bmp_image_reader.h
+@@ -37,6 +37,7 @@
+ #include "third_party/blink/renderer/platform/wtf/allocator.h"
+ #include "third_party/blink/renderer/platform/wtf/cpu.h"
+ #include "third_party/blink/renderer/platform/wtf/noncopyable.h"
++#include "base/sys_byteorder.h"
+
+ namespace blink {
+
+@@ -50,11 +51,11 @@ class PLATFORM_EXPORT BMPImageReader final {
+ // Read a value from |buffer|, converting to an int assuming little
+ // endianness
+ static inline uint16_t ReadUint16(const char* buffer) {
+- return *reinterpret_cast<const uint16_t*>(buffer);
++ return base::ByteSwapToLE16(*reinterpret_cast<const uint16_t*>(buffer));
+ }
+
+ static inline uint32_t ReadUint32(const char* buffer) {
+- return *reinterpret_cast<const uint32_t*>(buffer);
++ return base::ByteSwapToLE32(*reinterpret_cast<const uint32_t*>(buffer));
+ }
+
+ // |parent| is the decoder that owns us.
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/jpeg/jpeg_image_decoder.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/jpeg/jpeg_image_decoder.cc
+@@ -49,23 +49,30 @@ extern "C" {
+ #include <setjmp.h>
+ }
+
+-#if defined(ARCH_CPU_BIG_ENDIAN)
+-#error Blink assumes a little-endian target.
+-#endif
+-
+ #if defined(JCS_ALPHA_EXTENSIONS)
+ #define TURBO_JPEG_RGB_SWIZZLE
+-#if SK_B32_SHIFT // Output little-endian RGBA pixels (Android).
++#if SK_PMCOLOR_BYTE_ORDER(R, G, B, A)
+ inline J_COLOR_SPACE rgbOutputColorSpace() {
+ return JCS_EXT_RGBA;
+ }
+-#else // Output little-endian BGRA pixels.
++#elif SK_PMCOLOR_BYTE_ORDER(B, G, R, A)
+ inline J_COLOR_SPACE rgbOutputColorSpace() {
+ return JCS_EXT_BGRA;
+ }
++#elif SK_PMCOLOR_BYTE_ORDER(A, R, G, B)
++inline J_COLOR_SPACE rgbOutputColorSpace() {
++ return JCS_EXT_ARGB;
++}
++#elif SK_PMCOLOR_BYTE_ORDER(A, B, G, R)
++inline J_COLOR_SPACE rgbOutputColorSpace() {
++ return JCS_EXT_ABGR;
++}
++#else
++#error Component order not supported by libjpeg_turbo
+ #endif
+ inline bool turboSwizzled(J_COLOR_SPACE colorSpace) {
+- return colorSpace == JCS_EXT_RGBA || colorSpace == JCS_EXT_BGRA;
++ return colorSpace == JCS_EXT_RGBA || colorSpace == JCS_EXT_BGRA ||
++ colorSpace == JCS_EXT_ABGR || colorSpace == JCS_EXT_ARGB;
+ }
+ #else
+ inline J_COLOR_SPACE rgbOutputColorSpace() {
+--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/webp/webp_image_decoder.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/image-decoders/webp/webp_image_decoder.cc
+@@ -32,18 +32,20 @@
+ #include "third_party/blink/renderer/platform/histogram.h"
+ #include "third_party/skia/include/core/SkData.h"
+
+-#if defined(ARCH_CPU_BIG_ENDIAN)
+-#error Blink assumes a little-endian target.
+-#endif
+-
+-#if SK_B32_SHIFT // Output little-endian RGBA pixels (Android).
++#if SK_PMCOLOR_BYTE_ORDER(R, G, B, A)
+ inline WEBP_CSP_MODE outputMode(bool hasAlpha) {
+ return hasAlpha ? MODE_rgbA : MODE_RGBA;
+ }
+-#else // Output little-endian BGRA pixels.
++#elif SK_PMCOLOR_BYTE_ORDER(B, G, R, A)
+ inline WEBP_CSP_MODE outputMode(bool hasAlpha) {
+ return hasAlpha ? MODE_bgrA : MODE_BGRA;
+ }
++#elif SK_PMCOLOR_BYTE_ORDER(A, R, G, B)
++inline WEBP_CSP_MODE outputMode(bool hasAlpha) {
++ return hasAlpha ? MODE_Argb : MODE_ARGB;
++}
++#else
++#error Component order not supported by libwebp
+ #endif
+
+ namespace {
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/asn1/a_int.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/asn1/a_int.c
+@@ -369,7 +369,9 @@ int ASN1_INTEGER_set_uint64(ASN1_INTEGER *out, uint64_t v)
+
+ OPENSSL_free(out->data);
+ out->data = newdata;
++#ifndef OPENSSL_BIGENDIAN
+ v = CRYPTO_bswap8(v);
++#endif
+ memcpy(out->data, &v, sizeof(v));
+
+ out->type = V_ASN1_INTEGER;
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/chacha/chacha.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/chacha/chacha.c
+@@ -29,6 +29,14 @@
+ (((uint32_t)((p)[0])) | ((uint32_t)((p)[1]) << 8) | \
+ ((uint32_t)((p)[2]) << 16) | ((uint32_t)((p)[3]) << 24))
+
++#define U32TO8_LITTLE(p, v) \
++ { \
++ (p)[0] = (v >> 0) & 0xff; \
++ (p)[1] = (v >> 8) & 0xff; \
++ (p)[2] = (v >> 16) & 0xff; \
++ (p)[3] = (v >> 24) & 0xff; \
++ }
++
+ // sigma contains the ChaCha constants, which happen to be an ASCII string.
+ static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
+ '2', '-', 'b', 'y', 't', 'e', ' ', 'k' };
+@@ -45,9 +53,27 @@ static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
+ void CRYPTO_hchacha20(uint8_t out[32], const uint8_t key[32],
+ const uint8_t nonce[16]) {
+ uint32_t x[16];
+- OPENSSL_memcpy(x, sigma, sizeof(sigma));
+- OPENSSL_memcpy(&x[4], key, 32);
+- OPENSSL_memcpy(&x[12], nonce, 16);
++ int i;
++
++ x[0] = U8TO32_LITTLE(sigma + 0);
++ x[1] = U8TO32_LITTLE(sigma + 4);
++ x[2] = U8TO32_LITTLE(sigma + 8);
++ x[3] = U8TO32_LITTLE(sigma + 12);
++
++ x[4] = U8TO32_LITTLE(key + 0);
++ x[5] = U8TO32_LITTLE(key + 4);
++ x[6] = U8TO32_LITTLE(key + 8);
++ x[7] = U8TO32_LITTLE(key + 12);
++
++ x[8] = U8TO32_LITTLE(key + 16);
++ x[9] = U8TO32_LITTLE(key + 20);
++ x[10] = U8TO32_LITTLE(key + 24);
++ x[11] = U8TO32_LITTLE(key + 28);
++
++ x[12] = U8TO32_LITTLE(nonce + 0);
++ x[13] = U8TO32_LITTLE(nonce + 4);
++ x[14] = U8TO32_LITTLE(nonce + 8);
++ x[15] = U8TO32_LITTLE(nonce + 12);
+
+ for (size_t i = 0; i < 20; i += 2) {
+ QUARTERROUND(0, 4, 8, 12)
+@@ -60,8 +86,10 @@ void CRYPTO_hchacha20(uint8_t out[32], const uint8_t key[32],
+ QUARTERROUND(3, 4, 9, 14)
+ }
+
+- OPENSSL_memcpy(out, &x[0], sizeof(uint32_t) * 4);
+- OPENSSL_memcpy(&out[16], &x[12], sizeof(uint32_t) * 4);
++ for (i = 0; i < 4; ++i) {
++ U32TO8_LITTLE(out + 4 * i, x[i]);
++ U32TO8_LITTLE(&out[16] + 4 * i, x[12+i]);
++ }
+ }
+
+ #if !defined(OPENSSL_NO_ASM) && \
+@@ -105,14 +133,6 @@ void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in, size_t in_len,
+
+ #else
+
+-#define U32TO8_LITTLE(p, v) \
+- { \
+- (p)[0] = (v >> 0) & 0xff; \
+- (p)[1] = (v >> 8) & 0xff; \
+- (p)[2] = (v >> 16) & 0xff; \
+- (p)[3] = (v >> 24) & 0xff; \
+- }
+-
+ // chacha_core performs 20 rounds of ChaCha on the input words in
+ // |input| and writes the 64 output bytes to |output|.
+ static void chacha_core(uint8_t output[64], const uint32_t input[16]) {
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.c
+@@ -625,7 +625,11 @@ static void gcm_siv_crypt(uint8_t *out, const uint8_t *in, size_t in_len,
+ for (size_t done = 0; done < in_len;) {
+ uint8_t keystream[AES_BLOCK_SIZE];
+ enc_block(counter.c, keystream, key);
++#ifdef OPENSSL_BIGENDIAN
++ counter.w[0] = CRYPTO_bswap4(CRYPTO_bswap4(counter.w[0]) + 1);
++#else
+ counter.w[0]++;
++#endif
+
+ size_t todo = AES_BLOCK_SIZE;
+ if (in_len - done < todo) {
+@@ -673,8 +677,13 @@ static void gcm_siv_polyval(
+ } bitlens;
+ } length_block;
+
++#ifdef OPENSSL_BIGENDIAN
++ length_block.bitlens.ad = CRYPTO_bswap8(ad_len * 8);
++ length_block.bitlens.in = CRYPTO_bswap8(in_len * 8);
++#else
+ length_block.bitlens.ad = ad_len * 8;
+ length_block.bitlens.in = in_len * 8;
++#endif
+ CRYPTO_POLYVAL_update_blocks(&polyval_ctx, length_block.c,
+ sizeof(length_block));
+
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/compiler_test.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/compiler_test.cc
+@@ -40,9 +40,13 @@ static void CheckRepresentation(T value) {
+ UnsignedT value_u = static_cast<UnsignedT>(value);
+ EXPECT_EQ(sizeof(UnsignedT), sizeof(T));
+
+- // Integers must be little-endian.
++ // Integers must be either big-endian or little-endian.
+ uint8_t expected[sizeof(UnsignedT)];
++#ifdef OPENSSL_BIGENDIAN
++ for (size_t i = sizeof(UnsignedT); i-- > 0; ) {
++#else
+ for (size_t i = 0; i < sizeof(UnsignedT); i++) {
++#endif
+ expected[i] = static_cast<uint8_t>(value_u);
+ // Divide instead of right-shift to appease compilers that warn if |T| is a
+ // char. The explicit cast is also needed to appease MSVC if integer
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/curve25519/spake25519.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/curve25519/spake25519.c
+@@ -339,8 +339,17 @@ static void scalar_double(scalar *s) {
+ uint32_t carry = 0;
+
+ for (size_t i = 0; i < 8; i++) {
+- const uint32_t carry_out = s->words[i] >> 31;
+- s->words[i] = (s->words[i] << 1) | carry;
++#ifdef OPENSSL_BIGENDIAN
++ const uint32_t si = CRYPTO_bswap4(s->words[i]);
++#else
++ const uint32_t si = s->words[i];
++#endif
++ const uint32_t carry_out = si >> 31;
++#ifdef OPENSSL_BIGENDIAN
++ s->words[i] = CRYPTO_bswap4((si << 1) | carry);
++#else
++ s->words[i] = (si << 1) | carry;
++#endif
+ carry = carry_out;
+ }
+ }
+@@ -350,8 +359,13 @@ static void scalar_add(scalar *dest, const scalar *src) {
+ uint32_t carry = 0;
+
+ for (size_t i = 0; i < 8; i++) {
++#ifdef OPENSSL_BIGENDIAN
++ uint64_t tmp = ((uint64_t)CRYPTO_bswap4(dest->words[i]) + CRYPTO_bswap4(src->words[i])) + carry;
++ dest->words[i] = CRYPTO_bswap4((uint32_t)tmp);
++#else
+ uint64_t tmp = ((uint64_t)dest->words[i] + src->words[i]) + carry;
+ dest->words[i] = (uint32_t)tmp;
++#endif
+ carry = (uint32_t)(tmp >> 32);
+ }
+ }
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/evp/scrypt.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/evp/scrypt.c
+@@ -196,10 +196,28 @@ int EVP_PBE_scrypt(const char *password, size_t password_len,
+ goto err;
+ }
+
++#ifdef OPENSSL_BIGENDIAN
++ uint32_t *B32 = B->words;
++ size_t B_words = B_bytes >> 2;
++ do {
++ *B32 = CRYPTO_bswap4(*B32);
++ B32++;
++ } while(--B_words);
++#endif
++
+ for (uint64_t i = 0; i < p; i++) {
+ scryptROMix(B + 2 * r * i, r, N, T, V);
+ }
+
++#ifdef OPENSSL_BIGENDIAN
++ B32 = B->words;
++ B_words = B_bytes >> 2;
++ do {
++ *B32 = CRYPTO_bswap4(*B32);
++ B32++;
++ } while(--B_words);
++#endif
++
+ if (!PKCS5_PBKDF2_HMAC(password, password_len, (const uint8_t *)B, B_bytes, 1,
+ EVP_sha256(), key_len, out_key)) {
+ goto err;
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.c
+@@ -136,9 +136,13 @@ BIGNUM *BN_le2bn(const uint8_t *in, size_t len, BIGNUM *ret) {
+ // Make sure the top bytes will be zeroed.
+ ret->d[num_words - 1] = 0;
+
+- // We only support little-endian platforms, so we can simply memcpy the
+- // internal representation.
++#ifdef OPENSSL_BIGENDIAN
++ uint8_t *out = (uint8_t *)ret->d;
++ for (size_t i = 0; i < len; i++)
++ out[i ^ (BN_BYTES-1)] = in[i];
++#else
+ OPENSSL_memcpy(ret->d, in, len);
++#endif
+ return ret;
+ }
+
+@@ -157,7 +161,11 @@ size_t BN_bn2bin(const BIGNUM *in, uint8_t *out) {
+ static int fits_in_bytes(const uint8_t *bytes, size_t num_bytes, size_t len) {
+ uint8_t mask = 0;
+ for (size_t i = len; i < num_bytes; i++) {
++#ifdef OPENSSL_BIGENDIAN
++ mask |= bytes[i ^ (BN_BYTES-1)];
++#else
+ mask |= bytes[i];
++#endif
+ }
+ return mask == 0;
+ }
+@@ -172,9 +180,13 @@ int BN_bn2le_padded(uint8_t *out, size_t len, const BIGNUM *in) {
+ num_bytes = len;
+ }
+
+- // We only support little-endian platforms, so we can simply memcpy into the
+- // internal representation.
++#ifdef OPENSSL_BIGENDIAN
++ for (size_t i = 0; i < num_bytes; i++) {
++ out[i] = bytes[i ^ (BN_BYTES-1)];
++ }
++#else
+ OPENSSL_memcpy(out, bytes, num_bytes);
++#endif
+ // Pad out the rest of the buffer with zeroes.
+ OPENSSL_memset(out + num_bytes, 0, len - num_bytes);
+ return 1;
+@@ -190,11 +202,15 @@ int BN_bn2bin_padded(uint8_t *out, size_t len, const BIGNUM *in) {
+ num_bytes = len;
+ }
+
+- // We only support little-endian platforms, so we can simply write the buffer
+- // in reverse.
++#ifdef OPENSSL_BIGENDIAN
++ for (size_t i = 0; i < num_bytes; i++) {
++ out[len - i - 1] = bytes[i ^ (BN_BYTES-1)];
++ }
++#else
+ for (size_t i = 0; i < num_bytes; i++) {
+ out[len - i - 1] = bytes[i];
+ }
++#endif
+ // Pad out the rest of the buffer with zeroes.
+ OPENSSL_memset(out, 0, len - num_bytes);
+ return 1;
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.c
+@@ -80,7 +80,11 @@ static void digest_to_scalar(const EC_GROUP *group, EC_SCALAR *out,
+ }
+ OPENSSL_memset(out, 0, sizeof(EC_SCALAR));
+ for (size_t i = 0; i < digest_len; i++) {
++#ifdef OPENSSL_BIGENDIAN
++ out->bytes[i ^ (BN_BYTES-1)] = digest[digest_len - 1 - i];
++#else
+ out->bytes[i] = digest[digest_len - 1 - i];
++#endif
+ }
+
+ // If it is still too long, truncate remaining bits with a shift.
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.c
+@@ -78,6 +78,14 @@
+ } \
+ } while (0)
+
++#ifdef OPENSSL_BIGENDIAN
++#define GCM_bswap4(x) (x)
++#define GCM_bswap8(x) (x)
++#else
++#define GCM_bswap4 CRYPTO_bswap4
++#define GCM_bswap8 CRYPTO_bswap8
++#endif
++
+ // kSizeTWithoutLower4Bits is a mask that can be used to zero the lower four
+ // bits of a |size_t|.
+ static const size_t kSizeTWithoutLower4Bits = (size_t) -16;
+@@ -173,8 +181,8 @@ static void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]) {
+ Z.lo ^= Htable[nlo].lo;
+ }
+
+- Xi[0] = CRYPTO_bswap8(Z.hi);
+- Xi[1] = CRYPTO_bswap8(Z.lo);
++ Xi[0] = GCM_bswap8(Z.hi);
++ Xi[1] = GCM_bswap8(Z.lo);
+ }
+
+ // Streamed gcm_mult_4bit, see CRYPTO_gcm128_[en|de]crypt for
+@@ -233,8 +241,8 @@ static void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16],
+ Z.lo ^= Htable[nlo].lo;
+ }
+
+- Xi[0] = CRYPTO_bswap8(Z.hi);
+- Xi[1] = CRYPTO_bswap8(Z.lo);
++ Xi[0] = GCM_bswap8(Z.hi);
++ Xi[1] = GCM_bswap8(Z.lo);
+ } while (inp += 16, len -= 16);
+ }
+ #else // GHASH_ASM
+@@ -360,8 +368,8 @@ void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
+ OPENSSL_memcpy(H.c, gcm_key, 16);
+
+ // H is stored in host byte order
+- H.u[0] = CRYPTO_bswap8(H.u[0]);
+- H.u[1] = CRYPTO_bswap8(H.u[1]);
++ H.u[0] = GCM_bswap8(H.u[0]);
++ H.u[1] = GCM_bswap8(H.u[1]);
+
+ OPENSSL_memcpy(out_key, H.c, 16);
+
+@@ -474,15 +482,15 @@ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ GCM_MUL(ctx, Yi);
+ }
+ len0 <<= 3;
+- ctx->Yi.u[1] ^= CRYPTO_bswap8(len0);
++ ctx->Yi.u[1] ^= GCM_bswap8(len0);
+
+ GCM_MUL(ctx, Yi);
+- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
++ ctr = GCM_bswap4(ctx->Yi.d[3]);
+ }
+
+ (*ctx->gcm_key.block)(ctx->Yi.c, ctx->EK0.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ }
+
+ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
+@@ -580,7 +588,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ ctx->ares = 0;
+ }
+
+- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
++ ctr = GCM_bswap4(ctx->Yi.d[3]);
+
+ n = ctx->mres;
+ if (n) {
+@@ -602,7 +610,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ if (n == 0) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ }
+ ctx->Xi.c[n] ^= out[i] = in[i] ^ ctx->EKi.c[n];
+ n = (n + 1) % 16;
+@@ -621,7 +629,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ while (j) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ store_word_le(out + i,
+ load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)]);
+@@ -638,7 +646,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ while (len >= 16) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ store_word_le(out + i,
+ load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)]);
+@@ -653,7 +661,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ while (len >= 16) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ size_t tmp = load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)];
+ store_word_le(out + i, tmp);
+@@ -668,7 +676,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ if (len) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ while (len--) {
+ ctx->Xi.c[n] ^= out[n] = in[n] ^ ctx->EKi.c[n];
+ ++n;
+@@ -707,7 +715,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ ctx->ares = 0;
+ }
+
+- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
++ ctr = GCM_bswap4(ctx->Yi.d[3]);
+
+ n = ctx->mres;
+ if (n) {
+@@ -732,7 +740,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ if (n == 0) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ }
+ c = in[i];
+ out[i] = c ^ ctx->EKi.c[n];
+@@ -754,7 +762,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ while (j) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ store_word_le(out + i,
+ load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)]);
+@@ -771,7 +779,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ while (len >= 16) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ store_word_le(out + i,
+ load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)]);
+@@ -785,7 +793,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ while (len >= 16) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ for (size_t i = 0; i < 16; i += sizeof(size_t)) {
+ size_t c = load_word_le(in + i);
+ store_word_le(out + i, c ^ ctx->EKi.t[i / sizeof(size_t)]);
+@@ -800,7 +808,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ if (len) {
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ while (len--) {
+ uint8_t c = in[n];
+ ctx->Xi.c[n] ^= c;
+@@ -866,13 +874,13 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ }
+ #endif
+
+- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
++ ctr = GCM_bswap4(ctx->Yi.d[3]);
+
+ #if defined(GHASH)
+ while (len >= GHASH_CHUNK) {
+ (*stream)(in, out, GHASH_CHUNK / 16, key, ctx->Yi.c);
+ ctr += GHASH_CHUNK / 16;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ GHASH(ctx, out, GHASH_CHUNK);
+ out += GHASH_CHUNK;
+ in += GHASH_CHUNK;
+@@ -885,7 +893,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const AES_KEY *key,
+
+ (*stream)(in, out, j, key, ctx->Yi.c);
+ ctr += (unsigned int)j;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ in += i;
+ len -= i;
+ #if defined(GHASH)
+@@ -904,7 +912,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ if (len) {
+ (*ctx->gcm_key.block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ while (len--) {
+ ctx->Xi.c[n] ^= out[n] = in[n] ^ ctx->EKi.c[n];
+ ++n;
+@@ -970,14 +978,14 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ }
+ #endif
+
+- ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
++ ctr = GCM_bswap4(ctx->Yi.d[3]);
+
+ #if defined(GHASH)
+ while (len >= GHASH_CHUNK) {
+ GHASH(ctx, in, GHASH_CHUNK);
+ (*stream)(in, out, GHASH_CHUNK / 16, key, ctx->Yi.c);
+ ctr += GHASH_CHUNK / 16;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ out += GHASH_CHUNK;
+ in += GHASH_CHUNK;
+ len -= GHASH_CHUNK;
+@@ -1003,7 +1011,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ #endif
+ (*stream)(in, out, j, key, ctx->Yi.c);
+ ctr += (unsigned int)j;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ out += i;
+ in += i;
+ len -= i;
+@@ -1011,7 +1019,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const AES_KEY *key,
+ if (len) {
+ (*ctx->gcm_key.block)(ctx->Yi.c, ctx->EKi.c, key);
+ ++ctr;
+- ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
++ ctx->Yi.d[3] = GCM_bswap4(ctr);
+ while (len--) {
+ uint8_t c = in[n];
+ ctx->Xi.c[n] ^= c;
+@@ -1036,8 +1044,8 @@ int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const uint8_t *tag, size_t len) {
+ GCM_MUL(ctx, Xi);
+ }
+
+- alen = CRYPTO_bswap8(alen);
+- clen = CRYPTO_bswap8(clen);
++ alen = GCM_bswap8(alen);
++ clen = GCM_bswap8(clen);
+
+ ctx->Xi.u[0] ^= alen;
+ ctx->Xi.u[1] ^= clen;
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/internal.h
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/internal.h
+@@ -70,11 +70,17 @@ extern "C" {
+ static inline uint32_t GETU32(const void *in) {
+ uint32_t v;
+ OPENSSL_memcpy(&v, in, sizeof(v));
++#ifdef OPENSSL_BIGENDIAN
++ return v;
++#else
+ return CRYPTO_bswap4(v);
++#endif
+ }
+
+ static inline void PUTU32(void *out, uint32_t v) {
++#ifndef OPENSSL_BIGENDIAN
+ v = CRYPTO_bswap4(v);
++#endif
+ OPENSSL_memcpy(out, &v, sizeof(v));
+ }
+
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/polyval.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/modes/polyval.c
+@@ -32,16 +32,26 @@ static void byte_reverse(polyval_block *b) {
+ // the GHASH field, multiplies that by 'x' and serialises the result back into
+ // |b|, but with GHASH's backwards bit ordering.
+ static void reverse_and_mulX_ghash(polyval_block *b) {
++#ifdef OPENSSL_BIGENDIAN
++ uint64_t hi = CRYPTO_bswap8(b->u[0]);
++ uint64_t lo = CRYPTO_bswap8(b->u[1]);
++#else
+ uint64_t hi = b->u[0];
+ uint64_t lo = b->u[1];
++#endif
+ const crypto_word_t carry = constant_time_eq_w(hi & 1, 1);
+ hi >>= 1;
+ hi |= lo << 63;
+ lo >>= 1;
+ lo ^= ((uint64_t) constant_time_select_w(carry, 0xe1, 0)) << 56;
+
++#ifdef OPENSSL_BIGENDIAN
++ b->u[0] = lo;
++ b->u[1] = hi;
++#else
+ b->u[0] = CRYPTO_bswap8(lo);
+ b->u[1] = CRYPTO_bswap8(hi);
++#endif
+ }
+
+ // POLYVAL(H, X_1, ..., X_n) =
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c
+@@ -70,8 +70,12 @@ OPENSSL_STATIC_ASSERT(CTR_DRBG_ENTROPY_LEN % AES_BLOCK_SIZE == 0,
+ // ctr_inc adds |n| to the last four bytes of |drbg->counter|, treated as a
+ // big-endian number.
+ static void ctr32_add(CTR_DRBG_STATE *drbg, uint32_t n) {
++#ifdef OPENSSL_BIGENDIAN
++ drbg->counter.words[3] += n;
++#else
+ drbg->counter.words[3] =
+ CRYPTO_bswap4(CRYPTO_bswap4(drbg->counter.words[3]) + n);
++#endif
+ }
+
+ static int ctr_drbg_update(CTR_DRBG_STATE *drbg, const uint8_t *data,
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/poly1305/poly1305.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/crypto/poly1305/poly1305.c
+@@ -32,10 +32,16 @@
+ static uint32_t U8TO32_LE(const uint8_t *m) {
+ uint32_t r;
+ OPENSSL_memcpy(&r, m, sizeof(r));
++#ifdef OPENSSL_BIGENDIAN
++ r = CRYPTO_bswap4(r);
++#endif
+ return r;
+ }
+
+ static void U32TO8_LE(uint8_t *m, uint32_t v) {
++#ifdef OPENSSL_BIGENDIAN
++ v = CRYPTO_bswap4(v);
++#endif
+ OPENSSL_memcpy(m, &v, sizeof(v));
+ }
+
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/include/openssl/base.h
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/include/openssl/base.h
+@@ -99,6 +99,10 @@ extern "C" {
+ #elif (defined(__PPC64__) || defined(__powerpc64__)) && defined(_LITTLE_ENDIAN)
+ #define OPENSSL_64_BIT
+ #define OPENSSL_PPC64LE
++#elif (defined(__PPC64__) || defined(__powerpc64__))
++#define OPENSSL_64_BIT
++#define OPENSSL_PPC64
++#define OPENSSL_BIGENDIAN
+ #elif defined(__mips__) && !defined(__LP64__)
+ #define OPENSSL_32_BIT
+ #define OPENSSL_MIPS
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/third_party/fiat/curve25519.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/third_party/fiat/curve25519.c
+@@ -3032,9 +3032,14 @@ int ED25519_verify(const uint8_t *message, size_t message_len,
+ UINT64_C(0x1000000000000000),
+ };
+ for (size_t i = 3;; i--) {
+- if (scopy.u64[i] > kOrder[i]) {
++#ifdef OPENSSL_BIGENDIAN
++ const uint64_t n = CRYPTO_bswap8(scopy.u64[i]);
++#else
++ const uint64_t n = scopy.u64[i];
++#endif
++ if (n > kOrder[i]) {
+ return 0;
+- } else if (scopy.u64[i] < kOrder[i]) {
++ } else if (n < kOrder[i]) {
+ break;
+ } else if (i == 0) {
+ return 0;
+--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/third_party/fiat/p256.c
++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/src/third_party/fiat/p256.c
+@@ -882,12 +882,24 @@ static void fe_tobytes(uint8_t out[NBYTES], const fe in) {
+ }
+ }
+
++#ifdef OPENSSL_BIGENDIAN
++static void fe_tobytes_be(uint8_t out[NBYTES], const fe in) {
++ for (int i = 0; i<NBYTES; i++) {
++ out[i ^ (BN_BYTES-1)] = (uint8_t)(in[i/sizeof(in[0])] >> (8*(i%sizeof(in[0]))));
++ }
++}
++#endif
++
+ static void fe_frombytes(fe out, const uint8_t in[NBYTES]) {
+ for (int i = 0; i<NLIMBS; i++) {
+ out[i] = 0;
+ }
+ for (int i = 0; i<NBYTES; i++) {
++#ifdef OPENSSL_BIGENDIAN
++ out[i/sizeof(out[0])] |= ((limb_t)in[i ^ (BN_BYTES-1)]) << (8*(i%sizeof(out[0])));
++#else
+ out[i/sizeof(out[0])] |= ((limb_t)in[i]) << (8*(i%sizeof(out[0])));
++#endif
+ }
+ }
+
+@@ -906,7 +918,11 @@ static void fe_to_generic(EC_FELEM *out, const fe in) {
+ OPENSSL_STATIC_ASSERT(
+ 256 / 8 == sizeof(BN_ULONG) * ((256 + BN_BITS2 - 1) / BN_BITS2),
+ "fe_tobytes leaves bytes uninitialized");
++#ifdef OPENSSL_BIGENDIAN
++ fe_tobytes_be(out->bytes, in);
++#else
+ fe_tobytes(out->bytes, in);
++#endif
+ }
+
+ // fe_inv calculates |out| = |in|^{-1}
+@@ -1524,7 +1540,11 @@ static char get_bit(const uint8_t *in, int i) {
+ if (i < 0 || i >= 256) {
+ return 0;
+ }
++#ifdef OPENSSL_BIGENDIAN
++ return (in[(i >> 3) ^ (sizeof(BN_ULONG)-1)] >> (i & 7)) & 1;
++#else
+ return (in[i >> 3] >> (i & 7)) & 1;
++#endif
+ }
+
+ // Interleaved point multiplication using precomputed point multiples: The
+--- qtwebengine/src/3rdparty/chromium/third_party/crc32c/BUILD.gn
++++ qtwebengine/src/3rdparty/chromium/third_party/crc32c/BUILD.gn
+@@ -15,13 +15,10 @@ config("crc32c_config") {
+ ]
+
+ defines = [
+- "BYTE_ORDER_BIG_ENDIAN=0",
++ "BYTE_ORDER_BIG_ENDIAN=__BYTE_ORDER__==__ORDER_BIG_ENDIAN__",
+ "CRC32C_TESTS_BUILT_WITH_GLOG=0",
+ ]
+
+- # If we ever support big-endian builds, add logic to conditionally enable
+- # BYTE_ORDER_BIG_ENDIAN.
+-
+ if (target_cpu == "x86" || target_cpu == "x64") {
+ defines += [
+ "HAVE_MM_PREFETCH=1",
+--- qtwebengine/src/3rdparty/chromium/third_party/flatbuffers/src/include/flatbuffers/base.h
++++ qtwebengine/src/3rdparty/chromium/third_party/flatbuffers/src/include/flatbuffers/base.h
+@@ -220,18 +220,15 @@ template<typename T> T EndianSwap(T t) {
+ if (sizeof(T) == 1) { // Compile-time if-then's.
+ return t;
+ } else if (sizeof(T) == 2) {
+- union { T t; uint16_t i; } u;
+- u.t = t;
++ union U { T t; uint16_t i; U(const T& t_) : t(t_) {}} u(t);
+ u.i = FLATBUFFERS_BYTESWAP16(u.i);
+ return u.t;
+ } else if (sizeof(T) == 4) {
+- union { T t; uint32_t i; } u;
+- u.t = t;
++ union U { T t; uint32_t i; U(const T& t_) : t(t_) {}} u(t);
+ u.i = FLATBUFFERS_BYTESWAP32(u.i);
+ return u.t;
+ } else if (sizeof(T) == 8) {
+- union { T t; uint64_t i; } u;
+- u.t = t;
++ union U { T t; uint64_t i; U(const T& t_) : t(t_) {}} u(t);
+ u.i = FLATBUFFERS_BYTESWAP64(u.i);
+ return u.t;
+ } else {
+--- qtwebengine/src/3rdparty/chromium/third_party/flatbuffers/src/include/flatbuffers/minireflect.h
++++ qtwebengine/src/3rdparty/chromium/third_party/flatbuffers/src/include/flatbuffers/minireflect.h
+@@ -122,58 +122,58 @@ inline void IterateValue(ElementaryType type, const uint8_t *val,
+ soffset_t vector_index, IterationVisitor *visitor) {
+ switch (type) {
+ case ET_UTYPE: {
+- auto tval = *reinterpret_cast<const uint8_t *>(val);
++ auto tval = ReadScalar<uint8_t>(val);
+ visitor->UType(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_BOOL: {
+- visitor->Bool(*reinterpret_cast<const uint8_t *>(val) != 0);
++ visitor->Bool(ReadScalar<uint8_t>(val) != 0);
+ break;
+ }
+ case ET_CHAR: {
+- auto tval = *reinterpret_cast<const int8_t *>(val);
++ auto tval = ReadScalar<int8_t>(val);
+ visitor->Char(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_UCHAR: {
+- auto tval = *reinterpret_cast<const uint8_t *>(val);
++ auto tval = ReadScalar<uint8_t>(val);
+ visitor->UChar(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_SHORT: {
+- auto tval = *reinterpret_cast<const int16_t *>(val);
++ auto tval = ReadScalar<int16_t>(val);
+ visitor->Short(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_USHORT: {
+- auto tval = *reinterpret_cast<const uint16_t *>(val);
++ auto tval = ReadScalar<uint16_t>(val);
+ visitor->UShort(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_INT: {
+- auto tval = *reinterpret_cast<const int32_t *>(val);
++ auto tval = ReadScalar<int32_t>(val);
+ visitor->Int(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_UINT: {
+- auto tval = *reinterpret_cast<const uint32_t *>(val);
++ auto tval = ReadScalar<uint32_t>(val);
+ visitor->UInt(tval, EnumName(tval, type_table));
+ break;
+ }
+ case ET_LONG: {
+- visitor->Long(*reinterpret_cast<const int64_t *>(val));
++ visitor->Long(ReadScalar<int64_t>(val));
+ break;
+ }
+ case ET_ULONG: {
+- visitor->ULong(*reinterpret_cast<const uint64_t *>(val));
++ visitor->ULong(ReadScalar<uint64_t>(val));
+ break;
+ }
+ case ET_FLOAT: {
+- visitor->Float(*reinterpret_cast<const float *>(val));
++ visitor->Float(ReadScalar<float>(val));
+ break;
+ }
+ case ET_DOUBLE: {
+- visitor->Double(*reinterpret_cast<const double *>(val));
++ visitor->Double(ReadScalar<double>(val));
+ break;
+ }
+ case ET_STRING: {
+--- qtwebengine/src/3rdparty/chromium/third_party/leveldatabase/port/port_chromium.h
++++ qtwebengine/src/3rdparty/chromium/third_party/leveldatabase/port/port_chromium.h
+@@ -23,8 +23,11 @@
+ namespace leveldb {
+ namespace port {
+
+-// Chromium only supports little endian.
++#if ARCH_CPU_LITTLE_ENDIAN
+ static const bool kLittleEndian = true;
++#else
++static const bool kLittleEndian = false;
++#endif
+
+ class LOCKABLE Mutex {
+ public:
+--- qtwebengine/src/3rdparty/chromium/third_party/modp_b64/BUILD.gn
++++ qtwebengine/src/3rdparty/chromium/third_party/modp_b64/BUILD.gn
+@@ -2,10 +2,16 @@
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+
++import("//build/config/host_byteorder.gni")
++
+ static_library("modp_b64") {
+ sources = [
+ "modp_b64.cc",
+ "modp_b64.h",
+ "modp_b64_data.h",
+ ]
++
++ if (host_byteorder == "big") {
++ defines = [ "WORDS_BIGENDIAN=1" ]
++ }
+ }
+--- qtwebengine/src/3rdparty/chromium/third_party/modp_b64/modp_b64.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/modp_b64/modp_b64.cc
+@@ -118,7 +118,7 @@ size_t modp_b64_encode(char* dest, const char* str, size_t len)
+ }
+
+ #ifdef WORDS_BIGENDIAN /* BIG ENDIAN -- SUN / IBM / MOTOROLA */
+-int modp_b64_decode(char* dest, const char* src, int len)
++size_t modp_b64_decode(char* dest, const char* src, size_t len)
+ {
+ if (len == 0) return 0;
+
+--- qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/base/utils.h
++++ qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/base/utils.h
+@@ -22,6 +22,7 @@
+ #include <errno.h>
+ #include <stddef.h>
+ #include <stdlib.h>
++#include <type_traits>
+ #if !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN)
+ #include <sys/types.h>
+ #endif
+@@ -91,7 +92,7 @@ struct FreeDeleter {
+
+ template <typename T>
+ constexpr T AssumeLittleEndian(T value) {
+- static_assert(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__,
++ static_assert(std::is_same<T,T>::value && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__,
+ "Unimplemented on big-endian archs");
+ return value;
+ }
+--- qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/protozero/message.h
++++ qtwebengine/src/3rdparty/chromium/third_party/perfetto/include/perfetto/protozero/message.h
+@@ -138,6 +138,13 @@ class PERFETTO_EXPORT Message {
+
+ pos = proto_utils::WriteVarInt(proto_utils::MakeTagFixed<T>(field_id), pos);
+ memcpy(pos, &value, sizeof(T));
++#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
++ for (size_t i = sizeof(T)/2; i--; ) {
++ uint8_t tmp = pos[i];
++ pos[i] = pos[sizeof(T)-1-i];
++ pos[sizeof(T)-1-i] = tmp;
++ }
++#endif
+ pos += sizeof(T);
+ // TODO: Optimize memcpy performance, see http://crbug.com/624311 .
+ WriteToStream(buffer, pos);
+--- qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/protozero/message.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/protozero/message.cc
+@@ -21,12 +21,6 @@
+ #include "perfetto/base/logging.h"
+ #include "perfetto/protozero/message_handle.h"
+
+-#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
+-// The memcpy() for float and double below needs to be adjusted if we want to
+-// support big endian CPUs. There doesn't seem to be a compelling need today.
+-#error Unimplemented for big endian archs.
+-#endif
+-
+ namespace protozero {
+
+ // static
+--- qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/protozero/proto_decoder.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/perfetto/src/protozero/proto_decoder.cc
+@@ -29,7 +29,8 @@ using namespace proto_utils;
+ #define BYTE_SWAP_TO_LE32(x) (x)
+ #define BYTE_SWAP_TO_LE64(x) (x)
+ #else
+-#error Unimplemented for big endian archs.
++#define BYTE_SWAP_TO_LE32(x) __builtin_bswap32(x)
++#define BYTE_SWAP_TO_LE64(x) __builtin_bswap64(x)
+ #endif
+
+ ProtoDecoder::Field ProtoDecoder::ReadField() {
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/include/core/SkPostConfig.h
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/include/core/SkPostConfig.h
+@@ -40,12 +40,6 @@
+ # error "must define either SK_CPU_LENDIAN or SK_CPU_BENDIAN"
+ #endif
+
+-#if defined(SK_CPU_BENDIAN) && !defined(I_ACKNOWLEDGE_SKIA_DOES_NOT_SUPPORT_BIG_ENDIAN)
+- #error "The Skia team is not endian-savvy enough to support big-endian CPUs."
+- #error "If you still want to use Skia,"
+- #error "please define I_ACKNOWLEDGE_SKIA_DOES_NOT_SUPPORT_BIG_ENDIAN."
+-#endif
+-
+ /**
+ * Ensure the port has defined all of SK_X32_SHIFT, or none of them.
+ */
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/include/private/GrTypesPriv.h
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/include/private/GrTypesPriv.h
+@@ -65,9 +65,6 @@ enum GrPixelConfig {
+ static const int kGrPixelConfigCnt = kLast_GrPixelConfig + 1;
+
+ // Aliases for pixel configs that match skia's byte order.
+-#ifndef SK_CPU_LENDIAN
+-#error "Skia gpu currently assumes little endian"
+-#endif
+ #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
+ static const GrPixelConfig kSkia8888_GrPixelConfig = kBGRA_8888_GrPixelConfig;
+ #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/src/codec/SkCodecPriv.h
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/src/codec/SkCodecPriv.h
+@@ -14,6 +14,7 @@
+ #include "SkEncodedOrigin.h"
+ #include "SkImageInfo.h"
+ #include "SkTypes.h"
++#include "SkEndian.h"
+
+ #ifdef SK_PRINT_CODEC_MESSAGES
+ #define SkCodecPrintf SkDebugf
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/src/core/SkColor.cpp
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/src/core/SkColor.cpp
+@@ -108,13 +108,29 @@ SkColor SkHSVToColor(U8CPU a, const SkScalar hsv[3]) {
+ template <>
+ SkColor4f SkColor4f::FromColor(SkColor bgra) {
+ SkColor4f rgba;
+- swizzle_rb(Sk4f_fromL32(bgra)).store(rgba.vec());
++ Sk4f c4f = Sk4f_fromL32(bgra);
++#ifdef SK_CPU_BENDIAN
++ // ARGB -> RGBA
++ c4f = SkNx_shuffle<1, 2, 3, 0>(c4f);
++#else
++ // BGRA -> RGBA
++ c4f = swizzle_rb(c4f);
++#endif
++ c4f.store(rgba.vec());
+ return rgba;
+ }
+
+ template <>
+ SkColor SkColor4f::toSkColor() const {
+- return Sk4f_toL32(swizzle_rb(Sk4f::Load(this->vec())));
++ Sk4f c4f = Sk4f::Load(this->vec());
++#ifdef SK_CPU_BENDIAN
++ // RGBA -> ARGB
++ c4f = SkNx_shuffle<3, 0, 1, 2>(c4f);
++#else
++ // RGBA -> BGRA
++ c4f = swizzle_rb(c4f);
++#endif
++ return Sk4f_toL32(c4f);
+ }
+
+ template <>
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/src/core/SkPixmap.cpp
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/src/core/SkPixmap.cpp
+@@ -246,7 +246,8 @@ SkColor SkPixmap::getColor(int x, int y) const {
+ const bool needsUnpremul = (kPremul_SkAlphaType == fInfo.alphaType());
+ auto toColor = [needsUnpremul](uint32_t maybePremulColor) {
+ return needsUnpremul ? SkUnPreMultiply::PMColorToColor(maybePremulColor)
+- : SkSwizzle_BGRA_to_PMColor(maybePremulColor);
++ : SkColorSetARGB(SkGetPackedA32(maybePremulColor), SkGetPackedR32(maybePremulColor),
++ SkGetPackedG32(maybePremulColor), SkGetPackedB32(maybePremulColor));
+ };
+
+ switch (this->colorType()) {
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/src/opts/Sk4px_none.h
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/src/opts/Sk4px_none.h
+@@ -35,7 +35,6 @@ inline Sk4px Sk4px::Wide::div255() const {
+ }
+
+ inline Sk4px Sk4px::alphas() const {
+- static_assert(SK_A32_SHIFT == 24, "This method assumes little-endian.");
+ return Sk16b((*this)[ 3], (*this)[ 3], (*this)[ 3], (*this)[ 3],
+ (*this)[ 7], (*this)[ 7], (*this)[ 7], (*this)[ 7],
+ (*this)[11], (*this)[11], (*this)[11], (*this)[11],
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/src/opts/SkBlitRow_opts.h
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/src/opts/SkBlitRow_opts.h
+@@ -237,8 +237,8 @@ void blit_row_s32a_opaque(SkPMColor* dst, const SkPMColor* src, int len, U8CPU a
+ // with chromium:611002 we need to keep it until we figure out where
+ // the non-premultiplied src values (like 0x00FFFFFF) are coming from.
+ // TODO(mtklein): sort this out and assert *src is premul here.
+- if (*src & 0xFF000000) {
+- *dst = (*src >= 0xFF000000) ? *src : SkPMSrcOver(*src, *dst);
++ if (*src & (0xFF << SK_A32_SHIFT)) {
++ *dst = ((*src << (24 - SK_A32_SHIFT)) >= 0xFF000000) ? *src : SkPMSrcOver(*src, *dst);
+ }
+ src++;
+ dst++;
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/src/opts/SkRasterPipeline_opts.h
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/src/opts/SkRasterPipeline_opts.h
+@@ -948,10 +948,17 @@ SI void from_4444(U16 _4444, F* r, F* g, F* b, F* a) {
+ *a = cast(wide & (15<< 0)) * (1.0f / (15<< 0));
+ }
+ SI void from_8888(U32 _8888, F* r, F* g, F* b, F* a) {
++#ifdef SK_CPU_BENDIAN
++ *r = cast((_8888 >> 24) ) * (1/255.0f);
++ *g = cast((_8888 >> 16) & 0xff) * (1/255.0f);
++ *b = cast((_8888 >> 8) & 0xff) * (1/255.0f);
++ *a = cast((_8888 ) & 0xff) * (1/255.0f);
++#else
+ *r = cast((_8888 ) & 0xff) * (1/255.0f);
+ *g = cast((_8888 >> 8) & 0xff) * (1/255.0f);
+ *b = cast((_8888 >> 16) & 0xff) * (1/255.0f);
+ *a = cast((_8888 >> 24) ) * (1/255.0f);
++#endif
+ }
+ SI void from_1010102(U32 rgba, F* r, F* g, F* b, F* a) {
+ *r = cast((rgba ) & 0x3ff) * (1/1023.0f);
+@@ -1278,10 +1285,17 @@ STAGE(srcover_rgba_8888, const SkRasterPipeline_MemoryCtx* ctx) {
+ auto ptr = ptr_at_xy<uint32_t>(ctx, dx,dy);
+
+ U32 dst = load<U32>(ptr, tail);
++#ifdef SK_CPU_BENDIAN
++ dr = cast((dst >> 24) );
++ dg = cast((dst >> 16) & 0xff);
++ db = cast((dst >> 8) & 0xff);
++ da = cast((dst ) & 0xff);
++#else
+ dr = cast((dst ) & 0xff);
+ dg = cast((dst >> 8) & 0xff);
+ db = cast((dst >> 16) & 0xff);
+ da = cast((dst >> 24) );
++#endif
+ // {dr,dg,db,da} are in [0,255]
+ // { r, g, b, a} are in [0, 1] (but may be out of gamut)
+
+@@ -1292,10 +1306,17 @@ STAGE(srcover_rgba_8888, const SkRasterPipeline_MemoryCtx* ctx) {
+ // { r, g, b, a} are now in [0,255] (but may be out of gamut)
+
+ // to_unorm() clamps back to gamut. Scaling by 1 since we're already 255-biased.
++#ifdef SK_CPU_BENDIAN
++ dst = to_unorm(r, 1, 255) << 24
++ | to_unorm(g, 1, 255) << 16
++ | to_unorm(b, 1, 255) << 8
++ | to_unorm(a, 1, 255);
++#else
+ dst = to_unorm(r, 1, 255)
+ | to_unorm(g, 1, 255) << 8
+ | to_unorm(b, 1, 255) << 16
+ | to_unorm(a, 1, 255) << 24;
++#endif
+ store(ptr, dst, tail);
+ }
+
+@@ -1694,10 +1715,17 @@ STAGE(gather_8888, const SkRasterPipeline_GatherCtx* ctx) {
+ STAGE(store_8888, const SkRasterPipeline_MemoryCtx* ctx) {
+ auto ptr = ptr_at_xy<uint32_t>(ctx, dx,dy);
+
++#ifdef SK_CPU_BENDIAN
++ U32 px = to_unorm(r, 255) << 24
++ | to_unorm(g, 255) << 16
++ | to_unorm(b, 255) << 8
++ | to_unorm(a, 255);
++#else
+ U32 px = to_unorm(r, 255)
+ | to_unorm(g, 255) << 8
+ | to_unorm(b, 255) << 16
+ | to_unorm(a, 255) << 24;
++#endif
+ store(ptr, px, tail);
+ }
+
+@@ -2852,10 +2880,17 @@ SI void from_8888(U32 rgba, U16* r, U16* g, U16* b, U16* a) {
+ return cast<U16>(v);
+ };
+ #endif
++#ifdef SK_CPU_BENDIAN
++ *r = cast_U16(rgba >> 16) >> 8;
++ *g = cast_U16(rgba >> 16) & 255;
++ *b = cast_U16(rgba & 65535) >> 8;
++ *a = cast_U16(rgba & 65535) & 255;
++#else
+ *r = cast_U16(rgba & 65535) & 255;
+ *g = cast_U16(rgba & 65535) >> 8;
+ *b = cast_U16(rgba >> 16) & 255;
+ *a = cast_U16(rgba >> 16) >> 8;
++#endif
+ }
+
+ SI void load_8888_(const uint32_t* ptr, size_t tail, U16* r, U16* g, U16* b, U16* a) {
+@@ -2897,10 +2932,15 @@ SI void store_8888_(uint32_t* ptr, size_t tail, U16 r, U16 g, U16 b, U16 a) {
+ case 2: vst4_lane_u8((uint8_t*)(ptr+1), rgba, 1);
+ case 1: vst4_lane_u8((uint8_t*)(ptr+0), rgba, 0);
+ }
++#else
++#ifdef SK_CPU_BENDIAN
++ store(ptr, tail, cast<U32>((r<<8) | g) << 16
++ | cast<U32>((b<<8) | a) << 0);
+ #else
+ store(ptr, tail, cast<U32>(r | (g<<8)) << 0
+ | cast<U32>(b | (a<<8)) << 16);
+ #endif
++#endif
+ }
+
+ STAGE_PP(load_8888, const SkRasterPipeline_MemoryCtx* ctx) {
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkJSON.cpp
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkJSON.cpp
+@@ -34,6 +34,10 @@ void Value::init_tagged(Tag t) {
+
+ // Pointer values store a type (in the upper kTagBits bits) and a pointer.
+ void Value::init_tagged_pointer(Tag t, void* p) {
++#if !defined(SK_CPU_LENDIAN)
++ // Check that kRecAlign is large enough to leave room for the tag
++ static_assert(sizeof(Value) > sizeof(uintptr_t) || !(kRecAlign & Value::kTagMask), "kRecAlign is not a multiple of kTagMask+1");
++#endif
+ *this->cast<uintptr_t>() = reinterpret_cast<uintptr_t>(p);
+
+ if (sizeof(Value) == sizeof(uintptr_t)) {
+@@ -169,7 +173,7 @@ private:
+ #if defined(SK_CPU_LENDIAN)
+ *s64 &= 0x00ffffffffffffffULL >> ((kMaxInlineStringSize - size) * 8);
+ #else
+- static_assert(false, "Big-endian builds are not supported at this time.");
++ *s64 &= 0xffffffffffffff00ULL << ((kMaxInlineStringSize - size) * 8);
+ #endif
+ }
+ };
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkJSON.h
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/src/utils/SkJSON.h
+@@ -120,6 +120,7 @@ protected:
+ -- highest 3 bits reserved for type storage
+
+ */
++#if defined(SK_CPU_LENDIAN)
+ enum class Tag : uint8_t {
+ // We picked kShortString == 0 so that tag 0x00 and stored max_size-size (7-7=0)
+ // conveniently overlap the '\0' terminator, allowing us to store a 7 character
+@@ -134,6 +135,22 @@ protected:
+ kObject = 0b11100000, // ptr to external storage
+ };
+ static constexpr uint8_t kTagMask = 0b11100000;
++#else
++ enum class Tag : uint8_t {
++ // We picked kShortString == 0 so that tag 0x00 and stored max_size-size (7-7=0)
++ // conveniently overlap the '\0' terminator, allowing us to store a 7 character
++ // C string inline.
++ kShortString = 0b00000000, // inline payload
++ kNull = 0b00000001, // no payload
++ kBool = 0b00000010, // inline payload
++ kInt = 0b00000011, // inline payload
++ kFloat = 0b00000100, // inline payload
++ kString = 0b00000101, // ptr to external storage
++ kArray = 0b00000110, // ptr to external storage
++ kObject = 0b00000111, // ptr to external storage
++ };
++ static constexpr uint8_t kTagMask = 0b00000111;
++#endif
+
+ void init_tagged(Tag);
+ void init_tagged_pointer(Tag, void*);
+@@ -192,14 +209,14 @@ private:
+
+ uint8_t fData8[kValueSize];
+
+-#if defined(SK_CPU_LENDIAN)
+ static constexpr size_t kTagOffset = kValueSize - 1;
+
++#if defined(SK_CPU_LENDIAN)
+ static constexpr uintptr_t kTagPointerMask =
+ ~(static_cast<uintptr_t>(kTagMask) << ((sizeof(uintptr_t) - 1) * 8));
+ #else
+- // The current value layout assumes LE and will take some tweaking for BE.
+- static_assert(false, "Big-endian builds are not supported at this time.");
++ static constexpr uintptr_t kTagPointerMask =
++ ~static_cast<uintptr_t>(kTagMask);
+ #endif
+ };
+
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/third_party/skcms/skcms.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/third_party/skcms/skcms.cc
+@@ -66,10 +66,15 @@ static float eval_curve(const skcms_Curve* curve, float x) {
+ uint16_t be_l, be_h;
+ memcpy(&be_l, curve->table_16 + 2*lo, 2);
+ memcpy(&be_h, curve->table_16 + 2*hi, 2);
++#if __BIG_ENDIAN__
++ l = be_l * (1/65535.0f);
++ h = be_h * (1/65535.0f);
++#else
+ uint16_t le_l = ((be_l << 8) | (be_l >> 8)) & 0xffff;
+ uint16_t le_h = ((be_h << 8) | (be_h >> 8)) & 0xffff;
+ l = le_l * (1/65535.0f);
+ h = le_h * (1/65535.0f);
++#endif
+ }
+ return l + (h-l)*t;
+ }
+@@ -124,21 +129,29 @@ enum {
+ static uint16_t read_big_u16(const uint8_t* ptr) {
+ uint16_t be;
+ memcpy(&be, ptr, sizeof(be));
++#if __BIG_ENDIAN__
++ return be;
++#else
+ #if defined(_MSC_VER)
+ return _byteswap_ushort(be);
+ #else
+ return __builtin_bswap16(be);
+ #endif
++#endif
+ }
+
+ static uint32_t read_big_u32(const uint8_t* ptr) {
+ uint32_t be;
+ memcpy(&be, ptr, sizeof(be));
++#if __BIG_ENDIAN__
++ return be;
++#else
+ #if defined(_MSC_VER)
+ return _byteswap_ulong(be);
+ #else
+ return __builtin_bswap32(be);
+ #endif
++#endif
+ }
+
+ static int32_t read_big_i32(const uint8_t* ptr) {
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/third_party/skcms/src/Transform_inl.h
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/third_party/skcms/src/Transform_inl.h
+@@ -392,9 +392,11 @@ SI U32 gather_32(const uint8_t* p, I32 ix) {
+ }
+
+ SI U32 gather_24(const uint8_t* p, I32 ix) {
++#if !__BIG_ENDIAN__
+ // First, back up a byte. Any place we're gathering from has a safe junk byte to read
+ // in front of it, either a previous table value, or some tag metadata.
+ p -= 1;
++#endif
+
+ // Load the i'th 24-bit value from p, and 1 extra byte.
+ auto load_24_32 = [p](int i) {
+@@ -435,8 +437,10 @@ SI U32 gather_24(const uint8_t* p, I32 ix) {
+
+ #if !defined(__arm__)
+ SI void gather_48(const uint8_t* p, I32 ix, U64* v) {
++#if !__BIG_ENDIAN__
+ // As in gather_24(), with everything doubled.
+ p -= 2;
++#endif
+
+ // Load the i'th 48-bit value from p, and 2 extra bytes.
+ auto load_48_64 = [p](int i) {
+@@ -499,7 +503,9 @@ SI F F_from_U8(U8 v) {
+ SI F F_from_U16_BE(U16 v) {
+ // All 16-bit ICC values are big-endian, so we byte swap before converting to float.
+ // MSVC catches the "loss" of data here in the portable path, so we also make sure to mask.
++#if !__BIG_ENDIAN__
+ v = U16( 0 | ((v & 0x00ff) << 8) | ((v & 0xff00) >> 8) );
++#endif
+ return cast<F>(v) * (1/65535.0f);
+ }
+
+@@ -534,9 +540,15 @@ SI F table(const skcms_Curve* curve, F v) {
+ SI void sample_clut_8(const skcms_A2B* a2b, I32 ix, F* r, F* g, F* b) {
+ U32 rgb = gather_24(a2b->grid_8, ix);
+
++#if __BIG_ENDIAN__
++ *r = cast<F>((rgb >> 16) & 0xff) * (1/255.0f);
++ *g = cast<F>((rgb >> 8) & 0xff) * (1/255.0f);
++ *b = cast<F>((rgb >> 0) & 0xff) * (1/255.0f);
++#else
+ *r = cast<F>((rgb >> 0) & 0xff) * (1/255.0f);
+ *g = cast<F>((rgb >> 8) & 0xff) * (1/255.0f);
+ *b = cast<F>((rgb >> 16) & 0xff) * (1/255.0f);
++#endif
+ }
+
+ SI void sample_clut_16(const skcms_A2B* a2b, I32 ix, F* r, F* g, F* b) {
+@@ -549,12 +561,18 @@ SI void sample_clut_16(const skcms_A2B* a2b, I32 ix, F* r, F* g, F* b) {
+ // This strategy is much faster for 64-bit builds, and fine for 32-bit x86 too.
+ U64 rgb;
+ gather_48(a2b->grid_16, ix, &rgb);
++#if __BIG_ENDIAN__
++ *r = cast<F>((rgb >> 32) & 0xffff) * (1/65535.0f);
++ *g = cast<F>((rgb >> 16) & 0xffff) * (1/65535.0f);
++ *b = cast<F>((rgb >> 0) & 0xffff) * (1/65535.0f);
++#else
+ rgb = swap_endian_16x4(rgb);
+
+ *r = cast<F>((rgb >> 0) & 0xffff) * (1/65535.0f);
+ *g = cast<F>((rgb >> 16) & 0xffff) * (1/65535.0f);
+ *b = cast<F>((rgb >> 32) & 0xffff) * (1/65535.0f);
+ #endif
++#endif
+ }
+
+ // GCC 7.2.0 hits an internal compiler error with -finline-functions (or -O3)
+@@ -695,10 +713,17 @@ static void exec_ops(const Op* ops, const void** args,
+ case Op_load_8888:{
+ U32 rgba = load<U32>(src + 4*i);
+
++#if __BIG_ENDIAN__
++ r = cast<F>((rgba >> 24) & 0xff) * (1/255.0f);
++ g = cast<F>((rgba >> 16) & 0xff) * (1/255.0f);
++ b = cast<F>((rgba >> 8) & 0xff) * (1/255.0f);
++ a = cast<F>((rgba >> 0) & 0xff) * (1/255.0f);
++#else
+ r = cast<F>((rgba >> 0) & 0xff) * (1/255.0f);
+ g = cast<F>((rgba >> 8) & 0xff) * (1/255.0f);
+ b = cast<F>((rgba >> 16) & 0xff) * (1/255.0f);
+ a = cast<F>((rgba >> 24) & 0xff) * (1/255.0f);
++#endif
+ } break;
+
+ case Op_load_8888_palette8:{
+@@ -727,13 +752,29 @@ static void exec_ops(const Op* ops, const void** args,
+ const uint16_t* rgb = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x3_t v = vld3_u16(rgb);
++#if __BIG_ENDIAN__
++ r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
++ g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
++ b = cast<F>(swap_endian_16((U16)v.val[2])) * (1/65535.0f);
++#else
+ r = cast<F>((U16)v.val[0]) * (1/65535.0f);
+ g = cast<F>((U16)v.val[1]) * (1/65535.0f);
+ b = cast<F>((U16)v.val[2]) * (1/65535.0f);
++#endif
+ #else
++#if __BIG_ENDIAN__
++ U32 R = load_3<U32>(rgb+0),
++ G = load_3<U32>(rgb+1),
++ B = load_3<U32>(rgb+2);
++ // R,G,B are little-endian 16-bit, so byte swap them before converting to float.
++ r = cast<F>((R & 0x00ff)<<8 | (R & 0xff00)>>8) * (1/65535.0f);
++ g = cast<F>((G & 0x00ff)<<8 | (G & 0xff00)>>8) * (1/65535.0f);
++ b = cast<F>((B & 0x00ff)<<8 | (B & 0xff00)>>8) * (1/65535.0f);
++#else
+ r = cast<F>(load_3<U32>(rgb+0)) * (1/65535.0f);
+ g = cast<F>(load_3<U32>(rgb+1)) * (1/65535.0f);
+ b = cast<F>(load_3<U32>(rgb+2)) * (1/65535.0f);
++#endif
+ #endif
+ } break;
+
+@@ -743,17 +784,33 @@ static void exec_ops(const Op* ops, const void** args,
+ const uint16_t* rgba = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x4_t v = vld4_u16(rgba);
++#if __BIG_ENDIAN__
++ r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
++ g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
++ b = cast<F>(swap_endian_16((U16)v.val[2])) * (1/65535.0f);
++ a = cast<F>(swap_endian_16((U16)v.val[3])) * (1/65535.0f);
++#else
+ r = cast<F>((U16)v.val[0]) * (1/65535.0f);
+ g = cast<F>((U16)v.val[1]) * (1/65535.0f);
+ b = cast<F>((U16)v.val[2]) * (1/65535.0f);
+ a = cast<F>((U16)v.val[3]) * (1/65535.0f);
++#endif
+ #else
++#if __BIG_ENDIAN__
++ U64 px = swap_endian_16x4(load<U64>(rgba));
++
++ r = cast<F>((px >> 48) & 0xffff) * (1/65535.0f);
++ g = cast<F>((px >> 32) & 0xffff) * (1/65535.0f);
++ b = cast<F>((px >> 16) & 0xffff) * (1/65535.0f);
++ a = cast<F>((px >> 0) & 0xffff) * (1/65535.0f);
++#else
+ U64 px = load<U64>(rgba);
+
+ r = cast<F>((px >> 0) & 0xffff) * (1/65535.0f);
+ g = cast<F>((px >> 16) & 0xffff) * (1/65535.0f);
+ b = cast<F>((px >> 32) & 0xffff) * (1/65535.0f);
+ a = cast<F>((px >> 48) & 0xffff) * (1/65535.0f);
++#endif
+ #endif
+ } break;
+
+@@ -763,10 +820,21 @@ static void exec_ops(const Op* ops, const void** args,
+ const uint16_t* rgb = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x3_t v = vld3_u16(rgb);
++#if __BIG_ENDIAN__
++ r = cast<F>((U16)v.val[0]) * (1/65535.0f);
++ g = cast<F>((U16)v.val[1]) * (1/65535.0f);
++ b = cast<F>((U16)v.val[2]) * (1/65535.0f);
++#else
+ r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
+ g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
+ b = cast<F>(swap_endian_16((U16)v.val[2])) * (1/65535.0f);
++#endif
+ #else
++#if __BIG_ENDIAN__
++ r = cast<F>(load_3<U32>(rgb+0)) * (1/65535.0f);
++ g = cast<F>(load_3<U32>(rgb+1)) * (1/65535.0f);
++ b = cast<F>(load_3<U32>(rgb+2)) * (1/65535.0f);
++#else
+ U32 R = load_3<U32>(rgb+0),
+ G = load_3<U32>(rgb+1),
+ B = load_3<U32>(rgb+2);
+@@ -774,6 +842,7 @@ static void exec_ops(const Op* ops, const void** args,
+ r = cast<F>((R & 0x00ff)<<8 | (R & 0xff00)>>8) * (1/65535.0f);
+ g = cast<F>((G & 0x00ff)<<8 | (G & 0xff00)>>8) * (1/65535.0f);
+ b = cast<F>((B & 0x00ff)<<8 | (B & 0xff00)>>8) * (1/65535.0f);
++#endif
+ #endif
+ } break;
+
+@@ -783,17 +852,33 @@ static void exec_ops(const Op* ops, const void** args,
+ const uint16_t* rgba = (const uint16_t*)ptr; // cast to const uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x4_t v = vld4_u16(rgba);
++#if __BIG_ENDIAN__
++ r = cast<F>((U16)v.val[0]) * (1/65535.0f);
++ g = cast<F>((U16)v.val[1]) * (1/65535.0f);
++ b = cast<F>((U16)v.val[2]) * (1/65535.0f);
++ a = cast<F>((U16)v.val[3]) * (1/65535.0f);
++#else
+ r = cast<F>(swap_endian_16((U16)v.val[0])) * (1/65535.0f);
+ g = cast<F>(swap_endian_16((U16)v.val[1])) * (1/65535.0f);
+ b = cast<F>(swap_endian_16((U16)v.val[2])) * (1/65535.0f);
+ a = cast<F>(swap_endian_16((U16)v.val[3])) * (1/65535.0f);
++#endif
+ #else
++#if __BIG_ENDIAN__
++ U64 px = load<U64>(rgba);
++
++ r = cast<F>((px >> 48) & 0xffff) * (1/65535.0f);
++ g = cast<F>((px >> 32) & 0xffff) * (1/65535.0f);
++ b = cast<F>((px >> 16) & 0xffff) * (1/65535.0f);
++ a = cast<F>((px >> 0) & 0xffff) * (1/65535.0f);
++#else
+ U64 px = swap_endian_16x4(load<U64>(rgba));
+
+ r = cast<F>((px >> 0) & 0xffff) * (1/65535.0f);
+ g = cast<F>((px >> 16) & 0xffff) * (1/65535.0f);
+ b = cast<F>((px >> 32) & 0xffff) * (1/65535.0f);
+ a = cast<F>((px >> 48) & 0xffff) * (1/65535.0f);
++#endif
+ #endif
+ } break;
+
+@@ -828,10 +913,17 @@ static void exec_ops(const Op* ops, const void** args,
+ A = (U16)v.val[3];
+ #else
+ U64 px = load<U64>(rgba);
++#if __BIG_ENDIAN__
++ U16 R = cast<U16>((px >> 48) & 0xffff),
++ G = cast<U16>((px >> 32) & 0xffff),
++ B = cast<U16>((px >> 16) & 0xffff),
++ A = cast<U16>((px >> 0) & 0xffff);
++#else
+ U16 R = cast<U16>((px >> 0) & 0xffff),
+ G = cast<U16>((px >> 16) & 0xffff),
+ B = cast<U16>((px >> 32) & 0xffff),
+ A = cast<U16>((px >> 48) & 0xffff);
++#endif
+ #endif
+ r = F_from_Half(R);
+ g = F_from_Half(G);
+@@ -1024,10 +1116,17 @@ static void exec_ops(const Op* ops, const void** args,
+ } return;
+
+ case Op_store_8888: {
++#if __BIG_ENDIAN__
++ store(dst + 4*i, cast<U32>(to_fixed(r * 255) << 24)
++ | cast<U32>(to_fixed(g * 255) << 16)
++ | cast<U32>(to_fixed(b * 255) << 8)
++ | cast<U32>(to_fixed(a * 255) << 0));
++#else
+ store(dst + 4*i, cast<U32>(to_fixed(r * 255) << 0)
+ | cast<U32>(to_fixed(g * 255) << 8)
+ | cast<U32>(to_fixed(b * 255) << 16)
+ | cast<U32>(to_fixed(a * 255) << 24));
++#endif
+ } return;
+
+ case Op_store_1010102: {
+@@ -1043,15 +1142,30 @@ static void exec_ops(const Op* ops, const void** args,
+ uint16_t* rgb = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x3_t v = {{
++#if __BIG_ENDIAN__
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(r * 65535))),
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(g * 65535))),
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(b * 65535))),
++#else
+ (uint16x4_t)cast<U16>(to_fixed(r * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(g * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(b * 65535)),
++#endif
+ }};
+ vst3_u16(rgb, v);
+ #else
++#if __BIG_ENDIAN__
++ I32 R = to_fixed(r * 65535),
++ G = to_fixed(g * 65535),
++ B = to_fixed(b * 65535);
++ store_3(rgb+0, cast<U16>((R & 0x00ff) << 8 | (R & 0xff00) >> 8) );
++ store_3(rgb+1, cast<U16>((G & 0x00ff) << 8 | (G & 0xff00) >> 8) );
++ store_3(rgb+2, cast<U16>((B & 0x00ff) << 8 | (B & 0xff00) >> 8) );
++#else
+ store_3(rgb+0, cast<U16>(to_fixed(r * 65535)));
+ store_3(rgb+1, cast<U16>(to_fixed(g * 65535)));
+ store_3(rgb+2, cast<U16>(to_fixed(b * 65535)));
++#endif
+ #endif
+
+ } return;
+@@ -1062,18 +1176,33 @@ static void exec_ops(const Op* ops, const void** args,
+ uint16_t* rgba = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x4_t v = {{
++#if __BIG_ENDIAN__
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(r * 65535))),
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(g * 65535))),
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(b * 65535))),
++ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(a * 65535))),
++#else
+ (uint16x4_t)cast<U16>(to_fixed(r * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(g * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(b * 65535)),
+ (uint16x4_t)cast<U16>(to_fixed(a * 65535)),
++#endif
+ }};
+ vst4_u16(rgba, v);
+ #else
++#if __BIG_ENDIAN__
++ U64 px = cast<U64>(to_fixed(r * 65535)) << 48
++ | cast<U64>(to_fixed(g * 65535)) << 32
++ | cast<U64>(to_fixed(b * 65535)) << 16
++ | cast<U64>(to_fixed(a * 65535)) << 0;
++ store(rgba, swap_endian_16x4(px));
++#else
+ U64 px = cast<U64>(to_fixed(r * 65535)) << 0
+ | cast<U64>(to_fixed(g * 65535)) << 16
+ | cast<U64>(to_fixed(b * 65535)) << 32
+ | cast<U64>(to_fixed(a * 65535)) << 48;
+ store(rgba, px);
++#endif
+ #endif
+ } return;
+
+@@ -1083,18 +1212,30 @@ static void exec_ops(const Op* ops, const void** args,
+ uint16_t* rgb = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x3_t v = {{
++#if __BIG_ENDIAN__
++ (uint16x4_t)cast<U16>(to_fixed(r * 65535)),
++ (uint16x4_t)cast<U16>(to_fixed(g * 65535)),
++ (uint16x4_t)cast<U16>(to_fixed(b * 65535)),
++#else
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(r * 65535))),
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(g * 65535))),
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(b * 65535))),
++#endif
+ }};
+ vst3_u16(rgb, v);
+ #else
++#if __BIG_ENDIAN__
++ store_3(rgb+0, cast<U16>(to_fixed(r * 65535)));
++ store_3(rgb+1, cast<U16>(to_fixed(g * 65535)));
++ store_3(rgb+2, cast<U16>(to_fixed(b * 65535)));
++#else
+ I32 R = to_fixed(r * 65535),
+ G = to_fixed(g * 65535),
+ B = to_fixed(b * 65535);
+ store_3(rgb+0, cast<U16>((R & 0x00ff) << 8 | (R & 0xff00) >> 8) );
+ store_3(rgb+1, cast<U16>((G & 0x00ff) << 8 | (G & 0xff00) >> 8) );
+ store_3(rgb+2, cast<U16>((B & 0x00ff) << 8 | (B & 0xff00) >> 8) );
++#endif
+ #endif
+
+ } return;
+@@ -1105,18 +1246,33 @@ static void exec_ops(const Op* ops, const void** args,
+ uint16_t* rgba = (uint16_t*)ptr; // for this cast to uint16_t* to be safe.
+ #if defined(USING_NEON)
+ uint16x4x4_t v = {{
++#if __BIG_ENDIAN__
++ (uint16x4_t)cast<U16>(to_fixed(r * 65535)),
++ (uint16x4_t)cast<U16>(to_fixed(g * 65535)),
++ (uint16x4_t)cast<U16>(to_fixed(b * 65535)),
++ (uint16x4_t)cast<U16>(to_fixed(a * 65535)),
++#else
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(r * 65535))),
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(g * 65535))),
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(b * 65535))),
+ (uint16x4_t)swap_endian_16(cast<U16>(to_fixed(a * 65535))),
++#endif
+ }};
+ vst4_u16(rgba, v);
+ #else
++#if __BIG_ENDIAN__
++ U64 px = cast<U64>(to_fixed(r * 65535)) << 48
++ | cast<U64>(to_fixed(g * 65535)) << 32
++ | cast<U64>(to_fixed(b * 65535)) << 16
++ | cast<U64>(to_fixed(a * 65535)) << 0;
++ store(rgba, px);
++#else
+ U64 px = cast<U64>(to_fixed(r * 65535)) << 0
+ | cast<U64>(to_fixed(g * 65535)) << 16
+ | cast<U64>(to_fixed(b * 65535)) << 32
+ | cast<U64>(to_fixed(a * 65535)) << 48;
+ store(rgba, swap_endian_16x4(px));
++#endif
+ #endif
+ } return;
+
+@@ -1160,10 +1316,17 @@ static void exec_ops(const Op* ops, const void** args,
+ }};
+ vst4_u16(rgba, v);
+ #else
++#if __BIG_ENDIAN__
++ store(rgba, cast<U64>(R) << 48
++ | cast<U64>(G) << 32
++ | cast<U64>(B) << 16
++ | cast<U64>(A) << 0);
++#else
+ store(rgba, cast<U64>(R) << 0
+ | cast<U64>(G) << 16
+ | cast<U64>(B) << 32
+ | cast<U64>(A) << 48);
++#endif
+ #endif
+
+ } return;
+--- qtwebengine/src/3rdparty/chromium/third_party/webrtc/common_audio/wav_file.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/webrtc/common_audio/wav_file.cc
+@@ -93,13 +93,15 @@ size_t WavReader::num_samples() const {
+ }
+
+ size_t WavReader::ReadSamples(size_t num_samples, int16_t* samples) {
+-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
+-#error "Need to convert samples to big-endian when reading from WAV file"
+-#endif
+ // There could be metadata after the audio; ensure we don't read it.
+ num_samples = std::min(num_samples, num_samples_remaining_);
+ const size_t read =
+ fread(samples, sizeof(*samples), num_samples, file_handle_);
++#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
++ for (size_t i = 0; i < read; i++) {
++ samples[i] = __builtin_bswap16(samples[i]);
++ }
++#endif
+ // If we didn't read what was requested, ensure we've reached the EOF.
+ RTC_CHECK(read == num_samples || feof(file_handle_));
+ RTC_CHECK_LE(read, num_samples_remaining_);
+@@ -178,13 +180,26 @@ size_t WavWriter::num_samples() const {
+
+ void WavWriter::WriteSamples(const int16_t* samples, size_t num_samples) {
+ #ifndef WEBRTC_ARCH_LITTLE_ENDIAN
+-#error "Need to convert samples to little-endian when writing to WAV file"
+-#endif
++ static const size_t kChunksize = 4096 / sizeof(uint16_t);
++ for (size_t i = 0; i < num_samples; i += kChunksize) {
++ int16_t isamples[kChunksize];
++ const size_t chunk = std::min(kChunksize, num_samples - i);
++ for (size_t j = 0; j < chunk; j++) {
++ isamples[j] = __builtin_bswap16(samples[i + j]);
++ }
++ const size_t written =
++ fwrite(isamples, sizeof(*isamples), chunk, file_handle_);
++ RTC_CHECK_EQ(chunk, written);
++ num_samples_ += written;
++ RTC_CHECK(num_samples_ >= written); // detect size_t overflow
++ }
++#else
+ const size_t written =
+ fwrite(samples, sizeof(*samples), num_samples, file_handle_);
+ RTC_CHECK_EQ(num_samples, written);
+ num_samples_ += written;
+ RTC_CHECK(num_samples_ >= written); // detect size_t overflow
++#endif
+ }
+
+ void WavWriter::WriteSamples(const float* samples, size_t num_samples) {
+--- qtwebengine/src/3rdparty/chromium/third_party/webrtc/common_audio/wav_header.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/webrtc/common_audio/wav_header.cc
+@@ -86,7 +86,26 @@ static inline std::string ReadFourCC(uint32_t x) {
+ return std::string(reinterpret_cast<char*>(&x), 4);
+ }
+ #else
+-#error "Write be-to-le conversion functions"
++static inline void WriteLE16(uint16_t* f, uint16_t x) {
++ *f = __builtin_bswap16(x);
++}
++static inline void WriteLE32(uint32_t* f, uint32_t x) {
++ *f = __builtin_bswap32(x);
++}
++static inline void WriteFourCC(uint32_t* f, char a, char b, char c, char d) {
++ *f = static_cast<uint32_t>(d) | static_cast<uint32_t>(c) << 8 |
++ static_cast<uint32_t>(b) << 16 | static_cast<uint32_t>(a) << 24;
++}
++
++static inline uint16_t ReadLE16(uint16_t x) {
++ return __builtin_bswap16(x);
++}
++static inline uint32_t ReadLE32(uint32_t x) {
++ return __builtin_bswap32(x);
++}
++static inline std::string ReadFourCC(uint32_t x) {
++ return std::string(reinterpret_cast<char*>(&x), 4);
++}
+ #endif
+
+ static inline uint32_t RiffChunkSize(size_t bytes_in_payload) {
+--- qtwebengine/src/3rdparty/chromium/ui/aura/mus/os_exchange_data_provider_mus.cc
++++ qtwebengine/src/3rdparty/chromium/ui/aura/mus/os_exchange_data_provider_mus.cc
+@@ -14,6 +14,7 @@
+ #include "base/strings/string_split.h"
+ #include "base/strings/string_util.h"
+ #include "base/strings/utf_string_conversions.h"
++#include "base/sys_byteorder.h"
+ #include "net/base/filename_util.h"
+ #include "ui/base/clipboard/clipboard_constants.h"
+ #include "ui/base/clipboard/clipboard_format_type.h"
+@@ -279,8 +280,13 @@ void OSExchangeDataProviderMus::SetHtml(const base::string16& html,
+ std::vector<unsigned char> bytes;
+ // Manually jam a UTF16 BOM into bytes because otherwise, other programs will
+ // assume UTF-8.
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ bytes.push_back(0xFF);
+ bytes.push_back(0xFE);
++#else
++ bytes.push_back(0xFE);
++ bytes.push_back(0xFF);
++#endif
+ AddString16ToVector(html, &bytes);
+ mime_data_[ui::kMimeTypeHTML] = bytes;
+ }
+--- qtwebengine/src/3rdparty/chromium/ui/base/resource/data_pack.cc
++++ qtwebengine/src/3rdparty/chromium/ui/base/resource/data_pack.cc
+@@ -154,16 +154,42 @@ class ScopedFileWriter {
+ DISALLOW_COPY_AND_ASSIGN(ScopedFileWriter);
+ };
+
++static inline uint16_t byteswap(uint16_t v) { return __builtin_bswap16(v); }
++static inline uint32_t byteswap(uint32_t v) { return __builtin_bswap32(v); }
++
++template<class T> class byteswapped_t {
++private:
++ T value;
++public:
++ inline byteswapped_t(T v) : value(byteswap(v)) { }
++ inline T operator=(T v) { value = byteswap(v); return v; }
++ inline T operator+=(T v) { v += byteswap(value); value = byteswap(v); return v; }
++ inline operator T() const { return byteswap(value); }
++};
++
++#if !defined(ARCH_CPU_LITTLE_ENDIAN)
++
++typedef byteswapped_t<uint16_t> uint16le_t;
++typedef byteswapped_t<uint32_t> uint32le_t;
++
++#else
++
++typedef uint16_t uint16le_t;
++typedef uint32_t uint32le_t;
++
++#endif
++
+ } // namespace
+
+ namespace ui {
+
+ #pragma pack(push, 2)
+ struct DataPack::Entry {
+- uint16_t resource_id;
+- uint32_t file_offset;
++ uint16le_t resource_id;
++ uint32le_t file_offset;
+
+ static int CompareById(const void* void_key, const void* void_entry) {
++ // Key is host endian
+ uint16_t key = *reinterpret_cast<const uint16_t*>(void_key);
+ const Entry* entry = reinterpret_cast<const Entry*>(void_entry);
+ return key - entry->resource_id;
+@@ -171,10 +197,11 @@ struct DataPack::Entry {
+ };
+
+ struct DataPack::Alias {
+- uint16_t resource_id;
+- uint16_t entry_index;
++ uint16le_t resource_id;
++ uint16le_t entry_index;
+
+ static int CompareById(const void* void_key, const void* void_entry) {
++ // Key is host endian
+ uint16_t key = *reinterpret_cast<const uint16_t*>(void_key);
+ const Alias* entry = reinterpret_cast<const Alias*>(void_entry);
+ return key - entry->resource_id;
+@@ -284,7 +311,7 @@ bool DataPack::LoadImpl(std::unique_ptr<DataPack::DataSource> data_source) {
+ // Parse the version and check for truncated header.
+ uint32_t version = 0;
+ if (data_length > sizeof(version))
+- version = reinterpret_cast<const uint32_t*>(data)[0];
++ version = reinterpret_cast<const uint32le_t*>(data)[0];
+ size_t header_length =
+ version == kFileFormatV4 ? kHeaderLengthV4 : kHeaderLengthV5;
+ if (version == 0 || data_length < header_length) {
+@@ -295,14 +322,14 @@ bool DataPack::LoadImpl(std::unique_ptr<DataPack::DataSource> data_source) {
+
+ // Parse the header of the file.
+ if (version == kFileFormatV4) {
+- resource_count_ = reinterpret_cast<const uint32_t*>(data)[1];
++ resource_count_ = reinterpret_cast<const uint32le_t*>(data)[1];
+ alias_count_ = 0;
+ text_encoding_type_ = static_cast<TextEncodingType>(data[8]);
+ } else if (version == kFileFormatV5) {
+ // Version 5 added the alias table and changed the header format.
+ text_encoding_type_ = static_cast<TextEncodingType>(data[4]);
+- resource_count_ = reinterpret_cast<const uint16_t*>(data)[4];
+- alias_count_ = reinterpret_cast<const uint16_t*>(data)[5];
++ resource_count_ = reinterpret_cast<const uint16le_t*>(data)[4];
++ alias_count_ = reinterpret_cast<const uint16le_t*>(data)[5];
+ } else {
+ LOG(ERROR) << "Bad data pack version: got " << version << ", expected "
+ << kFileFormatV4 << " or " << kFileFormatV5;
+@@ -447,9 +474,6 @@ void DataPack::CheckForDuplicateResources(
+ bool DataPack::WritePack(const base::FilePath& path,
+ const std::map<uint16_t, base::StringPiece>& resources,
+ TextEncodingType text_encoding_type) {
+-#if !defined(ARCH_CPU_LITTLE_ENDIAN)
+-#error "datapack assumes little endian"
+-#endif
+ if (text_encoding_type != UTF8 && text_encoding_type != UTF16 &&
+ text_encoding_type != BINARY) {
+ LOG(ERROR) << "Invalid text encoding type, got " << text_encoding_type
+@@ -467,7 +491,7 @@ bool DataPack::WritePack(const base::FilePath& path,
+ if (!file.valid())
+ return false;
+
+- uint32_t encoding = static_cast<uint32_t>(text_encoding_type);
++ uint32le_t encoding = static_cast<uint32le_t>(text_encoding_type);
+
+ // Build a list of final resource aliases, and an alias map at the same time.
+ std::vector<uint16_t> resource_ids;
+@@ -494,13 +518,14 @@ bool DataPack::WritePack(const base::FilePath& path,
+
+ // These values are guaranteed to fit in a uint16_t due to the earlier
+ // check of |resources_count|.
+- const uint16_t alias_count = static_cast<uint16_t>(aliases.size());
+- const uint16_t entry_count = static_cast<uint16_t>(resource_ids.size());
++ const uint16le_t alias_count = static_cast<uint16le_t>(aliases.size());
++ const uint16le_t entry_count = static_cast<uint16le_t>(resource_ids.size());
+ DCHECK_EQ(static_cast<size_t>(entry_count) + static_cast<size_t>(alias_count),
+ resources_count);
+
+- file.Write(&kFileFormatV5, sizeof(kFileFormatV5));
+- file.Write(&encoding, sizeof(uint32_t));
++ uint32le_t version = kFileFormatV5;
++ file.Write(&version, sizeof(version));
++ file.Write(&encoding, sizeof(uint32le_t));
+ file.Write(&entry_count, sizeof(entry_count));
+ file.Write(&alias_count, sizeof(alias_count));
+
+@@ -508,8 +533,8 @@ bool DataPack::WritePack(const base::FilePath& path,
+ // last item so we can compute the size of the list item.
+ const uint32_t index_length = (entry_count + 1) * sizeof(Entry);
+ const uint32_t alias_table_length = alias_count * sizeof(Alias);
+- uint32_t data_offset = kHeaderLengthV5 + index_length + alias_table_length;
+- for (const uint16_t resource_id : resource_ids) {
++ uint32le_t data_offset = kHeaderLengthV5 + index_length + alias_table_length;
++ for (const uint16le_t resource_id : resource_ids) {
+ file.Write(&resource_id, sizeof(resource_id));
+ file.Write(&data_offset, sizeof(data_offset));
+ data_offset += resources.find(resource_id)->second.length();
+@@ -517,13 +542,13 @@ bool DataPack::WritePack(const base::FilePath& path,
+
+ // We place an extra entry after the last item that allows us to read the
+ // size of the last item.
+- const uint16_t resource_id = 0;
++ const uint16le_t resource_id = 0;
+ file.Write(&resource_id, sizeof(resource_id));
+ file.Write(&data_offset, sizeof(data_offset));
+
+ // Write the aliases table, if any. Note: |aliases| is an std::map,
+ // ensuring values are written in increasing order.
+- for (const std::pair<uint16_t, uint16_t>& alias : aliases) {
++ for (const std::pair<uint16le_t, uint16le_t> alias : aliases) {
+ file.Write(&alias, sizeof(alias));
+ }
+
+--- qtwebengine/src/3rdparty/chromium/ui/base/resource/data_pack.cc.orig
++++ qtwebengine/src/3rdparty/chromium/ui/base/resource/data_pack.cc.orig
+@@ -382,12 +382,6 @@ bool DataPack::HasResource(uint16_t resource_id) const {
+
+ bool DataPack::GetStringPiece(uint16_t resource_id,
+ base::StringPiece* data) const {
+- // It won't be hard to make this endian-agnostic, but it's not worth
+- // bothering to do right now.
+-#if !defined(ARCH_CPU_LITTLE_ENDIAN)
+-#error "datapack assumes little endian"
+-#endif
+-
+ const Entry* target = LookupEntryById(resource_id);
+ if (!target)
+ return false;
+--- qtwebengine/src/3rdparty/chromium/ui/gfx/codec/jpeg_codec.cc
++++ qtwebengine/src/3rdparty/chromium/ui/gfx/codec/jpeg_codec.cc
+@@ -212,11 +212,11 @@ bool JPEGCodec::Decode(const unsigned char* input, size_t input_size,
+ // used by Chromium (i.e. RGBA and BGRA) and we just map the input
+ // parameters to a colorspace.
+ if (format == FORMAT_RGBA ||
+- (format == FORMAT_SkBitmap && SK_R32_SHIFT == 0)) {
++ (format == FORMAT_SkBitmap && SK_PMCOLOR_BYTE_ORDER(R, G, B, A))) {
+ cinfo->out_color_space = JCS_EXT_RGBX;
+ cinfo->output_components = 4;
+ } else if (format == FORMAT_BGRA ||
+- (format == FORMAT_SkBitmap && SK_B32_SHIFT == 0)) {
++ (format == FORMAT_SkBitmap && SK_PMCOLOR_BYTE_ORDER(B, G, R, A))) {
+ cinfo->out_color_space = JCS_EXT_BGRX;
+ cinfo->output_components = 4;
+ } else {
+--- qtwebengine/src/3rdparty/chromium/ui/gfx/codec/png_codec.cc
++++ qtwebengine/src/3rdparty/chromium/ui/gfx/codec/png_codec.cc
+@@ -169,6 +169,10 @@ void DecodeInfoCallback(png_struct* png_ptr, png_info* info_ptr) {
+ png_set_bgr(png_ptr);
+ png_set_add_alpha(png_ptr, 0xFF, PNG_FILLER_AFTER);
+ break;
++ case PNGCodec::FORMAT_ARGB:
++ state->output_channels = 4;
++ png_set_add_alpha(png_ptr, 0xFF, PNG_FILLER_BEFORE);
++ break;
+ case PNGCodec::FORMAT_SkBitmap:
+ state->output_channels = 4;
+ png_set_add_alpha(png_ptr, 0xFF, PNG_FILLER_AFTER);
+@@ -183,6 +187,10 @@ void DecodeInfoCallback(png_struct* png_ptr, png_info* info_ptr) {
+ state->output_channels = 4;
+ png_set_bgr(png_ptr);
+ break;
++ case PNGCodec::FORMAT_ARGB:
++ state->output_channels = 4;
++ png_set_swap_alpha(png_ptr);
++ break;
+ case PNGCodec::FORMAT_SkBitmap:
+ state->output_channels = 4;
+ break;
+@@ -475,6 +483,8 @@ bool PNGCodec::Encode(const unsigned char* input,
+ case FORMAT_BGRA:
+ colorType = kBGRA_8888_SkColorType;
+ break;
++ case FORMAT_ARGB:
++ return false;
+ case FORMAT_SkBitmap:
+ colorType = kN32_SkColorType;
+ break;
+--- qtwebengine/src/3rdparty/chromium/ui/gfx/codec/png_codec.h
++++ qtwebengine/src/3rdparty/chromium/ui/gfx/codec/png_codec.h
+@@ -37,6 +37,10 @@ class CODEC_EXPORT PNGCodec {
+ // This is the default Windows DIB order.
+ FORMAT_BGRA,
+
++ // 4 bytes per pixel, in ARGB order in memory regardless of endianness.
++ // Only supported for decoding
++ FORMAT_ARGB,
++
+ // SkBitmap format. For Encode() kN32_SkColorType (4 bytes per pixel) and
+ // kAlpha_8_SkColorType (1 byte per pixel) formats are supported.
+ // kAlpha_8_SkColorType gets encoded into a grayscale PNG treating alpha as
+--- qtwebengine/src/3rdparty/chromium/ui/gfx/codec/png_codec_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/ui/gfx/codec/png_codec_unittest.cc
+@@ -853,7 +853,7 @@ TEST(PNGCodec, EncodeA8SkBitmap) {
+ for (int y = 0; y < h; y++) {
+ uint8_t original_pixel = *original_bitmap.getAddr8(x, y);
+ uint32_t decoded_pixel = *decoded_bitmap.getAddr32(x, y);
+- EXPECT_TRUE(BGRAGrayEqualsA8Gray(decoded_pixel, original_pixel));
++ EXPECT_TRUE(BGRAGrayEqualsA8Gray(SkUnPreMultiply::PMColorToColor(decoded_pixel), original_pixel));
+ }
+ }
+ }
+--- qtwebengine/src/3rdparty/chromium/ui/gfx/color_analysis.cc
++++ qtwebengine/src/3rdparty/chromium/ui/gfx/color_analysis.cc
+@@ -16,6 +16,7 @@
+ #include <vector>
+
+ #include "base/logging.h"
++#include "base/sys_byteorder.h"
+ #include "third_party/skia/include/core/SkBitmap.h"
+ #include "third_party/skia/include/core/SkUnPreMultiply.h"
+ #include "ui/gfx/codec/png_codec.h"
+@@ -506,10 +507,17 @@ SkColor FindClosestColor(const uint8_t* image,
+ SkColor best_color = color;
+ const uint8_t* byte = image;
+ for (int i = 0; i < width * height; ++i) {
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ uint8_t b = *(byte++);
+ uint8_t g = *(byte++);
+ uint8_t r = *(byte++);
+ uint8_t a = *(byte++);
++#else
++ uint8_t a = *(byte++);
++ uint8_t r = *(byte++);
++ uint8_t g = *(byte++);
++ uint8_t b = *(byte++);
++#endif
+ // Ignore fully transparent pixels.
+ if (a == 0)
+ continue;
+@@ -527,7 +535,6 @@ SkColor FindClosestColor(const uint8_t* image,
+
+ // For a 16x16 icon on an Intel Core i5 this function takes approximately
+ // 0.5 ms to run.
+-// TODO(port): This code assumes the CPU architecture is little-endian.
+ SkColor CalculateKMeanColorOfBuffer(uint8_t* decoded_data,
+ int img_width,
+ int img_height,
+@@ -550,10 +557,17 @@ SkColor CalculateKMeanColorOfBuffer(uint8_t* decoded_data,
+ int pixel_pos = sampler->GetSample(img_width, img_height) %
+ (img_width * img_height);
+
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ uint8_t b = decoded_data[pixel_pos * 4];
+ uint8_t g = decoded_data[pixel_pos * 4 + 1];
+ uint8_t r = decoded_data[pixel_pos * 4 + 2];
+ uint8_t a = decoded_data[pixel_pos * 4 + 3];
++#else
++ uint8_t a = decoded_data[pixel_pos * 4];
++ uint8_t r = decoded_data[pixel_pos * 4 + 1];
++ uint8_t g = decoded_data[pixel_pos * 4 + 2];
++ uint8_t b = decoded_data[pixel_pos * 4 + 3];
++#endif
+ // Skip fully transparent pixels as they usually contain black in their
+ // RGB channels but do not contribute to the visual image.
+ if (a == 0)
+@@ -602,10 +616,17 @@ SkColor CalculateKMeanColorOfBuffer(uint8_t* decoded_data,
+ uint8_t* pixel = decoded_data;
+ uint8_t* decoded_data_end = decoded_data + (img_width * img_height * 4);
+ while (pixel < decoded_data_end) {
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
+ uint8_t b = *(pixel++);
+ uint8_t g = *(pixel++);
+ uint8_t r = *(pixel++);
+ uint8_t a = *(pixel++);
++#else
++ uint8_t a = *(pixel++);
++ uint8_t r = *(pixel++);
++ uint8_t g = *(pixel++);
++ uint8_t b = *(pixel++);
++#endif
+ // Skip transparent pixels, see above.
+ if (a == 0)
+ continue;
+@@ -683,8 +704,12 @@ SkColor CalculateKMeanColorOfPNG(scoped_refptr<base::RefCountedMemory> png,
+
+ if (png.get() && png->size() &&
+ gfx::PNGCodec::Decode(png->front(), png->size(),
+- gfx::PNGCodec::FORMAT_BGRA, &decoded_data,
+- &img_width, &img_height)) {
++#if defined(ARCH_CPU_LITTLE_ENDIAN)
++ gfx::PNGCodec::FORMAT_BGRA,
++#else
++ gfx::PNGCodec::FORMAT_ARGB,
++#endif
++ &decoded_data, &img_width, &img_height)) {
+ return CalculateKMeanColorOfBuffer(&decoded_data[0], img_width, img_height,
+ lower_bound, upper_bound, sampler, true);
+ }
+--- qtwebengine/src/3rdparty/chromium/ui/gfx/skbitmap_operations_unittest.cc
++++ qtwebengine/src/3rdparty/chromium/ui/gfx/skbitmap_operations_unittest.cc
+@@ -238,7 +238,7 @@ TEST(SkBitmapOperationsTest, CreateHSLShiftedBitmapHueOnly) {
+
+ for (int y = 0, i = 0; y < src_h; y++) {
+ for (int x = 0; x < src_w; x++) {
+- *src.getAddr32(x, y) = SkColorSetARGB(255, 0, 0, i % 255);
++ *src.getAddr32(x, y) = SkPackARGB32(255, 0, 0, i % 255);
+ i++;
+ }
+ }
+--- qtwebengine/src/3rdparty/chromium/url/url_canon_host.cc
++++ qtwebengine/src/3rdparty/chromium/url/url_canon_host.cc
+@@ -135,8 +135,7 @@ bool DoSimpleHost(const INCHAR* host,
+ if (source == '%') {
+ // Unescape first, if possible.
+ // Source will be used only if decode operation was successful.
+- if (!DecodeEscaped(host, &i, host_len,
+- reinterpret_cast<unsigned char*>(&source))) {
++ if (!DecodeEscaped(host, &i, host_len, &source)) {
+ // Invalid escaped character. There is nothing that can make this
+ // host valid. We append an escaped percent so the URL looks reasonable
+ // and mark as failed.
+--- qtwebengine/src/3rdparty/chromium/url/url_canon_internal.h
++++ qtwebengine/src/3rdparty/chromium/url/url_canon_internal.h
+@@ -305,9 +305,9 @@ inline bool Is8BitChar(base::char16 c) {
+ return c <= 255;
+ }
+
+-template<typename CHAR>
++template<typename CHAR, typename DST>
+ inline bool DecodeEscaped(const CHAR* spec, int* begin, int end,
+- unsigned char* unescaped_value) {
++ DST* unescaped_value) {
+ if (*begin + 3 > end ||
+ !Is8BitChar(spec[*begin + 1]) || !Is8BitChar(spec[*begin + 2])) {
+ // Invalid escape sequence because there's not enough room, or the
diff --git a/srcpkgs/qt5/patches/0093-chromium-v8-elfv2.patch b/srcpkgs/qt5/patches/0093-chromium-v8-elfv2.patch
new file mode 100644
index 00000000000..f580c814697
--- /dev/null
+++ b/srcpkgs/qt5/patches/0093-chromium-v8-elfv2.patch
@@ -0,0 +1,43 @@
+This fixes v8 on big endian ppc64 ELFv2.
+--- qtwebengine/src/3rdparty/chromium/v8/src/ppc/constants-ppc.h
++++ qtwebengine/src/3rdparty/chromium/v8/src/ppc/constants-ppc.h
+@@ -21,7 +21,8 @@
+ #endif
+
+ #if V8_HOST_ARCH_PPC && \
+- (V8_OS_AIX || (V8_TARGET_ARCH_PPC64 && V8_TARGET_BIG_ENDIAN))
++ (V8_OS_AIX || (V8_TARGET_ARCH_PPC64 && \
++ (V8_TARGET_BIG_ENDIAN && (!defined(_CALL_ELF) || _CALL_ELF == 1))))
+ #define ABI_USES_FUNCTION_DESCRIPTORS 1
+ #else
+ #define ABI_USES_FUNCTION_DESCRIPTORS 0
+@@ -33,13 +34,15 @@
+ #define ABI_PASSES_HANDLES_IN_REGS 0
+ #endif
+
+-#if !V8_HOST_ARCH_PPC || !V8_TARGET_ARCH_PPC64 || V8_TARGET_LITTLE_ENDIAN
++#if !V8_HOST_ARCH_PPC || !V8_TARGET_ARCH_PPC64 || \
++ (V8_TARGET_LITTLE_ENDIAN || (defined(_CALL_ELF) && _CALL_ELF == 2))
+ #define ABI_RETURNS_OBJECT_PAIRS_IN_REGS 1
+ #else
+ #define ABI_RETURNS_OBJECT_PAIRS_IN_REGS 0
+ #endif
+
+-#if !V8_HOST_ARCH_PPC || (V8_TARGET_ARCH_PPC64 && V8_TARGET_LITTLE_ENDIAN)
++#if !V8_HOST_ARCH_PPC || (V8_TARGET_ARCH_PPC64 && \
++ (V8_TARGET_LITTLE_ENDIAN || (defined(_CALL_ELF) && _CALL_ELF == 2)))
+ #define ABI_CALL_VIA_IP 1
+ #else
+ #define ABI_CALL_VIA_IP 0
+--- qtwebengine/src/3rdparty/chromium/v8/src/ppc/register-ppc.h
++++ qtwebengine/src/3rdparty/chromium/v8/src/ppc/register-ppc.h
+@@ -145,7 +145,8 @@ const int kNumSafepointRegisters = 32;
+ // The following constants describe the stack frame linkage area as
+ // defined by the ABI. Note that kNumRequiredStackFrameSlots must
+ // satisfy alignment requirements (rounding up if required).
+-#if V8_TARGET_ARCH_PPC64 && V8_TARGET_LITTLE_ENDIAN // ppc64le linux
++#if V8_TARGET_ARCH_PPC64 && (V8_TARGET_LITTLE_ENDIAN || \
++ defined(_CALL_ELF) && _CALL_ELF == 2)
+ // [0] back chain
+ // [1] condition register save area
+ // [2] link register save area
diff --git a/srcpkgs/qt5/patches/0094-big-endian-skia-portable.patch b/srcpkgs/qt5/patches/0094-big-endian-skia-portable.patch
new file mode 100644
index 00000000000..ea269d383d1
--- /dev/null
+++ b/srcpkgs/qt5/patches/0094-big-endian-skia-portable.patch
@@ -0,0 +1,17 @@
+--- qtwebengine/src/3rdparty/chromium/third_party/skia/third_party/skcms/skcms.cc
++++ qtwebengine/src/3rdparty/chromium/third_party/skia/third_party/skcms/skcms.cc
+@@ -1828,6 +1828,14 @@ typedef enum {
+ #endif
+ #endif
+
++// with current gcc 8.3.0 we get an internal compiler error when compiling
++// for ppc64 big endian - so switch to portable until this is resolved
++#if defined(__powerpc64__)
++# if defined(__BIG_ENDIAN__) && !defined(SKCMS_PORTABLE)
++# define SKCMS_PORTABLE
++# endif
++#endif
++
+ #if defined(__clang__)
+ template <int N, typename T> using Vec = T __attribute__((ext_vector_type(N)));
+ #elif defined(__GNUC__)
diff --git a/srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch b/srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
deleted file mode 100644
index 0266bb8ebb1..00000000000
--- a/srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
+++ /dev/null
@@ -1,2112 +0,0 @@
-This patches the bundled Chromium enough to allow it to build and work on
-little endian ppc64. The patchset is rebased regularly on top of latest
-Chromium codebase, so there should be no problem keeping it up to date.
-
-Ping q66 if you're updating qt5 and the patch does not apply anymore.
-
-Source: https://wiki.raptorcs.com/w/index.php?title=Porting/Chromium
-Upstream: Chromium does not accept additional platform support, downstream
- patching necessary
-
-diff --git qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/page_allocator.h qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/page_allocator.h
-index a39b4e301..5e62e7a23 100644
---- qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/page_allocator.h
-+++ qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/page_allocator.h
-@@ -15,7 +15,7 @@
-
- namespace base {
-
--#if defined(OS_WIN)
-+#if defined(OS_WIN) || defined(ARCH_CPU_PPC64)
- static const size_t kPageAllocationGranularityShift = 16; // 64KB
- #elif defined(_MIPS_ARCH_LOONGSON)
- static const size_t kPageAllocationGranularityShift = 14; // 16KB
-@@ -31,6 +31,10 @@ static const size_t kPageAllocationGranularityBaseMask =
-
- #if defined(_MIPS_ARCH_LOONGSON)
- static const size_t kSystemPageSize = 16384;
-+#elif defined(ARCH_CPU_PPC64)
-+// TODO: modern ppc64 can do 4k and 64k page sizes
-+// for now, 64k is assumed
-+static constexpr size_t kSystemPageSize = 65536;
- #else
- static const size_t kSystemPageSize = 4096;
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.h qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.h
-index 6e5143b09..74c7cf88f 100644
---- qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.h
-+++ qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/partition_alloc.h
-@@ -99,6 +99,8 @@ static const size_t kBucketShift = (kAllocationGranularity == 8) ? 3 : 2;
- // up against the end of a system page.
- #if defined(_MIPS_ARCH_LOONGSON)
- static const size_t kPartitionPageShift = 16; // 64KB
-+#elif defined(ARCH_CPU_PPC64)
-+static const size_t kPartitionPageShift = 18; // 256 KiB
- #else
- static const size_t kPartitionPageShift = 14; // 16KB
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.cc qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.cc
-index 272016c76..4b02d3ce5 100644
---- qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.cc
-+++ qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.cc
-@@ -55,6 +55,8 @@ const char kArch[] =
- "mips64el";
- #elif defined(__mips__)
- "mipsel";
-+#elif defined(__powerpc64__)
-+ "ppc64";
- #else
- #error "unknown arch"
- #endif
-@@ -127,6 +129,8 @@ const char* UpdateQueryParams::GetNaclArch() {
- return "mips32";
- #elif defined(ARCH_CPU_MIPS64EL)
- return "mips64";
-+#elif defined(ARCH_CPU_PPC64)
-+ return "ppc64";
- #else
- // NOTE: when adding new values here, please remember to update the
- // comment in the .h file about possible return values from this function.
-diff --git qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.h qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.h
-index a35e4c377..e315e144c 100644
---- qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.h
-+++ qtwebengine/src/3rdparty/chromium/components/update_client/update_query_params.h
-@@ -45,7 +45,7 @@ class UpdateQueryParams {
- // Returns the value we use for the "nacl_arch" parameter. Note that this may
- // be different from the "arch" parameter above (e.g. one may be 32-bit and
- // the other 64-bit). Possible return values include: "x86-32", "x86-64",
-- // "arm", and "mips32".
-+ // "arm", "mips32", and "ppc64".
- static const char* GetNaclArch();
-
- // Returns the current version of Chrome/Chromium.
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/features.gni qtwebengine/src/3rdparty/chromium/sandbox/features.gni
-index 89693c54c..6017c7eea 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/features.gni
-+++ qtwebengine/src/3rdparty/chromium/sandbox/features.gni
-@@ -12,6 +12,6 @@ use_seccomp_bpf =
- (is_linux || is_android) &&
- (current_cpu == "x86" || current_cpu == "x64" || current_cpu == "arm" ||
- current_cpu == "arm64" || current_cpu == "mipsel" ||
-- current_cpu == "mips64el")
-+ current_cpu == "mips64el" || current_cpu == "ppc64")
-
- use_seccomp_bpf = use_seccomp_bpf || is_nacl_nonsfi
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/BUILD.gn qtwebengine/src/3rdparty/chromium/sandbox/linux/BUILD.gn
-index 9d4726f89..9348f6461 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/BUILD.gn
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/BUILD.gn
-@@ -423,6 +423,8 @@ component("sandbox_services") {
-
- source_set("sandbox_services_headers") {
- sources = [
-+ "system_headers/ppc64_linux_syscalls.h",
-+ "system_headers/ppc64_linux_ucontext.h",
- "system_headers/arm64_linux_syscalls.h",
- "system_headers/arm64_linux_ucontext.h",
- "system_headers/arm_linux_syscalls.h",
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/linux_syscall_ranges.h qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/linux_syscall_ranges.h
-index 334a00bb9..272d65b2a 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/linux_syscall_ranges.h
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/linux_syscall_ranges.h
-@@ -53,6 +53,13 @@
- #define MAX_PUBLIC_SYSCALL 279u
- #define MAX_SYSCALL MAX_PUBLIC_SYSCALL
-
-+#elif defined(__powerpc64__)
-+
-+#include <asm/unistd.h>
-+#define MIN_SYSCALL 0u
-+#define MAX_PUBLIC_SYSCALL 386u
-+#define MAX_SYSCALL MAX_PUBLIC_SYSCALL
-+
- #else
- #error "Unsupported architecture"
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/seccomp_macros.h qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/seccomp_macros.h
-index e4e8142c4..6a926f904 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/seccomp_macros.h
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/bpf_dsl/seccomp_macros.h
-@@ -16,6 +16,9 @@
- #if defined(__mips__)
- // sys/user.h in eglibc misses size_t definition
- #include <stddef.h>
-+#elif defined(__powerpc64__)
-+// Manually define greg_t on ppc64
-+typedef unsigned long long greg_t;
- #endif
- #endif
-
-@@ -345,6 +348,51 @@ struct regs_struct {
- #define SECCOMP_PT_PARM4(_regs) (_regs).regs[3]
- #define SECCOMP_PT_PARM5(_regs) (_regs).regs[4]
- #define SECCOMP_PT_PARM6(_regs) (_regs).regs[5]
-+
-+#elif defined(__powerpc64__)
-+#include <asm/ptrace.h>
-+
-+typedef struct pt_regs regs_struct;
-+
-+#ifdef ARCH_CPU_LITTLE_ENDIAN
-+#define SECCOMP_ARCH AUDIT_ARCH_PPC64LE
-+#else
-+#define SECCOMP_ARCH AUDIT_ARCH_PPC64
-+#endif
-+
-+#define SECCOMP_REG(_ctx, _reg) ((_ctx)->uc_mcontext.regs->gpr[_reg])
-+
-+#define SECCOMP_RESULT(_ctx) SECCOMP_REG(_ctx, 3)
-+#define SECCOMP_SYSCALL(_ctx) SECCOMP_REG(_ctx, 0)
-+#define SECCOMP_IP(_ctx) (_ctx)->uc_mcontext.regs->nip
-+#define SECCOMP_PARM1(_ctx) SECCOMP_REG(_ctx, 3)
-+#define SECCOMP_PARM2(_ctx) SECCOMP_REG(_ctx, 4)
-+#define SECCOMP_PARM3(_ctx) SECCOMP_REG(_ctx, 5)
-+#define SECCOMP_PARM4(_ctx) SECCOMP_REG(_ctx, 6)
-+#define SECCOMP_PARM5(_ctx) SECCOMP_REG(_ctx, 7)
-+#define SECCOMP_PARM6(_ctx) SECCOMP_REG(_ctx, 8)
-+
-+#define SECCOMP_NR_IDX (offsetof(struct arch_seccomp_data, nr))
-+#define SECCOMP_ARCH_IDX (offsetof(struct arch_seccomp_data, arch))
-+#define SECCOMP_IP_MSB_IDX \
-+ (offsetof(struct arch_seccomp_data, instruction_pointer) + 4)
-+#define SECCOMP_IP_LSB_IDX \
-+ (offsetof(struct arch_seccomp_data, instruction_pointer) + 0)
-+#define SECCOMP_ARG_MSB_IDX(nr) \
-+ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 4)
-+#define SECCOMP_ARG_LSB_IDX(nr) \
-+ (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 0)
-+
-+#define SECCOMP_PT_RESULT(_regs) (_regs).gpr[3]
-+#define SECCOMP_PT_SYSCALL(_regs) (_regs).gpr[0]
-+#define SECCOMP_PT_IP(_regs) (_regs).nip
-+#define SECCOMP_PT_PARM1(_regs) (_regs).gpr[3]
-+#define SECCOMP_PT_PARM2(_regs) (_regs).gpr[4]
-+#define SECCOMP_PT_PARM3(_regs) (_regs).gpr[5]
-+#define SECCOMP_PT_PARM4(_regs) (_regs).gpr[6]
-+#define SECCOMP_PT_PARM5(_regs) (_regs).gpr[7]
-+#define SECCOMP_PT_PARM6(_regs) (_regs).gpr[8]
-+
- #else
- #error Unsupported target platform
-
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
-index 6aab37a88..0a4d49729 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/baseline_policy.cc
-@@ -86,7 +86,7 @@ bool IsBaselinePolicyWatched(int sysno) {
- SyscallSets::IsNuma(sysno) ||
- SyscallSets::IsPrctl(sysno) ||
- SyscallSets::IsProcessGroupOrSession(sysno) ||
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- SyscallSets::IsSocketCall(sysno) ||
- #endif
- #if defined(__arm__)
-@@ -186,7 +186,7 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno,
- }
-
- #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- if (sysno == __NR_mmap)
- return RestrictMmapFlags();
- #endif
-@@ -203,7 +203,7 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno,
- return RestrictPrctl();
-
- #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- if (sysno == __NR_socketpair) {
- // Only allow AF_UNIX, PF_UNIX. Crash if anything else is seen.
- static_assert(AF_UNIX == PF_UNIX,
-@@ -241,7 +241,7 @@ ResultExpr EvaluateSyscallImpl(int fs_denied_errno,
- return Error(EPERM);
- }
-
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- if (SyscallSets::IsSocketCall(sysno))
- return RestrictSocketcallCommand();
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
-index 155e52e9b..595c27377 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
-@@ -36,6 +36,11 @@
- #include <sys/ioctl.h>
- #endif
-
-+// On PPC64, TCGETS is defined in terms of struct termios, so we must include termios.h
-+#ifdef __powerpc64__
-+#include <termios.h>
-+#endif
-+
- #if defined(OS_ANDROID)
-
- #if !defined(F_DUPFD_CLOEXEC)
-@@ -98,6 +103,15 @@ inline bool IsArchitectureMips() {
- #endif
- }
-
-+inline bool IsArchitecturePPC64() {
-+#if defined(__powerpc64__)
-+ return true;
-+#else
-+ return false;
-+#endif
-+}
-+
-+
- // Ubuntu's version of glibc has a race condition in sem_post that can cause
- // it to call futex(2) with bogus op arguments. To workaround this, we need
- // to allow those futex(2) calls to fail with EINVAL, instead of crashing the
-@@ -239,7 +253,8 @@ ResultExpr RestrictFcntlCommands() {
- // operator.
- // Glibc overrides the kernel's O_LARGEFILE value. Account for this.
- uint64_t kOLargeFileFlag = O_LARGEFILE;
-- if (IsArchitectureX86_64() || IsArchitectureI386() || IsArchitectureMips())
-+ if (IsArchitectureX86_64() || IsArchitectureI386() || IsArchitectureMips() \
-+ || IsArchitecturePPC64())
- kOLargeFileFlag = 0100000;
-
- const Arg<int> cmd(1);
-@@ -262,7 +277,7 @@ ResultExpr RestrictFcntlCommands() {
- .Default(CrashSIGSYS());
- }
-
--#if defined(__i386__) || defined(__mips__)
-+#if defined(__i386__) || defined(__mips__) || defined(__powerpc64__)
- ResultExpr RestrictSocketcallCommand() {
- // Unfortunately, we are unable to restrict the first parameter to
- // socketpair(2). Whilst initially sounding bad, it's noteworthy that very
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
-index 71c56093d..f8b9c0c6b 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.h
-@@ -48,7 +48,7 @@ SANDBOX_EXPORT bpf_dsl::ResultExpr RestrictMprotectFlags();
- // O_NONBLOCK | O_SYNC | O_LARGEFILE | O_CLOEXEC | O_NOATIME.
- SANDBOX_EXPORT bpf_dsl::ResultExpr RestrictFcntlCommands();
-
--#if defined(__i386__) || defined(__mips__)
-+#if defined(__i386__) || defined(__mips__) || defined(__powerpc64__)
- // Restrict socketcall(2) to only allow socketpair(2), send(2), recv(2),
- // sendto(2), recvfrom(2), shutdown(2), sendmsg(2) and recvmsg(2).
- SANDBOX_EXPORT bpf_dsl::ResultExpr RestrictSocketcallCommand();
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
-index 6259639c9..f2f511d70 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc
-@@ -28,7 +28,8 @@ bool SyscallSets::IsKill(int sysno) {
- bool SyscallSets::IsAllowedGettime(int sysno) {
- switch (sysno) {
- case __NR_gettimeofday:
--#if defined(__i386__) || defined(__x86_64__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__mips32__) || \
-+ defined(__powerpc64__)
- case __NR_time:
- #endif
- return true;
-@@ -42,7 +43,7 @@ bool SyscallSets::IsAllowedGettime(int sysno) {
- case __NR_ftime: // Obsolete.
- #endif
- case __NR_settimeofday: // Privileged.
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- case __NR_stime:
- #endif
- default:
-@@ -108,7 +109,7 @@ bool SyscallSets::IsFileSystem(int sysno) {
- case __NR_faccessat: // EPERM not a valid errno.
- case __NR_fchmodat:
- case __NR_fchownat: // Should be called chownat ?
--#if defined(__x86_64__) || defined(__aarch64__)
-+#if defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__)
- case __NR_newfstatat: // fstatat(). EPERM not a valid errno.
- #elif defined(__i386__) || defined(__arm__) || defined(__mips32__)
- case __NR_fstatat64:
-@@ -125,7 +126,7 @@ bool SyscallSets::IsFileSystem(int sysno) {
- case __NR_memfd_create:
- case __NR_mkdirat:
- case __NR_mknodat:
--#if defined(__i386__)
-+#if defined(__i386__) || defined(__powerpc64__)
- case __NR_oldlstat:
- case __NR_oldstat:
- #endif
-@@ -146,7 +147,8 @@ bool SyscallSets::IsFileSystem(int sysno) {
- case __NR_truncate64:
- #endif
- case __NR_unlinkat:
--#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-+ defined(__powerpc64__)
- case __NR_utime:
- #endif
- case __NR_utimensat: // New.
-@@ -164,7 +166,8 @@ bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) {
- #endif
- return true;
- // TODO(jln): these should be denied gracefully as well (moved below).
--#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-+ defined(__powerpc64__)
- case __NR_fadvise64: // EPERM not a valid errno.
- #endif
- #if defined(__i386__)
-@@ -176,7 +179,8 @@ bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) {
- case __NR_fdatasync: // EPERM not a valid errno.
- case __NR_flock: // EPERM not a valid errno.
- case __NR_fstatfs: // Give information about the whole filesystem.
--#if defined(__i386__) || defined(__arm__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__arm__) || defined(__mips32__) || \
-+ defined(__powerpc64__)
- case __NR_fstatfs64:
- #endif
- case __NR_fsync: // EPERM not a valid errno.
-@@ -188,6 +192,8 @@ bool SyscallSets::IsAllowedFileSystemAccessViaFd(int sysno) {
- case __NR_sync_file_range: // EPERM not a valid errno.
- #elif defined(__arm__)
- case __NR_arm_sync_file_range: // EPERM not a valid errno.
-+#elif defined(__powerpc64__)
-+ case __NR_sync_file_range2: // EPERM not a valid errno.
- #endif
- default:
- return false;
-@@ -211,7 +217,7 @@ bool SyscallSets::IsDeniedFileSystemAccessViaFd(int sysno) {
- case __NR_getdents: // EPERM not a valid errno.
- #endif
- case __NR_getdents64: // EPERM not a valid errno.
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- case __NR_readdir:
- #endif
- return true;
-@@ -252,7 +258,7 @@ bool SyscallSets::IsGetSimpleId(int sysno) {
- bool SyscallSets::IsProcessPrivilegeChange(int sysno) {
- switch (sysno) {
- case __NR_capset:
--#if defined(__i386__) || defined(__x86_64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc64__)
- case __NR_ioperm: // Intel privilege.
- case __NR_iopl: // Intel privilege.
- #endif
-@@ -301,7 +307,8 @@ bool SyscallSets::IsAllowedSignalHandling(int sysno) {
- case __NR_rt_sigaction:
- case __NR_rt_sigprocmask:
- case __NR_rt_sigreturn:
--#if defined(__i386__) || defined(__arm__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__arm__) || defined(__mips32__) || \
-+ defined(__powerpc64__)
- case __NR_sigaction:
- case __NR_sigprocmask:
- case __NR_sigreturn:
-@@ -317,7 +324,8 @@ bool SyscallSets::IsAllowedSignalHandling(int sysno) {
- case __NR_signalfd:
- #endif
- case __NR_signalfd4:
--#if defined(__i386__) || defined(__arm__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__arm__) || defined(__mips32__) || \
-+ defined(__powerpc64__)
- case __NR_sigpending:
- case __NR_sigsuspend:
- #endif
-@@ -340,7 +348,7 @@ bool SyscallSets::IsAllowedOperationOnFd(int sysno) {
- #endif
- case __NR_dup3:
- #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- case __NR_shutdown:
- #endif
- return true;
-@@ -372,7 +380,7 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) {
- case __NR_exit_group:
- case __NR_wait4:
- case __NR_waitid:
--#if defined(__i386__)
-+#if defined(__i386__) || defined(__powerpc64__)
- case __NR_waitpid:
- #endif
- #if !defined(__GLIBC__)
-@@ -443,7 +451,7 @@ bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) {
- return true;
- default:
- #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- case __NR_socketpair: // We will want to inspect its argument.
- #endif
- return false;
-@@ -453,7 +461,7 @@ bool SyscallSets::IsAllowedGetOrModifySocket(int sysno) {
- bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) {
- switch (sysno) {
- #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- case __NR_accept:
- case __NR_accept4:
- case __NR_bind:
-@@ -467,7 +475,7 @@ bool SyscallSets::IsDeniedGetOrModifySocket(int sysno) {
- }
- }
-
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- // Big multiplexing system call for sockets.
- bool SyscallSets::IsSocketCall(int sysno) {
- switch (sysno) {
-@@ -481,7 +489,8 @@ bool SyscallSets::IsSocketCall(int sysno) {
- }
- #endif
-
--#if defined(__x86_64__) || defined(__arm__) || defined(__mips__)
-+#if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
-+ defined(__powerpc64__)
- bool SyscallSets::IsNetworkSocketInformation(int sysno) {
- switch (sysno) {
- case __NR_getpeername:
-@@ -509,7 +518,7 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) {
- case __NR_mincore:
- case __NR_mlockall:
- #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- case __NR_mmap:
- #endif
- #if defined(__i386__) || defined(__arm__) || defined(__mips32__)
-@@ -538,7 +547,8 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) {
- bool SyscallSets::IsAllowedGeneralIo(int sysno) {
- switch (sysno) {
- case __NR_lseek:
--#if defined(__i386__) || defined(__arm__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__arm__) || defined(__mips32__) || \
-+ defined(__powerpc64__)
- case __NR__llseek:
- #endif
- #if !defined(__aarch64__)
-@@ -548,25 +558,26 @@ bool SyscallSets::IsAllowedGeneralIo(int sysno) {
- case __NR_pselect6:
- case __NR_read:
- case __NR_readv:
--#if defined(__arm__) || defined(__mips32__)
-+#if defined(__arm__) || defined(__mips32__) || defined(__powerpc64__)
- case __NR_recv:
- #endif
- #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- case __NR_recvfrom: // Could specify source.
- case __NR_recvmsg: // Could specify source.
- #endif
--#if defined(__i386__) || defined(__x86_64__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__powerpc64__)
- case __NR_select:
- #endif
--#if defined(__i386__) || defined(__arm__) || defined(__mips__)
-+#if defined(__i386__) || defined(__arm__) || defined(__mips__) || \
-+ defined(__powerpc64__)
- case __NR__newselect:
- #endif
--#if defined(__arm__) || defined(__mips32__)
-+#if defined(__arm__) || defined(__mips32__) || defined(__powerpc64__)
- case __NR_send:
- #endif
- #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- case __NR_sendmsg: // Could specify destination.
- case __NR_sendto: // Could specify destination.
- #endif
-@@ -622,7 +633,8 @@ bool SyscallSets::IsAllowedBasicScheduler(int sysno) {
- case __NR_nanosleep:
- return true;
- case __NR_getpriority:
--#if defined(__i386__) || defined(__arm__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__arm__) || defined(__mips32__) || \
-+ defined(__powerpc64__)
- case __NR_nice:
- #endif
- case __NR_setpriority:
-@@ -633,7 +645,8 @@ bool SyscallSets::IsAllowedBasicScheduler(int sysno) {
-
- bool SyscallSets::IsAdminOperation(int sysno) {
- switch (sysno) {
--#if defined(__i386__) || defined(__arm__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__arm__) || defined(__mips32__) || \
-+ defined(__powerpc64__)
- case __NR_bdflush:
- #endif
- case __NR_kexec_load:
-@@ -649,7 +662,8 @@ bool SyscallSets::IsAdminOperation(int sysno) {
-
- bool SyscallSets::IsKernelModule(int sysno) {
- switch (sysno) {
--#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-+ defined(__powerpc64__)
- case __NR_create_module:
- case __NR_get_kernel_syms: // Should ENOSYS.
- case __NR_query_module:
-@@ -681,7 +695,7 @@ bool SyscallSets::IsFsControl(int sysno) {
- case __NR_quotactl:
- case __NR_swapoff:
- case __NR_swapon:
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- case __NR_umount:
- #endif
- case __NR_umount2:
-@@ -697,7 +711,7 @@ bool SyscallSets::IsNuma(int sysno) {
- case __NR_getcpu:
- case __NR_mbind:
- #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- case __NR_migrate_pages:
- #endif
- case __NR_move_pages:
-@@ -726,13 +740,13 @@ bool SyscallSets::IsGlobalProcessEnvironment(int sysno) {
- switch (sysno) {
- case __NR_acct: // Privileged.
- #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- case __NR_getrlimit:
- #endif
--#if defined(__i386__) || defined(__arm__)
-+#if defined(__i386__) || defined(__arm__) || defined(__powerpc64__)
- case __NR_ugetrlimit:
- #endif
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- case __NR_ulimit:
- #endif
- case __NR_getrusage:
-@@ -766,7 +780,7 @@ bool SyscallSets::IsGlobalSystemStatus(int sysno) {
- #endif
- case __NR_sysinfo:
- case __NR_uname:
--#if defined(__i386__)
-+#if defined(__i386__) || defined(__powerpc64__)
- case __NR_olduname:
- case __NR_oldolduname:
- #endif
-@@ -857,7 +871,7 @@ bool SyscallSets::IsSystemVMessageQueue(int sysno) {
- }
- #endif
-
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- // Big system V multiplexing system call.
- bool SyscallSets::IsSystemVIpc(int sysno) {
- switch (sysno) {
-@@ -876,7 +890,7 @@ bool SyscallSets::IsAnySystemV(int sysno) {
- || defined(__mips64__)
- return IsSystemVMessageQueue(sysno) || IsSystemVSemaphores(sysno) ||
- IsSystemVSharedMemory(sysno);
--#elif defined(__i386__) || defined(__mips32__)
-+#elif defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- return IsSystemVIpc(sysno);
- #endif
- }
-@@ -929,7 +943,8 @@ bool SyscallSets::IsFaNotify(int sysno) {
- bool SyscallSets::IsTimer(int sysno) {
- switch (sysno) {
- case __NR_getitimer:
--#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-+ defined(__powerpc64__)
- case __NR_alarm:
- #endif
- case __NR_setitimer:
-@@ -988,16 +1003,18 @@ bool SyscallSets::IsMisc(int sysno) {
- case __NR_syncfs:
- case __NR_vhangup:
- // The system calls below are not implemented.
--#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-+ defined(__powerpc64__)
- case __NR_afs_syscall:
- #endif
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- case __NR_break:
- #endif
--#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-+ defined(__powerpc64__)
- case __NR_getpmsg:
- #endif
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- case __NR_gtty:
- case __NR_idle:
- case __NR_lock:
-@@ -1005,19 +1022,20 @@ bool SyscallSets::IsMisc(int sysno) {
- case __NR_prof:
- case __NR_profil:
- #endif
--#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || \
-+ defined(__powerpc64__)
- case __NR_putpmsg:
- #endif
- #if defined(__x86_64__)
- case __NR_security:
- #endif
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- case __NR_stty:
- #endif
--#if defined(__x86_64__)
-+#if defined(__x86_64__) || defined(__powerpc64__)
- case __NR_tuxcall:
- #endif
--#if !defined(__aarch64__)
-+#if !defined(__aarch64__) && !defined(__powerpc64__)
- case __NR_vserver:
- #endif
- return true;
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h
-index c31d5e9c1..7898be9e1 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf-helpers/syscall_sets.h
-@@ -42,13 +42,13 @@ class SANDBOX_EXPORT SyscallSets {
- static bool IsAllowedGetOrModifySocket(int sysno);
- static bool IsDeniedGetOrModifySocket(int sysno);
-
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- // Big multiplexing system call for sockets.
- static bool IsSocketCall(int sysno);
- #endif
-
- #if defined(__x86_64__) || defined(__arm__) || defined(__mips__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
- static bool IsNetworkSocketInformation(int sysno);
- #endif
-
-@@ -85,7 +85,7 @@ class SANDBOX_EXPORT SyscallSets {
- static bool IsSystemVMessageQueue(int sysno);
- #endif
-
--#if defined(__i386__) || defined(__mips32__)
-+#if defined(__i386__) || defined(__mips32__) || defined(__powerpc64__)
- // Big system V multiplexing system call.
- static bool IsSystemVIpc(int sysno);
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/syscall.cc qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/syscall.cc
-index d6db70f0d..4937b25a4 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/syscall.cc
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/syscall.cc
-@@ -15,7 +15,7 @@ namespace sandbox {
- namespace {
-
- #if defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARM_FAMILY) || \
-- defined(ARCH_CPU_MIPS_FAMILY)
-+ defined(ARCH_CPU_MIPS_FAMILY) || defined (ARCH_CPU_PPC64_FAMILY)
- // Number that's not currently used by any Linux kernel ABIs.
- const int kInvalidSyscallNumber = 0x351d3;
- #else
-@@ -307,12 +307,56 @@ asm(// We need to be able to tell the kernel exactly where we made a
- // Enter the kernel
- "svc 0\n"
- "2:ret\n"
-+ ".cfi_endproc\n"
-+ ".size SyscallAsm, .-SyscallAsm\n"
-+#elif defined(__powerpc64__)
-+ ".text\n"
-+ ".align 4\n"
-+ ".type SyscallAsm @function\n"
-+ "SyscallAsm:\n"
-+ ".cfi_startproc\n"
-+
-+ // Check if r3 is negative
-+ "cmpdi 3, 0\n"
-+ "bgt 2f\n"
-+
-+ // Load address of 3f into r3 and return
-+ "mflr 10\n"
-+ "bl 1f\n"
-+ "1: mflr 3\n"
-+ "mtlr 10\n"
-+ "addi 3, 3, 4*13\n"
-+ "blr\n"
-+
-+ // Load arguments from array into r3-8
-+ // save param 3 in r10
-+ "2:\n"
-+ "mr 0, 3\n"
-+ "ld 3, 0(4)\n"
-+ "ld 5, 16(4)\n"
-+ "ld 6, 24(4)\n"
-+ "ld 7, 32(4)\n"
-+ "ld 8, 40(4)\n"
-+ "ld 4, 8(4)\n"
-+ "li 9, 0\n"
-+
-+ // Enter kernel
-+ "sc\n"
-+
-+ // Magic return address
-+ "3:\n"
-+ // Like MIPS, ppc64 return values are always positive.
-+ // Check for error in cr0.SO and negate upon error
-+ "bc 4, 3, 4f\n"
-+ "neg 3, 3\n"
-+ "4: blr\n"
-+
- ".cfi_endproc\n"
- ".size SyscallAsm, .-SyscallAsm\n"
- #endif
- ); // asm
-
--#if defined(__x86_64__)
-+#if defined(__x86_64__) || defined(__powerpc64__)
- extern "C" {
- intptr_t SyscallAsm(intptr_t nr, const intptr_t args[6]);
- }
-@@ -426,6 +470,8 @@ intptr_t Syscall::Call(int nr,
- ret = inout;
- }
-
-+#elif defined(__powerpc64__)
-+ intptr_t ret = SyscallAsm(nr, args);
- #else
- #error "Unimplemented architecture"
- #endif
-@@ -442,8 +488,18 @@ void Syscall::PutValueInUcontext(intptr_t ret_val, ucontext_t* ctx) {
- // needs to be changed back.
- ret_val = -ret_val;
- SECCOMP_PARM4(ctx) = 1;
-- } else
-+ } else {
- SECCOMP_PARM4(ctx) = 0;
-+ }
-+#endif
-+#if defined(__powerpc64__)
-+ // Same as MIPS, need to invert ret and set error register (cr0.SO)
-+ if (ret_val <= -1 && ret_val >= -4095) {
-+ ret_val = -ret_val;
-+ ctx->uc_mcontext.regs->ccr |= (1 << 28);
-+ } else {
-+ ctx->uc_mcontext.regs->ccr &= ~(1 << 28);
-+ }
- #endif
- SECCOMP_RESULT(ctx) = static_cast<greg_t>(ret_val);
- }
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/trap.cc qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/trap.cc
-index e9c51940c..35a8f0d67 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/trap.cc
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/seccomp-bpf/trap.cc
-@@ -230,6 +230,20 @@ void Trap::SigSys(int nr, LinuxSigInfo* info, ucontext_t* ctx) {
- SetIsInSigHandler();
- }
-
-+#if defined(__powerpc64__)
-+ // On ppc64+glibc, some syscalls seem to accidentally negate the first
-+ // parameter which causes checks against it to fail. For now, manually
-+ // negate them back.
-+ // TODO(shawn@anastas.io): investigate this issue further
-+ auto nr = SECCOMP_SYSCALL(ctx);
-+ if (nr == __NR_openat || nr == __NR_mkdirat || nr == __NR_faccessat || nr == __NR_readlinkat ||
-+ nr == __NR_renameat || nr == __NR_renameat2 || nr == __NR_newfstatat || nr == __NR_unlinkat) {
-+ if (static_cast<int>(SECCOMP_PARM1(ctx)) > 0) {
-+ SECCOMP_PARM1(ctx) = -SECCOMP_PARM1(ctx);
-+ }
-+ }
-+#endif
-+
- // Copy the seccomp-specific data into a arch_seccomp_data structure. This
- // is what we are showing to TrapFnc callbacks that the system call
- // evaluator registered with the sandbox.
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/services/credentials.cc qtwebengine/src/3rdparty/chromium/sandbox/linux/services/credentials.cc
-index 65b63adfe..1b4e62e46 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/services/credentials.cc
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/services/credentials.cc
-@@ -77,7 +77,7 @@ bool ChrootToSafeEmptyDir() {
- pid_t pid = -1;
- alignas(16) char stack_buf[PTHREAD_STACK_MIN];
- #if defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARM_FAMILY) || \
-- defined(ARCH_CPU_MIPS_FAMILY)
-+ defined(ARCH_CPU_MIPS_FAMILY) || defined(ARCH_CPU_PPC64_FAMILY)
- // The stack grows downward.
- void* stack = stack_buf + sizeof(stack_buf);
- #else
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h
-index a60fe2ad3..9dccdb51d 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_seccomp.h
-@@ -29,6 +29,9 @@
- #ifndef EM_AARCH64
- #define EM_AARCH64 183
- #endif
-+#ifndef EM_PPC64
-+#define EM_PPC64 21
-+#endif
-
- #ifndef __AUDIT_ARCH_64BIT
- #define __AUDIT_ARCH_64BIT 0x80000000
-@@ -54,6 +57,12 @@
- #ifndef AUDIT_ARCH_AARCH64
- #define AUDIT_ARCH_AARCH64 (EM_AARCH64 | __AUDIT_ARCH_64BIT | __AUDIT_ARCH_LE)
- #endif
-+#ifndef AUDIT_ARCH_PPC64
-+#define AUDIT_ARCH_PPC64 (EM_PPC64 | __AUDIT_ARCH_64BIT)
-+#endif
-+#ifndef AUDIT_ARCH_PPC64LE
-+#define AUDIT_ARCH_PPC64LE (EM_PPC64 | __AUDIT_ARCH_64BIT | __AUDIT_ARCH_LE)
-+#endif
-
- // For prctl.h
- #ifndef PR_SET_SECCOMP
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_signal.h qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_signal.h
-index 5ac4fdb42..b27b4ea5f 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_signal.h
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_signal.h
-@@ -11,7 +11,7 @@
- // (not undefined, but defined different values and in different memory
- // layouts). So, fill the gap here.
- #if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || \
-- defined(__aarch64__)
-+ defined(__aarch64__) || defined(__powerpc64__)
-
- #define LINUX_SIGHUP 1
- #define LINUX_SIGINT 2
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_syscalls.h qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_syscalls.h
-index 761c08abe..28ebf2f4e 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_syscalls.h
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_syscalls.h
-@@ -33,5 +33,9 @@
- #include "sandbox/linux/system_headers/arm64_linux_syscalls.h"
- #endif
-
-+#if defined(__powerpc64__)
-+#include "sandbox/linux/system_headers/ppc64_linux_syscalls.h"
-+#endif
-+
- #endif // SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SYSCALLS_H_
-
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_ucontext.h qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_ucontext.h
-index e97d7277d..f3f05849a 100644
---- qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_ucontext.h
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/linux_ucontext.h
-@@ -19,6 +19,8 @@
- #include "sandbox/linux/system_headers/mips64_linux_ucontext.h"
- #elif defined(__aarch64__)
- #include "sandbox/linux/system_headers/arm64_linux_ucontext.h"
-+#elif defined(__powerpc64__)
-+#include "sandbox/linux/system_headers/ppc64_linux_ucontext.h"
- #else
- #error "No support for your architecture in Android or PNaCl header"
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/ppc64_linux_syscalls.h qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/ppc64_linux_syscalls.h
-new file mode 100644
-index 000000000..ccacffe22
---- /dev/null
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/ppc64_linux_syscalls.h
-@@ -0,0 +1,12 @@
-+// Copyright 2014 The Chromium Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
-+
-+#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
-+#define SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
-+
-+#include <asm/unistd.h>
-+
-+//TODO: is it necessary to redefine syscall numbers for PPC64?
-+
-+#endif // SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
-diff --git qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/ppc64_linux_ucontext.h qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/ppc64_linux_ucontext.h
-new file mode 100644
-index 000000000..07728e087
---- /dev/null
-+++ qtwebengine/src/3rdparty/chromium/sandbox/linux/system_headers/ppc64_linux_ucontext.h
-@@ -0,0 +1,12 @@
-+// Copyright 2014 The Chromium Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style license that can be
-+// found in the LICENSE file.
-+
-+#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
-+#define SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
-+
-+#include <sys/ucontext.h>
-+
-+//TODO: is it necessary to redefine ucontext on PPC64?
-+
-+#endif // SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_UCONTEXT_H_
-diff --git qtwebengine/src/3rdparty/chromium/services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc qtwebengine/src/3rdparty/chromium/services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc
-index bbeb3152d..156cd0d24 100644
---- qtwebengine/src/3rdparty/chromium/services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc
-+++ qtwebengine/src/3rdparty/chromium/services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc
-@@ -15,6 +15,11 @@
- #include "sandbox/linux/system_headers/linux_syscalls.h"
- #include "services/service_manager/sandbox/linux/sandbox_linux.h"
-
-+// On PPC64, TCGETS is defined in terms of struct termios, so we must include termios.h
-+#ifdef __powerpc64__
-+#include <termios.h>
-+#endif
-+
- #if defined(OS_CHROMEOS)
- // TODO(vignatti): replace the local definitions below with #include
- // <linux/dma-buf.h> once kernel version 4.6 becomes widely used.
-diff --git qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/HeapPage.h qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/HeapPage.h
-index 20674563e..49f45fede 100644
---- qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/HeapPage.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/HeapPage.h
-@@ -62,11 +62,12 @@ constexpr size_t kBlinkPageBaseMask = ~kBlinkPageOffsetMask;
- constexpr size_t kBlinkPagesPerRegion = 10;
-
- // TODO(nya): Replace this with something like #if ENABLE_NACL.
--#if 0
-+#if defined(ARCH_CPU_PPC64)
- // NaCl's system page size is 64 KiB. This causes a problem in Oilpan's heap
- // layout because Oilpan allocates two guard pages for each Blink page (whose
- // size is kBlinkPageSize = 2^17 = 128 KiB). So we don't use guard pages in
- // NaCl.
-+// The same issue holds for ppc64 systems, which use a 64k page size.
- constexpr size_t kBlinkGuardPageSize = 0;
- #else
- constexpr size_t kBlinkGuardPageSize = base::kSystemPageSize;
-diff --git qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/asm/BUILD.gn qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/asm/BUILD.gn
-index 6c87950f4..a2fab32b3 100644
---- qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/asm/BUILD.gn
-+++ qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/asm/BUILD.gn
-@@ -46,6 +46,10 @@ if (current_cpu == "x86" || current_cpu == "x64") {
- sources = [
- "SaveRegisters_mips64.S",
- ]
-+ } else if (current_cpu == "ppc64") {
-+ sources = [
-+ "SaveRegisters_ppc64.S",
-+ ]
- }
-
- if (current_cpu == "arm") {
-diff --git qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/asm/SaveRegisters_ppc64.S qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/asm/SaveRegisters_ppc64.S
-new file mode 100644
-index 000000000..ecd139ae1
---- /dev/null
-+++ qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/heap/asm/SaveRegisters_ppc64.S
-@@ -0,0 +1,59 @@
-+/*
-+ * typedef void (*PushAllRegistersCallback)(SafePointBarrier*, ThreadState*, intptr_t*);
-+ * extern "C" void PushAllRegisters(SafePointBarrier*, ThreadState*, PushAllRegistersCallback)
-+ */
-+
-+.type PushAllRegisters, %function
-+.global PushAllRegisters
-+.hidden PushAllRegisters
-+PushAllRegisters:
-+ // Push all callee-saves registers to get them
-+ // on the stack for conservative stack scanning.
-+ // Reserve space for callee-saved registers and minimal stack frame.
-+ mflr 0 # r0 = LR
-+ std 0,16(1) # store LR at addr sp+16
-+ stdu 1,-176(1) # grow stack by 176 bytes and store new stack top ptr to r1
-+ # 3218*8 = min stack non-volatile registers
-+
-+ // Save the callee-saved registers
-+ std 31,168(1) # store r31 to addr sp+168
-+ std 30,160(1) # etc...
-+ std 29,152(1)
-+ std 28,144(1)
-+ std 27,136(1)
-+ std 26,128(1)
-+ std 25,120(1)
-+ std 24,112(1)
-+ std 23,104(1)
-+ std 22,96(1)
-+ std 21,88(1)
-+ std 20,80(1)
-+ std 19,72(1)
-+ std 18,64(1)
-+ std 17,56(1)
-+ std 16,48(1)
-+ std 15,40(1)
-+ std 14,32(1)
-+
-+ // Note: the callee-saved floating point registers do not need to be
-+ // copied to the stack, because fp registers never hold heap pointers
-+ // and so do not need to be kept visible to the garbage collector.
-+
-+ // Pass the two first arguments untouched in r3 and r4 and the
-+ // stack pointer to the callback.
-+
-+ std 2, 24(1) # save r2 to sp+24 addr
-+ mtctr 5 # copy 3rd function arg (callback fn pointer) to CTR
-+ mr 12, 5 # r12 must hold address of callback we are going to call
-+ # for position-idependent functions inside the callback to work
-+ mr 5, 1 # set current sp (stack top) as 3rd argument for the callback
-+ bctrl # set LR to PC+4 and call the callback
-+ ld 2, 24(1) # restore r2 from sp+24 addr
-+
-+ // Adjust stack, restore return address and return.
-+ // Note: the copied registers do not need to be reloaded here,
-+ // because they were preserved by the called routine.
-+ addi 1,1,176 # restore original SP by doing sp += 176
-+ ld 0,16(1) # restore original LR from addr sp+16
-+ mtlr 0 # ... copy it to the actual LR
-+ blr # return to LR addr
-diff --git qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/wtf/dtoa/utils.h qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/wtf/dtoa/utils.h
-index 7f1b1c6ca..65adc0e6d 100644
---- qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/wtf/dtoa/utils.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/WebKit/Source/platform/wtf/dtoa/utils.h
-@@ -45,7 +45,7 @@
- // disabled.)
- // On Linux,x86 89255e-22 != Div_double(89255.0/1e22)
- #if defined(_M_X64) || defined(__x86_64__) || defined(__ARMEL__) || \
-- defined(__aarch64__) || defined(__MIPSEL__)
-+ defined(__aarch64__) || defined(__MIPSEL__) || defined(__powerpc64__)
- #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
- #elif defined(_M_IX86) || defined(__i386__)
- #if defined(_WIN32)
-diff --git qtwebengine/src/3rdparty/chromium/third_party/angle/src/libANGLE/Constants.h qtwebengine/src/3rdparty/chromium/third_party/angle/src/libANGLE/Constants.h
-index 2fe921af3..0a0bfe442 100644
---- qtwebengine/src/3rdparty/chromium/third_party/angle/src/libANGLE/Constants.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/angle/src/libANGLE/Constants.h
-@@ -9,6 +9,7 @@
- #ifndef LIBANGLE_CONSTANTS_H_
- #define LIBANGLE_CONSTANTS_H_
-
-+#include <cstddef>
- #include "common/platform.h"
-
- namespace gl
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h
-index e2ef45df5..e295bd76b 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h
-@@ -44,6 +44,8 @@ typedef MDRawContextARM RawContextCPU;
- typedef MDRawContextARM64 RawContextCPU;
- #elif defined(__mips__)
- typedef MDRawContextMIPS RawContextCPU;
-+#elif defined(__powerpc64__)
-+typedef MDRawContextPPC64 RawContextCPU;
- #else
- #error "This code has not been ported to your platform yet."
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc
-index 0a1041d62..d2a7b3394 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc
-@@ -270,7 +270,42 @@ void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
- out->float_save.fir = mcontext.fpc_eir;
- #endif
- }
--#endif // __mips__
-+
-+#elif defined(__powerpc64__)
-+
-+uintptr_t ThreadInfo::GetInstructionPointer() const {
-+ return mcontext.gp_regs[PT_NIP];
-+}
-+
-+void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
-+ out->context_flags = MD_CONTEXT_PPC64_FULL;
-+ for (int i = 0; i < MD_CONTEXT_PPC64_GPR_COUNT; i++)
-+ out->gpr[i] = mcontext.gp_regs[i];
-+
-+ out->lr = mcontext.gp_regs[PT_LNK];
-+ out->srr0 = mcontext.gp_regs[PT_NIP];
-+ out->srr1 = mcontext.gp_regs[PT_MSR];
-+ out->cr = mcontext.gp_regs[PT_CCR];
-+ out->xer = mcontext.gp_regs[PT_XER];
-+ out->ctr = mcontext.gp_regs[PT_CTR];
-+
-+ for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++)
-+ out->float_save.fpregs[i] = mcontext.fp_regs[i];
-+
-+ out->float_save.fpscr = mcontext.fp_regs[NFPREG-1];
-+
-+ for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++)
-+ out->vector_save.save_vr[i] = \
-+ {(((uint64_t)vregs.vrregs[i][0]) << 32)
-+ | vregs.vrregs[i][1],
-+ (((uint64_t)vregs.vrregs[i][2]) << 32)
-+ | vregs.vrregs[i][3]};
-+
-+ out->vrsave = vregs.vrsave;
-+ out->vector_save.save_vscr = {0, vregs.vscr.vscr_word};
-+ out->vector_save.save_vrvalid = 0xFFFFFFFF;
-+}
-+#endif // __powerpc64__
-
- void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) {
- assert(gp_regs || size);
-@@ -279,6 +314,11 @@ void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) {
- *gp_regs = mcontext.gregs;
- if (size)
- *size = sizeof(mcontext.gregs);
-+#elif defined(__powerpc64__)
-+ if (gp_regs)
-+ *gp_regs = mcontext.gp_regs;
-+ if (size)
-+ *size = sizeof(mcontext.gp_regs);
- #else
- if (gp_regs)
- *gp_regs = ®s;
-@@ -294,6 +334,11 @@ void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) {
- *fp_regs = &mcontext.fpregs;
- if (size)
- *size = sizeof(mcontext.fpregs);
-+#elif defined(__powerpc64__)
-+ if (fp_regs)
-+ *fp_regs = &mcontext.fp_regs;
-+ if (size)
-+ *size = sizeof(mcontext.fp_regs);
- #else
- if (fp_regs)
- *fp_regs = &fpregs;
-@@ -302,4 +347,13 @@ void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) {
- #endif
- }
-
-+#if defined(__powerpc64__)
-+void ThreadInfo::GetVectorRegisters(void** v_regs, size_t* size) {
-+ if (v_regs)
-+ *v_regs = &vregs;
-+ if (size)
-+ *size = sizeof(vregs);
-+}
-+#endif
-+
- } // namespace google_breakpad
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h
-index fb216fa6d..fb669126f 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h
-@@ -68,6 +68,10 @@ struct ThreadInfo {
- // Use the structures defined in <sys/user.h>
- struct user_regs_struct regs;
- struct user_fpsimd_struct fpregs;
-+#elif defined(__powerpc64__)
-+ // Use the structures defined in <sys/ucontext.h>.
-+ mcontext_t mcontext;
-+ struct _libc_vrstate vregs;
- #elif defined(__mips__)
- // Use the structure defined in <sys/ucontext.h>.
- mcontext_t mcontext;
-@@ -84,6 +88,11 @@ struct ThreadInfo {
-
- // Returns the pointer and size of float point register area.
- void GetFloatingPointRegisters(void** fp_regs, size_t* size);
-+
-+#if defined(__powerpc64__)
-+ // Returns the pointer and size of the vector register area. (PPC64 only)
-+ void GetVectorRegisters(void** v_regs, size_t* size);
-+#endif
- };
-
- } // namespace google_breakpad
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
-index 95b0fb44e..82b428fa9 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
-@@ -254,6 +254,48 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) {
- out->float_save.fir = uc->uc_mcontext.fpc_eir; // Unused.
- #endif
- }
-+
-+#elif defined(__powerpc64__)
-+
-+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
-+ return uc->uc_mcontext.gp_regs[MD_CONTEXT_PPC64_REG_SP];
-+}
-+
-+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
-+ return uc->uc_mcontext.gp_regs[PT_NIP];
-+}
-+
-+void UContextReader::FillCPUContext(RawContextCPU* out, const ucontext_t* uc,
-+ const struct _libc_vrstate* vregs) {
-+ out->context_flags = MD_CONTEXT_PPC64_FULL;
-+
-+ for (int i = 0; i < MD_CONTEXT_PPC64_GPR_COUNT; i++)
-+ out->gpr[i] = uc->uc_mcontext.gp_regs[i];
-+
-+ out->lr = uc->uc_mcontext.gp_regs[PT_LNK];
-+ out->srr0 = uc->uc_mcontext.gp_regs[PT_NIP];
-+ out->srr1 = uc->uc_mcontext.gp_regs[PT_MSR];
-+ out->cr = uc->uc_mcontext.gp_regs[PT_CCR];
-+ out->xer = uc->uc_mcontext.gp_regs[PT_XER];
-+ out->ctr = uc->uc_mcontext.gp_regs[PT_CTR];
-+
-+ for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++)
-+ out->float_save.fpregs[i] = uc->uc_mcontext.fp_regs[i];
-+
-+ out->float_save.fpscr = uc->uc_mcontext.fp_regs[NFPREG-1];
-+
-+ for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++)
-+ out->vector_save.save_vr[i] =
-+ {(((uint64_t)vregs->vrregs[i][0]) << 32)
-+ | vregs->vrregs[i][1],
-+ (((uint64_t)vregs->vrregs[i][2]) << 32)
-+ | vregs->vrregs[i][3]};
-+
-+ out->vrsave = vregs->vrsave;
-+ out->vector_save.save_vscr = {0, vregs->vscr.vscr_word};
-+ out->vector_save.save_vrvalid = 0xFFFFFFFF;
-+}
-+
- #endif
-
- } // namespace google_breakpad
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h
-index f3dde1f4d..5c1f16e56 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h
-@@ -54,6 +54,9 @@ struct UContextReader {
- #elif defined(__aarch64__)
- static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
- const struct fpsimd_context* fpregs);
-+#elif defined(__powerpc64__)
-+ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
-+ const struct _libc_vrstate* vregs);
- #else
- static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc);
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
-index 303e8edb9..8874b388a 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
-@@ -460,9 +460,16 @@ bool ExceptionHandler::HandleSignal(int /*sig*/, siginfo_t* info, void* uc) {
- memcpy(&g_crash_context_.float_state, fp_ptr,
- sizeof(g_crash_context_.float_state));
- }
-+#elif defined(__powerpc64__)
-+ // On PPC64, we must copy VR state
-+ ucontext_t* uc_ptr = (ucontext_t*)uc;
-+ if (uc_ptr->uc_mcontext.v_regs) {
-+ memcpy(&g_crash_context_.vector_state, uc_ptr->uc_mcontext.v_regs,
-+ sizeof(g_crash_context_.vector_state));
-+ }
- #elif !defined(__ARM_EABI__) && !defined(__mips__)
- // FP state is not part of user ABI on ARM Linux.
-- // In case of MIPS Linux FP state is already part of ucontext_t
-+ // In case of MIPS, Linux FP state is already part of ucontext_t
- // and 'float_state' is not a member of CrashContext.
- ucontext_t* uc_ptr = (ucontext_t*)uc;
- if (uc_ptr->uc_mcontext.fpregs) {
-@@ -700,11 +707,19 @@ bool ExceptionHandler::WriteMinidump() {
- }
- #endif
-
--#if !defined(__ARM_EABI__) && !defined(__aarch64__) && !defined(__mips__)
-+#if !defined(__ARM_EABI__) && !defined(__aarch64__) && !defined(__mips__) \
-+ && !defined(__powerpc64__)
- // FPU state is not part of ARM EABI ucontext_t.
- memcpy(&context.float_state, context.context.uc_mcontext.fpregs,
- sizeof(context.float_state));
- #endif
-+
-+#if defined(__powerpc64__)
-+ // Vector registers must be copied on PPC64
-+ memcpy(&context.vector_state, context.context.uc_mcontext.v_regs,
-+ sizeof(context.vector_state));
-+#endif
-+
- context.tid = sys_gettid();
-
- // Add an exception stream to the minidump for better reporting.
-@@ -725,6 +740,9 @@ bool ExceptionHandler::WriteMinidump() {
- #elif defined(__mips__)
- context.siginfo.si_addr =
- reinterpret_cast<void*>(context.context.uc_mcontext.pc);
-+#elif defined(__powerpc64__)
-+ context.siginfo.si_addr =
-+ reinterpret_cast<void*>(context.context.uc_mcontext.gp_regs[PT_NIP]);
- #else
- #error "This code has not been ported to your platform yet."
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h
-index d246f6019..0af893878 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h
-@@ -192,7 +192,11 @@ class ExceptionHandler {
- siginfo_t siginfo;
- pid_t tid; // the crashing thread.
- ucontext_t context;
--#if !defined(__ARM_EABI__) && !defined(__mips__)
-+#if defined(__powerpc64__)
-+ // PPC64's FP state is a part of ucontext_t like MIPS but the vector
-+ // state is not, so a struct is needed.
-+ vstate_t vector_state;
-+#elif !defined(__ARM_EABI__) && !defined(__mips__)
- // #ifdef this out because FP state is not part of user ABI for Linux ARM.
- // In case of MIPS Linux FP state is already part of ucontext_t so
- // 'float_state' is not required.
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler_unittest.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler_unittest.cc
-index 193a76e7b..165fff6fa 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler_unittest.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler_unittest.cc
-@@ -494,6 +494,8 @@ const unsigned char kIllegalInstruction[] = {
- #if defined(__mips__)
- // mfc2 zero,Impl - usually illegal in userspace.
- 0x48, 0x00, 0x00, 0x48
-+#elif defined(__powerpc64__)
-+ 0x01, 0x01, 0x01, 0x01 // Crashes on a tested POWER9 cpu
- #else
- // This crashes with SIGILL on x86/x86-64/arm.
- 0xff, 0xff, 0xff, 0xff
-@@ -689,10 +691,10 @@ TEST(ExceptionHandlerTest, InstructionPointerMemoryMaxBound) {
-
- // These are defined here so the parent can use them to check the
- // data from the minidump afterwards.
-- // Use 4k here because the OS will hand out a single page even
-+ // Use the page size here because the OS will hand out a single page even
- // if a smaller size is requested, and this test wants to
- // test the upper bound of the memory range.
-- const uint32_t kMemorySize = 4096; // bytes
-+ const uint32_t kMemorySize = getpagesize(); // bytes
- const int kOffset = kMemorySize - sizeof(kIllegalInstruction);
-
- const pid_t child = fork();
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer.cc
-index 180873f40..2921fd387 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer.cc
-@@ -138,7 +138,9 @@ class MicrodumpWriter {
- const MicrodumpExtraInfo& microdump_extra_info,
- LinuxDumper* dumper)
- : ucontext_(context ? &context->context : NULL),
--#if !defined(__ARM_EABI__) && !defined(__mips__)
-+#if defined(__powerpc64__)
-+ vector_state_(context ? &context->vector_state : NULL),
-+#elif !defined(__ARM_EABI__) && !defined(__mips__)
- float_state_(context ? &context->float_state : NULL),
- #endif
- dumper_(dumper),
-@@ -337,6 +339,8 @@ class MicrodumpWriter {
- # else
- # error "This mips ABI is currently not supported (n32)"
- #endif
-+#elif defined(__powerpc64__)
-+ const char kArch[] = "ppc64";
- #else
- #error "This code has not been ported to your platform yet"
- #endif
-@@ -409,7 +413,9 @@ class MicrodumpWriter {
- void DumpCPUState() {
- RawContextCPU cpu;
- my_memset(&cpu, 0, sizeof(RawContextCPU));
--#if !defined(__ARM_EABI__) && !defined(__mips__)
-+#if defined(__powerpc64__)
-+ UContextReader::FillCPUContext(&cpu, ucontext_, vector_state_);
-+#elif !defined(__ARM_EABI__) && !defined(__mips__)
- UContextReader::FillCPUContext(&cpu, ucontext_, float_state_);
- #else
- UContextReader::FillCPUContext(&cpu, ucontext_);
-@@ -605,7 +611,9 @@ class MicrodumpWriter {
- void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); }
-
- const ucontext_t* const ucontext_;
--#if !defined(__ARM_EABI__) && !defined(__mips__)
-+#if defined(__powerpc64__)
-+ const google_breakpad::vstate_t* const vector_state_;
-+#elif !defined(__ARM_EABI__) && !defined(__mips__)
- const google_breakpad::fpstate_t* const float_state_;
- #endif
- LinuxDumper* dumper_;
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc
-index c2fea0225..8c62c524a 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc
-@@ -278,10 +278,19 @@ TEST(MicrodumpWriterTest, BasicWithMappings) {
- CrashAndGetMicrodump(mappings, MicrodumpExtraInfo(), &buf);
- ASSERT_TRUE(ContainsMicrodump(buf));
-
-+ int page_size = getpagesize();
- #ifdef __LP64__
-- ASSERT_NE(std::string::npos,
-- buf.find("M 0000000000001000 000000000000002A 0000000000001000 "
-- "33221100554477668899AABBCCDDEEFF0 libfoo.so"));
-+ // This test is only available for the following page sizes
-+ ASSERT_TRUE((page_size == 4096) || (page_size == 65536));
-+ if (page_size == 4096) {
-+ ASSERT_NE(std::string::npos,
-+ buf.find("M 0000000000001000 000000000000002A 0000000000001000 "
-+ "33221100554477668899AABBCCDDEEFF0 libfoo.so"));
-+ } else {
-+ ASSERT_NE(std::string::npos,
-+ buf.find("M 0000000000010000 000000000000002A 0000000000010000 "
-+ "33221100554477668899AABBCCDDEEFF0 libfoo.so"));
-+ }
- #else
- ASSERT_NE(std::string::npos,
- buf.find("M 00001000 0000002A 00001000 "
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc
-index 9be375333..f29ae5e63 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc
-@@ -116,6 +116,9 @@ bool LinuxCoreDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) {
- #elif defined(__mips__)
- stack_pointer =
- reinterpret_cast<uint8_t*>(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]);
-+#elif defined(__powerpc64__)
-+ stack_pointer =
-+ reinterpret_cast<uint8_t*>(info->mcontext.gp_regs[MD_CONTEXT_PPC64_REG_SP]);
- #else
- #error "This code hasn't been ported to your platform yet."
- #endif
-@@ -200,7 +203,10 @@ bool LinuxCoreDumper::EnumerateThreads() {
- memset(&info, 0, sizeof(ThreadInfo));
- info.tgid = status->pr_pgrp;
- info.ppid = status->pr_ppid;
--#if defined(__mips__)
-+#if defined(__powerpc64__)
-+ for (int i = 0; i < 31; i++)
-+ info.mcontext.gp_regs[i] = status->pr_reg[i];
-+#elif defined(__mips__)
- #if defined(__ANDROID__)
- for (int i = EF_R0; i <= EF_R31; i++)
- info.mcontext.gregs[i - EF_R0] = status->pr_reg[i];
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.cc
-index 515af3ff4..a32995076 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.cc
-@@ -791,7 +791,9 @@ bool LinuxDumper::GetStackInfo(const void** stack, size_t* stack_len,
- reinterpret_cast<uint8_t*>(int_stack_pointer & ~(page_size - 1));
-
- // The number of bytes of stack which we try to capture.
-- static const ptrdiff_t kStackToCapture = 32 * 1024;
-+ // This now depends on page_size to avoid missing data
-+ // on systems with larger page sizes.
-+ static const ptrdiff_t kStackToCapture = 8 * page_size;
-
- const MappingInfo* mapping = FindMapping(stack_pointer);
- if (!mapping)
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.h qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.h
-index 4a4e0b0af..caa0fab63 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.h
-@@ -60,7 +60,8 @@ namespace google_breakpad {
- (defined(__mips__) && _MIPS_SIM == _ABIO32)
- typedef Elf32_auxv_t elf_aux_entry;
- #elif defined(__x86_64) || defined(__aarch64__) || \
-- (defined(__mips__) && _MIPS_SIM != _ABIO32)
-+ (defined(__mips__) && _MIPS_SIM != _ABIO32) || \
-+ defined(__powerpc64__)
- typedef Elf64_auxv_t elf_aux_entry;
- #endif
-
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
-index 3ad48e501..1688c365e 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
-@@ -51,6 +51,8 @@
- #define TID_PTR_REGISTER "rcx"
- #elif defined(__mips__)
- #define TID_PTR_REGISTER "$1"
-+#elif defined(__powerpc64__)
-+#define TID_PTR_REGISTER "r8"
- #else
- #error This test has not been ported to this platform.
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
-index 8a3f04e29..e607b28d5 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
-@@ -154,19 +154,27 @@ bool LinuxPtraceDumper::CopyFromProcess(void* dest, pid_t child,
- return true;
- }
-
--bool LinuxPtraceDumper::ReadRegisterSet(ThreadInfo* info, pid_t tid)
--{
-+bool LinuxPtraceDumper::ReadRegisterSet(ThreadInfo* info, pid_t tid) {
- #ifdef PTRACE_GETREGSET
- struct iovec io;
- info->GetGeneralPurposeRegisters(&io.iov_base, &io.iov_len);
-- if (sys_ptrace(PTRACE_GETREGSET, tid, (void*)NT_PRSTATUS, (void*)&io) == -1) {
-+ if (ptrace(PTRACE_GETREGSET, tid, (void*)NT_PRSTATUS, (void*)&io) == -1) {
- return false;
- }
-
- info->GetFloatingPointRegisters(&io.iov_base, &io.iov_len);
-- if (sys_ptrace(PTRACE_GETREGSET, tid, (void*)NT_FPREGSET, (void*)&io) == -1) {
-+ if (ptrace(PTRACE_GETREGSET, tid, (void*)NT_FPREGSET, (void*)&io) == -1) {
- return false;
- }
-+
-+#if defined(__powerpc64__)
-+ // Grab the vector registers on PPC64 too
-+ info->GetVectorRegisters(&io.iov_base, &io.iov_len);
-+ if (ptrace(PTRACE_GETREGSET, tid, (void*)NT_PPC_VMX, (void*)&io) == -1) {
-+ return false;
-+ }
-+#endif // defined(__powerpc64__)
-+
- return true;
- #else
- return false;
-@@ -303,6 +311,9 @@ bool LinuxPtraceDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) {
- #elif defined(__mips__)
- stack_pointer =
- reinterpret_cast<uint8_t*>(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]);
-+#elif defined(__powerpc64__)
-+ stack_pointer =
-+ reinterpret_cast<uint8_t*>(info->mcontext.gp_regs[MD_CONTEXT_PPC64_REG_SP]);
- #else
- #error "This code hasn't been ported to your platform yet."
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc
-index a4a0fd9b6..52c150704 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc
-@@ -457,6 +457,9 @@ TEST(LinuxPtraceDumperTest, VerifyStackReadWithMultipleThreads) {
- #elif defined(__mips__)
- pid_t* process_tid_location =
- reinterpret_cast<pid_t*>(one_thread.mcontext.gregs[1]);
-+#elif defined(__powerpc64__)
-+ pid_t* process_tid_location =
-+ reinterpret_cast<pid_t*>(one_thread.mcontext.gp_regs[8]);
- #else
- #error This test has not been ported to this platform.
- #endif
-@@ -553,6 +556,8 @@ TEST_F(LinuxPtraceDumperTest, SanitizeStackCopy) {
- uintptr_t heap_addr = thread_info.regs.rcx;
- #elif defined(__mips__)
- uintptr_t heap_addr = thread_info.mcontext.gregs[1];
-+#elif defined(__powerpc64__)
-+ uintptr_t heap_addr = thread_info.mcontext.gp_regs[8];
- #else
- #error This test has not been ported to this platform.
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.cc
-index c71614345..a98f9afa5 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.cc
-@@ -136,7 +136,9 @@ class MinidumpWriter {
- : fd_(minidump_fd),
- path_(minidump_path),
- ucontext_(context ? &context->context : NULL),
--#if !defined(__ARM_EABI__) && !defined(__mips__)
-+#if defined(__powerpc64__)
-+ vector_state_(context ? &context->vector_state : NULL),
-+#elif !defined(__ARM_EABI__) && !defined(__mips__)
- float_state_(context ? &context->float_state : NULL),
- #endif
- dumper_(dumper),
-@@ -468,7 +470,9 @@ class MinidumpWriter {
- if (!cpu.Allocate())
- return false;
- my_memset(cpu.get(), 0, sizeof(RawContextCPU));
--#if !defined(__ARM_EABI__) && !defined(__mips__)
-+#if defined(__powerpc64__)
-+ UContextReader::FillCPUContext(cpu.get(), ucontext_, vector_state_);
-+#elif !defined(__ARM_EABI__) && !defined(__mips__)
- UContextReader::FillCPUContext(cpu.get(), ucontext_, float_state_);
- #else
- UContextReader::FillCPUContext(cpu.get(), ucontext_);
-@@ -888,7 +892,7 @@ class MinidumpWriter {
- dirent->location.rva = 0;
- }
-
--#if defined(__i386__) || defined(__x86_64__) || defined(__mips__)
-+#if defined(__i386__) || defined(__x86_64__) || defined(__mips__) || defined(__powerpc64__)
- bool WriteCPUInformation(MDRawSystemInfo* sys_info) {
- char vendor_id[sizeof(sys_info->cpu.x86_cpu_info.vendor_id) + 1] = {0};
- static const char vendor_id_name[] = "vendor_id";
-@@ -908,7 +912,9 @@ class MinidumpWriter {
-
- // processor_architecture should always be set, do this first
- sys_info->processor_architecture =
--#if defined(__mips__)
-+#if defined(__powerpc64__)
-+ MD_CPU_ARCHITECTURE_PPC64;
-+#elif defined(__mips__)
- # if _MIPS_SIM == _ABIO32
- MD_CPU_ARCHITECTURE_MIPS;
- # elif _MIPS_SIM == _ABI64
-@@ -1324,7 +1330,9 @@ class MinidumpWriter {
- const char* path_; // Path to the file where the minidum should be written.
-
- const ucontext_t* const ucontext_; // also from the signal handler
--#if !defined(__ARM_EABI__) && !defined(__mips__)
-+#if defined(__powerpc64__)
-+ const google_breakpad::vstate_t* const vector_state_;
-+#elif !defined(__ARM_EABI__) && !defined(__mips__)
- const google_breakpad::fpstate_t* const float_state_; // ditto
- #endif
- LinuxDumper* dumper_;
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h
-index d1cc5624c..403495295 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h
-@@ -47,6 +47,8 @@ class ExceptionHandler;
-
- #if defined(__aarch64__)
- typedef struct fpsimd_context fpstate_t;
-+#elif defined(__powerpc64__)
-+typedef struct _libc_vrstate vstate_t;
- #elif !defined(__ARM_EABI__) && !defined(__mips__)
- typedef struct _fpstate fpstate_t;
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc
-index 583ddda86..5e3deccfd 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc
-@@ -710,6 +710,9 @@ TEST(MinidumpWriterTest, InvalidStackPointer) {
- #elif defined(__mips__)
- context.context.uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP] =
- invalid_stack_pointer;
-+#elif defined(__powerpc64__)
-+ context.context.uc_mcontext.gp_regs[MD_CONTEXT_PPC64_REG_SP] =
-+ invalid_stack_pointer;
- #else
- # error "This code has not been ported to your platform yet."
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file.cc
-index 4e938269f..f0ff15d96 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file.cc
-@@ -65,8 +65,7 @@ bool MemoryMappedFile::Map(const char* path, size_t offset) {
- }
-
- #if defined(__x86_64__) || defined(__aarch64__) || \
-- (defined(__mips__) && _MIPS_SIM == _ABI64)
--
-+ (defined(__mips__) && _MIPS_SIM == _ABI64) || defined(__powerpc64__)
- struct kernel_stat st;
- if (sys_fstat(fd, &st) == -1 || st.st_size < 0) {
- #else
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file_unittest.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file_unittest.cc
-index fad59f40c..616496d67 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file_unittest.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/linux/memory_mapped_file_unittest.cc
-@@ -176,9 +176,10 @@ TEST_F(MemoryMappedFileTest, RemapAfterMap) {
- TEST_F(MemoryMappedFileTest, MapWithOffset) {
- // Put more data in the test file this time. Offsets can only be
- // done on page boundaries, so we need a two page file to test this.
-- const int page_size = 4096;
-- char data1[2 * page_size];
-- size_t data1_size = sizeof(data1);
-+ const int page_size = getpagesize();
-+ char *data1 = static_cast<char*>(malloc(2 * page_size));
-+ EXPECT_TRUE(data1 != NULL);
-+ size_t data1_size = (2 * page_size);
- for (size_t i = 0; i < data1_size; ++i) {
- data1[i] = i & 0x7f;
- }
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/memory_allocator_unittest.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/memory_allocator_unittest.cc
-index 43c86314c..27325b813 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/memory_allocator_unittest.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/memory_allocator_unittest.cc
-@@ -57,8 +57,9 @@ TEST(PageAllocatorTest, LargeObject) {
-
- EXPECT_EQ(0U, allocator.pages_allocated());
- uint8_t *p = reinterpret_cast<uint8_t*>(allocator.Alloc(10000));
-+ uint64_t expected_pages = 1 + ((10000 - 1) / getpagesize());
- ASSERT_FALSE(p == NULL);
-- EXPECT_EQ(3U, allocator.pages_allocated());
-+ EXPECT_EQ(expected_pages, allocator.pages_allocated());
- for (unsigned i = 1; i < 10; ++i) {
- uint8_t *p = reinterpret_cast<uint8_t*>(allocator.Alloc(i));
- ASSERT_FALSE(p == NULL);
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_linux.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_linux.cc
-index ccc9f1459..debaed4d6 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_linux.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_linux.cc
-@@ -202,12 +202,14 @@ bool ExploitabilityLinux::EndedOnIllegalWrite(uint64_t instruction_ptr) {
- // Check architecture and set architecture variable to corresponding flag
- // in objdump.
- switch (context->GetContextCPU()) {
-+#if defined(__i386) || defined(__x86_64)
- case MD_CONTEXT_X86:
- architecture = "i386";
- break;
- case MD_CONTEXT_AMD64:
- architecture = "i386:x86-64";
- break;
-+#endif
- default:
- // Unsupported architecture. Note that ARM architectures are not
- // supported because objdump does not support ARM.
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_unittest.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_unittest.cc
-index 528ee5f21..72764d6c1 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_unittest.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/processor/exploitability_unittest.cc
-@@ -104,6 +104,8 @@ ExploitabilityFor(const string& filename) {
- }
-
- TEST(ExploitabilityTest, TestWindowsEngine) {
-+// The following tests are only executable on an x86-class linux machine.
-+#if !defined(_WIN32) && (defined(__i386) || defined(__x86_64))
- ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
- ExploitabilityFor("ascii_read_av.dmp"));
- ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
-@@ -136,9 +138,12 @@ TEST(ExploitabilityTest, TestWindowsEngine) {
- ExploitabilityFor("read_av_clobber_write.dmp"));
- ASSERT_EQ(google_breakpad::EXPLOITABILITY_LOW,
- ExploitabilityFor("read_av_conditional.dmp"));
-+#endif
- }
-
- TEST(ExploitabilityTest, TestLinuxEngine) {
-+// The following tests are only executable on an x86-class linux machine.
-+#if defined(__i386) || defined(__x86_64)
- ASSERT_EQ(google_breakpad::EXPLOITABILITY_INTERESTING,
- ExploitabilityFor("linux_null_read_av.dmp"));
- ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
-@@ -171,7 +176,8 @@ TEST(ExploitabilityTest, TestLinuxEngine) {
- ExploitabilityFor("linux_executable_heap.dmp"));
- ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
- ExploitabilityFor("linux_jmp_to_module_not_exe_region.dmp"));
--#ifndef _WIN32
-+#endif
-+#if !defined(_WIN32) && (defined(__i386) || defined(__x86_64))
- ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
- ExploitabilityFor("linux_write_to_nonwritable_module.dmp"));
- ASSERT_EQ(google_breakpad::EXPLOITABILITY_HIGH,
-@@ -182,10 +188,10 @@ TEST(ExploitabilityTest, TestLinuxEngine) {
- ExploitabilityFor("linux_write_to_outside_module_via_math.dmp"));
- ASSERT_EQ(google_breakpad::EXPLOITABILITY_INTERESTING,
- ExploitabilityFor("linux_write_to_under_4k.dmp"));
--#endif // _WIN32
-+#endif // !defined(_WIN32) && (!defined(__i386) && !defined(__x86_64))
- }
-
--#ifndef _WIN32
-+#if !defined(_WIN32) && (defined(__i386) || defined(__x86_64))
- TEST(ExploitabilityLinuxUtilsTest, DisassembleBytesTest) {
- ASSERT_FALSE(ExploitabilityLinuxTest::DisassembleBytes("", NULL, 5, NULL));
- uint8_t bytes[6] = {0xc7, 0x0, 0x5, 0x0, 0x0, 0x0};
-@@ -301,6 +307,7 @@ TEST(ExploitabilityLinuxUtilsTest, CalculateAddressTest) {
- context,
- &write_address));
- }
--#endif // _WIN32
-+#endif // !defined(_WIN32) && (defined(__i386) || defined(__x86_64))
-+
-
- } // namespace
-diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/tools/linux/md2core/minidump-2-core.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/tools/linux/md2core/minidump-2-core.cc
-index 8cc07a6ef..f67556914 100644
---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/tools/linux/md2core/minidump-2-core.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/tools/linux/md2core/minidump-2-core.cc
-@@ -76,6 +76,8 @@
- #define ELF_ARCH EM_MIPS
- #elif defined(__aarch64__)
- #define ELF_ARCH EM_AARCH64
-+#elif defined(__powerpc64__)
-+ #define ELF_ARCH EM_PPC64
- #endif
-
- #if defined(__arm__)
-@@ -86,6 +88,8 @@ typedef user_regs user_regs_struct;
- #elif defined (__mips__)
- // This file-local typedef simplifies the source code.
- typedef gregset_t user_regs_struct;
-+#elif defined(__powerpc64__)
-+typedef struct pt_regs user_regs_struct;
- #endif
-
- using google_breakpad::MDTypeHelper;
-@@ -320,6 +324,9 @@ struct CrashedProcess {
- #endif
- #if defined(__aarch64__)
- user_fpsimd_struct fpregs;
-+#endif
-+#if defined(__powerpc64__)
-+ mcontext_t mcontext;
- #endif
- uintptr_t stack_addr;
- const uint8_t* stack;
-@@ -523,6 +530,38 @@ ParseThreadRegisters(CrashedProcess::Thread* thread,
- thread->mcontext.fpc_eir = rawregs->float_save.fir;
- #endif
- }
-+#elif defined(__powerpc64__)
-+static void
-+ParseThreadRegisters(CrashedProcess::Thread* thread,
-+ const MinidumpMemoryRange& range) {
-+ const MDRawContextPPC64* rawregs = range.GetData<MDRawContextPPC64>(0);
-+
-+ for (int i = 0; i < MD_CONTEXT_PPC64_GPR_COUNT; i++)
-+ thread->mcontext.gp_regs[i] = rawregs->gpr[i];
-+
-+ thread->mcontext.gp_regs[PT_LNK] = rawregs->lr;
-+ thread->mcontext.gp_regs[PT_NIP] = rawregs->srr0;
-+ thread->mcontext.gp_regs[PT_MSR] = rawregs->srr1;
-+ thread->mcontext.gp_regs[PT_CCR] = rawregs->cr;
-+ thread->mcontext.gp_regs[PT_XER] = rawregs->xer;
-+ thread->mcontext.gp_regs[PT_CTR] = rawregs->ctr;
-+ thread->mcontext.v_regs->vrsave = rawregs->vrsave;
-+
-+ for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++)
-+ thread->mcontext.fp_regs[i] = rawregs->float_save.fpregs[i];
-+
-+ thread->mcontext.fp_regs[NFPREG-1] = rawregs->float_save.fpscr;
-+
-+ for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++) {
-+ thread->mcontext.v_regs->vrregs[i][0] = rawregs->vector_save.save_vr[i].high >> 32;
-+ thread->mcontext.v_regs->vrregs[i][1] = rawregs->vector_save.save_vr[i].high;
-+ thread->mcontext.v_regs->vrregs[i][2] = rawregs->vector_save.save_vr[i].low >> 32;
-+ thread->mcontext.v_regs->vrregs[i][3] = rawregs->vector_save.save_vr[i].low;
-+ }
-+
-+ thread->mcontext.v_regs->vscr.vscr_word = rawregs->vector_save.save_vscr.low & 0xFFFFFFFF;
-+}
-+
- #else
- #error "This code has not been ported to your platform yet"
- #endif
-@@ -611,6 +650,12 @@ ParseSystemInfo(const Options& options, CrashedProcess* crashinfo,
- # else
- # error "This mips ABI is currently not supported (n32)"
- # endif
-+#elif defined(__powerpc64__)
-+ if (sysinfo->processor_architecture != MD_CPU_ARCHITECTURE_PPC64) {
-+ fprintf(stderr,
-+ "This version of minidump-2-core only supports PPC64.\n");
-+ exit(1);
-+ }
- #else
- #error "This code has not been ported to your platform yet"
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_misc_info_writer.cc qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_misc_info_writer.cc
-index c1e24892f..ee18d3315 100644
---- qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_misc_info_writer.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/crashpad/crashpad/minidump/minidump_misc_info_writer.cc
-@@ -122,6 +122,8 @@ std::string MinidumpMiscInfoDebugBuildString() {
- static constexpr char kCPU[] = "arm";
- #elif defined(ARCH_CPU_ARM64)
- static constexpr char kCPU[] = "arm64";
-+#elif defined(ARCH_CPU_PPC64)
-+ static constexpr char kCPU[] = "ppc64";
- #else
- #error define kCPU for this CPU
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/lss/linux_syscall_support.h qtwebengine/src/3rdparty/chromium/third_party/lss/linux_syscall_support.h
-index e81e7b420..511a54e4e 100644
---- qtwebengine/src/3rdparty/chromium/third_party/lss/linux_syscall_support.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/lss/linux_syscall_support.h
-@@ -3914,7 +3914,7 @@ struct kernel_statfs {
- LSS_REG(2, buf);
- LSS_BODY(void*, mmap2, "0"(__r2));
- }
--#else
-+#elif !defined(__powerpc64__) /* ppc64 doesn't have mmap2 */
- #define __NR__mmap2 __NR_mmap2
- LSS_INLINE _syscall6(void*, _mmap2, void*, s,
- size_t, l, int, p,
-@@ -4045,7 +4045,7 @@ struct kernel_statfs {
- #if defined(__i386__) || \
- defined(__ARM_ARCH_3__) || defined(__ARM_EABI__) || \
- (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) || \
-- defined(__PPC__) || \
-+ (defined(__PPC__) && !defined(__powerpc64__)) || \
- (defined(__s390__) && !defined(__s390x__))
- /* On these architectures, implement mmap() with mmap2(). */
- LSS_INLINE void* LSS_NAME(mmap)(void *s, size_t l, int p, int f, int d,
-diff --git qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator.h qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator.h
-index aee253248..25ee401e8 100644
---- qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator.h
-@@ -16,7 +16,7 @@
- namespace pdfium {
- namespace base {
-
--#if defined(OS_WIN)
-+#if defined(OS_WIN) || defined(ARCH_CPU_PPC64)
- static const size_t kPageAllocationGranularityShift = 16; // 64KB
- #elif defined(_MIPS_ARCH_LOONGSON)
- static const size_t kPageAllocationGranularityShift = 14; // 16KB
-@@ -35,6 +35,10 @@ static const size_t kPageAllocationGranularityBaseMask =
- // Loongson have 16384 sized system pages.
- #if defined(_MIPS_ARCH_LOONGSON)
- static const size_t kSystemPageSize = 16384;
-+#elif defined(ARCH_CPU_PPC64)
-+// TODO: modern ppc64 can do 4k and 64k page sizes
-+// for now, 64k is assumed
-+static constexpr size_t kSystemPageSize = 65536;
- #else
- static const size_t kSystemPageSize = 4096;
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/partition_alloc.h qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/partition_alloc.h
-index 7e8415c76..998eb6e14 100644
---- qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/partition_alloc.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/partition_alloc.h
-@@ -97,6 +97,8 @@ static const size_t kBucketShift = (kAllocationGranularity == 8) ? 3 : 2;
- // against the end of a system page.
- #if defined(_MIPS_ARCH_LOONGSON)
- static const size_t kPartitionPageShift = 16; // 64KB
-+#elif defined(ARCH_CPU_PPC64)
-+static const size_t kPartitionPageShift = 18; // 256KB
- #else
- static const size_t kPartitionPageShift = 14; // 16KB
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/spin_lock.cc qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/spin_lock.cc
-index 8d7151a8b..596c5e1b9 100644
---- qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/spin_lock.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/spin_lock.cc
-@@ -37,6 +37,8 @@
- // Don't bother doing using .word here since r2 is the lowest supported mips64
- // that Chromium supports.
- #define YIELD_PROCESSOR __asm__ __volatile__("pause")
-+#elif defined(ARCH_CPU_PPC64_FAMILY)
-+#define YIELD_PROCESSOR __asm__ __volatile__("or 31,31,31")
- #endif
- #endif
-
-diff --git qtwebengine/src/3rdparty/chromium/third_party/sqlite/amalgamation/sqlite3.c qtwebengine/src/3rdparty/chromium/third_party/sqlite/amalgamation/sqlite3.c
-index c5283dd02..672068973 100644
---- qtwebengine/src/3rdparty/chromium/third_party/sqlite/amalgamation/sqlite3.c
-+++ qtwebengine/src/3rdparty/chromium/third_party/sqlite/amalgamation/sqlite3.c
-@@ -12920,7 +12920,8 @@ typedef INT16_TYPE LogEst;
- # if defined(i386) || defined(__i386__) || defined(_M_IX86) || \
- defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \
- defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \
-- defined(__arm__)
-+ defined(__arm__) || (defined(__powerpc64__) && \
-+ (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
- # define SQLITE_BYTEORDER 1234
- # elif defined(sparc) || defined(__ppc__)
- # define SQLITE_BYTEORDER 4321
-diff --git qtwebengine/src/3rdparty/chromium/third_party/sqlite/src/src/sqliteInt.h qtwebengine/src/3rdparty/chromium/third_party/sqlite/src/src/sqliteInt.h
-index d12148d42..39efa80d4 100644
---- qtwebengine/src/3rdparty/chromium/third_party/sqlite/src/src/sqliteInt.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/sqlite/src/src/sqliteInt.h
-@@ -825,7 +825,8 @@ typedef INT16_TYPE LogEst;
- # if defined(i386) || defined(__i386__) || defined(_M_IX86) || \
- defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \
- defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \
-- defined(__arm__)
-+ defined(__arm__) || (defined(__powerpc64__) && \
-+ (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__))
- # define SQLITE_BYTEORDER 1234
- # elif defined(sparc) || defined(__ppc__)
- # define SQLITE_BYTEORDER 4321
-diff --git qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/differ_block.cc qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/differ_block.cc
-index 331524723..f10394043 100644
---- qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/differ_block.cc
-+++ qtwebengine/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/differ_block.cc
-@@ -30,11 +30,7 @@ bool VectorDifference(const uint8_t* image1, const uint8_t* image2) {
- static bool (*diff_proc)(const uint8_t*, const uint8_t*) = nullptr;
-
- if (!diff_proc) {
--#if defined(WEBRTC_ARCH_ARM_FAMILY) || defined(WEBRTC_ARCH_MIPS_FAMILY)
-- // For ARM and MIPS processors, always use C version.
-- // TODO(hclam): Implement a NEON version.
-- diff_proc = &VectorDifference_C;
--#else
-+#if defined(WEBRTC_ARCH_X86_FAMILY)
- bool have_sse2 = WebRtc_GetCPUInfo(kSSE2) != 0;
- // For x86 processors, check if SSE2 is supported.
- if (have_sse2 && kBlockSize == 32) {
-@@ -44,6 +40,10 @@ bool VectorDifference(const uint8_t* image1, const uint8_t* image2) {
- } else {
- diff_proc = &VectorDifference_C;
- }
-+#else
-+ // For other processors, always use C version.
-+ // TODO(hclam): Implement a NEON version.
-+ diff_proc = &VectorDifference_C;
- #endif
- }
-
-diff --git qtwebengine/src/3rdparty/chromium/third_party/webrtc/typedefs.h qtwebengine/src/3rdparty/chromium/third_party/webrtc/typedefs.h
-index 727bf83de..d3a2ba6a4 100644
---- qtwebengine/src/3rdparty/chromium/third_party/webrtc/typedefs.h
-+++ qtwebengine/src/3rdparty/chromium/third_party/webrtc/typedefs.h
-@@ -50,6 +50,18 @@
- #elif defined(__MIPSEB__)
- #define WEBRTC_ARCH_MIPS_FAMILY
- #define WEBRTC_ARCH_BIG_ENDIAN
-+#elif defined(__PPC__)
-+#define WEBRTC_ARCH_PPC_FAMILY
-+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
-+#define WEBRTC_ARCH_LITTLE_ENDIAN
-+#else
-+#define WEBRTC_ARCH_BIG_ENDIAN
-+#endif
-+#if defined(__LP64__)
-+#define WEBRTC_ARCH_64_BITS
-+#else
-+#define WEBRTC_ARCH_32_BITS
-+#endif
- #else
- #error Please add support for your architecture in typedefs.h
- #endif
-diff --git qtwebengine/src/3rdparty/chromium/third_party/webrtc/webrtc.gni qtwebengine/src/3rdparty/chromium/third_party/webrtc/webrtc.gni
-index fb1d77cad..22fc76697 100644
---- qtwebengine/src/3rdparty/chromium/third_party/webrtc/webrtc.gni
-+++ qtwebengine/src/3rdparty/chromium/third_party/webrtc/webrtc.gni
-@@ -177,7 +177,7 @@ declare_args() {
- }
-
- if (!is_ios && (current_cpu != "arm" || arm_version >= 7) &&
-- current_cpu != "mips64el" && !build_with_mozilla) {
-+ current_cpu != "mips64el" && current_cpu != "ppc64" && !build_with_mozilla) {
- rtc_use_openmax_dl = true
- } else {
- rtc_use_openmax_dl = false
-diff --git qtwebengine/src/3rdparty/chromium/v8/BUILD.gn qtwebengine/src/3rdparty/chromium/v8/BUILD.gn
-index 2f4202a1b..cce339b88 100644
---- qtwebengine/src/3rdparty/chromium/v8/BUILD.gn
-+++ qtwebengine/src/3rdparty/chromium/v8/BUILD.gn
-@@ -450,6 +450,12 @@ config("toolchain") {
- }
- if (host_byteorder == "little") {
- defines += [ "V8_TARGET_ARCH_PPC_LE" ]
-+ cflags += [
-+ # Enable usage of AltiVec, VSX, and other POWER8 and higher features
-+ "-mcpu=power8",
-+ "-maltivec",
-+ "-mvsx",
-+ ]
- } else if (host_byteorder == "big") {
- defines += [ "V8_TARGET_ARCH_PPC_BE" ]
- if (current_os == "aix") {
-diff --git qtwebengine/src/3rdparty/chromium/v8/src/builtins/ppc/builtins-ppc.cc qtwebengine/src/3rdparty/chromium/v8/src/builtins/ppc/builtins-ppc.cc
-index 34da70ff0..a87ac196a 100644
---- qtwebengine/src/3rdparty/chromium/v8/src/builtins/ppc/builtins-ppc.cc
-+++ qtwebengine/src/3rdparty/chromium/v8/src/builtins/ppc/builtins-ppc.cc
-@@ -6,6 +6,7 @@
-
- #include "src/assembler-inl.h"
- #include "src/code-stubs.h"
-+#include "src/counters.h"
- #include "src/debug/debug.h"
- #include "src/deoptimizer.h"
- #include "src/frame-constants.h"
-diff --git qtwebengine/src/3rdparty/chromium/v8/src/builtins/s390/builtins-s390.cc qtwebengine/src/3rdparty/chromium/v8/src/builtins/s390/builtins-s390.cc
-index 020b04b91..5ac7e5659 100644
---- qtwebengine/src/3rdparty/chromium/v8/src/builtins/s390/builtins-s390.cc
-+++ qtwebengine/src/3rdparty/chromium/v8/src/builtins/s390/builtins-s390.cc
-@@ -6,6 +6,7 @@
-
- #include "src/assembler-inl.h"
- #include "src/code-stubs.h"
-+#include "src/counters.h"
- #include "src/debug/debug.h"
- #include "src/deoptimizer.h"
- #include "src/frame-constants.h"
-diff --git qtwebengine/src/3rdparty/chromium/v8/src/ppc/macro-assembler-ppc.cc qtwebengine/src/3rdparty/chromium/v8/src/ppc/macro-assembler-ppc.cc
-index 8d7c3d05b..be83229a8 100644
---- qtwebengine/src/3rdparty/chromium/v8/src/ppc/macro-assembler-ppc.cc
-+++ qtwebengine/src/3rdparty/chromium/v8/src/ppc/macro-assembler-ppc.cc
-@@ -12,6 +12,7 @@
- #include "src/bootstrapper.h"
- #include "src/callable.h"
- #include "src/code-stubs.h"
-+#include "src/counters.h"
- #include "src/debug/debug.h"
- #include "src/external-reference-table.h"
- #include "src/frames-inl.h"
-diff --git qtwebengine/src/3rdparty/chromium/v8/src/s390/macro-assembler-s390.cc qtwebengine/src/3rdparty/chromium/v8/src/s390/macro-assembler-s390.cc
-index fe2488437..decbbb43a 100644
---- qtwebengine/src/3rdparty/chromium/v8/src/s390/macro-assembler-s390.cc
-+++ qtwebengine/src/3rdparty/chromium/v8/src/s390/macro-assembler-s390.cc
-@@ -12,6 +12,7 @@
- #include "src/bootstrapper.h"
- #include "src/callable.h"
- #include "src/code-stubs.h"
-+#include "src/counters.h"
- #include "src/debug/debug.h"
- #include "src/external-reference-table.h"
- #include "src/frames-inl.h"
diff --git a/srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch b/srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
deleted file mode 100644
index 35e6456139f..00000000000
--- a/srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-This adds the necessary bits to make qt attempt building webengine on ppc64.
-Since the patch is only sufficient for ppc64le, keep it commented out and
-let the packaging template remove the comment later, as there is no good
-way to check endianness directly in the file.
-
-We also have to disable jumbo build for the time being because it results
-in build failures otherwise, most likely because of compiler miscompiling
-the code.
---- qtwebengine/mkspecs/features/functions.prf
-+++ qtwebengine/mkspecs/features/functions.prf
-@@ -95,6 +95,7 @@
- contains(qtArch, "arm64"): return(arm64)
- contains(qtArch, "mips"): return(mipsel)
- contains(qtArch, "mips64"): return(mips64el)
-+ contains(qtArch, "power64"): return(ppc64)
- return(unknown)
- }
-
---- qtwebengine/mkspecs/features/platform.prf
-+++ qtwebengine/mkspecs/features/platform.prf
-@@ -82,6 +82,7 @@
- contains(QT_ARCH, "arm")|contains(QT_ARCH, "arm64"): return(true)
- contains(QT_ARCH, "mips"): return(true)
- # contains(QT_ARCH, "mips64"): return(true)
-+#ppc64le contains(QT_ARCH, "power64"): return(true)
-
- skipBuild("QtWebEngine can only be built for x86, x86-64, ARM, Aarch64, and MIPSel architectures.")
- return(false)
---- qtwebengine/src/core/config/linux.pri
-+++ qtwebengine/src/core/config/linux.pri
-@@ -90,6 +90,10 @@
- else: contains(QMAKE_CFLAGS, "-mdsp"): gn_args += mips_dsp_rev=1
- }
-
-+contains(QT_ARCH, "power64") {
-+ gn_args += use_jumbo_build=false
-+}
-+
- host_build {
- gn_args += custom_toolchain=\"$$QTWEBENGINE_OUT_ROOT/src/toolchain:host\"
- GN_HOST_CPU = $$gnArch($$QT_ARCH)
diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index bfd8712e7af..565d7f59544 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
# Template file for 'qt5'
pkgname=qt5
-version=5.11.3
-revision=7
+version=5.13.0
+revision=1
wrksrc="qt-everywhere-src-${version}"
build_style=gnu-configure
hostmakedepends="cmake clang flex git glib-devel gperf ninja pkg-config
@@ -10,32 +10,46 @@ makedepends="SDL2-devel Vulkan-Headers alsa-lib-devel double-conversion-devel
eudev-libudev-devel ffmpeg-devel freetds-devel glib-devel gst-plugins-base1-devel
gtk+3-devel icu-devel jsoncpp-devel libXv-devel libbluetooth-devel libcap-devel
libevent-devel libinput-devel libmng-devel libmysqlclient-devel libproxy-devel
- libvpx5-devel libwebp-devel libxslt-devel minizip-devel nss-devel
+ libvpx-devel libwebp-devel libxslt-devel minizip-devel nss-devel cups-devel
opus-devel pciutils-devel pcre2-devel postgresql-libs-devel
protobuf-devel pulseaudio-devel snappy-devel tslib-devel
unixodbc-devel xcb-util-image-devel xcb-util-keysyms-devel
- xcb-util-renderutil-devel xcb-util-wm-devel"
+ xcb-util-renderutil-devel xcb-util-wm-devel libzstd-devel"
depends="qtchooser"
short_desc="Cross-platform application and UI framework (QT5)"
maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
-license="GPL-3.0-or-later, LGPL-2.1-or-later"
+license="GPL-3.0-or-later, LGPL-3.0-or-later"
homepage="https://qt.io/"
distfiles="http://download.qt.io/official_releases/qt/${version%.*}/${version}/single/qt-everywhere-src-${version}.tar.xz"
-checksum=859417642713cee2493ee3646a7fee782c9f1db39e41d7bb1322bba0c5f0ff4d
+checksum=2cba31e410e169bd5cdae159f839640e672532a4687ea0f265f686421e0e86d6
replaces="qt5-doc<5.6.0 qt5-quick1<5.6.0 qt5-quick1-devel<5.6.0 qt5-webkit<5.6.0 qt5-webkit-devel<5.6.0
- qt5-enginio<5.7.1 qt5-enginio-devel<5.7.1 qt5-plugin-gtk<5.7.1"
+ qt5-enginio<5.7.1 qt5-enginio-devel<5.7.1 qt5-plugin-gtk<5.7.1 qt5-canvas3d<5.13.0"
build_options="webengine"
desc_option_webengine="Build Chromium-based WebEngine component"
case "$XBPS_TARGET_MACHINE" in
- x86_64*|i686*|ppc64le*) build_options_default="webengine";;
+ x86_64*|i686*|ppc64*) build_options_default="webengine";;
armv5tel*) ;; # qtwebengine uses VSM assembler commands
- arm*|aarch64*) build_options_default="webengine";;
+ aarch64*) build_options_default="webengine";;
+ arm*) ;; # qtwebengine requires a 32bit host toolchain http://sprunge.us/rbRyWQ
*) ;; # assume no webengine
esac
-subpackages="qt5-3d qt5-3d-devel qt5-canvas3d qt5-charts qt5-charts-devel
+if [ "$build_option_webengine" ]; then
+ # v8 requires libatomic on ppc*/s390x/mips*
+ case "$XBPS_TARGET_MACHINE" in
+ mips*|ppc*) makedepends+=" libatomic-devel" ;;
+ *) ;;
+ esac
+ # also need it on host when it's one of those archs
+ case "$XBPS_MACHINE" in
+ mips*|ppc*) hostmakedepends+=" libatomic-devel" ;;
+ *) ;;
+ esac
+fi
+
+subpackages="qt5-3d qt5-3d-devel qt5-charts qt5-charts-devel
qt5-connectivity qt5-connectivity-devel qt5-datavis3d qt5-datavis3d-devel
qt5-declarative qt5-declarative-devel qt5-devel qt5-examples qt5-gamepad
qt5-gamepad-devel qt5-graphicaleffects qt5-host-tools qt5-imageformats
@@ -51,7 +65,8 @@ subpackages="qt5-3d qt5-3d-devel qt5-canvas3d qt5-charts qt5-charts-devel
qt5-virtualkeyboard-devel qt5-wayland qt5-wayland-devel qt5-webchannel
qt5-webchannel-devel qt5-webglplugin qt5-webglplugin-devel qt5-websockets
qt5-websockets-devel qt5-webview qt5-webview-devel qt5-x11extras
- qt5-x11extras-devel qt5-xmlpatterns qt5-xmlpatterns-devel"
+ qt5-x11extras-devel qt5-xmlpatterns qt5-xmlpatterns-devel
+ qt5-lottie qt5-lottie-devel"
if [ "$build_option_webengine" ]; then
subpackages+=" qt5-webengine qt5-webengine-devel"
@@ -60,6 +75,7 @@ fi
if [ "${XBPS_MACHINE%%-musl}" = i686 ]; then
nodebug=yes # prevent OOM
fi
+
# Work around SSLv3_{client,server}_method missing in libressl-2.3.3
CFLAGS="-DOPENSSL_NO_PSK -DOPENSSL_NO_NEXTPROTONEG"
CXXFLAGS="${CFLAGS} -Wno-deprecated-declarations -Wno-class-memaccess -Wno-packed-not-aligned"
@@ -70,6 +86,7 @@ if [ "$CROSS_BUILD" ]; then
# Need some devel packages in the host to build qmake, moc, uic, rcc
# wayland-devel contains /usr/bin/wayland-scanner
hostmakedepends+=" icu-devel wayland-devel zlib-devel"
+ hostmakedepends+=" postgresql-libs-devel"
# Cross building qtwebengine requires some more host packages
if [ "$build_option_webengine" ]; then
hostmakedepends+=" nss-devel libevent-devel"
@@ -78,48 +95,18 @@ fi
_bootstrap_gn() {
# Bootstrap gn (generate ninja)
- _msg_cross "Bootstrapping 'gn'"
- cd ${wrksrc}/qtwebengine/src/3rdparty/chromium/tools/gn
- conf='is_clang=false'
- conf+=' treat_warnings_as_errors=false'
- conf+=' enable_remoting=false'
- conf+=' enable_nacl=false'
- conf+=' use_cups=false'
- conf+=' use_gconf=false'
- conf+=' use_gio=false'
- conf+=' use_gnome_keyring=false'
- conf+=' use_gtk=false'
- conf+=' use_kerberos=false'
- conf+=' linux_use_bundled_binutils=false'
- conf+=' binutils_path="/usr/bin"'
- conf+=' use_gold=false'
- conf+=' use_sysroot=false'
- conf+=' use_allocator="none"'
- conf+=' is_android=false'
-
- sed -i ${wrksrc}/qtwebengine/src/core/config/linux.pri \
- -e "/equals(MARMV/s;true;false;"
- case "$XBPS_TARGET_MACHINE" in
- armv[56]*) conf+=' arm_use_neon=false arm_optionally_use_neon=false';;
- armv7*) conf+=' arm_use_neon=true arm_optionally_use_neon=false';;
- aarch64*) conf+=' arm_use_neon=true arm_optionally_use_neon=false';;
- esac
-
- AR="$AR_host" CC="$CC_host" CXX="$CXX_host" LD="$CXX_host" \
+ echo "Bootstrapping 'gn'"
+ cd ${wrksrc}/qtwebengine/src/3rdparty/gn
CFLAGS="$CFLAGS_host" CXXFLAGS="$CXXFLAGS_host" LDFLAGS="$LDFLAGS_host" \
PKGCONFIG=/usr/bin/pkgconfig PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig" \
- python2 bootstrap/bootstrap.py -n --gn-gen-args "${conf}"
+ python2 build/gen.py --no-last-commit-position --out-path \
+ ${wrksrc}/qtwebengine/src/3rdparty/gn/out/Release --cc "$CC_host" \
+ --cxx "$CXX_host" --ld "$CXX_host" --ar "$AR_host"
+ ninja -C out/Release gn
cd ${wrksrc}
-
- mkdir -p ${wrksrc}/qtwebengine/src/3rdparty/chromium/tools/gn/out/Release
- cp -p ${wrksrc}/qtwebengine/src/3rdparty/chromium/out/Release/gn \
- ${wrksrc}/qtwebengine/src/3rdparty/chromium/tools/gn/out/Release/
-
- # Remove gn from SUBDIRS for qtwebengine/src/buildtools
- sed -i ${wrksrc}/qtwebengine/src/buildtools/buildtools.pro \
- -e"/gn.file = gn.pro/,+3d"
}
+
_cleanup_wrksrc_leak() {
if [ -d "${PKGDESTDIR}/usr/lib/cmake" ]; then
# Replace references to ${wrksrc} in cmake files
@@ -137,7 +124,10 @@ _cleanup_wrksrc_leak() {
# and replace references to ${wrksrc}
find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
-e "/^QMAKE_PRL_BUILD_DIR/d" \
- -e "s;-L${wrksrc}/qtbase/lib;-L/usr/lib;g" \;
+ -e "s;-L${wrksrc}/qtbase/lib;-L/usr/lib;g" \
+ -e "s%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \;
+ find ${PKGDESTDIR} -iname "*.pri" -exec sed -i "{}" \
+ -e "s%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \;
# Replace ${wrksrc} in project include files
find ${PKGDESTDIR} -iname "*.pri" -exec sed -i "{}" \
-e "s;${wrksrc}/qtbase;/usr/lib/qt5;g" \;
@@ -253,9 +243,6 @@ do_configure() {
qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/spin_lock.cc \
-e 's;"yield";"nop";'
;;
- ppc64le*) # enable webengine but not on BE ppc64 for now
- sed -i qtwebengine/mkspecs/features/platform.prf -e 's;#ppc64le;;'
- ;;
esac
case "$XBPS_TARGET_MACHINE" in
@@ -285,8 +272,7 @@ do_configure() {
for d in $(ls ${wrksrc}/qtbase/include); do
ln -sfv ${version}/${d}/private qtbase/include/${d}/private
done
-
- if [ "$build_option_webengine" ]; then
+if [ "$build_option_webengine" ]; then
_bootstrap_gn
fi
@@ -307,6 +293,7 @@ do_configure() {
-e '/#error Read the comment at this location/d'
;;
esac
+ patch -Np0 < ${FILESDIR}/0090-hard-disable-qmlchachegen.patch
else
# qmake {CXX,L}FLAGS patches
sed -i -e "s|^\(CXXFLAGS =.*\)|\1 ${CXXFLAGS}|" \
@@ -339,6 +326,10 @@ do_configure() {
opts+=" -icu"
opts+=" -openssl-linked"
opts+=" -dbus-linked"
+ opts+=" -sql-mysql"
+ opts+=" -mysql_config ${XBPS_CROSS_BASE}/usr/bin/mysql_config"
+ opts+=" -sql-psql"
+ opts+=" -psql_config /usr/bin/pg_config"
opts+=" -no-pch"
opts+=" -no-strip"
opts+=" -nomake examples"
@@ -369,12 +360,10 @@ do_configure() {
fi
opts+=" -silent"
# opts+=" -v"
-
# make sure to disable webengine on platforms that we don't build it for
if [ -z "$build_option_webengine" ]; then
opts+=" -skip qtwebengine"
fi
-
LDFLAGS+=" -Wl,--no-keep-memory" # needs more than 8GB RAM else
if [ "$CROSS_BUILD" ]; then
spec=void-${XBPS_CROSS_TRIPLET}-g++
@@ -392,6 +381,19 @@ do_configure() {
fi
;;
esac
+ case "$XBPS_TARGET_MACHINE" in
+ aarch64*|armv7*)
+ sed -i ${wrksrc}/qtwebengine/src/core/config/linux.pri \
+ -e "/arm_use_neon=/s;false;true;"
+ ;;
+ arm*)
+ sed -i ${wrksrc}/qtwebengine/src/core/config/linux.pri \
+ -e "/arm_use_neon=/s;true;false;"
+
+ ;;
+ esac
+ sed -i ${wrksrc}/qtwebengine/src/core/config/linux.pri \
+ -e "/equals(MARMV/s;true;false;"
# Make sure libQt5Designer is built
cp -v ${FILESDIR}/qttools_src.pro qttools/src/src.pro
@@ -425,7 +427,6 @@ do_install() {
cd ${wrksrc}/qtbase
make INSTALL_ROOT=${DESTDIR} install
- vlicense ${wrksrc}/LGPL_EXCEPTION.txt
_cleanup_wrksrc_leak
# Symbolic links for remaining binaries
@@ -547,6 +548,7 @@ do_install() {
[ -f "${base}.pro.orig" ] && mv -v ${base}.pro{.orig,}
[ -f Makefile.orig ] && mv -v Makefile{.orig,}
# Avoid rebuilding the Makefile by changing the rule
+ sed -i Makefile -e 's;^all:.*;all:;'
sed -i Makefile -e "s;^Makefile:;Makefile.host:;"
if [ -x "${wrksrc}/${dir}/bin/${base}-host" ]; then
mv -v ${wrksrc}/${dir}/bin/${base}{-host,}
@@ -574,13 +576,6 @@ qt5-3d_package() {
}
}
-qt5-canvas3d_package() {
- short_desc+=" - Canvas 3D component"
- pkg_install() {
- _install_subpkg qtcanvas3d
- }
-}
-
qt5-charts-devel_package() {
short_desc+=" - Charts component (development)"
depends="qt5-charts-${version}_${revision} qt5-declarative-devel-${version}_${revision}"
@@ -662,6 +657,18 @@ qt5-examples_package() {
}
}
+qt5-lottie-devel_package() {
+ pkg_install() {
+ _install_devel qtlottie
+ }
+}
+
+qt5-lottie_package() {
+ pkg_install() {
+ _install_subpkg qtlottie
+ }
+}
+
qt5-gamepad-devel_package() {
short_desc+=" - Gamepad component (development)"
depends="qt5-gamepad-${version}_${revision} qt5-declarative-devel-${version}_${revision}"
@@ -1055,7 +1062,7 @@ qt5-host-tools_package() {
if [ -f ${DESTDIR}/usr/lib/qt5/bin/${f} ]; then
vmove usr/lib/qt5/bin/${f}
fi
- if [ -f ${DESTDIR}/usr/bin/${f}-qt5 ]; then
+ if [ -f ${DESTDIR}/usr/bin/${f}-qt5 ] || [ -h ${DESTDIR}/usr/bin/${f}-qt5 ]; then
vmove usr/bin/${f}-qt5
else
ln -sf ../lib/qt5/bin/${f} ${PKGDESTDIR}/usr/bin/${f}-qt5
@@ -1104,7 +1111,7 @@ qt5-tools_package() {
mkdir -p ${dest}/usr/lib/qt5/bin
mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
fi
- if [ -f ${PKGDESTDIR}/usr/bin/${f}-qt5 ]; then
+ if [ -f ${PKGDESTDIR}/usr/bin/${f}-qt5 ] || [ -h ${PKGDESTDIR}/usr/bin/${f}-qt5 ]; then
mkdir -p ${dest}/usr/bin
mv -v ${PKGDESTDIR}/usr/bin/${f}-qt5 ${dest}/usr/bin/
fi
@@ -1115,7 +1122,7 @@ qt5-tools_package() {
qt5-devel_package() {
depends="zlib-devel libressl-devel>=2.1.4 libXext-devel libXrender-devel
fontconfig-devel libglib-devel MesaLib-devel mtdev-devel
- dbus-devel icu-devel qt5-${version}_${revision}
+ dbus-devel icu-devel cups-devel qt5-${version}_${revision}
qt5-qmake-${version}_${revision}
qt5-host-tools-${version}_${revision}"
short_desc+=" - Development files"
From 2a2c169744977adedb75d6e3ce15fcd3a7b40fd1 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/5] qt5-webkit: rebuild against qt5-5.13.0
---
srcpkgs/qt5-webkit/template | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/srcpkgs/qt5-webkit/template b/srcpkgs/qt5-webkit/template
index b2e996f30d8..29039cc606d 100644
--- a/srcpkgs/qt5-webkit/template
+++ b/srcpkgs/qt5-webkit/template
@@ -1,7 +1,7 @@
# Template file for 'qt5-webkit'
pkgname=qt5-webkit
version=5.212.0
-revision=2
+revision=3
_v=${version%.*}
wrksrc="qtwebkit-everywhere-src-${_v}"
build_style=cmake
From 2555f456c7cf9c3cb411d539eef097e61a2f2c21 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/5] telegram-desktop: rebuild for qt5-5.13.0
---
srcpkgs/telegram-desktop/template | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/srcpkgs/telegram-desktop/template b/srcpkgs/telegram-desktop/template
index aa90775c2c7..254020539db 100644
--- a/srcpkgs/telegram-desktop/template
+++ b/srcpkgs/telegram-desktop/template
@@ -19,7 +19,7 @@ makedepends="alsa-lib-devel ffmpeg-devel gtk+3-devel libappindicator-devel
libdbusmenu-glib-devel libopenal-devel minizip-devel opus-devel xxHash-devel
$(vopt_if pulseaudio 'pulseaudio-devel') qt5-devel range-v3 libva-devel
rapidjson"
-depends="qt5-imageformats qt5>=5.11.3<5.11.4"
+depends="qt5-imageformats qt5>=5.13.0<5.13.1"
short_desc="Telegram Desktop messaging app"
maintainer="John <johnz@posteo.net>"
license="GPL-3.0-or-later WITH OpenSSL"
From 28c50d59f031930742d1f1c2b44651641448c38f Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/5] qt5-styleplugins: rebuild against qt5-5.13.0
[ci skip]
---
srcpkgs/qt5-styleplugins/template | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/srcpkgs/qt5-styleplugins/template b/srcpkgs/qt5-styleplugins/template
index ec286b4bdd3..745bcb8f7a5 100644
--- a/srcpkgs/qt5-styleplugins/template
+++ b/srcpkgs/qt5-styleplugins/template
@@ -1,13 +1,13 @@
# Template file for 'qt5-styleplugins'
pkgname=qt5-styleplugins
version=5.0.0
-revision=7
+revision=8
_gitrev=600c296f4d429ffeb8203feb54efeacc2bbea0f7
wrksrc="qtstyleplugins-${_gitrev}"
build_style=qmake
hostmakedepends="pkg-config qt5-host-tools qt5-devel"
makedepends="libxcb-devel libxkbcommon-devel libinput-devel tslib-devel gtk+-devel qt5-devel"
-depends="qt5>=5.11.3<5.11.4"
+depends="qt5>=5.13.0<5.13.1"
short_desc="Additional style plugins for Qt5"
maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
license="LGPL-2.1-only, LGPL-3.0-only"
From 6851bc41682f4c771fd57c240aff48c984a4ffe5 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/5] qtcreator: remove deprecated qt5-cavnas3d dep
[ci skip]
---
srcpkgs/qtcreator/template | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/srcpkgs/qtcreator/template b/srcpkgs/qtcreator/template
index 7a76c6f3db2..19ef1b85746 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
# Template file for 'qtcreator'
pkgname=qtcreator
version=4.9.1
-revision=1
+revision=2
wrksrc="qt-creator-opensource-src-${version}"
build_style=qmake
make_install_args="INSTALL_ROOT=\${DESTDIR}/usr"
@@ -36,7 +36,7 @@ post_install() {
qtcreator-full_package() {
short_desc+=" - full Qt5 dependencies"
depends="${sourcepkg}>=${version}_${revision}
- qt5-3d-devel qt5-canvas3d qt5-charts-devel qt5-connectivity-devel qt5-datavis3d-devel
+ qt5-3d-devel qt5-charts-devel qt5-connectivity-devel qt5-datavis3d-devel
qt5-declarative-devel qt5-datavis3d-devel qt5-gamepad-devel qt5-location-devel
qt5-multimedia-devel qt5-networkauth-devel qt5-purchasing-devel qt5-quickcontrols
qt5-quickcontrols2-devel qt5-remoteobjects-devel qt5-script-devel qt5-scxml-devel
next prev parent reply other threads:[~2019-06-21 16:22 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
2019-06-13 12:34 ` [PR PATCH] [Updated] [WIP] qt5: update to 5.13beta3 voidlinux-github
2019-06-19 9:26 ` voidlinux-github
2019-06-19 9:26 ` voidlinux-github
2019-06-19 13:20 ` [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0 voidlinux-github
2019-06-19 13:20 ` voidlinux-github
2019-06-19 15:12 ` voidlinux-github
2019-06-19 15:12 ` voidlinux-github
2019-06-19 15:15 ` voidlinux-github
2019-06-19 15:15 ` voidlinux-github
2019-06-19 16:13 ` voidlinux-github
2019-06-19 16:54 ` voidlinux-github
2019-06-19 22:30 ` voidlinux-github
2019-06-21 16:18 ` [PR PATCH] [Updated] " voidlinux-github
2019-06-21 16:18 ` voidlinux-github
2019-06-21 16:22 ` voidlinux-github [this message]
2019-06-21 16:22 ` voidlinux-github
2019-06-24 23:10 ` voidlinux-github
2019-06-24 23:10 ` voidlinux-github
2019-06-29 2:44 ` voidlinux-github
2019-06-29 2:44 ` voidlinux-github
2019-06-29 2:45 ` voidlinux-github
2019-06-29 2:45 ` voidlinux-github
2019-06-29 5:35 ` voidlinux-github
2019-06-29 5:36 ` voidlinux-github
2019-06-29 5:45 ` voidlinux-github
2019-06-29 6:08 ` voidlinux-github
2019-06-29 19:46 ` voidlinux-github
2019-06-30 10:06 ` voidlinux-github
2019-07-01 22:48 ` voidlinux-github
2019-07-01 22:54 ` [PR PATCH] [Updated] " voidlinux-github
2019-07-01 22:54 ` voidlinux-github
2019-07-02 0:53 ` voidlinux-github
2019-07-02 5:52 ` voidlinux-github
2019-07-06 20:01 ` [PR PATCH] [Updated] " voidlinux-github
2019-07-06 20:01 ` voidlinux-github
2019-07-06 20:19 ` voidlinux-github
2019-07-06 20:19 ` voidlinux-github
2019-07-06 20:24 ` voidlinux-github
2019-07-06 20:24 ` voidlinux-github
2019-07-06 20:26 ` voidlinux-github
2019-07-10 1:22 ` [PR PATCH] [Updated] " voidlinux-github
2019-07-10 1:22 ` voidlinux-github
2019-07-10 9:54 ` voidlinux-github
2019-07-10 22:31 ` voidlinux-github
2019-07-10 22:32 ` voidlinux-github
2019-07-11 4:15 ` [PR PATCH] [Updated] " voidlinux-github
2019-07-11 4:15 ` voidlinux-github
2019-07-11 4:29 ` [PR PATCH] [Merged]: " voidlinux-github
2019-07-11 4:30 ` voidlinux-github
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190621162245.8frBncmKYRY0p8ijBuN_ERc7g6GumsJw81JxF0u54bE@z \
--to=voidlinux-github@inbox.vuxu.org \
--cc=ml@inbox.vuxu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).