Hello community,

here is the log from the commit of package MozillaThunderbird for 
openSUSE:Factory checked in at 2019-10-10 11:49:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/MozillaThunderbird (Old)
 and      /work/SRC/openSUSE:Factory/.MozillaThunderbird.new.2352 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "MozillaThunderbird"

Thu Oct 10 11:49:19 2019 rev:217 rq:733855 version:68.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/MozillaThunderbird/MozillaThunderbird.changes    
2019-09-18 13:06:22.128753903 +0200
+++ 
/work/SRC/openSUSE:Factory/.MozillaThunderbird.new.2352/MozillaThunderbird.changes
  2019-10-10 11:49:23.275967344 +0200
@@ -1,0 +2,72 @@
+Wed Sep 25 11:46:51 UTC 2019 - Wolfgang Rosenauer <[email protected]>
+
+- Mozilla Thunderbird 68.1.1
+  Bugfixes
+  * Issues with attachments in IMAP messages
+  * Gmail accounts ignored a non-standard trash folder selection
+  * Entering/pasting lists of recipients into the addressing widget or
+    mailing list not working reliably, especially when lists contained
+    multiple commas or semicolons
+  * Edit mailing list not working
+  * Various theme fixes, especially dark theme improvements for Calendar
+  * Contrast between tag label and background not optimal
+  * Account Central pane always loaded at start-up
+  * "Config Editor" button not removed if blocked by policy
+  * Calendar: Free/busy information in attendees dialog not scrolled
+    correctly. Note: Scroll arrows still not behaving correctly
+  MFSA 2019-32
+  * CVE-2019-11755 (bmo#1240290, boo#1152375)
+    Spoofing a message author via a crafted S/MIME message
+- require nodejs8 instead of generic nodejs for better cross-distribution
+  support
+- call desktop database update on install
+- updated translations-other locale list
+- build correct ICU for Big Endian
+- remove kde.js since disabling instantApply breaks extensions and
+  is obsolete with the move to HTML views for preferences (boo#1151186)
+- update create-tar.sh to latest revision and adjust tar_stamps
+- added platform patches from Firefox 68esr
+   mozilla-bmo1005535.patch
+   mozilla-bmo1463035.patch
+   mozilla-bmo1504834-part1.patch
+   mozilla-bmo1504834-part2.patch
+   mozilla-bmo1504834-part3.patch
+   mozilla-bmo1511604.patch
+   mozilla-bmo1554971.patch
+   mozilla-bmo1573381.patch
+   mozilla-cubeb-noreturn.patch
+   mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch
+   mozilla-fix-aarch64-libopus.patch
+   mozilla-fix-top-level-asm.patch
+   mozilla-nestegg-big-endian.patch
+   mozilla-ntlm-full-path.patch
+   mozilla-openaes-decl.patch
+   mozilla-ppc-altivec_static_inline.patch
+   mozilla-reduce-rust-debuginfo.patch
+   mozilla-s390-bigendian.patch
+   mozilla-s390-context.patch
+   mozilla-bmo1512162.patch
+   thunderbird-broken-locales-build.patch
+- removed renamed patches
+   fix-missing-return-warning.patch
+   fix-top-level-asm-issue.patch
+   thunderbird-locale-build.patch
+
+-------------------------------------------------------------------
+Fri Sep 20 15:59:25 UTC 2019 - [email protected]
+
+- repack the lightning xpi with all available locales (boo#939153) (lp#545778)
+
+-------------------------------------------------------------------
+Fri Sep 20 09:49:41 UTC 2019 - Martin Liška <[email protected]>
+
+- Add fix-top-level-asm-issue.patch in order to fix LTO build.
+- Enable LTO on TW on x86_64.
+- Use GCC.
+
+-------------------------------------------------------------------
+Fri Sep 20 08:24:23 UTC 2019 - Bernhard Wiedemann <[email protected]>
+
+- added mozilla-bmo1568145.patch to make builds reproducible (boo#1047218)
+
+-------------------------------------------------------------------
@@ -10 +82 @@
-  * CVE-2019-11739 (bmo#1571481)
+  * CVE-2019-11739 (bmo#1571481, boo#1150939)
@@ -13 +85 @@
-  * CVE-2019-11746 (bmo#1564449)
+  * CVE-2019-11746 (bmo#1564449, boo#1149297)
@@ -15 +87 @@
-  * CVE-2019-11744 (bmo#1562033)
+  * CVE-2019-11744 (bmo#1562033, boo#1149304)
@@ -17 +89 @@
-  * CVE-2019-11742 (bmo#1559715)
+  * CVE-2019-11742 (bmo#1559715, boo#1149303)
@@ -20 +92 @@
-  * CVE-2019-11752 (bmo#1501152)
+  * CVE-2019-11752 (bmo#1501152, boo#1149296)
@@ -22 +94 @@
-  * CVE-2019-11743 (bmo#1560495)
+  * CVE-2019-11743 (bmo#1560495, boo#1149298)
@@ -24 +96 @@
-  * CVE-2019-11740 (bmo#1563133,bmo#1573160)
+  * CVE-2019-11740 (bmo#1563133,bmo#1573160, boo#1149299)

Old:
----
  MozillaThunderbird.keyring
  fix-missing-return-warning.patch
  kde.js
  l10n-68.1.0.tar.xz
  thunderbird-68.1.0.source.tar.xz
  thunderbird-68.1.0.source.tar.xz.asc
  thunderbird-locale-build.patch

New:
----
  l10n-68.1.1.tar.xz
  mozilla-bmo1005535.patch
  mozilla-bmo1463035.patch
  mozilla-bmo1504834-part1.patch
  mozilla-bmo1504834-part2.patch
  mozilla-bmo1504834-part3.patch
  mozilla-bmo1511604.patch
  mozilla-bmo1512162.patch
  mozilla-bmo1554971.patch
  mozilla-bmo1568145.patch
  mozilla-bmo1573381.patch
  mozilla-cubeb-noreturn.patch
  mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch
  mozilla-fix-aarch64-libopus.patch
  mozilla-fix-top-level-asm.patch
  mozilla-nestegg-big-endian.patch
  mozilla-ntlm-full-path.patch
  mozilla-openaes-decl.patch
  mozilla-ppc-altivec_static_inline.patch
  mozilla-reduce-rust-debuginfo.patch
  mozilla-s390-bigendian.patch
  mozilla-s390-context.patch
  mozilla.keyring
  thunderbird-68.1.1.source.tar.xz
  thunderbird-68.1.1.source.tar.xz.asc
  thunderbird-broken-locales-build.patch

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

Other differences:
------------------
++++++ MozillaThunderbird.spec ++++++
--- /var/tmp/diff_new_pack.ANJX3P/_old  2019-10-10 11:49:52.479889834 +0200
+++ /var/tmp/diff_new_pack.ANJX3P/_new  2019-10-10 11:49:52.491889802 +0200
@@ -18,20 +18,29 @@
 
 
 # changed with every update
+# orig_version vs. mainver: To have beta-builds
+# FF70beta3 would be released as FF69.99
+# orig_version would be the upstream tar ball
+# orig_version 70.0
+# orig_suffix b3
+# major 69
+# mainver %major.99
 %define major 68
-%define mainver %major.1.0
-%define version_postfix %{nil}
+%define mainver         %major.1.1
+%define orig_version    68.1.1
+%define orig_suffix     %{nil}
 %define update_channel release
-%define releasedate 20190909201201
+%define releasedate     20190924105435
 %define source_prefix thunderbird-%{mainver}
 
 # always build with GCC as SUSE Security Team requires that
-# TODO: Deactivate this as the next step
-%define clang_build 1
+%define clang_build 0
 
 # PIE, full relro
 %define build_hardened 1
 
+%bcond_with only_print_mozconfig
+
 %bcond_without mozilla_tb_kde4
 %bcond_with    mozilla_tb_valgrind
 %bcond_without mozilla_tb_optimize_for_size
@@ -75,7 +84,7 @@
 BuildRequires:  mozilla-nspr-devel >= 4.21
 BuildRequires:  mozilla-nss-devel >= 3.44.1
 BuildRequires:  nasm >= 2.13
-BuildRequires:  nodejs >= 8.11
+BuildRequires:  nodejs8 >= 8.11
 BuildRequires:  python-devel
 BuildRequires:  python2-xml
 BuildRequires:  python3 >= 3.5
@@ -116,9 +125,9 @@
 Recommends:     libavcodec-full >= 0.10.16
 Version:        %{mainver}
 Release:        0
-Provides:       MozillaThunderbird-devel = %version
-Obsoletes:      MozillaThunderbird-devel < %version
+Provides:       MozillaThunderbird-devel = %{version}
 Provides:       thunderbird = %{version}
+Obsoletes:      MozillaThunderbird-devel < %{version}
 Provides:       appdata()
 Provides:       appdata(thunderbird.appdata.xml)
 %if %{with mozilla_tb_kde4}
@@ -131,32 +140,50 @@
 License:        MPL-2.0
 Group:          Productivity/Networking/Email/Clients
 Url:            https://www.thunderbird.net/
-Source:         
http://ftp.mozilla.org/pub/%{progname}/releases/%{version}%{version_postfix}/source/%{progname}-%{version}%{version_postfix}.source.tar.xz
+%if !%{with only_print_mozconfig}
+Source:         
http://ftp.mozilla.org/pub/%{progname}/releases/%{orig_version}%{orig_suffix}/source/%{progname}-%{orig_version}%{orig_suffix}.source.tar.xz
 Source1:        thunderbird.desktop
-Source2:        tar_stamps
+Source2:        thunderbird-rpmlintrc
 Source3:        mozilla.sh.in
-Source4:        l10n-%{version}.tar.xz
+Source4:        tar_stamps
 Source6:        suse-default-prefs.js
-Source8:        thunderbird-rpmlintrc
+Source7:        l10n-%{version}.tar.xz
 Source9:        thunderbird.appdata.xml
-Source10:       create-tar.sh
-Source11:       compare-locales.tar.xz
-Source12:       kde.js
-Source13:       
https://ftp.mozilla.org/pub/thunderbird/releases/%{version}/source/thunderbird-%{version}.source.tar.xz.asc
-Source14:       
http://ftp.mozilla.org/pub/thunderbird/releases/%{version}/KEY#/%{name}.keyring
+Source10:       compare-locales.tar.xz
+Source14:       
https://github.com/openSUSE/firefox-scripts/raw/master/create-tar.sh
+Source20:       
https://ftp.mozilla.org/pub/%{progname}/releases/%{orig_version}%{orig_suffix}/source/%{progname}-%{orig_version}%{orig_suffix}.source.tar.xz.asc
+Source21:       
https://ftp.mozilla.org/pub/%{progname}/releases/%{orig_version}/KEY#/mozilla.keyring
 # Gecko/Toolkit
 Patch1:         mozilla-nongnome-proxies.patch
 Patch2:         mozilla-kde.patch
-Patch3:         mozilla-aarch64-startup-crash.patch
-Patch4:         fix-missing-return-warning.patch
-Patch5:         thunderbird-locale-build.patch
+Patch3:         mozilla-ntlm-full-path.patch
+Patch4:         mozilla-openaes-decl.patch
+Patch5:         mozilla-aarch64-startup-crash.patch
+Patch6:         mozilla-bmo1463035.patch
+Patch7:         mozilla-cubeb-noreturn.patch
+Patch8:         mozilla-fix-aarch64-libopus.patch
+Patch9:         mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch
+Patch10:        mozilla-s390-context.patch
+Patch11:        mozilla-s390-bigendian.patch
+Patch12:        mozilla-reduce-rust-debuginfo.patch
+Patch13:        mozilla-ppc-altivec_static_inline.patch
+Patch14:        mozilla-bmo1005535.patch
+Patch15:        mozilla-bmo1568145.patch
+Patch16:        mozilla-bmo1573381.patch
+Patch17:        mozilla-bmo1504834-part1.patch
+Patch18:        mozilla-bmo1504834-part2.patch
+Patch19:        mozilla-bmo1504834-part3.patch
+Patch20:        mozilla-bmo1511604.patch
+Patch21:        mozilla-bmo1554971.patch
+Patch22:        mozilla-nestegg-big-endian.patch
+Patch23:        mozilla-bmo1512162.patch
+Patch24:        mozilla-fix-top-level-asm.patch
+Patch100:       thunderbird-broken-locales-build.patch
+%endif # only_print_mozconfig
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 PreReq:         coreutils fileutils textutils /bin/sh
 Recommends:     libcanberra0
 Recommends:     libpulse0
-# Exclude bigendian archs for now, have not built
-# since version 45.8.0
-ExcludeArch:    ppc ppc64 s390 s390x
 ### build options
 %ifarch aarch64 ppc ppc64 ppc64le s390 s390x ia64 %arm
 %define crashreporter 0
@@ -169,7 +196,8 @@
 %define __requires_exclude 
^(libmoz.*|liblgpllibs.*|libxul.*|libldap.*|libldif.*|libprldap.*)$
 Requires:       mozilla-nspr >= %(rpm -q --queryformat '%%{VERSION}' 
mozilla-nspr)
 Requires:       mozilla-nss >= %(rpm -q --queryformat '%%{VERSION}' 
mozilla-nss)
-Conflicts:      thunderbird-esr
+Requires(post): desktop-file-utils
+Requires(postun): desktop-file-utils
 %define libgssapi libgssapi_krb5.so.2
 
 %description
@@ -179,7 +207,6 @@
 yet easy to use.
 
 %if %localize
-
 %package translations-common
 Summary:        Common translations for %{appname}
 Group:          System/Localization
@@ -194,7 +221,7 @@
 %package translations-other
 Summary:        Extra translations for %{appname}
 Group:          System/Localization
-Provides:       
locale(%{name}:ast;be;bg;bn_BD;br;et;eu;fy_NL;ga_IE;gd;gl;he;hr;hy_AM;id;is;lt;nn_NO;pa_IN;rm;ro;si;sk;sl;sq;sr;ta_LK;tr;uk;vi)
+Provides:       
locale(%{name}:ast;be;bg;br;cak;cy;dsb;et;eu;fy_NL;ga_IE;gd;gl;he;hr;hsb;hy_AM;id;is;ka;kab;kk;lt;ms;nn_NO;rm;ro;si;sk;sl;sq;sr;tr;uk;uz;vi)
 Requires:       %{name} = %{version}
 Obsoletes:      %{name}-translations < %{version}-%{release}
 
@@ -213,16 +240,17 @@
 symbols meant for upload to Mozilla's crash collector database.
 %endif
 
+%if !%{with only_print_mozconfig}
 %prep
 %if %localize
 # If generated incorrectly, the tarball will be ~270B in
 # size, so 1MB seems like good enough limit to check.
 MINSIZE=1048576
-if (( $(stat -Lc%s "%{SOURCE4}") < MINSIZE)); then
+if (( $(stat -Lc%s "%{SOURCE7}") < MINSIZE)); then
     echo "Translations tarball %{SOURCE7} not generated properly."
     exit 1
 fi
-%setup -q -n %{source_prefix} -b 4 -b 11
+%setup -q -n %{source_prefix} -b 7 -b 10
 %else
 %setup -q -n %{source_prefix}
 %endif
@@ -233,11 +261,33 @@
 %patch3 -p1
 %patch4 -p1
 %patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%ifarch s390x
+%patch11 -p1
+%endif
+%patch12 -p1
+%patch13 -p1
+%patch14 -p1
+%patch15 -p1
+%patch16 -p1
+%patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
+%patch21 -p1
+%patch22 -p1
+%patch23 -p1
+%patch24 -p1
+# Thunderbird
+%patch100 -p1
+%endif # only_print_mozconfig
 
 %build
-#
-# Limit RAM usage to avoid OOM
-
+%if !%{with only_print_mozconfig}
 %define _lto_cflags %{nil}
 # no need to add build time to binaries
 modified="$(sed -n '/^----/n;s/ - .*$//;p;q' "%{_sourcedir}/%{name}.changes")"
@@ -252,14 +302,12 @@
   exit 1
 fi
 %endif
+%endif # only_print_mozconfig
 
 export SUSE_ASNEEDED=0
 export MOZ_BUILD_DATE=%{releasedate}
 export MOZILLA_OFFICIAL=1
 export BUILD_OFFICIAL=1
-%if %{update_channel} == "esr"
-export MOZ_ESR=1
-%endif
 %if 0%{?suse_version} <= 1320
 export CC=gcc-7
 %else
@@ -285,10 +333,16 @@
 export RUSTFLAGS="-Cdebuginfo=0"
 %endif
 export MOZCONFIG=$RPM_BUILD_DIR/mozconfig
+%if %{with only_print_mozconfig}
+echo "export CC=$CC"
+echo "export CXX=$CXX"
+echo "export CFLAGS=\"$CFLAGS\""
+echo "export LDFLAGS=\"$LDFLAGS\""
+echo "export RUSTFLAGS=\"$RUSTFLAGS\""
+echo ""
+cat << EOF
+%else
 %limit_build -m 2000
-# -g might be part of RPM_OPT_FLAGS, depending on the debuginfo setting in prj 
config
-# gcc lacks a an explicit -noop, so use something similar to make sure -g
-# is not forced into CFLAGS
 export MOZ_DEBUG_FLAGS="-pipe"
 cat << EOF > $MOZCONFIG
 mk_add_options MOZILLA_OFFICIAL=1
@@ -336,33 +390,58 @@
 ac_add_options --enable-official-branding
 ac_add_options --disable-necko-wifi
 ac_add_options --enable-update-channel=%{update_channel}
+ac_add_options --with-unsigned-addon-scopes=app
 %if %has_system_cairo
 ac_add_options --enable-system-cairo
 %endif
 %if ! %crashreporter
 ac_add_options --disable-crashreporter
 %endif
+%ifarch %arm
+ac_add_options --with-fpu=vfpv3-d16
+ac_add_options --with-float-abi=hard
+%ifarch armv6l armv6hl
+ac_add_options --with-arch=armv6
+%else
+ac_add_options --with-arch=armv7-a
+%endif
+%endif
 %if %{with mozilla_tb_valgrind}
 ac_add_options --disable-jemalloc
 ac_add_options --enable-valgrind
 %endif
+# mitigation/workaround for bmo#1512162
+%ifarch s390x
+ac_add_options --enable-optimize="-O1"
+%endif
+%ifarch x86_64
+# LTO needs newer toolchain stack only (at least GCC 8.2.1 (r268506)
+%if 0%{?suse_version} > 1500
+ac_add_options --enable-lto
+%endif
+%endif
 EOF
+%endif
+%if !%{with only_print_mozconfig}
+%ifarch ppc64 s390x s390
+# NOTE: Currently, system-icu is too old, so we can't build with that,
+#       but have to generate the .dat-file freshly. This seems to be a
+#       less fragile approach anyways.
+# ac_add_options --with-system-icu
+echo "Generate big endian version of config/external/icu/data/icud58l.dat"
+./mach python intl/icu_sources_data.py .
+ls -l config/external/icu/data
+rm -f config/external/icu/data/icudt*l.dat
+%endif
 ./mach build
+%endif # only_print_mozconfig
 
 %install
 cd $RPM_BUILD_DIR/obj
 make -C comm/mail/installer STRIP=/bin/true MOZ_PKG_FATAL_WARNINGS=0
 # copy tree into RPM_BUILD_ROOT
 mkdir -p %{buildroot}%{progdir}
-cp -rf $RPM_BUILD_DIR/obj/dist/thunderbird/* %{buildroot}%{progdir}
-install -m 644 %{SOURCE13} %{buildroot}%{progdir}/defaults/pref/
-%if %{with mozilla_tb_kde4}
-# install kde.js
-install -m 644 %{SOURCE12} %{buildroot}%{progdir}/defaults/pref/kde.js
-# make sure that instantApply is true by default
-# (TODO: mozilla-kde.patch needs to be improved to really not load kde.js in 
non-KDE envs)
-echo 'pref("browser.preferences.instantApply", true);' > 
%{buildroot}%{progdir}/defaults/pref/all-thunderbird.js
-%endif
+cp -rf $RPM_BUILD_DIR/obj/dist/%{progname}/* %{buildroot}%{progdir}
 # build additional locales
 %if %localize
 mkdir -p %{buildroot}%{progdir}/extensions/
@@ -390,6 +469,23 @@
        echo %{progdir}/extensions/[email protected] \
          >> %{_tmppath}/translations.$_l10ntarget
 ' -- {}
+# repack the lightning xpi with all available locales (boo#939153) (lp#545778)
+_extid="{e2fda1a4-762b-4020-b5ad-a41df1933103}"
+rm -rf _lightning
+mkdir -p _lightning
+unzip -q -d _lightning 
"%{buildroot}%{progdir}/distribution/extensions/${_extid}.xpi"
+_langpacks=$(cd "%{buildroot}%{progdir}/extensions/" && find langpack-* -type 
d -prune -print|cut -d'-' -f2-|cut -d'@' -f1)
+for _loc in $_langpacks ; do
+    
_dir="%{buildroot}%{progdir}/extensions/langpack-${_loc}@thunderbird.mozilla.org"
+    _dir="${_dir}/distribution/extensions/${_extid}"
+    test -d "_lightning/chrome/calendar-${_loc}" && continue
+    test -d "_lightning/chrome/lightning-${_loc}" && continue
+    test -f "${_dir}/chrome.manifest" || continue
+    cp -rL "${_dir}"/chrome/{calendar,lightning}-"${_loc}" _lightning/chrome/
+    cat "${_dir}/chrome.manifest" >> _lightning/chrome.manifest
+done
+(cd _lightning && zip -q9r ../"${_extid}.xpi" *)
+cp -p "${_extid}.xpi" %{buildroot}%{progdir}/distribution/extensions/
 %endif
 # overwrite the mozilla start-script and link it to /usr/bin
 mkdir --parents %{buildroot}%{_bindir}/
@@ -449,10 +545,12 @@
 %fdupes %{buildroot}%{progdir}
 %fdupes %{buildroot}%{_libdir}/mozilla
 %fdupes %{buildroot}%{_datadir}
+# create breakpad debugsymbols
 %if %crashreporter
 
SYMBOLS_NAME="thunderbird-%{version}-%{release}.%{_arch}-%{suse_version}-symbols"
 make buildsymbols \
   SYMBOL_INDEX_NAME="$SYMBOLS_NAME.txt" \
+  SYMBOL_FULL_ARCHIVE_BASENAME="$SYMBOLS_NAME-full" \
   SYMBOL_ARCHIVE_BASENAME="$SYMBOLS_NAME"
 if [ -e dist/*symbols.zip ]; then
   mkdir -p %{buildroot}%{_datadir}/mozilla/
@@ -467,10 +565,12 @@
 %endif
 
 %post
+%desktop_database_post
 %icon_theme_cache_post
 exit 0
 
 %postun
+%desktop_database_postun
 %icon_theme_cache_postun
 exit 0
 
@@ -487,9 +587,6 @@
 %{progdir}/gtk2/libmozgtk.so
 %{progdir}/*.so
 %{progdir}/omni.ja
-%if %crashreporter
-%{progdir}/minidump-analyzer
-%endif
 %{progdir}/pingsender
 %{progdir}/platform.ini
 %{progdir}/plugin-container
@@ -498,6 +595,7 @@
 %if %crashreporter
 %{progdir}/crashreporter
 %{progdir}/crashreporter.ini
+%{progdir}/minidump-analyzer
 %{progdir}/Throbber-small.gif
 %endif
 %dir %{progdir}/chrome/

++++++ compare-locales.tar.xz ++++++

++++++ create-tar.sh ++++++
--- /var/tmp/diff_new_pack.ANJX3P/_old  2019-10-10 11:49:52.635889420 +0200
+++ /var/tmp/diff_new_pack.ANJX3P/_new  2019-10-10 11:49:52.639889409 +0200
@@ -1,9 +1,9 @@
 #!/bin/bash
 
 function print_usage_and_exit() {
-  echo "Usage: create-tar.sh tar_stamp"
+  echo "Usage: create-tar.sh tar_stamps"
   echo ""
-  echo "Where tar_stamp should look like this:"
+  echo "Where tar_stamps should look like this:"
   echo ""
   cat << EOF
 # Node ID: 64ee63facd4ff96b3e8590cff559d7e97ac6b061
@@ -11,8 +11,7 @@
 CHANNEL="esr60"
 VERSION="60.7.0"
 VERSION_SUFFIX="esr"
-FF_RELEASE_TAG="" # Needs only to be set if no tar-ball can be downloaded
-TB_RELEASE_TAG="" # Only relevant for Thunderbird
+RELEASE_TAG="" # Needs only to be set if no tar-ball can be downloaded
 PREV_VERSION="60.6.3" # Prev. version only needed for locales (leave empty to 
force l10n-generation)
 PREV_VERSION_SUFFIX="esr"
 #SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation
@@ -25,7 +24,7 @@
   print_usage_and_exit
 fi
 
-# Sourcing the given tar_stamp-file to have the variables available
+# Sourcing the given tar_stamps-file to have the variables available
 source "$1" || print_usage_and_exit
 
 # Internal variables
@@ -193,10 +192,19 @@
     echo "cloning new $BRANCH..."
     hg clone http://hg.mozilla.org/$BRANCH $PRODUCT-$VERSION
     if [ "$PRODUCT" = "thunderbird" ]; then
-      hg clone http://hg.mozilla.org/releases/comm-$CHANNEL 
thunderbird-$VERSION/comm
+      hg clone http://hg.mozilla.org/releases/comm-$CHANNEL 
$PRODUCT-$VERSION/comm
     fi
   fi
   pushd $PRODUCT-$VERSION || exit 1
+
+  # parse out the Firefox-release tag for this Thunderbird-checkout
+  if [ "$PRODUCT" = "thunderbird" ]; then
+    FF_RELEASE_TAG=$(grep ^GECKO_HEAD_REV ./comm/.gecko_rev.yml | awk -F ' ' 
'{print $2}') || exit 1
+    echo "Parsed Firefox base ID from .gecko_rev.yml: $FF_RELEASE_TAG"
+  else
+    FF_RELEASE_TAG="$RELEASE_TAG"
+  fi
+
   hg update --check $FF_RELEASE_TAG
   [ "$FF_RELEASE_TAG" == "default" ] || hg update -r $FF_RELEASE_TAG
   # get repo and source stamp
@@ -207,7 +215,7 @@
 
   if [ "$PRODUCT" = "thunderbird" ]; then
     pushd comm || exit 1
-    hg update --check $TB_RELEASE_TAG
+    hg update --check $RELEASE_TAG
     popd || exit 1
     rm -rf thunderbird-${VERSION}/{,comm/}other-licenses/7zstub
   fi
@@ -241,7 +249,7 @@
           else
             hg clone "http://hg.mozilla.org/l10n-central/$locale"; 
"l10n/$locale"
           fi
-          [ "$FF_RELEASE_TAG" == "default" ] || hg -R "l10n/$locale" up -C -r 
"$changeset"
+          [ "$RELEASE_TAG" == "default" ] || hg -R "l10n/$locale" up -C -r 
"$changeset"
           ;;
       esac
     done

++++++ l10n-68.1.0.tar.xz -> l10n-68.1.1.tar.xz ++++++
/work/SRC/openSUSE:Factory/MozillaThunderbird/l10n-68.1.0.tar.xz 
/work/SRC/openSUSE:Factory/.MozillaThunderbird.new.2352/l10n-68.1.1.tar.xz 
differ: char 26, line 1

++++++ mozilla-bmo1005535.patch ++++++
# HG changeset patch
# User Steve Singer <[email protected]>
# Date 1558451540 -7200
#      Tue May 21 17:12:20 2019 +0200
# Node ID 433beec63e6b5f409683af20a0c1ab137cc7bfad
# Parent  42c99b59a87b904063bad3193f10c51d068d2eac
Bug 1005535 - Get skia GPU building on big endian.

diff -r 42c99b59a87b -r 433beec63e6b gfx/skia/skia/include/private/GrColor.h
--- a/gfx/skia/skia/include/private/GrColor.h   Wed Jun 05 08:48:08 2019 +0200
+++ b/gfx/skia/skia/include/private/GrColor.h   Tue May 21 17:12:20 2019 +0200
@@ -63,7 +63,7 @@
  *  Since premultiplied means that alpha >= color, we construct a color with
  *  each component==255 and alpha == 0 to be "illegal"
  */
-#define GrColor_ILLEGAL     (~(0xFF << GrColor_SHIFT_A))
+#define GrColor_ILLEGAL     ((uint32_t)(~(0xFF << GrColor_SHIFT_A)))
 
 /** Normalizes and coverts an uint8_t to a float. [0, 255] -> [0.0, 1.0] */
 static inline float GrNormalizeByteToFloat(uint8_t value) {
++++++ mozilla-bmo1463035.patch ++++++

# HG changeset patch
# User Mike Hommey <[email protected]>
# Date 1526871862 -32400
# Node ID 94f21505ff13cd089f7129cd24927cf8b31a0f43
# Parent  fc741a5ea37dbe145e0ca5f85e5dfb100f3c9091
Bug 1463035 - Remove MOZ_SIGNAL_TRAMPOLINE. r?darchons

For some reason, GNU as is not happy with the assembly generated after
bug 1238661 anymore on Debian armel.

OTOH, as mentioned in bug 1238661 comment 4, we actually don't need this
workaround anymore, so let's just kill it.

diff --git a/mfbt/moz.build b/mfbt/moz.build
--- a/mfbt/moz.build
+++ b/mfbt/moz.build
@@ -122,20 +122,16 @@ EXPORTS["double-conversion"] = [
 LOCAL_INCLUDES += [
     '/mfbt/double-conversion',
 ]
 
 if CONFIG['OS_ARCH'] == 'WINNT':
     EXPORTS.mozilla += [
         'WindowsVersion.h',
     ]
-elif CONFIG['OS_ARCH'] == 'Linux':
-    EXPORTS.mozilla += [
-        'LinuxSignal.h',
-    ]
 
 UNIFIED_SOURCES += [
     'Assertions.cpp',
     'ChaosMode.cpp',
     'double-conversion/double-conversion/bignum-dtoa.cc',
     'double-conversion/double-conversion/bignum.cc',
     'double-conversion/double-conversion/cached-powers.cc',
     'double-conversion/double-conversion/diy-fp.cc',
diff --git a/tools/profiler/core/platform-linux-android.cpp 
b/tools/profiler/core/platform-linux-android.cpp
--- a/tools/profiler/core/platform-linux-android.cpp
+++ b/tools/profiler/core/platform-linux-android.cpp
@@ -55,17 +55,16 @@
 #ifdef __GLIBC__
 #  include <execinfo.h>  // backtrace, backtrace_symbols
 #endif                   // def __GLIBC__
 #include <strings.h>     // index
 #include <errno.h>
 #include <stdarg.h>
 
 #include "prenv.h"
-#include "mozilla/LinuxSignal.h"
 #include "mozilla/PodOperations.h"
 #include "mozilla/DebugOnly.h"
 
 #include <string.h>
 #include <list>
 
 using namespace mozilla;
 
@@ -248,17 +247,17 @@ Sampler::Sampler(PSLockRef aLock)
 
   // NOTE: We don't initialize LUL here, instead initializing it in
   // SamplerThread's constructor. This is because with the
   // profiler_suspend_and_sample_thread entry point, we want to be able to
   // sample without waiting for LUL to be initialized.
 
   // Request profiling signals.
   struct sigaction sa;
-  sa.sa_sigaction = MOZ_SIGNAL_TRAMPOLINE(SigprofHandler);
+  sa.sa_sigaction = SigprofHandler;
   sigemptyset(&sa.sa_mask);
   sa.sa_flags = SA_RESTART | SA_SIGINFO;
   if (sigaction(SIGPROF, &sa, &mOldSigprofHandler) != 0) {
     MOZ_CRASH("Error installing SIGPROF handler in the profiler");
   }
 }
 
 void Sampler::Disable(PSLockRef aLock) {
++++++ mozilla-bmo1504834-part1.patch ++++++
# HG changeset patch
# Parent  051b75a600dfbf7503c3485cebfd34d4eb29be96
Taken from https://bugzilla.mozilla.org/show_bug.cgi?id=1504834

diff -r 051b75a600df gfx/2d/DrawTargetSkia.cpp
--- a/gfx/2d/DrawTargetSkia.cpp Fri Jul 05 12:42:44 2019 +0200
+++ b/gfx/2d/DrawTargetSkia.cpp Mon Jul 08 10:59:30 2019 +0200
@@ -138,8 +138,7 @@
   return surfaceBounds.Intersect(bounds);
 }
 
-static const int kARGBAlphaOffset =
-    SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0;
+static const int kARGBAlphaOffset = 0;  // Skia is always BGRA 
SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0;
 
 static bool VerifyRGBXFormat(uint8_t* aData, const IntSize& aSize,
                              const int32_t aStride, SurfaceFormat aFormat) {
diff -r 051b75a600df gfx/2d/Types.h
--- a/gfx/2d/Types.h    Fri Jul 05 12:42:44 2019 +0200
+++ b/gfx/2d/Types.h    Mon Jul 08 10:59:30 2019 +0200
@@ -85,15 +85,8 @@
 // The following values are endian-independent synonyms. The _UINT32 suffix
 // indicates that the name reflects the layout when viewed as a uint32_t
 // value.
-#if MOZ_LITTLE_ENDIAN
   A8R8G8B8_UINT32 = B8G8R8A8,  // 0xAARRGGBB
   X8R8G8B8_UINT32 = B8G8R8X8   // 0x00RRGGBB
-#elif MOZ_BIG_ENDIAN
-  A8R8G8B8_UINT32 = A8R8G8B8,  // 0xAARRGGBB
-  X8R8G8B8_UINT32 = X8R8G8B8   // 0x00RRGGBB
-#else
-#  error "bad endianness"
-#endif
 };
 
 static inline int BytesPerPixel(SurfaceFormat aFormat) {
diff -r 051b75a600df gfx/skia/skia/third_party/skcms/skcms.cc
--- a/gfx/skia/skia/third_party/skcms/skcms.cc  Fri Jul 05 12:42:44 2019 +0200
+++ b/gfx/skia/skia/third_party/skcms/skcms.cc  Mon Jul 08 10:59:30 2019 +0200
@@ -17,6 +17,8 @@
     #include <arm_neon.h>
 #elif defined(__SSE__)
     #include <immintrin.h>
+#else
+    #define SKCMS_PORTABLE
 #endif
 
 // sizeof(x) will return size_t, which is 32-bit on some machines and 64-bit 
on others.
@@ -124,20 +126,28 @@
 static uint16_t read_big_u16(const uint8_t* ptr) {
     uint16_t be;
     memcpy(&be, ptr, sizeof(be));
-#if defined(_MSC_VER)
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+    return be;
+#else
+    #if defined(_MSC_VER)
     return _byteswap_ushort(be);
-#else
+    #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 defined(_MSC_VER)
+#if __BYTE_ORDER == __ORDER_BIG_ENDIAN__
+    return be;
+#else
+    #if defined(_MSC_VER)
     return _byteswap_ulong(be);
-#else
+    #else
     return __builtin_bswap32(be);
+    #endif
 #endif
 }
 
++++++ mozilla-bmo1504834-part2.patch ++++++
# HG changeset patch
# Parent  36563351309ddbc6c29559ba50a41d005f925abb
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 36563351309d gfx/2d/ConvolutionFilter.cpp
--- a/gfx/2d/ConvolutionFilter.cpp      Mon Sep 09 17:59:28 2019 +0200
+++ b/gfx/2d/ConvolutionFilter.cpp      Tue Sep 10 08:25:13 2019 +0200
@@ -35,9 +35,38 @@
   return true;
 }
 
+static void ByteSwapArray(uint8_t *u8Array, int32_t size) {
+    uint32_t *array = reinterpret_cast<uint32_t*>(u8Array);
+    for (int pxl = 0; pxl < size; ++pxl) {
+        // Use an endian swap to move the bytes, i.e. BGRA -> ARGB.
+        uint32_t rgba = array[pxl];
+        array[pxl] = NativeEndian::swapToLittleEndian(rgba);
+    }
+}
+
 void ConvolutionFilter::ConvolveHorizontally(const uint8_t* aSrc, uint8_t* 
aDst,
                                              bool aHasAlpha) {
+#if MOZ_BIG_ENDIAN
+    int outputSize = mFilter->numValues();
+
+    // Input size isn't handed in, so we have to calculate it quickly
+    int inputSize = 0;
+    for (int xx = 0; xx < outputSize; ++xx) {
+        // Get the filter that determines the current output pixel.
+        int filterOffset, filterLength;
+        mFilter->FilterForValue(xx, &filterOffset, &filterLength);
+        inputSize = std::max(inputSize, filterOffset + filterLength);
+    }
+
+    ByteSwapArray((uint8_t*)aSrc, inputSize);
+#endif
+
   SkOpts::convolve_horizontally(aSrc, *mFilter, aDst, aHasAlpha);
+
+#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 filterLength;
   auto filterValues =
       mFilter->FilterForValue(aRowIndex, &filterOffset, &filterLength);
+
+#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);
+  }
+#endif
+
   SkOpts::convolve_vertically(filterValues, filterLength, aSrc, aRowSize, aDst,
                               aHasAlpha);
+
+#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++) {
+    ByteSwapArray(aSrc[filterY], aRowSize);
+  }
+  // The destination array as well
+  ByteSwapArray(aDst, aRowSize);
+#endif
 }
 
 /* ConvolutionFilter::ComputeResizeFactor is derived from Skia's
diff -r 36563351309d gfx/skia/skia/include/core/SkPreConfig.h
--- a/gfx/skia/skia/include/core/SkPreConfig.h  Mon Sep 09 17:59:28 2019 +0200
+++ b/gfx/skia/skia/include/core/SkPreConfig.h  Tue Sep 10 08:25:13 2019 +0200
@@ -73,7 +73,7 @@
       defined(__ppc__) || defined(__hppa) || \
       defined(__PPC__) || defined(__PPC64__) || \
       defined(_MIPSEB) || defined(__ARMEB__) || \
-      defined(__s390__) || \
+      defined(__s390__) || defined(__s390x__) || \
       (defined(__sh__) && defined(__BIG_ENDIAN__)) || \
       (defined(__ia64) && defined(__BIG_ENDIAN__))
          #define SK_CPU_BENDIAN
++++++ mozilla-bmo1504834-part3.patch ++++++
# HG changeset patch
# Parent  aecb4600e5da17443b224c79eee178c1d8e155e3
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 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      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; }
 
+    // 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).
+    // 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 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  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)
+
+            // 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) {
++++++ mozilla-bmo1511604.patch ++++++
# HG changeset patch
# User A. Wilcox <[email protected]>
# Date 1543674229 0
#      Sat Dec 01 14:23:49 2018 +0000
# Node ID 0309ff19e46b126c527e633518d7de8570442114
# Parent  5b5a6a164acbd4da6131808bd12e42e7b0a33c2a
Bug 1511604 - Swizzle YCbCr->RGB data on big-endian machines
Taken from https://bugzilla.mozilla.org/show_bug.cgi?id=1511604

This is very closely related to mozilla-bmo1504834

Again, input for skia is swizzled to LE, as skia only understands LE.

diff -r 5b5a6a164acb gfx/ycbcr/YCbCrUtils.cpp
--- a/gfx/ycbcr/YCbCrUtils.cpp  Mon Sep 09 17:59:29 2019 +0200
+++ b/gfx/ycbcr/YCbCrUtils.cpp  Tue Sep 10 08:22:10 2019 +0200
@@ -3,7 +3,9 @@
  * 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/. */
 
+#include "mozilla/EndianUtils.h"
 #include "gfx2DGlue.h"
+#include "mozilla/gfx/Swizzle.h"
 
 #include "YCbCrUtils.h"
 #include "yuv_convert.h"
@@ -236,6 +238,13 @@
                           yuvtype,
                           srcData.mYUVColorSpace);
   }
+#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,
+                     aDestBuffer, aStride, gfx::SurfaceFormat::B8G8R8X8,
+                     srcData.mPicSize);
+#endif
 }
 
 void
@@ -257,6 +266,12 @@
                         aSrcStrideYA,
                         aSrcStrideUV,
                         aDstStrideARGB);
+#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,
+                   IntSize(aWidth, aHeight));
+#endif
 }
 
 } // namespace gfx
++++++ mozilla-bmo1512162.patch ++++++
# HG changeset patch
# Parent  d4ba07ab572268a34e98c63792beb2ce6d78e7a1
This patch is upstream

diff -r d4ba07ab5722 js/xpconnect/src/XPCWrappedNative.cpp
--- a/js/xpconnect/src/XPCWrappedNative.cpp     Fri Sep 20 07:56:01 2019 +0200
+++ b/js/xpconnect/src/XPCWrappedNative.cpp     Fri Sep 20 08:00:19 2019 +0200
@@ -1157,10 +1157,6 @@
   return helper.get().Call();
 }
 
-#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-// Work around a compiler bug on ppc64le (bug 1512162).
-__attribute__ ((noinline,noclone))
-#endif
 bool CallMethodHelper::Call() {
   mCallContext.SetRetVal(JS::UndefinedValue());
 
@@ -1319,10 +1315,6 @@
   return true;
 }
 
-#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-// Work around a compiler bug on ppc64le (bug 1512162).
-__attribute__ ((noinline,noclone))
-#endif
 bool CallMethodHelper::GatherAndConvertResults() {
   // now we iterate through the native params to gather and convert results
   uint8_t paramCount = mMethodInfo->GetParamCount();
diff -r d4ba07ab5722 xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc64_linux.S
--- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc64_linux.S        Fri Sep 
20 07:56:01 2019 +0200
+++ b/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc64_linux.S        Fri Sep 
20 08:00:19 2019 +0200
@@ -151,10 +151,10 @@
         ld      r2,STACK_TOC(r1)        # Load our own TOC pointer
         ld      r1,0(r1)                # Revert stack frame
         ld      0,16(r1)                # Reload lr
+        mtlr    0
         ld      29,-24(r1)              # Restore NVGPRS
         ld      30,-16(r1)
         ld      31,-8(r1)
-        mtlr    0
         blr
 
 #if _CALL_ELF == 2
diff -r d4ba07ab5722 xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc64_linux.cpp
--- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc64_linux.cpp  Fri Sep 20 
07:56:01 2019 +0200
+++ b/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc64_linux.cpp  Fri Sep 20 
08:00:19 2019 +0200
@@ -5,93 +5,126 @@
 
 // Platform specific code to invoke XPCOM methods on native objects
 
+#include "xptcprivate.h"
+
 // The purpose of NS_InvokeByIndex() is to map a platform
 // independent call to the platform ABI. To do that,
 // NS_InvokeByIndex() has to determine the method to call via vtable
 // access. The parameters for the method are read from the
 // nsXPTCVariant* and prepared for the native ABI.
-
-// The PowerPC64 platform ABI can be found here:
-// http://www.freestandards.org/spec/ELF/ppc64/
+//
+// Prior to POWER8, all 64-bit Power ISA systems used ELF v1 ABI, found
+// here:
+//   https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html
 // and in particular:
-// http://www.freestandards.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#FUNC-CALL
-
-#include <stdio.h>
-#include "xptcprivate.h"
+//   https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#FUNC-CALL
+// Little-endian ppc64le, however, uses ELF v2 ABI, which is here:
+//   
http://openpowerfoundation.org/wp-content/uploads/resources/leabi/leabi-20170510.pdf
+// and in particular section 2.2, page 22. However, most big-endian ppc64
+// systems still use ELF v1, so this file should support both.
 
-// 8 integral parameters are passed in registers, not including 'that'
-#define GPR_COUNT     7
+// 7 integral parameters are passed in registers, not including |this|
+// (i.e., r3-r10, with r3 being |this|).
+const uint32_t GPR_COUNT = 7;
 
-// 8 floating point parameters are passed in registers, floats are
-// promoted to doubles when passed in registers
-#define FPR_COUNT     13
-
-extern "C" uint32_t
-invoke_count_words(uint32_t paramCount, nsXPTCVariant* s)
-{
-    return uint32_t(((paramCount * 2) + 3) & ~3);
-}
+// 13 floating point parameters are passed in registers, either single or
+// double precision (i.e., f1-f13).
+const uint32_t FPR_COUNT = 13;
 
-extern "C" void
-invoke_copy_to_stack(uint64_t* gpregs,
-                     double* fpregs,
-                     uint32_t paramCount,
-                     nsXPTCVariant* s,
-                     uint64_t* d)
+// Both ABIs use the same register assignment strategy, as per this
+// example from V1 ABI section 3.2.3 and V2 ABI section 2.2.3.2 [page 43]:
+//
+// typedef struct {
+//   int    a;
+//   double dd;
+// } sparm;
+// sparm   s, t;
+// int     c, d, e;
+// long double ld;
+// double  ff, gg, hh;
+//
+// x = func(c, ff, d, ld, s, gg, t, e, hh);
+//
+// Parameter     Register     Offset in parameter save area
+// c             r3           0-7    (not stored in parameter save area)
+// ff            f1           8-15   (not stored)
+// d             r5           16-23  (not stored)
+// ld            f2,f3        24-39  (not stored)
+// s             r8,r9        40-55  (not stored)
+// gg            f4           56-63  (not stored)
+// t             (none)       64-79  (stored in parameter save area)
+// e             (none)       80-87  (stored)
+// hh            f5           88-95  (not stored)
+//
+// i.e., each successive FPR usage skips a GPR, but not the other way around.
+
+extern "C" void invoke_copy_to_stack(uint64_t* gpregs, double* fpregs,
+                                     uint32_t paramCount, nsXPTCVariant* s,
+                                     uint64_t* d)
 {
-    uint64_t tempu64;
+    uint32_t nr_gpr = 0u;
+    uint32_t nr_fpr = 0u;
+    uint64_t value = 0u;
 
-    for(uint32_t i = 0; i < paramCount; i++, s++) {
-        if(s->IsIndirect())
-            tempu64 = (uint64_t) &s->val;
+    for (uint32_t i = 0; i < paramCount; i++, s++) {
+        if (s->IsIndirect())
+            value = (uint64_t) &s->val;
         else {
-            switch(s->type) {
-            case nsXPTType::T_FLOAT:                                  break;
-            case nsXPTType::T_DOUBLE:                                 break;
-            case nsXPTType::T_I8:     tempu64 = s->val.i8;            break;
-            case nsXPTType::T_I16:    tempu64 = s->val.i16;           break;
-            case nsXPTType::T_I32:    tempu64 = s->val.i32;           break;
-            case nsXPTType::T_I64:    tempu64 = s->val.i64;           break;
-            case nsXPTType::T_U8:     tempu64 = s->val.u8;            break;
-            case nsXPTType::T_U16:    tempu64 = s->val.u16;           break;
-            case nsXPTType::T_U32:    tempu64 = s->val.u32;           break;
-            case nsXPTType::T_U64:    tempu64 = s->val.u64;           break;
-            case nsXPTType::T_BOOL:   tempu64 = s->val.b;             break;
-            case nsXPTType::T_CHAR:   tempu64 = s->val.c;             break;
-            case nsXPTType::T_WCHAR:  tempu64 = s->val.wc;            break;
-            default:                  tempu64 = (uint64_t) s->val.p;  break;
+            switch (s->type) {
+            case nsXPTType::T_FLOAT:                                break;
+            case nsXPTType::T_DOUBLE:                               break;
+            case nsXPTType::T_I8:     value = s->val.i8;            break;
+            case nsXPTType::T_I16:    value = s->val.i16;           break;
+            case nsXPTType::T_I32:    value = s->val.i32;           break;
+            case nsXPTType::T_I64:    value = s->val.i64;           break;
+            case nsXPTType::T_U8:     value = s->val.u8;            break;
+            case nsXPTType::T_U16:    value = s->val.u16;           break;
+            case nsXPTType::T_U32:    value = s->val.u32;           break;
+            case nsXPTType::T_U64:    value = s->val.u64;           break;
+            case nsXPTType::T_BOOL:   value = s->val.b;             break;
+            case nsXPTType::T_CHAR:   value = s->val.c;             break;
+            case nsXPTType::T_WCHAR:  value = s->val.wc;            break;
+            default:                  value = (uint64_t) s->val.p;  break;
             }
         }
 
         if (!s->IsIndirect() && s->type == nsXPTType::T_DOUBLE) {
-            if (i < FPR_COUNT)
-                fpregs[i]    = s->val.d;
-            else
-                *(double *)d = s->val.d;
+            if (nr_fpr < FPR_COUNT) {
+                fpregs[nr_fpr++] = s->val.d;
+                nr_gpr++;
+            } else {
+                *((double *)d) = s->val.d;
+                d++;
+            }
         }
         else if (!s->IsIndirect() && s->type == nsXPTType::T_FLOAT) {
-            if (i < FPR_COUNT) {
-                fpregs[i]   = s->val.f; // if passed in registers, floats are 
promoted to doubles
+            if (nr_fpr < FPR_COUNT) {
+                // Single-precision floats are passed in FPRs too.
+                fpregs[nr_fpr++] = s->val.f;
+                nr_gpr++;
             } else {
-                float *p = (float *)d;
-#ifndef __LITTLE_ENDIAN__
+#ifdef __LITTLE_ENDIAN__
+                *((float *)d) = s->val.f;
+#else
+                // Big endian needs adjustment to point to the least
+                // significant word.
+                float* p = (float*)d;
                 p++;
+                *p = s->val.f;
 #endif
-                *p = s->val.f;
+                d++;
             }
         }
         else {
-            if (i < GPR_COUNT)
-                gpregs[i] = tempu64;
-            else
-                *d = tempu64;
+            if (nr_gpr < GPR_COUNT) {
+                gpregs[nr_gpr++] = value;
+            } else {
+                *d++ = value;
+            }
         }
-        if (i >= 7)
-            d++;
     }
 }
 
 EXPORT_XPCOM_API(nsresult)
-NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
-                   uint32_t paramCount, nsXPTCVariant* params);
-
+NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, uint32_t paramCount,
+                 nsXPTCVariant* params);
diff -r d4ba07ab5722 xpcom/reflect/xptcall/md/unix/xptcstubs_ppc64_linux.cpp
--- a/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc64_linux.cpp   Fri Sep 20 
07:56:01 2019 +0200
+++ b/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc64_linux.cpp   Fri Sep 20 
08:00:19 2019 +0200
@@ -7,36 +7,64 @@
 
 #include "xptcprivate.h"
 
-// The Linux/PPC64 ABI passes the first 8 integral
-// parameters and the first 13 floating point parameters in registers
-// (r3-r10 and f1-f13), no stack space is allocated for these by the
-// caller.  The rest of the parameters are passed in the caller's stack
-// area. The stack pointer has to retain 16-byte alignment.
+// Prior to POWER8, all 64-bit Power ISA systems used ELF v1 ABI, found
+// here:
+//   https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html
+// and in particular:
+//   https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#FUNC-CALL
+// Little-endian ppc64le, however, uses ELF v2 ABI, which is here:
+//   
http://openpowerfoundation.org/wp-content/uploads/resources/leabi/leabi-20170510.pdf
+// and in particular section 2.2, page 22. However, most big-endian ppc64
+// systems still use ELF v1, so this file should support both.
+//
+// Both ABIs pass the first 8 integral parameters and the first 13 floating
+// point parameters in registers r3-r10 and f1-f13. No stack space is
+// allocated for these by the caller. The rest of the parameters are passed
+// in the caller's stack area. The stack pointer must stay 16-byte aligned.
 
-// The PowerPC64 platform ABI can be found here:
-// http://www.freestandards.org/spec/ELF/ppc64/
-// and in particular:
-// http://www.freestandards.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#FUNC-CALL
-
-#define PARAM_BUFFER_COUNT      16
-#define GPR_COUNT                7
-#define FPR_COUNT               13
+const uint32_t PARAM_BUFFER_COUNT   = 16;
+const uint32_t GPR_COUNT            = 7;
+const uint32_t FPR_COUNT            = 13;
 
 // PrepareAndDispatch() is called by SharedStub() and calls the actual method.
 //
 // - 'args[]' contains the arguments passed on stack
-// - 'gprData[]' contains the arguments passed in integer registers
-// - 'fprData[]' contains the arguments passed in floating point registers
+// - 'gpregs[]' contains the arguments passed in integer registers
+// - 'fpregs[]' contains the arguments passed in floating point registers
 //
 // The parameters are mapped into an array of type 'nsXPTCMiniVariant'
 // and then the method gets called.
-#include <stdio.h>
+//
+// Both ABIs use the same register assignment strategy, as per this
+// example from V1 ABI section 3.2.3 and V2 ABI section 2.2.3.2 [page 43]:
+//
+// typedef struct {
+//   int    a;
+//   double dd;
+// } sparm;
+// sparm   s, t;
+// int     c, d, e;
+// long double ld;
+// double  ff, gg, hh;
+//
+// x = func(c, ff, d, ld, s, gg, t, e, hh);
+//
+// Parameter     Register     Offset in parameter save area
+// c             r3           0-7    (not stored in parameter save area)
+// ff            f1           8-15   (not stored)
+// d             r5           16-23  (not stored)
+// ld            f2,f3        24-39  (not stored)
+// s             r8,r9        40-55  (not stored)
+// gg            f4           56-63  (not stored)
+// t             (none)       64-79  (stored in parameter save area)
+// e             (none)       80-87  (stored)
+// hh            f5           88-95  (not stored)
+//
+// i.e., each successive FPR usage skips a GPR, but not the other way around.
+
 extern "C" nsresult ATTRIBUTE_USED
-PrepareAndDispatch(nsXPTCStubBase* self,
-                   uint64_t methodIndex,
-                   uint64_t* args,
-                   uint64_t *gprData,
-                   double *fprData)
+PrepareAndDispatch(nsXPTCStubBase * self, uint32_t methodIndex,
+                   uint64_t * args, uint64_t * gpregs, double *fpregs)
 {
     nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
     nsXPTCMiniVariant* dispatchParams = nullptr;
@@ -48,7 +76,7 @@
 
     self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info);
     NS_ASSERTION(info,"no method info");
-    if (! info)
+    if (!info)
         return NS_ERROR_UNEXPECTED;
 
     paramCount = info->GetParamCount();
@@ -66,9 +94,11 @@
     const uint8_t indexOfJSContext = info->IndexOfJSContext();
 
     uint64_t* ap = args;
-    uint32_t iCount = 0;
-    uint32_t fpCount = 0;
-    uint64_t tempu64;
+    // |that| is implicit in the calling convention; we really do start at the
+    // first GPR (as opposed to x86_64).
+    uint32_t nr_gpr = 0;
+    uint32_t nr_fpr = 0;
+    uint64_t value;
 
     for(i = 0; i < paramCount; i++) {
         const nsXPTParamInfo& param = info->GetParam(i);
@@ -76,67 +106,67 @@
         nsXPTCMiniVariant* dp = &dispatchParams[i];
 
         if (i == indexOfJSContext) {
-            if (iCount < GPR_COUNT)
-                iCount++;
+            if (nr_gpr < GPR_COUNT)
+                nr_gpr++;
             else
                 ap++;
         }
 
         if (!param.IsOut() && type == nsXPTType::T_DOUBLE) {
-            if (fpCount < FPR_COUNT) {
-                dp->val.d = fprData[fpCount++];
-            }
-            else
-                dp->val.d = *(double*) ap;
-        } else if (!param.IsOut() && type == nsXPTType::T_FLOAT) {
-            if (fpCount < FPR_COUNT) {
-                dp->val.f = (float) fprData[fpCount++]; // in registers floats 
are passed as doubles
+            if (nr_fpr < FPR_COUNT) {
+                dp->val.d = fpregs[nr_fpr++];
+                nr_gpr++;
+            } else {
+                dp->val.d = *(double*)ap++;
             }
-            else {
-                float *p = (float *)ap;
-#ifndef __LITTLE_ENDIAN__
+            continue;
+        }
+        if (!param.IsOut() && type == nsXPTType::T_FLOAT) {
+            if (nr_fpr < FPR_COUNT) {
+                // Single-precision floats are passed in FPRs too.
+                dp->val.f = (float)fpregs[nr_fpr++];
+                nr_gpr++;
+            } else {
+#ifdef __LITTLE_ENDIAN__
+                dp->val.f = *(float*)ap++;
+#else
+                // Big endian needs adjustment to point to the least
+                // significant word.
+                float* p = (float*)ap;
                 p++;
-#endif
                 dp->val.f = *p;
+                ap++;
+#endif
             }
-        } else { /* integer type or pointer */
-            if (iCount < GPR_COUNT)
-                tempu64 = gprData[iCount];
-            else
-                tempu64 = *ap;
+            continue;
+        }
+        if (nr_gpr < GPR_COUNT)
+            value = gpregs[nr_gpr++];
+        else
+            value = *ap++;
 
-            if (param.IsOut() || !type.IsArithmetic())
-                dp->val.p = (void*) tempu64;
-            else if (type == nsXPTType::T_I8)
-                dp->val.i8  = (int8_t)   tempu64;
-            else if (type == nsXPTType::T_I16)
-                dp->val.i16 = (int16_t)  tempu64;
-            else if (type == nsXPTType::T_I32)
-                dp->val.i32 = (int32_t)  tempu64;
-            else if (type == nsXPTType::T_I64)
-                dp->val.i64 = (int64_t)  tempu64;
-            else if (type == nsXPTType::T_U8)
-                dp->val.u8  = (uint8_t)  tempu64;
-            else if (type == nsXPTType::T_U16)
-                dp->val.u16 = (uint16_t) tempu64;
-            else if (type == nsXPTType::T_U32)
-                dp->val.u32 = (uint32_t) tempu64;
-            else if (type == nsXPTType::T_U64)
-                dp->val.u64 = (uint64_t) tempu64;
-            else if (type == nsXPTType::T_BOOL)
-                dp->val.b   = (bool)   tempu64;
-            else if (type == nsXPTType::T_CHAR)
-                dp->val.c   = (char)     tempu64;
-            else if (type == nsXPTType::T_WCHAR)
-                dp->val.wc  = (wchar_t)  tempu64;
-            else
-                NS_ERROR("bad type");
+        if (param.IsOut() || !type.IsArithmetic()) {
+            dp->val.p = (void*) value;
+            continue;
         }
 
-        if (iCount < GPR_COUNT)
-            iCount++;  // gprs are skipped for fp args, so this always needs 
inc
-        else
-            ap++;
+        switch (type) {
+        case nsXPTType::T_I8:      dp->val.i8  = (int8_t)   value; break;
+        case nsXPTType::T_I16:     dp->val.i16 = (int16_t)  value; break;
+        case nsXPTType::T_I32:     dp->val.i32 = (int32_t)  value; break;
+        case nsXPTType::T_I64:     dp->val.i64 = (int64_t)  value; break;
+        case nsXPTType::T_U8:      dp->val.u8  = (uint8_t)  value; break;
+        case nsXPTType::T_U16:     dp->val.u16 = (uint16_t) value; break;
+        case nsXPTType::T_U32:     dp->val.u32 = (uint32_t) value; break;
+        case nsXPTType::T_U64:     dp->val.u64 = (uint64_t) value; break;
+        case nsXPTType::T_BOOL:    dp->val.b   = (bool)     value; break;
+        case nsXPTType::T_CHAR:    dp->val.c   = (char)     value; break;
+        case nsXPTType::T_WCHAR:   dp->val.wc  = (wchar_t)  value; break;
+
+        default:
+            NS_ERROR("bad type");
+            break;
+        }
     }
 
     nsresult result = self->mOuter->CallMethod((uint16_t) methodIndex, info,
@@ -150,23 +180,19 @@
 
 // Load r11 with the constant 'n' and branch to SharedStub().
 //
+// As G++3 ABI contains the length of the functionname in the mangled
+// name, it is difficult to get a generic assembler mechanism like
+// in the G++ 2.95 case.
 // XXX Yes, it's ugly that we're relying on gcc's name-mangling here;
 // however, it's quick, dirty, and'll break when the ABI changes on
 // us, which is what we want ;-).
-
-
-// gcc-3 version
-//
-// As G++3 ABI contains the length of the functionname in the mangled
-// name, it is difficult to get a generic assembler mechanism like
-// in the G++ 2.95 case.
 // Create names would be like:
 // _ZN14nsXPTCStubBase5Stub1Ev
 // _ZN14nsXPTCStubBase6Stub12Ev
 // _ZN14nsXPTCStubBase7Stub123Ev
 // _ZN14nsXPTCStubBase8Stub1234Ev
 // etc.
-// Use assembler directives to get the names right...
+// Use assembler directives to get the names right.
 
 #if _CALL_ELF == 2
 # define STUB_ENTRY(n)                                                  \
@@ -252,7 +278,7 @@
 #define SENTINEL_ENTRY(n)                                               \
 nsresult nsXPTCStubBase::Sentinel##n()                                  \
 {                                                                       \
-    NS_ERROR("nsXPTCStubBase::Sentinel called");                  \
+    NS_ERROR("nsXPTCStubBase::Sentinel called");                        \
     return NS_ERROR_NOT_IMPLEMENTED;                                    \
 }
 
++++++ mozilla-bmo1554971.patch ++++++
# HG changeset patch
# Parent  a25cebecb02d5460b8ad757fe9cb4a9c8d1d7658
Eliminate startup error message:
JavaScript error: , line 0: Error: Type error for platformInfo value (Error 
processing arch: Invalid enumeration value "s390x") for runtime.getPlatformInfo.

Reported here: https://bugzilla.mozilla.org/show_bug.cgi?id=1554971

Uncertain if this is causing real problems or not. Also uncertain if the fix 
actually fixes anything.
No response from upstream yet.

diff -r a25cebecb02d -r 378b81b00e73 
toolkit/components/extensions/schemas/runtime.json
--- a/toolkit/components/extensions/schemas/runtime.json        Fri Jul 05 
12:42:44 2019 +0200
+++ b/toolkit/components/extensions/schemas/runtime.json        Fri Jul 19 
13:19:30 2019 +0200
@@ -64,7 +64,7 @@
       {
         "id": "PlatformArch",
         "type": "string",
-        "enum": ["arm", "x86-32", "x86-64"],
+        "enum": ["arm", "x86-32", "x86-64", "s390x", "aarch64", "ppc64le"],
         "allowedContexts": ["content", "devtools"],
         "description": "The machine's processor architecture."
       },
++++++ mozilla-bmo1568145.patch ++++++
Author: Bernhard M. Wiedemann <bwiedemann suse de>
Date: 2019-07-22

Allow to override build date with SOURCE_DATE_EPOCH
in order to make builds reproducible.
See https://reproducible-builds.org/ for why this is good
and https://reproducible-builds.org/specs/source-date-epoch/
for the definition of this variable.

diff --git a/python/mozbuild/mozbuild/action/langpack_manifest.py 
b/python/mozbuild/mozbuild/action/langpack_manifest.py
index 6f72697..d4cca96 100644
--- a/python/mozbuild/mozbuild/action/langpack_manifest.py
+++ b/python/mozbuild/mozbuild/action/langpack_manifest.py
@@ -16,6 +16,7 @@ import os
 import json
 import io
 import datetime
+import time
 import requests
 import mozversioncontrol
 import mozpack.path as mozpath
@@ -100,7 +101,7 @@ def get_timestamp_for_locale(path):
         dt = get_dt_from_hg(path)
 
     if dt is None:
-        dt = datetime.datetime.utcnow()
+        dt = 
datetime.datetime.utcfromtimestamp(int(os.environ.get('SOURCE_DATE_EPOCH', 
time.time())))
 
     dt = dt.replace(microsecond=0)
     return dt.strftime("%Y%m%d%H%M%S")
++++++ mozilla-bmo1573381.patch ++++++
# HG changeset patch
# Parent  45680ce4ca06795cbca1ea5a9ae8a7a11ab95cf1
The code tries to find a codec in a list of codecs. For this it searches for a 
given prefix.
But the prefix is of type char16_t, which means 2 bytes per character instead 
of 1, as was compared here.
On big endian this created some false positives, as the order of bytes is 
different and some characters only
occupy "the first" byte, having the second null'ed out.
Noticed because of gtest: MediaMIMETypes.MediaCodecs

Upstream bugreport: https://bugzilla.mozilla.org/show_bug.cgi?id=1573381

diff -r 45680ce4ca06 -r 381102061fcc dom/media/MediaMIMETypes.cpp
--- a/dom/media/MediaMIMETypes.cpp      Mon Aug 05 09:28:53 2019 +0200
+++ b/dom/media/MediaMIMETypes.cpp      Tue Aug 13 07:51:27 2019 +0200
@@ -87,7 +87,7 @@
   const size_t prefixLength = aCodecPrefix.Length();
   for (const auto& myCodec : Range()) {
     if (myCodec.Length() >= prefixLength &&
-        memcmp(myCodec.Data(), aCodecPrefix.Data(), prefixLength) == 0) {
+        memcmp(myCodec.Data(), aCodecPrefix.Data(), prefixLength * 
sizeof(char16_t)) == 0) {
       return true;
     }
   }
++++++ mozilla-cubeb-noreturn.patch ++++++
# HG changeset patch
# User Wolfgang Rosenauer <[email protected]>
# Parent  a9d61a2614b01b1e0ca37d00a6b11b2571868f86

diff --git a/media/libcubeb/src/cubeb_utils.cpp 
b/media/libcubeb/src/cubeb_utils.cpp
--- a/media/libcubeb/src/cubeb_utils.cpp
+++ b/media/libcubeb/src/cubeb_utils.cpp
@@ -15,9 +15,10 @@ size_t cubeb_sample_size(cubeb_sample_fo
       return sizeof(int16_t);
     case CUBEB_SAMPLE_FLOAT32LE:
     case CUBEB_SAMPLE_FLOAT32BE:
       return sizeof(float);
     default:
       // should never happen as all cases are handled above.
       assert(false);
   }
+  return 0;
 }
++++++ mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch ++++++
--- a/js/src/wasm/WasmSignalHandlers.cpp        2019-05-16 11:25:13.260881532 
+0200
+++ b/js/src/wasm/WasmSignalHandlers.cpp        2019-05-16 11:24:35.164589301 
+0200
@@ -243,7 +243,7 @@ using mozilla::DebugOnly;
 // emulation here.
 
 #if defined(__linux__) && defined(__arm__)
-#  define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
+// #  define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
 #endif
 
 #ifdef WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
++++++ mozilla-fix-aarch64-libopus.patch ++++++
# HG changeset patch
# Parent  1317782cd47f1d1f2410712a1dd283b305393eae

diff --git a/media/libopus/silk/arm/arm_silk_map.c 
b/media/libopus/silk/arm/arm_silk_map.c
--- a/media/libopus/silk/arm/arm_silk_map.c
+++ b/media/libopus/silk/arm/arm_silk_map.c
@@ -23,17 +23,17 @@ INTERRUPTION) HOWEVER CAUSED AND ON ANY 
 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.
 ***********************************************************************/
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
 
-#include "main_FIX.h"
+#include "../fixed/main_FIX.h"
 #include "NSQ.h"
 #include "SigProc_FIX.h"
 
 #if defined(OPUS_HAVE_RTCD)
 
 # if (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && \
  !defined(OPUS_ARM_PRESUME_NEON_INTR))
 
++++++ mozilla-fix-top-level-asm.patch ++++++
>From 91bb79836ee274855393bdf6ab10e24899b1b349 Mon Sep 17 00:00:00 2001
From: Martin Liska <[email protected]>
Date: Fri, 17 May 2019 14:41:35 +0200
Subject: [PATCH] Fix top-level asm issue.

---
 security/sandbox/linux/moz.build | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/security/sandbox/linux/moz.build b/security/sandbox/linux/moz.build
index aae85843e9f6..208368dfd189 100644
--- a/security/sandbox/linux/moz.build
+++ b/security/sandbox/linux/moz.build
@@ -61,7 +61,6 @@ UNIFIED_SOURCES += [
     '../chromium/sandbox/linux/bpf_dsl/policy_compiler.cc',
     '../chromium/sandbox/linux/bpf_dsl/syscall_set.cc',
     '../chromium/sandbox/linux/seccomp-bpf/die.cc',
-    '../chromium/sandbox/linux/seccomp-bpf/syscall.cc',
     'broker/SandboxBrokerCommon.cpp',
     'Sandbox.cpp',
     'SandboxBrokerClient.cpp',
@@ -77,6 +76,7 @@ UNIFIED_SOURCES += [
 SOURCES += [
     '../chromium/base/strings/safe_sprintf.cc',
     '../chromium/base/third_party/icu/icu_utf.cc',
+    '../chromium/sandbox/linux/seccomp-bpf/syscall.cc',
     '../chromium/sandbox/linux/seccomp-bpf/trap.cc',
     '../chromium/sandbox/linux/services/syscall_wrappers.cc',
 ]
@@ -96,6 +96,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
     SOURCES['../chromium/sandbox/linux/services/syscall_wrappers.cc'].flags += 
[
         '-Wno-empty-body',
     ]
+    SOURCES['../chromium/sandbox/linux/seccomp-bpf/syscall.cc'].flags += [
+        '-fno-lto'
+    ]
 
 # gcc lto likes to put the top level asm in syscall.cc in a different partition
 # from the function using it which breaks the build.  Work around that by
-- 
2.23.0

++++++ mozilla-nestegg-big-endian.patch ++++++
# HG changeset patch
# Parent  381102061fccdec40efda75c7423a766f68201ba
Bug-behavior: Youtube-videos using VP9 and opus as audio-codec started loading 
but did not play
Reason: While parsing the audio-stream, the sampling frequency (short rate) was 
wrongly parsed by
        nestegg, returning 0 all the time. This led to the audio-track 
reporting that it neither had 
        valid video nor audio. Which led to an endless-loop in the video state 
machine.
Solution: Correct parsing of rate in nestegg, which is a float and cuts of 
bytes.
Link: https://github.com/kinetiknz/nestegg/issues/64

diff -r 381102061fcc -r 8da4be020b1e media/libnestegg/src/nestegg.c
--- a/media/libnestegg/src/nestegg.c    Tue Aug 13 07:51:27 2019 +0200
+++ b/media/libnestegg/src/nestegg.c    Tue Aug 20 07:59:54 2019 +0200
@@ -768,7 +768,15 @@
 {
   union {
     uint64_t u;
-    float f;
+    struct {
+#if __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__
+      uint32_t _pad;
+      float f;
+#else
+      float f;
+      uint32_t _pad;
+#endif
+    } f;
     double d;
   } value;
   int r;
@@ -780,7 +788,7 @@
   if (r != 1)
     return r;
   if (length == 4)
-    *val = value.f;
+    *val = value.f.f;
   else
     *val = value.d;
   return 1;
++++++ mozilla-ntlm-full-path.patch ++++++
# HG changeset patch
# User Petr Cerny <[email protected]>
# Parent 7308e4a7c1f769f4bbbc90870b849cadd99495a6
# Parent  6ab277cf616dc2748e9855101100a97a6cec10a6
Bug 634334 - call to the ntlm_auth helper fails

diff --git a/extensions/auth/nsAuthSambaNTLM.cpp 
b/extensions/auth/nsAuthSambaNTLM.cpp
--- a/extensions/auth/nsAuthSambaNTLM.cpp
+++ b/extensions/auth/nsAuthSambaNTLM.cpp
@@ -156,17 +156,17 @@ static uint8_t* ExtractMessage(const nsA
   *aLen = (length / 4) * 3 - numEquals;
   return reinterpret_cast<uint8_t*>(PL_Base64Decode(s, length, nullptr));
 }
 
 nsresult nsAuthSambaNTLM::SpawnNTLMAuthHelper() {
   const char* username = PR_GetEnv("USER");
   if (!username) return NS_ERROR_FAILURE;
 
-  const char* const args[] = {"ntlm_auth",
+  const char* const args[] = {"/usr/bin/ntlm_auth",
                               "--helper-protocol",
                               "ntlmssp-client-1",
                               "--use-cached-creds",
                               "--username",
                               username,
                               nullptr};
 
   bool isOK = SpawnIOChild(const_cast<char* const*>(args), &mChildPID,
++++++ mozilla-openaes-decl.patch ++++++
# HG changeset patch
# Parent 33024abb3c58dab7239e32388df58e14f99defd5
# User Wolfgang Rosenauer <[email protected]>
# Parent  0cfd693fdbbb0635787f1aeacee2dda43b01c495

diff --git a/media/gmp-clearkey/0.1/openaes/oaes_lib.c 
b/media/gmp-clearkey/0.1/openaes/oaes_lib.c
--- a/media/gmp-clearkey/0.1/openaes/oaes_lib.c
+++ b/media/gmp-clearkey/0.1/openaes/oaes_lib.c
@@ -24,16 +24,17 @@
  * 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.
  * ---------------------------------------------------------------------------
  */
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <stddef.h>
 #include <time.h> 
 #include <string.h>
 
 #include "mozilla/Sprintf.h"
 
 #ifdef WIN32
 #include <process.h>
++++++ mozilla-ppc-altivec_static_inline.patch ++++++
# HG changeset patch
# User [email protected]
# Date 1558452418 -7200
#      Tue May 21 17:26:58 2019 +0200
# Node ID 6cd963b6c82ea6629aaf4050851789b78f310338
# Parent  602e92722e765a3c238d3b96b26c0c8063b5eeb4
imported patch mozilla-ppc-altivec_static_inline.patch

diff -r 602e92722e76 -r 6cd963b6c82e gfx/qcms/transform-altivec.c
--- a/gfx/qcms/transform-altivec.c      Tue May 21 17:26:48 2019 +0200
+++ b/gfx/qcms/transform-altivec.c      Tue May 21 17:26:58 2019 +0200
@@ -30,7 +30,7 @@
 static const ALIGN float floatScaleX4 = FLOATSCALE;
 static const ALIGN float clampMaxValueX4 = CLAMPMAXVAL;
 
-inline vector float load_aligned_float(float *dataPtr)
+static inline vector float load_aligned_float(float *dataPtr)
 {
        vector float data = vec_lde(0, dataPtr);
        vector unsigned char moveToStart = vec_lvsl(0, dataPtr);
++++++ mozilla-reduce-rust-debuginfo.patch ++++++
# HG changeset patch
# User [email protected]
# Date 1560754926 -7200
#      Mon Jun 17 09:02:06 2019 +0200
# Node ID 428161c3b9599083e1b8710eda1760f1f707ab11
# Parent  6cd963b6c82ea6629aaf4050851789b78f310338
#Description: reduce the rust debuginfo level on selected architectures where
# compiling with debuginfo=2 causes the OOM killer to interrupt the build on
# launchpad builders. Initially this was only on 32 bit architectures, but with
# firefox 63 it started happening frequently on arm64 and ppc64el too.

diff -r 6cd963b6c82e -r 428161c3b959 build/moz.configure/toolchain.configure
--- a/build/moz.configure/toolchain.configure   Tue May 21 17:26:58 2019 +0200
+++ b/build/moz.configure/toolchain.configure   Mon Jun 17 09:02:06 2019 +0200
@@ -1865,8 +1865,8 @@
         return '1' if moz_optimize.optimize else '0'
 
 
-@depends(rustc_opt_level, debug_rust, '--enable-debug-symbols')
-def rust_compile_flags(opt_level, debug_rust, debug_symbols):
+@depends(rustc_opt_level, debug_rust, '--enable-debug-symbols', host)
+def rust_compile_flags(opt_level, debug_rust, debug_symbols, host):
     # Cargo currently supports only two interesting profiles for building:
     # development and release. Those map (roughly) to --enable-debug and
     # --disable-debug in Gecko, respectively.
@@ -1889,6 +1889,8 @@
 
     if debug_symbols:
         debug_info = '2'
+        if host.bitness == 32 or host.cpu == 'aarch64' or host.cpu == 'ppc64':
+            debug_info = '1'
 
     opts = []
 
++++++ mozilla-s390-bigendian.patch ++++++
# HG changeset patch
# User [email protected]
# Date 1558452126 -7200
#      Tue May 21 17:22:06 2019 +0200
# Node ID a3cc550d25e3a04d906f516928cbcbe50efd585e
# Parent  433beec63e6b5f409683af20a0c1ab137cc7bfad
[mq]: mozilla-s390-bigendian.patch

diff -r 433beec63e6b -r a3cc550d25e3 build/autoconf/icu.m4
--- a/build/autoconf/icu.m4     Tue May 21 17:12:20 2019 +0200
+++ b/build/autoconf/icu.m4     Tue May 21 17:22:06 2019 +0200
@@ -78,7 +78,7 @@
     # TODO: the l is actually endian-dependent
     # We could make this set as 'l' or 'b' for little or big, respectively,
     # but we'd need to check in a big-endian version of the file.
-    ICU_DATA_FILE="icudt${version}l.dat"
+    ICU_DATA_FILE="icudt${version}b.dat"
 fi
 
 AC_SUBST(MOZ_ICU_VERSION)
++++++ mozilla-s390-context.patch ++++++
# HG changeset patch
# User [email protected]
# Date 1558452408 -7200
#      Tue May 21 17:26:48 2019 +0200
# Node ID 602e92722e765a3c238d3b96b26c0c8063b5eeb4
# Parent  a3cc550d25e3a04d906f516928cbcbe50efd585e
[mq]: mozilla-s390-context.patch

diff -r a3cc550d25e3 -r 602e92722e76 js/src/wasm/WasmSignalHandlers.cpp
--- a/js/src/wasm/WasmSignalHandlers.cpp        Tue May 21 17:22:06 2019 +0200
+++ b/js/src/wasm/WasmSignalHandlers.cpp        Tue May 21 17:26:48 2019 +0200
@@ -154,6 +154,10 @@
 #    define R01_sig(p) ((p)->uc_mcontext.gp_regs[1])
 #    define R32_sig(p) ((p)->uc_mcontext.gp_regs[32])
 #  endif
+#  if defined(__linux__) && defined(__s390x__)
+#    define GR_sig(p,x) ((p)->uc_mcontext.gregs[x])
+#    define PSWa_sig(p) ((p)->uc_mcontext.psw.addr)
+#  endif
 #elif defined(__NetBSD__)
 #  define EIP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EIP])
 #  define EBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EBP])
@@ -385,8 +389,13 @@
 #  define PC_sig(p) R32_sig(p)
 #  define SP_sig(p) R01_sig(p)
 #  define FP_sig(p) R01_sig(p)
+#elif defined(__s390x__)
+# define PC_sig(p) PSWa_sig(p)
+# define SP_sig(p) GR_sig(p, 15)
+# define FP_sig(p) GR_sig(p, 11)
 #endif
 
+
 static void SetContextPC(CONTEXT* context, uint8_t* pc) {
 #ifdef PC_sig
   *reinterpret_cast<uint8_t**>(&PC_sig(context)) = pc;
++++++ mozilla.keyring ++++++
This file contains the PGP keys of various developers that work on
Mozilla and its subprojects (such as Firefox and Thunderbird).

Please realize that this file itself or the public key servers may be
compromised.  You are encouraged to validate the authenticity of these keys in
an out-of-band manner.

Mozilla users: pgp < KEY

pub   rsa4096 2015-07-17 [SC]
      14F26682D0916CDD81E37B6D61B7B526D98F0353
uid           [  full  ] Mozilla Software Releases <[email protected]>
sub   rsa4096 2015-07-17 [S] [expires: 2017-07-16]
sub   rsa4096 2017-06-22 [S] [expires: 2019-06-22]
sub   rsa4096 2019-05-30 [S] [expires: 2021-05-29]

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=xFcH
-----END PGP PUBLIC KEY BLOCK-----
++++++ tar_stamps ++++++
--- /var/tmp/diff_new_pack.ANJX3P/_old  2019-10-10 11:49:52.871888794 +0200
+++ /var/tmp/diff_new_pack.ANJX3P/_new  2019-10-10 11:49:52.871888794 +0200
@@ -1,9 +1,8 @@
 PRODUCT="thunderbird"
 CHANNEL="esr68"
-VERSION="68.1.0"
+VERSION="68.1.1"
 VERSION_SUFFIX=""
-FF_RELEASE_TAG="0efe7ab505b59f1986ebedc0c114a7d24fd93168"
-TB_RELEASE_TAG="9317dad8cb7fd80a47cb3b40253c73127f776535"
+RELEASE_TAG="41c0a3653f95cf6158a2b49ab7cb19327c50e9e8"
 PREV_VERSION=""
 PREV_VERSION_SUFFIX=""
 #SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation

++++++ thunderbird-68.1.0.source.tar.xz -> thunderbird-68.1.1.source.tar.xz 
++++++
/work/SRC/openSUSE:Factory/MozillaThunderbird/thunderbird-68.1.0.source.tar.xz 
/work/SRC/openSUSE:Factory/.MozillaThunderbird.new.2352/thunderbird-68.1.1.source.tar.xz
 differ: char 15, line 1

++++++ thunderbird-broken-locales-build.patch ++++++
# HG changeset patch
# Parent  b2d2d5ae8d2a00ddbf496e415fdde16d08e35884
This has been submitted upstream: 
https://bugzilla.mozilla.org/show_bug.cgi?id=1580701

diff -r b2d2d5ae8d2a -r 91fa98f1d233 comm/mail/locales/l10n.ini
--- a/comm/mail/locales/l10n.ini        Fri May 31 11:28:11 2019 +0200
+++ b/comm/mail/locales/l10n.ini        Wed Sep 11 15:01:55 2019 +0200
@@ -13,5 +13,5 @@
 # include toolkit from mozilla.
 # Don't specify which, use l10n-central.ini and friends if you're
 # not working on a local check-out
-toolkit = mozilla/toolkit/locales/l10n.ini
-devtools_client = mozilla/devtools/client/locales/l10n.ini
+toolkit = ../toolkit/locales/l10n.ini
+devtools_client = ../devtools/client/locales/l10n.ini

Reply via email to