From c460d1e56f19454e9901fed943aed96362b67aea067163ffd9862984f87b28b2 Mon Sep 17 00:00:00 2001 From: Wolfgang Rosenauer Date: Thu, 12 Sep 2019 21:14:35 +0000 Subject: [PATCH] * mozilla-bmo1504834-part1.patch * mozilla-bmo1504834-part2.patch * mozilla-bmo1504834-part3.patch * mozilla-bmo1512162.patch OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=766 --- MozillaFirefox.changes | 7 +++-- MozillaFirefox.spec | 18 ++++++------ mozilla-bmo1504834-part2.patch | 52 +++++++++++++++++++++++++--------- mozilla-bmo1504834-part3.patch | 24 ++++++++++------ mozilla-bmo1511604.patch | 42 ++++++++++++++++++++------- mozilla-bmo1512162.patch | 34 ++++++++++++++++++++++ 6 files changed, 133 insertions(+), 44 deletions(-) create mode 100644 mozilla-bmo1512162.patch diff --git a/MozillaFirefox.changes b/MozillaFirefox.changes index 5a2f159..57ae9ed 100644 --- a/MozillaFirefox.changes +++ b/MozillaFirefox.changes @@ -36,13 +36,14 @@ Thu Sep 5 13:02:39 UTC 2019 - Wolfgang Rosenauer Wed Sep 4 15:38:40 UTC 2019 - Wolfgang Rosenauer - added a bunch of patches mainly for big endian platforms - * mozilla-bmo1504834-part1.patch (currently unused as it breaks LE) - * mozilla-bmo1504834-part2.patch (currently unused as it breaks LE) - * mozilla-bmo1504834-part3.patch (currently unused as it breaks LE) + * mozilla-bmo1504834-part1.patch + * mozilla-bmo1504834-part2.patch + * mozilla-bmo1504834-part3.patch * mozilla-bmo1511604.patch * mozilla-bmo1554971.patch * mozilla-bmo1573381.patch * mozilla-nestegg-big-endian.patch + * mozilla-bmo1512162.patch ------------------------------------------------------------------- Fri Aug 30 20:49:11 UTC 2019 - Wolfgang Rosenauer diff --git a/MozillaFirefox.spec b/MozillaFirefox.spec index 57c2a96..43c13b6 100644 --- a/MozillaFirefox.spec +++ b/MozillaFirefox.spec @@ -83,7 +83,7 @@ BuildRequires: makeinfo BuildRequires: mozilla-nspr-devel >= 4.21 BuildRequires: mozilla-nss-devel >= 3.45 BuildRequires: nasm >= 2.13 -BuildRequires: nodejs >= 8.11 +BuildRequires: nodejs8 >= 8.11 BuildRequires: python-devel BuildRequires: python2-xml BuildRequires: python3 >= 3.5 @@ -137,7 +137,7 @@ License: MPL-2.0 Group: Productivity/Networking/Web/Browsers Url: http://www.mozilla.org/ %if !%{with only_print_mozconfig} -Source: http://ftp.mozilla.org/pub/firefox/releases/%{version}%{orig_suffix}/source/firefox-%{orig_version}%{orig_suffix}.source.tar.xz +Source: http://ftp.mozilla.org/pub/%{progname}/releases/%{version}%{orig_suffix}/source/firefox-%{orig_version}%{orig_suffix}.source.tar.xz Source1: MozillaFirefox.desktop Source2: MozillaFirefox-rpmlintrc Source3: mozilla.sh.in @@ -184,6 +184,7 @@ Patch19: mozilla-bmo1504834-part3.patch Patch20: mozilla-bmo1511604.patch Patch21: mozilla-bmo1554971.patch Patch22: mozilla-nestegg-big-endian.patch +Patch23: mozilla-bmo1512162.patch # Firefox/browser Patch101: firefox-kde.patch Patch102: firefox-branded-icons.patch @@ -305,7 +306,7 @@ cd $RPM_BUILD_DIR/%{source_prefix} %patch8 -p1 %patch9 -p1 %patch10 -p1 -%ifarch s390x +%ifarch s390x ppc64 %patch11 -p1 %endif %patch12 -p1 @@ -313,12 +314,13 @@ cd $RPM_BUILD_DIR/%{source_prefix} %patch14 -p1 %patch15 -p1 %patch16 -p1 -#%patch17 -p1 -#%patch18 -p1 -#%patch19 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 %patch20 -p1 %patch21 -p1 %patch22 -p1 +%patch23 -p1 # Firefox %patch101 -p1 %patch102 -p1 @@ -446,7 +448,7 @@ ac_add_options --with-arch=armv7-a ac_add_options --disable-webrtc %endif # mitigation/workaround for bmo#1512162 -%ifarch ppc64le +%ifarch ppc64le s390x ac_add_options --enable-optimize="-O1" %endif %ifarch x86_64 @@ -485,7 +487,7 @@ make -C browser/installer STRIP=/bin/true MOZ_PKG_FATAL_WARNINGS=0 grep amazondotcom dist/firefox/browser/omni.ja # copy tree into RPM_BUILD_ROOT mkdir -p %{buildroot}%{progdir} -cp -rf $RPM_BUILD_DIR/obj/dist/firefox/* %{buildroot}%{progdir} +cp -rf $RPM_BUILD_DIR/obj/dist/%{progname}/* %{buildroot}%{progdir} mkdir -p %{buildroot}%{progdir}/distribution/extensions mkdir -p %{buildroot}%{progdir}/browser/defaults/preferences/ # install gre prefs diff --git a/mozilla-bmo1504834-part2.patch b/mozilla-bmo1504834-part2.patch index a0be567..6f699a2 100644 --- a/mozilla-bmo1504834-part2.patch +++ b/mozilla-bmo1504834-part2.patch @@ -1,14 +1,19 @@ # HG changeset patch -# Parent 548d0a2f3a22bfac32ec0c3921c6c969c8bf32a9 +# Parent 6fa4b62427433e8f445d05c557e5db096667d880 Skia does not support big endian. The places to fix are too numerous and upstream (skia, not Mozilla) has no interest in maintaining big endian. So here we try to swizzle the input for skia, so that skia always works on LE, and when it comes out again, we transform back to BE. -diff -r 548d0a2f3a22 gfx/2d/ConvolutionFilter.cpp ---- a/gfx/2d/ConvolutionFilter.cpp Mon Jul 22 16:57:54 2019 +0200 -+++ b/gfx/2d/ConvolutionFilter.cpp Thu Jul 25 14:27:59 2019 +0200 -@@ -35,9 +35,38 @@ +diff --git a/gfx/2d/ConvolutionFilter.cpp b/gfx/2d/ConvolutionFilter.cpp +--- a/gfx/2d/ConvolutionFilter.cpp ++++ b/gfx/2d/ConvolutionFilter.cpp +@@ -30,32 +30,79 @@ bool ConvolutionFilter::GetFilterOffsetA + int32_t* aResultLength) { + if (aRowIndex >= mFilter->numValues()) { + return false; + } + mFilter->FilterForValue(aRowIndex, aResultOffset, aResultLength); return true; } @@ -23,7 +28,7 @@ diff -r 548d0a2f3a22 gfx/2d/ConvolutionFilter.cpp + void ConvolutionFilter::ConvolveHorizontally(const uint8_t* aSrc, uint8_t* aDst, bool aHasAlpha) { -+#ifdef MOZ_BIG_ENDIAN ++#if MOZ_BIG_ENDIAN + int outputSize = mFilter->numValues(); + + // Input size isn't handed in, so we have to calculate it quickly @@ -40,19 +45,23 @@ diff -r 548d0a2f3a22 gfx/2d/ConvolutionFilter.cpp + SkOpts::convolve_horizontally(aSrc, *mFilter, aDst, aHasAlpha); + -+#ifdef MOZ_BIG_ENDIAN ++#if MOZ_BIG_ENDIAN + ByteSwapArray((uint8_t*)aSrc, inputSize); + ByteSwapArray(aDst, outputSize); +#endif } void ConvolutionFilter::ConvolveVertically(uint8_t* const* aSrc, uint8_t* aDst, -@@ -49,8 +78,26 @@ + int32_t aRowIndex, int32_t aRowSize, + bool aHasAlpha) { + MOZ_ASSERT(aRowIndex < mFilter->numValues()); + + int32_t filterOffset; int32_t filterLength; auto filterValues = mFilter->FilterForValue(aRowIndex, &filterOffset, &filterLength); + -+#ifdef MOZ_BIG_ENDIAN ++#if MOZ_BIG_ENDIAN + for (int filterY = 0; filterY < filterLength; filterY++) { + // Skia only knows LE, so we have to swizzle the input + ByteSwapArray(aSrc[filterY], aRowSize); @@ -62,7 +71,7 @@ diff -r 548d0a2f3a22 gfx/2d/ConvolutionFilter.cpp SkOpts::convolve_vertically(filterValues, filterLength, aSrc, aRowSize, aDst, aHasAlpha); + -+#ifdef MOZ_BIG_ENDIAN ++#if MOZ_BIG_ENDIAN + // After skia is finished, we swizzle back to BE, in case + // the input is used again somewhere else + for (int filterY = 0; filterY < filterLength; filterY++) { @@ -74,10 +83,20 @@ diff -r 548d0a2f3a22 gfx/2d/ConvolutionFilter.cpp } /* ConvolutionFilter::ComputeResizeFactor is derived from Skia's -diff -r 548d0a2f3a22 gfx/skia/skia/include/core/SkPreConfig.h ---- a/gfx/skia/skia/include/core/SkPreConfig.h Mon Jul 22 16:57:54 2019 +0200 -+++ b/gfx/skia/skia/include/core/SkPreConfig.h Thu Jul 25 14:27:59 2019 +0200 -@@ -73,7 +73,7 @@ + * SkBitmapScaler/SkResizeFilter::computeFactors. It is governed by Skia's + * BSD-style license (see gfx/skia/LICENSE) and the following copyright: + * Copyright (c) 2015 Google Inc. + */ + bool ConvolutionFilter::ComputeResizeFilter(ResizeMethod aResizeMethod, +diff --git a/gfx/skia/skia/include/core/SkPreConfig.h b/gfx/skia/skia/include/core/SkPreConfig.h +--- a/gfx/skia/skia/include/core/SkPreConfig.h ++++ b/gfx/skia/skia/include/core/SkPreConfig.h +@@ -68,17 +68,17 @@ + #define SK_CPU_BENDIAN + #elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) + #define SK_CPU_LENDIAN + #elif defined(__sparc) || defined(__sparc__) || \ + defined(_POWER) || defined(__powerpc__) || \ defined(__ppc__) || defined(__hppa) || \ defined(__PPC__) || defined(__PPC64__) || \ defined(_MIPSEB) || defined(__ARMEB__) || \ @@ -86,3 +105,8 @@ diff -r 548d0a2f3a22 gfx/skia/skia/include/core/SkPreConfig.h (defined(__sh__) && defined(__BIG_ENDIAN__)) || \ (defined(__ia64) && defined(__BIG_ENDIAN__)) #define SK_CPU_BENDIAN + #else + #define SK_CPU_LENDIAN + #endif + #endif + diff --git a/mozilla-bmo1504834-part3.patch b/mozilla-bmo1504834-part3.patch index 8d5692f..c623e81 100644 --- a/mozilla-bmo1504834-part3.patch +++ b/mozilla-bmo1504834-part3.patch @@ -3,36 +3,42 @@ For FF68, AntiAliasing of XULTexts seem to be broken on big endian (s390x). Text and icons of the sandwich-menu to the right of the address bar, as well as plugin-windows appears transparant, which usually means unreadable (white on white). -diff -r aecb4600e5da -r 49f25e4c2fd1 gfx/skia/skia/include/private/SkNx.h +diff -r aecb4600e5da gfx/skia/skia/include/private/SkNx.h --- a/gfx/skia/skia/include/private/SkNx.h Tue Aug 20 09:46:55 2019 +0200 -+++ b/gfx/skia/skia/include/private/SkNx.h Fri Aug 23 15:00:43 2019 +0200 -@@ -238,7 +238,14 @@ ++++ b/gfx/skia/skia/include/private/SkNx.h Mon Sep 09 10:04:06 2019 +0200 +@@ -238,7 +238,18 @@ AI SkNx operator*(const SkNx& y) const { return fVal * y.fVal; } AI SkNx operator/(const SkNx& y) const { return fVal / y.fVal; } -- AI SkNx operator&(const SkNx& y) const { return FromBits(ToBits(fVal) & ToBits(y.fVal)); } + // On Big endian the commented out variant doesn't work, + // and honestly, I have no idea why it exists in the first place. + // The reason its broken is, I think, that it defaults to the double-variant of ToBits() + // which gets a 64-bit integer, and FromBits returns 32-bit, + // cutting off the wrong half again. + // Overall, I see no reason to have ToBits and FromBits at all (even for floats/doubles). -+ // AI SkNx operator&(const SkNx& y) const { return FromBits(ToBits(fVal) & ToBits(y.fVal)); } ++ // Still we are only "fixing" this for big endian and leave little endian alone (never touch a running system) ++#ifdef SK_CPU_BENDIAN + AI SkNx operator&(const SkNx& y) const { return fVal & y.fVal; } ++#else + AI SkNx operator&(const SkNx& y) const { return FromBits(ToBits(fVal) & ToBits(y.fVal)); } ++#endif AI SkNx operator|(const SkNx& y) const { return FromBits(ToBits(fVal) | ToBits(y.fVal)); } AI SkNx operator^(const SkNx& y) const { return FromBits(ToBits(fVal) ^ ToBits(y.fVal)); } -diff -r aecb4600e5da -r 49f25e4c2fd1 gfx/skia/skia/src/opts/SkBlitMask_opts.h +diff -r aecb4600e5da gfx/skia/skia/src/opts/SkBlitMask_opts.h --- a/gfx/skia/skia/src/opts/SkBlitMask_opts.h Tue Aug 20 09:46:55 2019 +0200 -+++ b/gfx/skia/skia/src/opts/SkBlitMask_opts.h Fri Aug 23 15:00:43 2019 +0200 -@@ -203,7 +203,9 @@ ++++ b/gfx/skia/skia/src/opts/SkBlitMask_opts.h Mon Sep 09 10:04:06 2019 +0200 +@@ -203,7 +203,13 @@ // ~~~> // a = 1*aa + d(1-1*aa) = aa + d(1-aa) // c = 0*aa + d(1-1*aa) = d(1-aa) -- return Sk4px(Sk16b(aa) & Sk16b(0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255)) + + // For big endian we have to swap the alpha-mask from 0,0,0,255 to 255,0,0,0 ++#ifdef SK_CPU_BENDIAN + return Sk4px(Sk16b(aa) & Sk16b(255,0,0,0, 255,0,0,0, 255,0,0,0, 255,0,0,0)) ++#else + return Sk4px(Sk16b(aa) & Sk16b(0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255)) ++#endif + d.approxMulDiv255(aa.inv()); }; while (h --> 0) { diff --git a/mozilla-bmo1511604.patch b/mozilla-bmo1511604.patch index f23f291..16f62d0 100644 --- a/mozilla-bmo1511604.patch +++ b/mozilla-bmo1511604.patch @@ -3,7 +3,7 @@ # Date 1543674229 0 # Sat Dec 01 14:23:49 2018 +0000 # Node ID 0309ff19e46b126c527e633518d7de8570442114 -# Parent 53107afbc21ec78e7ac46d37af212505f2032d5d +# Parent ba2c9b0542c95cc5ee26c264e8338fc9ba94c958 Bug 1511604 - Swizzle YCbCr->RGB data on big-endian machines Taken from https://bugzilla.mozilla.org/show_bug.cgi?id=1511604 @@ -11,10 +11,12 @@ This is very closely related to mozilla-bmo1504834 Again, input for skia is swizzled to LE, as skia only understands LE. -diff -r 53107afbc21e -r 0309ff19e46b gfx/ycbcr/YCbCrUtils.cpp ---- a/gfx/ycbcr/YCbCrUtils.cpp Wed Nov 07 04:50:21 2018 +0000 -+++ b/gfx/ycbcr/YCbCrUtils.cpp Sat Dec 01 14:23:49 2018 +0000 -@@ -3,7 +3,9 @@ +diff --git a/gfx/ycbcr/YCbCrUtils.cpp b/gfx/ycbcr/YCbCrUtils.cpp +--- a/gfx/ycbcr/YCbCrUtils.cpp ++++ b/gfx/ycbcr/YCbCrUtils.cpp +@@ -1,14 +1,16 @@ + /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ @@ -24,11 +26,21 @@ diff -r 53107afbc21e -r 0309ff19e46b gfx/ycbcr/YCbCrUtils.cpp #include "YCbCrUtils.h" #include "yuv_convert.h" -@@ -236,6 +238,13 @@ + #include "ycbcr_to_rgb565.h" + + namespace mozilla { + namespace gfx { + +@@ -231,16 +233,23 @@ ConvertYCbCrToRGB(const layers::PlanarYC + srcData.mPicSize.width, + srcData.mPicSize.height, + srcData.mYStride, + srcData.mCbCrStride, + aStride, yuvtype, srcData.mYUVColorSpace); } -+#ifdef MOZ_BIG_ENDIAN ++#if MOZ_BIG_ENDIAN + // libyuv makes endian-correct result, which needs to be swapped to BGRX + if (aDestFormat != SurfaceFormat::R5G6B5_UINT16) + gfx::SwizzleData(aDestBuffer, aStride, gfx::SurfaceFormat::X8R8G8B8, @@ -38,11 +50,21 @@ diff -r 53107afbc21e -r 0309ff19e46b gfx/ycbcr/YCbCrUtils.cpp } void -@@ -257,6 +266,12 @@ + ConvertYCbCrAToARGB(const uint8_t* aSrcY, + const uint8_t* aSrcU, + const uint8_t* aSrcV, + const uint8_t* aSrcA, + int aSrcStrideYA, int aSrcStrideUV, +@@ -252,12 +261,18 @@ ConvertYCbCrAToARGB(const uint8_t* aSrcY + aSrcV, + aSrcA, + aDstARGB, + aWidth, + aHeight, aSrcStrideYA, aSrcStrideUV, aDstStrideARGB); -+#ifdef MOZ_BIG_ENDIAN ++#if MOZ_BIG_ENDIAN + // libyuv makes endian-correct result, which needs to be swapped to BGRA + gfx::SwizzleData(aDstARGB, aDstStrideARGB, gfx::SurfaceFormat::A8R8G8B8, + aDstARGB, aDstStrideARGB, gfx::SurfaceFormat::B8G8R8A8, @@ -51,4 +73,4 @@ diff -r 53107afbc21e -r 0309ff19e46b gfx/ycbcr/YCbCrUtils.cpp } } // namespace gfx - + } // namespace mozilla diff --git a/mozilla-bmo1512162.patch b/mozilla-bmo1512162.patch new file mode 100644 index 0000000..c5d18a7 --- /dev/null +++ b/mozilla-bmo1512162.patch @@ -0,0 +1,34 @@ +# HG changeset patch +# Parent e5858dc7ab007042436496f7cfb9a5abf10f5082 +This fixes a broken build for gcc < 9 on ppc64le. +This patch can be removed for newer gcc-versions. + +diff -r e5858dc7ab00 -r 5d3469aabe61 js/xpconnect/src/XPCWrappedNative.cpp +--- a/js/xpconnect/src/XPCWrappedNative.cpp Thu Nov 29 10:07:29 2018 +0100 ++++ b/js/xpconnect/src/XPCWrappedNative.cpp Tue Sep 10 12:42:13 2019 +0200 +@@ -1092,7 +1092,11 @@ + MOZ_ALWAYS_INLINE bool GetOutParamSource(uint8_t paramIndex, + MutableHandleValue srcp) const; + +- MOZ_ALWAYS_INLINE bool GatherAndConvertResults(); ++#if !(__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN) ++// Work around a compiler bug on ppc64le (bug 1512162). ++ MOZ_ALWAYS_INLINE ++#endif ++ bool GatherAndConvertResults(); + + MOZ_ALWAYS_INLINE bool QueryInterfaceFastPath(); + +@@ -1139,7 +1143,11 @@ + + ~CallMethodHelper(); + +- MOZ_ALWAYS_INLINE bool Call(); ++#if !(__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN) ++// Work around a compiler bug on ppc64le (bug 1512162). ++ MOZ_ALWAYS_INLINE ++#endif ++ bool Call(); + + // Trace implementation so we can put our CallMethodHelper in a Rooted. + void trace(JSTracer* aTrc);