Github messages for voidlinux
 help / color / mirror / Atom feed
* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13beta3
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
@ 2019-06-13 12:34 ` voidlinux-github
  2019-06-19  9:26 ` voidlinux-github
                   ` (47 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-13 12:34 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 623 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.13beta3
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


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: 181874 bytes --]

From 2c80e11c66577bc5358d8db8043067cceb1fb36a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/6] qt5: update to 5.13.0

---
 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 +
 .../qt5/patches/arm-void-is-not-android.patch |   21 +
 srcpkgs/qt5/patches/libressl-const-bio.patch  |    8 +-
 ...-execinfo.patch => qt-musl-execinfo.patch} |   85 +-
 .../patches/qt-musl-thread-stacksize.patch    |   26 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/patches/sandbox-membarrier.patch  |   60 +
 srcpkgs/qt5/template                          |  123 +-
 42 files changed, 300 insertions(+), 3075 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/arm-void-is-not-android.patch
 rename srcpkgs/qt5/patches/{0005-musl-no-execinfo.patch => qt-musl-execinfo.patch} (56%)
 create mode 100644 srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
 create mode 100644 srcpkgs/qt5/patches/sandbox-membarrier.patch

diff --git a/common/shlibs b/common/shlibs
index 524b52be71c..d4ce3c5766f 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -1849,10 +1849,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/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/arm-void-is-not-android.patch
new file mode 100644
index 00000000000..b13290d3ccd
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/libressl-const-bio.patch
index f3493862cd4..d3a1fe96c53 100644
--- a/srcpkgs/qt5/patches/libressl-const-bio.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-execinfo.patch
similarity index 56%
rename from srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
rename to srcpkgs/qt5/patches/qt-musl-execinfo.patch
index 615177ba16e..98f3a38745a 100644
--- a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
new file mode 100644
index 00000000000..496753bef30
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/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 = &regs;
-@@ -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/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/sandbox-membarrier.patch
new file mode 100644
index 00000000000..b73971f2432
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/template b/srcpkgs/qt5/template
index bfd8712e7af..b010b4c523b 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,8 +1,8 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=7
-wrksrc="qt-everywhere-src-${version}"
+version=5.13.0rc
+revision=1
+wrksrc="qt-everywhere-src-${version/rc/-rc}"
 build_style=gnu-configure
 hostmakedepends="cmake clang flex git glib-devel gperf ninja pkg-config
  protobuf python re2c ruby"
@@ -10,20 +10,20 @@ 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
+distfiles="http://download.qt.io/development_releases/qt/${version%.*}/${version/rc/-rc}/single/qt-everywhere-src-${version/rc/-rc}.tar.xz"
+checksum=5febada464e27908e03d3d177389060d89821ecc3a4ac684a28e389d570a8b4b
 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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}"
@@ -1115,7 +1112,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 e9ce8d68ab66efa4014a06d72ed397336e1031df Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/6] 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 90a767b3bbf980fd1cfc34dff8994e0cf2486ac8 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/6] telegram-desktop: rebuild for qt5-5.13.0

---
 srcpkgs/telegram-desktop/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/telegram-desktop/template b/srcpkgs/telegram-desktop/template
index 4a0e9827c6b..254020539db 100644
--- a/srcpkgs/telegram-desktop/template
+++ b/srcpkgs/telegram-desktop/template
@@ -1,7 +1,7 @@
 # Template file for 'telegram-desktop'
 pkgname=telegram-desktop
 version=1.7.7
-revision=1
+revision=2
 _libtgvoip_commit=a19a0aff644127d8089f6a4ac18119ec5247dbd0
 _GSL_commit=d846fe50a3f0bb7767c7e087a05f4be95f4da0ec
 _variant_commit=550ac2f159ca883d360c196149b466955c77a573
@@ -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 295a8d2fcfea1fb6eac40c2a50445d6eb6fcdb80 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/6] 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 2b332484ef8bd3a1cc74a8c942c90af7aac88368 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/6] qtcreator: remove deprecated qt5-cavnas3d dep

---
 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

From a919d711b7d5f3a094cf7e9f2521690cc7270468 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 13 Jun 2019 14:33:38 +0200
Subject: [PATCH 6/6] qt5: update to 5.13.0rc2.

---
 srcpkgs/qt5/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index b010b4c523b..46f68b435f4 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,6 +1,6 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.13.0rc
+version=5.13.0rc2
 revision=1
 wrksrc="qt-everywhere-src-${version/rc/-rc}"
 build_style=gnu-configure
@@ -21,7 +21,7 @@ maintainer="Jürgen Buchmüller <pullmoll@t-online.de>"
 license="GPL-3.0-or-later, LGPL-3.0-or-later"
 homepage="https://qt.io/"
 distfiles="http://download.qt.io/development_releases/qt/${version%.*}/${version/rc/-rc}/single/qt-everywhere-src-${version/rc/-rc}.tar.xz"
-checksum=5febada464e27908e03d3d177389060d89821ecc3a4ac684a28e389d570a8b4b
+checksum=cf2601065f70724c0fe8aedfaa253f15078954d22b5d32a036a624570cc6b491
 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-canvas3d<5.13.0"
 

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13beta3
       [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
                   ` (45 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19  9:26 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 623 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.13beta3
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


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: 180127 bytes --]

From 4db706829243559a2a60157c5fa65527d17b4539 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

---
 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 +
 .../qt5/patches/arm-void-is-not-android.patch |   21 +
 srcpkgs/qt5/patches/libressl-const-bio.patch  |    8 +-
 ...-execinfo.patch => qt-musl-execinfo.patch} |   85 +-
 .../patches/qt-musl-thread-stacksize.patch    |   26 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/patches/sandbox-membarrier.patch  |   60 +
 srcpkgs/qt5/template                          |  119 +-
 42 files changed, 298 insertions(+), 3073 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/arm-void-is-not-android.patch
 rename srcpkgs/qt5/patches/{0005-musl-no-execinfo.patch => qt-musl-execinfo.patch} (56%)
 create mode 100644 srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
 create mode 100644 srcpkgs/qt5/patches/sandbox-membarrier.patch

diff --git a/common/shlibs b/common/shlibs
index 75431657f20..1c0bda7aff0 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/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/arm-void-is-not-android.patch
new file mode 100644
index 00000000000..b13290d3ccd
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/libressl-const-bio.patch
index f3493862cd4..d3a1fe96c53 100644
--- a/srcpkgs/qt5/patches/libressl-const-bio.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-execinfo.patch
similarity index 56%
rename from srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
rename to srcpkgs/qt5/patches/qt-musl-execinfo.patch
index 615177ba16e..98f3a38745a 100644
--- a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
new file mode 100644
index 00000000000..496753bef30
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/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 = &regs;
-@@ -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/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/sandbox-membarrier.patch
new file mode 100644
index 00000000000..b73971f2432
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/template b/srcpkgs/qt5/template
index bfd8712e7af..24922003c0a 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,20 +10,20 @@ 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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}"
@@ -1115,7 +1112,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 da8dd5469aa37ea6818e7b838b2d1db7a7b9efde 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 b5a75d43540b897a8f0434a233c65f02e0488b90 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 de301380f18742863175b99d548fa28766b71b0d 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 51f38f243252e01d48fb4eee433450064c711a48 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

---
 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

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13beta3
       [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
                   ` (46 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19  9:26 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 623 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.13beta3
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


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: 180127 bytes --]

From 4db706829243559a2a60157c5fa65527d17b4539 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

---
 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 +
 .../qt5/patches/arm-void-is-not-android.patch |   21 +
 srcpkgs/qt5/patches/libressl-const-bio.patch  |    8 +-
 ...-execinfo.patch => qt-musl-execinfo.patch} |   85 +-
 .../patches/qt-musl-thread-stacksize.patch    |   26 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/patches/sandbox-membarrier.patch  |   60 +
 srcpkgs/qt5/template                          |  119 +-
 42 files changed, 298 insertions(+), 3073 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/arm-void-is-not-android.patch
 rename srcpkgs/qt5/patches/{0005-musl-no-execinfo.patch => qt-musl-execinfo.patch} (56%)
 create mode 100644 srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
 create mode 100644 srcpkgs/qt5/patches/sandbox-membarrier.patch

diff --git a/common/shlibs b/common/shlibs
index 75431657f20..1c0bda7aff0 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/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/arm-void-is-not-android.patch
new file mode 100644
index 00000000000..b13290d3ccd
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/libressl-const-bio.patch
index f3493862cd4..d3a1fe96c53 100644
--- a/srcpkgs/qt5/patches/libressl-const-bio.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-execinfo.patch
similarity index 56%
rename from srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
rename to srcpkgs/qt5/patches/qt-musl-execinfo.patch
index 615177ba16e..98f3a38745a 100644
--- a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
new file mode 100644
index 00000000000..496753bef30
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/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 = &regs;
-@@ -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/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/sandbox-membarrier.patch
new file mode 100644
index 00000000000..b73971f2432
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/template b/srcpkgs/qt5/template
index bfd8712e7af..24922003c0a 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,20 +10,20 @@ 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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}"
@@ -1115,7 +1112,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 da8dd5469aa37ea6818e7b838b2d1db7a7b9efde 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 b5a75d43540b897a8f0434a233c65f02e0488b90 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 de301380f18742863175b99d548fa28766b71b0d 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 51f38f243252e01d48fb4eee433450064c711a48 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

---
 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

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (2 preceding siblings ...)
  2019-06-19  9:26 ` voidlinux-github
@ 2019-06-19 13:20 ` voidlinux-github
  2019-06-19 13:20 ` voidlinux-github
                   ` (44 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19 13:20 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 620 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


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: 180884 bytes --]

From 4db706829243559a2a60157c5fa65527d17b4539 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/6] qt5: update to 5.13.0

---
 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 +
 .../qt5/patches/arm-void-is-not-android.patch |   21 +
 srcpkgs/qt5/patches/libressl-const-bio.patch  |    8 +-
 ...-execinfo.patch => qt-musl-execinfo.patch} |   85 +-
 .../patches/qt-musl-thread-stacksize.patch    |   26 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/patches/sandbox-membarrier.patch  |   60 +
 srcpkgs/qt5/template                          |  119 +-
 42 files changed, 298 insertions(+), 3073 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/arm-void-is-not-android.patch
 rename srcpkgs/qt5/patches/{0005-musl-no-execinfo.patch => qt-musl-execinfo.patch} (56%)
 create mode 100644 srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
 create mode 100644 srcpkgs/qt5/patches/sandbox-membarrier.patch

diff --git a/common/shlibs b/common/shlibs
index 75431657f20..1c0bda7aff0 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/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/arm-void-is-not-android.patch
new file mode 100644
index 00000000000..b13290d3ccd
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/libressl-const-bio.patch
index f3493862cd4..d3a1fe96c53 100644
--- a/srcpkgs/qt5/patches/libressl-const-bio.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-execinfo.patch
similarity index 56%
rename from srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
rename to srcpkgs/qt5/patches/qt-musl-execinfo.patch
index 615177ba16e..98f3a38745a 100644
--- a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
new file mode 100644
index 00000000000..496753bef30
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/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 = &regs;
-@@ -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/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/sandbox-membarrier.patch
new file mode 100644
index 00000000000..b73971f2432
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/template b/srcpkgs/qt5/template
index bfd8712e7af..24922003c0a 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,20 +10,20 @@ 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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}"
@@ -1115,7 +1112,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 da8dd5469aa37ea6818e7b838b2d1db7a7b9efde Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/6] 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 b5a75d43540b897a8f0434a233c65f02e0488b90 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/6] 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 de301380f18742863175b99d548fa28766b71b0d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/6] 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 51f38f243252e01d48fb4eee433450064c711a48 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/6] qtcreator: remove deprecated qt5-cavnas3d dep

---
 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

From 1a44c7bca658e74c66480473e9bc2cf7bc895c09 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 15:20:29 +0200
Subject: [PATCH 6/6] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 24922003c0a..5f505914022 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1052,7 +1052,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 [ -e ${DESTDIR}/usr/bin/${f}-qt5 ]; then
 				vmove usr/bin/${f}-qt5
 			else
 				ln -sf ../lib/qt5/bin/${f} ${PKGDESTDIR}/usr/bin/${f}-qt5

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (3 preceding siblings ...)
  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
                   ` (43 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19 13:20 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 620 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


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: 180884 bytes --]

From 4db706829243559a2a60157c5fa65527d17b4539 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/6] qt5: update to 5.13.0

---
 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 +
 .../qt5/patches/arm-void-is-not-android.patch |   21 +
 srcpkgs/qt5/patches/libressl-const-bio.patch  |    8 +-
 ...-execinfo.patch => qt-musl-execinfo.patch} |   85 +-
 .../patches/qt-musl-thread-stacksize.patch    |   26 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/patches/sandbox-membarrier.patch  |   60 +
 srcpkgs/qt5/template                          |  119 +-
 42 files changed, 298 insertions(+), 3073 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/arm-void-is-not-android.patch
 rename srcpkgs/qt5/patches/{0005-musl-no-execinfo.patch => qt-musl-execinfo.patch} (56%)
 create mode 100644 srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
 create mode 100644 srcpkgs/qt5/patches/sandbox-membarrier.patch

diff --git a/common/shlibs b/common/shlibs
index 75431657f20..1c0bda7aff0 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/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/arm-void-is-not-android.patch
new file mode 100644
index 00000000000..b13290d3ccd
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/libressl-const-bio.patch
index f3493862cd4..d3a1fe96c53 100644
--- a/srcpkgs/qt5/patches/libressl-const-bio.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-execinfo.patch
similarity index 56%
rename from srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
rename to srcpkgs/qt5/patches/qt-musl-execinfo.patch
index 615177ba16e..98f3a38745a 100644
--- a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
new file mode 100644
index 00000000000..496753bef30
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/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 = &regs;
-@@ -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/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/sandbox-membarrier.patch
new file mode 100644
index 00000000000..b73971f2432
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/template b/srcpkgs/qt5/template
index bfd8712e7af..24922003c0a 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,20 +10,20 @@ 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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}"
@@ -1115,7 +1112,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 da8dd5469aa37ea6818e7b838b2d1db7a7b9efde Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/6] 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 b5a75d43540b897a8f0434a233c65f02e0488b90 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/6] 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 de301380f18742863175b99d548fa28766b71b0d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/6] 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 51f38f243252e01d48fb4eee433450064c711a48 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/6] qtcreator: remove deprecated qt5-cavnas3d dep

---
 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

From 1a44c7bca658e74c66480473e9bc2cf7bc895c09 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 15:20:29 +0200
Subject: [PATCH 6/6] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 24922003c0a..5f505914022 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1052,7 +1052,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 [ -e ${DESTDIR}/usr/bin/${f}-qt5 ]; then
 				vmove usr/bin/${f}-qt5
 			else
 				ln -sf ../lib/qt5/bin/${f} ${PKGDESTDIR}/usr/bin/${f}-qt5

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (4 preceding siblings ...)
  2019-06-19 13:20 ` voidlinux-github
@ 2019-06-19 15:12 ` voidlinux-github
  2019-06-19 15:12 ` voidlinux-github
                   ` (42 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19 15:12 UTC (permalink / raw)
  To: ml

[-- 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: 181994 bytes --]

From 4db706829243559a2a60157c5fa65527d17b4539 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/7] qt5: update to 5.13.0

---
 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 +
 .../qt5/patches/arm-void-is-not-android.patch |   21 +
 srcpkgs/qt5/patches/libressl-const-bio.patch  |    8 +-
 ...-execinfo.patch => qt-musl-execinfo.patch} |   85 +-
 .../patches/qt-musl-thread-stacksize.patch    |   26 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/patches/sandbox-membarrier.patch  |   60 +
 srcpkgs/qt5/template                          |  119 +-
 42 files changed, 298 insertions(+), 3073 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/arm-void-is-not-android.patch
 rename srcpkgs/qt5/patches/{0005-musl-no-execinfo.patch => qt-musl-execinfo.patch} (56%)
 create mode 100644 srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
 create mode 100644 srcpkgs/qt5/patches/sandbox-membarrier.patch

diff --git a/common/shlibs b/common/shlibs
index 75431657f20..1c0bda7aff0 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/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/arm-void-is-not-android.patch
new file mode 100644
index 00000000000..b13290d3ccd
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/libressl-const-bio.patch
index f3493862cd4..d3a1fe96c53 100644
--- a/srcpkgs/qt5/patches/libressl-const-bio.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-execinfo.patch
similarity index 56%
rename from srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
rename to srcpkgs/qt5/patches/qt-musl-execinfo.patch
index 615177ba16e..98f3a38745a 100644
--- a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
new file mode 100644
index 00000000000..496753bef30
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/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 = &regs;
-@@ -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/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/sandbox-membarrier.patch
new file mode 100644
index 00000000000..b73971f2432
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/template b/srcpkgs/qt5/template
index bfd8712e7af..24922003c0a 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,20 +10,20 @@ 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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}"
@@ -1115,7 +1112,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 da8dd5469aa37ea6818e7b838b2d1db7a7b9efde Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/7] 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 b5a75d43540b897a8f0434a233c65f02e0488b90 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/7] 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 de301380f18742863175b99d548fa28766b71b0d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/7] 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 51f38f243252e01d48fb4eee433450064c711a48 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/7] qtcreator: remove deprecated qt5-cavnas3d dep

---
 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

From 1a44c7bca658e74c66480473e9bc2cf7bc895c09 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 15:20:29 +0200
Subject: [PATCH 6/7] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 24922003c0a..5f505914022 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1052,7 +1052,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 [ -e ${DESTDIR}/usr/bin/${f}-qt5 ]; then
 				vmove usr/bin/${f}-qt5
 			else
 				ln -sf ../lib/qt5/bin/${f} ${PKGDESTDIR}/usr/bin/${f}-qt5

From 47c9e58ca779ab0e81af8ed22136d8026a3c6d97 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 17:12:35 +0200
Subject: [PATCH 7/7] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/patches/0041-libressl.patch | 11 +++++++++++
 1 file changed, 11 insertions(+)
 create mode 100644 srcpkgs/qt5/patches/0041-libressl.patch

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) {

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (5 preceding siblings ...)
  2019-06-19 15:12 ` voidlinux-github
@ 2019-06-19 15:12 ` voidlinux-github
  2019-06-19 15:15 ` voidlinux-github
                   ` (41 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19 15:12 UTC (permalink / raw)
  To: ml

[-- 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: 181994 bytes --]

From 4db706829243559a2a60157c5fa65527d17b4539 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/7] qt5: update to 5.13.0

---
 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 +
 .../qt5/patches/arm-void-is-not-android.patch |   21 +
 srcpkgs/qt5/patches/libressl-const-bio.patch  |    8 +-
 ...-execinfo.patch => qt-musl-execinfo.patch} |   85 +-
 .../patches/qt-musl-thread-stacksize.patch    |   26 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/patches/sandbox-membarrier.patch  |   60 +
 srcpkgs/qt5/template                          |  119 +-
 42 files changed, 298 insertions(+), 3073 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/arm-void-is-not-android.patch
 rename srcpkgs/qt5/patches/{0005-musl-no-execinfo.patch => qt-musl-execinfo.patch} (56%)
 create mode 100644 srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
 create mode 100644 srcpkgs/qt5/patches/sandbox-membarrier.patch

diff --git a/common/shlibs b/common/shlibs
index 75431657f20..1c0bda7aff0 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/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/arm-void-is-not-android.patch
new file mode 100644
index 00000000000..b13290d3ccd
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/libressl-const-bio.patch
index f3493862cd4..d3a1fe96c53 100644
--- a/srcpkgs/qt5/patches/libressl-const-bio.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-execinfo.patch
similarity index 56%
rename from srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
rename to srcpkgs/qt5/patches/qt-musl-execinfo.patch
index 615177ba16e..98f3a38745a 100644
--- a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
new file mode 100644
index 00000000000..496753bef30
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/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 = &regs;
-@@ -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/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/sandbox-membarrier.patch
new file mode 100644
index 00000000000..b73971f2432
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/template b/srcpkgs/qt5/template
index bfd8712e7af..24922003c0a 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,20 +10,20 @@ 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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}"
@@ -1115,7 +1112,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 da8dd5469aa37ea6818e7b838b2d1db7a7b9efde Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/7] 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 b5a75d43540b897a8f0434a233c65f02e0488b90 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/7] 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 de301380f18742863175b99d548fa28766b71b0d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/7] 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 51f38f243252e01d48fb4eee433450064c711a48 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/7] qtcreator: remove deprecated qt5-cavnas3d dep

---
 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

From 1a44c7bca658e74c66480473e9bc2cf7bc895c09 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 15:20:29 +0200
Subject: [PATCH 6/7] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 24922003c0a..5f505914022 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1052,7 +1052,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 [ -e ${DESTDIR}/usr/bin/${f}-qt5 ]; then
 				vmove usr/bin/${f}-qt5
 			else
 				ln -sf ../lib/qt5/bin/${f} ${PKGDESTDIR}/usr/bin/${f}-qt5

From 47c9e58ca779ab0e81af8ed22136d8026a3c6d97 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 17:12:35 +0200
Subject: [PATCH 7/7] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/patches/0041-libressl.patch | 11 +++++++++++
 1 file changed, 11 insertions(+)
 create mode 100644 srcpkgs/qt5/patches/0041-libressl.patch

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) {

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (7 preceding siblings ...)
  2019-06-19 15:15 ` voidlinux-github
@ 2019-06-19 15:15 ` voidlinux-github
  2019-06-19 16:13 ` voidlinux-github
                   ` (39 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19 15:15 UTC (permalink / raw)
  To: ml

[-- 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: 184369 bytes --]

From 4db706829243559a2a60157c5fa65527d17b4539 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/8] qt5: update to 5.13.0

---
 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 +
 .../qt5/patches/arm-void-is-not-android.patch |   21 +
 srcpkgs/qt5/patches/libressl-const-bio.patch  |    8 +-
 ...-execinfo.patch => qt-musl-execinfo.patch} |   85 +-
 .../patches/qt-musl-thread-stacksize.patch    |   26 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/patches/sandbox-membarrier.patch  |   60 +
 srcpkgs/qt5/template                          |  119 +-
 42 files changed, 298 insertions(+), 3073 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/arm-void-is-not-android.patch
 rename srcpkgs/qt5/patches/{0005-musl-no-execinfo.patch => qt-musl-execinfo.patch} (56%)
 create mode 100644 srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
 create mode 100644 srcpkgs/qt5/patches/sandbox-membarrier.patch

diff --git a/common/shlibs b/common/shlibs
index 75431657f20..1c0bda7aff0 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/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/arm-void-is-not-android.patch
new file mode 100644
index 00000000000..b13290d3ccd
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/libressl-const-bio.patch
index f3493862cd4..d3a1fe96c53 100644
--- a/srcpkgs/qt5/patches/libressl-const-bio.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-execinfo.patch
similarity index 56%
rename from srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
rename to srcpkgs/qt5/patches/qt-musl-execinfo.patch
index 615177ba16e..98f3a38745a 100644
--- a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
new file mode 100644
index 00000000000..496753bef30
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/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 = &regs;
-@@ -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/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/sandbox-membarrier.patch
new file mode 100644
index 00000000000..b73971f2432
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/template b/srcpkgs/qt5/template
index bfd8712e7af..24922003c0a 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,20 +10,20 @@ 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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}"
@@ -1115,7 +1112,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 da8dd5469aa37ea6818e7b838b2d1db7a7b9efde Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/8] 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 b5a75d43540b897a8f0434a233c65f02e0488b90 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/8] 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 de301380f18742863175b99d548fa28766b71b0d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/8] 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 51f38f243252e01d48fb4eee433450064c711a48 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/8] qtcreator: remove deprecated qt5-cavnas3d dep

---
 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

From 1a44c7bca658e74c66480473e9bc2cf7bc895c09 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 15:20:29 +0200
Subject: [PATCH 6/8] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 24922003c0a..5f505914022 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1052,7 +1052,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 [ -e ${DESTDIR}/usr/bin/${f}-qt5 ]; then
 				vmove usr/bin/${f}-qt5
 			else
 				ln -sf ../lib/qt5/bin/${f} ${PKGDESTDIR}/usr/bin/${f}-qt5

From 47c9e58ca779ab0e81af8ed22136d8026a3c6d97 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 17:12:35 +0200
Subject: [PATCH 7/8] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/patches/0041-libressl.patch | 11 +++++++++++
 1 file changed, 11 insertions(+)
 create mode 100644 srcpkgs/qt5/patches/0041-libressl.patch

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) {

From 0d3aa40c8cab911957bf0ad29a11c1f80897e3d7 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 17:15:39 +0200
Subject: [PATCH 8/8] fixup! qt5: update to 5.13.0

---
 ...id-is-not-android.patch => 0042-arm-void-is-not-android.patch} | 0
 .../{libressl-const-bio.patch => 0043-libressl-const-bio.patch}   | 0
 .../{qt-musl-execinfo.patch => 0044-qt-musl-execinfo.patch}       | 0
 ...thread-stacksize.patch => 0045-qt-musl-thread-stacksize.patch} | 0
 .../{sandbox-membarrier.patch => 0046-sandbox-membarrier.patch}   | 0
 5 files changed, 0 insertions(+), 0 deletions(-)
 rename srcpkgs/qt5/patches/{arm-void-is-not-android.patch => 0042-arm-void-is-not-android.patch} (100%)
 rename srcpkgs/qt5/patches/{libressl-const-bio.patch => 0043-libressl-const-bio.patch} (100%)
 rename srcpkgs/qt5/patches/{qt-musl-execinfo.patch => 0044-qt-musl-execinfo.patch} (100%)
 rename srcpkgs/qt5/patches/{qt-musl-thread-stacksize.patch => 0045-qt-musl-thread-stacksize.patch} (100%)
 rename srcpkgs/qt5/patches/{sandbox-membarrier.patch => 0046-sandbox-membarrier.patch} (100%)

diff --git a/srcpkgs/qt5/patches/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/0042-arm-void-is-not-android.patch
similarity index 100%
rename from srcpkgs/qt5/patches/arm-void-is-not-android.patch
rename to srcpkgs/qt5/patches/0042-arm-void-is-not-android.patch
diff --git a/srcpkgs/qt5/patches/libressl-const-bio.patch b/srcpkgs/qt5/patches/0043-libressl-const-bio.patch
similarity index 100%
rename from srcpkgs/qt5/patches/libressl-const-bio.patch
rename to srcpkgs/qt5/patches/0043-libressl-const-bio.patch
diff --git a/srcpkgs/qt5/patches/qt-musl-execinfo.patch b/srcpkgs/qt5/patches/0044-qt-musl-execinfo.patch
similarity index 100%
rename from srcpkgs/qt5/patches/qt-musl-execinfo.patch
rename to srcpkgs/qt5/patches/0044-qt-musl-execinfo.patch
diff --git a/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/0045-qt-musl-thread-stacksize.patch
similarity index 100%
rename from srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
rename to srcpkgs/qt5/patches/0045-qt-musl-thread-stacksize.patch
diff --git a/srcpkgs/qt5/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/0046-sandbox-membarrier.patch
similarity index 100%
rename from srcpkgs/qt5/patches/sandbox-membarrier.patch
rename to srcpkgs/qt5/patches/0046-sandbox-membarrier.patch

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (6 preceding siblings ...)
  2019-06-19 15:12 ` voidlinux-github
@ 2019-06-19 15:15 ` voidlinux-github
  2019-06-19 15:15 ` voidlinux-github
                   ` (40 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19 15:15 UTC (permalink / raw)
  To: ml

[-- 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: 184369 bytes --]

From 4db706829243559a2a60157c5fa65527d17b4539 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/8] qt5: update to 5.13.0

---
 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 +
 .../qt5/patches/arm-void-is-not-android.patch |   21 +
 srcpkgs/qt5/patches/libressl-const-bio.patch  |    8 +-
 ...-execinfo.patch => qt-musl-execinfo.patch} |   85 +-
 .../patches/qt-musl-thread-stacksize.patch    |   26 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/patches/sandbox-membarrier.patch  |   60 +
 srcpkgs/qt5/template                          |  119 +-
 42 files changed, 298 insertions(+), 3073 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/arm-void-is-not-android.patch
 rename srcpkgs/qt5/patches/{0005-musl-no-execinfo.patch => qt-musl-execinfo.patch} (56%)
 create mode 100644 srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-chromium-ppc64.patch
 delete mode 100644 srcpkgs/qt5/patches/qtwebengine-enable-ppc64.patch
 create mode 100644 srcpkgs/qt5/patches/sandbox-membarrier.patch

diff --git a/common/shlibs b/common/shlibs
index 75431657f20..1c0bda7aff0 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/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/arm-void-is-not-android.patch
new file mode 100644
index 00000000000..b13290d3ccd
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/libressl-const-bio.patch
index f3493862cd4..d3a1fe96c53 100644
--- a/srcpkgs/qt5/patches/libressl-const-bio.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-execinfo.patch
similarity index 56%
rename from srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
rename to srcpkgs/qt5/patches/qt-musl-execinfo.patch
index 615177ba16e..98f3a38745a 100644
--- a/srcpkgs/qt5/patches/0005-musl-no-execinfo.patch
+++ b/srcpkgs/qt5/patches/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/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
new file mode 100644
index 00000000000..496753bef30
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/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 = &regs;
-@@ -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/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/sandbox-membarrier.patch
new file mode 100644
index 00000000000..b73971f2432
--- /dev/null
+++ b/srcpkgs/qt5/patches/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/template b/srcpkgs/qt5/template
index bfd8712e7af..24922003c0a 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,20 +10,20 @@ 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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}"
@@ -1115,7 +1112,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 da8dd5469aa37ea6818e7b838b2d1db7a7b9efde Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/8] 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 b5a75d43540b897a8f0434a233c65f02e0488b90 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/8] 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 de301380f18742863175b99d548fa28766b71b0d Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/8] 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 51f38f243252e01d48fb4eee433450064c711a48 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/8] qtcreator: remove deprecated qt5-cavnas3d dep

---
 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

From 1a44c7bca658e74c66480473e9bc2cf7bc895c09 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 15:20:29 +0200
Subject: [PATCH 6/8] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 24922003c0a..5f505914022 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1052,7 +1052,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 [ -e ${DESTDIR}/usr/bin/${f}-qt5 ]; then
 				vmove usr/bin/${f}-qt5
 			else
 				ln -sf ../lib/qt5/bin/${f} ${PKGDESTDIR}/usr/bin/${f}-qt5

From 47c9e58ca779ab0e81af8ed22136d8026a3c6d97 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 17:12:35 +0200
Subject: [PATCH 7/8] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/patches/0041-libressl.patch | 11 +++++++++++
 1 file changed, 11 insertions(+)
 create mode 100644 srcpkgs/qt5/patches/0041-libressl.patch

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) {

From 0d3aa40c8cab911957bf0ad29a11c1f80897e3d7 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 19 Jun 2019 17:15:39 +0200
Subject: [PATCH 8/8] fixup! qt5: update to 5.13.0

---
 ...id-is-not-android.patch => 0042-arm-void-is-not-android.patch} | 0
 .../{libressl-const-bio.patch => 0043-libressl-const-bio.patch}   | 0
 .../{qt-musl-execinfo.patch => 0044-qt-musl-execinfo.patch}       | 0
 ...thread-stacksize.patch => 0045-qt-musl-thread-stacksize.patch} | 0
 .../{sandbox-membarrier.patch => 0046-sandbox-membarrier.patch}   | 0
 5 files changed, 0 insertions(+), 0 deletions(-)
 rename srcpkgs/qt5/patches/{arm-void-is-not-android.patch => 0042-arm-void-is-not-android.patch} (100%)
 rename srcpkgs/qt5/patches/{libressl-const-bio.patch => 0043-libressl-const-bio.patch} (100%)
 rename srcpkgs/qt5/patches/{qt-musl-execinfo.patch => 0044-qt-musl-execinfo.patch} (100%)
 rename srcpkgs/qt5/patches/{qt-musl-thread-stacksize.patch => 0045-qt-musl-thread-stacksize.patch} (100%)
 rename srcpkgs/qt5/patches/{sandbox-membarrier.patch => 0046-sandbox-membarrier.patch} (100%)

diff --git a/srcpkgs/qt5/patches/arm-void-is-not-android.patch b/srcpkgs/qt5/patches/0042-arm-void-is-not-android.patch
similarity index 100%
rename from srcpkgs/qt5/patches/arm-void-is-not-android.patch
rename to srcpkgs/qt5/patches/0042-arm-void-is-not-android.patch
diff --git a/srcpkgs/qt5/patches/libressl-const-bio.patch b/srcpkgs/qt5/patches/0043-libressl-const-bio.patch
similarity index 100%
rename from srcpkgs/qt5/patches/libressl-const-bio.patch
rename to srcpkgs/qt5/patches/0043-libressl-const-bio.patch
diff --git a/srcpkgs/qt5/patches/qt-musl-execinfo.patch b/srcpkgs/qt5/patches/0044-qt-musl-execinfo.patch
similarity index 100%
rename from srcpkgs/qt5/patches/qt-musl-execinfo.patch
rename to srcpkgs/qt5/patches/0044-qt-musl-execinfo.patch
diff --git a/srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch b/srcpkgs/qt5/patches/0045-qt-musl-thread-stacksize.patch
similarity index 100%
rename from srcpkgs/qt5/patches/qt-musl-thread-stacksize.patch
rename to srcpkgs/qt5/patches/0045-qt-musl-thread-stacksize.patch
diff --git a/srcpkgs/qt5/patches/sandbox-membarrier.patch b/srcpkgs/qt5/patches/0046-sandbox-membarrier.patch
similarity index 100%
rename from srcpkgs/qt5/patches/sandbox-membarrier.patch
rename to srcpkgs/qt5/patches/0046-sandbox-membarrier.patch

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (8 preceding siblings ...)
  2019-06-19 15:15 ` voidlinux-github
@ 2019-06-19 16:13 ` voidlinux-github
  2019-06-19 16:54 ` voidlinux-github
                   ` (38 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19 16:13 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 297 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-503628194
Comment:
```
qt5-host-tools and qt5-tools conflict for
/usr/bin/lconvert-qt5
/usr/bin/lrelease-qt5
/usr/bin/lupdate-qt5
```
These still need to be resolved.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (9 preceding siblings ...)
  2019-06-19 16:13 ` voidlinux-github
@ 2019-06-19 16:54 ` voidlinux-github
  2019-06-19 22:30 ` voidlinux-github
                   ` (37 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19 16:54 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 308 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-503643064
Comment:
Same problem in `qt5-tools_package()`:
```
if [ -e ${PKGDESTDIR}/usr/bin/${f}-qt5 ]; then
```

BTW I still did not find sufficient time to look closer at this PR.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (10 preceding siblings ...)
  2019-06-19 16:54 ` voidlinux-github
@ 2019-06-19 22:30 ` voidlinux-github
  2019-06-21 16:18 ` [PR PATCH] [Updated] " voidlinux-github
                   ` (36 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-19 22:30 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 258 bytes --]

New comment by q66 on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-503770402
Comment:
ppc64 and ppc64le patches here https://github.com/void-power/void-packages/commit/363859571a4b1ca9e2a3b7415928e4c7e015d48b

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (12 preceding siblings ...)
  2019-06-21 16:18 ` [PR PATCH] [Updated] " voidlinux-github
@ 2019-06-21 16:18 ` voidlinux-github
  2019-06-21 16:22 ` voidlinux-github
                   ` (34 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-21 16:18 UTC (permalink / raw)
  To: ml

[-- 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: 182110 bytes --]

From ee659f4d4df33572a6a0329f9a856745611fe8a6 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

---
 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 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/template                          |  123 +-
 43 files changed, 311 insertions(+), 3075 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
 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/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 = &regs;
-@@ -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..6ccebf884ad 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,20 +10,20 @@ 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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 +1052,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 +1101,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 +1112,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 c278d3d5eb36550adff958b32bdc6f668c797a5a 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 70238325984696ef1bdc79a450570645a8e8d34a 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 1013e701a210b6a1aff89c44c3639b33339c2f39 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 7350ff784c4970ef8ecc73a2ff5757f934385801 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

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (11 preceding siblings ...)
  2019-06-19 22:30 ` voidlinux-github
@ 2019-06-21 16:18 ` voidlinux-github
  2019-06-21 16:18 ` voidlinux-github
                   ` (35 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-21 16:18 UTC (permalink / raw)
  To: ml

[-- 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: 182110 bytes --]

From ee659f4d4df33572a6a0329f9a856745611fe8a6 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

---
 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 +
 .../patches/qtwebengine-chromium-ppc64.patch  | 2112 -----------------
 .../patches/qtwebengine-enable-ppc64.patch    |   41 -
 srcpkgs/qt5/template                          |  123 +-
 43 files changed, 311 insertions(+), 3075 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
 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/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 = &regs;
-@@ -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..6ccebf884ad 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,20 +10,20 @@ 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"
@@ -31,11 +31,12 @@ desc_option_webengine="Build Chromium-based WebEngine component"
 case "$XBPS_TARGET_MACHINE" in
 	x86_64*|i686*|ppc64le*) 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
+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 +52,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 +62,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 +73,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 +82,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 +111,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" \;
@@ -285,8 +262,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 +283,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 +316,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 +350,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 +371,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 +417,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 +538,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 +566,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 +647,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 +1052,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 +1101,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 +1112,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 c278d3d5eb36550adff958b32bdc6f668c797a5a 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 70238325984696ef1bdc79a450570645a8e8d34a 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 1013e701a210b6a1aff89c44c3639b33339c2f39 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 7350ff784c4970ef8ecc73a2ff5757f934385801 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

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (13 preceding siblings ...)
  2019-06-21 16:18 ` voidlinux-github
@ 2019-06-21 16:22 ` voidlinux-github
  2019-06-21 16:22 ` voidlinux-github
                   ` (33 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-21 16:22 UTC (permalink / raw)
  To: ml

[-- 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 = &regs;
+@@ -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 = &regs;
-@@ -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

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (14 preceding siblings ...)
  2019-06-21 16:22 ` voidlinux-github
@ 2019-06-21 16:22 ` voidlinux-github
  2019-06-24 23:10 ` voidlinux-github
                   ` (32 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-21 16:22 UTC (permalink / raw)
  To: ml

[-- 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 = &regs;
+@@ -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 = &regs;
-@@ -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

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (16 preceding siblings ...)
  2019-06-24 23:10 ` voidlinux-github
@ 2019-06-24 23:10 ` voidlinux-github
  2019-06-29  2:44 ` voidlinux-github
                   ` (30 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-24 23:10 UTC (permalink / raw)
  To: ml

[-- 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: 488183 bytes --]

From 9ad00dd879ae1fe0a1a9a46aeeb7be981bf7ee8c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/7] 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                          |  137 +-
 50 files changed, 7805 insertions(+), 3077 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..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=8
+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}"
@@ -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 d79968e536f94a33b0497b0988b0757db8d8e068 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/7] 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 c84ecde72fa736ae33e2e386f93f3e519b2d52df Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/7] 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 179dd01ab6682b9094dedc30972aeba0cb74267c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/7] 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 83624f3ea996cac6a046360ac68292c544042d89 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/7] 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

From 33705c491c2d85f48d6e0e1d12c0c0fadc7ddc4a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 24 Jun 2019 18:30:31 +0200
Subject: [PATCH 6/7] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 565d7f59544..d5c26eef6b5 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -125,7 +125,8 @@ _cleanup_wrksrc_leak() {
 	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%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \;
+		-e "s%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \
+		-e 's%$$[QT_INSTALL_LIBS]/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

From b1a5d8bce2196c2c2bf01f51099b53cec59453ca Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 25 Jun 2019 01:07:53 +0200
Subject: [PATCH 7/7] fixup! qt5: update to 5.13.0

[ci skip]
---
 srcpkgs/qt5/template | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index d5c26eef6b5..0cce04f7e26 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -124,11 +124,7 @@ _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%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \
-		-e 's%$$[QT_INSTALL_LIBS]/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" \;
+		-e "s;-L${wrksrc}/qtbase/lib;-L/usr/lib;g" \;
 	# Replace ${wrksrc} in project include files
 	find ${PKGDESTDIR} -iname "*.pri" -exec sed -i "{}" \
 		-e "s;${wrksrc}/qtbase;/usr/lib/qt5;g" \;
@@ -273,7 +269,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
 

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (15 preceding siblings ...)
  2019-06-21 16:22 ` voidlinux-github
@ 2019-06-24 23:10 ` voidlinux-github
  2019-06-24 23:10 ` voidlinux-github
                   ` (31 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-24 23:10 UTC (permalink / raw)
  To: ml

[-- 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: 488183 bytes --]

From 9ad00dd879ae1fe0a1a9a46aeeb7be981bf7ee8c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/7] 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                          |  137 +-
 50 files changed, 7805 insertions(+), 3077 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..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=8
+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}"
@@ -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 d79968e536f94a33b0497b0988b0757db8d8e068 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/7] 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 c84ecde72fa736ae33e2e386f93f3e519b2d52df Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/7] 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 179dd01ab6682b9094dedc30972aeba0cb74267c Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/7] 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 83624f3ea996cac6a046360ac68292c544042d89 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/7] 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

From 33705c491c2d85f48d6e0e1d12c0c0fadc7ddc4a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 24 Jun 2019 18:30:31 +0200
Subject: [PATCH 6/7] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 565d7f59544..d5c26eef6b5 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -125,7 +125,8 @@ _cleanup_wrksrc_leak() {
 	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%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \;
+		-e "s%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \
+		-e 's%$$[QT_INSTALL_LIBS]/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

From b1a5d8bce2196c2c2bf01f51099b53cec59453ca Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 25 Jun 2019 01:07:53 +0200
Subject: [PATCH 7/7] fixup! qt5: update to 5.13.0

[ci skip]
---
 srcpkgs/qt5/template | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index d5c26eef6b5..0cce04f7e26 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -124,11 +124,7 @@ _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%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \
-		-e 's%$$[QT_INSTALL_LIBS]/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" \;
+		-e "s;-L${wrksrc}/qtbase/lib;-L/usr/lib;g" \;
 	# Replace ${wrksrc} in project include files
 	find ${PKGDESTDIR} -iname "*.pri" -exec sed -i "{}" \
 		-e "s;${wrksrc}/qtbase;/usr/lib/qt5;g" \;
@@ -273,7 +269,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
 

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (17 preceding siblings ...)
  2019-06-24 23:10 ` voidlinux-github
@ 2019-06-29  2:44 ` voidlinux-github
  2019-06-29  2:44 ` voidlinux-github
                   ` (29 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-29  2:44 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1496 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-506920374
Comment:
@pullmoll Do you have an idea how we could fix our qmake build-style/qmake for cross compiling that wouldn't be a tremendous amount of work?

Longer version:
A qmake binary only ever supports one target and has things like `QT_SYSROOT` and `QT_INSTALL_LIBS` hardcoded in the resulting binary so they can't be overwritten at runtime by a config file or flag. There are only 4 options to solve this for Void visivle for me:

- Build qtbase two times for every cross target, once as cross packages as currently and a 2nd with the same config for the host and only grab qmake out of there (wastes a ton of ressources on the builder)
- Add a way for xbps-src to spill out a cross target package and a build arch package (probably quite complex, and would (at least currently) only be needed for qt)
- manually mess with the provided Makefile (probably the easiest way)
`make EXTRA_CXXFLAGS="-I/usr/include/qt5/QtCore/5.13.0/QtCore -I/usr/include/qt5/QtCore/5.13.0 -I/usr/include/qt5/QtCore -I/usr/include/qt5/ -DQMAKE_OPENSOURCE_VERSION" QT_MAJOR_VERSION=5 QT_MINOR_VERSION=13 QT_PATCH_VERSION=0 QT_VERSION=5.13.0 SOURCE_PATH=.. QMAKESPEC=/usr/lib/qt5/mkspecs/linux-aarch64-gnu-g++ BUILD_PATH=. RM_F="rm -rf" EXTRA_LFLAGS="-lQt5Bootstrap"  -f Makefile.unix` gives an unconfigured qmake
- Make the 107 packages that use the qmake build-style nocross

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (18 preceding siblings ...)
  2019-06-29  2:44 ` voidlinux-github
@ 2019-06-29  2:44 ` voidlinux-github
  2019-06-29  2:45 ` voidlinux-github
                   ` (28 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-29  2:44 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1500 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-506920374
Comment:
@pullmoll Do you have an idea how we could fix our qmake build-style/qmake for cross compiling that wouldn't be a tremendous amount of work?

Longer version:
A qmake binary only ever supports one target and has things like `QT_SYSROOT` and `QT_INSTALL_LIBS` hardcoded in the resulting binary so they can't be overwritten at runtime by a config file or flag. There are only 4 options to solve this for Void visivle for me:

- Build qtbase two times for every cross target, once as cross packages as currently and a 2nd with the same config for the host and only grab qmake out of there (wastes a ton of ressources on the builder)
- Add a way for xbps-src to spill out a cross target package and a build arch package (probably quite complex, and would (at least currently) only be needed for qt)
- manually mess with the provided Makefile (probably the easiest way)
```make EXTRA_CXXFLAGS="-I/usr/include/qt5/QtCore/5.13.0/QtCore -I/usr/include/qt5/QtCore/5.13.0 -I/usr/include/qt5/QtCore -I/usr/include/qt5/ -DQMAKE_OPENSOURCE_VERSION" QT_MAJOR_VERSION=5 QT_MINOR_VERSION=13 QT_PATCH_VERSION=0 QT_VERSION=5.13.0 SOURCE_PATH=.. QMAKESPEC=/usr/lib/qt5/mkspecs/linux-aarch64-gnu-g++ BUILD_PATH=. RM_F="rm -rf" EXTRA_LFLAGS="-lQt5Bootstrap"  -f Makefile.unix``` gives an unconfigured qmake
- Make the 107 packages that use the qmake build-style nocross

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (19 preceding siblings ...)
  2019-06-29  2:44 ` voidlinux-github
@ 2019-06-29  2:45 ` voidlinux-github
  2019-06-29  2:45 ` voidlinux-github
                   ` (27 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-29  2:45 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1501 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-506920374
Comment:
@pullmoll Do you have an idea how we could fix our qmake build-style/qmake for cross compiling that wouldn't be a tremendous amount of work?

Longer version:
A qmake binary only ever supports one target and has things like `QT_SYSROOT` and `QT_INSTALL_LIBS` hardcoded in the resulting binary so they can't be overwritten at runtime by a config file or flag. There are only 4 options to solve this for Void visivle for me:

- Build qtbase two times for every cross target, once as cross packages as currently and a 2nd with the same config for the host and only grab qmake out of there (wastes a ton of ressources on the builder)
- Add a way for xbps-src to spill out a cross target package and a build arch package (probably quite complex, and would (at least currently) only be needed for qt)
- manually mess with the provided Makefile (probably the easiest way)
```make EXTRA_CXXFLAGS="-I/usr/include/qt5/QtCore/5.13.0/QtCore -I/usr/include/qt5/QtCore/5.13.0 -I/usr/include/qt5/QtCore -I/usr/include/qt5/ -DQMAKE_OPENSOURCE_VERSION" QT_MAJOR_VERSION=5 QT_MINOR_VERSION=13 QT_PATCH_VERSION=0 QT_VERSION=5.13.0 SOURCE_PATH=.. QMAKESPEC=/usr/lib/qt5/mkspecs/linux-aarch64-gnu-g++ BUILD_PATH=. RM_F="rm -rf" EXTRA_LFLAGS="-lQt5Bootstrap"  -f Makefile.unix```
gives an unconfigured qmake
- Make the 107 packages that use the qmake build-style nocross

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (20 preceding siblings ...)
  2019-06-29  2:45 ` voidlinux-github
@ 2019-06-29  2:45 ` voidlinux-github
  2019-06-29  5:35 ` voidlinux-github
                   ` (26 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-29  2:45 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1505 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-506920374
Comment:
@pullmoll Do you have an idea how we could fix our qmake build-style/qmake for cross compiling that wouldn't be a tremendous amount of work?

Longer version:
A qmake binary only ever supports one target and has things like `QT_SYSROOT` and `QT_INSTALL_LIBS` hardcoded in the resulting binary so they can't be overwritten at runtime by a config file or flag. There are only 4 options to solve this for Void visivle for me:

- Build qtbase two times for every cross target, once as cross packages as currently and a 2nd with the same config for the host and only grab qmake out of there (wastes a ton of ressources on the builder)
- Add a way for xbps-src to spill out a cross target package and a build arch package (probably quite complex, and would (at least currently) only be needed for qt)
- manually mess with the provided Makefile (probably the easiest way)
```
make EXTRA_CXXFLAGS="-I/usr/include/qt5/QtCore/5.13.0/QtCore -I/usr/include/qt5/QtCore/5.13.0 -I/usr/include/qt5/QtCore -I/usr/include/qt5/ -DQMAKE_OPENSOURCE_VERSION" QT_MAJOR_VERSION=5 QT_MINOR_VERSION=13 QT_PATCH_VERSION=0 QT_VERSION=5.13.0 SOURCE_PATH=.. QMAKESPEC=/usr/lib/qt5/mkspecs/linux-aarch64-gnu-g++ BUILD_PATH=. RM_F="rm -rf" EXTRA_LFLAGS="-lQt5Bootstrap"  -f Makefile.unix
```
gives an unconfigured qmake
- Make the 107 packages that use the qmake build-style nocross

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (21 preceding siblings ...)
  2019-06-29  2:45 ` voidlinux-github
@ 2019-06-29  5:35 ` voidlinux-github
  2019-06-29  5:36 ` voidlinux-github
                   ` (25 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-29  5:35 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 873 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-506928888
Comment:
I know what you mean. The qmake build style is so ugly because of the host's qmake using the hard coded paths. 

How about we modify qmake to respect some of our XBPS_* environment variables, enabled only if some XBPS_QMAKE_MAGIC is defined, and then override its currently hard coded values? If not enabled, qmake would act just like it does now for the regular user, i.e. as a host tool. Otherwise it would accept the build environment's sysroot etc. settings and look for the cross qt5 headers etc. where they are.

To devise such a patch cannot be too hard, and the code to modify is most probably all in a single source file anyway.

I will take a look at qmake's source to see where we can possibly hack it for our case.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (22 preceding siblings ...)
  2019-06-29  5:35 ` voidlinux-github
@ 2019-06-29  5:36 ` voidlinux-github
  2019-06-29  5:45 ` voidlinux-github
                   ` (24 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-29  5:36 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1707 bytes --]

New comment by newbluemoon on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-506928917
Comment:
@Johnnynator  did you try with a `qt.conf` file? See [https://doc.qt.io/qt-5/qt-conf.html](https://doc.qt.io/qt-5/qt-conf.html):

> The qt.conf file can be used to override the hard-coded paths that are compiled into the Qt library. These paths are accessible using the QLibraryInfo class. Without qt.conf, the functions in QLibraryInfo return these hard-coded paths; otherwise they return the paths as specified in qt.conf.
>
> Without qt.conf, the Qt libraries will use the hard-coded paths to look for plugins, translations, and so on. These paths may not exist on the target system, or they may not be accessible. Because of this, you may need qt.conf to make the Qt libraries look elsewhere.

There was an issue in the old repository which sadly is gone now. I tried with this `qt.conf`:
```
[Paths]
Sysroot=
Prefix=/usr
ArchData=/usr/lib/qt5
Data=/usr/share/qt5
Documentation=/usr/share/doc/qt5
Headers=/usr/include/qt5
Libraries=/usr/lib
LibraryExecutables=/usr/lib/qt5/libexec
Binaries=/usr/lib/qt5/bin
Tests=/usr/tests
Plugins=/usr/lib/qt5/plugins
Imports=/usr/lib/qt5/imports
Qml2Imports=/usr/lib/qt5/qml
Translations=/usr/share/qt5/translations
Settings=/etc/xdg
Examples=/usr/share/qt5/examples
HostPrefix=/usr
HostData=/usr/lib/qt5
HostBinaries=/usr/lib/qt5/bin
HostLibraries=/usr/lib
Spec=linux-g++
TargetSpec=linux-g++
```
and think there also had to be made some modifications to `qconfig.pri` and `qmodule.pri`. But something didn’t work out and due to a lack of resources I didn’t pursue it any further.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (23 preceding siblings ...)
  2019-06-29  5:36 ` voidlinux-github
@ 2019-06-29  5:45 ` voidlinux-github
  2019-06-29  6:08 ` voidlinux-github
                   ` (23 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-29  5:45 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 383 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-506929511
Comment:
@newbluemoon in case this really works it should be the easiest way.
I remember I tried with a `qmake.conf` or `.qmake` file created in the build style and never got it working right - probably because it's `qt.conf` and not `qmake.conf` :-)

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (24 preceding siblings ...)
  2019-06-29  5:45 ` voidlinux-github
@ 2019-06-29  6:08 ` voidlinux-github
  2019-06-29 19:46 ` voidlinux-github
                   ` (22 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-29  6:08 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 976 bytes --]

New comment by newbluemoon on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-506930877
Comment:
@pullmoll this would surely be an explanation. ;)

Maybe you remember this issue: I tried to compile some qt5 program natively on my RPi and ran into an issue where the modules in `/usr/lib/qt5/mkspecs/modules/*.pri` weren’t found. With the `qt.conf` from above (and some other minor adjustments) I was able to compile it; i.e. the right paths were used. However, I believe in the end the problem was that when the application used other qt5 modules besides the core it didn’t work because the required `*.pri` files weren’t available in the cross built devel package of the corresponding module. So there was an underlying problem we never got around to solve.

One more thing: the only way I was able to make `qmake` use the `qt.conf` was when both executable and configfile were residing in the same directory.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (25 preceding siblings ...)
  2019-06-29  6:08 ` voidlinux-github
@ 2019-06-29 19:46 ` voidlinux-github
  2019-06-30 10:06 ` voidlinux-github
                   ` (21 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-29 19:46 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 348 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-506982538
Comment:
@newbluemoon Can you take a look into this with qt5.13 ? I can't get it convinced to use the qt.conf and do what I want, but maybe i'm just missing something. I have my test repo linked in the first post.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (26 preceding siblings ...)
  2019-06-29 19:46 ` voidlinux-github
@ 2019-06-30 10:06 ` voidlinux-github
  2019-07-01 22:48 ` voidlinux-github
                   ` (20 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-06-30 10:06 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1832 bytes --]

New comment by newbluemoon on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-507023934
Comment:
I tried with the `fmit` package. The problem was that `qmake` hardcoded the required qt-libraries `fmit` is linked to in the `Makefile` when generating it with a full path (`/usr/lib/...`) which fails, of course, when cross-compiling.

The `qt.conf` has to be in `.../masterdir/usr/lib/qt5/bin/`. For now I just put it there manually. I used the one from above, just changed

    Libraries=/usr/lib

to

    Libraries=/usr/armv7l-linux-musleabihf/usr/lib

and that worked. `qmake` used the right paths in the generated `Makefile` and the package was built successfully. Just haven’t tested it on my RPi, but don’t think there will be a problem.

It would be nice to do the same for the includes so that the required qt-modules don’t have to be added to `hostmakedepends` in the cross-case anymore, but the required `*.pri` files in `/usr/lib/qt5/mkspecs/modules/` are still missing in the cross-devel-packages. The same persisting problem I mentioned above. But we will find a solution one day! ;)

Perhaps it’s best to generate `qt.conf` in the build-style and insert the corresponding target architecture there. Then after the build remove the file.

A sidenote: You can check if `qmake` uses `qt.conf` when you `xbps-src chroot` into the masterdir and run `qmake -query`. The modified values should be displayed.

However, I also tested `zrandr` and there was a problem with `lrelease`. But this could be an entirely different problem. I’ll look into it.

Also, I think it might be a good idea to check all qmake-style packages if other problems arise or if changing that path leads to new ones. Anyway, I’ll try to check some more. :)

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (27 preceding siblings ...)
  2019-06-30 10:06 ` voidlinux-github
@ 2019-07-01 22:48 ` voidlinux-github
  2019-07-01 22:54 ` [PR PATCH] [Updated] " voidlinux-github
                   ` (19 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-01 22:48 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 332 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-507452682
Comment:
Thanks @newbluemoon zrandr is probably unrelated to cross compiling and an oversight from my site, I tested this PR with a ton of cmake Projects (mainly KDE stuff) but nearly no qmake one.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (29 preceding siblings ...)
  2019-07-01 22:54 ` [PR PATCH] [Updated] " voidlinux-github
@ 2019-07-01 22:54 ` voidlinux-github
  2019-07-02  0:53 ` voidlinux-github
                   ` (17 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-01 22:54 UTC (permalink / raw)
  To: ml

[-- 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: 492077 bytes --]

From 27ab90573a8741f9038de509b25d789e903d66a1 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/9] 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                          |  137 +-
 50 files changed, 7805 insertions(+), 3077 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 22c315708e6..61f27f19af9 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..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=8
+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}"
@@ -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 2685b7c18a242dd27ffd40913c26359f1ada9d9f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/9] 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 52be66c65a47670f4fbff0df606f97f30f39cada Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/9] 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 53e3eab8354..7efad4a68c9 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 421de206f503b2d2a3248aead70276a5ea8fa644 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/9] 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 5408ad08da0be2ddb4fe2e16f3a6827deed77c63 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/9] 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 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 654d47b63ff21963f065243767223bb49528e0b7 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 24 Jun 2019 18:30:31 +0200
Subject: [PATCH 6/9] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 565d7f59544..d5c26eef6b5 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -125,7 +125,8 @@ _cleanup_wrksrc_leak() {
 	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%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \;
+		-e "s%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \
+		-e 's%$$[QT_INSTALL_LIBS]/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

From 36418139364724dda44ca7d19a6f3edf4025c4c3 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 25 Jun 2019 01:07:53 +0200
Subject: [PATCH 7/9] fixup! qt5: update to 5.13.0

[ci skip]
---
 srcpkgs/qt5/template | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index d5c26eef6b5..0cce04f7e26 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -124,11 +124,7 @@ _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%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \
-		-e 's%$$[QT_INSTALL_LIBS]/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" \;
+		-e "s;-L${wrksrc}/qtbase/lib;-L/usr/lib;g" \;
 	# Replace ${wrksrc} in project include files
 	find ${PKGDESTDIR} -iname "*.pri" -exec sed -i "{}" \
 		-e "s;${wrksrc}/qtbase;/usr/lib/qt5;g" \;
@@ -273,7 +269,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
 

From 7e2b20c4f6f911c1e7f24d3535d548ff4f5a2a1c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:51:05 +0200
Subject: [PATCH 8/9] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 0cce04f7e26..3a6377e94e9 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -496,7 +496,9 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -1049,7 +1051,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1103,7 +1105,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/

From 67bcb1a5ec8e7f1e152e6fbd83a720e6077bf68f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 9/9] New package: qt5-qmake-aarch64-config-1

[ci skip]
---
 common/environment/build-style/qmake.sh   |  3 ++
 srcpkgs/qt5-qmake-aarch64-config/template | 44 +++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 common/environment/build-style/qmake.sh
 create mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
new file mode 100644
index 00000000000..f884ed13ded
--- /dev/null
+++ b/common/environment/build-style/qmake.sh
@@ -0,0 +1,3 @@
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
+fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
new file mode 100644
index 00000000000..6b6b438e0eb
--- /dev/null
+++ b/srcpkgs/qt5-qmake-aarch64-config/template
@@ -0,0 +1,44 @@
+# Template file for 'qt5-qmake-aarch64-config'
+pkgname=qt5-qmake-aarch64-config
+version=1
+revision=1
+only_for_archs="noarch"
+build_style=meta
+short_desc="Qmake cross config files"
+maintainer="John <johnz@posteo.net>"
+license="GPL-3.0-or-later"
+homepage="https://qt.io"
+
+_create_config() {
+	local _arch=$1
+	vmkdir usr/lib/qt5/bin
+	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
+[Paths]
+Sysroot=/usr/$_arch
+Prefix=/usr
+ArchData=/usr/$_arch/usr/lib/qt5
+Data=/usr/$_arch/usr/share/qt5
+Documentation=/usr/$_arch/usr/share/doc/qt5
+Headers=/usr/$_arch/usr/include/qt5
+Libraries=/usr/$_arch/usr/lib
+LibraryExecutables=/usr/$_arch/usr/lib/qt5/libexec
+Binaries=/usr/$_arch/usr/lib/qt5/bin
+Tests=/usr/$_arch/usr/tests
+Plugins=/usr/$_arch/usr/lib/qt5/plugins
+Imports=/usr/$_arch/usr/lib/qt5/imports
+Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
+Translations=/usr/$_arch/usr/share/qt5/translations
+Settings=/usr/$_arch/etc/xdg
+Examples=/usr/$_arch/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+}
+
+do_install() {
+	_create_config aarch64-linux-gnu
+}

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (28 preceding siblings ...)
  2019-07-01 22:48 ` voidlinux-github
@ 2019-07-01 22:54 ` voidlinux-github
  2019-07-01 22:54 ` voidlinux-github
                   ` (18 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-01 22:54 UTC (permalink / raw)
  To: ml

[-- 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: 492077 bytes --]

From 27ab90573a8741f9038de509b25d789e903d66a1 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 1/9] 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                          |  137 +-
 50 files changed, 7805 insertions(+), 3077 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 22c315708e6..61f27f19af9 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..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=8
+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}"
@@ -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 2685b7c18a242dd27ffd40913c26359f1ada9d9f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 2/9] 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 52be66c65a47670f4fbff0df606f97f30f39cada Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 3/9] 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 53e3eab8354..7efad4a68c9 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 421de206f503b2d2a3248aead70276a5ea8fa644 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 4/9] 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 5408ad08da0be2ddb4fe2e16f3a6827deed77c63 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 5/9] 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 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 654d47b63ff21963f065243767223bb49528e0b7 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 24 Jun 2019 18:30:31 +0200
Subject: [PATCH 6/9] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 565d7f59544..d5c26eef6b5 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -125,7 +125,8 @@ _cleanup_wrksrc_leak() {
 	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%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \;
+		-e "s%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \
+		-e 's%$$[QT_INSTALL_LIBS]/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

From 36418139364724dda44ca7d19a6f3edf4025c4c3 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 25 Jun 2019 01:07:53 +0200
Subject: [PATCH 7/9] fixup! qt5: update to 5.13.0

[ci skip]
---
 srcpkgs/qt5/template | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index d5c26eef6b5..0cce04f7e26 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -124,11 +124,7 @@ _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%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g" \
-		-e 's%$$[QT_INSTALL_LIBS]/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" \;
+		-e "s;-L${wrksrc}/qtbase/lib;-L/usr/lib;g" \;
 	# Replace ${wrksrc} in project include files
 	find ${PKGDESTDIR} -iname "*.pri" -exec sed -i "{}" \
 		-e "s;${wrksrc}/qtbase;/usr/lib/qt5;g" \;
@@ -273,7 +269,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
 

From 7e2b20c4f6f911c1e7f24d3535d548ff4f5a2a1c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:51:05 +0200
Subject: [PATCH 8/9] fixup! qt5: update to 5.13.0

---
 srcpkgs/qt5/template | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qt5/template b/srcpkgs/qt5/template
index 0cce04f7e26..3a6377e94e9 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -496,7 +496,9 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -1049,7 +1051,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1103,7 +1105,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/

From 67bcb1a5ec8e7f1e152e6fbd83a720e6077bf68f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 9/9] New package: qt5-qmake-aarch64-config-1

[ci skip]
---
 common/environment/build-style/qmake.sh   |  3 ++
 srcpkgs/qt5-qmake-aarch64-config/template | 44 +++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 common/environment/build-style/qmake.sh
 create mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
new file mode 100644
index 00000000000..f884ed13ded
--- /dev/null
+++ b/common/environment/build-style/qmake.sh
@@ -0,0 +1,3 @@
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
+fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
new file mode 100644
index 00000000000..6b6b438e0eb
--- /dev/null
+++ b/srcpkgs/qt5-qmake-aarch64-config/template
@@ -0,0 +1,44 @@
+# Template file for 'qt5-qmake-aarch64-config'
+pkgname=qt5-qmake-aarch64-config
+version=1
+revision=1
+only_for_archs="noarch"
+build_style=meta
+short_desc="Qmake cross config files"
+maintainer="John <johnz@posteo.net>"
+license="GPL-3.0-or-later"
+homepage="https://qt.io"
+
+_create_config() {
+	local _arch=$1
+	vmkdir usr/lib/qt5/bin
+	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
+[Paths]
+Sysroot=/usr/$_arch
+Prefix=/usr
+ArchData=/usr/$_arch/usr/lib/qt5
+Data=/usr/$_arch/usr/share/qt5
+Documentation=/usr/$_arch/usr/share/doc/qt5
+Headers=/usr/$_arch/usr/include/qt5
+Libraries=/usr/$_arch/usr/lib
+LibraryExecutables=/usr/$_arch/usr/lib/qt5/libexec
+Binaries=/usr/$_arch/usr/lib/qt5/bin
+Tests=/usr/$_arch/usr/tests
+Plugins=/usr/$_arch/usr/lib/qt5/plugins
+Imports=/usr/$_arch/usr/lib/qt5/imports
+Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
+Translations=/usr/$_arch/usr/share/qt5/translations
+Settings=/usr/$_arch/etc/xdg
+Examples=/usr/$_arch/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+}
+
+do_install() {
+	_create_config aarch64-linux-gnu
+}

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (30 preceding siblings ...)
  2019-07-01 22:54 ` voidlinux-github
@ 2019-07-02  0:53 ` voidlinux-github
  2019-07-02  5:52 ` voidlinux-github
                   ` (16 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-02  0:53 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 285 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-507476319
Comment:
Mh... with this config qmake still uses the the host .pri files which have the full path to non qt libs hardcoded. Will look into it tomorrow

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (31 preceding siblings ...)
  2019-07-02  0:53 ` voidlinux-github
@ 2019-07-02  5:52 ` voidlinux-github
  2019-07-06 20:01 ` [PR PATCH] [Updated] " voidlinux-github
                   ` (15 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-02  5:52 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 875 bytes --]

New comment by newbluemoon on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-507529153
Comment:
Yes, what I did above just fixes the linking errors.

Do you mean the .pri files in `/usr/lib/qt5/mkspecs/modules`? As far as I can see there are

- qt_lib_multimedia_private.pri
- qt_lib_core_private.pri
- qt_lib_widgets_private.pri
- qt_lib_gui_private.pri
- probably a few more

which use `QMAKE_INCDIR_*` with hardcoded paths to some includes. But it’s the same situation as with 5.11 right now.

Maybe it’s possible to override these variables in `qt.conf`, too, and prepend the cross base (like e.g. read all the paths specified in the variable, prepend the cross base, and set the modified paths). However, `qt.conf` might use different variable names. Or just use brute force and `sed` the cross base?

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (33 preceding siblings ...)
  2019-07-06 20:01 ` [PR PATCH] [Updated] " voidlinux-github
@ 2019-07-06 20:01 ` voidlinux-github
  2019-07-06 20:19 ` voidlinux-github
                   ` (13 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-06 20:01 UTC (permalink / raw)
  To: ml

[-- 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: 508868 bytes --]

From 9d82984818aafe3503853a1ef2a2a0df0c6eb895 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 01/17] 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                          |  139 +-
 50 files changed, 7807 insertions(+), 3077 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 5b1d9bf5a73..e57e39714dd 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..c84898296eb 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=8
+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
@@ -253,9 +240,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,7 +269,6 @@ 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
 			_bootstrap_gn
 		fi
@@ -307,6 +290,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 +323,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 +357,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 +378,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 +424,6 @@ do_install() {
 	cd ${wrksrc}/qtbase
 	make INSTALL_ROOT=${DESTDIR} install
 
-	vlicense ${wrksrc}/LGPL_EXCEPTION.txt
 	_cleanup_wrksrc_leak
 
 	# Symbolic links for remaining binaries
@@ -498,7 +496,10 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
+		dirs+=" qttools/src/linguist/lprodump"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -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}"
@@ -1045,7 +1052,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1099,7 +1106,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
@@ -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"
@@ -1175,6 +1182,8 @@ qt5-qmake_package() {
 		# Change -isystem to -I to avoid "#include_next <stdlib.h>" errors
 		sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \
 			-e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;'
+		find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
+			-e 's%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g' \;
 
 		# Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf
 		if [ "$CROSS_BUILD" ]; then

From 7382280fa68360f9135a42162f4c498f0bae7525 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 02/17] 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 4e5d2a6e895c56c146d3900b939f99ebfa527be1 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 03/17] 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 53e3eab8354..7efad4a68c9 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 df92aec2e2784d8279e06f4949a3239955462bac Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 04/17] 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 e5c305bd801621230388aa9ea2e69ae2a782122c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 05/17] 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 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 867b43a27737b8a436895a8e7ed415fe29f7ad3a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 06/17] New package: qt5-qmake-aarch64-config-1

[ci skip]
---
 common/environment/build-style/qmake.sh   |  3 ++
 srcpkgs/qt5-qmake-aarch64-config/template | 44 +++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 common/environment/build-style/qmake.sh
 create mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
new file mode 100644
index 00000000000..f884ed13ded
--- /dev/null
+++ b/common/environment/build-style/qmake.sh
@@ -0,0 +1,3 @@
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
+fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
new file mode 100644
index 00000000000..ba235c9615f
--- /dev/null
+++ b/srcpkgs/qt5-qmake-aarch64-config/template
@@ -0,0 +1,44 @@
+# Template file for 'qt5-qmake-aarch64-config'
+pkgname=qt5-qmake-aarch64-config
+version=1
+revision=1
+only_for_archs="noarch"
+build_style=meta
+short_desc="Qmake cross config files"
+maintainer="John <johnz@posteo.net>"
+license="GPL-3.0-or-later"
+homepage="https://qt.io"
+
+_create_config() {
+	local _arch=$1
+	vmkdir usr/lib/qt5/bin
+	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
+[Paths]
+Sysroot=/usr/$_arch
+Prefix=/usr/$_arch/usr
+ArchData=/usr/$_arch/usr/lib/qt5
+Data=/usr/$_arch/usr/share/qt5
+Documentation=/usr/$_arch/usr/share/doc/qt5
+Headers=/usr/$_arch/usr/include/qt5
+Libraries=/usr/$_arch/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=/usr/$_arch/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=/usr/$_arch/usr/lib/qt5/imports
+Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
+Translations=/usr/$_arch/usr/share/qt5/translations
+Settings=/usr/$_arch/etc/xdg
+Examples=/usr/$_arch/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+}
+
+do_install() {
+	_create_config aarch64-linux-gnu
+}

From e3649cf5e9a5cfbedd96d03baabff1167354db38 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 18:19:17 +0200
Subject: [PATCH 07/17] merkaartor: fix build with qt5.13

---
 srcpkgs/merkaartor/patches/qt5.13.patch | 11 +++++++++++
 srcpkgs/merkaartor/template             |  8 ++------
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 srcpkgs/merkaartor/patches/qt5.13.patch

diff --git a/srcpkgs/merkaartor/patches/qt5.13.patch b/srcpkgs/merkaartor/patches/qt5.13.patch
new file mode 100644
index 00000000000..7fa4f4e27a9
--- /dev/null
+++ b/srcpkgs/merkaartor/patches/qt5.13.patch
@@ -0,0 +1,11 @@
+--- src/Layers/LicenseDisplayDialog.ui	2016-09-06 00:29:45.000000000 +0200
++++ -	2019-07-06 21:20:05.476017057 +0200
+@@ -43,7 +43,7 @@
+   <customwidget>
+    <class>QWebView</class>
+    <extends>QWidget</extends>
+-   <header>QtWebKit/QWebView</header>
++   <header>QWebView</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template
index 3ee40185ab7..5e44f5f7cb1 100644
--- a/srcpkgs/merkaartor/template
+++ b/srcpkgs/merkaartor/template
@@ -4,7 +4,7 @@ version=0.18.3
 revision=9
 build_style=qmake
 configure_args="SYSTEM_QUAZIP=1 SYSTEM_QUAZIP_LDFLAGS=-lquazip5"
-hostmakedepends="qt5-qmake libgdal-tools"
+hostmakedepends="qt5-qmake libgdal-tools qt5-host-tools"
 makedepends="libgdal-devel proj-devel qt5-declarative-devel qt5-svg-devel
  qt5-tools-devel qt5-webkit-devel quazip-devel"
 short_desc="Openstreetmap map editor"
@@ -17,9 +17,5 @@ checksum=d6b3e4d982b2c7b82331bc5bc8d993d733c443250f02919c3c4dbd6924e6e947
 CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-host-tools qt5-svg-devel qt5-webkit-devel"
-	CXXFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/qt5"
-	for i in ${XBPS_CROSS_BASE}/usr/include/qt5/*; do
-		CXXFLAGS+=" -I$i"
-	done
+	hostmakedepends+=" qt5-svg-devel qt5-webkit-devel"
 fi

From 2844e802840d256d7027211d5aa6ec32846da392 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:00:38 +0200
Subject: [PATCH 08/17] cutemarked: add patch for qt5.13

---
 srcpkgs/cutemarked/patches/QAction.patch | 10 ++++++++++
 srcpkgs/cutemarked/template              |  4 ++++
 2 files changed, 14 insertions(+)
 create mode 100644 srcpkgs/cutemarked/patches/QAction.patch

diff --git a/srcpkgs/cutemarked/patches/QAction.patch b/srcpkgs/cutemarked/patches/QAction.patch
new file mode 100644
index 00000000000..abed5ad1d4f
--- /dev/null
+++ b/srcpkgs/cutemarked/patches/QAction.patch
@@ -0,0 +1,10 @@
+--- app/optionsdialog.cpp	2016-03-28 13:48:50.000000000 +0200
++++ -	2019-07-02 18:59:36.832374065 +0200
+@@ -17,6 +17,7 @@
+ #include "optionsdialog.h"
+ #include "ui_optionsdialog.h"
+ 
++#include <QAction>
+ #include <QFontComboBox>
+ #include <QItemEditorFactory>
+ #include <QKeySequence>
diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template
index 7d4cfcce17a..53997add9ef 100644
--- a/srcpkgs/cutemarked/template
+++ b/srcpkgs/cutemarked/template
@@ -15,6 +15,10 @@ homepage="http://cloose.github.io/CuteMarkEd/"
 distfiles="https://github.com/cloose/${pkgname}/archive/v${version}.tar.gz"
 checksum=78a41808c2f0452375810abdff76eeaaee012f8d1368a2b8772ec6b4d2ceeec8
 
+pre_build() {
+	lrelease app/app.pro
+}
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-devel qt5-webkit-devel"
 fi

From 9322e66a6ba14425205a84de6661d1d8615076d8 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:27:17 +0200
Subject: [PATCH 09/17] dtkwidget: rebuild against qt5.13

---
 srcpkgs/dtkwidget/patches/qt5.13.patch | 39 ++++++++++++++++++++++++++
 srcpkgs/dtkwidget/template             |  4 ++-
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/dtkwidget/patches/qt5.13.patch

diff --git a/srcpkgs/dtkwidget/patches/qt5.13.patch b/srcpkgs/dtkwidget/patches/qt5.13.patch
new file mode 100644
index 00000000000..a76621a3f3a
--- /dev/null
+++ b/srcpkgs/dtkwidget/patches/qt5.13.patch
@@ -0,0 +1,39 @@
+diff --git a/src/widgets/daboutdialog.cpp b/src/widgets/daboutdialog.cpp
+index 5c6ba91..a33fd94 100644
+--- src/widgets/daboutdialog.cpp
++++ src/widgets/daboutdialog.cpp
+@@ -575,6 +575,6 @@ void DAboutDialog::showEvent(QShowEvent *event)
+     }
+ }
+ 
+-#include "moc_daboutdialog.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_daboutdialog.cpp"
+diff --git a/src/widgets/dipv4lineedit.cpp b/src/widgets/dipv4lineedit.cpp
+index 4efe6e4..1cc68b4 100644
+--- src/widgets/dipv4lineedit.cpp
++++ src/widgets/dipv4lineedit.cpp
+@@ -530,6 +530,6 @@ bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
+     return DLineEdit::eventFilter(obj, e);
+ }
+ 
+-#include "moc_dipv4lineedit.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dipv4lineedit.cpp"
+diff --git a/src/widgets/dlistview.cpp b/src/widgets/dlistview.cpp
+index 0dcc244..523ebd5 100644
+--- src/widgets/dlistview.cpp
++++ src/widgets/dlistview.cpp
+@@ -709,6 +709,6 @@ bool DListView::edit(const QModelIndex &index, QAbstractItemView::EditTrigger tr
+     return tmp;
+ }
+ 
+-#include "moc_dlistview.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dlistview.cpp"
diff --git a/srcpkgs/dtkwidget/template b/srcpkgs/dtkwidget/template
index 7dc6547b2b7..6fbac916d9b 100644
--- a/srcpkgs/dtkwidget/template
+++ b/srcpkgs/dtkwidget/template
@@ -1,7 +1,7 @@
 # Template file for 'dtkwidget'
 pkgname=dtkwidget
 version=2.0.14
-revision=1
+revision=2
 build_style=qmake
 configure_args="DBUS_VERSION_0_4_2=YES LIB_INSTALL_DIR=/usr/lib VERSION=${version}"
 hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
@@ -21,6 +21,8 @@ if [ "$CROSS_BUILD" ]; then
 	qt5-svg-devel gsettings-qt-devel"
 fi
 
+nocross=yes
+
 dtkwidget-devel_package() {
 	depends="${sourcepkg}>=${version}_${revision} dtkcore-devel"
 	short_desc+=" - development files"

From 5a53964cbc2bfa892a87d71a2cacbb195f178eb2 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 21:43:18 +0200
Subject: [PATCH 10/17] goldendict: add patches for qt5.13

---
 srcpkgs/goldendict/patches/QAction.patch | 20 ++++++++++++++++++++
 srcpkgs/goldendict/patches/QIcon.patch   | 10 ++++++++++
 srcpkgs/goldendict/template              |  6 ++++--
 3 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/goldendict/patches/QAction.patch
 create mode 100644 srcpkgs/goldendict/patches/QIcon.patch

diff --git a/srcpkgs/goldendict/patches/QAction.patch b/srcpkgs/goldendict/patches/QAction.patch
new file mode 100644
index 00000000000..146fe34e2fa
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QAction.patch
@@ -0,0 +1,20 @@
+--- fulltextsearch.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:27:37.881036339 +0200
+@@ -1,6 +1,7 @@
+ #ifndef __FULLTEXTSEARCH_HH_INCLUDED__
+ #define __FULLTEXTSEARCH_HH_INCLUDED__
+ 
++#include <QAction>
+ #include <QSemaphore>
+ #include <QStringList>
+ #include <QRegExp>
+--- groups_widgets.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:31:52.350308868 +0200
+@@ -10,6 +10,7 @@
+ 
+ #include <QListWidget>
+ #include <QSortFilterProxyModel>
++#include <QAction>
+ 
+ #include "config.hh"
+ #include "dictionary.hh"
diff --git a/srcpkgs/goldendict/patches/QIcon.patch b/srcpkgs/goldendict/patches/QIcon.patch
new file mode 100644
index 00000000000..ea066d1946f
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QIcon.patch
@@ -0,0 +1,10 @@
+--- initializing.cc	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:26:19.088317401 +0200
+@@ -3,6 +3,7 @@
+ 
+ #include "initializing.hh"
+ #include <QCloseEvent>
++#include <QIcon>
+ 
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 )
+ #include <QtWidgets/QStyleFactory>
diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template
index de0918993c6..1d14c0bd5aa 100644
--- a/srcpkgs/goldendict/template
+++ b/srcpkgs/goldendict/template
@@ -4,18 +4,20 @@ version=1.5.0RC2
 revision=4
 wrksrc="${pkgname}-${version/RC/-RC}"
 build_style=qmake
-hostmakedepends="qt5-qmake pkg-config qt5-tools"
+hostmakedepends="qt5-qmake pkg-config qt5-host-tools"
 makedepends="tiff-devel qt5-devel libvorbis-devel zlib-devel
  libXtst-devel hunspell-devel qt5-tools-devel qt5-declarative-devel
  qt5-webkit-devel lzo-devel bzip2-devel libao-devel qt5-svg-devel
  libeb-devel qt5-x11extras-devel ffmpeg-devel"
 short_desc="A feature-rich dictionary lookup program"
 maintainer="John <johnz@posteo.net>"
-license="GPL-3"
+license="GPL-3.0-or-later"
 homepage="http://goldendict.org/"
 distfiles="https://github.com/goldendict/goldendict/archive/${version/RC/-RC}.tar.gz"
 checksum=bccee0a3d3902f8fa31e439e220a405065fff774e5f8c581be2b0743d3f83fde
 
+CXXFLAGS="-Wno-deprecated"
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-tools-devel qt5-webkit-devel qt5-host-tools qt5-svg-devel qt5-x11extras-devel"
 fi

From 9060a1778b56e01d3dc05f3b22301b3511ebd499 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 00:13:51 +0200
Subject: [PATCH 11/17] mpc-qt: change distfile to sources.voidlinux.org

the upstream github account seems to be deleted
---
 srcpkgs/mpc-qt/template | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/mpc-qt/template b/srcpkgs/mpc-qt/template
index ae808c894ef..182072df113 100644
--- a/srcpkgs/mpc-qt/template
+++ b/srcpkgs/mpc-qt/template
@@ -4,15 +4,16 @@ version=18.08
 revision=1
 build_style=qmake
 configure_args="MPCQT_VERSION=${version}"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config qt5-qmake"
 makedepends="qt5-devel qt5-x11extras-devel mpv-devel"
 short_desc="Clone of Media Player Classic reimplemented in Qt"
 maintainer="SolitudeSF <solitudesf@protonmail.com>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/cmdrkotori/mpc-qt"
-distfiles="${homepage}/archive/v${version}.tar.gz"
+#distfiles="${homepage}/archive/v${version}.tar.gz"
+distfiles="https://sources.voidlinux.org/mpc-qt-18.08/v18.08.tar.gz"
 checksum=c58fd90926773c9da8bdfc1a8e4dba0b95cbc58cee6db9981e8de94fd9534406
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake qt5-x11extras-devel"
+	hostmakedepends+=" qt5-x11extras-devel"
 fi

From 214d3321164d6a69a9f0057be816b789fb62629f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 04:00:46 +0200
Subject: [PATCH 12/17] vokoscreen: template fixup for qt5.13

---
 srcpkgs/vokoscreen/template | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/vokoscreen/template b/srcpkgs/vokoscreen/template
index d201c80cd57..3baf73f1c67 100644
--- a/srcpkgs/vokoscreen/template
+++ b/srcpkgs/vokoscreen/template
@@ -3,12 +3,16 @@ pkgname=vokoscreen
 version=2.5.0
 revision=1
 build_style=qmake
-hostmakedepends="pkg-config qt5-tools qt5-qmake"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
 makedepends="alsa-lib-devel libX11-devel libXrandr-devel qt5-devel qt5-x11extras-devel v4l-utils-devel"
 depends="ffmpeg"
 short_desc="Easy to use screencast creator"
 maintainer="Duncaen <duncaen@voidlinux.org>"
-license="GPL-2"
+license="GPL-2.0-only"
 homepage="http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"
 distfiles="https://github.com/vkohaupt/vokoscreen/archive/${version}.tar.gz"
 checksum=7f5d9abfa3b4a1f7ce657838f5169cd80a590be490dacd0ad1751853a38f4245
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-x11extras-devel"
+fi

From 418572abb51c9ea1d02729a250ce479b3c2c1c34 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:08:07 +0200
Subject: [PATCH 13/17] octoxbps: fixes for qt5.13

---
 srcpkgs/octoxbps/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/octoxbps/template b/srcpkgs/octoxbps/template
index 61a4bd50013..abb78865f69 100644
--- a/srcpkgs/octoxbps/template
+++ b/srcpkgs/octoxbps/template
@@ -15,7 +15,7 @@ checksum=6f7643bb07960d8c8f60ce70dc495f866ae60a4d6d8160a7f108f79bf53d2d22
 
 do_configure() {
 	for _dir in ${wrksrc} ${wrksrc}/notifier/octoxbps-notifier; do
-		cd $_dir && qmake ${configure_args} \
+		cd $_dir && qmake-qt5 ${configure_args} \
 			PREFIX=/usr \
 			LIB=/usr/lib \
 			QMAKE_CFLAGS="${CFLAGS}" \

From bd4995f2028a62814e2d4c87a5d2bd46ff74bcd7 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:45:46 +0200
Subject: [PATCH 14/17] qtpass: set to broken

---
 srcpkgs/qtpass/template | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qtpass/template b/srcpkgs/qtpass/template
index 1f5780badeb..c12cbb74da0 100644
--- a/srcpkgs/qtpass/template
+++ b/srcpkgs/qtpass/template
@@ -4,8 +4,8 @@ version=1.2.3
 revision=1
 wrksrc="QtPass-${version}"
 build_style=qmake
-hostmakedepends="qt5-devel qt5-tools"
-makedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
+makedepends="qt5-devel qt5-svg-devel"
 depends="pass pwgen"
 short_desc="Multi-platform GUI for pass"
 maintainer="annejan <brouwer@annejan.com>"
@@ -15,6 +15,8 @@ homepage="https://qtpass.org/"
 distfiles="https://github.com/IJHack/${pkgname}/archive/v${version}.tar.gz"
 checksum=658b632bb06e9ad63d5076aace5fe0e57a0f7f20e0aafdfb64f86a25bdadbb07
 
+broken=yes
+
 do_install() {
 	vbin main/qtpass
 

From a240c84759aa928721a7effa11df5cb4f63317c9 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 16:56:31 +0200
Subject: [PATCH 15/17] Revert "xbps-src/chroot.sh: sanitize PATH."

This reverts commit e0e48d6f6a3e3975bd867d5ae9485ebfbb76a687.
---
 common/xbps-src/shutils/chroot.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/common/xbps-src/shutils/chroot.sh b/common/xbps-src/shutils/chroot.sh
index 17ba9dde6ca..ea8f7b62465 100644
--- a/common/xbps-src/shutils/chroot.sh
+++ b/common/xbps-src/shutils/chroot.sh
@@ -26,7 +26,7 @@ XBPS_SRC_VERSION="$XBPS_SRC_VERSION"
 
 . /etc/xbps/xbps-src.conf
 
-PATH=/void-packages:/usr/bin
+PATH=/void-packages:/usr/bin:/usr/sbin
 
 exec env -i -- SHELL=/bin/sh PATH="\$PATH" DISTCC_HOSTS="\$XBPS_DISTCC_HOSTS" DISTCC_DIR="/host/distcc" \
     ${XBPS_ARCH+XBPS_ARCH=$XBPS_ARCH} ${XBPS_CHECK_PKGS+XBPS_CHECK_PKGS=$XBPS_CHECK_PKGS} \
@@ -121,7 +121,7 @@ chroot_sync_repos() {
             ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
     fi
 
-    # if -N is set, get rid of remote repos from x86_64 (glibc).
+    # if -N is set, comment out remote repositories from xbps.conf.
     if [ -n "$XBPS_SKIP_REMOTEREPOS" ]; then
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/20-repository-remote.conf
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
@@ -198,7 +198,7 @@ chroot_handler() {
         [ -n "$XBPS_BINPKG_EXISTS" ] && arg="$arg -E"
 
         action="$arg $action"
-        env -i -- PATH="/usr/bin" SHELL=/bin/sh \
+        env -i -- PATH="/usr/bin:/usr/sbin:$PATH" SHELL=/bin/sh \
             HOME=/tmp IN_CHROOT=1 LC_COLLATE=C LANG=en_US.UTF-8 \
             SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
             XBPS_ALLOW_CHROOT_BREAKOUT="$XBPS_ALLOW_CHROOT_BREAKOUT" \

From 8b61af2c7ebcabe4162abe40af12fae5abb1a75f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 20:10:32 +0200
Subject: [PATCH 16/17] linssid: fix build for qt5.13

---
 srcpkgs/linssid/patches/project.patch     |  3 +-
 srcpkgs/linssid/patches/qwt-include.patch | 56 -----------------------
 srcpkgs/linssid/template                  |  6 ++-
 3 files changed, 7 insertions(+), 58 deletions(-)
 delete mode 100644 srcpkgs/linssid/patches/qwt-include.patch

diff --git a/srcpkgs/linssid/patches/project.patch b/srcpkgs/linssid/patches/project.patch
index a228007bb22..356419f862b 100644
--- a/srcpkgs/linssid/patches/project.patch
+++ b/srcpkgs/linssid/patches/project.patch
@@ -2,7 +2,8 @@
 +++ linssid-app/linssid-app.pro
 @@ -5,7 +5,7 @@
  CONFIG -= debug_and_release app_bundle lib_bundle
- CONFIG += release 
+-CONFIG += release
++CONFIG += release qwt
  PKGCONFIG +=
 -QT = core gui widgets svg
 +QT = core gui widgets
diff --git a/srcpkgs/linssid/patches/qwt-include.patch b/srcpkgs/linssid/patches/qwt-include.patch
deleted file mode 100644
index 04a25d42b21..00000000000
--- a/srcpkgs/linssid/patches/qwt-include.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- linssid-app/MainForm.cpp
-+++ linssid-app/MainForm.cpp
-@@ -23,14 +23,14 @@
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_symbol.h>
--#include <qwt_plot_marker.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_symbol.h>
-+#include <qwt/qwt_plot_marker.h>
- #include <QPointF>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt_scale_draw.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <sys/types.h>
-
---- linssid-app/MainForm.h
-+++ linssid-app/MainForm.h
-@@ -13,11 +13,11 @@
- #include <QEvent>
- #include <QString>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_scale_draw.h>
- #include "ui_MainForm.h"
- #include "prefsDialog.h"
- #include "Custom.h"
-
---- linssid-app/MainForm.ui
-+++ linssid-app/MainForm.ui
-@@ -757,7 +757,7 @@
-   <customwidget>
-    <class>QwtPlot</class>
-    <extends>QFrame</extends>
--   <header>qwt_plot.h</header>
-+   <header>qwt/qwt_plot.h</header>
-    <container>1</container>
-   </customwidget>
-  </customwidgets>
diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template
index 80509d71bb1..951532e1be9 100644
--- a/srcpkgs/linssid/template
+++ b/srcpkgs/linssid/template
@@ -3,7 +3,7 @@ pkgname=linssid
 version=3.6
 revision=2
 build_style=qmake
-hostmakedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
 makedepends="boost-devel qwt-devel"
 depends="qt5-svg"
 short_desc="Graphical wireless AP scanner"
@@ -12,3 +12,7 @@ license="GPL-3.0-only"
 homepage="https://sourceforge.net/projects/linssid/"
 distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}.orig.tar.gz"
 checksum=57301ee93f708f2512316668bf4e718502f37f21a5e93b68fc604a9032e3e49c
+
+pre_configure() {
+	sed -e "s%/usr/include%${XBPS_CROSS_BASE}&%g" -i linssid-app/linssid-app.pro
+}

From 4c3b0bd99af26a6ba48f8ca33e3002af01473ddb Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 21:47:21 +0200
Subject: [PATCH 17/17] dtkcore: set nocross

[ci skip]
---
 srcpkgs/dtkcore/template | 21 +--------------------
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/srcpkgs/dtkcore/template b/srcpkgs/dtkcore/template
index c2eb731d949..c12b4989980 100644
--- a/srcpkgs/dtkcore/template
+++ b/srcpkgs/dtkcore/template
@@ -18,26 +18,7 @@ if [ "$CROSS_BUILD" ];then
 	hostmakedepends+=" qt5-devel gsettings-qt-devel"
 fi
 
-pre_build() {
-	# This is needed for musl, does somehow not get build there automatically
-	make sub-tools-qmake_all
-	make -C tools sub-deepin-os-release-all
-}
-
-pre_install() {
-	# Replace the host arch binary with target arch one
-	cd tools/deepin-os-release
-	rm *.o
-	qmake ${configure_args} \
-		PREFIX=/usr \
-		LIB=/usr/lib \
-		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
-		QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
-		QMAKE_LFLAGS="${LDFLAGS}"
-	make CC="$CC" CXX="$CXX" LINK="$CXX"
-	cd ${wrksrc}
-}
+nocross="Some QMake mess"
 
 dtkcore-devel_package() {
 	short_desc+=" - development files"

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (32 preceding siblings ...)
  2019-07-02  5:52 ` voidlinux-github
@ 2019-07-06 20:01 ` voidlinux-github
  2019-07-06 20:01 ` voidlinux-github
                   ` (14 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-06 20:01 UTC (permalink / raw)
  To: ml

[-- 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: 508868 bytes --]

From 9d82984818aafe3503853a1ef2a2a0df0c6eb895 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 01/17] 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                          |  139 +-
 50 files changed, 7807 insertions(+), 3077 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 5b1d9bf5a73..e57e39714dd 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..c84898296eb 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=8
+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
@@ -253,9 +240,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,7 +269,6 @@ 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
 			_bootstrap_gn
 		fi
@@ -307,6 +290,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 +323,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 +357,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 +378,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 +424,6 @@ do_install() {
 	cd ${wrksrc}/qtbase
 	make INSTALL_ROOT=${DESTDIR} install
 
-	vlicense ${wrksrc}/LGPL_EXCEPTION.txt
 	_cleanup_wrksrc_leak
 
 	# Symbolic links for remaining binaries
@@ -498,7 +496,10 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
+		dirs+=" qttools/src/linguist/lprodump"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -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}"
@@ -1045,7 +1052,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1099,7 +1106,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
@@ -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"
@@ -1175,6 +1182,8 @@ qt5-qmake_package() {
 		# Change -isystem to -I to avoid "#include_next <stdlib.h>" errors
 		sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \
 			-e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;'
+		find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
+			-e 's%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g' \;
 
 		# Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf
 		if [ "$CROSS_BUILD" ]; then

From 7382280fa68360f9135a42162f4c498f0bae7525 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 02/17] 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 4e5d2a6e895c56c146d3900b939f99ebfa527be1 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 03/17] 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 53e3eab8354..7efad4a68c9 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 df92aec2e2784d8279e06f4949a3239955462bac Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 04/17] 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 e5c305bd801621230388aa9ea2e69ae2a782122c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 05/17] 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 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 867b43a27737b8a436895a8e7ed415fe29f7ad3a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 06/17] New package: qt5-qmake-aarch64-config-1

[ci skip]
---
 common/environment/build-style/qmake.sh   |  3 ++
 srcpkgs/qt5-qmake-aarch64-config/template | 44 +++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 common/environment/build-style/qmake.sh
 create mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
new file mode 100644
index 00000000000..f884ed13ded
--- /dev/null
+++ b/common/environment/build-style/qmake.sh
@@ -0,0 +1,3 @@
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
+fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
new file mode 100644
index 00000000000..ba235c9615f
--- /dev/null
+++ b/srcpkgs/qt5-qmake-aarch64-config/template
@@ -0,0 +1,44 @@
+# Template file for 'qt5-qmake-aarch64-config'
+pkgname=qt5-qmake-aarch64-config
+version=1
+revision=1
+only_for_archs="noarch"
+build_style=meta
+short_desc="Qmake cross config files"
+maintainer="John <johnz@posteo.net>"
+license="GPL-3.0-or-later"
+homepage="https://qt.io"
+
+_create_config() {
+	local _arch=$1
+	vmkdir usr/lib/qt5/bin
+	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
+[Paths]
+Sysroot=/usr/$_arch
+Prefix=/usr/$_arch/usr
+ArchData=/usr/$_arch/usr/lib/qt5
+Data=/usr/$_arch/usr/share/qt5
+Documentation=/usr/$_arch/usr/share/doc/qt5
+Headers=/usr/$_arch/usr/include/qt5
+Libraries=/usr/$_arch/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=/usr/$_arch/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=/usr/$_arch/usr/lib/qt5/imports
+Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
+Translations=/usr/$_arch/usr/share/qt5/translations
+Settings=/usr/$_arch/etc/xdg
+Examples=/usr/$_arch/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+}
+
+do_install() {
+	_create_config aarch64-linux-gnu
+}

From e3649cf5e9a5cfbedd96d03baabff1167354db38 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 18:19:17 +0200
Subject: [PATCH 07/17] merkaartor: fix build with qt5.13

---
 srcpkgs/merkaartor/patches/qt5.13.patch | 11 +++++++++++
 srcpkgs/merkaartor/template             |  8 ++------
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 srcpkgs/merkaartor/patches/qt5.13.patch

diff --git a/srcpkgs/merkaartor/patches/qt5.13.patch b/srcpkgs/merkaartor/patches/qt5.13.patch
new file mode 100644
index 00000000000..7fa4f4e27a9
--- /dev/null
+++ b/srcpkgs/merkaartor/patches/qt5.13.patch
@@ -0,0 +1,11 @@
+--- src/Layers/LicenseDisplayDialog.ui	2016-09-06 00:29:45.000000000 +0200
++++ -	2019-07-06 21:20:05.476017057 +0200
+@@ -43,7 +43,7 @@
+   <customwidget>
+    <class>QWebView</class>
+    <extends>QWidget</extends>
+-   <header>QtWebKit/QWebView</header>
++   <header>QWebView</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template
index 3ee40185ab7..5e44f5f7cb1 100644
--- a/srcpkgs/merkaartor/template
+++ b/srcpkgs/merkaartor/template
@@ -4,7 +4,7 @@ version=0.18.3
 revision=9
 build_style=qmake
 configure_args="SYSTEM_QUAZIP=1 SYSTEM_QUAZIP_LDFLAGS=-lquazip5"
-hostmakedepends="qt5-qmake libgdal-tools"
+hostmakedepends="qt5-qmake libgdal-tools qt5-host-tools"
 makedepends="libgdal-devel proj-devel qt5-declarative-devel qt5-svg-devel
  qt5-tools-devel qt5-webkit-devel quazip-devel"
 short_desc="Openstreetmap map editor"
@@ -17,9 +17,5 @@ checksum=d6b3e4d982b2c7b82331bc5bc8d993d733c443250f02919c3c4dbd6924e6e947
 CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-host-tools qt5-svg-devel qt5-webkit-devel"
-	CXXFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/qt5"
-	for i in ${XBPS_CROSS_BASE}/usr/include/qt5/*; do
-		CXXFLAGS+=" -I$i"
-	done
+	hostmakedepends+=" qt5-svg-devel qt5-webkit-devel"
 fi

From 2844e802840d256d7027211d5aa6ec32846da392 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:00:38 +0200
Subject: [PATCH 08/17] cutemarked: add patch for qt5.13

---
 srcpkgs/cutemarked/patches/QAction.patch | 10 ++++++++++
 srcpkgs/cutemarked/template              |  4 ++++
 2 files changed, 14 insertions(+)
 create mode 100644 srcpkgs/cutemarked/patches/QAction.patch

diff --git a/srcpkgs/cutemarked/patches/QAction.patch b/srcpkgs/cutemarked/patches/QAction.patch
new file mode 100644
index 00000000000..abed5ad1d4f
--- /dev/null
+++ b/srcpkgs/cutemarked/patches/QAction.patch
@@ -0,0 +1,10 @@
+--- app/optionsdialog.cpp	2016-03-28 13:48:50.000000000 +0200
++++ -	2019-07-02 18:59:36.832374065 +0200
+@@ -17,6 +17,7 @@
+ #include "optionsdialog.h"
+ #include "ui_optionsdialog.h"
+ 
++#include <QAction>
+ #include <QFontComboBox>
+ #include <QItemEditorFactory>
+ #include <QKeySequence>
diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template
index 7d4cfcce17a..53997add9ef 100644
--- a/srcpkgs/cutemarked/template
+++ b/srcpkgs/cutemarked/template
@@ -15,6 +15,10 @@ homepage="http://cloose.github.io/CuteMarkEd/"
 distfiles="https://github.com/cloose/${pkgname}/archive/v${version}.tar.gz"
 checksum=78a41808c2f0452375810abdff76eeaaee012f8d1368a2b8772ec6b4d2ceeec8
 
+pre_build() {
+	lrelease app/app.pro
+}
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-devel qt5-webkit-devel"
 fi

From 9322e66a6ba14425205a84de6661d1d8615076d8 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:27:17 +0200
Subject: [PATCH 09/17] dtkwidget: rebuild against qt5.13

---
 srcpkgs/dtkwidget/patches/qt5.13.patch | 39 ++++++++++++++++++++++++++
 srcpkgs/dtkwidget/template             |  4 ++-
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/dtkwidget/patches/qt5.13.patch

diff --git a/srcpkgs/dtkwidget/patches/qt5.13.patch b/srcpkgs/dtkwidget/patches/qt5.13.patch
new file mode 100644
index 00000000000..a76621a3f3a
--- /dev/null
+++ b/srcpkgs/dtkwidget/patches/qt5.13.patch
@@ -0,0 +1,39 @@
+diff --git a/src/widgets/daboutdialog.cpp b/src/widgets/daboutdialog.cpp
+index 5c6ba91..a33fd94 100644
+--- src/widgets/daboutdialog.cpp
++++ src/widgets/daboutdialog.cpp
+@@ -575,6 +575,6 @@ void DAboutDialog::showEvent(QShowEvent *event)
+     }
+ }
+ 
+-#include "moc_daboutdialog.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_daboutdialog.cpp"
+diff --git a/src/widgets/dipv4lineedit.cpp b/src/widgets/dipv4lineedit.cpp
+index 4efe6e4..1cc68b4 100644
+--- src/widgets/dipv4lineedit.cpp
++++ src/widgets/dipv4lineedit.cpp
+@@ -530,6 +530,6 @@ bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
+     return DLineEdit::eventFilter(obj, e);
+ }
+ 
+-#include "moc_dipv4lineedit.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dipv4lineedit.cpp"
+diff --git a/src/widgets/dlistview.cpp b/src/widgets/dlistview.cpp
+index 0dcc244..523ebd5 100644
+--- src/widgets/dlistview.cpp
++++ src/widgets/dlistview.cpp
+@@ -709,6 +709,6 @@ bool DListView::edit(const QModelIndex &index, QAbstractItemView::EditTrigger tr
+     return tmp;
+ }
+ 
+-#include "moc_dlistview.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dlistview.cpp"
diff --git a/srcpkgs/dtkwidget/template b/srcpkgs/dtkwidget/template
index 7dc6547b2b7..6fbac916d9b 100644
--- a/srcpkgs/dtkwidget/template
+++ b/srcpkgs/dtkwidget/template
@@ -1,7 +1,7 @@
 # Template file for 'dtkwidget'
 pkgname=dtkwidget
 version=2.0.14
-revision=1
+revision=2
 build_style=qmake
 configure_args="DBUS_VERSION_0_4_2=YES LIB_INSTALL_DIR=/usr/lib VERSION=${version}"
 hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
@@ -21,6 +21,8 @@ if [ "$CROSS_BUILD" ]; then
 	qt5-svg-devel gsettings-qt-devel"
 fi
 
+nocross=yes
+
 dtkwidget-devel_package() {
 	depends="${sourcepkg}>=${version}_${revision} dtkcore-devel"
 	short_desc+=" - development files"

From 5a53964cbc2bfa892a87d71a2cacbb195f178eb2 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 21:43:18 +0200
Subject: [PATCH 10/17] goldendict: add patches for qt5.13

---
 srcpkgs/goldendict/patches/QAction.patch | 20 ++++++++++++++++++++
 srcpkgs/goldendict/patches/QIcon.patch   | 10 ++++++++++
 srcpkgs/goldendict/template              |  6 ++++--
 3 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/goldendict/patches/QAction.patch
 create mode 100644 srcpkgs/goldendict/patches/QIcon.patch

diff --git a/srcpkgs/goldendict/patches/QAction.patch b/srcpkgs/goldendict/patches/QAction.patch
new file mode 100644
index 00000000000..146fe34e2fa
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QAction.patch
@@ -0,0 +1,20 @@
+--- fulltextsearch.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:27:37.881036339 +0200
+@@ -1,6 +1,7 @@
+ #ifndef __FULLTEXTSEARCH_HH_INCLUDED__
+ #define __FULLTEXTSEARCH_HH_INCLUDED__
+ 
++#include <QAction>
+ #include <QSemaphore>
+ #include <QStringList>
+ #include <QRegExp>
+--- groups_widgets.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:31:52.350308868 +0200
+@@ -10,6 +10,7 @@
+ 
+ #include <QListWidget>
+ #include <QSortFilterProxyModel>
++#include <QAction>
+ 
+ #include "config.hh"
+ #include "dictionary.hh"
diff --git a/srcpkgs/goldendict/patches/QIcon.patch b/srcpkgs/goldendict/patches/QIcon.patch
new file mode 100644
index 00000000000..ea066d1946f
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QIcon.patch
@@ -0,0 +1,10 @@
+--- initializing.cc	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:26:19.088317401 +0200
+@@ -3,6 +3,7 @@
+ 
+ #include "initializing.hh"
+ #include <QCloseEvent>
++#include <QIcon>
+ 
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 )
+ #include <QtWidgets/QStyleFactory>
diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template
index de0918993c6..1d14c0bd5aa 100644
--- a/srcpkgs/goldendict/template
+++ b/srcpkgs/goldendict/template
@@ -4,18 +4,20 @@ version=1.5.0RC2
 revision=4
 wrksrc="${pkgname}-${version/RC/-RC}"
 build_style=qmake
-hostmakedepends="qt5-qmake pkg-config qt5-tools"
+hostmakedepends="qt5-qmake pkg-config qt5-host-tools"
 makedepends="tiff-devel qt5-devel libvorbis-devel zlib-devel
  libXtst-devel hunspell-devel qt5-tools-devel qt5-declarative-devel
  qt5-webkit-devel lzo-devel bzip2-devel libao-devel qt5-svg-devel
  libeb-devel qt5-x11extras-devel ffmpeg-devel"
 short_desc="A feature-rich dictionary lookup program"
 maintainer="John <johnz@posteo.net>"
-license="GPL-3"
+license="GPL-3.0-or-later"
 homepage="http://goldendict.org/"
 distfiles="https://github.com/goldendict/goldendict/archive/${version/RC/-RC}.tar.gz"
 checksum=bccee0a3d3902f8fa31e439e220a405065fff774e5f8c581be2b0743d3f83fde
 
+CXXFLAGS="-Wno-deprecated"
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-tools-devel qt5-webkit-devel qt5-host-tools qt5-svg-devel qt5-x11extras-devel"
 fi

From 9060a1778b56e01d3dc05f3b22301b3511ebd499 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 00:13:51 +0200
Subject: [PATCH 11/17] mpc-qt: change distfile to sources.voidlinux.org

the upstream github account seems to be deleted
---
 srcpkgs/mpc-qt/template | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/mpc-qt/template b/srcpkgs/mpc-qt/template
index ae808c894ef..182072df113 100644
--- a/srcpkgs/mpc-qt/template
+++ b/srcpkgs/mpc-qt/template
@@ -4,15 +4,16 @@ version=18.08
 revision=1
 build_style=qmake
 configure_args="MPCQT_VERSION=${version}"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config qt5-qmake"
 makedepends="qt5-devel qt5-x11extras-devel mpv-devel"
 short_desc="Clone of Media Player Classic reimplemented in Qt"
 maintainer="SolitudeSF <solitudesf@protonmail.com>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/cmdrkotori/mpc-qt"
-distfiles="${homepage}/archive/v${version}.tar.gz"
+#distfiles="${homepage}/archive/v${version}.tar.gz"
+distfiles="https://sources.voidlinux.org/mpc-qt-18.08/v18.08.tar.gz"
 checksum=c58fd90926773c9da8bdfc1a8e4dba0b95cbc58cee6db9981e8de94fd9534406
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake qt5-x11extras-devel"
+	hostmakedepends+=" qt5-x11extras-devel"
 fi

From 214d3321164d6a69a9f0057be816b789fb62629f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 04:00:46 +0200
Subject: [PATCH 12/17] vokoscreen: template fixup for qt5.13

---
 srcpkgs/vokoscreen/template | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/vokoscreen/template b/srcpkgs/vokoscreen/template
index d201c80cd57..3baf73f1c67 100644
--- a/srcpkgs/vokoscreen/template
+++ b/srcpkgs/vokoscreen/template
@@ -3,12 +3,16 @@ pkgname=vokoscreen
 version=2.5.0
 revision=1
 build_style=qmake
-hostmakedepends="pkg-config qt5-tools qt5-qmake"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
 makedepends="alsa-lib-devel libX11-devel libXrandr-devel qt5-devel qt5-x11extras-devel v4l-utils-devel"
 depends="ffmpeg"
 short_desc="Easy to use screencast creator"
 maintainer="Duncaen <duncaen@voidlinux.org>"
-license="GPL-2"
+license="GPL-2.0-only"
 homepage="http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"
 distfiles="https://github.com/vkohaupt/vokoscreen/archive/${version}.tar.gz"
 checksum=7f5d9abfa3b4a1f7ce657838f5169cd80a590be490dacd0ad1751853a38f4245
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-x11extras-devel"
+fi

From 418572abb51c9ea1d02729a250ce479b3c2c1c34 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:08:07 +0200
Subject: [PATCH 13/17] octoxbps: fixes for qt5.13

---
 srcpkgs/octoxbps/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/octoxbps/template b/srcpkgs/octoxbps/template
index 61a4bd50013..abb78865f69 100644
--- a/srcpkgs/octoxbps/template
+++ b/srcpkgs/octoxbps/template
@@ -15,7 +15,7 @@ checksum=6f7643bb07960d8c8f60ce70dc495f866ae60a4d6d8160a7f108f79bf53d2d22
 
 do_configure() {
 	for _dir in ${wrksrc} ${wrksrc}/notifier/octoxbps-notifier; do
-		cd $_dir && qmake ${configure_args} \
+		cd $_dir && qmake-qt5 ${configure_args} \
 			PREFIX=/usr \
 			LIB=/usr/lib \
 			QMAKE_CFLAGS="${CFLAGS}" \

From bd4995f2028a62814e2d4c87a5d2bd46ff74bcd7 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:45:46 +0200
Subject: [PATCH 14/17] qtpass: set to broken

---
 srcpkgs/qtpass/template | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qtpass/template b/srcpkgs/qtpass/template
index 1f5780badeb..c12cbb74da0 100644
--- a/srcpkgs/qtpass/template
+++ b/srcpkgs/qtpass/template
@@ -4,8 +4,8 @@ version=1.2.3
 revision=1
 wrksrc="QtPass-${version}"
 build_style=qmake
-hostmakedepends="qt5-devel qt5-tools"
-makedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
+makedepends="qt5-devel qt5-svg-devel"
 depends="pass pwgen"
 short_desc="Multi-platform GUI for pass"
 maintainer="annejan <brouwer@annejan.com>"
@@ -15,6 +15,8 @@ homepage="https://qtpass.org/"
 distfiles="https://github.com/IJHack/${pkgname}/archive/v${version}.tar.gz"
 checksum=658b632bb06e9ad63d5076aace5fe0e57a0f7f20e0aafdfb64f86a25bdadbb07
 
+broken=yes
+
 do_install() {
 	vbin main/qtpass
 

From a240c84759aa928721a7effa11df5cb4f63317c9 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 16:56:31 +0200
Subject: [PATCH 15/17] Revert "xbps-src/chroot.sh: sanitize PATH."

This reverts commit e0e48d6f6a3e3975bd867d5ae9485ebfbb76a687.
---
 common/xbps-src/shutils/chroot.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/common/xbps-src/shutils/chroot.sh b/common/xbps-src/shutils/chroot.sh
index 17ba9dde6ca..ea8f7b62465 100644
--- a/common/xbps-src/shutils/chroot.sh
+++ b/common/xbps-src/shutils/chroot.sh
@@ -26,7 +26,7 @@ XBPS_SRC_VERSION="$XBPS_SRC_VERSION"
 
 . /etc/xbps/xbps-src.conf
 
-PATH=/void-packages:/usr/bin
+PATH=/void-packages:/usr/bin:/usr/sbin
 
 exec env -i -- SHELL=/bin/sh PATH="\$PATH" DISTCC_HOSTS="\$XBPS_DISTCC_HOSTS" DISTCC_DIR="/host/distcc" \
     ${XBPS_ARCH+XBPS_ARCH=$XBPS_ARCH} ${XBPS_CHECK_PKGS+XBPS_CHECK_PKGS=$XBPS_CHECK_PKGS} \
@@ -121,7 +121,7 @@ chroot_sync_repos() {
             ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
     fi
 
-    # if -N is set, get rid of remote repos from x86_64 (glibc).
+    # if -N is set, comment out remote repositories from xbps.conf.
     if [ -n "$XBPS_SKIP_REMOTEREPOS" ]; then
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/20-repository-remote.conf
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
@@ -198,7 +198,7 @@ chroot_handler() {
         [ -n "$XBPS_BINPKG_EXISTS" ] && arg="$arg -E"
 
         action="$arg $action"
-        env -i -- PATH="/usr/bin" SHELL=/bin/sh \
+        env -i -- PATH="/usr/bin:/usr/sbin:$PATH" SHELL=/bin/sh \
             HOME=/tmp IN_CHROOT=1 LC_COLLATE=C LANG=en_US.UTF-8 \
             SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
             XBPS_ALLOW_CHROOT_BREAKOUT="$XBPS_ALLOW_CHROOT_BREAKOUT" \

From 8b61af2c7ebcabe4162abe40af12fae5abb1a75f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 20:10:32 +0200
Subject: [PATCH 16/17] linssid: fix build for qt5.13

---
 srcpkgs/linssid/patches/project.patch     |  3 +-
 srcpkgs/linssid/patches/qwt-include.patch | 56 -----------------------
 srcpkgs/linssid/template                  |  6 ++-
 3 files changed, 7 insertions(+), 58 deletions(-)
 delete mode 100644 srcpkgs/linssid/patches/qwt-include.patch

diff --git a/srcpkgs/linssid/patches/project.patch b/srcpkgs/linssid/patches/project.patch
index a228007bb22..356419f862b 100644
--- a/srcpkgs/linssid/patches/project.patch
+++ b/srcpkgs/linssid/patches/project.patch
@@ -2,7 +2,8 @@
 +++ linssid-app/linssid-app.pro
 @@ -5,7 +5,7 @@
  CONFIG -= debug_and_release app_bundle lib_bundle
- CONFIG += release 
+-CONFIG += release
++CONFIG += release qwt
  PKGCONFIG +=
 -QT = core gui widgets svg
 +QT = core gui widgets
diff --git a/srcpkgs/linssid/patches/qwt-include.patch b/srcpkgs/linssid/patches/qwt-include.patch
deleted file mode 100644
index 04a25d42b21..00000000000
--- a/srcpkgs/linssid/patches/qwt-include.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- linssid-app/MainForm.cpp
-+++ linssid-app/MainForm.cpp
-@@ -23,14 +23,14 @@
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_symbol.h>
--#include <qwt_plot_marker.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_symbol.h>
-+#include <qwt/qwt_plot_marker.h>
- #include <QPointF>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt_scale_draw.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <sys/types.h>
-
---- linssid-app/MainForm.h
-+++ linssid-app/MainForm.h
-@@ -13,11 +13,11 @@
- #include <QEvent>
- #include <QString>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_scale_draw.h>
- #include "ui_MainForm.h"
- #include "prefsDialog.h"
- #include "Custom.h"
-
---- linssid-app/MainForm.ui
-+++ linssid-app/MainForm.ui
-@@ -757,7 +757,7 @@
-   <customwidget>
-    <class>QwtPlot</class>
-    <extends>QFrame</extends>
--   <header>qwt_plot.h</header>
-+   <header>qwt/qwt_plot.h</header>
-    <container>1</container>
-   </customwidget>
-  </customwidgets>
diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template
index 80509d71bb1..951532e1be9 100644
--- a/srcpkgs/linssid/template
+++ b/srcpkgs/linssid/template
@@ -3,7 +3,7 @@ pkgname=linssid
 version=3.6
 revision=2
 build_style=qmake
-hostmakedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
 makedepends="boost-devel qwt-devel"
 depends="qt5-svg"
 short_desc="Graphical wireless AP scanner"
@@ -12,3 +12,7 @@ license="GPL-3.0-only"
 homepage="https://sourceforge.net/projects/linssid/"
 distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}.orig.tar.gz"
 checksum=57301ee93f708f2512316668bf4e718502f37f21a5e93b68fc604a9032e3e49c
+
+pre_configure() {
+	sed -e "s%/usr/include%${XBPS_CROSS_BASE}&%g" -i linssid-app/linssid-app.pro
+}

From 4c3b0bd99af26a6ba48f8ca33e3002af01473ddb Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 21:47:21 +0200
Subject: [PATCH 17/17] dtkcore: set nocross

[ci skip]
---
 srcpkgs/dtkcore/template | 21 +--------------------
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/srcpkgs/dtkcore/template b/srcpkgs/dtkcore/template
index c2eb731d949..c12b4989980 100644
--- a/srcpkgs/dtkcore/template
+++ b/srcpkgs/dtkcore/template
@@ -18,26 +18,7 @@ if [ "$CROSS_BUILD" ];then
 	hostmakedepends+=" qt5-devel gsettings-qt-devel"
 fi
 
-pre_build() {
-	# This is needed for musl, does somehow not get build there automatically
-	make sub-tools-qmake_all
-	make -C tools sub-deepin-os-release-all
-}
-
-pre_install() {
-	# Replace the host arch binary with target arch one
-	cd tools/deepin-os-release
-	rm *.o
-	qmake ${configure_args} \
-		PREFIX=/usr \
-		LIB=/usr/lib \
-		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
-		QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
-		QMAKE_LFLAGS="${LDFLAGS}"
-	make CC="$CC" CXX="$CXX" LINK="$CXX"
-	cd ${wrksrc}
-}
+nocross="Some QMake mess"
 
 dtkcore-devel_package() {
 	short_desc+=" - development files"

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (34 preceding siblings ...)
  2019-07-06 20:01 ` voidlinux-github
@ 2019-07-06 20:19 ` voidlinux-github
  2019-07-06 20:19 ` voidlinux-github
                   ` (12 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-06 20:19 UTC (permalink / raw)
  To: ml

[-- 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: 512767 bytes --]

From 9d82984818aafe3503853a1ef2a2a0df0c6eb895 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 01/18] 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                          |  139 +-
 50 files changed, 7807 insertions(+), 3077 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 5b1d9bf5a73..e57e39714dd 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..c84898296eb 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=8
+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
@@ -253,9 +240,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,7 +269,6 @@ 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
 			_bootstrap_gn
 		fi
@@ -307,6 +290,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 +323,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 +357,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 +378,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 +424,6 @@ do_install() {
 	cd ${wrksrc}/qtbase
 	make INSTALL_ROOT=${DESTDIR} install
 
-	vlicense ${wrksrc}/LGPL_EXCEPTION.txt
 	_cleanup_wrksrc_leak
 
 	# Symbolic links for remaining binaries
@@ -498,7 +496,10 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
+		dirs+=" qttools/src/linguist/lprodump"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -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}"
@@ -1045,7 +1052,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1099,7 +1106,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
@@ -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"
@@ -1175,6 +1182,8 @@ qt5-qmake_package() {
 		# Change -isystem to -I to avoid "#include_next <stdlib.h>" errors
 		sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \
 			-e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;'
+		find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
+			-e 's%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g' \;
 
 		# Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf
 		if [ "$CROSS_BUILD" ]; then

From 7382280fa68360f9135a42162f4c498f0bae7525 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 02/18] 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 4e5d2a6e895c56c146d3900b939f99ebfa527be1 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 03/18] 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 53e3eab8354..7efad4a68c9 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 df92aec2e2784d8279e06f4949a3239955462bac Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 04/18] 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 e5c305bd801621230388aa9ea2e69ae2a782122c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 05/18] 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 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 867b43a27737b8a436895a8e7ed415fe29f7ad3a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 06/18] New package: qt5-qmake-aarch64-config-1

[ci skip]
---
 common/environment/build-style/qmake.sh   |  3 ++
 srcpkgs/qt5-qmake-aarch64-config/template | 44 +++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 common/environment/build-style/qmake.sh
 create mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
new file mode 100644
index 00000000000..f884ed13ded
--- /dev/null
+++ b/common/environment/build-style/qmake.sh
@@ -0,0 +1,3 @@
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
+fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
new file mode 100644
index 00000000000..ba235c9615f
--- /dev/null
+++ b/srcpkgs/qt5-qmake-aarch64-config/template
@@ -0,0 +1,44 @@
+# Template file for 'qt5-qmake-aarch64-config'
+pkgname=qt5-qmake-aarch64-config
+version=1
+revision=1
+only_for_archs="noarch"
+build_style=meta
+short_desc="Qmake cross config files"
+maintainer="John <johnz@posteo.net>"
+license="GPL-3.0-or-later"
+homepage="https://qt.io"
+
+_create_config() {
+	local _arch=$1
+	vmkdir usr/lib/qt5/bin
+	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
+[Paths]
+Sysroot=/usr/$_arch
+Prefix=/usr/$_arch/usr
+ArchData=/usr/$_arch/usr/lib/qt5
+Data=/usr/$_arch/usr/share/qt5
+Documentation=/usr/$_arch/usr/share/doc/qt5
+Headers=/usr/$_arch/usr/include/qt5
+Libraries=/usr/$_arch/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=/usr/$_arch/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=/usr/$_arch/usr/lib/qt5/imports
+Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
+Translations=/usr/$_arch/usr/share/qt5/translations
+Settings=/usr/$_arch/etc/xdg
+Examples=/usr/$_arch/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+}
+
+do_install() {
+	_create_config aarch64-linux-gnu
+}

From e3649cf5e9a5cfbedd96d03baabff1167354db38 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 18:19:17 +0200
Subject: [PATCH 07/18] merkaartor: fix build with qt5.13

---
 srcpkgs/merkaartor/patches/qt5.13.patch | 11 +++++++++++
 srcpkgs/merkaartor/template             |  8 ++------
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 srcpkgs/merkaartor/patches/qt5.13.patch

diff --git a/srcpkgs/merkaartor/patches/qt5.13.patch b/srcpkgs/merkaartor/patches/qt5.13.patch
new file mode 100644
index 00000000000..7fa4f4e27a9
--- /dev/null
+++ b/srcpkgs/merkaartor/patches/qt5.13.patch
@@ -0,0 +1,11 @@
+--- src/Layers/LicenseDisplayDialog.ui	2016-09-06 00:29:45.000000000 +0200
++++ -	2019-07-06 21:20:05.476017057 +0200
+@@ -43,7 +43,7 @@
+   <customwidget>
+    <class>QWebView</class>
+    <extends>QWidget</extends>
+-   <header>QtWebKit/QWebView</header>
++   <header>QWebView</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template
index 3ee40185ab7..5e44f5f7cb1 100644
--- a/srcpkgs/merkaartor/template
+++ b/srcpkgs/merkaartor/template
@@ -4,7 +4,7 @@ version=0.18.3
 revision=9
 build_style=qmake
 configure_args="SYSTEM_QUAZIP=1 SYSTEM_QUAZIP_LDFLAGS=-lquazip5"
-hostmakedepends="qt5-qmake libgdal-tools"
+hostmakedepends="qt5-qmake libgdal-tools qt5-host-tools"
 makedepends="libgdal-devel proj-devel qt5-declarative-devel qt5-svg-devel
  qt5-tools-devel qt5-webkit-devel quazip-devel"
 short_desc="Openstreetmap map editor"
@@ -17,9 +17,5 @@ checksum=d6b3e4d982b2c7b82331bc5bc8d993d733c443250f02919c3c4dbd6924e6e947
 CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-host-tools qt5-svg-devel qt5-webkit-devel"
-	CXXFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/qt5"
-	for i in ${XBPS_CROSS_BASE}/usr/include/qt5/*; do
-		CXXFLAGS+=" -I$i"
-	done
+	hostmakedepends+=" qt5-svg-devel qt5-webkit-devel"
 fi

From 2844e802840d256d7027211d5aa6ec32846da392 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:00:38 +0200
Subject: [PATCH 08/18] cutemarked: add patch for qt5.13

---
 srcpkgs/cutemarked/patches/QAction.patch | 10 ++++++++++
 srcpkgs/cutemarked/template              |  4 ++++
 2 files changed, 14 insertions(+)
 create mode 100644 srcpkgs/cutemarked/patches/QAction.patch

diff --git a/srcpkgs/cutemarked/patches/QAction.patch b/srcpkgs/cutemarked/patches/QAction.patch
new file mode 100644
index 00000000000..abed5ad1d4f
--- /dev/null
+++ b/srcpkgs/cutemarked/patches/QAction.patch
@@ -0,0 +1,10 @@
+--- app/optionsdialog.cpp	2016-03-28 13:48:50.000000000 +0200
++++ -	2019-07-02 18:59:36.832374065 +0200
+@@ -17,6 +17,7 @@
+ #include "optionsdialog.h"
+ #include "ui_optionsdialog.h"
+ 
++#include <QAction>
+ #include <QFontComboBox>
+ #include <QItemEditorFactory>
+ #include <QKeySequence>
diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template
index 7d4cfcce17a..53997add9ef 100644
--- a/srcpkgs/cutemarked/template
+++ b/srcpkgs/cutemarked/template
@@ -15,6 +15,10 @@ homepage="http://cloose.github.io/CuteMarkEd/"
 distfiles="https://github.com/cloose/${pkgname}/archive/v${version}.tar.gz"
 checksum=78a41808c2f0452375810abdff76eeaaee012f8d1368a2b8772ec6b4d2ceeec8
 
+pre_build() {
+	lrelease app/app.pro
+}
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-devel qt5-webkit-devel"
 fi

From 9322e66a6ba14425205a84de6661d1d8615076d8 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:27:17 +0200
Subject: [PATCH 09/18] dtkwidget: rebuild against qt5.13

---
 srcpkgs/dtkwidget/patches/qt5.13.patch | 39 ++++++++++++++++++++++++++
 srcpkgs/dtkwidget/template             |  4 ++-
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/dtkwidget/patches/qt5.13.patch

diff --git a/srcpkgs/dtkwidget/patches/qt5.13.patch b/srcpkgs/dtkwidget/patches/qt5.13.patch
new file mode 100644
index 00000000000..a76621a3f3a
--- /dev/null
+++ b/srcpkgs/dtkwidget/patches/qt5.13.patch
@@ -0,0 +1,39 @@
+diff --git a/src/widgets/daboutdialog.cpp b/src/widgets/daboutdialog.cpp
+index 5c6ba91..a33fd94 100644
+--- src/widgets/daboutdialog.cpp
++++ src/widgets/daboutdialog.cpp
+@@ -575,6 +575,6 @@ void DAboutDialog::showEvent(QShowEvent *event)
+     }
+ }
+ 
+-#include "moc_daboutdialog.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_daboutdialog.cpp"
+diff --git a/src/widgets/dipv4lineedit.cpp b/src/widgets/dipv4lineedit.cpp
+index 4efe6e4..1cc68b4 100644
+--- src/widgets/dipv4lineedit.cpp
++++ src/widgets/dipv4lineedit.cpp
+@@ -530,6 +530,6 @@ bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
+     return DLineEdit::eventFilter(obj, e);
+ }
+ 
+-#include "moc_dipv4lineedit.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dipv4lineedit.cpp"
+diff --git a/src/widgets/dlistview.cpp b/src/widgets/dlistview.cpp
+index 0dcc244..523ebd5 100644
+--- src/widgets/dlistview.cpp
++++ src/widgets/dlistview.cpp
+@@ -709,6 +709,6 @@ bool DListView::edit(const QModelIndex &index, QAbstractItemView::EditTrigger tr
+     return tmp;
+ }
+ 
+-#include "moc_dlistview.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dlistview.cpp"
diff --git a/srcpkgs/dtkwidget/template b/srcpkgs/dtkwidget/template
index 7dc6547b2b7..6fbac916d9b 100644
--- a/srcpkgs/dtkwidget/template
+++ b/srcpkgs/dtkwidget/template
@@ -1,7 +1,7 @@
 # Template file for 'dtkwidget'
 pkgname=dtkwidget
 version=2.0.14
-revision=1
+revision=2
 build_style=qmake
 configure_args="DBUS_VERSION_0_4_2=YES LIB_INSTALL_DIR=/usr/lib VERSION=${version}"
 hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
@@ -21,6 +21,8 @@ if [ "$CROSS_BUILD" ]; then
 	qt5-svg-devel gsettings-qt-devel"
 fi
 
+nocross=yes
+
 dtkwidget-devel_package() {
 	depends="${sourcepkg}>=${version}_${revision} dtkcore-devel"
 	short_desc+=" - development files"

From 5a53964cbc2bfa892a87d71a2cacbb195f178eb2 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 21:43:18 +0200
Subject: [PATCH 10/18] goldendict: add patches for qt5.13

---
 srcpkgs/goldendict/patches/QAction.patch | 20 ++++++++++++++++++++
 srcpkgs/goldendict/patches/QIcon.patch   | 10 ++++++++++
 srcpkgs/goldendict/template              |  6 ++++--
 3 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/goldendict/patches/QAction.patch
 create mode 100644 srcpkgs/goldendict/patches/QIcon.patch

diff --git a/srcpkgs/goldendict/patches/QAction.patch b/srcpkgs/goldendict/patches/QAction.patch
new file mode 100644
index 00000000000..146fe34e2fa
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QAction.patch
@@ -0,0 +1,20 @@
+--- fulltextsearch.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:27:37.881036339 +0200
+@@ -1,6 +1,7 @@
+ #ifndef __FULLTEXTSEARCH_HH_INCLUDED__
+ #define __FULLTEXTSEARCH_HH_INCLUDED__
+ 
++#include <QAction>
+ #include <QSemaphore>
+ #include <QStringList>
+ #include <QRegExp>
+--- groups_widgets.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:31:52.350308868 +0200
+@@ -10,6 +10,7 @@
+ 
+ #include <QListWidget>
+ #include <QSortFilterProxyModel>
++#include <QAction>
+ 
+ #include "config.hh"
+ #include "dictionary.hh"
diff --git a/srcpkgs/goldendict/patches/QIcon.patch b/srcpkgs/goldendict/patches/QIcon.patch
new file mode 100644
index 00000000000..ea066d1946f
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QIcon.patch
@@ -0,0 +1,10 @@
+--- initializing.cc	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:26:19.088317401 +0200
+@@ -3,6 +3,7 @@
+ 
+ #include "initializing.hh"
+ #include <QCloseEvent>
++#include <QIcon>
+ 
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 )
+ #include <QtWidgets/QStyleFactory>
diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template
index de0918993c6..1d14c0bd5aa 100644
--- a/srcpkgs/goldendict/template
+++ b/srcpkgs/goldendict/template
@@ -4,18 +4,20 @@ version=1.5.0RC2
 revision=4
 wrksrc="${pkgname}-${version/RC/-RC}"
 build_style=qmake
-hostmakedepends="qt5-qmake pkg-config qt5-tools"
+hostmakedepends="qt5-qmake pkg-config qt5-host-tools"
 makedepends="tiff-devel qt5-devel libvorbis-devel zlib-devel
  libXtst-devel hunspell-devel qt5-tools-devel qt5-declarative-devel
  qt5-webkit-devel lzo-devel bzip2-devel libao-devel qt5-svg-devel
  libeb-devel qt5-x11extras-devel ffmpeg-devel"
 short_desc="A feature-rich dictionary lookup program"
 maintainer="John <johnz@posteo.net>"
-license="GPL-3"
+license="GPL-3.0-or-later"
 homepage="http://goldendict.org/"
 distfiles="https://github.com/goldendict/goldendict/archive/${version/RC/-RC}.tar.gz"
 checksum=bccee0a3d3902f8fa31e439e220a405065fff774e5f8c581be2b0743d3f83fde
 
+CXXFLAGS="-Wno-deprecated"
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-tools-devel qt5-webkit-devel qt5-host-tools qt5-svg-devel qt5-x11extras-devel"
 fi

From 9060a1778b56e01d3dc05f3b22301b3511ebd499 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 00:13:51 +0200
Subject: [PATCH 11/18] mpc-qt: change distfile to sources.voidlinux.org

the upstream github account seems to be deleted
---
 srcpkgs/mpc-qt/template | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/mpc-qt/template b/srcpkgs/mpc-qt/template
index ae808c894ef..182072df113 100644
--- a/srcpkgs/mpc-qt/template
+++ b/srcpkgs/mpc-qt/template
@@ -4,15 +4,16 @@ version=18.08
 revision=1
 build_style=qmake
 configure_args="MPCQT_VERSION=${version}"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config qt5-qmake"
 makedepends="qt5-devel qt5-x11extras-devel mpv-devel"
 short_desc="Clone of Media Player Classic reimplemented in Qt"
 maintainer="SolitudeSF <solitudesf@protonmail.com>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/cmdrkotori/mpc-qt"
-distfiles="${homepage}/archive/v${version}.tar.gz"
+#distfiles="${homepage}/archive/v${version}.tar.gz"
+distfiles="https://sources.voidlinux.org/mpc-qt-18.08/v18.08.tar.gz"
 checksum=c58fd90926773c9da8bdfc1a8e4dba0b95cbc58cee6db9981e8de94fd9534406
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake qt5-x11extras-devel"
+	hostmakedepends+=" qt5-x11extras-devel"
 fi

From 214d3321164d6a69a9f0057be816b789fb62629f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 04:00:46 +0200
Subject: [PATCH 12/18] vokoscreen: template fixup for qt5.13

---
 srcpkgs/vokoscreen/template | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/vokoscreen/template b/srcpkgs/vokoscreen/template
index d201c80cd57..3baf73f1c67 100644
--- a/srcpkgs/vokoscreen/template
+++ b/srcpkgs/vokoscreen/template
@@ -3,12 +3,16 @@ pkgname=vokoscreen
 version=2.5.0
 revision=1
 build_style=qmake
-hostmakedepends="pkg-config qt5-tools qt5-qmake"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
 makedepends="alsa-lib-devel libX11-devel libXrandr-devel qt5-devel qt5-x11extras-devel v4l-utils-devel"
 depends="ffmpeg"
 short_desc="Easy to use screencast creator"
 maintainer="Duncaen <duncaen@voidlinux.org>"
-license="GPL-2"
+license="GPL-2.0-only"
 homepage="http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"
 distfiles="https://github.com/vkohaupt/vokoscreen/archive/${version}.tar.gz"
 checksum=7f5d9abfa3b4a1f7ce657838f5169cd80a590be490dacd0ad1751853a38f4245
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-x11extras-devel"
+fi

From 418572abb51c9ea1d02729a250ce479b3c2c1c34 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:08:07 +0200
Subject: [PATCH 13/18] octoxbps: fixes for qt5.13

---
 srcpkgs/octoxbps/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/octoxbps/template b/srcpkgs/octoxbps/template
index 61a4bd50013..abb78865f69 100644
--- a/srcpkgs/octoxbps/template
+++ b/srcpkgs/octoxbps/template
@@ -15,7 +15,7 @@ checksum=6f7643bb07960d8c8f60ce70dc495f866ae60a4d6d8160a7f108f79bf53d2d22
 
 do_configure() {
 	for _dir in ${wrksrc} ${wrksrc}/notifier/octoxbps-notifier; do
-		cd $_dir && qmake ${configure_args} \
+		cd $_dir && qmake-qt5 ${configure_args} \
 			PREFIX=/usr \
 			LIB=/usr/lib \
 			QMAKE_CFLAGS="${CFLAGS}" \

From bd4995f2028a62814e2d4c87a5d2bd46ff74bcd7 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:45:46 +0200
Subject: [PATCH 14/18] qtpass: set to broken

---
 srcpkgs/qtpass/template | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qtpass/template b/srcpkgs/qtpass/template
index 1f5780badeb..c12cbb74da0 100644
--- a/srcpkgs/qtpass/template
+++ b/srcpkgs/qtpass/template
@@ -4,8 +4,8 @@ version=1.2.3
 revision=1
 wrksrc="QtPass-${version}"
 build_style=qmake
-hostmakedepends="qt5-devel qt5-tools"
-makedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
+makedepends="qt5-devel qt5-svg-devel"
 depends="pass pwgen"
 short_desc="Multi-platform GUI for pass"
 maintainer="annejan <brouwer@annejan.com>"
@@ -15,6 +15,8 @@ homepage="https://qtpass.org/"
 distfiles="https://github.com/IJHack/${pkgname}/archive/v${version}.tar.gz"
 checksum=658b632bb06e9ad63d5076aace5fe0e57a0f7f20e0aafdfb64f86a25bdadbb07
 
+broken=yes
+
 do_install() {
 	vbin main/qtpass
 

From a240c84759aa928721a7effa11df5cb4f63317c9 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 16:56:31 +0200
Subject: [PATCH 15/18] Revert "xbps-src/chroot.sh: sanitize PATH."

This reverts commit e0e48d6f6a3e3975bd867d5ae9485ebfbb76a687.
---
 common/xbps-src/shutils/chroot.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/common/xbps-src/shutils/chroot.sh b/common/xbps-src/shutils/chroot.sh
index 17ba9dde6ca..ea8f7b62465 100644
--- a/common/xbps-src/shutils/chroot.sh
+++ b/common/xbps-src/shutils/chroot.sh
@@ -26,7 +26,7 @@ XBPS_SRC_VERSION="$XBPS_SRC_VERSION"
 
 . /etc/xbps/xbps-src.conf
 
-PATH=/void-packages:/usr/bin
+PATH=/void-packages:/usr/bin:/usr/sbin
 
 exec env -i -- SHELL=/bin/sh PATH="\$PATH" DISTCC_HOSTS="\$XBPS_DISTCC_HOSTS" DISTCC_DIR="/host/distcc" \
     ${XBPS_ARCH+XBPS_ARCH=$XBPS_ARCH} ${XBPS_CHECK_PKGS+XBPS_CHECK_PKGS=$XBPS_CHECK_PKGS} \
@@ -121,7 +121,7 @@ chroot_sync_repos() {
             ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
     fi
 
-    # if -N is set, get rid of remote repos from x86_64 (glibc).
+    # if -N is set, comment out remote repositories from xbps.conf.
     if [ -n "$XBPS_SKIP_REMOTEREPOS" ]; then
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/20-repository-remote.conf
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
@@ -198,7 +198,7 @@ chroot_handler() {
         [ -n "$XBPS_BINPKG_EXISTS" ] && arg="$arg -E"
 
         action="$arg $action"
-        env -i -- PATH="/usr/bin" SHELL=/bin/sh \
+        env -i -- PATH="/usr/bin:/usr/sbin:$PATH" SHELL=/bin/sh \
             HOME=/tmp IN_CHROOT=1 LC_COLLATE=C LANG=en_US.UTF-8 \
             SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
             XBPS_ALLOW_CHROOT_BREAKOUT="$XBPS_ALLOW_CHROOT_BREAKOUT" \

From 8b61af2c7ebcabe4162abe40af12fae5abb1a75f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 20:10:32 +0200
Subject: [PATCH 16/18] linssid: fix build for qt5.13

---
 srcpkgs/linssid/patches/project.patch     |  3 +-
 srcpkgs/linssid/patches/qwt-include.patch | 56 -----------------------
 srcpkgs/linssid/template                  |  6 ++-
 3 files changed, 7 insertions(+), 58 deletions(-)
 delete mode 100644 srcpkgs/linssid/patches/qwt-include.patch

diff --git a/srcpkgs/linssid/patches/project.patch b/srcpkgs/linssid/patches/project.patch
index a228007bb22..356419f862b 100644
--- a/srcpkgs/linssid/patches/project.patch
+++ b/srcpkgs/linssid/patches/project.patch
@@ -2,7 +2,8 @@
 +++ linssid-app/linssid-app.pro
 @@ -5,7 +5,7 @@
  CONFIG -= debug_and_release app_bundle lib_bundle
- CONFIG += release 
+-CONFIG += release
++CONFIG += release qwt
  PKGCONFIG +=
 -QT = core gui widgets svg
 +QT = core gui widgets
diff --git a/srcpkgs/linssid/patches/qwt-include.patch b/srcpkgs/linssid/patches/qwt-include.patch
deleted file mode 100644
index 04a25d42b21..00000000000
--- a/srcpkgs/linssid/patches/qwt-include.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- linssid-app/MainForm.cpp
-+++ linssid-app/MainForm.cpp
-@@ -23,14 +23,14 @@
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_symbol.h>
--#include <qwt_plot_marker.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_symbol.h>
-+#include <qwt/qwt_plot_marker.h>
- #include <QPointF>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt_scale_draw.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <sys/types.h>
-
---- linssid-app/MainForm.h
-+++ linssid-app/MainForm.h
-@@ -13,11 +13,11 @@
- #include <QEvent>
- #include <QString>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_scale_draw.h>
- #include "ui_MainForm.h"
- #include "prefsDialog.h"
- #include "Custom.h"
-
---- linssid-app/MainForm.ui
-+++ linssid-app/MainForm.ui
-@@ -757,7 +757,7 @@
-   <customwidget>
-    <class>QwtPlot</class>
-    <extends>QFrame</extends>
--   <header>qwt_plot.h</header>
-+   <header>qwt/qwt_plot.h</header>
-    <container>1</container>
-   </customwidget>
-  </customwidgets>
diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template
index 80509d71bb1..951532e1be9 100644
--- a/srcpkgs/linssid/template
+++ b/srcpkgs/linssid/template
@@ -3,7 +3,7 @@ pkgname=linssid
 version=3.6
 revision=2
 build_style=qmake
-hostmakedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
 makedepends="boost-devel qwt-devel"
 depends="qt5-svg"
 short_desc="Graphical wireless AP scanner"
@@ -12,3 +12,7 @@ license="GPL-3.0-only"
 homepage="https://sourceforge.net/projects/linssid/"
 distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}.orig.tar.gz"
 checksum=57301ee93f708f2512316668bf4e718502f37f21a5e93b68fc604a9032e3e49c
+
+pre_configure() {
+	sed -e "s%/usr/include%${XBPS_CROSS_BASE}&%g" -i linssid-app/linssid-app.pro
+}

From 4c3b0bd99af26a6ba48f8ca33e3002af01473ddb Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 21:47:21 +0200
Subject: [PATCH 17/18] dtkcore: set nocross

[ci skip]
---
 srcpkgs/dtkcore/template | 21 +--------------------
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/srcpkgs/dtkcore/template b/srcpkgs/dtkcore/template
index c2eb731d949..c12b4989980 100644
--- a/srcpkgs/dtkcore/template
+++ b/srcpkgs/dtkcore/template
@@ -18,26 +18,7 @@ if [ "$CROSS_BUILD" ];then
 	hostmakedepends+=" qt5-devel gsettings-qt-devel"
 fi
 
-pre_build() {
-	# This is needed for musl, does somehow not get build there automatically
-	make sub-tools-qmake_all
-	make -C tools sub-deepin-os-release-all
-}
-
-pre_install() {
-	# Replace the host arch binary with target arch one
-	cd tools/deepin-os-release
-	rm *.o
-	qmake ${configure_args} \
-		PREFIX=/usr \
-		LIB=/usr/lib \
-		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
-		QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
-		QMAKE_LFLAGS="${LDFLAGS}"
-	make CC="$CC" CXX="$CXX" LINK="$CXX"
-	cd ${wrksrc}
-}
+nocross="Some QMake mess"
 
 dtkcore-devel_package() {
 	short_desc+=" - development files"

From affb3a5121d14bb1c10a292f3490337b2106c336 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 22:19:33 +0200
Subject: [PATCH 18/18] common/build-style/qmake: use custom qt.conf for cross
 compiling

[ci skip]
---
 common/build-style/qmake.sh               | 31 +++++++++++++++-
 common/environment/build-style/qmake.sh   |  3 --
 srcpkgs/qt5-qmake-aarch64-config/template | 44 -----------------------
 3 files changed, 30 insertions(+), 48 deletions(-)
 delete mode 100644 common/environment/build-style/qmake.sh
 delete mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/build-style/qmake.sh b/common/build-style/qmake.sh
index ef8b87db730..d28f13df1ea 100644
--- a/common/build-style/qmake.sh
+++ b/common/build-style/qmake.sh
@@ -3,6 +3,7 @@
 #
 do_configure() {
 	local qmake
+	local qmake_args
 	if [ -x "/usr/lib/qt5/bin/qmake" ]; then
 		# Qt5 qmake
 		qmake="/usr/lib/qt5/bin/qmake"
@@ -14,7 +15,35 @@ do_configure() {
 	if [ -z "${qmake}" ]; then
 		msg_error "${pkgver}: Could not find qmake - missing in hostdepends?\n"
 	fi
-	${qmake} ${configure_args} \
+	if [ "$CROSS_BUILD" ]; then
+		cat > "${wrksrc}/qt.conf" <<_EOF
+[Paths]
+Sysroot=${XBPS_CROSS_BASE}
+Prefix=${XBPS_CROSS_BASE}/usr
+ArchData=${XBPS_CROSS_BASE}/usr/lib/qt5
+Data=${XBPS_CROSS_BASE}/usr/share/qt5
+Documentation=${XBPS_CROSS_BASE}/usr/share/doc/qt5
+Headers=${XBPS_CROSS_BASE}/usr/include/qt5
+Libraries=${XBPS_CROSS_BASE}/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=${XBPS_CROSS_BASE}/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/imports
+Qml2Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/qml
+Translations=${XBPS_CROSS_BASE}/usr/share/qt5/translations
+Settings=${XBPS_CROSS_BASE}/etc/xdg
+Examples=${XBPS_CROSS_BASE}/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+		qmake_args="-qtconf ${wrksrc}/qt.conf"
+	fi
+	${qmake} ${qmake_args} ${configure_args} \
 		PREFIX=/usr \
 		LIB=/usr/lib \
 		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
deleted file mode 100644
index f884ed13ded..00000000000
--- a/common/environment/build-style/qmake.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
-fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
deleted file mode 100644
index ba235c9615f..00000000000
--- a/srcpkgs/qt5-qmake-aarch64-config/template
+++ /dev/null
@@ -1,44 +0,0 @@
-# Template file for 'qt5-qmake-aarch64-config'
-pkgname=qt5-qmake-aarch64-config
-version=1
-revision=1
-only_for_archs="noarch"
-build_style=meta
-short_desc="Qmake cross config files"
-maintainer="John <johnz@posteo.net>"
-license="GPL-3.0-or-later"
-homepage="https://qt.io"
-
-_create_config() {
-	local _arch=$1
-	vmkdir usr/lib/qt5/bin
-	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
-[Paths]
-Sysroot=/usr/$_arch
-Prefix=/usr/$_arch/usr
-ArchData=/usr/$_arch/usr/lib/qt5
-Data=/usr/$_arch/usr/share/qt5
-Documentation=/usr/$_arch/usr/share/doc/qt5
-Headers=/usr/$_arch/usr/include/qt5
-Libraries=/usr/$_arch/usr/lib
-LibraryExecutables=/usr/lib/qt5/libexec
-Binaries=/usr/lib/qt5/bin
-Tests=/usr/$_arch/usr/tests
-Plugins=/usr/lib/qt5/plugins
-Imports=/usr/$_arch/usr/lib/qt5/imports
-Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
-Translations=/usr/$_arch/usr/share/qt5/translations
-Settings=/usr/$_arch/etc/xdg
-Examples=/usr/$_arch/usr/share/qt5/examples
-HostPrefix=/usr
-HostData=/usr/lib/qt5
-HostBinaries=/usr/lib/qt5/bin
-HostLibraries=/usr/lib
-Spec=linux-g++
-TargetSpec=linux-g++
-_EOF
-}
-
-do_install() {
-	_create_config aarch64-linux-gnu
-}

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (35 preceding siblings ...)
  2019-07-06 20:19 ` voidlinux-github
@ 2019-07-06 20:19 ` voidlinux-github
  2019-07-06 20:24 ` voidlinux-github
                   ` (11 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-06 20:19 UTC (permalink / raw)
  To: ml

[-- 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: 512767 bytes --]

From 9d82984818aafe3503853a1ef2a2a0df0c6eb895 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 01/18] 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                          |  139 +-
 50 files changed, 7807 insertions(+), 3077 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 5b1d9bf5a73..e57e39714dd 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..c84898296eb 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=8
+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
@@ -253,9 +240,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,7 +269,6 @@ 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
 			_bootstrap_gn
 		fi
@@ -307,6 +290,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 +323,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 +357,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 +378,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 +424,6 @@ do_install() {
 	cd ${wrksrc}/qtbase
 	make INSTALL_ROOT=${DESTDIR} install
 
-	vlicense ${wrksrc}/LGPL_EXCEPTION.txt
 	_cleanup_wrksrc_leak
 
 	# Symbolic links for remaining binaries
@@ -498,7 +496,10 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
+		dirs+=" qttools/src/linguist/lprodump"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -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}"
@@ -1045,7 +1052,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1099,7 +1106,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
@@ -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"
@@ -1175,6 +1182,8 @@ qt5-qmake_package() {
 		# Change -isystem to -I to avoid "#include_next <stdlib.h>" errors
 		sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \
 			-e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;'
+		find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
+			-e 's%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g' \;
 
 		# Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf
 		if [ "$CROSS_BUILD" ]; then

From 7382280fa68360f9135a42162f4c498f0bae7525 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 02/18] 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 4e5d2a6e895c56c146d3900b939f99ebfa527be1 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 03/18] 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 53e3eab8354..7efad4a68c9 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 df92aec2e2784d8279e06f4949a3239955462bac Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 04/18] 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 e5c305bd801621230388aa9ea2e69ae2a782122c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 05/18] 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 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 867b43a27737b8a436895a8e7ed415fe29f7ad3a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 06/18] New package: qt5-qmake-aarch64-config-1

[ci skip]
---
 common/environment/build-style/qmake.sh   |  3 ++
 srcpkgs/qt5-qmake-aarch64-config/template | 44 +++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 common/environment/build-style/qmake.sh
 create mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
new file mode 100644
index 00000000000..f884ed13ded
--- /dev/null
+++ b/common/environment/build-style/qmake.sh
@@ -0,0 +1,3 @@
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
+fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
new file mode 100644
index 00000000000..ba235c9615f
--- /dev/null
+++ b/srcpkgs/qt5-qmake-aarch64-config/template
@@ -0,0 +1,44 @@
+# Template file for 'qt5-qmake-aarch64-config'
+pkgname=qt5-qmake-aarch64-config
+version=1
+revision=1
+only_for_archs="noarch"
+build_style=meta
+short_desc="Qmake cross config files"
+maintainer="John <johnz@posteo.net>"
+license="GPL-3.0-or-later"
+homepage="https://qt.io"
+
+_create_config() {
+	local _arch=$1
+	vmkdir usr/lib/qt5/bin
+	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
+[Paths]
+Sysroot=/usr/$_arch
+Prefix=/usr/$_arch/usr
+ArchData=/usr/$_arch/usr/lib/qt5
+Data=/usr/$_arch/usr/share/qt5
+Documentation=/usr/$_arch/usr/share/doc/qt5
+Headers=/usr/$_arch/usr/include/qt5
+Libraries=/usr/$_arch/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=/usr/$_arch/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=/usr/$_arch/usr/lib/qt5/imports
+Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
+Translations=/usr/$_arch/usr/share/qt5/translations
+Settings=/usr/$_arch/etc/xdg
+Examples=/usr/$_arch/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+}
+
+do_install() {
+	_create_config aarch64-linux-gnu
+}

From e3649cf5e9a5cfbedd96d03baabff1167354db38 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 18:19:17 +0200
Subject: [PATCH 07/18] merkaartor: fix build with qt5.13

---
 srcpkgs/merkaartor/patches/qt5.13.patch | 11 +++++++++++
 srcpkgs/merkaartor/template             |  8 ++------
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 srcpkgs/merkaartor/patches/qt5.13.patch

diff --git a/srcpkgs/merkaartor/patches/qt5.13.patch b/srcpkgs/merkaartor/patches/qt5.13.patch
new file mode 100644
index 00000000000..7fa4f4e27a9
--- /dev/null
+++ b/srcpkgs/merkaartor/patches/qt5.13.patch
@@ -0,0 +1,11 @@
+--- src/Layers/LicenseDisplayDialog.ui	2016-09-06 00:29:45.000000000 +0200
++++ -	2019-07-06 21:20:05.476017057 +0200
+@@ -43,7 +43,7 @@
+   <customwidget>
+    <class>QWebView</class>
+    <extends>QWidget</extends>
+-   <header>QtWebKit/QWebView</header>
++   <header>QWebView</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template
index 3ee40185ab7..5e44f5f7cb1 100644
--- a/srcpkgs/merkaartor/template
+++ b/srcpkgs/merkaartor/template
@@ -4,7 +4,7 @@ version=0.18.3
 revision=9
 build_style=qmake
 configure_args="SYSTEM_QUAZIP=1 SYSTEM_QUAZIP_LDFLAGS=-lquazip5"
-hostmakedepends="qt5-qmake libgdal-tools"
+hostmakedepends="qt5-qmake libgdal-tools qt5-host-tools"
 makedepends="libgdal-devel proj-devel qt5-declarative-devel qt5-svg-devel
  qt5-tools-devel qt5-webkit-devel quazip-devel"
 short_desc="Openstreetmap map editor"
@@ -17,9 +17,5 @@ checksum=d6b3e4d982b2c7b82331bc5bc8d993d733c443250f02919c3c4dbd6924e6e947
 CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-host-tools qt5-svg-devel qt5-webkit-devel"
-	CXXFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/qt5"
-	for i in ${XBPS_CROSS_BASE}/usr/include/qt5/*; do
-		CXXFLAGS+=" -I$i"
-	done
+	hostmakedepends+=" qt5-svg-devel qt5-webkit-devel"
 fi

From 2844e802840d256d7027211d5aa6ec32846da392 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:00:38 +0200
Subject: [PATCH 08/18] cutemarked: add patch for qt5.13

---
 srcpkgs/cutemarked/patches/QAction.patch | 10 ++++++++++
 srcpkgs/cutemarked/template              |  4 ++++
 2 files changed, 14 insertions(+)
 create mode 100644 srcpkgs/cutemarked/patches/QAction.patch

diff --git a/srcpkgs/cutemarked/patches/QAction.patch b/srcpkgs/cutemarked/patches/QAction.patch
new file mode 100644
index 00000000000..abed5ad1d4f
--- /dev/null
+++ b/srcpkgs/cutemarked/patches/QAction.patch
@@ -0,0 +1,10 @@
+--- app/optionsdialog.cpp	2016-03-28 13:48:50.000000000 +0200
++++ -	2019-07-02 18:59:36.832374065 +0200
+@@ -17,6 +17,7 @@
+ #include "optionsdialog.h"
+ #include "ui_optionsdialog.h"
+ 
++#include <QAction>
+ #include <QFontComboBox>
+ #include <QItemEditorFactory>
+ #include <QKeySequence>
diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template
index 7d4cfcce17a..53997add9ef 100644
--- a/srcpkgs/cutemarked/template
+++ b/srcpkgs/cutemarked/template
@@ -15,6 +15,10 @@ homepage="http://cloose.github.io/CuteMarkEd/"
 distfiles="https://github.com/cloose/${pkgname}/archive/v${version}.tar.gz"
 checksum=78a41808c2f0452375810abdff76eeaaee012f8d1368a2b8772ec6b4d2ceeec8
 
+pre_build() {
+	lrelease app/app.pro
+}
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-devel qt5-webkit-devel"
 fi

From 9322e66a6ba14425205a84de6661d1d8615076d8 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:27:17 +0200
Subject: [PATCH 09/18] dtkwidget: rebuild against qt5.13

---
 srcpkgs/dtkwidget/patches/qt5.13.patch | 39 ++++++++++++++++++++++++++
 srcpkgs/dtkwidget/template             |  4 ++-
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/dtkwidget/patches/qt5.13.patch

diff --git a/srcpkgs/dtkwidget/patches/qt5.13.patch b/srcpkgs/dtkwidget/patches/qt5.13.patch
new file mode 100644
index 00000000000..a76621a3f3a
--- /dev/null
+++ b/srcpkgs/dtkwidget/patches/qt5.13.patch
@@ -0,0 +1,39 @@
+diff --git a/src/widgets/daboutdialog.cpp b/src/widgets/daboutdialog.cpp
+index 5c6ba91..a33fd94 100644
+--- src/widgets/daboutdialog.cpp
++++ src/widgets/daboutdialog.cpp
+@@ -575,6 +575,6 @@ void DAboutDialog::showEvent(QShowEvent *event)
+     }
+ }
+ 
+-#include "moc_daboutdialog.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_daboutdialog.cpp"
+diff --git a/src/widgets/dipv4lineedit.cpp b/src/widgets/dipv4lineedit.cpp
+index 4efe6e4..1cc68b4 100644
+--- src/widgets/dipv4lineedit.cpp
++++ src/widgets/dipv4lineedit.cpp
+@@ -530,6 +530,6 @@ bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
+     return DLineEdit::eventFilter(obj, e);
+ }
+ 
+-#include "moc_dipv4lineedit.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dipv4lineedit.cpp"
+diff --git a/src/widgets/dlistview.cpp b/src/widgets/dlistview.cpp
+index 0dcc244..523ebd5 100644
+--- src/widgets/dlistview.cpp
++++ src/widgets/dlistview.cpp
+@@ -709,6 +709,6 @@ bool DListView::edit(const QModelIndex &index, QAbstractItemView::EditTrigger tr
+     return tmp;
+ }
+ 
+-#include "moc_dlistview.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dlistview.cpp"
diff --git a/srcpkgs/dtkwidget/template b/srcpkgs/dtkwidget/template
index 7dc6547b2b7..6fbac916d9b 100644
--- a/srcpkgs/dtkwidget/template
+++ b/srcpkgs/dtkwidget/template
@@ -1,7 +1,7 @@
 # Template file for 'dtkwidget'
 pkgname=dtkwidget
 version=2.0.14
-revision=1
+revision=2
 build_style=qmake
 configure_args="DBUS_VERSION_0_4_2=YES LIB_INSTALL_DIR=/usr/lib VERSION=${version}"
 hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
@@ -21,6 +21,8 @@ if [ "$CROSS_BUILD" ]; then
 	qt5-svg-devel gsettings-qt-devel"
 fi
 
+nocross=yes
+
 dtkwidget-devel_package() {
 	depends="${sourcepkg}>=${version}_${revision} dtkcore-devel"
 	short_desc+=" - development files"

From 5a53964cbc2bfa892a87d71a2cacbb195f178eb2 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 21:43:18 +0200
Subject: [PATCH 10/18] goldendict: add patches for qt5.13

---
 srcpkgs/goldendict/patches/QAction.patch | 20 ++++++++++++++++++++
 srcpkgs/goldendict/patches/QIcon.patch   | 10 ++++++++++
 srcpkgs/goldendict/template              |  6 ++++--
 3 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/goldendict/patches/QAction.patch
 create mode 100644 srcpkgs/goldendict/patches/QIcon.patch

diff --git a/srcpkgs/goldendict/patches/QAction.patch b/srcpkgs/goldendict/patches/QAction.patch
new file mode 100644
index 00000000000..146fe34e2fa
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QAction.patch
@@ -0,0 +1,20 @@
+--- fulltextsearch.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:27:37.881036339 +0200
+@@ -1,6 +1,7 @@
+ #ifndef __FULLTEXTSEARCH_HH_INCLUDED__
+ #define __FULLTEXTSEARCH_HH_INCLUDED__
+ 
++#include <QAction>
+ #include <QSemaphore>
+ #include <QStringList>
+ #include <QRegExp>
+--- groups_widgets.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:31:52.350308868 +0200
+@@ -10,6 +10,7 @@
+ 
+ #include <QListWidget>
+ #include <QSortFilterProxyModel>
++#include <QAction>
+ 
+ #include "config.hh"
+ #include "dictionary.hh"
diff --git a/srcpkgs/goldendict/patches/QIcon.patch b/srcpkgs/goldendict/patches/QIcon.patch
new file mode 100644
index 00000000000..ea066d1946f
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QIcon.patch
@@ -0,0 +1,10 @@
+--- initializing.cc	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:26:19.088317401 +0200
+@@ -3,6 +3,7 @@
+ 
+ #include "initializing.hh"
+ #include <QCloseEvent>
++#include <QIcon>
+ 
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 )
+ #include <QtWidgets/QStyleFactory>
diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template
index de0918993c6..1d14c0bd5aa 100644
--- a/srcpkgs/goldendict/template
+++ b/srcpkgs/goldendict/template
@@ -4,18 +4,20 @@ version=1.5.0RC2
 revision=4
 wrksrc="${pkgname}-${version/RC/-RC}"
 build_style=qmake
-hostmakedepends="qt5-qmake pkg-config qt5-tools"
+hostmakedepends="qt5-qmake pkg-config qt5-host-tools"
 makedepends="tiff-devel qt5-devel libvorbis-devel zlib-devel
  libXtst-devel hunspell-devel qt5-tools-devel qt5-declarative-devel
  qt5-webkit-devel lzo-devel bzip2-devel libao-devel qt5-svg-devel
  libeb-devel qt5-x11extras-devel ffmpeg-devel"
 short_desc="A feature-rich dictionary lookup program"
 maintainer="John <johnz@posteo.net>"
-license="GPL-3"
+license="GPL-3.0-or-later"
 homepage="http://goldendict.org/"
 distfiles="https://github.com/goldendict/goldendict/archive/${version/RC/-RC}.tar.gz"
 checksum=bccee0a3d3902f8fa31e439e220a405065fff774e5f8c581be2b0743d3f83fde
 
+CXXFLAGS="-Wno-deprecated"
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-tools-devel qt5-webkit-devel qt5-host-tools qt5-svg-devel qt5-x11extras-devel"
 fi

From 9060a1778b56e01d3dc05f3b22301b3511ebd499 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 00:13:51 +0200
Subject: [PATCH 11/18] mpc-qt: change distfile to sources.voidlinux.org

the upstream github account seems to be deleted
---
 srcpkgs/mpc-qt/template | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/mpc-qt/template b/srcpkgs/mpc-qt/template
index ae808c894ef..182072df113 100644
--- a/srcpkgs/mpc-qt/template
+++ b/srcpkgs/mpc-qt/template
@@ -4,15 +4,16 @@ version=18.08
 revision=1
 build_style=qmake
 configure_args="MPCQT_VERSION=${version}"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config qt5-qmake"
 makedepends="qt5-devel qt5-x11extras-devel mpv-devel"
 short_desc="Clone of Media Player Classic reimplemented in Qt"
 maintainer="SolitudeSF <solitudesf@protonmail.com>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/cmdrkotori/mpc-qt"
-distfiles="${homepage}/archive/v${version}.tar.gz"
+#distfiles="${homepage}/archive/v${version}.tar.gz"
+distfiles="https://sources.voidlinux.org/mpc-qt-18.08/v18.08.tar.gz"
 checksum=c58fd90926773c9da8bdfc1a8e4dba0b95cbc58cee6db9981e8de94fd9534406
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake qt5-x11extras-devel"
+	hostmakedepends+=" qt5-x11extras-devel"
 fi

From 214d3321164d6a69a9f0057be816b789fb62629f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 04:00:46 +0200
Subject: [PATCH 12/18] vokoscreen: template fixup for qt5.13

---
 srcpkgs/vokoscreen/template | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/vokoscreen/template b/srcpkgs/vokoscreen/template
index d201c80cd57..3baf73f1c67 100644
--- a/srcpkgs/vokoscreen/template
+++ b/srcpkgs/vokoscreen/template
@@ -3,12 +3,16 @@ pkgname=vokoscreen
 version=2.5.0
 revision=1
 build_style=qmake
-hostmakedepends="pkg-config qt5-tools qt5-qmake"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
 makedepends="alsa-lib-devel libX11-devel libXrandr-devel qt5-devel qt5-x11extras-devel v4l-utils-devel"
 depends="ffmpeg"
 short_desc="Easy to use screencast creator"
 maintainer="Duncaen <duncaen@voidlinux.org>"
-license="GPL-2"
+license="GPL-2.0-only"
 homepage="http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"
 distfiles="https://github.com/vkohaupt/vokoscreen/archive/${version}.tar.gz"
 checksum=7f5d9abfa3b4a1f7ce657838f5169cd80a590be490dacd0ad1751853a38f4245
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-x11extras-devel"
+fi

From 418572abb51c9ea1d02729a250ce479b3c2c1c34 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:08:07 +0200
Subject: [PATCH 13/18] octoxbps: fixes for qt5.13

---
 srcpkgs/octoxbps/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/octoxbps/template b/srcpkgs/octoxbps/template
index 61a4bd50013..abb78865f69 100644
--- a/srcpkgs/octoxbps/template
+++ b/srcpkgs/octoxbps/template
@@ -15,7 +15,7 @@ checksum=6f7643bb07960d8c8f60ce70dc495f866ae60a4d6d8160a7f108f79bf53d2d22
 
 do_configure() {
 	for _dir in ${wrksrc} ${wrksrc}/notifier/octoxbps-notifier; do
-		cd $_dir && qmake ${configure_args} \
+		cd $_dir && qmake-qt5 ${configure_args} \
 			PREFIX=/usr \
 			LIB=/usr/lib \
 			QMAKE_CFLAGS="${CFLAGS}" \

From bd4995f2028a62814e2d4c87a5d2bd46ff74bcd7 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:45:46 +0200
Subject: [PATCH 14/18] qtpass: set to broken

---
 srcpkgs/qtpass/template | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qtpass/template b/srcpkgs/qtpass/template
index 1f5780badeb..c12cbb74da0 100644
--- a/srcpkgs/qtpass/template
+++ b/srcpkgs/qtpass/template
@@ -4,8 +4,8 @@ version=1.2.3
 revision=1
 wrksrc="QtPass-${version}"
 build_style=qmake
-hostmakedepends="qt5-devel qt5-tools"
-makedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
+makedepends="qt5-devel qt5-svg-devel"
 depends="pass pwgen"
 short_desc="Multi-platform GUI for pass"
 maintainer="annejan <brouwer@annejan.com>"
@@ -15,6 +15,8 @@ homepage="https://qtpass.org/"
 distfiles="https://github.com/IJHack/${pkgname}/archive/v${version}.tar.gz"
 checksum=658b632bb06e9ad63d5076aace5fe0e57a0f7f20e0aafdfb64f86a25bdadbb07
 
+broken=yes
+
 do_install() {
 	vbin main/qtpass
 

From a240c84759aa928721a7effa11df5cb4f63317c9 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 16:56:31 +0200
Subject: [PATCH 15/18] Revert "xbps-src/chroot.sh: sanitize PATH."

This reverts commit e0e48d6f6a3e3975bd867d5ae9485ebfbb76a687.
---
 common/xbps-src/shutils/chroot.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/common/xbps-src/shutils/chroot.sh b/common/xbps-src/shutils/chroot.sh
index 17ba9dde6ca..ea8f7b62465 100644
--- a/common/xbps-src/shutils/chroot.sh
+++ b/common/xbps-src/shutils/chroot.sh
@@ -26,7 +26,7 @@ XBPS_SRC_VERSION="$XBPS_SRC_VERSION"
 
 . /etc/xbps/xbps-src.conf
 
-PATH=/void-packages:/usr/bin
+PATH=/void-packages:/usr/bin:/usr/sbin
 
 exec env -i -- SHELL=/bin/sh PATH="\$PATH" DISTCC_HOSTS="\$XBPS_DISTCC_HOSTS" DISTCC_DIR="/host/distcc" \
     ${XBPS_ARCH+XBPS_ARCH=$XBPS_ARCH} ${XBPS_CHECK_PKGS+XBPS_CHECK_PKGS=$XBPS_CHECK_PKGS} \
@@ -121,7 +121,7 @@ chroot_sync_repos() {
             ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
     fi
 
-    # if -N is set, get rid of remote repos from x86_64 (glibc).
+    # if -N is set, comment out remote repositories from xbps.conf.
     if [ -n "$XBPS_SKIP_REMOTEREPOS" ]; then
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/20-repository-remote.conf
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
@@ -198,7 +198,7 @@ chroot_handler() {
         [ -n "$XBPS_BINPKG_EXISTS" ] && arg="$arg -E"
 
         action="$arg $action"
-        env -i -- PATH="/usr/bin" SHELL=/bin/sh \
+        env -i -- PATH="/usr/bin:/usr/sbin:$PATH" SHELL=/bin/sh \
             HOME=/tmp IN_CHROOT=1 LC_COLLATE=C LANG=en_US.UTF-8 \
             SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
             XBPS_ALLOW_CHROOT_BREAKOUT="$XBPS_ALLOW_CHROOT_BREAKOUT" \

From 8b61af2c7ebcabe4162abe40af12fae5abb1a75f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 20:10:32 +0200
Subject: [PATCH 16/18] linssid: fix build for qt5.13

---
 srcpkgs/linssid/patches/project.patch     |  3 +-
 srcpkgs/linssid/patches/qwt-include.patch | 56 -----------------------
 srcpkgs/linssid/template                  |  6 ++-
 3 files changed, 7 insertions(+), 58 deletions(-)
 delete mode 100644 srcpkgs/linssid/patches/qwt-include.patch

diff --git a/srcpkgs/linssid/patches/project.patch b/srcpkgs/linssid/patches/project.patch
index a228007bb22..356419f862b 100644
--- a/srcpkgs/linssid/patches/project.patch
+++ b/srcpkgs/linssid/patches/project.patch
@@ -2,7 +2,8 @@
 +++ linssid-app/linssid-app.pro
 @@ -5,7 +5,7 @@
  CONFIG -= debug_and_release app_bundle lib_bundle
- CONFIG += release 
+-CONFIG += release
++CONFIG += release qwt
  PKGCONFIG +=
 -QT = core gui widgets svg
 +QT = core gui widgets
diff --git a/srcpkgs/linssid/patches/qwt-include.patch b/srcpkgs/linssid/patches/qwt-include.patch
deleted file mode 100644
index 04a25d42b21..00000000000
--- a/srcpkgs/linssid/patches/qwt-include.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- linssid-app/MainForm.cpp
-+++ linssid-app/MainForm.cpp
-@@ -23,14 +23,14 @@
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_symbol.h>
--#include <qwt_plot_marker.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_symbol.h>
-+#include <qwt/qwt_plot_marker.h>
- #include <QPointF>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt_scale_draw.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <sys/types.h>
-
---- linssid-app/MainForm.h
-+++ linssid-app/MainForm.h
-@@ -13,11 +13,11 @@
- #include <QEvent>
- #include <QString>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_scale_draw.h>
- #include "ui_MainForm.h"
- #include "prefsDialog.h"
- #include "Custom.h"
-
---- linssid-app/MainForm.ui
-+++ linssid-app/MainForm.ui
-@@ -757,7 +757,7 @@
-   <customwidget>
-    <class>QwtPlot</class>
-    <extends>QFrame</extends>
--   <header>qwt_plot.h</header>
-+   <header>qwt/qwt_plot.h</header>
-    <container>1</container>
-   </customwidget>
-  </customwidgets>
diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template
index 80509d71bb1..951532e1be9 100644
--- a/srcpkgs/linssid/template
+++ b/srcpkgs/linssid/template
@@ -3,7 +3,7 @@ pkgname=linssid
 version=3.6
 revision=2
 build_style=qmake
-hostmakedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
 makedepends="boost-devel qwt-devel"
 depends="qt5-svg"
 short_desc="Graphical wireless AP scanner"
@@ -12,3 +12,7 @@ license="GPL-3.0-only"
 homepage="https://sourceforge.net/projects/linssid/"
 distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}.orig.tar.gz"
 checksum=57301ee93f708f2512316668bf4e718502f37f21a5e93b68fc604a9032e3e49c
+
+pre_configure() {
+	sed -e "s%/usr/include%${XBPS_CROSS_BASE}&%g" -i linssid-app/linssid-app.pro
+}

From 4c3b0bd99af26a6ba48f8ca33e3002af01473ddb Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 21:47:21 +0200
Subject: [PATCH 17/18] dtkcore: set nocross

[ci skip]
---
 srcpkgs/dtkcore/template | 21 +--------------------
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/srcpkgs/dtkcore/template b/srcpkgs/dtkcore/template
index c2eb731d949..c12b4989980 100644
--- a/srcpkgs/dtkcore/template
+++ b/srcpkgs/dtkcore/template
@@ -18,26 +18,7 @@ if [ "$CROSS_BUILD" ];then
 	hostmakedepends+=" qt5-devel gsettings-qt-devel"
 fi
 
-pre_build() {
-	# This is needed for musl, does somehow not get build there automatically
-	make sub-tools-qmake_all
-	make -C tools sub-deepin-os-release-all
-}
-
-pre_install() {
-	# Replace the host arch binary with target arch one
-	cd tools/deepin-os-release
-	rm *.o
-	qmake ${configure_args} \
-		PREFIX=/usr \
-		LIB=/usr/lib \
-		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
-		QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
-		QMAKE_LFLAGS="${LDFLAGS}"
-	make CC="$CC" CXX="$CXX" LINK="$CXX"
-	cd ${wrksrc}
-}
+nocross="Some QMake mess"
 
 dtkcore-devel_package() {
 	short_desc+=" - development files"

From affb3a5121d14bb1c10a292f3490337b2106c336 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 22:19:33 +0200
Subject: [PATCH 18/18] common/build-style/qmake: use custom qt.conf for cross
 compiling

[ci skip]
---
 common/build-style/qmake.sh               | 31 +++++++++++++++-
 common/environment/build-style/qmake.sh   |  3 --
 srcpkgs/qt5-qmake-aarch64-config/template | 44 -----------------------
 3 files changed, 30 insertions(+), 48 deletions(-)
 delete mode 100644 common/environment/build-style/qmake.sh
 delete mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/build-style/qmake.sh b/common/build-style/qmake.sh
index ef8b87db730..d28f13df1ea 100644
--- a/common/build-style/qmake.sh
+++ b/common/build-style/qmake.sh
@@ -3,6 +3,7 @@
 #
 do_configure() {
 	local qmake
+	local qmake_args
 	if [ -x "/usr/lib/qt5/bin/qmake" ]; then
 		# Qt5 qmake
 		qmake="/usr/lib/qt5/bin/qmake"
@@ -14,7 +15,35 @@ do_configure() {
 	if [ -z "${qmake}" ]; then
 		msg_error "${pkgver}: Could not find qmake - missing in hostdepends?\n"
 	fi
-	${qmake} ${configure_args} \
+	if [ "$CROSS_BUILD" ]; then
+		cat > "${wrksrc}/qt.conf" <<_EOF
+[Paths]
+Sysroot=${XBPS_CROSS_BASE}
+Prefix=${XBPS_CROSS_BASE}/usr
+ArchData=${XBPS_CROSS_BASE}/usr/lib/qt5
+Data=${XBPS_CROSS_BASE}/usr/share/qt5
+Documentation=${XBPS_CROSS_BASE}/usr/share/doc/qt5
+Headers=${XBPS_CROSS_BASE}/usr/include/qt5
+Libraries=${XBPS_CROSS_BASE}/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=${XBPS_CROSS_BASE}/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/imports
+Qml2Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/qml
+Translations=${XBPS_CROSS_BASE}/usr/share/qt5/translations
+Settings=${XBPS_CROSS_BASE}/etc/xdg
+Examples=${XBPS_CROSS_BASE}/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+		qmake_args="-qtconf ${wrksrc}/qt.conf"
+	fi
+	${qmake} ${qmake_args} ${configure_args} \
 		PREFIX=/usr \
 		LIB=/usr/lib \
 		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
deleted file mode 100644
index f884ed13ded..00000000000
--- a/common/environment/build-style/qmake.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
-fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
deleted file mode 100644
index ba235c9615f..00000000000
--- a/srcpkgs/qt5-qmake-aarch64-config/template
+++ /dev/null
@@ -1,44 +0,0 @@
-# Template file for 'qt5-qmake-aarch64-config'
-pkgname=qt5-qmake-aarch64-config
-version=1
-revision=1
-only_for_archs="noarch"
-build_style=meta
-short_desc="Qmake cross config files"
-maintainer="John <johnz@posteo.net>"
-license="GPL-3.0-or-later"
-homepage="https://qt.io"
-
-_create_config() {
-	local _arch=$1
-	vmkdir usr/lib/qt5/bin
-	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
-[Paths]
-Sysroot=/usr/$_arch
-Prefix=/usr/$_arch/usr
-ArchData=/usr/$_arch/usr/lib/qt5
-Data=/usr/$_arch/usr/share/qt5
-Documentation=/usr/$_arch/usr/share/doc/qt5
-Headers=/usr/$_arch/usr/include/qt5
-Libraries=/usr/$_arch/usr/lib
-LibraryExecutables=/usr/lib/qt5/libexec
-Binaries=/usr/lib/qt5/bin
-Tests=/usr/$_arch/usr/tests
-Plugins=/usr/lib/qt5/plugins
-Imports=/usr/$_arch/usr/lib/qt5/imports
-Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
-Translations=/usr/$_arch/usr/share/qt5/translations
-Settings=/usr/$_arch/etc/xdg
-Examples=/usr/$_arch/usr/share/qt5/examples
-HostPrefix=/usr
-HostData=/usr/lib/qt5
-HostBinaries=/usr/lib/qt5/bin
-HostLibraries=/usr/lib
-Spec=linux-g++
-TargetSpec=linux-g++
-_EOF
-}
-
-do_install() {
-	_create_config aarch64-linux-gnu
-}

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (36 preceding siblings ...)
  2019-07-06 20:19 ` voidlinux-github
@ 2019-07-06 20:24 ` voidlinux-github
  2019-07-06 20:24 ` voidlinux-github
                   ` (10 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-06 20:24 UTC (permalink / raw)
  To: ml

[-- 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: 512811 bytes --]

From 9d82984818aafe3503853a1ef2a2a0df0c6eb895 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 01/18] 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                          |  139 +-
 50 files changed, 7807 insertions(+), 3077 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 5b1d9bf5a73..e57e39714dd 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..c84898296eb 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=8
+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
@@ -253,9 +240,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,7 +269,6 @@ 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
 			_bootstrap_gn
 		fi
@@ -307,6 +290,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 +323,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 +357,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 +378,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 +424,6 @@ do_install() {
 	cd ${wrksrc}/qtbase
 	make INSTALL_ROOT=${DESTDIR} install
 
-	vlicense ${wrksrc}/LGPL_EXCEPTION.txt
 	_cleanup_wrksrc_leak
 
 	# Symbolic links for remaining binaries
@@ -498,7 +496,10 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
+		dirs+=" qttools/src/linguist/lprodump"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -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}"
@@ -1045,7 +1052,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1099,7 +1106,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
@@ -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"
@@ -1175,6 +1182,8 @@ qt5-qmake_package() {
 		# Change -isystem to -I to avoid "#include_next <stdlib.h>" errors
 		sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \
 			-e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;'
+		find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
+			-e 's%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g' \;
 
 		# Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf
 		if [ "$CROSS_BUILD" ]; then

From 7382280fa68360f9135a42162f4c498f0bae7525 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 02/18] 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 4e5d2a6e895c56c146d3900b939f99ebfa527be1 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 03/18] 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 53e3eab8354..7efad4a68c9 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 df92aec2e2784d8279e06f4949a3239955462bac Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 04/18] 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 e5c305bd801621230388aa9ea2e69ae2a782122c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 05/18] 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 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 867b43a27737b8a436895a8e7ed415fe29f7ad3a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 06/18] New package: qt5-qmake-aarch64-config-1

[ci skip]
---
 common/environment/build-style/qmake.sh   |  3 ++
 srcpkgs/qt5-qmake-aarch64-config/template | 44 +++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 common/environment/build-style/qmake.sh
 create mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
new file mode 100644
index 00000000000..f884ed13ded
--- /dev/null
+++ b/common/environment/build-style/qmake.sh
@@ -0,0 +1,3 @@
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
+fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
new file mode 100644
index 00000000000..ba235c9615f
--- /dev/null
+++ b/srcpkgs/qt5-qmake-aarch64-config/template
@@ -0,0 +1,44 @@
+# Template file for 'qt5-qmake-aarch64-config'
+pkgname=qt5-qmake-aarch64-config
+version=1
+revision=1
+only_for_archs="noarch"
+build_style=meta
+short_desc="Qmake cross config files"
+maintainer="John <johnz@posteo.net>"
+license="GPL-3.0-or-later"
+homepage="https://qt.io"
+
+_create_config() {
+	local _arch=$1
+	vmkdir usr/lib/qt5/bin
+	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
+[Paths]
+Sysroot=/usr/$_arch
+Prefix=/usr/$_arch/usr
+ArchData=/usr/$_arch/usr/lib/qt5
+Data=/usr/$_arch/usr/share/qt5
+Documentation=/usr/$_arch/usr/share/doc/qt5
+Headers=/usr/$_arch/usr/include/qt5
+Libraries=/usr/$_arch/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=/usr/$_arch/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=/usr/$_arch/usr/lib/qt5/imports
+Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
+Translations=/usr/$_arch/usr/share/qt5/translations
+Settings=/usr/$_arch/etc/xdg
+Examples=/usr/$_arch/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+}
+
+do_install() {
+	_create_config aarch64-linux-gnu
+}

From e3649cf5e9a5cfbedd96d03baabff1167354db38 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 18:19:17 +0200
Subject: [PATCH 07/18] merkaartor: fix build with qt5.13

---
 srcpkgs/merkaartor/patches/qt5.13.patch | 11 +++++++++++
 srcpkgs/merkaartor/template             |  8 ++------
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 srcpkgs/merkaartor/patches/qt5.13.patch

diff --git a/srcpkgs/merkaartor/patches/qt5.13.patch b/srcpkgs/merkaartor/patches/qt5.13.patch
new file mode 100644
index 00000000000..7fa4f4e27a9
--- /dev/null
+++ b/srcpkgs/merkaartor/patches/qt5.13.patch
@@ -0,0 +1,11 @@
+--- src/Layers/LicenseDisplayDialog.ui	2016-09-06 00:29:45.000000000 +0200
++++ -	2019-07-06 21:20:05.476017057 +0200
+@@ -43,7 +43,7 @@
+   <customwidget>
+    <class>QWebView</class>
+    <extends>QWidget</extends>
+-   <header>QtWebKit/QWebView</header>
++   <header>QWebView</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template
index 3ee40185ab7..5e44f5f7cb1 100644
--- a/srcpkgs/merkaartor/template
+++ b/srcpkgs/merkaartor/template
@@ -4,7 +4,7 @@ version=0.18.3
 revision=9
 build_style=qmake
 configure_args="SYSTEM_QUAZIP=1 SYSTEM_QUAZIP_LDFLAGS=-lquazip5"
-hostmakedepends="qt5-qmake libgdal-tools"
+hostmakedepends="qt5-qmake libgdal-tools qt5-host-tools"
 makedepends="libgdal-devel proj-devel qt5-declarative-devel qt5-svg-devel
  qt5-tools-devel qt5-webkit-devel quazip-devel"
 short_desc="Openstreetmap map editor"
@@ -17,9 +17,5 @@ checksum=d6b3e4d982b2c7b82331bc5bc8d993d733c443250f02919c3c4dbd6924e6e947
 CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-host-tools qt5-svg-devel qt5-webkit-devel"
-	CXXFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/qt5"
-	for i in ${XBPS_CROSS_BASE}/usr/include/qt5/*; do
-		CXXFLAGS+=" -I$i"
-	done
+	hostmakedepends+=" qt5-svg-devel qt5-webkit-devel"
 fi

From 2844e802840d256d7027211d5aa6ec32846da392 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:00:38 +0200
Subject: [PATCH 08/18] cutemarked: add patch for qt5.13

---
 srcpkgs/cutemarked/patches/QAction.patch | 10 ++++++++++
 srcpkgs/cutemarked/template              |  4 ++++
 2 files changed, 14 insertions(+)
 create mode 100644 srcpkgs/cutemarked/patches/QAction.patch

diff --git a/srcpkgs/cutemarked/patches/QAction.patch b/srcpkgs/cutemarked/patches/QAction.patch
new file mode 100644
index 00000000000..abed5ad1d4f
--- /dev/null
+++ b/srcpkgs/cutemarked/patches/QAction.patch
@@ -0,0 +1,10 @@
+--- app/optionsdialog.cpp	2016-03-28 13:48:50.000000000 +0200
++++ -	2019-07-02 18:59:36.832374065 +0200
+@@ -17,6 +17,7 @@
+ #include "optionsdialog.h"
+ #include "ui_optionsdialog.h"
+ 
++#include <QAction>
+ #include <QFontComboBox>
+ #include <QItemEditorFactory>
+ #include <QKeySequence>
diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template
index 7d4cfcce17a..53997add9ef 100644
--- a/srcpkgs/cutemarked/template
+++ b/srcpkgs/cutemarked/template
@@ -15,6 +15,10 @@ homepage="http://cloose.github.io/CuteMarkEd/"
 distfiles="https://github.com/cloose/${pkgname}/archive/v${version}.tar.gz"
 checksum=78a41808c2f0452375810abdff76eeaaee012f8d1368a2b8772ec6b4d2ceeec8
 
+pre_build() {
+	lrelease app/app.pro
+}
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-devel qt5-webkit-devel"
 fi

From 9322e66a6ba14425205a84de6661d1d8615076d8 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:27:17 +0200
Subject: [PATCH 09/18] dtkwidget: rebuild against qt5.13

---
 srcpkgs/dtkwidget/patches/qt5.13.patch | 39 ++++++++++++++++++++++++++
 srcpkgs/dtkwidget/template             |  4 ++-
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/dtkwidget/patches/qt5.13.patch

diff --git a/srcpkgs/dtkwidget/patches/qt5.13.patch b/srcpkgs/dtkwidget/patches/qt5.13.patch
new file mode 100644
index 00000000000..a76621a3f3a
--- /dev/null
+++ b/srcpkgs/dtkwidget/patches/qt5.13.patch
@@ -0,0 +1,39 @@
+diff --git a/src/widgets/daboutdialog.cpp b/src/widgets/daboutdialog.cpp
+index 5c6ba91..a33fd94 100644
+--- src/widgets/daboutdialog.cpp
++++ src/widgets/daboutdialog.cpp
+@@ -575,6 +575,6 @@ void DAboutDialog::showEvent(QShowEvent *event)
+     }
+ }
+ 
+-#include "moc_daboutdialog.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_daboutdialog.cpp"
+diff --git a/src/widgets/dipv4lineedit.cpp b/src/widgets/dipv4lineedit.cpp
+index 4efe6e4..1cc68b4 100644
+--- src/widgets/dipv4lineedit.cpp
++++ src/widgets/dipv4lineedit.cpp
+@@ -530,6 +530,6 @@ bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
+     return DLineEdit::eventFilter(obj, e);
+ }
+ 
+-#include "moc_dipv4lineedit.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dipv4lineedit.cpp"
+diff --git a/src/widgets/dlistview.cpp b/src/widgets/dlistview.cpp
+index 0dcc244..523ebd5 100644
+--- src/widgets/dlistview.cpp
++++ src/widgets/dlistview.cpp
+@@ -709,6 +709,6 @@ bool DListView::edit(const QModelIndex &index, QAbstractItemView::EditTrigger tr
+     return tmp;
+ }
+ 
+-#include "moc_dlistview.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dlistview.cpp"
diff --git a/srcpkgs/dtkwidget/template b/srcpkgs/dtkwidget/template
index 7dc6547b2b7..6fbac916d9b 100644
--- a/srcpkgs/dtkwidget/template
+++ b/srcpkgs/dtkwidget/template
@@ -1,7 +1,7 @@
 # Template file for 'dtkwidget'
 pkgname=dtkwidget
 version=2.0.14
-revision=1
+revision=2
 build_style=qmake
 configure_args="DBUS_VERSION_0_4_2=YES LIB_INSTALL_DIR=/usr/lib VERSION=${version}"
 hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
@@ -21,6 +21,8 @@ if [ "$CROSS_BUILD" ]; then
 	qt5-svg-devel gsettings-qt-devel"
 fi
 
+nocross=yes
+
 dtkwidget-devel_package() {
 	depends="${sourcepkg}>=${version}_${revision} dtkcore-devel"
 	short_desc+=" - development files"

From 5a53964cbc2bfa892a87d71a2cacbb195f178eb2 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 21:43:18 +0200
Subject: [PATCH 10/18] goldendict: add patches for qt5.13

---
 srcpkgs/goldendict/patches/QAction.patch | 20 ++++++++++++++++++++
 srcpkgs/goldendict/patches/QIcon.patch   | 10 ++++++++++
 srcpkgs/goldendict/template              |  6 ++++--
 3 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/goldendict/patches/QAction.patch
 create mode 100644 srcpkgs/goldendict/patches/QIcon.patch

diff --git a/srcpkgs/goldendict/patches/QAction.patch b/srcpkgs/goldendict/patches/QAction.patch
new file mode 100644
index 00000000000..146fe34e2fa
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QAction.patch
@@ -0,0 +1,20 @@
+--- fulltextsearch.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:27:37.881036339 +0200
+@@ -1,6 +1,7 @@
+ #ifndef __FULLTEXTSEARCH_HH_INCLUDED__
+ #define __FULLTEXTSEARCH_HH_INCLUDED__
+ 
++#include <QAction>
+ #include <QSemaphore>
+ #include <QStringList>
+ #include <QRegExp>
+--- groups_widgets.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:31:52.350308868 +0200
+@@ -10,6 +10,7 @@
+ 
+ #include <QListWidget>
+ #include <QSortFilterProxyModel>
++#include <QAction>
+ 
+ #include "config.hh"
+ #include "dictionary.hh"
diff --git a/srcpkgs/goldendict/patches/QIcon.patch b/srcpkgs/goldendict/patches/QIcon.patch
new file mode 100644
index 00000000000..ea066d1946f
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QIcon.patch
@@ -0,0 +1,10 @@
+--- initializing.cc	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:26:19.088317401 +0200
+@@ -3,6 +3,7 @@
+ 
+ #include "initializing.hh"
+ #include <QCloseEvent>
++#include <QIcon>
+ 
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 )
+ #include <QtWidgets/QStyleFactory>
diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template
index de0918993c6..1d14c0bd5aa 100644
--- a/srcpkgs/goldendict/template
+++ b/srcpkgs/goldendict/template
@@ -4,18 +4,20 @@ version=1.5.0RC2
 revision=4
 wrksrc="${pkgname}-${version/RC/-RC}"
 build_style=qmake
-hostmakedepends="qt5-qmake pkg-config qt5-tools"
+hostmakedepends="qt5-qmake pkg-config qt5-host-tools"
 makedepends="tiff-devel qt5-devel libvorbis-devel zlib-devel
  libXtst-devel hunspell-devel qt5-tools-devel qt5-declarative-devel
  qt5-webkit-devel lzo-devel bzip2-devel libao-devel qt5-svg-devel
  libeb-devel qt5-x11extras-devel ffmpeg-devel"
 short_desc="A feature-rich dictionary lookup program"
 maintainer="John <johnz@posteo.net>"
-license="GPL-3"
+license="GPL-3.0-or-later"
 homepage="http://goldendict.org/"
 distfiles="https://github.com/goldendict/goldendict/archive/${version/RC/-RC}.tar.gz"
 checksum=bccee0a3d3902f8fa31e439e220a405065fff774e5f8c581be2b0743d3f83fde
 
+CXXFLAGS="-Wno-deprecated"
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-tools-devel qt5-webkit-devel qt5-host-tools qt5-svg-devel qt5-x11extras-devel"
 fi

From 9060a1778b56e01d3dc05f3b22301b3511ebd499 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 00:13:51 +0200
Subject: [PATCH 11/18] mpc-qt: change distfile to sources.voidlinux.org

the upstream github account seems to be deleted
---
 srcpkgs/mpc-qt/template | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/mpc-qt/template b/srcpkgs/mpc-qt/template
index ae808c894ef..182072df113 100644
--- a/srcpkgs/mpc-qt/template
+++ b/srcpkgs/mpc-qt/template
@@ -4,15 +4,16 @@ version=18.08
 revision=1
 build_style=qmake
 configure_args="MPCQT_VERSION=${version}"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config qt5-qmake"
 makedepends="qt5-devel qt5-x11extras-devel mpv-devel"
 short_desc="Clone of Media Player Classic reimplemented in Qt"
 maintainer="SolitudeSF <solitudesf@protonmail.com>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/cmdrkotori/mpc-qt"
-distfiles="${homepage}/archive/v${version}.tar.gz"
+#distfiles="${homepage}/archive/v${version}.tar.gz"
+distfiles="https://sources.voidlinux.org/mpc-qt-18.08/v18.08.tar.gz"
 checksum=c58fd90926773c9da8bdfc1a8e4dba0b95cbc58cee6db9981e8de94fd9534406
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake qt5-x11extras-devel"
+	hostmakedepends+=" qt5-x11extras-devel"
 fi

From 214d3321164d6a69a9f0057be816b789fb62629f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 04:00:46 +0200
Subject: [PATCH 12/18] vokoscreen: template fixup for qt5.13

---
 srcpkgs/vokoscreen/template | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/vokoscreen/template b/srcpkgs/vokoscreen/template
index d201c80cd57..3baf73f1c67 100644
--- a/srcpkgs/vokoscreen/template
+++ b/srcpkgs/vokoscreen/template
@@ -3,12 +3,16 @@ pkgname=vokoscreen
 version=2.5.0
 revision=1
 build_style=qmake
-hostmakedepends="pkg-config qt5-tools qt5-qmake"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
 makedepends="alsa-lib-devel libX11-devel libXrandr-devel qt5-devel qt5-x11extras-devel v4l-utils-devel"
 depends="ffmpeg"
 short_desc="Easy to use screencast creator"
 maintainer="Duncaen <duncaen@voidlinux.org>"
-license="GPL-2"
+license="GPL-2.0-only"
 homepage="http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"
 distfiles="https://github.com/vkohaupt/vokoscreen/archive/${version}.tar.gz"
 checksum=7f5d9abfa3b4a1f7ce657838f5169cd80a590be490dacd0ad1751853a38f4245
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-x11extras-devel"
+fi

From 418572abb51c9ea1d02729a250ce479b3c2c1c34 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:08:07 +0200
Subject: [PATCH 13/18] octoxbps: fixes for qt5.13

---
 srcpkgs/octoxbps/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/octoxbps/template b/srcpkgs/octoxbps/template
index 61a4bd50013..abb78865f69 100644
--- a/srcpkgs/octoxbps/template
+++ b/srcpkgs/octoxbps/template
@@ -15,7 +15,7 @@ checksum=6f7643bb07960d8c8f60ce70dc495f866ae60a4d6d8160a7f108f79bf53d2d22
 
 do_configure() {
 	for _dir in ${wrksrc} ${wrksrc}/notifier/octoxbps-notifier; do
-		cd $_dir && qmake ${configure_args} \
+		cd $_dir && qmake-qt5 ${configure_args} \
 			PREFIX=/usr \
 			LIB=/usr/lib \
 			QMAKE_CFLAGS="${CFLAGS}" \

From bd4995f2028a62814e2d4c87a5d2bd46ff74bcd7 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:45:46 +0200
Subject: [PATCH 14/18] qtpass: set to broken

---
 srcpkgs/qtpass/template | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qtpass/template b/srcpkgs/qtpass/template
index 1f5780badeb..c12cbb74da0 100644
--- a/srcpkgs/qtpass/template
+++ b/srcpkgs/qtpass/template
@@ -4,8 +4,8 @@ version=1.2.3
 revision=1
 wrksrc="QtPass-${version}"
 build_style=qmake
-hostmakedepends="qt5-devel qt5-tools"
-makedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
+makedepends="qt5-devel qt5-svg-devel"
 depends="pass pwgen"
 short_desc="Multi-platform GUI for pass"
 maintainer="annejan <brouwer@annejan.com>"
@@ -15,6 +15,8 @@ homepage="https://qtpass.org/"
 distfiles="https://github.com/IJHack/${pkgname}/archive/v${version}.tar.gz"
 checksum=658b632bb06e9ad63d5076aace5fe0e57a0f7f20e0aafdfb64f86a25bdadbb07
 
+broken=yes
+
 do_install() {
 	vbin main/qtpass
 

From a240c84759aa928721a7effa11df5cb4f63317c9 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 16:56:31 +0200
Subject: [PATCH 15/18] Revert "xbps-src/chroot.sh: sanitize PATH."

This reverts commit e0e48d6f6a3e3975bd867d5ae9485ebfbb76a687.
---
 common/xbps-src/shutils/chroot.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/common/xbps-src/shutils/chroot.sh b/common/xbps-src/shutils/chroot.sh
index 17ba9dde6ca..ea8f7b62465 100644
--- a/common/xbps-src/shutils/chroot.sh
+++ b/common/xbps-src/shutils/chroot.sh
@@ -26,7 +26,7 @@ XBPS_SRC_VERSION="$XBPS_SRC_VERSION"
 
 . /etc/xbps/xbps-src.conf
 
-PATH=/void-packages:/usr/bin
+PATH=/void-packages:/usr/bin:/usr/sbin
 
 exec env -i -- SHELL=/bin/sh PATH="\$PATH" DISTCC_HOSTS="\$XBPS_DISTCC_HOSTS" DISTCC_DIR="/host/distcc" \
     ${XBPS_ARCH+XBPS_ARCH=$XBPS_ARCH} ${XBPS_CHECK_PKGS+XBPS_CHECK_PKGS=$XBPS_CHECK_PKGS} \
@@ -121,7 +121,7 @@ chroot_sync_repos() {
             ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
     fi
 
-    # if -N is set, get rid of remote repos from x86_64 (glibc).
+    # if -N is set, comment out remote repositories from xbps.conf.
     if [ -n "$XBPS_SKIP_REMOTEREPOS" ]; then
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/20-repository-remote.conf
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
@@ -198,7 +198,7 @@ chroot_handler() {
         [ -n "$XBPS_BINPKG_EXISTS" ] && arg="$arg -E"
 
         action="$arg $action"
-        env -i -- PATH="/usr/bin" SHELL=/bin/sh \
+        env -i -- PATH="/usr/bin:/usr/sbin:$PATH" SHELL=/bin/sh \
             HOME=/tmp IN_CHROOT=1 LC_COLLATE=C LANG=en_US.UTF-8 \
             SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
             XBPS_ALLOW_CHROOT_BREAKOUT="$XBPS_ALLOW_CHROOT_BREAKOUT" \

From 8b61af2c7ebcabe4162abe40af12fae5abb1a75f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 20:10:32 +0200
Subject: [PATCH 16/18] linssid: fix build for qt5.13

---
 srcpkgs/linssid/patches/project.patch     |  3 +-
 srcpkgs/linssid/patches/qwt-include.patch | 56 -----------------------
 srcpkgs/linssid/template                  |  6 ++-
 3 files changed, 7 insertions(+), 58 deletions(-)
 delete mode 100644 srcpkgs/linssid/patches/qwt-include.patch

diff --git a/srcpkgs/linssid/patches/project.patch b/srcpkgs/linssid/patches/project.patch
index a228007bb22..356419f862b 100644
--- a/srcpkgs/linssid/patches/project.patch
+++ b/srcpkgs/linssid/patches/project.patch
@@ -2,7 +2,8 @@
 +++ linssid-app/linssid-app.pro
 @@ -5,7 +5,7 @@
  CONFIG -= debug_and_release app_bundle lib_bundle
- CONFIG += release 
+-CONFIG += release
++CONFIG += release qwt
  PKGCONFIG +=
 -QT = core gui widgets svg
 +QT = core gui widgets
diff --git a/srcpkgs/linssid/patches/qwt-include.patch b/srcpkgs/linssid/patches/qwt-include.patch
deleted file mode 100644
index 04a25d42b21..00000000000
--- a/srcpkgs/linssid/patches/qwt-include.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- linssid-app/MainForm.cpp
-+++ linssid-app/MainForm.cpp
-@@ -23,14 +23,14 @@
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_symbol.h>
--#include <qwt_plot_marker.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_symbol.h>
-+#include <qwt/qwt_plot_marker.h>
- #include <QPointF>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt_scale_draw.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <sys/types.h>
-
---- linssid-app/MainForm.h
-+++ linssid-app/MainForm.h
-@@ -13,11 +13,11 @@
- #include <QEvent>
- #include <QString>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_scale_draw.h>
- #include "ui_MainForm.h"
- #include "prefsDialog.h"
- #include "Custom.h"
-
---- linssid-app/MainForm.ui
-+++ linssid-app/MainForm.ui
-@@ -757,7 +757,7 @@
-   <customwidget>
-    <class>QwtPlot</class>
-    <extends>QFrame</extends>
--   <header>qwt_plot.h</header>
-+   <header>qwt/qwt_plot.h</header>
-    <container>1</container>
-   </customwidget>
-  </customwidgets>
diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template
index 80509d71bb1..951532e1be9 100644
--- a/srcpkgs/linssid/template
+++ b/srcpkgs/linssid/template
@@ -3,7 +3,7 @@ pkgname=linssid
 version=3.6
 revision=2
 build_style=qmake
-hostmakedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
 makedepends="boost-devel qwt-devel"
 depends="qt5-svg"
 short_desc="Graphical wireless AP scanner"
@@ -12,3 +12,7 @@ license="GPL-3.0-only"
 homepage="https://sourceforge.net/projects/linssid/"
 distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}.orig.tar.gz"
 checksum=57301ee93f708f2512316668bf4e718502f37f21a5e93b68fc604a9032e3e49c
+
+pre_configure() {
+	sed -e "s%/usr/include%${XBPS_CROSS_BASE}&%g" -i linssid-app/linssid-app.pro
+}

From 4c3b0bd99af26a6ba48f8ca33e3002af01473ddb Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 21:47:21 +0200
Subject: [PATCH 17/18] dtkcore: set nocross

[ci skip]
---
 srcpkgs/dtkcore/template | 21 +--------------------
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/srcpkgs/dtkcore/template b/srcpkgs/dtkcore/template
index c2eb731d949..c12b4989980 100644
--- a/srcpkgs/dtkcore/template
+++ b/srcpkgs/dtkcore/template
@@ -18,26 +18,7 @@ if [ "$CROSS_BUILD" ];then
 	hostmakedepends+=" qt5-devel gsettings-qt-devel"
 fi
 
-pre_build() {
-	# This is needed for musl, does somehow not get build there automatically
-	make sub-tools-qmake_all
-	make -C tools sub-deepin-os-release-all
-}
-
-pre_install() {
-	# Replace the host arch binary with target arch one
-	cd tools/deepin-os-release
-	rm *.o
-	qmake ${configure_args} \
-		PREFIX=/usr \
-		LIB=/usr/lib \
-		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
-		QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
-		QMAKE_LFLAGS="${LDFLAGS}"
-	make CC="$CC" CXX="$CXX" LINK="$CXX"
-	cd ${wrksrc}
-}
+nocross="Some QMake mess"
 
 dtkcore-devel_package() {
 	short_desc+=" - development files"

From aead26c2cac509e10a557c06d335c27c368c1997 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 22:19:33 +0200
Subject: [PATCH 18/18] common/build-style/qmake: use custom qt.conf for cross
 compiling

[ci skip]
---
 common/build-style/qmake.sh               | 31 +++++++++++++++-
 common/environment/build-style/qmake.sh   |  3 --
 srcpkgs/qt5-qmake-aarch64-config/template | 44 -----------------------
 3 files changed, 30 insertions(+), 48 deletions(-)
 delete mode 100644 common/environment/build-style/qmake.sh
 delete mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/build-style/qmake.sh b/common/build-style/qmake.sh
index ef8b87db730..63be5a3a568 100644
--- a/common/build-style/qmake.sh
+++ b/common/build-style/qmake.sh
@@ -3,6 +3,7 @@
 #
 do_configure() {
 	local qmake
+	local qmake_args
 	if [ -x "/usr/lib/qt5/bin/qmake" ]; then
 		# Qt5 qmake
 		qmake="/usr/lib/qt5/bin/qmake"
@@ -14,7 +15,35 @@ do_configure() {
 	if [ -z "${qmake}" ]; then
 		msg_error "${pkgver}: Could not find qmake - missing in hostdepends?\n"
 	fi
-	${qmake} ${configure_args} \
+	if [ "$CROSS_BUILD" ] && [ "$qmake" == "/usr/lib/qt5/bin/qmake" ]; then
+		cat > "${wrksrc}/qt.conf" <<_EOF
+[Paths]
+Sysroot=${XBPS_CROSS_BASE}
+Prefix=${XBPS_CROSS_BASE}/usr
+ArchData=${XBPS_CROSS_BASE}/usr/lib/qt5
+Data=${XBPS_CROSS_BASE}/usr/share/qt5
+Documentation=${XBPS_CROSS_BASE}/usr/share/doc/qt5
+Headers=${XBPS_CROSS_BASE}/usr/include/qt5
+Libraries=${XBPS_CROSS_BASE}/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=${XBPS_CROSS_BASE}/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/imports
+Qml2Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/qml
+Translations=${XBPS_CROSS_BASE}/usr/share/qt5/translations
+Settings=${XBPS_CROSS_BASE}/etc/xdg
+Examples=${XBPS_CROSS_BASE}/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+		qmake_args="-qtconf ${wrksrc}/qt.conf"
+	fi
+	${qmake} ${qmake_args} ${configure_args} \
 		PREFIX=/usr \
 		LIB=/usr/lib \
 		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
deleted file mode 100644
index f884ed13ded..00000000000
--- a/common/environment/build-style/qmake.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
-fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
deleted file mode 100644
index ba235c9615f..00000000000
--- a/srcpkgs/qt5-qmake-aarch64-config/template
+++ /dev/null
@@ -1,44 +0,0 @@
-# Template file for 'qt5-qmake-aarch64-config'
-pkgname=qt5-qmake-aarch64-config
-version=1
-revision=1
-only_for_archs="noarch"
-build_style=meta
-short_desc="Qmake cross config files"
-maintainer="John <johnz@posteo.net>"
-license="GPL-3.0-or-later"
-homepage="https://qt.io"
-
-_create_config() {
-	local _arch=$1
-	vmkdir usr/lib/qt5/bin
-	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
-[Paths]
-Sysroot=/usr/$_arch
-Prefix=/usr/$_arch/usr
-ArchData=/usr/$_arch/usr/lib/qt5
-Data=/usr/$_arch/usr/share/qt5
-Documentation=/usr/$_arch/usr/share/doc/qt5
-Headers=/usr/$_arch/usr/include/qt5
-Libraries=/usr/$_arch/usr/lib
-LibraryExecutables=/usr/lib/qt5/libexec
-Binaries=/usr/lib/qt5/bin
-Tests=/usr/$_arch/usr/tests
-Plugins=/usr/lib/qt5/plugins
-Imports=/usr/$_arch/usr/lib/qt5/imports
-Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
-Translations=/usr/$_arch/usr/share/qt5/translations
-Settings=/usr/$_arch/etc/xdg
-Examples=/usr/$_arch/usr/share/qt5/examples
-HostPrefix=/usr
-HostData=/usr/lib/qt5
-HostBinaries=/usr/lib/qt5/bin
-HostLibraries=/usr/lib
-Spec=linux-g++
-TargetSpec=linux-g++
-_EOF
-}
-
-do_install() {
-	_create_config aarch64-linux-gnu
-}

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (37 preceding siblings ...)
  2019-07-06 20:24 ` voidlinux-github
@ 2019-07-06 20:24 ` voidlinux-github
  2019-07-06 20:26 ` voidlinux-github
                   ` (9 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-06 20:24 UTC (permalink / raw)
  To: ml

[-- 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: 512811 bytes --]

From 9d82984818aafe3503853a1ef2a2a0df0c6eb895 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 01/18] 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                          |  139 +-
 50 files changed, 7807 insertions(+), 3077 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 5b1d9bf5a73..e57e39714dd 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..c84898296eb 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=8
+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
@@ -253,9 +240,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,7 +269,6 @@ 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
 			_bootstrap_gn
 		fi
@@ -307,6 +290,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 +323,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 +357,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 +378,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 +424,6 @@ do_install() {
 	cd ${wrksrc}/qtbase
 	make INSTALL_ROOT=${DESTDIR} install
 
-	vlicense ${wrksrc}/LGPL_EXCEPTION.txt
 	_cleanup_wrksrc_leak
 
 	# Symbolic links for remaining binaries
@@ -498,7 +496,10 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
+		dirs+=" qttools/src/linguist/lprodump"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -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}"
@@ -1045,7 +1052,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1099,7 +1106,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
@@ -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"
@@ -1175,6 +1182,8 @@ qt5-qmake_package() {
 		# Change -isystem to -I to avoid "#include_next <stdlib.h>" errors
 		sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \
 			-e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;'
+		find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
+			-e 's%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g' \;
 
 		# Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf
 		if [ "$CROSS_BUILD" ]; then

From 7382280fa68360f9135a42162f4c498f0bae7525 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 02/18] 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 4e5d2a6e895c56c146d3900b939f99ebfa527be1 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 03/18] 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 53e3eab8354..7efad4a68c9 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 df92aec2e2784d8279e06f4949a3239955462bac Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 04/18] 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 e5c305bd801621230388aa9ea2e69ae2a782122c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 05/18] 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 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 867b43a27737b8a436895a8e7ed415fe29f7ad3a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 06/18] New package: qt5-qmake-aarch64-config-1

[ci skip]
---
 common/environment/build-style/qmake.sh   |  3 ++
 srcpkgs/qt5-qmake-aarch64-config/template | 44 +++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 common/environment/build-style/qmake.sh
 create mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
new file mode 100644
index 00000000000..f884ed13ded
--- /dev/null
+++ b/common/environment/build-style/qmake.sh
@@ -0,0 +1,3 @@
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
+fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
new file mode 100644
index 00000000000..ba235c9615f
--- /dev/null
+++ b/srcpkgs/qt5-qmake-aarch64-config/template
@@ -0,0 +1,44 @@
+# Template file for 'qt5-qmake-aarch64-config'
+pkgname=qt5-qmake-aarch64-config
+version=1
+revision=1
+only_for_archs="noarch"
+build_style=meta
+short_desc="Qmake cross config files"
+maintainer="John <johnz@posteo.net>"
+license="GPL-3.0-or-later"
+homepage="https://qt.io"
+
+_create_config() {
+	local _arch=$1
+	vmkdir usr/lib/qt5/bin
+	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
+[Paths]
+Sysroot=/usr/$_arch
+Prefix=/usr/$_arch/usr
+ArchData=/usr/$_arch/usr/lib/qt5
+Data=/usr/$_arch/usr/share/qt5
+Documentation=/usr/$_arch/usr/share/doc/qt5
+Headers=/usr/$_arch/usr/include/qt5
+Libraries=/usr/$_arch/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=/usr/$_arch/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=/usr/$_arch/usr/lib/qt5/imports
+Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
+Translations=/usr/$_arch/usr/share/qt5/translations
+Settings=/usr/$_arch/etc/xdg
+Examples=/usr/$_arch/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+}
+
+do_install() {
+	_create_config aarch64-linux-gnu
+}

From e3649cf5e9a5cfbedd96d03baabff1167354db38 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 18:19:17 +0200
Subject: [PATCH 07/18] merkaartor: fix build with qt5.13

---
 srcpkgs/merkaartor/patches/qt5.13.patch | 11 +++++++++++
 srcpkgs/merkaartor/template             |  8 ++------
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 srcpkgs/merkaartor/patches/qt5.13.patch

diff --git a/srcpkgs/merkaartor/patches/qt5.13.patch b/srcpkgs/merkaartor/patches/qt5.13.patch
new file mode 100644
index 00000000000..7fa4f4e27a9
--- /dev/null
+++ b/srcpkgs/merkaartor/patches/qt5.13.patch
@@ -0,0 +1,11 @@
+--- src/Layers/LicenseDisplayDialog.ui	2016-09-06 00:29:45.000000000 +0200
++++ -	2019-07-06 21:20:05.476017057 +0200
+@@ -43,7 +43,7 @@
+   <customwidget>
+    <class>QWebView</class>
+    <extends>QWidget</extends>
+-   <header>QtWebKit/QWebView</header>
++   <header>QWebView</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template
index 3ee40185ab7..5e44f5f7cb1 100644
--- a/srcpkgs/merkaartor/template
+++ b/srcpkgs/merkaartor/template
@@ -4,7 +4,7 @@ version=0.18.3
 revision=9
 build_style=qmake
 configure_args="SYSTEM_QUAZIP=1 SYSTEM_QUAZIP_LDFLAGS=-lquazip5"
-hostmakedepends="qt5-qmake libgdal-tools"
+hostmakedepends="qt5-qmake libgdal-tools qt5-host-tools"
 makedepends="libgdal-devel proj-devel qt5-declarative-devel qt5-svg-devel
  qt5-tools-devel qt5-webkit-devel quazip-devel"
 short_desc="Openstreetmap map editor"
@@ -17,9 +17,5 @@ checksum=d6b3e4d982b2c7b82331bc5bc8d993d733c443250f02919c3c4dbd6924e6e947
 CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-host-tools qt5-svg-devel qt5-webkit-devel"
-	CXXFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/qt5"
-	for i in ${XBPS_CROSS_BASE}/usr/include/qt5/*; do
-		CXXFLAGS+=" -I$i"
-	done
+	hostmakedepends+=" qt5-svg-devel qt5-webkit-devel"
 fi

From 2844e802840d256d7027211d5aa6ec32846da392 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:00:38 +0200
Subject: [PATCH 08/18] cutemarked: add patch for qt5.13

---
 srcpkgs/cutemarked/patches/QAction.patch | 10 ++++++++++
 srcpkgs/cutemarked/template              |  4 ++++
 2 files changed, 14 insertions(+)
 create mode 100644 srcpkgs/cutemarked/patches/QAction.patch

diff --git a/srcpkgs/cutemarked/patches/QAction.patch b/srcpkgs/cutemarked/patches/QAction.patch
new file mode 100644
index 00000000000..abed5ad1d4f
--- /dev/null
+++ b/srcpkgs/cutemarked/patches/QAction.patch
@@ -0,0 +1,10 @@
+--- app/optionsdialog.cpp	2016-03-28 13:48:50.000000000 +0200
++++ -	2019-07-02 18:59:36.832374065 +0200
+@@ -17,6 +17,7 @@
+ #include "optionsdialog.h"
+ #include "ui_optionsdialog.h"
+ 
++#include <QAction>
+ #include <QFontComboBox>
+ #include <QItemEditorFactory>
+ #include <QKeySequence>
diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template
index 7d4cfcce17a..53997add9ef 100644
--- a/srcpkgs/cutemarked/template
+++ b/srcpkgs/cutemarked/template
@@ -15,6 +15,10 @@ homepage="http://cloose.github.io/CuteMarkEd/"
 distfiles="https://github.com/cloose/${pkgname}/archive/v${version}.tar.gz"
 checksum=78a41808c2f0452375810abdff76eeaaee012f8d1368a2b8772ec6b4d2ceeec8
 
+pre_build() {
+	lrelease app/app.pro
+}
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-devel qt5-webkit-devel"
 fi

From 9322e66a6ba14425205a84de6661d1d8615076d8 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:27:17 +0200
Subject: [PATCH 09/18] dtkwidget: rebuild against qt5.13

---
 srcpkgs/dtkwidget/patches/qt5.13.patch | 39 ++++++++++++++++++++++++++
 srcpkgs/dtkwidget/template             |  4 ++-
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/dtkwidget/patches/qt5.13.patch

diff --git a/srcpkgs/dtkwidget/patches/qt5.13.patch b/srcpkgs/dtkwidget/patches/qt5.13.patch
new file mode 100644
index 00000000000..a76621a3f3a
--- /dev/null
+++ b/srcpkgs/dtkwidget/patches/qt5.13.patch
@@ -0,0 +1,39 @@
+diff --git a/src/widgets/daboutdialog.cpp b/src/widgets/daboutdialog.cpp
+index 5c6ba91..a33fd94 100644
+--- src/widgets/daboutdialog.cpp
++++ src/widgets/daboutdialog.cpp
+@@ -575,6 +575,6 @@ void DAboutDialog::showEvent(QShowEvent *event)
+     }
+ }
+ 
+-#include "moc_daboutdialog.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_daboutdialog.cpp"
+diff --git a/src/widgets/dipv4lineedit.cpp b/src/widgets/dipv4lineedit.cpp
+index 4efe6e4..1cc68b4 100644
+--- src/widgets/dipv4lineedit.cpp
++++ src/widgets/dipv4lineedit.cpp
+@@ -530,6 +530,6 @@ bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
+     return DLineEdit::eventFilter(obj, e);
+ }
+ 
+-#include "moc_dipv4lineedit.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dipv4lineedit.cpp"
+diff --git a/src/widgets/dlistview.cpp b/src/widgets/dlistview.cpp
+index 0dcc244..523ebd5 100644
+--- src/widgets/dlistview.cpp
++++ src/widgets/dlistview.cpp
+@@ -709,6 +709,6 @@ bool DListView::edit(const QModelIndex &index, QAbstractItemView::EditTrigger tr
+     return tmp;
+ }
+ 
+-#include "moc_dlistview.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dlistview.cpp"
diff --git a/srcpkgs/dtkwidget/template b/srcpkgs/dtkwidget/template
index 7dc6547b2b7..6fbac916d9b 100644
--- a/srcpkgs/dtkwidget/template
+++ b/srcpkgs/dtkwidget/template
@@ -1,7 +1,7 @@
 # Template file for 'dtkwidget'
 pkgname=dtkwidget
 version=2.0.14
-revision=1
+revision=2
 build_style=qmake
 configure_args="DBUS_VERSION_0_4_2=YES LIB_INSTALL_DIR=/usr/lib VERSION=${version}"
 hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
@@ -21,6 +21,8 @@ if [ "$CROSS_BUILD" ]; then
 	qt5-svg-devel gsettings-qt-devel"
 fi
 
+nocross=yes
+
 dtkwidget-devel_package() {
 	depends="${sourcepkg}>=${version}_${revision} dtkcore-devel"
 	short_desc+=" - development files"

From 5a53964cbc2bfa892a87d71a2cacbb195f178eb2 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 21:43:18 +0200
Subject: [PATCH 10/18] goldendict: add patches for qt5.13

---
 srcpkgs/goldendict/patches/QAction.patch | 20 ++++++++++++++++++++
 srcpkgs/goldendict/patches/QIcon.patch   | 10 ++++++++++
 srcpkgs/goldendict/template              |  6 ++++--
 3 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/goldendict/patches/QAction.patch
 create mode 100644 srcpkgs/goldendict/patches/QIcon.patch

diff --git a/srcpkgs/goldendict/patches/QAction.patch b/srcpkgs/goldendict/patches/QAction.patch
new file mode 100644
index 00000000000..146fe34e2fa
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QAction.patch
@@ -0,0 +1,20 @@
+--- fulltextsearch.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:27:37.881036339 +0200
+@@ -1,6 +1,7 @@
+ #ifndef __FULLTEXTSEARCH_HH_INCLUDED__
+ #define __FULLTEXTSEARCH_HH_INCLUDED__
+ 
++#include <QAction>
+ #include <QSemaphore>
+ #include <QStringList>
+ #include <QRegExp>
+--- groups_widgets.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:31:52.350308868 +0200
+@@ -10,6 +10,7 @@
+ 
+ #include <QListWidget>
+ #include <QSortFilterProxyModel>
++#include <QAction>
+ 
+ #include "config.hh"
+ #include "dictionary.hh"
diff --git a/srcpkgs/goldendict/patches/QIcon.patch b/srcpkgs/goldendict/patches/QIcon.patch
new file mode 100644
index 00000000000..ea066d1946f
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QIcon.patch
@@ -0,0 +1,10 @@
+--- initializing.cc	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:26:19.088317401 +0200
+@@ -3,6 +3,7 @@
+ 
+ #include "initializing.hh"
+ #include <QCloseEvent>
++#include <QIcon>
+ 
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 )
+ #include <QtWidgets/QStyleFactory>
diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template
index de0918993c6..1d14c0bd5aa 100644
--- a/srcpkgs/goldendict/template
+++ b/srcpkgs/goldendict/template
@@ -4,18 +4,20 @@ version=1.5.0RC2
 revision=4
 wrksrc="${pkgname}-${version/RC/-RC}"
 build_style=qmake
-hostmakedepends="qt5-qmake pkg-config qt5-tools"
+hostmakedepends="qt5-qmake pkg-config qt5-host-tools"
 makedepends="tiff-devel qt5-devel libvorbis-devel zlib-devel
  libXtst-devel hunspell-devel qt5-tools-devel qt5-declarative-devel
  qt5-webkit-devel lzo-devel bzip2-devel libao-devel qt5-svg-devel
  libeb-devel qt5-x11extras-devel ffmpeg-devel"
 short_desc="A feature-rich dictionary lookup program"
 maintainer="John <johnz@posteo.net>"
-license="GPL-3"
+license="GPL-3.0-or-later"
 homepage="http://goldendict.org/"
 distfiles="https://github.com/goldendict/goldendict/archive/${version/RC/-RC}.tar.gz"
 checksum=bccee0a3d3902f8fa31e439e220a405065fff774e5f8c581be2b0743d3f83fde
 
+CXXFLAGS="-Wno-deprecated"
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-tools-devel qt5-webkit-devel qt5-host-tools qt5-svg-devel qt5-x11extras-devel"
 fi

From 9060a1778b56e01d3dc05f3b22301b3511ebd499 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 00:13:51 +0200
Subject: [PATCH 11/18] mpc-qt: change distfile to sources.voidlinux.org

the upstream github account seems to be deleted
---
 srcpkgs/mpc-qt/template | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/mpc-qt/template b/srcpkgs/mpc-qt/template
index ae808c894ef..182072df113 100644
--- a/srcpkgs/mpc-qt/template
+++ b/srcpkgs/mpc-qt/template
@@ -4,15 +4,16 @@ version=18.08
 revision=1
 build_style=qmake
 configure_args="MPCQT_VERSION=${version}"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config qt5-qmake"
 makedepends="qt5-devel qt5-x11extras-devel mpv-devel"
 short_desc="Clone of Media Player Classic reimplemented in Qt"
 maintainer="SolitudeSF <solitudesf@protonmail.com>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/cmdrkotori/mpc-qt"
-distfiles="${homepage}/archive/v${version}.tar.gz"
+#distfiles="${homepage}/archive/v${version}.tar.gz"
+distfiles="https://sources.voidlinux.org/mpc-qt-18.08/v18.08.tar.gz"
 checksum=c58fd90926773c9da8bdfc1a8e4dba0b95cbc58cee6db9981e8de94fd9534406
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake qt5-x11extras-devel"
+	hostmakedepends+=" qt5-x11extras-devel"
 fi

From 214d3321164d6a69a9f0057be816b789fb62629f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 04:00:46 +0200
Subject: [PATCH 12/18] vokoscreen: template fixup for qt5.13

---
 srcpkgs/vokoscreen/template | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/vokoscreen/template b/srcpkgs/vokoscreen/template
index d201c80cd57..3baf73f1c67 100644
--- a/srcpkgs/vokoscreen/template
+++ b/srcpkgs/vokoscreen/template
@@ -3,12 +3,16 @@ pkgname=vokoscreen
 version=2.5.0
 revision=1
 build_style=qmake
-hostmakedepends="pkg-config qt5-tools qt5-qmake"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
 makedepends="alsa-lib-devel libX11-devel libXrandr-devel qt5-devel qt5-x11extras-devel v4l-utils-devel"
 depends="ffmpeg"
 short_desc="Easy to use screencast creator"
 maintainer="Duncaen <duncaen@voidlinux.org>"
-license="GPL-2"
+license="GPL-2.0-only"
 homepage="http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"
 distfiles="https://github.com/vkohaupt/vokoscreen/archive/${version}.tar.gz"
 checksum=7f5d9abfa3b4a1f7ce657838f5169cd80a590be490dacd0ad1751853a38f4245
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-x11extras-devel"
+fi

From 418572abb51c9ea1d02729a250ce479b3c2c1c34 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:08:07 +0200
Subject: [PATCH 13/18] octoxbps: fixes for qt5.13

---
 srcpkgs/octoxbps/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/octoxbps/template b/srcpkgs/octoxbps/template
index 61a4bd50013..abb78865f69 100644
--- a/srcpkgs/octoxbps/template
+++ b/srcpkgs/octoxbps/template
@@ -15,7 +15,7 @@ checksum=6f7643bb07960d8c8f60ce70dc495f866ae60a4d6d8160a7f108f79bf53d2d22
 
 do_configure() {
 	for _dir in ${wrksrc} ${wrksrc}/notifier/octoxbps-notifier; do
-		cd $_dir && qmake ${configure_args} \
+		cd $_dir && qmake-qt5 ${configure_args} \
 			PREFIX=/usr \
 			LIB=/usr/lib \
 			QMAKE_CFLAGS="${CFLAGS}" \

From bd4995f2028a62814e2d4c87a5d2bd46ff74bcd7 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:45:46 +0200
Subject: [PATCH 14/18] qtpass: set to broken

---
 srcpkgs/qtpass/template | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qtpass/template b/srcpkgs/qtpass/template
index 1f5780badeb..c12cbb74da0 100644
--- a/srcpkgs/qtpass/template
+++ b/srcpkgs/qtpass/template
@@ -4,8 +4,8 @@ version=1.2.3
 revision=1
 wrksrc="QtPass-${version}"
 build_style=qmake
-hostmakedepends="qt5-devel qt5-tools"
-makedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
+makedepends="qt5-devel qt5-svg-devel"
 depends="pass pwgen"
 short_desc="Multi-platform GUI for pass"
 maintainer="annejan <brouwer@annejan.com>"
@@ -15,6 +15,8 @@ homepage="https://qtpass.org/"
 distfiles="https://github.com/IJHack/${pkgname}/archive/v${version}.tar.gz"
 checksum=658b632bb06e9ad63d5076aace5fe0e57a0f7f20e0aafdfb64f86a25bdadbb07
 
+broken=yes
+
 do_install() {
 	vbin main/qtpass
 

From a240c84759aa928721a7effa11df5cb4f63317c9 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 16:56:31 +0200
Subject: [PATCH 15/18] Revert "xbps-src/chroot.sh: sanitize PATH."

This reverts commit e0e48d6f6a3e3975bd867d5ae9485ebfbb76a687.
---
 common/xbps-src/shutils/chroot.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/common/xbps-src/shutils/chroot.sh b/common/xbps-src/shutils/chroot.sh
index 17ba9dde6ca..ea8f7b62465 100644
--- a/common/xbps-src/shutils/chroot.sh
+++ b/common/xbps-src/shutils/chroot.sh
@@ -26,7 +26,7 @@ XBPS_SRC_VERSION="$XBPS_SRC_VERSION"
 
 . /etc/xbps/xbps-src.conf
 
-PATH=/void-packages:/usr/bin
+PATH=/void-packages:/usr/bin:/usr/sbin
 
 exec env -i -- SHELL=/bin/sh PATH="\$PATH" DISTCC_HOSTS="\$XBPS_DISTCC_HOSTS" DISTCC_DIR="/host/distcc" \
     ${XBPS_ARCH+XBPS_ARCH=$XBPS_ARCH} ${XBPS_CHECK_PKGS+XBPS_CHECK_PKGS=$XBPS_CHECK_PKGS} \
@@ -121,7 +121,7 @@ chroot_sync_repos() {
             ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
     fi
 
-    # if -N is set, get rid of remote repos from x86_64 (glibc).
+    # if -N is set, comment out remote repositories from xbps.conf.
     if [ -n "$XBPS_SKIP_REMOTEREPOS" ]; then
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/20-repository-remote.conf
         rm -f ${XBPS_MASTERDIR}/etc/xbps.d/22-repository-remote-x86_64.conf
@@ -198,7 +198,7 @@ chroot_handler() {
         [ -n "$XBPS_BINPKG_EXISTS" ] && arg="$arg -E"
 
         action="$arg $action"
-        env -i -- PATH="/usr/bin" SHELL=/bin/sh \
+        env -i -- PATH="/usr/bin:/usr/sbin:$PATH" SHELL=/bin/sh \
             HOME=/tmp IN_CHROOT=1 LC_COLLATE=C LANG=en_US.UTF-8 \
             SOURCE_DATE_EPOCH="$SOURCE_DATE_EPOCH" \
             XBPS_ALLOW_CHROOT_BREAKOUT="$XBPS_ALLOW_CHROOT_BREAKOUT" \

From 8b61af2c7ebcabe4162abe40af12fae5abb1a75f Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 20:10:32 +0200
Subject: [PATCH 16/18] linssid: fix build for qt5.13

---
 srcpkgs/linssid/patches/project.patch     |  3 +-
 srcpkgs/linssid/patches/qwt-include.patch | 56 -----------------------
 srcpkgs/linssid/template                  |  6 ++-
 3 files changed, 7 insertions(+), 58 deletions(-)
 delete mode 100644 srcpkgs/linssid/patches/qwt-include.patch

diff --git a/srcpkgs/linssid/patches/project.patch b/srcpkgs/linssid/patches/project.patch
index a228007bb22..356419f862b 100644
--- a/srcpkgs/linssid/patches/project.patch
+++ b/srcpkgs/linssid/patches/project.patch
@@ -2,7 +2,8 @@
 +++ linssid-app/linssid-app.pro
 @@ -5,7 +5,7 @@
  CONFIG -= debug_and_release app_bundle lib_bundle
- CONFIG += release 
+-CONFIG += release
++CONFIG += release qwt
  PKGCONFIG +=
 -QT = core gui widgets svg
 +QT = core gui widgets
diff --git a/srcpkgs/linssid/patches/qwt-include.patch b/srcpkgs/linssid/patches/qwt-include.patch
deleted file mode 100644
index 04a25d42b21..00000000000
--- a/srcpkgs/linssid/patches/qwt-include.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- linssid-app/MainForm.cpp
-+++ linssid-app/MainForm.cpp
-@@ -23,14 +23,14 @@
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_symbol.h>
--#include <qwt_plot_marker.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_symbol.h>
-+#include <qwt/qwt_plot_marker.h>
- #include <QPointF>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt_scale_draw.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <sys/types.h>
-
---- linssid-app/MainForm.h
-+++ linssid-app/MainForm.h
-@@ -13,11 +13,11 @@
- #include <QEvent>
- #include <QString>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_scale_draw.h>
- #include "ui_MainForm.h"
- #include "prefsDialog.h"
- #include "Custom.h"
-
---- linssid-app/MainForm.ui
-+++ linssid-app/MainForm.ui
-@@ -757,7 +757,7 @@
-   <customwidget>
-    <class>QwtPlot</class>
-    <extends>QFrame</extends>
--   <header>qwt_plot.h</header>
-+   <header>qwt/qwt_plot.h</header>
-    <container>1</container>
-   </customwidget>
-  </customwidgets>
diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template
index 80509d71bb1..951532e1be9 100644
--- a/srcpkgs/linssid/template
+++ b/srcpkgs/linssid/template
@@ -3,7 +3,7 @@ pkgname=linssid
 version=3.6
 revision=2
 build_style=qmake
-hostmakedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
 makedepends="boost-devel qwt-devel"
 depends="qt5-svg"
 short_desc="Graphical wireless AP scanner"
@@ -12,3 +12,7 @@ license="GPL-3.0-only"
 homepage="https://sourceforge.net/projects/linssid/"
 distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}.orig.tar.gz"
 checksum=57301ee93f708f2512316668bf4e718502f37f21a5e93b68fc604a9032e3e49c
+
+pre_configure() {
+	sed -e "s%/usr/include%${XBPS_CROSS_BASE}&%g" -i linssid-app/linssid-app.pro
+}

From 4c3b0bd99af26a6ba48f8ca33e3002af01473ddb Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 21:47:21 +0200
Subject: [PATCH 17/18] dtkcore: set nocross

[ci skip]
---
 srcpkgs/dtkcore/template | 21 +--------------------
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/srcpkgs/dtkcore/template b/srcpkgs/dtkcore/template
index c2eb731d949..c12b4989980 100644
--- a/srcpkgs/dtkcore/template
+++ b/srcpkgs/dtkcore/template
@@ -18,26 +18,7 @@ if [ "$CROSS_BUILD" ];then
 	hostmakedepends+=" qt5-devel gsettings-qt-devel"
 fi
 
-pre_build() {
-	# This is needed for musl, does somehow not get build there automatically
-	make sub-tools-qmake_all
-	make -C tools sub-deepin-os-release-all
-}
-
-pre_install() {
-	# Replace the host arch binary with target arch one
-	cd tools/deepin-os-release
-	rm *.o
-	qmake ${configure_args} \
-		PREFIX=/usr \
-		LIB=/usr/lib \
-		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
-		QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
-		QMAKE_LFLAGS="${LDFLAGS}"
-	make CC="$CC" CXX="$CXX" LINK="$CXX"
-	cd ${wrksrc}
-}
+nocross="Some QMake mess"
 
 dtkcore-devel_package() {
 	short_desc+=" - development files"

From aead26c2cac509e10a557c06d335c27c368c1997 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 22:19:33 +0200
Subject: [PATCH 18/18] common/build-style/qmake: use custom qt.conf for cross
 compiling

[ci skip]
---
 common/build-style/qmake.sh               | 31 +++++++++++++++-
 common/environment/build-style/qmake.sh   |  3 --
 srcpkgs/qt5-qmake-aarch64-config/template | 44 -----------------------
 3 files changed, 30 insertions(+), 48 deletions(-)
 delete mode 100644 common/environment/build-style/qmake.sh
 delete mode 100644 srcpkgs/qt5-qmake-aarch64-config/template

diff --git a/common/build-style/qmake.sh b/common/build-style/qmake.sh
index ef8b87db730..63be5a3a568 100644
--- a/common/build-style/qmake.sh
+++ b/common/build-style/qmake.sh
@@ -3,6 +3,7 @@
 #
 do_configure() {
 	local qmake
+	local qmake_args
 	if [ -x "/usr/lib/qt5/bin/qmake" ]; then
 		# Qt5 qmake
 		qmake="/usr/lib/qt5/bin/qmake"
@@ -14,7 +15,35 @@ do_configure() {
 	if [ -z "${qmake}" ]; then
 		msg_error "${pkgver}: Could not find qmake - missing in hostdepends?\n"
 	fi
-	${qmake} ${configure_args} \
+	if [ "$CROSS_BUILD" ] && [ "$qmake" == "/usr/lib/qt5/bin/qmake" ]; then
+		cat > "${wrksrc}/qt.conf" <<_EOF
+[Paths]
+Sysroot=${XBPS_CROSS_BASE}
+Prefix=${XBPS_CROSS_BASE}/usr
+ArchData=${XBPS_CROSS_BASE}/usr/lib/qt5
+Data=${XBPS_CROSS_BASE}/usr/share/qt5
+Documentation=${XBPS_CROSS_BASE}/usr/share/doc/qt5
+Headers=${XBPS_CROSS_BASE}/usr/include/qt5
+Libraries=${XBPS_CROSS_BASE}/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=${XBPS_CROSS_BASE}/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/imports
+Qml2Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/qml
+Translations=${XBPS_CROSS_BASE}/usr/share/qt5/translations
+Settings=${XBPS_CROSS_BASE}/etc/xdg
+Examples=${XBPS_CROSS_BASE}/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+		qmake_args="-qtconf ${wrksrc}/qt.conf"
+	fi
+	${qmake} ${qmake_args} ${configure_args} \
 		PREFIX=/usr \
 		LIB=/usr/lib \
 		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
diff --git a/common/environment/build-style/qmake.sh b/common/environment/build-style/qmake.sh
deleted file mode 100644
index f884ed13ded..00000000000
--- a/common/environment/build-style/qmake.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake-${XBPS_TARGET_MACHINE}-config"
-fi
diff --git a/srcpkgs/qt5-qmake-aarch64-config/template b/srcpkgs/qt5-qmake-aarch64-config/template
deleted file mode 100644
index ba235c9615f..00000000000
--- a/srcpkgs/qt5-qmake-aarch64-config/template
+++ /dev/null
@@ -1,44 +0,0 @@
-# Template file for 'qt5-qmake-aarch64-config'
-pkgname=qt5-qmake-aarch64-config
-version=1
-revision=1
-only_for_archs="noarch"
-build_style=meta
-short_desc="Qmake cross config files"
-maintainer="John <johnz@posteo.net>"
-license="GPL-3.0-or-later"
-homepage="https://qt.io"
-
-_create_config() {
-	local _arch=$1
-	vmkdir usr/lib/qt5/bin
-	cat > "${DESTDIR}/usr/lib/qt5/bin/qt.conf" <<_EOF
-[Paths]
-Sysroot=/usr/$_arch
-Prefix=/usr/$_arch/usr
-ArchData=/usr/$_arch/usr/lib/qt5
-Data=/usr/$_arch/usr/share/qt5
-Documentation=/usr/$_arch/usr/share/doc/qt5
-Headers=/usr/$_arch/usr/include/qt5
-Libraries=/usr/$_arch/usr/lib
-LibraryExecutables=/usr/lib/qt5/libexec
-Binaries=/usr/lib/qt5/bin
-Tests=/usr/$_arch/usr/tests
-Plugins=/usr/lib/qt5/plugins
-Imports=/usr/$_arch/usr/lib/qt5/imports
-Qml2Imports=/usr/$_arch/usr/lib/qt5/qml
-Translations=/usr/$_arch/usr/share/qt5/translations
-Settings=/usr/$_arch/etc/xdg
-Examples=/usr/$_arch/usr/share/qt5/examples
-HostPrefix=/usr
-HostData=/usr/lib/qt5
-HostBinaries=/usr/lib/qt5/bin
-HostLibraries=/usr/lib
-Spec=linux-g++
-TargetSpec=linux-g++
-_EOF
-}
-
-do_install() {
-	_create_config aarch64-linux-gnu
-}

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (38 preceding siblings ...)
  2019-07-06 20:24 ` voidlinux-github
@ 2019-07-06 20:26 ` voidlinux-github
  2019-07-10  1:22 ` [PR PATCH] [Updated] " voidlinux-github
                   ` (8 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-06 20:26 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 302 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-508951617
Comment:
Good news, qmake seems to accept `-qtconf` properly so I can add it in the build-style. qtpass seems to be broken and requires patching, need to look into it.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (39 preceding siblings ...)
  2019-07-06 20:26 ` voidlinux-github
@ 2019-07-10  1:22 ` voidlinux-github
  2019-07-10  1:22 ` voidlinux-github
                   ` (7 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-10  1:22 UTC (permalink / raw)
  To: ml

[-- 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: 509973 bytes --]

From 891ada3ec16a63d876c53f02070ba7a15f944eab Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 01/16] 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                          |  143 +-
 50 files changed, 7810 insertions(+), 3078 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 7629d868216..68468ef1413 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..bac09fe26a3 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=8
+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
@@ -253,9 +240,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,7 +269,6 @@ 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
 			_bootstrap_gn
 		fi
@@ -307,6 +290,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 +323,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 +357,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 +378,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 +424,6 @@ do_install() {
 	cd ${wrksrc}/qtbase
 	make INSTALL_ROOT=${DESTDIR} install
 
-	vlicense ${wrksrc}/LGPL_EXCEPTION.txt
 	_cleanup_wrksrc_leak
 
 	# Symbolic links for remaining binaries
@@ -498,7 +496,10 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
+		dirs+=" qttools/src/linguist/lprodump"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -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}"
@@ -775,7 +782,7 @@ qt5-quickcontrols2_package() {
 
 qt5-remoteobjects-devel_package() {
 	short_desc+=" - Remote Objects (development)"
-	depends="qt5-quickcontrols2-${version}_${revision} qt5-devel-${version}_${revision}"
+	depends="qt5-remoteobjects-${version}_${revision} qt5-devel-${version}_${revision}"
 	pkg_install() {
 		_install_devel qtremoteobjects
 	}
@@ -1045,7 +1052,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1099,7 +1106,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
@@ -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"
@@ -1175,6 +1182,10 @@ qt5-qmake_package() {
 		# Change -isystem to -I to avoid "#include_next <stdlib.h>" errors
 		sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \
 			-e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;'
+		find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
+			-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' \;
 
 		# Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf
 		if [ "$CROSS_BUILD" ]; then

From 78e646ee808af3979cd54ef6847565ce3d039d53 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 02/16] 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 45b0a1850663f4674d728dcb0681480af99b181a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 03/16] telegram-desktop: rebuild for qt5-5.13.0

---
 srcpkgs/telegram-desktop/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/telegram-desktop/template b/srcpkgs/telegram-desktop/template
index f1443933130..38d2da354d8 100644
--- a/srcpkgs/telegram-desktop/template
+++ b/srcpkgs/telegram-desktop/template
@@ -1,7 +1,7 @@
 # Template file for 'telegram-desktop'
 pkgname=telegram-desktop
 version=1.7.14
-revision=1
+revision=2
 _libtgvoip_commit=0e92a22746d15157bea46faddd61b79e9964275a
 _GSL_commit=d846fe50a3f0bb7767c7e087a05f4be95f4da0ec
 _variant_commit=550ac2f159ca883d360c196149b466955c77a573
@@ -18,7 +18,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 liblz4-devel rlottie-devel"
-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 7290295d7162081ba87e152327af905d10487505 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 04/16] 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 9e72e9cb36fd9fbbab75834225452a66d8415ba9 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 05/16] 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 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 101d28bc1b01bbdc2073249dfcb84087946f386c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 06/16] common/build-style/qmake: use custom qt.conf for cross
 compiling

[ci skip]
---
 common/build-style/qmake.sh | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/common/build-style/qmake.sh b/common/build-style/qmake.sh
index ef8b87db730..63be5a3a568 100644
--- a/common/build-style/qmake.sh
+++ b/common/build-style/qmake.sh
@@ -3,6 +3,7 @@
 #
 do_configure() {
 	local qmake
+	local qmake_args
 	if [ -x "/usr/lib/qt5/bin/qmake" ]; then
 		# Qt5 qmake
 		qmake="/usr/lib/qt5/bin/qmake"
@@ -14,7 +15,35 @@ do_configure() {
 	if [ -z "${qmake}" ]; then
 		msg_error "${pkgver}: Could not find qmake - missing in hostdepends?\n"
 	fi
-	${qmake} ${configure_args} \
+	if [ "$CROSS_BUILD" ] && [ "$qmake" == "/usr/lib/qt5/bin/qmake" ]; then
+		cat > "${wrksrc}/qt.conf" <<_EOF
+[Paths]
+Sysroot=${XBPS_CROSS_BASE}
+Prefix=${XBPS_CROSS_BASE}/usr
+ArchData=${XBPS_CROSS_BASE}/usr/lib/qt5
+Data=${XBPS_CROSS_BASE}/usr/share/qt5
+Documentation=${XBPS_CROSS_BASE}/usr/share/doc/qt5
+Headers=${XBPS_CROSS_BASE}/usr/include/qt5
+Libraries=${XBPS_CROSS_BASE}/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=${XBPS_CROSS_BASE}/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/imports
+Qml2Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/qml
+Translations=${XBPS_CROSS_BASE}/usr/share/qt5/translations
+Settings=${XBPS_CROSS_BASE}/etc/xdg
+Examples=${XBPS_CROSS_BASE}/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+		qmake_args="-qtconf ${wrksrc}/qt.conf"
+	fi
+	${qmake} ${qmake_args} ${configure_args} \
 		PREFIX=/usr \
 		LIB=/usr/lib \
 		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \

From b7f952f40d8149ab3af7d400bc18693d433a59a8 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 18:19:17 +0200
Subject: [PATCH 07/16] merkaartor: fix build with qt5.13

---
 srcpkgs/merkaartor/patches/qt5.13.patch | 11 +++++++++++
 srcpkgs/merkaartor/template             |  8 ++------
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 srcpkgs/merkaartor/patches/qt5.13.patch

diff --git a/srcpkgs/merkaartor/patches/qt5.13.patch b/srcpkgs/merkaartor/patches/qt5.13.patch
new file mode 100644
index 00000000000..7fa4f4e27a9
--- /dev/null
+++ b/srcpkgs/merkaartor/patches/qt5.13.patch
@@ -0,0 +1,11 @@
+--- src/Layers/LicenseDisplayDialog.ui	2016-09-06 00:29:45.000000000 +0200
++++ -	2019-07-06 21:20:05.476017057 +0200
+@@ -43,7 +43,7 @@
+   <customwidget>
+    <class>QWebView</class>
+    <extends>QWidget</extends>
+-   <header>QtWebKit/QWebView</header>
++   <header>QWebView</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template
index 3ee40185ab7..5e44f5f7cb1 100644
--- a/srcpkgs/merkaartor/template
+++ b/srcpkgs/merkaartor/template
@@ -4,7 +4,7 @@ version=0.18.3
 revision=9
 build_style=qmake
 configure_args="SYSTEM_QUAZIP=1 SYSTEM_QUAZIP_LDFLAGS=-lquazip5"
-hostmakedepends="qt5-qmake libgdal-tools"
+hostmakedepends="qt5-qmake libgdal-tools qt5-host-tools"
 makedepends="libgdal-devel proj-devel qt5-declarative-devel qt5-svg-devel
  qt5-tools-devel qt5-webkit-devel quazip-devel"
 short_desc="Openstreetmap map editor"
@@ -17,9 +17,5 @@ checksum=d6b3e4d982b2c7b82331bc5bc8d993d733c443250f02919c3c4dbd6924e6e947
 CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-host-tools qt5-svg-devel qt5-webkit-devel"
-	CXXFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/qt5"
-	for i in ${XBPS_CROSS_BASE}/usr/include/qt5/*; do
-		CXXFLAGS+=" -I$i"
-	done
+	hostmakedepends+=" qt5-svg-devel qt5-webkit-devel"
 fi

From b226f2fc8d45638f6fd6d1e7e2da341be40485aa Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:00:38 +0200
Subject: [PATCH 08/16] cutemarked: add patch for qt5.13

---
 srcpkgs/cutemarked/patches/QAction.patch | 10 ++++++++++
 srcpkgs/cutemarked/template              |  4 ++++
 2 files changed, 14 insertions(+)
 create mode 100644 srcpkgs/cutemarked/patches/QAction.patch

diff --git a/srcpkgs/cutemarked/patches/QAction.patch b/srcpkgs/cutemarked/patches/QAction.patch
new file mode 100644
index 00000000000..abed5ad1d4f
--- /dev/null
+++ b/srcpkgs/cutemarked/patches/QAction.patch
@@ -0,0 +1,10 @@
+--- app/optionsdialog.cpp	2016-03-28 13:48:50.000000000 +0200
++++ -	2019-07-02 18:59:36.832374065 +0200
+@@ -17,6 +17,7 @@
+ #include "optionsdialog.h"
+ #include "ui_optionsdialog.h"
+ 
++#include <QAction>
+ #include <QFontComboBox>
+ #include <QItemEditorFactory>
+ #include <QKeySequence>
diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template
index 7d4cfcce17a..53997add9ef 100644
--- a/srcpkgs/cutemarked/template
+++ b/srcpkgs/cutemarked/template
@@ -15,6 +15,10 @@ homepage="http://cloose.github.io/CuteMarkEd/"
 distfiles="https://github.com/cloose/${pkgname}/archive/v${version}.tar.gz"
 checksum=78a41808c2f0452375810abdff76eeaaee012f8d1368a2b8772ec6b4d2ceeec8
 
+pre_build() {
+	lrelease app/app.pro
+}
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-devel qt5-webkit-devel"
 fi

From c926fb4441ec9bf5f358e13eeb5f6f939315fa62 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:27:17 +0200
Subject: [PATCH 09/16] dtkwidget: rebuild against qt5.13

---
 srcpkgs/dtkwidget/patches/qt5.13.patch | 39 ++++++++++++++++++++++++++
 srcpkgs/dtkwidget/template             |  4 ++-
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/dtkwidget/patches/qt5.13.patch

diff --git a/srcpkgs/dtkwidget/patches/qt5.13.patch b/srcpkgs/dtkwidget/patches/qt5.13.patch
new file mode 100644
index 00000000000..a76621a3f3a
--- /dev/null
+++ b/srcpkgs/dtkwidget/patches/qt5.13.patch
@@ -0,0 +1,39 @@
+diff --git a/src/widgets/daboutdialog.cpp b/src/widgets/daboutdialog.cpp
+index 5c6ba91..a33fd94 100644
+--- src/widgets/daboutdialog.cpp
++++ src/widgets/daboutdialog.cpp
+@@ -575,6 +575,6 @@ void DAboutDialog::showEvent(QShowEvent *event)
+     }
+ }
+ 
+-#include "moc_daboutdialog.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_daboutdialog.cpp"
+diff --git a/src/widgets/dipv4lineedit.cpp b/src/widgets/dipv4lineedit.cpp
+index 4efe6e4..1cc68b4 100644
+--- src/widgets/dipv4lineedit.cpp
++++ src/widgets/dipv4lineedit.cpp
+@@ -530,6 +530,6 @@ bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
+     return DLineEdit::eventFilter(obj, e);
+ }
+ 
+-#include "moc_dipv4lineedit.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dipv4lineedit.cpp"
+diff --git a/src/widgets/dlistview.cpp b/src/widgets/dlistview.cpp
+index 0dcc244..523ebd5 100644
+--- src/widgets/dlistview.cpp
++++ src/widgets/dlistview.cpp
+@@ -709,6 +709,6 @@ bool DListView::edit(const QModelIndex &index, QAbstractItemView::EditTrigger tr
+     return tmp;
+ }
+ 
+-#include "moc_dlistview.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dlistview.cpp"
diff --git a/srcpkgs/dtkwidget/template b/srcpkgs/dtkwidget/template
index 7dc6547b2b7..6fbac916d9b 100644
--- a/srcpkgs/dtkwidget/template
+++ b/srcpkgs/dtkwidget/template
@@ -1,7 +1,7 @@
 # Template file for 'dtkwidget'
 pkgname=dtkwidget
 version=2.0.14
-revision=1
+revision=2
 build_style=qmake
 configure_args="DBUS_VERSION_0_4_2=YES LIB_INSTALL_DIR=/usr/lib VERSION=${version}"
 hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
@@ -21,6 +21,8 @@ if [ "$CROSS_BUILD" ]; then
 	qt5-svg-devel gsettings-qt-devel"
 fi
 
+nocross=yes
+
 dtkwidget-devel_package() {
 	depends="${sourcepkg}>=${version}_${revision} dtkcore-devel"
 	short_desc+=" - development files"

From add2effd942fb934669fe30bec582559f44c09ac Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 21:43:18 +0200
Subject: [PATCH 10/16] goldendict: add patches for qt5.13

---
 srcpkgs/goldendict/patches/QAction.patch | 20 ++++++++++++++++++++
 srcpkgs/goldendict/patches/QIcon.patch   | 10 ++++++++++
 srcpkgs/goldendict/template              |  6 ++++--
 3 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/goldendict/patches/QAction.patch
 create mode 100644 srcpkgs/goldendict/patches/QIcon.patch

diff --git a/srcpkgs/goldendict/patches/QAction.patch b/srcpkgs/goldendict/patches/QAction.patch
new file mode 100644
index 00000000000..146fe34e2fa
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QAction.patch
@@ -0,0 +1,20 @@
+--- fulltextsearch.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:27:37.881036339 +0200
+@@ -1,6 +1,7 @@
+ #ifndef __FULLTEXTSEARCH_HH_INCLUDED__
+ #define __FULLTEXTSEARCH_HH_INCLUDED__
+ 
++#include <QAction>
+ #include <QSemaphore>
+ #include <QStringList>
+ #include <QRegExp>
+--- groups_widgets.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:31:52.350308868 +0200
+@@ -10,6 +10,7 @@
+ 
+ #include <QListWidget>
+ #include <QSortFilterProxyModel>
++#include <QAction>
+ 
+ #include "config.hh"
+ #include "dictionary.hh"
diff --git a/srcpkgs/goldendict/patches/QIcon.patch b/srcpkgs/goldendict/patches/QIcon.patch
new file mode 100644
index 00000000000..ea066d1946f
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QIcon.patch
@@ -0,0 +1,10 @@
+--- initializing.cc	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:26:19.088317401 +0200
+@@ -3,6 +3,7 @@
+ 
+ #include "initializing.hh"
+ #include <QCloseEvent>
++#include <QIcon>
+ 
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 )
+ #include <QtWidgets/QStyleFactory>
diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template
index de0918993c6..1d14c0bd5aa 100644
--- a/srcpkgs/goldendict/template
+++ b/srcpkgs/goldendict/template
@@ -4,18 +4,20 @@ version=1.5.0RC2
 revision=4
 wrksrc="${pkgname}-${version/RC/-RC}"
 build_style=qmake
-hostmakedepends="qt5-qmake pkg-config qt5-tools"
+hostmakedepends="qt5-qmake pkg-config qt5-host-tools"
 makedepends="tiff-devel qt5-devel libvorbis-devel zlib-devel
  libXtst-devel hunspell-devel qt5-tools-devel qt5-declarative-devel
  qt5-webkit-devel lzo-devel bzip2-devel libao-devel qt5-svg-devel
  libeb-devel qt5-x11extras-devel ffmpeg-devel"
 short_desc="A feature-rich dictionary lookup program"
 maintainer="John <johnz@posteo.net>"
-license="GPL-3"
+license="GPL-3.0-or-later"
 homepage="http://goldendict.org/"
 distfiles="https://github.com/goldendict/goldendict/archive/${version/RC/-RC}.tar.gz"
 checksum=bccee0a3d3902f8fa31e439e220a405065fff774e5f8c581be2b0743d3f83fde
 
+CXXFLAGS="-Wno-deprecated"
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-tools-devel qt5-webkit-devel qt5-host-tools qt5-svg-devel qt5-x11extras-devel"
 fi

From 1868295d8cfb9339c3d1b73868645aa0d6154c8b Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 00:13:51 +0200
Subject: [PATCH 11/16] mpc-qt: change distfile to sources.voidlinux.org

the upstream github account seems to be deleted
---
 srcpkgs/mpc-qt/template | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/mpc-qt/template b/srcpkgs/mpc-qt/template
index ae808c894ef..182072df113 100644
--- a/srcpkgs/mpc-qt/template
+++ b/srcpkgs/mpc-qt/template
@@ -4,15 +4,16 @@ version=18.08
 revision=1
 build_style=qmake
 configure_args="MPCQT_VERSION=${version}"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config qt5-qmake"
 makedepends="qt5-devel qt5-x11extras-devel mpv-devel"
 short_desc="Clone of Media Player Classic reimplemented in Qt"
 maintainer="SolitudeSF <solitudesf@protonmail.com>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/cmdrkotori/mpc-qt"
-distfiles="${homepage}/archive/v${version}.tar.gz"
+#distfiles="${homepage}/archive/v${version}.tar.gz"
+distfiles="https://sources.voidlinux.org/mpc-qt-18.08/v18.08.tar.gz"
 checksum=c58fd90926773c9da8bdfc1a8e4dba0b95cbc58cee6db9981e8de94fd9534406
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake qt5-x11extras-devel"
+	hostmakedepends+=" qt5-x11extras-devel"
 fi

From 66dafc0e5697c003fd1311bbf553cd49e9fc392a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 04:00:46 +0200
Subject: [PATCH 12/16] vokoscreen: template fixup for qt5.13

---
 srcpkgs/vokoscreen/template | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/vokoscreen/template b/srcpkgs/vokoscreen/template
index d201c80cd57..3baf73f1c67 100644
--- a/srcpkgs/vokoscreen/template
+++ b/srcpkgs/vokoscreen/template
@@ -3,12 +3,16 @@ pkgname=vokoscreen
 version=2.5.0
 revision=1
 build_style=qmake
-hostmakedepends="pkg-config qt5-tools qt5-qmake"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
 makedepends="alsa-lib-devel libX11-devel libXrandr-devel qt5-devel qt5-x11extras-devel v4l-utils-devel"
 depends="ffmpeg"
 short_desc="Easy to use screencast creator"
 maintainer="Duncaen <duncaen@voidlinux.org>"
-license="GPL-2"
+license="GPL-2.0-only"
 homepage="http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"
 distfiles="https://github.com/vkohaupt/vokoscreen/archive/${version}.tar.gz"
 checksum=7f5d9abfa3b4a1f7ce657838f5169cd80a590be490dacd0ad1751853a38f4245
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-x11extras-devel"
+fi

From 89c40301de09f07e5c4d270c95f2c62447b199ea Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:08:07 +0200
Subject: [PATCH 13/16] octoxbps: fixes for qt5.13

---
 srcpkgs/octoxbps/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/octoxbps/template b/srcpkgs/octoxbps/template
index 61a4bd50013..abb78865f69 100644
--- a/srcpkgs/octoxbps/template
+++ b/srcpkgs/octoxbps/template
@@ -15,7 +15,7 @@ checksum=6f7643bb07960d8c8f60ce70dc495f866ae60a4d6d8160a7f108f79bf53d2d22
 
 do_configure() {
 	for _dir in ${wrksrc} ${wrksrc}/notifier/octoxbps-notifier; do
-		cd $_dir && qmake ${configure_args} \
+		cd $_dir && qmake-qt5 ${configure_args} \
 			PREFIX=/usr \
 			LIB=/usr/lib \
 			QMAKE_CFLAGS="${CFLAGS}" \

From 7da51d9153643dec36802648cb78ff03b277f690 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:45:46 +0200
Subject: [PATCH 14/16] qtpass: fix build for qt5.13

---
 srcpkgs/qtpass/patches/qmake-qt5.13.patch | 34 +++++++++++++++++++++++
 srcpkgs/qtpass/template                   |  7 +++--
 2 files changed, 38 insertions(+), 3 deletions(-)
 create mode 100644 srcpkgs/qtpass/patches/qmake-qt5.13.patch

diff --git a/srcpkgs/qtpass/patches/qmake-qt5.13.patch b/srcpkgs/qtpass/patches/qmake-qt5.13.patch
new file mode 100644
index 00000000000..45bacf75a4a
--- /dev/null
+++ b/srcpkgs/qtpass/patches/qmake-qt5.13.patch
@@ -0,0 +1,34 @@
+--- src/src.pro	2018-06-04 11:43:53.000000000 +0200
++++ -	2019-07-10 02:36:51.536590804 +0200
+@@ -7,6 +7,31 @@
+ CONFIG += c++11 staticlib
+ CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
+ 
++TRANSLATIONS    +=  ../localization/localization_nl_NL.ts \
++                    ../localization/localization_ca.ts \
++                    ../localization/localization_de_DE.ts \
++                    ../localization/localization_es_ES.ts \
++                    ../localization/localization_gl_ES.ts \
++                    ../localization/localization_hu_HU.ts \
++                    ../localization/localization_sv_SE.ts \
++                    ../localization/localization_pl_PL.ts \
++                    ../localization/localization_ru_RU.ts \
++                    ../localization/localization_he_IL.ts \
++                    ../localization/localization_zh_CN.ts \
++                    ../localization/localization_ar_MA.ts \
++                    ../localization/localization_fr_FR.ts \
++                    ../localization/localization_fr_BE.ts \
++                    ../localization/localization_nl_BE.ts \
++                    ../localization/localization_fr_LU.ts \
++                    ../localization/localization_de_LU.ts \
++                    ../localization/localization_lb_LU.ts \
++                    ../localization/localization_en_GB.ts \
++                    ../localization/localization_en_US.ts \
++                    ../localization/localization_el_GR.ts \
++                    ../localization/localization_cs_CZ.ts \
++                    ../localization/localization_it_IT.ts \
++                    ../localization/localization_pt_PT.ts
++
+ SOURCES   += mainwindow.cpp \
+              configdialog.cpp \
+              storemodel.cpp \
diff --git a/srcpkgs/qtpass/template b/srcpkgs/qtpass/template
index 1f5780badeb..80b6bc6c712 100644
--- a/srcpkgs/qtpass/template
+++ b/srcpkgs/qtpass/template
@@ -4,17 +4,18 @@ version=1.2.3
 revision=1
 wrksrc="QtPass-${version}"
 build_style=qmake
-hostmakedepends="qt5-devel qt5-tools"
-makedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
+makedepends="qt5-devel qt5-svg-devel"
 depends="pass pwgen"
 short_desc="Multi-platform GUI for pass"
 maintainer="annejan <brouwer@annejan.com>"
 license="GPL-3.0-or-later"
-#changelog="https://raw.githubusercontent.com/IJHack/QtPass/master/CHANGELOG.md"
 homepage="https://qtpass.org/"
+changelog="https://raw.githubusercontent.com/IJHack/QtPass/master/CHANGELOG.md"
 distfiles="https://github.com/IJHack/${pkgname}/archive/v${version}.tar.gz"
 checksum=658b632bb06e9ad63d5076aace5fe0e57a0f7f20e0aafdfb64f86a25bdadbb07
 
+
 do_install() {
 	vbin main/qtpass
 

From 99d17be0b67768a6ca0abd24c1801c168bb3bc40 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 20:10:32 +0200
Subject: [PATCH 15/16] linssid: fix build for qt5.13

---
 srcpkgs/linssid/patches/project.patch     |  3 +-
 srcpkgs/linssid/patches/qwt-include.patch | 56 -----------------------
 srcpkgs/linssid/template                  |  6 ++-
 3 files changed, 7 insertions(+), 58 deletions(-)
 delete mode 100644 srcpkgs/linssid/patches/qwt-include.patch

diff --git a/srcpkgs/linssid/patches/project.patch b/srcpkgs/linssid/patches/project.patch
index a228007bb22..356419f862b 100644
--- a/srcpkgs/linssid/patches/project.patch
+++ b/srcpkgs/linssid/patches/project.patch
@@ -2,7 +2,8 @@
 +++ linssid-app/linssid-app.pro
 @@ -5,7 +5,7 @@
  CONFIG -= debug_and_release app_bundle lib_bundle
- CONFIG += release 
+-CONFIG += release
++CONFIG += release qwt
  PKGCONFIG +=
 -QT = core gui widgets svg
 +QT = core gui widgets
diff --git a/srcpkgs/linssid/patches/qwt-include.patch b/srcpkgs/linssid/patches/qwt-include.patch
deleted file mode 100644
index 04a25d42b21..00000000000
--- a/srcpkgs/linssid/patches/qwt-include.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- linssid-app/MainForm.cpp
-+++ linssid-app/MainForm.cpp
-@@ -23,14 +23,14 @@
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_symbol.h>
--#include <qwt_plot_marker.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_symbol.h>
-+#include <qwt/qwt_plot_marker.h>
- #include <QPointF>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt_scale_draw.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <sys/types.h>
-
---- linssid-app/MainForm.h
-+++ linssid-app/MainForm.h
-@@ -13,11 +13,11 @@
- #include <QEvent>
- #include <QString>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_scale_draw.h>
- #include "ui_MainForm.h"
- #include "prefsDialog.h"
- #include "Custom.h"
-
---- linssid-app/MainForm.ui
-+++ linssid-app/MainForm.ui
-@@ -757,7 +757,7 @@
-   <customwidget>
-    <class>QwtPlot</class>
-    <extends>QFrame</extends>
--   <header>qwt_plot.h</header>
-+   <header>qwt/qwt_plot.h</header>
-    <container>1</container>
-   </customwidget>
-  </customwidgets>
diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template
index 80509d71bb1..951532e1be9 100644
--- a/srcpkgs/linssid/template
+++ b/srcpkgs/linssid/template
@@ -3,7 +3,7 @@ pkgname=linssid
 version=3.6
 revision=2
 build_style=qmake
-hostmakedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
 makedepends="boost-devel qwt-devel"
 depends="qt5-svg"
 short_desc="Graphical wireless AP scanner"
@@ -12,3 +12,7 @@ license="GPL-3.0-only"
 homepage="https://sourceforge.net/projects/linssid/"
 distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}.orig.tar.gz"
 checksum=57301ee93f708f2512316668bf4e718502f37f21a5e93b68fc604a9032e3e49c
+
+pre_configure() {
+	sed -e "s%/usr/include%${XBPS_CROSS_BASE}&%g" -i linssid-app/linssid-app.pro
+}

From 091c22540540c99877cbb408542a40085496834c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 21:47:21 +0200
Subject: [PATCH 16/16] dtkcore: set nocross

[ci skip]
---
 srcpkgs/dtkcore/template | 21 +--------------------
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/srcpkgs/dtkcore/template b/srcpkgs/dtkcore/template
index c2eb731d949..c12b4989980 100644
--- a/srcpkgs/dtkcore/template
+++ b/srcpkgs/dtkcore/template
@@ -18,26 +18,7 @@ if [ "$CROSS_BUILD" ];then
 	hostmakedepends+=" qt5-devel gsettings-qt-devel"
 fi
 
-pre_build() {
-	# This is needed for musl, does somehow not get build there automatically
-	make sub-tools-qmake_all
-	make -C tools sub-deepin-os-release-all
-}
-
-pre_install() {
-	# Replace the host arch binary with target arch one
-	cd tools/deepin-os-release
-	rm *.o
-	qmake ${configure_args} \
-		PREFIX=/usr \
-		LIB=/usr/lib \
-		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
-		QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
-		QMAKE_LFLAGS="${LDFLAGS}"
-	make CC="$CC" CXX="$CXX" LINK="$CXX"
-	cd ${wrksrc}
-}
+nocross="Some QMake mess"
 
 dtkcore-devel_package() {
 	short_desc+=" - development files"

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (40 preceding siblings ...)
  2019-07-10  1:22 ` [PR PATCH] [Updated] " voidlinux-github
@ 2019-07-10  1:22 ` voidlinux-github
  2019-07-10  9:54 ` voidlinux-github
                   ` (6 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-10  1:22 UTC (permalink / raw)
  To: ml

[-- 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: 509973 bytes --]

From 891ada3ec16a63d876c53f02070ba7a15f944eab Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 01/16] 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                          |  143 +-
 50 files changed, 7810 insertions(+), 3078 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 7629d868216..68468ef1413 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 = &regs;
+@@ -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 = &regs;
-@@ -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 8d170535e89..bac09fe26a3 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=8
+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
@@ -253,9 +240,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,7 +269,6 @@ 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
 			_bootstrap_gn
 		fi
@@ -307,6 +290,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 +323,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 +357,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 +378,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 +424,6 @@ do_install() {
 	cd ${wrksrc}/qtbase
 	make INSTALL_ROOT=${DESTDIR} install
 
-	vlicense ${wrksrc}/LGPL_EXCEPTION.txt
 	_cleanup_wrksrc_leak
 
 	# Symbolic links for remaining binaries
@@ -498,7 +496,10 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
+		dirs+=" qttools/src/linguist/lprodump"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -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}"
@@ -775,7 +782,7 @@ qt5-quickcontrols2_package() {
 
 qt5-remoteobjects-devel_package() {
 	short_desc+=" - Remote Objects (development)"
-	depends="qt5-quickcontrols2-${version}_${revision} qt5-devel-${version}_${revision}"
+	depends="qt5-remoteobjects-${version}_${revision} qt5-devel-${version}_${revision}"
 	pkg_install() {
 		_install_devel qtremoteobjects
 	}
@@ -1045,7 +1052,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1099,7 +1106,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
@@ -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"
@@ -1175,6 +1182,10 @@ qt5-qmake_package() {
 		# Change -isystem to -I to avoid "#include_next <stdlib.h>" errors
 		sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \
 			-e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;'
+		find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
+			-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' \;
 
 		# Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf
 		if [ "$CROSS_BUILD" ]; then

From 78e646ee808af3979cd54ef6847565ce3d039d53 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 02/16] 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 45b0a1850663f4674d728dcb0681480af99b181a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 03/16] telegram-desktop: rebuild for qt5-5.13.0

---
 srcpkgs/telegram-desktop/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/telegram-desktop/template b/srcpkgs/telegram-desktop/template
index f1443933130..38d2da354d8 100644
--- a/srcpkgs/telegram-desktop/template
+++ b/srcpkgs/telegram-desktop/template
@@ -1,7 +1,7 @@
 # Template file for 'telegram-desktop'
 pkgname=telegram-desktop
 version=1.7.14
-revision=1
+revision=2
 _libtgvoip_commit=0e92a22746d15157bea46faddd61b79e9964275a
 _GSL_commit=d846fe50a3f0bb7767c7e087a05f4be95f4da0ec
 _variant_commit=550ac2f159ca883d360c196149b466955c77a573
@@ -18,7 +18,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 liblz4-devel rlottie-devel"
-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 7290295d7162081ba87e152327af905d10487505 Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 04/16] 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 9e72e9cb36fd9fbbab75834225452a66d8415ba9 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 05/16] 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 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 101d28bc1b01bbdc2073249dfcb84087946f386c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 06/16] common/build-style/qmake: use custom qt.conf for cross
 compiling

[ci skip]
---
 common/build-style/qmake.sh | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/common/build-style/qmake.sh b/common/build-style/qmake.sh
index ef8b87db730..63be5a3a568 100644
--- a/common/build-style/qmake.sh
+++ b/common/build-style/qmake.sh
@@ -3,6 +3,7 @@
 #
 do_configure() {
 	local qmake
+	local qmake_args
 	if [ -x "/usr/lib/qt5/bin/qmake" ]; then
 		# Qt5 qmake
 		qmake="/usr/lib/qt5/bin/qmake"
@@ -14,7 +15,35 @@ do_configure() {
 	if [ -z "${qmake}" ]; then
 		msg_error "${pkgver}: Could not find qmake - missing in hostdepends?\n"
 	fi
-	${qmake} ${configure_args} \
+	if [ "$CROSS_BUILD" ] && [ "$qmake" == "/usr/lib/qt5/bin/qmake" ]; then
+		cat > "${wrksrc}/qt.conf" <<_EOF
+[Paths]
+Sysroot=${XBPS_CROSS_BASE}
+Prefix=${XBPS_CROSS_BASE}/usr
+ArchData=${XBPS_CROSS_BASE}/usr/lib/qt5
+Data=${XBPS_CROSS_BASE}/usr/share/qt5
+Documentation=${XBPS_CROSS_BASE}/usr/share/doc/qt5
+Headers=${XBPS_CROSS_BASE}/usr/include/qt5
+Libraries=${XBPS_CROSS_BASE}/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=${XBPS_CROSS_BASE}/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/imports
+Qml2Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/qml
+Translations=${XBPS_CROSS_BASE}/usr/share/qt5/translations
+Settings=${XBPS_CROSS_BASE}/etc/xdg
+Examples=${XBPS_CROSS_BASE}/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+		qmake_args="-qtconf ${wrksrc}/qt.conf"
+	fi
+	${qmake} ${qmake_args} ${configure_args} \
 		PREFIX=/usr \
 		LIB=/usr/lib \
 		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \

From b7f952f40d8149ab3af7d400bc18693d433a59a8 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 18:19:17 +0200
Subject: [PATCH 07/16] merkaartor: fix build with qt5.13

---
 srcpkgs/merkaartor/patches/qt5.13.patch | 11 +++++++++++
 srcpkgs/merkaartor/template             |  8 ++------
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 srcpkgs/merkaartor/patches/qt5.13.patch

diff --git a/srcpkgs/merkaartor/patches/qt5.13.patch b/srcpkgs/merkaartor/patches/qt5.13.patch
new file mode 100644
index 00000000000..7fa4f4e27a9
--- /dev/null
+++ b/srcpkgs/merkaartor/patches/qt5.13.patch
@@ -0,0 +1,11 @@
+--- src/Layers/LicenseDisplayDialog.ui	2016-09-06 00:29:45.000000000 +0200
++++ -	2019-07-06 21:20:05.476017057 +0200
+@@ -43,7 +43,7 @@
+   <customwidget>
+    <class>QWebView</class>
+    <extends>QWidget</extends>
+-   <header>QtWebKit/QWebView</header>
++   <header>QWebView</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template
index 3ee40185ab7..5e44f5f7cb1 100644
--- a/srcpkgs/merkaartor/template
+++ b/srcpkgs/merkaartor/template
@@ -4,7 +4,7 @@ version=0.18.3
 revision=9
 build_style=qmake
 configure_args="SYSTEM_QUAZIP=1 SYSTEM_QUAZIP_LDFLAGS=-lquazip5"
-hostmakedepends="qt5-qmake libgdal-tools"
+hostmakedepends="qt5-qmake libgdal-tools qt5-host-tools"
 makedepends="libgdal-devel proj-devel qt5-declarative-devel qt5-svg-devel
  qt5-tools-devel qt5-webkit-devel quazip-devel"
 short_desc="Openstreetmap map editor"
@@ -17,9 +17,5 @@ checksum=d6b3e4d982b2c7b82331bc5bc8d993d733c443250f02919c3c4dbd6924e6e947
 CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-host-tools qt5-svg-devel qt5-webkit-devel"
-	CXXFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/qt5"
-	for i in ${XBPS_CROSS_BASE}/usr/include/qt5/*; do
-		CXXFLAGS+=" -I$i"
-	done
+	hostmakedepends+=" qt5-svg-devel qt5-webkit-devel"
 fi

From b226f2fc8d45638f6fd6d1e7e2da341be40485aa Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:00:38 +0200
Subject: [PATCH 08/16] cutemarked: add patch for qt5.13

---
 srcpkgs/cutemarked/patches/QAction.patch | 10 ++++++++++
 srcpkgs/cutemarked/template              |  4 ++++
 2 files changed, 14 insertions(+)
 create mode 100644 srcpkgs/cutemarked/patches/QAction.patch

diff --git a/srcpkgs/cutemarked/patches/QAction.patch b/srcpkgs/cutemarked/patches/QAction.patch
new file mode 100644
index 00000000000..abed5ad1d4f
--- /dev/null
+++ b/srcpkgs/cutemarked/patches/QAction.patch
@@ -0,0 +1,10 @@
+--- app/optionsdialog.cpp	2016-03-28 13:48:50.000000000 +0200
++++ -	2019-07-02 18:59:36.832374065 +0200
+@@ -17,6 +17,7 @@
+ #include "optionsdialog.h"
+ #include "ui_optionsdialog.h"
+ 
++#include <QAction>
+ #include <QFontComboBox>
+ #include <QItemEditorFactory>
+ #include <QKeySequence>
diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template
index 7d4cfcce17a..53997add9ef 100644
--- a/srcpkgs/cutemarked/template
+++ b/srcpkgs/cutemarked/template
@@ -15,6 +15,10 @@ homepage="http://cloose.github.io/CuteMarkEd/"
 distfiles="https://github.com/cloose/${pkgname}/archive/v${version}.tar.gz"
 checksum=78a41808c2f0452375810abdff76eeaaee012f8d1368a2b8772ec6b4d2ceeec8
 
+pre_build() {
+	lrelease app/app.pro
+}
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-devel qt5-webkit-devel"
 fi

From c926fb4441ec9bf5f358e13eeb5f6f939315fa62 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:27:17 +0200
Subject: [PATCH 09/16] dtkwidget: rebuild against qt5.13

---
 srcpkgs/dtkwidget/patches/qt5.13.patch | 39 ++++++++++++++++++++++++++
 srcpkgs/dtkwidget/template             |  4 ++-
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/dtkwidget/patches/qt5.13.patch

diff --git a/srcpkgs/dtkwidget/patches/qt5.13.patch b/srcpkgs/dtkwidget/patches/qt5.13.patch
new file mode 100644
index 00000000000..a76621a3f3a
--- /dev/null
+++ b/srcpkgs/dtkwidget/patches/qt5.13.patch
@@ -0,0 +1,39 @@
+diff --git a/src/widgets/daboutdialog.cpp b/src/widgets/daboutdialog.cpp
+index 5c6ba91..a33fd94 100644
+--- src/widgets/daboutdialog.cpp
++++ src/widgets/daboutdialog.cpp
+@@ -575,6 +575,6 @@ void DAboutDialog::showEvent(QShowEvent *event)
+     }
+ }
+ 
+-#include "moc_daboutdialog.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_daboutdialog.cpp"
+diff --git a/src/widgets/dipv4lineedit.cpp b/src/widgets/dipv4lineedit.cpp
+index 4efe6e4..1cc68b4 100644
+--- src/widgets/dipv4lineedit.cpp
++++ src/widgets/dipv4lineedit.cpp
+@@ -530,6 +530,6 @@ bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
+     return DLineEdit::eventFilter(obj, e);
+ }
+ 
+-#include "moc_dipv4lineedit.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dipv4lineedit.cpp"
+diff --git a/src/widgets/dlistview.cpp b/src/widgets/dlistview.cpp
+index 0dcc244..523ebd5 100644
+--- src/widgets/dlistview.cpp
++++ src/widgets/dlistview.cpp
+@@ -709,6 +709,6 @@ bool DListView::edit(const QModelIndex &index, QAbstractItemView::EditTrigger tr
+     return tmp;
+ }
+ 
+-#include "moc_dlistview.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dlistview.cpp"
diff --git a/srcpkgs/dtkwidget/template b/srcpkgs/dtkwidget/template
index 7dc6547b2b7..6fbac916d9b 100644
--- a/srcpkgs/dtkwidget/template
+++ b/srcpkgs/dtkwidget/template
@@ -1,7 +1,7 @@
 # Template file for 'dtkwidget'
 pkgname=dtkwidget
 version=2.0.14
-revision=1
+revision=2
 build_style=qmake
 configure_args="DBUS_VERSION_0_4_2=YES LIB_INSTALL_DIR=/usr/lib VERSION=${version}"
 hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
@@ -21,6 +21,8 @@ if [ "$CROSS_BUILD" ]; then
 	qt5-svg-devel gsettings-qt-devel"
 fi
 
+nocross=yes
+
 dtkwidget-devel_package() {
 	depends="${sourcepkg}>=${version}_${revision} dtkcore-devel"
 	short_desc+=" - development files"

From add2effd942fb934669fe30bec582559f44c09ac Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 21:43:18 +0200
Subject: [PATCH 10/16] goldendict: add patches for qt5.13

---
 srcpkgs/goldendict/patches/QAction.patch | 20 ++++++++++++++++++++
 srcpkgs/goldendict/patches/QIcon.patch   | 10 ++++++++++
 srcpkgs/goldendict/template              |  6 ++++--
 3 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/goldendict/patches/QAction.patch
 create mode 100644 srcpkgs/goldendict/patches/QIcon.patch

diff --git a/srcpkgs/goldendict/patches/QAction.patch b/srcpkgs/goldendict/patches/QAction.patch
new file mode 100644
index 00000000000..146fe34e2fa
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QAction.patch
@@ -0,0 +1,20 @@
+--- fulltextsearch.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:27:37.881036339 +0200
+@@ -1,6 +1,7 @@
+ #ifndef __FULLTEXTSEARCH_HH_INCLUDED__
+ #define __FULLTEXTSEARCH_HH_INCLUDED__
+ 
++#include <QAction>
+ #include <QSemaphore>
+ #include <QStringList>
+ #include <QRegExp>
+--- groups_widgets.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:31:52.350308868 +0200
+@@ -10,6 +10,7 @@
+ 
+ #include <QListWidget>
+ #include <QSortFilterProxyModel>
++#include <QAction>
+ 
+ #include "config.hh"
+ #include "dictionary.hh"
diff --git a/srcpkgs/goldendict/patches/QIcon.patch b/srcpkgs/goldendict/patches/QIcon.patch
new file mode 100644
index 00000000000..ea066d1946f
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QIcon.patch
@@ -0,0 +1,10 @@
+--- initializing.cc	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:26:19.088317401 +0200
+@@ -3,6 +3,7 @@
+ 
+ #include "initializing.hh"
+ #include <QCloseEvent>
++#include <QIcon>
+ 
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 )
+ #include <QtWidgets/QStyleFactory>
diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template
index de0918993c6..1d14c0bd5aa 100644
--- a/srcpkgs/goldendict/template
+++ b/srcpkgs/goldendict/template
@@ -4,18 +4,20 @@ version=1.5.0RC2
 revision=4
 wrksrc="${pkgname}-${version/RC/-RC}"
 build_style=qmake
-hostmakedepends="qt5-qmake pkg-config qt5-tools"
+hostmakedepends="qt5-qmake pkg-config qt5-host-tools"
 makedepends="tiff-devel qt5-devel libvorbis-devel zlib-devel
  libXtst-devel hunspell-devel qt5-tools-devel qt5-declarative-devel
  qt5-webkit-devel lzo-devel bzip2-devel libao-devel qt5-svg-devel
  libeb-devel qt5-x11extras-devel ffmpeg-devel"
 short_desc="A feature-rich dictionary lookup program"
 maintainer="John <johnz@posteo.net>"
-license="GPL-3"
+license="GPL-3.0-or-later"
 homepage="http://goldendict.org/"
 distfiles="https://github.com/goldendict/goldendict/archive/${version/RC/-RC}.tar.gz"
 checksum=bccee0a3d3902f8fa31e439e220a405065fff774e5f8c581be2b0743d3f83fde
 
+CXXFLAGS="-Wno-deprecated"
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-tools-devel qt5-webkit-devel qt5-host-tools qt5-svg-devel qt5-x11extras-devel"
 fi

From 1868295d8cfb9339c3d1b73868645aa0d6154c8b Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 00:13:51 +0200
Subject: [PATCH 11/16] mpc-qt: change distfile to sources.voidlinux.org

the upstream github account seems to be deleted
---
 srcpkgs/mpc-qt/template | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/mpc-qt/template b/srcpkgs/mpc-qt/template
index ae808c894ef..182072df113 100644
--- a/srcpkgs/mpc-qt/template
+++ b/srcpkgs/mpc-qt/template
@@ -4,15 +4,16 @@ version=18.08
 revision=1
 build_style=qmake
 configure_args="MPCQT_VERSION=${version}"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config qt5-qmake"
 makedepends="qt5-devel qt5-x11extras-devel mpv-devel"
 short_desc="Clone of Media Player Classic reimplemented in Qt"
 maintainer="SolitudeSF <solitudesf@protonmail.com>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/cmdrkotori/mpc-qt"
-distfiles="${homepage}/archive/v${version}.tar.gz"
+#distfiles="${homepage}/archive/v${version}.tar.gz"
+distfiles="https://sources.voidlinux.org/mpc-qt-18.08/v18.08.tar.gz"
 checksum=c58fd90926773c9da8bdfc1a8e4dba0b95cbc58cee6db9981e8de94fd9534406
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake qt5-x11extras-devel"
+	hostmakedepends+=" qt5-x11extras-devel"
 fi

From 66dafc0e5697c003fd1311bbf553cd49e9fc392a Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 04:00:46 +0200
Subject: [PATCH 12/16] vokoscreen: template fixup for qt5.13

---
 srcpkgs/vokoscreen/template | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/vokoscreen/template b/srcpkgs/vokoscreen/template
index d201c80cd57..3baf73f1c67 100644
--- a/srcpkgs/vokoscreen/template
+++ b/srcpkgs/vokoscreen/template
@@ -3,12 +3,16 @@ pkgname=vokoscreen
 version=2.5.0
 revision=1
 build_style=qmake
-hostmakedepends="pkg-config qt5-tools qt5-qmake"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
 makedepends="alsa-lib-devel libX11-devel libXrandr-devel qt5-devel qt5-x11extras-devel v4l-utils-devel"
 depends="ffmpeg"
 short_desc="Easy to use screencast creator"
 maintainer="Duncaen <duncaen@voidlinux.org>"
-license="GPL-2"
+license="GPL-2.0-only"
 homepage="http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"
 distfiles="https://github.com/vkohaupt/vokoscreen/archive/${version}.tar.gz"
 checksum=7f5d9abfa3b4a1f7ce657838f5169cd80a590be490dacd0ad1751853a38f4245
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-x11extras-devel"
+fi

From 89c40301de09f07e5c4d270c95f2c62447b199ea Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:08:07 +0200
Subject: [PATCH 13/16] octoxbps: fixes for qt5.13

---
 srcpkgs/octoxbps/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/octoxbps/template b/srcpkgs/octoxbps/template
index 61a4bd50013..abb78865f69 100644
--- a/srcpkgs/octoxbps/template
+++ b/srcpkgs/octoxbps/template
@@ -15,7 +15,7 @@ checksum=6f7643bb07960d8c8f60ce70dc495f866ae60a4d6d8160a7f108f79bf53d2d22
 
 do_configure() {
 	for _dir in ${wrksrc} ${wrksrc}/notifier/octoxbps-notifier; do
-		cd $_dir && qmake ${configure_args} \
+		cd $_dir && qmake-qt5 ${configure_args} \
 			PREFIX=/usr \
 			LIB=/usr/lib \
 			QMAKE_CFLAGS="${CFLAGS}" \

From 7da51d9153643dec36802648cb78ff03b277f690 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:45:46 +0200
Subject: [PATCH 14/16] qtpass: fix build for qt5.13

---
 srcpkgs/qtpass/patches/qmake-qt5.13.patch | 34 +++++++++++++++++++++++
 srcpkgs/qtpass/template                   |  7 +++--
 2 files changed, 38 insertions(+), 3 deletions(-)
 create mode 100644 srcpkgs/qtpass/patches/qmake-qt5.13.patch

diff --git a/srcpkgs/qtpass/patches/qmake-qt5.13.patch b/srcpkgs/qtpass/patches/qmake-qt5.13.patch
new file mode 100644
index 00000000000..45bacf75a4a
--- /dev/null
+++ b/srcpkgs/qtpass/patches/qmake-qt5.13.patch
@@ -0,0 +1,34 @@
+--- src/src.pro	2018-06-04 11:43:53.000000000 +0200
++++ -	2019-07-10 02:36:51.536590804 +0200
+@@ -7,6 +7,31 @@
+ CONFIG += c++11 staticlib
+ CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
+ 
++TRANSLATIONS    +=  ../localization/localization_nl_NL.ts \
++                    ../localization/localization_ca.ts \
++                    ../localization/localization_de_DE.ts \
++                    ../localization/localization_es_ES.ts \
++                    ../localization/localization_gl_ES.ts \
++                    ../localization/localization_hu_HU.ts \
++                    ../localization/localization_sv_SE.ts \
++                    ../localization/localization_pl_PL.ts \
++                    ../localization/localization_ru_RU.ts \
++                    ../localization/localization_he_IL.ts \
++                    ../localization/localization_zh_CN.ts \
++                    ../localization/localization_ar_MA.ts \
++                    ../localization/localization_fr_FR.ts \
++                    ../localization/localization_fr_BE.ts \
++                    ../localization/localization_nl_BE.ts \
++                    ../localization/localization_fr_LU.ts \
++                    ../localization/localization_de_LU.ts \
++                    ../localization/localization_lb_LU.ts \
++                    ../localization/localization_en_GB.ts \
++                    ../localization/localization_en_US.ts \
++                    ../localization/localization_el_GR.ts \
++                    ../localization/localization_cs_CZ.ts \
++                    ../localization/localization_it_IT.ts \
++                    ../localization/localization_pt_PT.ts
++
+ SOURCES   += mainwindow.cpp \
+              configdialog.cpp \
+              storemodel.cpp \
diff --git a/srcpkgs/qtpass/template b/srcpkgs/qtpass/template
index 1f5780badeb..80b6bc6c712 100644
--- a/srcpkgs/qtpass/template
+++ b/srcpkgs/qtpass/template
@@ -4,17 +4,18 @@ version=1.2.3
 revision=1
 wrksrc="QtPass-${version}"
 build_style=qmake
-hostmakedepends="qt5-devel qt5-tools"
-makedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
+makedepends="qt5-devel qt5-svg-devel"
 depends="pass pwgen"
 short_desc="Multi-platform GUI for pass"
 maintainer="annejan <brouwer@annejan.com>"
 license="GPL-3.0-or-later"
-#changelog="https://raw.githubusercontent.com/IJHack/QtPass/master/CHANGELOG.md"
 homepage="https://qtpass.org/"
+changelog="https://raw.githubusercontent.com/IJHack/QtPass/master/CHANGELOG.md"
 distfiles="https://github.com/IJHack/${pkgname}/archive/v${version}.tar.gz"
 checksum=658b632bb06e9ad63d5076aace5fe0e57a0f7f20e0aafdfb64f86a25bdadbb07
 
+
 do_install() {
 	vbin main/qtpass
 

From 99d17be0b67768a6ca0abd24c1801c168bb3bc40 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 20:10:32 +0200
Subject: [PATCH 15/16] linssid: fix build for qt5.13

---
 srcpkgs/linssid/patches/project.patch     |  3 +-
 srcpkgs/linssid/patches/qwt-include.patch | 56 -----------------------
 srcpkgs/linssid/template                  |  6 ++-
 3 files changed, 7 insertions(+), 58 deletions(-)
 delete mode 100644 srcpkgs/linssid/patches/qwt-include.patch

diff --git a/srcpkgs/linssid/patches/project.patch b/srcpkgs/linssid/patches/project.patch
index a228007bb22..356419f862b 100644
--- a/srcpkgs/linssid/patches/project.patch
+++ b/srcpkgs/linssid/patches/project.patch
@@ -2,7 +2,8 @@
 +++ linssid-app/linssid-app.pro
 @@ -5,7 +5,7 @@
  CONFIG -= debug_and_release app_bundle lib_bundle
- CONFIG += release 
+-CONFIG += release
++CONFIG += release qwt
  PKGCONFIG +=
 -QT = core gui widgets svg
 +QT = core gui widgets
diff --git a/srcpkgs/linssid/patches/qwt-include.patch b/srcpkgs/linssid/patches/qwt-include.patch
deleted file mode 100644
index 04a25d42b21..00000000000
--- a/srcpkgs/linssid/patches/qwt-include.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- linssid-app/MainForm.cpp
-+++ linssid-app/MainForm.cpp
-@@ -23,14 +23,14 @@
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_symbol.h>
--#include <qwt_plot_marker.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_symbol.h>
-+#include <qwt/qwt_plot_marker.h>
- #include <QPointF>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt_scale_draw.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <sys/types.h>
-
---- linssid-app/MainForm.h
-+++ linssid-app/MainForm.h
-@@ -13,11 +13,11 @@
- #include <QEvent>
- #include <QString>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_scale_draw.h>
- #include "ui_MainForm.h"
- #include "prefsDialog.h"
- #include "Custom.h"
-
---- linssid-app/MainForm.ui
-+++ linssid-app/MainForm.ui
-@@ -757,7 +757,7 @@
-   <customwidget>
-    <class>QwtPlot</class>
-    <extends>QFrame</extends>
--   <header>qwt_plot.h</header>
-+   <header>qwt/qwt_plot.h</header>
-    <container>1</container>
-   </customwidget>
-  </customwidgets>
diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template
index 80509d71bb1..951532e1be9 100644
--- a/srcpkgs/linssid/template
+++ b/srcpkgs/linssid/template
@@ -3,7 +3,7 @@ pkgname=linssid
 version=3.6
 revision=2
 build_style=qmake
-hostmakedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
 makedepends="boost-devel qwt-devel"
 depends="qt5-svg"
 short_desc="Graphical wireless AP scanner"
@@ -12,3 +12,7 @@ license="GPL-3.0-only"
 homepage="https://sourceforge.net/projects/linssid/"
 distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}.orig.tar.gz"
 checksum=57301ee93f708f2512316668bf4e718502f37f21a5e93b68fc604a9032e3e49c
+
+pre_configure() {
+	sed -e "s%/usr/include%${XBPS_CROSS_BASE}&%g" -i linssid-app/linssid-app.pro
+}

From 091c22540540c99877cbb408542a40085496834c Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 21:47:21 +0200
Subject: [PATCH 16/16] dtkcore: set nocross

[ci skip]
---
 srcpkgs/dtkcore/template | 21 +--------------------
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/srcpkgs/dtkcore/template b/srcpkgs/dtkcore/template
index c2eb731d949..c12b4989980 100644
--- a/srcpkgs/dtkcore/template
+++ b/srcpkgs/dtkcore/template
@@ -18,26 +18,7 @@ if [ "$CROSS_BUILD" ];then
 	hostmakedepends+=" qt5-devel gsettings-qt-devel"
 fi
 
-pre_build() {
-	# This is needed for musl, does somehow not get build there automatically
-	make sub-tools-qmake_all
-	make -C tools sub-deepin-os-release-all
-}
-
-pre_install() {
-	# Replace the host arch binary with target arch one
-	cd tools/deepin-os-release
-	rm *.o
-	qmake ${configure_args} \
-		PREFIX=/usr \
-		LIB=/usr/lib \
-		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
-		QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
-		QMAKE_LFLAGS="${LDFLAGS}"
-	make CC="$CC" CXX="$CXX" LINK="$CXX"
-	cd ${wrksrc}
-}
+nocross="Some QMake mess"
 
 dtkcore-devel_package() {
 	short_desc+=" - development files"

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (41 preceding siblings ...)
  2019-07-10  1:22 ` voidlinux-github
@ 2019-07-10  9:54 ` voidlinux-github
  2019-07-10 22:31 ` voidlinux-github
                   ` (5 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-10  9:54 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 185 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-509995203
Comment:
This should be ready to get a review now.

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (42 preceding siblings ...)
  2019-07-10  9:54 ` voidlinux-github
@ 2019-07-10 22:31 ` voidlinux-github
  2019-07-10 22:32 ` voidlinux-github
                   ` (4 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-10 22:31 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 690 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-510255468
Comment:
The main problem for now is `arm*` and we cannot actually do much about it.
The other only obvious thing I saw is the commit title for `qtcreator`: `s/cavnas/canvas/` :-)
Everything else seems in good shape. Thanks for doing this tedious job @Johnnynator !

We should try to separate out `qt5-base` from `qt5` later to solve #12964 .

I hope to find some spare time for fixing, if needed, after this PR is merged.
So IMHO just go merge and let's sort out issues later on.
:+1: as soon as the builders look like they are ready for the task.


^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (43 preceding siblings ...)
  2019-07-10 22:31 ` voidlinux-github
@ 2019-07-10 22:32 ` voidlinux-github
  2019-07-11  4:15 ` [PR PATCH] [Updated] " voidlinux-github
                   ` (3 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-10 22:32 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 699 bytes --]

New comment by pullmoll on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-510255468
Comment:
The main problem for now is `arm*` and we cannot actually do much about it.
The other only obvious thing I saw is the commit title for `qtcreator`: `s/cavnas/canvas/` :-)
Everything else seems in good shape. Thanks for doing this tedious job @Johnnynator and @q66 !

We should try to separate out `qt5-base` from `qt5` later to solve #12964 .

I hope to find some spare time for fixing, if needed, after this PR is merged.
So IMHO just go merge and let's sort out issues later on.
:+1: as soon as the builders look like they are ready for the task.


^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (45 preceding siblings ...)
  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
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-11  4:15 UTC (permalink / raw)
  To: ml

[-- 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: 510129 bytes --]

From dbc6cc1fd78d17282a99792f7498f7d8832f739b Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 01/16] 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                          |  145 +-
 50 files changed, 7811 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 951f2e781d4..3e836fa7a05 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 = &regs;
+@@ -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 = &regs;
-@@ -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 2293f512d0a..bac09fe26a3 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=8
+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://mirrors.ukfast.co.uk/sites/qt.io/archive/qt/${version%.*}/${version}/single/qt-everywhere-src-${version}.tar.xz"
-checksum=859417642713cee2493ee3646a7fee782c9f1db39e41d7bb1322bba0c5f0ff4d
+distfiles="http://download.qt.io/official_releases/qt/${version%.*}/${version}/single/qt-everywhere-src-${version}.tar.xz"
+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
@@ -253,9 +240,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,7 +269,6 @@ 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
 			_bootstrap_gn
 		fi
@@ -307,6 +290,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 +323,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 +357,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 +378,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 +424,6 @@ do_install() {
 	cd ${wrksrc}/qtbase
 	make INSTALL_ROOT=${DESTDIR} install
 
-	vlicense ${wrksrc}/LGPL_EXCEPTION.txt
 	_cleanup_wrksrc_leak
 
 	# Symbolic links for remaining binaries
@@ -498,7 +496,10 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
+		dirs+=" qttools/src/linguist/lprodump"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -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}"
@@ -775,7 +782,7 @@ qt5-quickcontrols2_package() {
 
 qt5-remoteobjects-devel_package() {
 	short_desc+=" - Remote Objects (development)"
-	depends="qt5-quickcontrols2-${version}_${revision} qt5-devel-${version}_${revision}"
+	depends="qt5-remoteobjects-${version}_${revision} qt5-devel-${version}_${revision}"
 	pkg_install() {
 		_install_devel qtremoteobjects
 	}
@@ -1045,7 +1052,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1099,7 +1106,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
@@ -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"
@@ -1175,6 +1182,10 @@ qt5-qmake_package() {
 		# Change -isystem to -I to avoid "#include_next <stdlib.h>" errors
 		sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \
 			-e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;'
+		find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
+			-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' \;
 
 		# Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf
 		if [ "$CROSS_BUILD" ]; then

From 26738a61365f6790f0557c3f2a3f76879fb9aead Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 02/16] 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 e20507c8be3b072bbb749a853b2490eb382a07be Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 03/16] telegram-desktop: rebuild for qt5-5.13.0

---
 srcpkgs/telegram-desktop/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/telegram-desktop/template b/srcpkgs/telegram-desktop/template
index f1443933130..38d2da354d8 100644
--- a/srcpkgs/telegram-desktop/template
+++ b/srcpkgs/telegram-desktop/template
@@ -1,7 +1,7 @@
 # Template file for 'telegram-desktop'
 pkgname=telegram-desktop
 version=1.7.14
-revision=1
+revision=2
 _libtgvoip_commit=0e92a22746d15157bea46faddd61b79e9964275a
 _GSL_commit=d846fe50a3f0bb7767c7e087a05f4be95f4da0ec
 _variant_commit=550ac2f159ca883d360c196149b466955c77a573
@@ -18,7 +18,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 liblz4-devel rlottie-devel"
-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 de69a0e9e385b28add99fe06f8006c0deb3268ab Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 04/16] 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 f2cdfe2d3287dce6d5b4aef7340edb1236f1ac08 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 05/16] qtcreator: remove deprecated qt5-canvas3d dep

and rebuild for qt5.13

[ci skip]
---
 srcpkgs/qtcreator/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qtcreator/template b/srcpkgs/qtcreator/template
index 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 13fbe7ac078e558521d00c7ebc5e81fb59c621ce Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 06/16] common/build-style/qmake: use custom qt.conf for cross
 compiling

[ci skip]
---
 common/build-style/qmake.sh | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/common/build-style/qmake.sh b/common/build-style/qmake.sh
index ef8b87db730..63be5a3a568 100644
--- a/common/build-style/qmake.sh
+++ b/common/build-style/qmake.sh
@@ -3,6 +3,7 @@
 #
 do_configure() {
 	local qmake
+	local qmake_args
 	if [ -x "/usr/lib/qt5/bin/qmake" ]; then
 		# Qt5 qmake
 		qmake="/usr/lib/qt5/bin/qmake"
@@ -14,7 +15,35 @@ do_configure() {
 	if [ -z "${qmake}" ]; then
 		msg_error "${pkgver}: Could not find qmake - missing in hostdepends?\n"
 	fi
-	${qmake} ${configure_args} \
+	if [ "$CROSS_BUILD" ] && [ "$qmake" == "/usr/lib/qt5/bin/qmake" ]; then
+		cat > "${wrksrc}/qt.conf" <<_EOF
+[Paths]
+Sysroot=${XBPS_CROSS_BASE}
+Prefix=${XBPS_CROSS_BASE}/usr
+ArchData=${XBPS_CROSS_BASE}/usr/lib/qt5
+Data=${XBPS_CROSS_BASE}/usr/share/qt5
+Documentation=${XBPS_CROSS_BASE}/usr/share/doc/qt5
+Headers=${XBPS_CROSS_BASE}/usr/include/qt5
+Libraries=${XBPS_CROSS_BASE}/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=${XBPS_CROSS_BASE}/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/imports
+Qml2Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/qml
+Translations=${XBPS_CROSS_BASE}/usr/share/qt5/translations
+Settings=${XBPS_CROSS_BASE}/etc/xdg
+Examples=${XBPS_CROSS_BASE}/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+		qmake_args="-qtconf ${wrksrc}/qt.conf"
+	fi
+	${qmake} ${qmake_args} ${configure_args} \
 		PREFIX=/usr \
 		LIB=/usr/lib \
 		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \

From beb7464cbe803a0557eae61d9cf96ce50fc4ac45 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 18:19:17 +0200
Subject: [PATCH 07/16] merkaartor: fix build with qt5.13

---
 srcpkgs/merkaartor/patches/qt5.13.patch | 11 +++++++++++
 srcpkgs/merkaartor/template             |  8 ++------
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 srcpkgs/merkaartor/patches/qt5.13.patch

diff --git a/srcpkgs/merkaartor/patches/qt5.13.patch b/srcpkgs/merkaartor/patches/qt5.13.patch
new file mode 100644
index 00000000000..7fa4f4e27a9
--- /dev/null
+++ b/srcpkgs/merkaartor/patches/qt5.13.patch
@@ -0,0 +1,11 @@
+--- src/Layers/LicenseDisplayDialog.ui	2016-09-06 00:29:45.000000000 +0200
++++ -	2019-07-06 21:20:05.476017057 +0200
+@@ -43,7 +43,7 @@
+   <customwidget>
+    <class>QWebView</class>
+    <extends>QWidget</extends>
+-   <header>QtWebKit/QWebView</header>
++   <header>QWebView</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template
index 3ee40185ab7..5e44f5f7cb1 100644
--- a/srcpkgs/merkaartor/template
+++ b/srcpkgs/merkaartor/template
@@ -4,7 +4,7 @@ version=0.18.3
 revision=9
 build_style=qmake
 configure_args="SYSTEM_QUAZIP=1 SYSTEM_QUAZIP_LDFLAGS=-lquazip5"
-hostmakedepends="qt5-qmake libgdal-tools"
+hostmakedepends="qt5-qmake libgdal-tools qt5-host-tools"
 makedepends="libgdal-devel proj-devel qt5-declarative-devel qt5-svg-devel
  qt5-tools-devel qt5-webkit-devel quazip-devel"
 short_desc="Openstreetmap map editor"
@@ -17,9 +17,5 @@ checksum=d6b3e4d982b2c7b82331bc5bc8d993d733c443250f02919c3c4dbd6924e6e947
 CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-host-tools qt5-svg-devel qt5-webkit-devel"
-	CXXFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/qt5"
-	for i in ${XBPS_CROSS_BASE}/usr/include/qt5/*; do
-		CXXFLAGS+=" -I$i"
-	done
+	hostmakedepends+=" qt5-svg-devel qt5-webkit-devel"
 fi

From 887f6ee0c05faf45a6de5ce2756672c06f83783b Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:00:38 +0200
Subject: [PATCH 08/16] cutemarked: add patch for qt5.13

---
 srcpkgs/cutemarked/patches/QAction.patch | 10 ++++++++++
 srcpkgs/cutemarked/template              |  4 ++++
 2 files changed, 14 insertions(+)
 create mode 100644 srcpkgs/cutemarked/patches/QAction.patch

diff --git a/srcpkgs/cutemarked/patches/QAction.patch b/srcpkgs/cutemarked/patches/QAction.patch
new file mode 100644
index 00000000000..abed5ad1d4f
--- /dev/null
+++ b/srcpkgs/cutemarked/patches/QAction.patch
@@ -0,0 +1,10 @@
+--- app/optionsdialog.cpp	2016-03-28 13:48:50.000000000 +0200
++++ -	2019-07-02 18:59:36.832374065 +0200
+@@ -17,6 +17,7 @@
+ #include "optionsdialog.h"
+ #include "ui_optionsdialog.h"
+ 
++#include <QAction>
+ #include <QFontComboBox>
+ #include <QItemEditorFactory>
+ #include <QKeySequence>
diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template
index 7d4cfcce17a..53997add9ef 100644
--- a/srcpkgs/cutemarked/template
+++ b/srcpkgs/cutemarked/template
@@ -15,6 +15,10 @@ homepage="http://cloose.github.io/CuteMarkEd/"
 distfiles="https://github.com/cloose/${pkgname}/archive/v${version}.tar.gz"
 checksum=78a41808c2f0452375810abdff76eeaaee012f8d1368a2b8772ec6b4d2ceeec8
 
+pre_build() {
+	lrelease app/app.pro
+}
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-devel qt5-webkit-devel"
 fi

From ec420b33ba96eadd530702db0f603bdfcc9cb4bc Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:27:17 +0200
Subject: [PATCH 09/16] dtkwidget: rebuild against qt5.13

---
 srcpkgs/dtkwidget/patches/qt5.13.patch | 39 ++++++++++++++++++++++++++
 srcpkgs/dtkwidget/template             |  4 ++-
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/dtkwidget/patches/qt5.13.patch

diff --git a/srcpkgs/dtkwidget/patches/qt5.13.patch b/srcpkgs/dtkwidget/patches/qt5.13.patch
new file mode 100644
index 00000000000..a76621a3f3a
--- /dev/null
+++ b/srcpkgs/dtkwidget/patches/qt5.13.patch
@@ -0,0 +1,39 @@
+diff --git a/src/widgets/daboutdialog.cpp b/src/widgets/daboutdialog.cpp
+index 5c6ba91..a33fd94 100644
+--- src/widgets/daboutdialog.cpp
++++ src/widgets/daboutdialog.cpp
+@@ -575,6 +575,6 @@ void DAboutDialog::showEvent(QShowEvent *event)
+     }
+ }
+ 
+-#include "moc_daboutdialog.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_daboutdialog.cpp"
+diff --git a/src/widgets/dipv4lineedit.cpp b/src/widgets/dipv4lineedit.cpp
+index 4efe6e4..1cc68b4 100644
+--- src/widgets/dipv4lineedit.cpp
++++ src/widgets/dipv4lineedit.cpp
+@@ -530,6 +530,6 @@ bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
+     return DLineEdit::eventFilter(obj, e);
+ }
+ 
+-#include "moc_dipv4lineedit.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dipv4lineedit.cpp"
+diff --git a/src/widgets/dlistview.cpp b/src/widgets/dlistview.cpp
+index 0dcc244..523ebd5 100644
+--- src/widgets/dlistview.cpp
++++ src/widgets/dlistview.cpp
+@@ -709,6 +709,6 @@ bool DListView::edit(const QModelIndex &index, QAbstractItemView::EditTrigger tr
+     return tmp;
+ }
+ 
+-#include "moc_dlistview.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dlistview.cpp"
diff --git a/srcpkgs/dtkwidget/template b/srcpkgs/dtkwidget/template
index 7dc6547b2b7..6fbac916d9b 100644
--- a/srcpkgs/dtkwidget/template
+++ b/srcpkgs/dtkwidget/template
@@ -1,7 +1,7 @@
 # Template file for 'dtkwidget'
 pkgname=dtkwidget
 version=2.0.14
-revision=1
+revision=2
 build_style=qmake
 configure_args="DBUS_VERSION_0_4_2=YES LIB_INSTALL_DIR=/usr/lib VERSION=${version}"
 hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
@@ -21,6 +21,8 @@ if [ "$CROSS_BUILD" ]; then
 	qt5-svg-devel gsettings-qt-devel"
 fi
 
+nocross=yes
+
 dtkwidget-devel_package() {
 	depends="${sourcepkg}>=${version}_${revision} dtkcore-devel"
 	short_desc+=" - development files"

From ed955ac6c6555547fab041d8517d2d735d4f8941 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 21:43:18 +0200
Subject: [PATCH 10/16] goldendict: add patches for qt5.13

---
 srcpkgs/goldendict/patches/QAction.patch | 20 ++++++++++++++++++++
 srcpkgs/goldendict/patches/QIcon.patch   | 10 ++++++++++
 srcpkgs/goldendict/template              |  6 ++++--
 3 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/goldendict/patches/QAction.patch
 create mode 100644 srcpkgs/goldendict/patches/QIcon.patch

diff --git a/srcpkgs/goldendict/patches/QAction.patch b/srcpkgs/goldendict/patches/QAction.patch
new file mode 100644
index 00000000000..146fe34e2fa
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QAction.patch
@@ -0,0 +1,20 @@
+--- fulltextsearch.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:27:37.881036339 +0200
+@@ -1,6 +1,7 @@
+ #ifndef __FULLTEXTSEARCH_HH_INCLUDED__
+ #define __FULLTEXTSEARCH_HH_INCLUDED__
+ 
++#include <QAction>
+ #include <QSemaphore>
+ #include <QStringList>
+ #include <QRegExp>
+--- groups_widgets.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:31:52.350308868 +0200
+@@ -10,6 +10,7 @@
+ 
+ #include <QListWidget>
+ #include <QSortFilterProxyModel>
++#include <QAction>
+ 
+ #include "config.hh"
+ #include "dictionary.hh"
diff --git a/srcpkgs/goldendict/patches/QIcon.patch b/srcpkgs/goldendict/patches/QIcon.patch
new file mode 100644
index 00000000000..ea066d1946f
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QIcon.patch
@@ -0,0 +1,10 @@
+--- initializing.cc	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:26:19.088317401 +0200
+@@ -3,6 +3,7 @@
+ 
+ #include "initializing.hh"
+ #include <QCloseEvent>
++#include <QIcon>
+ 
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 )
+ #include <QtWidgets/QStyleFactory>
diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template
index de0918993c6..1d14c0bd5aa 100644
--- a/srcpkgs/goldendict/template
+++ b/srcpkgs/goldendict/template
@@ -4,18 +4,20 @@ version=1.5.0RC2
 revision=4
 wrksrc="${pkgname}-${version/RC/-RC}"
 build_style=qmake
-hostmakedepends="qt5-qmake pkg-config qt5-tools"
+hostmakedepends="qt5-qmake pkg-config qt5-host-tools"
 makedepends="tiff-devel qt5-devel libvorbis-devel zlib-devel
  libXtst-devel hunspell-devel qt5-tools-devel qt5-declarative-devel
  qt5-webkit-devel lzo-devel bzip2-devel libao-devel qt5-svg-devel
  libeb-devel qt5-x11extras-devel ffmpeg-devel"
 short_desc="A feature-rich dictionary lookup program"
 maintainer="John <johnz@posteo.net>"
-license="GPL-3"
+license="GPL-3.0-or-later"
 homepage="http://goldendict.org/"
 distfiles="https://github.com/goldendict/goldendict/archive/${version/RC/-RC}.tar.gz"
 checksum=bccee0a3d3902f8fa31e439e220a405065fff774e5f8c581be2b0743d3f83fde
 
+CXXFLAGS="-Wno-deprecated"
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-tools-devel qt5-webkit-devel qt5-host-tools qt5-svg-devel qt5-x11extras-devel"
 fi

From 16d0d686686d8bccc1e7c7fdf042c571cdafd753 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 00:13:51 +0200
Subject: [PATCH 11/16] mpc-qt: change distfile to sources.voidlinux.org

the upstream github account seems to be deleted
---
 srcpkgs/mpc-qt/template | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/mpc-qt/template b/srcpkgs/mpc-qt/template
index ae808c894ef..182072df113 100644
--- a/srcpkgs/mpc-qt/template
+++ b/srcpkgs/mpc-qt/template
@@ -4,15 +4,16 @@ version=18.08
 revision=1
 build_style=qmake
 configure_args="MPCQT_VERSION=${version}"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config qt5-qmake"
 makedepends="qt5-devel qt5-x11extras-devel mpv-devel"
 short_desc="Clone of Media Player Classic reimplemented in Qt"
 maintainer="SolitudeSF <solitudesf@protonmail.com>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/cmdrkotori/mpc-qt"
-distfiles="${homepage}/archive/v${version}.tar.gz"
+#distfiles="${homepage}/archive/v${version}.tar.gz"
+distfiles="https://sources.voidlinux.org/mpc-qt-18.08/v18.08.tar.gz"
 checksum=c58fd90926773c9da8bdfc1a8e4dba0b95cbc58cee6db9981e8de94fd9534406
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake qt5-x11extras-devel"
+	hostmakedepends+=" qt5-x11extras-devel"
 fi

From 035a27f1daef4b155b1f7c764e6a177a1f804272 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 04:00:46 +0200
Subject: [PATCH 12/16] vokoscreen: template fixup for qt5.13

---
 srcpkgs/vokoscreen/template | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/vokoscreen/template b/srcpkgs/vokoscreen/template
index d201c80cd57..3baf73f1c67 100644
--- a/srcpkgs/vokoscreen/template
+++ b/srcpkgs/vokoscreen/template
@@ -3,12 +3,16 @@ pkgname=vokoscreen
 version=2.5.0
 revision=1
 build_style=qmake
-hostmakedepends="pkg-config qt5-tools qt5-qmake"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
 makedepends="alsa-lib-devel libX11-devel libXrandr-devel qt5-devel qt5-x11extras-devel v4l-utils-devel"
 depends="ffmpeg"
 short_desc="Easy to use screencast creator"
 maintainer="Duncaen <duncaen@voidlinux.org>"
-license="GPL-2"
+license="GPL-2.0-only"
 homepage="http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"
 distfiles="https://github.com/vkohaupt/vokoscreen/archive/${version}.tar.gz"
 checksum=7f5d9abfa3b4a1f7ce657838f5169cd80a590be490dacd0ad1751853a38f4245
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-x11extras-devel"
+fi

From 7758a5b817219bab6017d1b162832cb44384dfd2 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:08:07 +0200
Subject: [PATCH 13/16] octoxbps: fixes for qt5.13

---
 srcpkgs/octoxbps/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/octoxbps/template b/srcpkgs/octoxbps/template
index 61a4bd50013..abb78865f69 100644
--- a/srcpkgs/octoxbps/template
+++ b/srcpkgs/octoxbps/template
@@ -15,7 +15,7 @@ checksum=6f7643bb07960d8c8f60ce70dc495f866ae60a4d6d8160a7f108f79bf53d2d22
 
 do_configure() {
 	for _dir in ${wrksrc} ${wrksrc}/notifier/octoxbps-notifier; do
-		cd $_dir && qmake ${configure_args} \
+		cd $_dir && qmake-qt5 ${configure_args} \
 			PREFIX=/usr \
 			LIB=/usr/lib \
 			QMAKE_CFLAGS="${CFLAGS}" \

From 2f6ad21222c143a9391813777a049fbf5e37aff0 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:45:46 +0200
Subject: [PATCH 14/16] qtpass: fix build for qt5.13

---
 srcpkgs/qtpass/patches/qmake-qt5.13.patch | 34 +++++++++++++++++++++++
 srcpkgs/qtpass/template                   |  7 +++--
 2 files changed, 38 insertions(+), 3 deletions(-)
 create mode 100644 srcpkgs/qtpass/patches/qmake-qt5.13.patch

diff --git a/srcpkgs/qtpass/patches/qmake-qt5.13.patch b/srcpkgs/qtpass/patches/qmake-qt5.13.patch
new file mode 100644
index 00000000000..45bacf75a4a
--- /dev/null
+++ b/srcpkgs/qtpass/patches/qmake-qt5.13.patch
@@ -0,0 +1,34 @@
+--- src/src.pro	2018-06-04 11:43:53.000000000 +0200
++++ -	2019-07-10 02:36:51.536590804 +0200
+@@ -7,6 +7,31 @@
+ CONFIG += c++11 staticlib
+ CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
+ 
++TRANSLATIONS    +=  ../localization/localization_nl_NL.ts \
++                    ../localization/localization_ca.ts \
++                    ../localization/localization_de_DE.ts \
++                    ../localization/localization_es_ES.ts \
++                    ../localization/localization_gl_ES.ts \
++                    ../localization/localization_hu_HU.ts \
++                    ../localization/localization_sv_SE.ts \
++                    ../localization/localization_pl_PL.ts \
++                    ../localization/localization_ru_RU.ts \
++                    ../localization/localization_he_IL.ts \
++                    ../localization/localization_zh_CN.ts \
++                    ../localization/localization_ar_MA.ts \
++                    ../localization/localization_fr_FR.ts \
++                    ../localization/localization_fr_BE.ts \
++                    ../localization/localization_nl_BE.ts \
++                    ../localization/localization_fr_LU.ts \
++                    ../localization/localization_de_LU.ts \
++                    ../localization/localization_lb_LU.ts \
++                    ../localization/localization_en_GB.ts \
++                    ../localization/localization_en_US.ts \
++                    ../localization/localization_el_GR.ts \
++                    ../localization/localization_cs_CZ.ts \
++                    ../localization/localization_it_IT.ts \
++                    ../localization/localization_pt_PT.ts
++
+ SOURCES   += mainwindow.cpp \
+              configdialog.cpp \
+              storemodel.cpp \
diff --git a/srcpkgs/qtpass/template b/srcpkgs/qtpass/template
index 1f5780badeb..80b6bc6c712 100644
--- a/srcpkgs/qtpass/template
+++ b/srcpkgs/qtpass/template
@@ -4,17 +4,18 @@ version=1.2.3
 revision=1
 wrksrc="QtPass-${version}"
 build_style=qmake
-hostmakedepends="qt5-devel qt5-tools"
-makedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
+makedepends="qt5-devel qt5-svg-devel"
 depends="pass pwgen"
 short_desc="Multi-platform GUI for pass"
 maintainer="annejan <brouwer@annejan.com>"
 license="GPL-3.0-or-later"
-#changelog="https://raw.githubusercontent.com/IJHack/QtPass/master/CHANGELOG.md"
 homepage="https://qtpass.org/"
+changelog="https://raw.githubusercontent.com/IJHack/QtPass/master/CHANGELOG.md"
 distfiles="https://github.com/IJHack/${pkgname}/archive/v${version}.tar.gz"
 checksum=658b632bb06e9ad63d5076aace5fe0e57a0f7f20e0aafdfb64f86a25bdadbb07
 
+
 do_install() {
 	vbin main/qtpass
 

From e5faae8c286ff80b2e850a71bc530c27cacf4f25 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 20:10:32 +0200
Subject: [PATCH 15/16] linssid: fix build for qt5.13

---
 srcpkgs/linssid/patches/project.patch     |  3 +-
 srcpkgs/linssid/patches/qwt-include.patch | 56 -----------------------
 srcpkgs/linssid/template                  |  6 ++-
 3 files changed, 7 insertions(+), 58 deletions(-)
 delete mode 100644 srcpkgs/linssid/patches/qwt-include.patch

diff --git a/srcpkgs/linssid/patches/project.patch b/srcpkgs/linssid/patches/project.patch
index a228007bb22..356419f862b 100644
--- a/srcpkgs/linssid/patches/project.patch
+++ b/srcpkgs/linssid/patches/project.patch
@@ -2,7 +2,8 @@
 +++ linssid-app/linssid-app.pro
 @@ -5,7 +5,7 @@
  CONFIG -= debug_and_release app_bundle lib_bundle
- CONFIG += release 
+-CONFIG += release
++CONFIG += release qwt
  PKGCONFIG +=
 -QT = core gui widgets svg
 +QT = core gui widgets
diff --git a/srcpkgs/linssid/patches/qwt-include.patch b/srcpkgs/linssid/patches/qwt-include.patch
deleted file mode 100644
index 04a25d42b21..00000000000
--- a/srcpkgs/linssid/patches/qwt-include.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- linssid-app/MainForm.cpp
-+++ linssid-app/MainForm.cpp
-@@ -23,14 +23,14 @@
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_symbol.h>
--#include <qwt_plot_marker.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_symbol.h>
-+#include <qwt/qwt_plot_marker.h>
- #include <QPointF>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt_scale_draw.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <sys/types.h>
-
---- linssid-app/MainForm.h
-+++ linssid-app/MainForm.h
-@@ -13,11 +13,11 @@
- #include <QEvent>
- #include <QString>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_scale_draw.h>
- #include "ui_MainForm.h"
- #include "prefsDialog.h"
- #include "Custom.h"
-
---- linssid-app/MainForm.ui
-+++ linssid-app/MainForm.ui
-@@ -757,7 +757,7 @@
-   <customwidget>
-    <class>QwtPlot</class>
-    <extends>QFrame</extends>
--   <header>qwt_plot.h</header>
-+   <header>qwt/qwt_plot.h</header>
-    <container>1</container>
-   </customwidget>
-  </customwidgets>
diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template
index 80509d71bb1..951532e1be9 100644
--- a/srcpkgs/linssid/template
+++ b/srcpkgs/linssid/template
@@ -3,7 +3,7 @@ pkgname=linssid
 version=3.6
 revision=2
 build_style=qmake
-hostmakedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
 makedepends="boost-devel qwt-devel"
 depends="qt5-svg"
 short_desc="Graphical wireless AP scanner"
@@ -12,3 +12,7 @@ license="GPL-3.0-only"
 homepage="https://sourceforge.net/projects/linssid/"
 distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}.orig.tar.gz"
 checksum=57301ee93f708f2512316668bf4e718502f37f21a5e93b68fc604a9032e3e49c
+
+pre_configure() {
+	sed -e "s%/usr/include%${XBPS_CROSS_BASE}&%g" -i linssid-app/linssid-app.pro
+}

From 68e8677b7027693af2505e77192ecb466eaeb7f0 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 21:47:21 +0200
Subject: [PATCH 16/16] dtkcore: set nocross

[ci skip]
---
 srcpkgs/dtkcore/template | 21 +--------------------
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/srcpkgs/dtkcore/template b/srcpkgs/dtkcore/template
index c2eb731d949..c12b4989980 100644
--- a/srcpkgs/dtkcore/template
+++ b/srcpkgs/dtkcore/template
@@ -18,26 +18,7 @@ if [ "$CROSS_BUILD" ];then
 	hostmakedepends+=" qt5-devel gsettings-qt-devel"
 fi
 
-pre_build() {
-	# This is needed for musl, does somehow not get build there automatically
-	make sub-tools-qmake_all
-	make -C tools sub-deepin-os-release-all
-}
-
-pre_install() {
-	# Replace the host arch binary with target arch one
-	cd tools/deepin-os-release
-	rm *.o
-	qmake ${configure_args} \
-		PREFIX=/usr \
-		LIB=/usr/lib \
-		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
-		QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
-		QMAKE_LFLAGS="${LDFLAGS}"
-	make CC="$CC" CXX="$CXX" LINK="$CXX"
-	cd ${wrksrc}
-}
+nocross="Some QMake mess"
 
 dtkcore-devel_package() {
 	short_desc+=" - development files"

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Updated] [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (44 preceding siblings ...)
  2019-07-10 22:32 ` voidlinux-github
@ 2019-07-11  4:15 ` voidlinux-github
  2019-07-11  4:15 ` voidlinux-github
                   ` (2 subsequent siblings)
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-11  4:15 UTC (permalink / raw)
  To: ml

[-- 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: 510129 bytes --]

From dbc6cc1fd78d17282a99792f7498f7d8832f739b Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 23 May 2019 08:49:40 +0200
Subject: [PATCH 01/16] 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                          |  145 +-
 50 files changed, 7811 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 951f2e781d4..3e836fa7a05 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 = &regs;
+@@ -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 = &regs;
-@@ -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 2293f512d0a..bac09fe26a3 100644
--- a/srcpkgs/qt5/template
+++ b/srcpkgs/qt5/template
@@ -1,7 +1,7 @@
 # Template file for 'qt5'
 pkgname=qt5
-version=5.11.3
-revision=8
+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://mirrors.ukfast.co.uk/sites/qt.io/archive/qt/${version%.*}/${version}/single/qt-everywhere-src-${version}.tar.xz"
-checksum=859417642713cee2493ee3646a7fee782c9f1db39e41d7bb1322bba0c5f0ff4d
+distfiles="http://download.qt.io/official_releases/qt/${version%.*}/${version}/single/qt-everywhere-src-${version}.tar.xz"
+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
@@ -253,9 +240,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,7 +269,6 @@ 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
 			_bootstrap_gn
 		fi
@@ -307,6 +290,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 +323,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 +357,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 +378,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 +424,6 @@ do_install() {
 	cd ${wrksrc}/qtbase
 	make INSTALL_ROOT=${DESTDIR} install
 
-	vlicense ${wrksrc}/LGPL_EXCEPTION.txt
 	_cleanup_wrksrc_leak
 
 	# Symbolic links for remaining binaries
@@ -498,7 +496,10 @@ do_install() {
 		dirs+=" qttools/src/qtattributionsscanner"
 		dirs+=" qttools/src/linguist/lconvert"
 		dirs+=" qttools/src/linguist/lrelease"
+		dirs+=" qttools/src/linguist/lrelease-pro"
+		dirs+=" qttools/src/linguist/lprodump"
 		dirs+=" qttools/src/linguist/lupdate"
+		dirs+=" qttools/src/linguist/lupdate-pro"
 		# Cannot be cross compiled (target clang issue)
 		# dirs+=" qttools/src/qdoc"
 
@@ -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}"
@@ -775,7 +782,7 @@ qt5-quickcontrols2_package() {
 
 qt5-remoteobjects-devel_package() {
 	short_desc+=" - Remote Objects (development)"
-	depends="qt5-quickcontrols2-${version}_${revision} qt5-devel-${version}_${revision}"
+	depends="qt5-remoteobjects-${version}_${revision} qt5-devel-${version}_${revision}"
 	pkg_install() {
 		_install_devel qtremoteobjects
 	}
@@ -1045,7 +1052,7 @@ qt5-host-tools_package() {
 		vmkdir usr/lib/qt5/bin
 		vmkdir usr/bin
 		for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \
-			lconvert lupdate lrelease; do
+			lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then
 				mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/
 			fi
@@ -1099,7 +1106,7 @@ qt5-tools_package() {
 		install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications
 		_move_target_binaries qtattributionsscanner qdoc
 		# Move some binaries to qt5-host-tools
-		for f in lconvert lupdate lrelease; do
+		for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do
 			if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then
 				mkdir -p ${dest}/usr/lib/qt5/bin
 				mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/
@@ -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"
@@ -1175,6 +1182,10 @@ qt5-qmake_package() {
 		# Change -isystem to -I to avoid "#include_next <stdlib.h>" errors
 		sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \
 			-e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;'
+		find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \
+			-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' \;
 
 		# Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf
 		if [ "$CROSS_BUILD" ]; then

From 26738a61365f6790f0557c3f2a3f76879fb9aead Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 15 Apr 2019 18:28:05 +0200
Subject: [PATCH 02/16] 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 e20507c8be3b072bbb749a853b2490eb382a07be Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Mon, 11 Mar 2019 01:25:14 +0100
Subject: [PATCH 03/16] telegram-desktop: rebuild for qt5-5.13.0

---
 srcpkgs/telegram-desktop/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/telegram-desktop/template b/srcpkgs/telegram-desktop/template
index f1443933130..38d2da354d8 100644
--- a/srcpkgs/telegram-desktop/template
+++ b/srcpkgs/telegram-desktop/template
@@ -1,7 +1,7 @@
 # Template file for 'telegram-desktop'
 pkgname=telegram-desktop
 version=1.7.14
-revision=1
+revision=2
 _libtgvoip_commit=0e92a22746d15157bea46faddd61b79e9964275a
 _GSL_commit=d846fe50a3f0bb7767c7e087a05f4be95f4da0ec
 _variant_commit=550ac2f159ca883d360c196149b466955c77a573
@@ -18,7 +18,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 liblz4-devel rlottie-devel"
-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 de69a0e9e385b28add99fe06f8006c0deb3268ab Mon Sep 17 00:00:00 2001
From: q66 <daniel@octaforge.org>
Date: Fri, 15 Mar 2019 18:57:17 +0100
Subject: [PATCH 04/16] 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 f2cdfe2d3287dce6d5b4aef7340edb1236f1ac08 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 18 Apr 2019 22:54:23 +0200
Subject: [PATCH 05/16] qtcreator: remove deprecated qt5-canvas3d dep

and rebuild for qt5.13

[ci skip]
---
 srcpkgs/qtcreator/template | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/qtcreator/template b/srcpkgs/qtcreator/template
index 3cf7f4742c0..bf6571651ee 100644
--- a/srcpkgs/qtcreator/template
+++ b/srcpkgs/qtcreator/template
@@ -1,7 +1,7 @@
 # Template file for 'qtcreator'
 pkgname=qtcreator
 version=4.9.2
-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

From 13fbe7ac078e558521d00c7ebc5e81fb59c621ce Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 00:52:53 +0200
Subject: [PATCH 06/16] common/build-style/qmake: use custom qt.conf for cross
 compiling

[ci skip]
---
 common/build-style/qmake.sh | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/common/build-style/qmake.sh b/common/build-style/qmake.sh
index ef8b87db730..63be5a3a568 100644
--- a/common/build-style/qmake.sh
+++ b/common/build-style/qmake.sh
@@ -3,6 +3,7 @@
 #
 do_configure() {
 	local qmake
+	local qmake_args
 	if [ -x "/usr/lib/qt5/bin/qmake" ]; then
 		# Qt5 qmake
 		qmake="/usr/lib/qt5/bin/qmake"
@@ -14,7 +15,35 @@ do_configure() {
 	if [ -z "${qmake}" ]; then
 		msg_error "${pkgver}: Could not find qmake - missing in hostdepends?\n"
 	fi
-	${qmake} ${configure_args} \
+	if [ "$CROSS_BUILD" ] && [ "$qmake" == "/usr/lib/qt5/bin/qmake" ]; then
+		cat > "${wrksrc}/qt.conf" <<_EOF
+[Paths]
+Sysroot=${XBPS_CROSS_BASE}
+Prefix=${XBPS_CROSS_BASE}/usr
+ArchData=${XBPS_CROSS_BASE}/usr/lib/qt5
+Data=${XBPS_CROSS_BASE}/usr/share/qt5
+Documentation=${XBPS_CROSS_BASE}/usr/share/doc/qt5
+Headers=${XBPS_CROSS_BASE}/usr/include/qt5
+Libraries=${XBPS_CROSS_BASE}/usr/lib
+LibraryExecutables=/usr/lib/qt5/libexec
+Binaries=/usr/lib/qt5/bin
+Tests=${XBPS_CROSS_BASE}/usr/tests
+Plugins=/usr/lib/qt5/plugins
+Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/imports
+Qml2Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/qml
+Translations=${XBPS_CROSS_BASE}/usr/share/qt5/translations
+Settings=${XBPS_CROSS_BASE}/etc/xdg
+Examples=${XBPS_CROSS_BASE}/usr/share/qt5/examples
+HostPrefix=/usr
+HostData=/usr/lib/qt5
+HostBinaries=/usr/lib/qt5/bin
+HostLibraries=/usr/lib
+Spec=linux-g++
+TargetSpec=linux-g++
+_EOF
+		qmake_args="-qtconf ${wrksrc}/qt.conf"
+	fi
+	${qmake} ${qmake_args} ${configure_args} \
 		PREFIX=/usr \
 		LIB=/usr/lib \
 		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \

From beb7464cbe803a0557eae61d9cf96ce50fc4ac45 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 18:19:17 +0200
Subject: [PATCH 07/16] merkaartor: fix build with qt5.13

---
 srcpkgs/merkaartor/patches/qt5.13.patch | 11 +++++++++++
 srcpkgs/merkaartor/template             |  8 ++------
 2 files changed, 13 insertions(+), 6 deletions(-)
 create mode 100644 srcpkgs/merkaartor/patches/qt5.13.patch

diff --git a/srcpkgs/merkaartor/patches/qt5.13.patch b/srcpkgs/merkaartor/patches/qt5.13.patch
new file mode 100644
index 00000000000..7fa4f4e27a9
--- /dev/null
+++ b/srcpkgs/merkaartor/patches/qt5.13.patch
@@ -0,0 +1,11 @@
+--- src/Layers/LicenseDisplayDialog.ui	2016-09-06 00:29:45.000000000 +0200
++++ -	2019-07-06 21:20:05.476017057 +0200
+@@ -43,7 +43,7 @@
+   <customwidget>
+    <class>QWebView</class>
+    <extends>QWidget</extends>
+-   <header>QtWebKit/QWebView</header>
++   <header>QWebView</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template
index 3ee40185ab7..5e44f5f7cb1 100644
--- a/srcpkgs/merkaartor/template
+++ b/srcpkgs/merkaartor/template
@@ -4,7 +4,7 @@ version=0.18.3
 revision=9
 build_style=qmake
 configure_args="SYSTEM_QUAZIP=1 SYSTEM_QUAZIP_LDFLAGS=-lquazip5"
-hostmakedepends="qt5-qmake libgdal-tools"
+hostmakedepends="qt5-qmake libgdal-tools qt5-host-tools"
 makedepends="libgdal-devel proj-devel qt5-declarative-devel qt5-svg-devel
  qt5-tools-devel qt5-webkit-devel quazip-devel"
 short_desc="Openstreetmap map editor"
@@ -17,9 +17,5 @@ checksum=d6b3e4d982b2c7b82331bc5bc8d993d733c443250f02919c3c4dbd6924e6e947
 CXXFLAGS="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H"
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-host-tools qt5-svg-devel qt5-webkit-devel"
-	CXXFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/qt5"
-	for i in ${XBPS_CROSS_BASE}/usr/include/qt5/*; do
-		CXXFLAGS+=" -I$i"
-	done
+	hostmakedepends+=" qt5-svg-devel qt5-webkit-devel"
 fi

From 887f6ee0c05faf45a6de5ce2756672c06f83783b Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:00:38 +0200
Subject: [PATCH 08/16] cutemarked: add patch for qt5.13

---
 srcpkgs/cutemarked/patches/QAction.patch | 10 ++++++++++
 srcpkgs/cutemarked/template              |  4 ++++
 2 files changed, 14 insertions(+)
 create mode 100644 srcpkgs/cutemarked/patches/QAction.patch

diff --git a/srcpkgs/cutemarked/patches/QAction.patch b/srcpkgs/cutemarked/patches/QAction.patch
new file mode 100644
index 00000000000..abed5ad1d4f
--- /dev/null
+++ b/srcpkgs/cutemarked/patches/QAction.patch
@@ -0,0 +1,10 @@
+--- app/optionsdialog.cpp	2016-03-28 13:48:50.000000000 +0200
++++ -	2019-07-02 18:59:36.832374065 +0200
+@@ -17,6 +17,7 @@
+ #include "optionsdialog.h"
+ #include "ui_optionsdialog.h"
+ 
++#include <QAction>
+ #include <QFontComboBox>
+ #include <QItemEditorFactory>
+ #include <QKeySequence>
diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template
index 7d4cfcce17a..53997add9ef 100644
--- a/srcpkgs/cutemarked/template
+++ b/srcpkgs/cutemarked/template
@@ -15,6 +15,10 @@ homepage="http://cloose.github.io/CuteMarkEd/"
 distfiles="https://github.com/cloose/${pkgname}/archive/v${version}.tar.gz"
 checksum=78a41808c2f0452375810abdff76eeaaee012f8d1368a2b8772ec6b4d2ceeec8
 
+pre_build() {
+	lrelease app/app.pro
+}
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-devel qt5-webkit-devel"
 fi

From ec420b33ba96eadd530702db0f603bdfcc9cb4bc Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 19:27:17 +0200
Subject: [PATCH 09/16] dtkwidget: rebuild against qt5.13

---
 srcpkgs/dtkwidget/patches/qt5.13.patch | 39 ++++++++++++++++++++++++++
 srcpkgs/dtkwidget/template             |  4 ++-
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/dtkwidget/patches/qt5.13.patch

diff --git a/srcpkgs/dtkwidget/patches/qt5.13.patch b/srcpkgs/dtkwidget/patches/qt5.13.patch
new file mode 100644
index 00000000000..a76621a3f3a
--- /dev/null
+++ b/srcpkgs/dtkwidget/patches/qt5.13.patch
@@ -0,0 +1,39 @@
+diff --git a/src/widgets/daboutdialog.cpp b/src/widgets/daboutdialog.cpp
+index 5c6ba91..a33fd94 100644
+--- src/widgets/daboutdialog.cpp
++++ src/widgets/daboutdialog.cpp
+@@ -575,6 +575,6 @@ void DAboutDialog::showEvent(QShowEvent *event)
+     }
+ }
+ 
+-#include "moc_daboutdialog.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_daboutdialog.cpp"
+diff --git a/src/widgets/dipv4lineedit.cpp b/src/widgets/dipv4lineedit.cpp
+index 4efe6e4..1cc68b4 100644
+--- src/widgets/dipv4lineedit.cpp
++++ src/widgets/dipv4lineedit.cpp
+@@ -530,6 +530,6 @@ bool DIpv4LineEdit::eventFilter(QObject *obj, QEvent *e)
+     return DLineEdit::eventFilter(obj, e);
+ }
+ 
+-#include "moc_dipv4lineedit.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dipv4lineedit.cpp"
+diff --git a/src/widgets/dlistview.cpp b/src/widgets/dlistview.cpp
+index 0dcc244..523ebd5 100644
+--- src/widgets/dlistview.cpp
++++ src/widgets/dlistview.cpp
+@@ -709,6 +709,6 @@ bool DListView::edit(const QModelIndex &index, QAbstractItemView::EditTrigger tr
+     return tmp;
+ }
+ 
+-#include "moc_dlistview.cpp"
+-
+ DWIDGET_END_NAMESPACE
++
++#include "moc_dlistview.cpp"
diff --git a/srcpkgs/dtkwidget/template b/srcpkgs/dtkwidget/template
index 7dc6547b2b7..6fbac916d9b 100644
--- a/srcpkgs/dtkwidget/template
+++ b/srcpkgs/dtkwidget/template
@@ -1,7 +1,7 @@
 # Template file for 'dtkwidget'
 pkgname=dtkwidget
 version=2.0.14
-revision=1
+revision=2
 build_style=qmake
 configure_args="DBUS_VERSION_0_4_2=YES LIB_INSTALL_DIR=/usr/lib VERSION=${version}"
 hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
@@ -21,6 +21,8 @@ if [ "$CROSS_BUILD" ]; then
 	qt5-svg-devel gsettings-qt-devel"
 fi
 
+nocross=yes
+
 dtkwidget-devel_package() {
 	depends="${sourcepkg}>=${version}_${revision} dtkcore-devel"
 	short_desc+=" - development files"

From ed955ac6c6555547fab041d8517d2d735d4f8941 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Tue, 2 Jul 2019 21:43:18 +0200
Subject: [PATCH 10/16] goldendict: add patches for qt5.13

---
 srcpkgs/goldendict/patches/QAction.patch | 20 ++++++++++++++++++++
 srcpkgs/goldendict/patches/QIcon.patch   | 10 ++++++++++
 srcpkgs/goldendict/template              |  6 ++++--
 3 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 srcpkgs/goldendict/patches/QAction.patch
 create mode 100644 srcpkgs/goldendict/patches/QIcon.patch

diff --git a/srcpkgs/goldendict/patches/QAction.patch b/srcpkgs/goldendict/patches/QAction.patch
new file mode 100644
index 00000000000..146fe34e2fa
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QAction.patch
@@ -0,0 +1,20 @@
+--- fulltextsearch.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:27:37.881036339 +0200
+@@ -1,6 +1,7 @@
+ #ifndef __FULLTEXTSEARCH_HH_INCLUDED__
+ #define __FULLTEXTSEARCH_HH_INCLUDED__
+ 
++#include <QAction>
+ #include <QSemaphore>
+ #include <QStringList>
+ #include <QRegExp>
+--- groups_widgets.hh	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:31:52.350308868 +0200
+@@ -10,6 +10,7 @@
+ 
+ #include <QListWidget>
+ #include <QSortFilterProxyModel>
++#include <QAction>
+ 
+ #include "config.hh"
+ #include "dictionary.hh"
diff --git a/srcpkgs/goldendict/patches/QIcon.patch b/srcpkgs/goldendict/patches/QIcon.patch
new file mode 100644
index 00000000000..ea066d1946f
--- /dev/null
+++ b/srcpkgs/goldendict/patches/QIcon.patch
@@ -0,0 +1,10 @@
+--- initializing.cc	2016-04-26 18:32:50.000000000 +0200
++++ -	2019-07-02 21:26:19.088317401 +0200
+@@ -3,6 +3,7 @@
+ 
+ #include "initializing.hh"
+ #include <QCloseEvent>
++#include <QIcon>
+ 
+ #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 )
+ #include <QtWidgets/QStyleFactory>
diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template
index de0918993c6..1d14c0bd5aa 100644
--- a/srcpkgs/goldendict/template
+++ b/srcpkgs/goldendict/template
@@ -4,18 +4,20 @@ version=1.5.0RC2
 revision=4
 wrksrc="${pkgname}-${version/RC/-RC}"
 build_style=qmake
-hostmakedepends="qt5-qmake pkg-config qt5-tools"
+hostmakedepends="qt5-qmake pkg-config qt5-host-tools"
 makedepends="tiff-devel qt5-devel libvorbis-devel zlib-devel
  libXtst-devel hunspell-devel qt5-tools-devel qt5-declarative-devel
  qt5-webkit-devel lzo-devel bzip2-devel libao-devel qt5-svg-devel
  libeb-devel qt5-x11extras-devel ffmpeg-devel"
 short_desc="A feature-rich dictionary lookup program"
 maintainer="John <johnz@posteo.net>"
-license="GPL-3"
+license="GPL-3.0-or-later"
 homepage="http://goldendict.org/"
 distfiles="https://github.com/goldendict/goldendict/archive/${version/RC/-RC}.tar.gz"
 checksum=bccee0a3d3902f8fa31e439e220a405065fff774e5f8c581be2b0743d3f83fde
 
+CXXFLAGS="-Wno-deprecated"
+
 if [ "$CROSS_BUILD" ]; then
 	hostmakedepends+=" qt5-tools-devel qt5-webkit-devel qt5-host-tools qt5-svg-devel qt5-x11extras-devel"
 fi

From 16d0d686686d8bccc1e7c7fdf042c571cdafd753 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 00:13:51 +0200
Subject: [PATCH 11/16] mpc-qt: change distfile to sources.voidlinux.org

the upstream github account seems to be deleted
---
 srcpkgs/mpc-qt/template | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/mpc-qt/template b/srcpkgs/mpc-qt/template
index ae808c894ef..182072df113 100644
--- a/srcpkgs/mpc-qt/template
+++ b/srcpkgs/mpc-qt/template
@@ -4,15 +4,16 @@ version=18.08
 revision=1
 build_style=qmake
 configure_args="MPCQT_VERSION=${version}"
-hostmakedepends="pkg-config"
+hostmakedepends="pkg-config qt5-qmake"
 makedepends="qt5-devel qt5-x11extras-devel mpv-devel"
 short_desc="Clone of Media Player Classic reimplemented in Qt"
 maintainer="SolitudeSF <solitudesf@protonmail.com>"
 license="GPL-2.0-or-later"
 homepage="https://github.com/cmdrkotori/mpc-qt"
-distfiles="${homepage}/archive/v${version}.tar.gz"
+#distfiles="${homepage}/archive/v${version}.tar.gz"
+distfiles="https://sources.voidlinux.org/mpc-qt-18.08/v18.08.tar.gz"
 checksum=c58fd90926773c9da8bdfc1a8e4dba0b95cbc58cee6db9981e8de94fd9534406
 
 if [ "$CROSS_BUILD" ]; then
-	hostmakedepends+=" qt5-qmake qt5-x11extras-devel"
+	hostmakedepends+=" qt5-x11extras-devel"
 fi

From 035a27f1daef4b155b1f7c764e6a177a1f804272 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Wed, 3 Jul 2019 04:00:46 +0200
Subject: [PATCH 12/16] vokoscreen: template fixup for qt5.13

---
 srcpkgs/vokoscreen/template | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/srcpkgs/vokoscreen/template b/srcpkgs/vokoscreen/template
index d201c80cd57..3baf73f1c67 100644
--- a/srcpkgs/vokoscreen/template
+++ b/srcpkgs/vokoscreen/template
@@ -3,12 +3,16 @@ pkgname=vokoscreen
 version=2.5.0
 revision=1
 build_style=qmake
-hostmakedepends="pkg-config qt5-tools qt5-qmake"
+hostmakedepends="pkg-config qt5-host-tools qt5-qmake"
 makedepends="alsa-lib-devel libX11-devel libXrandr-devel qt5-devel qt5-x11extras-devel v4l-utils-devel"
 depends="ffmpeg"
 short_desc="Easy to use screencast creator"
 maintainer="Duncaen <duncaen@voidlinux.org>"
-license="GPL-2"
+license="GPL-2.0-only"
 homepage="http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"
 distfiles="https://github.com/vkohaupt/vokoscreen/archive/${version}.tar.gz"
 checksum=7f5d9abfa3b4a1f7ce657838f5169cd80a590be490dacd0ad1751853a38f4245
+
+if [ "$CROSS_BUILD" ]; then
+	hostmakedepends+=" qt5-x11extras-devel"
+fi

From 7758a5b817219bab6017d1b162832cb44384dfd2 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:08:07 +0200
Subject: [PATCH 13/16] octoxbps: fixes for qt5.13

---
 srcpkgs/octoxbps/template | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/srcpkgs/octoxbps/template b/srcpkgs/octoxbps/template
index 61a4bd50013..abb78865f69 100644
--- a/srcpkgs/octoxbps/template
+++ b/srcpkgs/octoxbps/template
@@ -15,7 +15,7 @@ checksum=6f7643bb07960d8c8f60ce70dc495f866ae60a4d6d8160a7f108f79bf53d2d22
 
 do_configure() {
 	for _dir in ${wrksrc} ${wrksrc}/notifier/octoxbps-notifier; do
-		cd $_dir && qmake ${configure_args} \
+		cd $_dir && qmake-qt5 ${configure_args} \
 			PREFIX=/usr \
 			LIB=/usr/lib \
 			QMAKE_CFLAGS="${CFLAGS}" \

From 2f6ad21222c143a9391813777a049fbf5e37aff0 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Thu, 4 Jul 2019 21:45:46 +0200
Subject: [PATCH 14/16] qtpass: fix build for qt5.13

---
 srcpkgs/qtpass/patches/qmake-qt5.13.patch | 34 +++++++++++++++++++++++
 srcpkgs/qtpass/template                   |  7 +++--
 2 files changed, 38 insertions(+), 3 deletions(-)
 create mode 100644 srcpkgs/qtpass/patches/qmake-qt5.13.patch

diff --git a/srcpkgs/qtpass/patches/qmake-qt5.13.patch b/srcpkgs/qtpass/patches/qmake-qt5.13.patch
new file mode 100644
index 00000000000..45bacf75a4a
--- /dev/null
+++ b/srcpkgs/qtpass/patches/qmake-qt5.13.patch
@@ -0,0 +1,34 @@
+--- src/src.pro	2018-06-04 11:43:53.000000000 +0200
++++ -	2019-07-10 02:36:51.536590804 +0200
+@@ -7,6 +7,31 @@
+ CONFIG += c++11 staticlib
+ CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
+ 
++TRANSLATIONS    +=  ../localization/localization_nl_NL.ts \
++                    ../localization/localization_ca.ts \
++                    ../localization/localization_de_DE.ts \
++                    ../localization/localization_es_ES.ts \
++                    ../localization/localization_gl_ES.ts \
++                    ../localization/localization_hu_HU.ts \
++                    ../localization/localization_sv_SE.ts \
++                    ../localization/localization_pl_PL.ts \
++                    ../localization/localization_ru_RU.ts \
++                    ../localization/localization_he_IL.ts \
++                    ../localization/localization_zh_CN.ts \
++                    ../localization/localization_ar_MA.ts \
++                    ../localization/localization_fr_FR.ts \
++                    ../localization/localization_fr_BE.ts \
++                    ../localization/localization_nl_BE.ts \
++                    ../localization/localization_fr_LU.ts \
++                    ../localization/localization_de_LU.ts \
++                    ../localization/localization_lb_LU.ts \
++                    ../localization/localization_en_GB.ts \
++                    ../localization/localization_en_US.ts \
++                    ../localization/localization_el_GR.ts \
++                    ../localization/localization_cs_CZ.ts \
++                    ../localization/localization_it_IT.ts \
++                    ../localization/localization_pt_PT.ts
++
+ SOURCES   += mainwindow.cpp \
+              configdialog.cpp \
+              storemodel.cpp \
diff --git a/srcpkgs/qtpass/template b/srcpkgs/qtpass/template
index 1f5780badeb..80b6bc6c712 100644
--- a/srcpkgs/qtpass/template
+++ b/srcpkgs/qtpass/template
@@ -4,17 +4,18 @@ version=1.2.3
 revision=1
 wrksrc="QtPass-${version}"
 build_style=qmake
-hostmakedepends="qt5-devel qt5-tools"
-makedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
+makedepends="qt5-devel qt5-svg-devel"
 depends="pass pwgen"
 short_desc="Multi-platform GUI for pass"
 maintainer="annejan <brouwer@annejan.com>"
 license="GPL-3.0-or-later"
-#changelog="https://raw.githubusercontent.com/IJHack/QtPass/master/CHANGELOG.md"
 homepage="https://qtpass.org/"
+changelog="https://raw.githubusercontent.com/IJHack/QtPass/master/CHANGELOG.md"
 distfiles="https://github.com/IJHack/${pkgname}/archive/v${version}.tar.gz"
 checksum=658b632bb06e9ad63d5076aace5fe0e57a0f7f20e0aafdfb64f86a25bdadbb07
 
+
 do_install() {
 	vbin main/qtpass
 

From e5faae8c286ff80b2e850a71bc530c27cacf4f25 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 20:10:32 +0200
Subject: [PATCH 15/16] linssid: fix build for qt5.13

---
 srcpkgs/linssid/patches/project.patch     |  3 +-
 srcpkgs/linssid/patches/qwt-include.patch | 56 -----------------------
 srcpkgs/linssid/template                  |  6 ++-
 3 files changed, 7 insertions(+), 58 deletions(-)
 delete mode 100644 srcpkgs/linssid/patches/qwt-include.patch

diff --git a/srcpkgs/linssid/patches/project.patch b/srcpkgs/linssid/patches/project.patch
index a228007bb22..356419f862b 100644
--- a/srcpkgs/linssid/patches/project.patch
+++ b/srcpkgs/linssid/patches/project.patch
@@ -2,7 +2,8 @@
 +++ linssid-app/linssid-app.pro
 @@ -5,7 +5,7 @@
  CONFIG -= debug_and_release app_bundle lib_bundle
- CONFIG += release 
+-CONFIG += release
++CONFIG += release qwt
  PKGCONFIG +=
 -QT = core gui widgets svg
 +QT = core gui widgets
diff --git a/srcpkgs/linssid/patches/qwt-include.patch b/srcpkgs/linssid/patches/qwt-include.patch
deleted file mode 100644
index 04a25d42b21..00000000000
--- a/srcpkgs/linssid/patches/qwt-include.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- linssid-app/MainForm.cpp
-+++ linssid-app/MainForm.cpp
-@@ -23,14 +23,14 @@
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_symbol.h>
--#include <qwt_plot_marker.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_symbol.h>
-+#include <qwt/qwt_plot_marker.h>
- #include <QPointF>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt_scale_draw.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <sys/types.h>
-
---- linssid-app/MainForm.h
-+++ linssid-app/MainForm.h
-@@ -13,11 +13,11 @@
- #include <QEvent>
- #include <QString>
- #include <QFont>
--#include <qwt.h>
--#include <qwt_plot.h>
--#include <qwt_plot_curve.h>
--#include <qwt_plot_grid.h>
--#include <qwt_scale_draw.h>
-+#include <qwt/qwt.h>
-+#include <qwt/qwt_plot.h>
-+#include <qwt/qwt_plot_curve.h>
-+#include <qwt/qwt_plot_grid.h>
-+#include <qwt/qwt_scale_draw.h>
- #include "ui_MainForm.h"
- #include "prefsDialog.h"
- #include "Custom.h"
-
---- linssid-app/MainForm.ui
-+++ linssid-app/MainForm.ui
-@@ -757,7 +757,7 @@
-   <customwidget>
-    <class>QwtPlot</class>
-    <extends>QFrame</extends>
--   <header>qwt_plot.h</header>
-+   <header>qwt/qwt_plot.h</header>
-    <container>1</container>
-   </customwidget>
-  </customwidgets>
diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template
index 80509d71bb1..951532e1be9 100644
--- a/srcpkgs/linssid/template
+++ b/srcpkgs/linssid/template
@@ -3,7 +3,7 @@ pkgname=linssid
 version=3.6
 revision=2
 build_style=qmake
-hostmakedepends="qt5-devel"
+hostmakedepends="qt5-qmake qt5-host-tools"
 makedepends="boost-devel qwt-devel"
 depends="qt5-svg"
 short_desc="Graphical wireless AP scanner"
@@ -12,3 +12,7 @@ license="GPL-3.0-only"
 homepage="https://sourceforge.net/projects/linssid/"
 distfiles="${SOURCEFORGE_SITE}/${pkgname}/${pkgname}_${version}.orig.tar.gz"
 checksum=57301ee93f708f2512316668bf4e718502f37f21a5e93b68fc604a9032e3e49c
+
+pre_configure() {
+	sed -e "s%/usr/include%${XBPS_CROSS_BASE}&%g" -i linssid-app/linssid-app.pro
+}

From 68e8677b7027693af2505e77192ecb466eaeb7f0 Mon Sep 17 00:00:00 2001
From: John <johnz@posteo.net>
Date: Sat, 6 Jul 2019 21:47:21 +0200
Subject: [PATCH 16/16] dtkcore: set nocross

[ci skip]
---
 srcpkgs/dtkcore/template | 21 +--------------------
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/srcpkgs/dtkcore/template b/srcpkgs/dtkcore/template
index c2eb731d949..c12b4989980 100644
--- a/srcpkgs/dtkcore/template
+++ b/srcpkgs/dtkcore/template
@@ -18,26 +18,7 @@ if [ "$CROSS_BUILD" ];then
 	hostmakedepends+=" qt5-devel gsettings-qt-devel"
 fi
 
-pre_build() {
-	# This is needed for musl, does somehow not get build there automatically
-	make sub-tools-qmake_all
-	make -C tools sub-deepin-os-release-all
-}
-
-pre_install() {
-	# Replace the host arch binary with target arch one
-	cd tools/deepin-os-release
-	rm *.o
-	qmake ${configure_args} \
-		PREFIX=/usr \
-		LIB=/usr/lib \
-		QMAKE_CC=$CC QMAKE_CXX=$CXX QMAKE_LINK=$CXX QMAKE_LINK_C=$CC \
-		QMAKE_CFLAGS="${CFLAGS}" \
-		QMAKE_CXXFLAGS="${CXXFLAGS}" \
-		QMAKE_LFLAGS="${LDFLAGS}"
-	make CC="$CC" CXX="$CXX" LINK="$CXX"
-	cd ${wrksrc}
-}
+nocross="Some QMake mess"
 
 dtkcore-devel_package() {
 	short_desc+=" - development files"

^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [PR PATCH] [Merged]: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (46 preceding siblings ...)
  2019-07-11  4:15 ` voidlinux-github
@ 2019-07-11  4:29 ` voidlinux-github
  2019-07-11  4:30 ` voidlinux-github
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-11  4:29 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 481 bytes --]

There's a merged pull request on the void-packages repository

[WIP] qt5: update to 5.13.0
https://github.com/void-linux/void-packages/pull/11891
Description: 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


^ permalink raw reply	[flat|nested] 49+ messages in thread

* Re: [WIP] qt5: update to 5.13.0
       [not found] <gh-mailinglist-notifications-41a7ca26-5023-4802-975b-f1789d68868e-void-packages-11891@inbox.vuxu.org>
                   ` (47 preceding siblings ...)
  2019-07-11  4:29 ` [PR PATCH] [Merged]: " voidlinux-github
@ 2019-07-11  4:30 ` voidlinux-github
  48 siblings, 0 replies; 49+ messages in thread
From: voidlinux-github @ 2019-07-11  4:30 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 174 bytes --]

New comment by Johnnynator on void-packages repository

https://github.com/void-linux/void-packages/pull/11891#issuecomment-510324610
Comment:
Goodbye build server 🔨 

^ permalink raw reply	[flat|nested] 49+ messages in thread

end of thread, other threads:[~2019-07-11  4:30 UTC | newest]

Thread overview: 49+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [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
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

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).