From dbc6cc1fd78d17282a99792f7498f7d8832f739b Mon Sep 17 00:00:00 2001 From: John 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 951f2e781d4951..3e836fa7a05cdf 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 00000000000000..75793eb6664df5 --- /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 00000000000000..5ecdfb30f5b5c9 --- /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 3e32776a827e97..5100f61105eeb0 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 4dbd4ce5327ca8..bab6b2928e4dd2 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 c867ace9099f34..bf687113c86d85 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 54425cfb46269a..00000000000000 --- 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 7ca6d36bcb8103..00000000000000 --- 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 3d776727fef7a9..00000000000000 --- 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 f92234ad442b19..57c228b8540819 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 032d02cf33bc92..409a378bfcb005 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 58f75c76e0192d..f096b414bf4a5c 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 7b39f929e77f52..c7344404c05068 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 8046b72b48d485..3296979769b6ee 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 581cd4564f64e4..00000000000000 --- 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 30f98644eb7668..74d7dbd878f753 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 c78b123759fb72..00000000000000 --- 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 4f23a22f450825..00000000000000 --- 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 -Date: Sun, 1 Feb 2015 13:41:08 +0100 -Subject: [PATCH 1/6] Fix conflict between musl libc and lss - -Include late to avoid the macro getdents64 in musl -libc's 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 --#include - #include - #include - #include -@@ -49,6 +48,8 @@ - #include "common/linux/guid_creator.h" - #include "common/linux/safe_readlink.h" - -+#include -+ - 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 86e09d5cfd388b..de32a3dab95cfc 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 @@ -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 5491d6440e1e5d..00000000000000 --- 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 -Date: Sun, 1 Feb 2015 14:40:41 +0100 -Subject: [PATCH 6/6] is a nonportable alias for - ---- - 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 - #include - --#include -+#include - #include - #include - #include -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 -- --#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 67ce2cb3f790d5..7b30717136a190 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 cf0e0fa768f560..00000000000000 --- 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 -+#if !defined(__GLIBC__) -+#include -+#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 d8dd1aa90f6a61..57136bc2bcdb3b 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 cc4f3a979b293a..00000000000000 --- 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 277cc60858fa44..4e5f697d72c588 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 - --#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 81092c77b41ba9..9eac4e70efa97a 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 9352f190a3b556..00000000000000 --- 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 c71c65c926b0e3..00000000000000 --- 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 62265b639947c6..00000000000000 --- 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 8e779a09cd0131..00000000000000 --- 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 -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 - ** Contact: https://www.qt.io/licensing/ -@@ -88,6 +88,7 @@ extern "C" NSString *NSTemporaryDirector - - #if defined(Q_OS_LINUX) - # include -+# include - # include - # include - -@@ -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 -+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 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 b9b45c31396143..00000000000000 --- 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 -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 ---- - .../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 04da3d4c7080d7..00000000000000 --- 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 -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 -Reviewed-by: Thiago Macieira ---- - - 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 00000000000000..22ac0420764f58 --- /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 00000000000000..b89fddd01ab448 --- /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 00000000000000..b13290d3ccd32a --- /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 f3493862cd4a11..d3a1fe96c5345c 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 615177ba16e47d..98f3a38745aaa8 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 #endif @@ -9,7 +9,7 @@ #include #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(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 #include --#include ++#if defined(__GLIBC__) + #include #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 - #include - --#if defined(__GLIBCXX__) && !defined(__UCLIBC__) -+#if defined(__GLIBCXX__) && defined(__GLIBC__) - #include - #include - #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 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 00000000000000..496753bef30fa9 --- /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 00000000000000..b73971f243244d --- /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 00000000000000..ee6689a4183286 --- /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 00000000000000..402d7e2d6228d1 --- /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 00000000000000..04d8d3efaac309 --- /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 ++#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 ++#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 ++ ++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 + #include + #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 ++#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 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 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(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(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 ++ ++//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 ++ ++//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 ++#endif ++ + // TODO(vignatti): replace the local definitions below with #include + // once kernel version 4.6 becomes widely used. + #include +--- 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 + #include "common/platform.h" + + namespace gl +--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/heap/asm/BUILD.gn ++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/heap/asm/BUILD.gn +@@ -46,6 +46,10 @@ if (current_cpu == "x86" || current_cpu == "x64") { + sources = [ + "SaveRegisters_mips64.S", + ] ++ } else if (current_cpu == "ppc64") { ++ sources = [ ++ "SaveRegisters_ppc64.S", ++ ] + } + + if (current_cpu == "arm") { +new file mode 100644 +--- /dev/null ++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/heap/asm/SaveRegisters_ppc64.S +@@ -0,0 +1,60 @@ ++/* ++ * typedef void (*PushAllRegistersCallback)(SafePointBarrier*, ThreadState*, intptr_t*); ++ * extern "C" void PushAllRegisters(SafePointBarrier*, ThreadState*, PushAllRegistersCallback) ++ */ ++ ++.type PushAllRegisters, %function ++.global PushAllRegisters ++.hidden PushAllRegisters ++PushAllRegisters: ++ // Push all callee-saves registers to get them ++ // on the stack for conservative stack scanning. ++ // Reserve space for callee-saved registers and minimal stack frame. ++ mflr 0 # r0 = LR ++ std 0,16(1) # store LR at addr sp+16 ++ stdu 1,-176(1) # grow stack by 176 bytes and store new stack top ptr to r1 ++ # 3218*8 = min stack non-volatile registers ++ ++ // Save the callee-saved registers ++ std 31,168(1) # store r31 to addr sp+168 ++ std 30,160(1) # etc... ++ std 29,152(1) ++ std 28,144(1) ++ std 27,136(1) ++ std 26,128(1) ++ std 25,120(1) ++ std 24,112(1) ++ std 23,104(1) ++ std 22,96(1) ++ std 21,88(1) ++ std 20,80(1) ++ std 19,72(1) ++ std 18,64(1) ++ std 17,56(1) ++ std 16,48(1) ++ std 15,40(1) ++ std 14,32(1) ++ ++ // Note: the callee-saved floating point registers do not need to be ++ // copied to the stack, because fp registers never hold heap pointers ++ // and so do not need to be kept visible to the garbage collector. ++ ++ // Pass the two first arguments untouched in r3 and r4 and the ++ // stack pointer to the callback. ++ ++ std 2, 24(1) # save r2 to sp+24 addr ++ mtctr 5 # copy 3rd function arg (callback fn pointer) to CTR ++ mr 12, 5 # r12 must hold address of callback we are going to call ++ # for position-idependent functions inside the callback to work ++ mr 5, 1 # set current sp (stack top) as 3rd argument for the callback ++ bctrl # set LR to PC+4 and call the callback ++ ld 2, 24(1) # restore r2 from sp+24 addr ++ ++ // Adjust stack, restore return address and return. ++ // Note: the copied registers do not need to be reloaded here, ++ // because they were preserved by the called routine. ++ addi 1,1,176 # restore original SP by doing sp += 176 ++ ld 0,16(1) # restore original LR from addr sp+16 ++ mtlr 0 # ... copy it to the actual LR ++ blr # return to LR addr ++ +--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/heap/heap_page.h ++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/heap/heap_page.h +@@ -67,11 +67,12 @@ constexpr size_t kBlinkPageBaseMask = ~kBlinkPageOffsetMask; + constexpr size_t kBlinkPagesPerRegion = 10; + + // TODO(nya): Replace this with something like #if ENABLE_NACL. +-#if 0 ++#if defined(ARCH_CPU_PPC64) + // NaCl's system page size is 64 KiB. This causes a problem in Oilpan's heap + // layout because Oilpan allocates two guard pages for each Blink page (whose + // size is kBlinkPageSize = 2^17 = 128 KiB). So we don't use guard pages in + // NaCl. ++// The same issue holds for ppc64 systems, which use a 64k page size. + constexpr size_t kBlinkGuardPageSize = 0; + #else + constexpr size_t kBlinkGuardPageSize = base::kSystemPageSize; +--- qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/dtoa/utils.h ++++ qtwebengine/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/dtoa/utils.h +@@ -45,7 +45,7 @@ + // disabled.) + // On Linux,x86 89255e-22 != Div_double(89255.0/1e22) + #if defined(_M_X64) || defined(__x86_64__) || defined(__ARMEL__) || \ +- defined(__aarch64__) || defined(__MIPSEL__) ++ defined(__aarch64__) || defined(__MIPSEL__) || defined(__powerpc64__) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(_M_IX86) || defined(__i386__) + #if defined(_WIN32) +--- qtwebengine/src/3rdparty/chromium/third_party/boringssl/BUILD.gn ++++ qtwebengine/src/3rdparty/chromium/third_party/boringssl/BUILD.gn +@@ -100,6 +100,13 @@ if (is_win && !is_msan && current_cpu != "arm64") { + } else { + public_configs = [ ":no_asm_config" ] + } ++ } else if (current_cpu == "ppc64") { ++ if (is_linux) { ++ # TODO: ppc64 (be) check ++ sources += crypto_sources_linux_ppc64le ++ } else { ++ public_configs = [ ":no_asm_config" ] ++ } + } else { + public_configs = [ ":no_asm_config" ] + } +--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h ++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h +@@ -44,6 +44,8 @@ typedef MDRawContextARM RawContextCPU; + typedef MDRawContextARM64_Old RawContextCPU; + #elif defined(__mips__) + typedef MDRawContextMIPS RawContextCPU; ++#elif defined(__powerpc64__) ++typedef MDRawContextPPC64 RawContextCPU; + #else + #error "This code has not been ported to your platform yet." + #endif +--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc ++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc +@@ -270,7 +270,42 @@ void ThreadInfo::FillCPUContext(RawContextCPU* out) const { + out->float_save.fir = mcontext.fpc_eir; + #endif + } +-#endif // __mips__ ++ ++#elif defined(__powerpc64__) ++ ++uintptr_t ThreadInfo::GetInstructionPointer() const { ++ return mcontext.gp_regs[PT_NIP]; ++} ++ ++void ThreadInfo::FillCPUContext(RawContextCPU* out) const { ++ out->context_flags = MD_CONTEXT_PPC64_FULL; ++ for (int i = 0; i < MD_CONTEXT_PPC64_GPR_COUNT; i++) ++ out->gpr[i] = mcontext.gp_regs[i]; ++ ++ out->lr = mcontext.gp_regs[PT_LNK]; ++ out->srr0 = mcontext.gp_regs[PT_NIP]; ++ out->srr1 = mcontext.gp_regs[PT_MSR]; ++ out->cr = mcontext.gp_regs[PT_CCR]; ++ out->xer = mcontext.gp_regs[PT_XER]; ++ out->ctr = mcontext.gp_regs[PT_CTR]; ++ ++ for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++) ++ out->float_save.fpregs[i] = mcontext.fp_regs[i]; ++ ++ out->float_save.fpscr = mcontext.fp_regs[NFPREG-1]; ++ ++ for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++) ++ out->vector_save.save_vr[i] = \ ++ {(((uint64_t)vregs.vrregs[i][0]) << 32) ++ | vregs.vrregs[i][1], ++ (((uint64_t)vregs.vrregs[i][2]) << 32) ++ | vregs.vrregs[i][3]}; ++ ++ out->vrsave = vregs.vrsave; ++ out->vector_save.save_vscr = {0, vregs.vscr.vscr_word}; ++ out->vector_save.save_vrvalid = 0xFFFFFFFF; ++} ++#endif // __powerpc64__ + + void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) { + assert(gp_regs || size); +@@ -279,6 +314,11 @@ void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) { + *gp_regs = mcontext.gregs; + if (size) + *size = sizeof(mcontext.gregs); ++#elif defined(__powerpc64__) ++ if (gp_regs) ++ *gp_regs = mcontext.gp_regs; ++ if (size) ++ *size = sizeof(mcontext.gp_regs); + #else + if (gp_regs) + *gp_regs = ®s; +@@ -294,6 +334,11 @@ void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) { + *fp_regs = &mcontext.fpregs; + if (size) + *size = sizeof(mcontext.fpregs); ++#elif defined(__powerpc64__) ++ if (fp_regs) ++ *fp_regs = &mcontext.fp_regs; ++ if (size) ++ *size = sizeof(mcontext.fp_regs); + #else + if (fp_regs) + *fp_regs = &fpregs; +@@ -302,4 +347,13 @@ void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) { + #endif + } + ++#if defined(__powerpc64__) ++void ThreadInfo::GetVectorRegisters(void** v_regs, size_t* size) { ++ if (v_regs) ++ *v_regs = &vregs; ++ if (size) ++ *size = sizeof(vregs); ++} ++#endif ++ + } // namespace google_breakpad +--- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h ++++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h +@@ -68,6 +68,10 @@ struct ThreadInfo { + // Use the structures defined in + struct user_regs_struct regs; + struct user_fpsimd_struct fpregs; ++#elif defined(__powerpc64__) ++ // Use the structures defined in . ++ mcontext_t mcontext; ++ vrregset_t vregs; + #elif defined(__mips__) + // Use the structure defined in . + 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(context.context.uc_mcontext.pc); ++#elif defined(__powerpc64__) ++ context.siginfo.si_addr = ++ reinterpret_cast(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(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]); ++#elif defined(__powerpc64__) ++ stack_pointer = ++ reinterpret_cast(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(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(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]); ++#elif defined(__powerpc64__) ++ stack_pointer = ++ reinterpret_cast(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(one_thread.mcontext.gregs[1]); ++#elif defined(__powerpc64__) ++ pid_t* process_tid_location = ++ reinterpret_cast(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(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(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(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(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 + Robert Sesek + Scott Graham + Joshua Peraza ++Shawn Anastasio +--- 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 + #include_next + + #include +--- 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(); ++ reinterpret_cast(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( ++ ExpectMinidumpContextPPC64); ++} ++ ++TEST(MinidumpContextWriter, PPC64_FromSnapshot) { ++ constexpr uint32_t kSeed = 64; ++ CPUContextPPC64 context_ppc64; ++ CPUContext context; ++ context.ppc64 = &context_ppc64; ++ InitializeCPUContextPPC64(&context, kSeed); ++ FromSnapshotTest( ++ 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 + #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 ++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 ++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( + reader, context_address, context_.mips64); + } + ++#elif defined(ARCH_CPU_PPC64_FAMILY) ++ ++template ++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(thread_context, fp_context, ++ v_context, dest_context); ++ ++ return true; ++} ++ ++template<> ++bool ExceptionSnapshotLinux::ReadContext( ++ ProcessReaderLinux* reader, ++ LinuxVMAddress context_address) { ++ context_.architecture = kCPUArchitecturePPC64; ++ context_.ppc64 = &context_union_.ppc64; ++ ++ return internal::ReadContext( ++ reader, context_address, context_.ppc64); ++} ++ ++template<> ++bool ExceptionSnapshotLinux::ReadContext( ++ 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, 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 stack; ++ Sigset 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( ++ 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(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 ++bool GetRegisterSet(pid_t tid, int set, Destination* dest, bool can_log) { ++ iovec iov; ++ iov.iov_base = reinterpret_cast(dest); ++ iov.iov_len = sizeof(*dest); ++ if (ptrace(PTRACE_GETREGSET, tid, reinterpret_cast(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 + #endif + ++#if defined(ARCH_CPU_PPC64_FAMILY) ++#include ++#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::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(&context)); + #elif defined(ARCH_CPU_MIPS_FAMILY) + EXPECT_EQ(context.uc_mcontext.gregs[4], FromPointerCast(&context)); ++#elif defined(ARCH_CPU_PPC64_FAMILY) ++ EXPECT_EQ(context.uc_mcontext.gp_regs[3], FromPointerCast(&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 ++#include ++#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 ++ ++#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 ++#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 /* 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 00000000000000..df014d8b59820a --- /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 + #endif ++#endif + #if defined(__mips__) + // sys/user.h in eglibc misses size_t definition + #include +-#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(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 + #endif + +-#if defined(__powerpc__) || defined(__ppc__) ++#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) + #include + #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 ++#include ++ + 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 ++#include ++ + 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 00000000000000..ce8311c9ba2ee6 --- /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 + + #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(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 ++#elif defined(OS_POSIX) ++#include ++#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 last_value(first_value); +- out->push_back(htonl(last_value.ValueOrDie())); ++ out->push_back(base::ByteSwap(static_cast(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(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 ++#elif defined(OS_POSIX) ++#include ++#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 expected = {5, 0xad934c0cu, 0x6ff67f56u, 0x81316fceu}; ++ std::vector 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* 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 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( + 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(buffer); ++ return base::ByteSwapToLE16(*reinterpret_cast(buffer)); + } + + static inline uint32_t ReadUint32(const char* buffer) { +- return *reinterpret_cast(buffer); ++ return base::ByteSwapToLE32(*reinterpret_cast(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 + } + +-#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(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(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> (8*(i%sizeof(in[0])))); ++ } ++} ++#endif ++ + static void fe_frombytes(fe out, const uint8_t in[NBYTES]) { + for (int i = 0; ibytes, 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 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(val); ++ auto tval = ReadScalar(val); + visitor->UType(tval, EnumName(tval, type_table)); + break; + } + case ET_BOOL: { +- visitor->Bool(*reinterpret_cast(val) != 0); ++ visitor->Bool(ReadScalar(val) != 0); + break; + } + case ET_CHAR: { +- auto tval = *reinterpret_cast(val); ++ auto tval = ReadScalar(val); + visitor->Char(tval, EnumName(tval, type_table)); + break; + } + case ET_UCHAR: { +- auto tval = *reinterpret_cast(val); ++ auto tval = ReadScalar(val); + visitor->UChar(tval, EnumName(tval, type_table)); + break; + } + case ET_SHORT: { +- auto tval = *reinterpret_cast(val); ++ auto tval = ReadScalar(val); + visitor->Short(tval, EnumName(tval, type_table)); + break; + } + case ET_USHORT: { +- auto tval = *reinterpret_cast(val); ++ auto tval = ReadScalar(val); + visitor->UShort(tval, EnumName(tval, type_table)); + break; + } + case ET_INT: { +- auto tval = *reinterpret_cast(val); ++ auto tval = ReadScalar(val); + visitor->Int(tval, EnumName(tval, type_table)); + break; + } + case ET_UINT: { +- auto tval = *reinterpret_cast(val); ++ auto tval = ReadScalar(val); + visitor->UInt(tval, EnumName(tval, type_table)); + break; + } + case ET_LONG: { +- visitor->Long(*reinterpret_cast(val)); ++ visitor->Long(ReadScalar(val)); + break; + } + case ET_ULONG: { +- visitor->ULong(*reinterpret_cast(val)); ++ visitor->ULong(ReadScalar(val)); + break; + } + case ET_FLOAT: { +- visitor->Float(*reinterpret_cast(val)); ++ visitor->Float(ReadScalar(val)); + break; + } + case ET_DOUBLE: { +- visitor->Double(*reinterpret_cast(val)); ++ visitor->Double(ReadScalar(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 + #include + #include ++#include + #if !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN) + #include + #endif +@@ -91,7 +92,7 @@ struct FreeDeleter { + + template + constexpr T AssumeLittleEndian(T value) { +- static_assert(__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__, ++ static_assert(std::is_same::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(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(ctx, dx,dy); + + U32 dst = load(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(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(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((r<<8) | g) << 16 ++ | cast((b<<8) | a) << 0); + #else + store(ptr, tail, cast(r | (g<<8)) << 0 + | cast(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() = reinterpret_cast(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(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(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(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((rgb >> 16) & 0xff) * (1/255.0f); ++ *g = cast((rgb >> 8) & 0xff) * (1/255.0f); ++ *b = cast((rgb >> 0) & 0xff) * (1/255.0f); ++#else + *r = cast((rgb >> 0) & 0xff) * (1/255.0f); + *g = cast((rgb >> 8) & 0xff) * (1/255.0f); + *b = cast((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((rgb >> 32) & 0xffff) * (1/65535.0f); ++ *g = cast((rgb >> 16) & 0xffff) * (1/65535.0f); ++ *b = cast((rgb >> 0) & 0xffff) * (1/65535.0f); ++#else + rgb = swap_endian_16x4(rgb); + + *r = cast((rgb >> 0) & 0xffff) * (1/65535.0f); + *g = cast((rgb >> 16) & 0xffff) * (1/65535.0f); + *b = cast((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(src + 4*i); + ++#if __BIG_ENDIAN__ ++ r = cast((rgba >> 24) & 0xff) * (1/255.0f); ++ g = cast((rgba >> 16) & 0xff) * (1/255.0f); ++ b = cast((rgba >> 8) & 0xff) * (1/255.0f); ++ a = cast((rgba >> 0) & 0xff) * (1/255.0f); ++#else + r = cast((rgba >> 0) & 0xff) * (1/255.0f); + g = cast((rgba >> 8) & 0xff) * (1/255.0f); + b = cast((rgba >> 16) & 0xff) * (1/255.0f); + a = cast((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(swap_endian_16((U16)v.val[0])) * (1/65535.0f); ++ g = cast(swap_endian_16((U16)v.val[1])) * (1/65535.0f); ++ b = cast(swap_endian_16((U16)v.val[2])) * (1/65535.0f); ++#else + r = cast((U16)v.val[0]) * (1/65535.0f); + g = cast((U16)v.val[1]) * (1/65535.0f); + b = cast((U16)v.val[2]) * (1/65535.0f); ++#endif + #else ++#if __BIG_ENDIAN__ ++ U32 R = load_3(rgb+0), ++ G = load_3(rgb+1), ++ B = load_3(rgb+2); ++ // R,G,B are little-endian 16-bit, so byte swap them before converting to float. ++ r = cast((R & 0x00ff)<<8 | (R & 0xff00)>>8) * (1/65535.0f); ++ g = cast((G & 0x00ff)<<8 | (G & 0xff00)>>8) * (1/65535.0f); ++ b = cast((B & 0x00ff)<<8 | (B & 0xff00)>>8) * (1/65535.0f); ++#else + r = cast(load_3(rgb+0)) * (1/65535.0f); + g = cast(load_3(rgb+1)) * (1/65535.0f); + b = cast(load_3(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(swap_endian_16((U16)v.val[0])) * (1/65535.0f); ++ g = cast(swap_endian_16((U16)v.val[1])) * (1/65535.0f); ++ b = cast(swap_endian_16((U16)v.val[2])) * (1/65535.0f); ++ a = cast(swap_endian_16((U16)v.val[3])) * (1/65535.0f); ++#else + r = cast((U16)v.val[0]) * (1/65535.0f); + g = cast((U16)v.val[1]) * (1/65535.0f); + b = cast((U16)v.val[2]) * (1/65535.0f); + a = cast((U16)v.val[3]) * (1/65535.0f); ++#endif + #else ++#if __BIG_ENDIAN__ ++ U64 px = swap_endian_16x4(load(rgba)); ++ ++ r = cast((px >> 48) & 0xffff) * (1/65535.0f); ++ g = cast((px >> 32) & 0xffff) * (1/65535.0f); ++ b = cast((px >> 16) & 0xffff) * (1/65535.0f); ++ a = cast((px >> 0) & 0xffff) * (1/65535.0f); ++#else + U64 px = load(rgba); + + r = cast((px >> 0) & 0xffff) * (1/65535.0f); + g = cast((px >> 16) & 0xffff) * (1/65535.0f); + b = cast((px >> 32) & 0xffff) * (1/65535.0f); + a = cast((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((U16)v.val[0]) * (1/65535.0f); ++ g = cast((U16)v.val[1]) * (1/65535.0f); ++ b = cast((U16)v.val[2]) * (1/65535.0f); ++#else + r = cast(swap_endian_16((U16)v.val[0])) * (1/65535.0f); + g = cast(swap_endian_16((U16)v.val[1])) * (1/65535.0f); + b = cast(swap_endian_16((U16)v.val[2])) * (1/65535.0f); ++#endif + #else ++#if __BIG_ENDIAN__ ++ r = cast(load_3(rgb+0)) * (1/65535.0f); ++ g = cast(load_3(rgb+1)) * (1/65535.0f); ++ b = cast(load_3(rgb+2)) * (1/65535.0f); ++#else + U32 R = load_3(rgb+0), + G = load_3(rgb+1), + B = load_3(rgb+2); +@@ -774,6 +842,7 @@ static void exec_ops(const Op* ops, const void** args, + r = cast((R & 0x00ff)<<8 | (R & 0xff00)>>8) * (1/65535.0f); + g = cast((G & 0x00ff)<<8 | (G & 0xff00)>>8) * (1/65535.0f); + b = cast((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((U16)v.val[0]) * (1/65535.0f); ++ g = cast((U16)v.val[1]) * (1/65535.0f); ++ b = cast((U16)v.val[2]) * (1/65535.0f); ++ a = cast((U16)v.val[3]) * (1/65535.0f); ++#else + r = cast(swap_endian_16((U16)v.val[0])) * (1/65535.0f); + g = cast(swap_endian_16((U16)v.val[1])) * (1/65535.0f); + b = cast(swap_endian_16((U16)v.val[2])) * (1/65535.0f); + a = cast(swap_endian_16((U16)v.val[3])) * (1/65535.0f); ++#endif + #else ++#if __BIG_ENDIAN__ ++ U64 px = load(rgba); ++ ++ r = cast((px >> 48) & 0xffff) * (1/65535.0f); ++ g = cast((px >> 32) & 0xffff) * (1/65535.0f); ++ b = cast((px >> 16) & 0xffff) * (1/65535.0f); ++ a = cast((px >> 0) & 0xffff) * (1/65535.0f); ++#else + U64 px = swap_endian_16x4(load(rgba)); + + r = cast((px >> 0) & 0xffff) * (1/65535.0f); + g = cast((px >> 16) & 0xffff) * (1/65535.0f); + b = cast((px >> 32) & 0xffff) * (1/65535.0f); + a = cast((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(rgba); ++#if __BIG_ENDIAN__ ++ U16 R = cast((px >> 48) & 0xffff), ++ G = cast((px >> 32) & 0xffff), ++ B = cast((px >> 16) & 0xffff), ++ A = cast((px >> 0) & 0xffff); ++#else + U16 R = cast((px >> 0) & 0xffff), + G = cast((px >> 16) & 0xffff), + B = cast((px >> 32) & 0xffff), + A = cast((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(to_fixed(r * 255) << 24) ++ | cast(to_fixed(g * 255) << 16) ++ | cast(to_fixed(b * 255) << 8) ++ | cast(to_fixed(a * 255) << 0)); ++#else + store(dst + 4*i, cast(to_fixed(r * 255) << 0) + | cast(to_fixed(g * 255) << 8) + | cast(to_fixed(b * 255) << 16) + | cast(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(to_fixed(r * 65535))), ++ (uint16x4_t)swap_endian_16(cast(to_fixed(g * 65535))), ++ (uint16x4_t)swap_endian_16(cast(to_fixed(b * 65535))), ++#else + (uint16x4_t)cast(to_fixed(r * 65535)), + (uint16x4_t)cast(to_fixed(g * 65535)), + (uint16x4_t)cast(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((R & 0x00ff) << 8 | (R & 0xff00) >> 8) ); ++ store_3(rgb+1, cast((G & 0x00ff) << 8 | (G & 0xff00) >> 8) ); ++ store_3(rgb+2, cast((B & 0x00ff) << 8 | (B & 0xff00) >> 8) ); ++#else + store_3(rgb+0, cast(to_fixed(r * 65535))); + store_3(rgb+1, cast(to_fixed(g * 65535))); + store_3(rgb+2, cast(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(to_fixed(r * 65535))), ++ (uint16x4_t)swap_endian_16(cast(to_fixed(g * 65535))), ++ (uint16x4_t)swap_endian_16(cast(to_fixed(b * 65535))), ++ (uint16x4_t)swap_endian_16(cast(to_fixed(a * 65535))), ++#else + (uint16x4_t)cast(to_fixed(r * 65535)), + (uint16x4_t)cast(to_fixed(g * 65535)), + (uint16x4_t)cast(to_fixed(b * 65535)), + (uint16x4_t)cast(to_fixed(a * 65535)), ++#endif + }}; + vst4_u16(rgba, v); + #else ++#if __BIG_ENDIAN__ ++ U64 px = cast(to_fixed(r * 65535)) << 48 ++ | cast(to_fixed(g * 65535)) << 32 ++ | cast(to_fixed(b * 65535)) << 16 ++ | cast(to_fixed(a * 65535)) << 0; ++ store(rgba, swap_endian_16x4(px)); ++#else + U64 px = cast(to_fixed(r * 65535)) << 0 + | cast(to_fixed(g * 65535)) << 16 + | cast(to_fixed(b * 65535)) << 32 + | cast(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(to_fixed(r * 65535)), ++ (uint16x4_t)cast(to_fixed(g * 65535)), ++ (uint16x4_t)cast(to_fixed(b * 65535)), ++#else + (uint16x4_t)swap_endian_16(cast(to_fixed(r * 65535))), + (uint16x4_t)swap_endian_16(cast(to_fixed(g * 65535))), + (uint16x4_t)swap_endian_16(cast(to_fixed(b * 65535))), ++#endif + }}; + vst3_u16(rgb, v); + #else ++#if __BIG_ENDIAN__ ++ store_3(rgb+0, cast(to_fixed(r * 65535))); ++ store_3(rgb+1, cast(to_fixed(g * 65535))); ++ store_3(rgb+2, cast(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((R & 0x00ff) << 8 | (R & 0xff00) >> 8) ); + store_3(rgb+1, cast((G & 0x00ff) << 8 | (G & 0xff00) >> 8) ); + store_3(rgb+2, cast((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(to_fixed(r * 65535)), ++ (uint16x4_t)cast(to_fixed(g * 65535)), ++ (uint16x4_t)cast(to_fixed(b * 65535)), ++ (uint16x4_t)cast(to_fixed(a * 65535)), ++#else + (uint16x4_t)swap_endian_16(cast(to_fixed(r * 65535))), + (uint16x4_t)swap_endian_16(cast(to_fixed(g * 65535))), + (uint16x4_t)swap_endian_16(cast(to_fixed(b * 65535))), + (uint16x4_t)swap_endian_16(cast(to_fixed(a * 65535))), ++#endif + }}; + vst4_u16(rgba, v); + #else ++#if __BIG_ENDIAN__ ++ U64 px = cast(to_fixed(r * 65535)) << 48 ++ | cast(to_fixed(g * 65535)) << 32 ++ | cast(to_fixed(b * 65535)) << 16 ++ | cast(to_fixed(a * 65535)) << 0; ++ store(rgba, px); ++#else + U64 px = cast(to_fixed(r * 65535)) << 0 + | cast(to_fixed(g * 65535)) << 16 + | cast(to_fixed(b * 65535)) << 32 + | cast(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(R) << 48 ++ | cast(G) << 32 ++ | cast(B) << 16 ++ | cast(A) << 0); ++#else + store(rgba, cast(R) << 0 + | cast(G) << 16 + | cast(B) << 32 + | cast(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(&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(d) | static_cast(c) << 8 | ++ static_cast(b) << 16 | static_cast(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(&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 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 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 uint16le_t; ++typedef byteswapped_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(void_key); + const Entry* entry = reinterpret_cast(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(void_key); + const Alias* entry = reinterpret_cast(void_entry); + return key - entry->resource_id; +@@ -284,7 +311,7 @@ bool DataPack::LoadImpl(std::unique_ptr data_source) { + // Parse the version and check for truncated header. + uint32_t version = 0; + if (data_length > sizeof(version)) +- version = reinterpret_cast(data)[0]; ++ version = reinterpret_cast(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 data_source) { + + // Parse the header of the file. + if (version == kFileFormatV4) { +- resource_count_ = reinterpret_cast(data)[1]; ++ resource_count_ = reinterpret_cast(data)[1]; + alias_count_ = 0; + text_encoding_type_ = static_cast(data[8]); + } else if (version == kFileFormatV5) { + // Version 5 added the alias table and changed the header format. + text_encoding_type_ = static_cast(data[4]); +- resource_count_ = reinterpret_cast(data)[4]; +- alias_count_ = reinterpret_cast(data)[5]; ++ resource_count_ = reinterpret_cast(data)[4]; ++ alias_count_ = reinterpret_cast(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& 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(text_encoding_type); ++ uint32le_t encoding = static_cast(text_encoding_type); + + // Build a list of final resource aliases, and an alias map at the same time. + std::vector 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(aliases.size()); +- const uint16_t entry_count = static_cast(resource_ids.size()); ++ const uint16le_t alias_count = static_cast(aliases.size()); ++ const uint16le_t entry_count = static_cast(resource_ids.size()); + DCHECK_EQ(static_cast(entry_count) + static_cast(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& alias : aliases) { ++ for (const std::pair 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 + + #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 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(&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 ++template + 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 00000000000000..f580c814697b00 --- /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 00000000000000..ea269d383d10cf --- /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 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 0266bb8ebb1bdf..00000000000000 --- 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 -+#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 -+#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 -+ -+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 - #endif - -+// On PPC64, TCGETS is defined in terms of struct termios, so we must include termios.h -+#ifdef __powerpc64__ -+#include -+#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 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(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(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 -+ -+//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 -+ -+//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 -+#endif -+ - #if defined(OS_CHROMEOS) - // TODO(vignatti): replace the local definitions below with #include - // 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 - #include "common/platform.h" - - namespace gl -diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h -index e2ef45df5..e295bd76b 100644 ---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h -+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h -@@ -44,6 +44,8 @@ typedef MDRawContextARM RawContextCPU; - typedef MDRawContextARM64 RawContextCPU; - #elif defined(__mips__) - typedef MDRawContextMIPS RawContextCPU; -+#elif defined(__powerpc64__) -+typedef MDRawContextPPC64 RawContextCPU; - #else - #error "This code has not been ported to your platform yet." - #endif -diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc -index 0a1041d62..d2a7b3394 100644 ---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc -+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc -@@ -270,7 +270,42 @@ void ThreadInfo::FillCPUContext(RawContextCPU* out) const { - out->float_save.fir = mcontext.fpc_eir; - #endif - } --#endif // __mips__ -+ -+#elif defined(__powerpc64__) -+ -+uintptr_t ThreadInfo::GetInstructionPointer() const { -+ return mcontext.gp_regs[PT_NIP]; -+} -+ -+void ThreadInfo::FillCPUContext(RawContextCPU* out) const { -+ out->context_flags = MD_CONTEXT_PPC64_FULL; -+ for (int i = 0; i < MD_CONTEXT_PPC64_GPR_COUNT; i++) -+ out->gpr[i] = mcontext.gp_regs[i]; -+ -+ out->lr = mcontext.gp_regs[PT_LNK]; -+ out->srr0 = mcontext.gp_regs[PT_NIP]; -+ out->srr1 = mcontext.gp_regs[PT_MSR]; -+ out->cr = mcontext.gp_regs[PT_CCR]; -+ out->xer = mcontext.gp_regs[PT_XER]; -+ out->ctr = mcontext.gp_regs[PT_CTR]; -+ -+ for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++) -+ out->float_save.fpregs[i] = mcontext.fp_regs[i]; -+ -+ out->float_save.fpscr = mcontext.fp_regs[NFPREG-1]; -+ -+ for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++) -+ out->vector_save.save_vr[i] = \ -+ {(((uint64_t)vregs.vrregs[i][0]) << 32) -+ | vregs.vrregs[i][1], -+ (((uint64_t)vregs.vrregs[i][2]) << 32) -+ | vregs.vrregs[i][3]}; -+ -+ out->vrsave = vregs.vrsave; -+ out->vector_save.save_vscr = {0, vregs.vscr.vscr_word}; -+ out->vector_save.save_vrvalid = 0xFFFFFFFF; -+} -+#endif // __powerpc64__ - - void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) { - assert(gp_regs || size); -@@ -279,6 +314,11 @@ void ThreadInfo::GetGeneralPurposeRegisters(void** gp_regs, size_t* size) { - *gp_regs = mcontext.gregs; - if (size) - *size = sizeof(mcontext.gregs); -+#elif defined(__powerpc64__) -+ if (gp_regs) -+ *gp_regs = mcontext.gp_regs; -+ if (size) -+ *size = sizeof(mcontext.gp_regs); - #else - if (gp_regs) - *gp_regs = ®s; -@@ -294,6 +334,11 @@ void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) { - *fp_regs = &mcontext.fpregs; - if (size) - *size = sizeof(mcontext.fpregs); -+#elif defined(__powerpc64__) -+ if (fp_regs) -+ *fp_regs = &mcontext.fp_regs; -+ if (size) -+ *size = sizeof(mcontext.fp_regs); - #else - if (fp_regs) - *fp_regs = &fpregs; -@@ -302,4 +347,13 @@ void ThreadInfo::GetFloatingPointRegisters(void** fp_regs, size_t* size) { - #endif - } - -+#if defined(__powerpc64__) -+void ThreadInfo::GetVectorRegisters(void** v_regs, size_t* size) { -+ if (v_regs) -+ *v_regs = &vregs; -+ if (size) -+ *size = sizeof(vregs); -+} -+#endif -+ - } // namespace google_breakpad -diff --git qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h -index fb216fa6d..fb669126f 100644 ---- qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h -+++ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.h -@@ -68,6 +68,10 @@ struct ThreadInfo { - // Use the structures defined in - struct user_regs_struct regs; - struct user_fpsimd_struct fpregs; -+#elif defined(__powerpc64__) -+ // Use the structures defined in . -+ mcontext_t mcontext; -+ struct _libc_vrstate vregs; - #elif defined(__mips__) - // Use the structure defined in . - 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(context.context.uc_mcontext.pc); -+#elif defined(__powerpc64__) -+ context.siginfo.si_addr = -+ reinterpret_cast(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(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]); -+#elif defined(__powerpc64__) -+ stack_pointer = -+ reinterpret_cast(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(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(info->mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]); -+#elif defined(__powerpc64__) -+ stack_pointer = -+ reinterpret_cast(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(one_thread.mcontext.gregs[1]); -+#elif defined(__powerpc64__) -+ pid_t* process_tid_location = -+ reinterpret_cast(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(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(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(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(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 35e6456139f69e..00000000000000 --- 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 2293f512d0a5a3..bac09fe26a3a0f 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 " -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 " 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 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 b2e996f30d886d..29039cc606d145 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 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 f14439331303f0..38d2da354d8f34 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 " license="GPL-3.0-or-later WITH OpenSSL" From de69a0e9e385b28add99fe06f8006c0deb3268ab Mon Sep 17 00:00:00 2001 From: q66 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 ec286b4bdd335b..745bcb8f7a5af2 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 " license="LGPL-2.1-only, LGPL-3.0-only" From f2cdfe2d3287dce6d5b4aef7340edb1236f1ac08 Mon Sep 17 00:00:00 2001 From: John 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 3cf7f4742c0cce..bf6571651ee282 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 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 ef8b87db730b91..63be5a3a5684c7 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 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 00000000000000..7fa4f4e27a97e4 --- /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 @@ + + QWebView + QWidget +-
QtWebKit/QWebView
++
QWebView
+
+ + diff --git a/srcpkgs/merkaartor/template b/srcpkgs/merkaartor/template index 3ee40185ab7f92..5e44f5f7cb1480 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 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 00000000000000..abed5ad1d4f6ad --- /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 + #include + #include + #include diff --git a/srcpkgs/cutemarked/template b/srcpkgs/cutemarked/template index 7d4cfcce17a720..53997add9ef9e5 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 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 00000000000000..a76621a3f3a4f6 --- /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 7dc6547b2b7cdf..6fbac916d9be52 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 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 00000000000000..146fe34e2fa275 --- /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 + #include + #include + #include +--- groups_widgets.hh 2016-04-26 18:32:50.000000000 +0200 ++++ - 2019-07-02 21:31:52.350308868 +0200 +@@ -10,6 +10,7 @@ + + #include + #include ++#include + + #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 00000000000000..ea066d1946f41a --- /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 ++#include + + #if ( QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 ) ) && defined( Q_OS_WIN32 ) + #include diff --git a/srcpkgs/goldendict/template b/srcpkgs/goldendict/template index de0918993c6bba..1d14c0bd5aaa57 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 " -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 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 ae808c894ef574..182072df113e70 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 " 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 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 d201c80cd57ca4..3baf73f1c67ea8 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 " -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 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 61a4bd50013614..abb78865f69721 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 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 00000000000000..45bacf75a4a2ba --- /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 1f5780badebd0c..80b6bc6c712f48 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 " 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 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 a228007bb22d3a..356419f862b681 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 04a25d42b21b18..00000000000000 --- 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 - #include - #include --#include --#include --#include --#include --#include --#include -+#include -+#include -+#include -+#include -+#include -+#include - #include --#include -+#include - #include - #include - #include - ---- linssid-app/MainForm.h -+++ linssid-app/MainForm.h -@@ -13,11 +13,11 @@ - #include - #include - #include --#include --#include --#include --#include --#include -+#include -+#include -+#include -+#include -+#include - #include "ui_MainForm.h" - #include "prefsDialog.h" - #include "Custom.h" - ---- linssid-app/MainForm.ui -+++ linssid-app/MainForm.ui -@@ -757,7 +757,7 @@ - - QwtPlot - QFrame --
qwt_plot.h
-+
qwt/qwt_plot.h
- 1 -
- diff --git a/srcpkgs/linssid/template b/srcpkgs/linssid/template index 80509d71bb1e03..951532e1be9c85 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 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 c2eb731d9496c6..c12b4989980a4b 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"