forked from pool/MozillaFirefox
- Mozilla Firefox 99.0
* You can now toggle Narrate in ReaderMode with the keyboard shortcut "n." * You can find added support for search—with or without diacritics—in the PDF viewer. * The Linux sandbox has been strengthened: processes exposed to web content no longer have access to the X Window system (X11). * Firefox now supports credit card autofill and capture in Germany and France. MFSA 2022-13 (bsc#1197903) * CVE-2022-1097 (bmo#1745667) Use-after-free in NSSToken objects * CVE-2022-28281 (bmo#1755621) Out of bounds write due to unexpected WebAuthN Extensions * CVE-2022-28282 (bmo#1751609) Use-after-free in DocumentL10n::TranslateDocument * CVE-2022-28283 (bmo#1754066) Missing security checks for fetching sourceMapURL * CVE-2022-28284 (bmo#1754522) Script could be executed via svg's use element * CVE-2022-28285 (bmo#1756957) Incorrect AliasSet used in JIT Codegen * CVE-2022-28286 (bmo#1735265) iframe contents could be rendered outside the border * CVE-2022-28287 (bmo#1741515) Text Selection could crash Firefox * CVE-2022-24713 (bmo#1758509) Denial of Service via complex regular expressions * CVE-2022-28289 (bmo#1663508, bmo#1744525, bmo#1753508, bmo#1757476, bmo#1757805, bmo#1758549, bmo#1758776) OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=970
This commit is contained in:
parent
9ce6769347
commit
da3e0c974f
@ -1,3 +1,48 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Apr 4 07:34:36 UTC 2022 - Wolfgang Rosenauer <wr@rosenauer.org>
|
||||
|
||||
- Mozilla Firefox 99.0
|
||||
* You can now toggle Narrate in ReaderMode with the keyboard
|
||||
shortcut "n."
|
||||
* You can find added support for search—with or without
|
||||
diacritics—in the PDF viewer.
|
||||
* The Linux sandbox has been strengthened: processes exposed to web
|
||||
content no longer have access to the X Window system (X11).
|
||||
* Firefox now supports credit card autofill and capture in
|
||||
Germany and France.
|
||||
MFSA 2022-13 (bsc#1197903)
|
||||
* CVE-2022-1097 (bmo#1745667)
|
||||
Use-after-free in NSSToken objects
|
||||
* CVE-2022-28281 (bmo#1755621)
|
||||
Out of bounds write due to unexpected WebAuthN Extensions
|
||||
* CVE-2022-28282 (bmo#1751609)
|
||||
Use-after-free in DocumentL10n::TranslateDocument
|
||||
* CVE-2022-28283 (bmo#1754066)
|
||||
Missing security checks for fetching sourceMapURL
|
||||
* CVE-2022-28284 (bmo#1754522)
|
||||
Script could be executed via svg's use element
|
||||
* CVE-2022-28285 (bmo#1756957)
|
||||
Incorrect AliasSet used in JIT Codegen
|
||||
* CVE-2022-28286 (bmo#1735265)
|
||||
iframe contents could be rendered outside the border
|
||||
* CVE-2022-28287 (bmo#1741515)
|
||||
Text Selection could crash Firefox
|
||||
* CVE-2022-24713 (bmo#1758509)
|
||||
Denial of Service via complex regular expressions
|
||||
* CVE-2022-28289 (bmo#1663508, bmo#1744525, bmo#1753508,
|
||||
bmo#1757476, bmo#1757805, bmo#1758549, bmo#1758776)
|
||||
Memory safety bugs fixed in Firefox 99 and Firefox ESR 91.8
|
||||
* CVE-2022-28288 (bmo#1746415, bmo#1746495, bmo#1746500,
|
||||
bmo#1747282, bmo#1748759, bmo#1749056, bmo#1749786,
|
||||
bmo#1751679, bmo#1752120, bmo#1756010, bmo#1756017,
|
||||
bmo#1757213, bmo#1757258, bmo#1757427)
|
||||
Memory safety bugs fixed in Firefox 99
|
||||
- requires NSS >= 3.76.1
|
||||
- remove obsolete patch
|
||||
* mozilla-bmo1756347.patch
|
||||
* mozilla-bmo1757571.patch
|
||||
- update create-tar.sh
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Mar 24 21:49:57 UTC 2022 - Andreas Stieger <andreas.stieger@gmx.de>
|
||||
|
||||
|
@ -28,9 +28,9 @@
|
||||
# orig_suffix b3
|
||||
# major 69
|
||||
# mainver %major.99
|
||||
%define major 98
|
||||
%define mainver %major.0.2
|
||||
%define orig_version 98.0.2
|
||||
%define major 99
|
||||
%define mainver %major.0
|
||||
%define orig_version 99.0
|
||||
%define orig_suffix %{nil}
|
||||
%define update_channel release
|
||||
%define branding 1
|
||||
@ -114,7 +114,7 @@ BuildRequires: libiw-devel
|
||||
BuildRequires: libproxy-devel
|
||||
BuildRequires: makeinfo
|
||||
BuildRequires: mozilla-nspr-devel >= 4.33
|
||||
BuildRequires: mozilla-nss-devel >= 3.75
|
||||
BuildRequires: mozilla-nss-devel >= 3.76.1
|
||||
BuildRequires: nasm >= 2.14
|
||||
BuildRequires: nodejs >= 10.22.1
|
||||
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} < 150000
|
||||
@ -219,8 +219,6 @@ Patch20: mozilla-s390x-skia-gradient.patch
|
||||
Patch21: mozilla-libavcodec58_91.patch
|
||||
Patch22: mozilla-silence-no-return-type.patch
|
||||
Patch23: mozilla-bmo531915.patch
|
||||
Patch24: mozilla-bmo1756347.patch
|
||||
Patch25: mozilla-bmo1757571.patch
|
||||
# Firefox/browser
|
||||
Patch101: firefox-kde.patch
|
||||
Patch102: firefox-branded-icons.patch
|
||||
|
@ -37,6 +37,7 @@ else
|
||||
fi
|
||||
|
||||
SOURCE_TARBALL="$PRODUCT-$VERSION$VERSION_SUFFIX.source.tar.xz"
|
||||
PREV_SOURCE_TARBALL="$PRODUCT-$PREV_VERSION$PREV_VERSION_SUFFIX.source.tar.xz"
|
||||
FTP_URL="https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source"
|
||||
FTP_CANDIDATES_BASE_URL="https://ftp.mozilla.org/pub/$PRODUCT/candidates"
|
||||
# Make first letter of PRODCUT upper case
|
||||
@ -145,22 +146,48 @@ function locales_get() {
|
||||
fi
|
||||
}
|
||||
|
||||
function locales_parse() {
|
||||
function locales_parse_file() {
|
||||
FILE="$1"
|
||||
cat "$FILE" | python -c "import json; import sys; \
|
||||
print('\n'.join(['{} {}'.format(key, value['revision']) \
|
||||
for key, value in sorted(json.load(sys.stdin).items())]));"
|
||||
}
|
||||
|
||||
function locales_parse_url() {
|
||||
URL="$1"
|
||||
curl -s "$URL" | python -c "import json; import sys; \
|
||||
print('\n'.join(['{} {}'.format(key, value['changeset']) \
|
||||
for key, value in sorted(json.load(sys.stdin)['locales'].items())]));"
|
||||
}
|
||||
|
||||
function extract_locales_file() {
|
||||
# still need to extract the locale information from the archive
|
||||
echo "extract locale changesets"
|
||||
tar -xf $SOURCE_TARBALL $LOCALE_FILE
|
||||
}
|
||||
|
||||
function locales_unchanged() {
|
||||
BUILD_ID="$1"
|
||||
PREV_BUILD_ID=$(get_build_number "$PREV_VERSION$PREV_VERSION_SUFFIX")
|
||||
# If no json-file for one of the versions can be found, we say "they changed"
|
||||
prev_url=$(locales_get "$PREV_VERSION$PREV_VERSION_SUFFIX" "$PREV_BUILD_ID") || return 1
|
||||
curr_url=$(locales_get "$VERSION$VERSION_SUFFIX" "$BUILD_ID") || return 1
|
||||
prev_content=$(locales_parse_url "$prev_url") || exit 1
|
||||
|
||||
prev_content=$(locales_parse "$prev_url") || exit 1
|
||||
curr_content=$(locales_parse "$curr_url") || exit 1
|
||||
curr_url=$(locales_get "$VERSION$VERSION_SUFFIX" "$BUILD_ID")
|
||||
if [ $? -ne 0 ]; then
|
||||
# We did not find a locales file upstream on the servers
|
||||
if [ -e $SOURCE_TARBALL ]; then
|
||||
# We can find out what the locales are, by extracting the json-file from the tar-ball
|
||||
# instead of getting it from the server
|
||||
extract_locales_file || return 1
|
||||
curr_content=$(locales_parse_file "$LOCALE_FILE") || exit 1
|
||||
else
|
||||
# We can't know what the locales are in the current version
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
curr_content=$(locales_parse_url "$curr_url") || exit 1
|
||||
fi
|
||||
|
||||
diff -y --suppress-common-lines -d <(echo "$prev_content") <(echo "$curr_content")
|
||||
}
|
||||
@ -211,9 +238,7 @@ fi
|
||||
# we might have an upstream archive already and can skip the checkout
|
||||
if [ -e $SOURCE_TARBALL ]; then
|
||||
if [ -z ${SKIP_LOCALES+x} ] && [ $LOCALES_CHANGED -ne 0 ]; then
|
||||
# still need to extract the locale information from the archive
|
||||
echo "extract locale changesets"
|
||||
tar -xf $SOURCE_TARBALL $LOCALE_FILE
|
||||
extract_locales_file
|
||||
fi
|
||||
get_source_stamp "$BUILD_ID"
|
||||
else
|
||||
@ -328,3 +353,11 @@ elif [ -f "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz" ]; then
|
||||
echo "Moving l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz to l10n-$VERSION$VERSION_SUFFIX.tar.xz"
|
||||
mv "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz" "l10n-$VERSION$VERSION_SUFFIX.tar.xz"
|
||||
fi
|
||||
|
||||
if [ -e $PREV_SOURCE_TARBALL ]; then
|
||||
echo ""
|
||||
echo "Deleting old sources tarball $PREV_SOURCE_TARBALL"
|
||||
$(ask_cont_abort_question "Is this ok?") || exit 0
|
||||
rm "$PREV_SOURCE_TARBALL"
|
||||
rm "$PREV_SOURCE_TARBALL.asc"
|
||||
fi
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c144b6016aaa8ceab8154b9f0b2bbeee6cbc22ab7f811fcece28d36e49565890
|
||||
size 479907760
|
@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEEQ2D+IQnEl2MYb44h6+QekPbxL20FAmI6CIYACgkQ6+QekPbx
|
||||
L22iKw/8DNWC6OcnYMwfJLkSo9L7IsAY1LG+IYY75VEfh3AWIxJI+bra958on6IX
|
||||
3QZtKhrx9HVg9VxJzJIETvx4b3qJd2OOXZ1gx2JRRdUmNb3nkmBxQOcE+XK3j0/D
|
||||
6oEhYcucWTbBnaPEFQnElPC54wQe8+Je0WeHE2DKWHVnO2QqZTudalQTXrtqjuFx
|
||||
4qgnLDvI8JM8lhQ6oLCjPokLnbYtOsVmV4NJZzb0lBSMBA4x+KDCr+t50OchUAde
|
||||
SwQWtiDXs1R04W8TaCi1XeGVhFT0SYJjeM56DHsSGAgbnf6jmNKOFNajgskRagR2
|
||||
fWWu3iUY3HtMlVLLHZHalNbYGpoYwwMh6T7bC7TXfgVXfzQYE/kbII9ZnSMl9Jz7
|
||||
4o1o+WDUFYm6UBgNtE9M9aDaLMna/2eo2t1SVTzrpvEgjNDvFT1HEgFf7sIx7dR+
|
||||
puwmMJ7fgMmii+wuWMVYoCVomFJ2ISywmzit0IbYCoVB63Uw0F2kCvVPNbFgSd8T
|
||||
ikJs6/eyGhEdzSbi38alY7WiuK+iIdBjFMIllmYU0dJnlrDeVtKwm3QbhWo0JdkP
|
||||
eI8dNFTHiXy888dKmDR9YmKybQCq5KxXYqCJmJqehOlIEmTte63vz/9h2F1GAxFj
|
||||
iZNDvlJKwr6jWreizeb+hGqeEOUR2uZXrTnP1+4SAHkijkF1BWQ=
|
||||
=iE7z
|
||||
-----END PGP SIGNATURE-----
|
3
firefox-99.0.source.tar.xz
Normal file
3
firefox-99.0.source.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:513f8d2cafa39a2d50f2c4a25cc48093e89f715a706b941170fa48e397976327
|
||||
size 486210264
|
16
firefox-99.0.source.tar.xz.asc
Normal file
16
firefox-99.0.source.tar.xz.asc
Normal file
@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEEQ2D+IQnEl2MYb44h6+QekPbxL20FAmJE6EAACgkQ6+QekPbx
|
||||
L22Dnw/6Ai67RvrmOFWVgnIHkTHXTr6L22uGVmqG3a+1xY0j6m7gEmHGTMXJkt8H
|
||||
qrWBQQxt/upjV5ydww4nzLs3p8FOzsUhhwKgQOjd1iT1TIIVCSmMHF66ftp+Aiw5
|
||||
t0BOiY27Lq704sIVT3euRm3vyCZ6m/g7Saab4maaAxyURr+v+tNKWeCrn3kmWgYL
|
||||
VTJcBVekCUCB1NH9iqVE16gQVBvmfZ8TEq2P3i7uZotr+r5rUnR5fgcnoGdVAIYE
|
||||
RQK41hg40DoTbmOWDN9zn6RBJVG2BTtBesVEHpb9vedzsL/a29hqkYCwtzu/b1qE
|
||||
5I6AyHQ34S+iVWhVPVW3hFA4ArjnogG4FKHCOpLivuF9N16MQsTldcYCJC5xUk+Z
|
||||
jSUs8+wGWyOKnAVYMMnbI1La81R5Swx/Ab++f2KddtSepr2K2aGyerCgDdtJNTvf
|
||||
ZuXaw7JKKVrk90R8kYP9xi6CTooJVRrdyv5ysIZBm6DzeW6hP6pkdDSinCDFJEK3
|
||||
hVUTnJf919pi640P/FWFjr6nKJKfhwZsvSFq0K30XxSvtkP844OfpT3W8Q8vZ4oX
|
||||
/qT4SIAU851Ad+XQT0E3LELoqXxnJMQW+/rcST3Q9mbctkE2U6QO0nbpofy0ag5+
|
||||
pdeZepDig7PFYvbL7NXCPtLVyg+NpTA4LGIj//YjhyrrPkji2J8=
|
||||
=k3Ax
|
||||
-----END PGP SIGNATURE-----
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1cf52aa5e79de8fb1a7e1ee7777b2da491f3bd044f617a30ec7505ee4c365d38
|
||||
size 49661432
|
3
l10n-99.0.tar.xz
Normal file
3
l10n-99.0.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c3e3e54b5e9357a14286af19728e0dd148eb0647b81d1e0b56077988037f3d91
|
||||
size 49848672
|
@ -1,453 +0,0 @@
|
||||
# HG changeset patch
|
||||
# User Wolfgang Rosenauer <wr@rosenauer.org>
|
||||
# Parent f805a250257be9c3ea570b34557150450e16dfec
|
||||
|
||||
diff --git a/js/src/jit/GenerateAtomicOperations.py b/js/src/jit/GenerateAtomicOperations.py
|
||||
--- a/js/src/jit/GenerateAtomicOperations.py
|
||||
+++ b/js/src/jit/GenerateAtomicOperations.py
|
||||
@@ -5,40 +5,41 @@
|
||||
# This script generates jit/AtomicOperationsGenerated.h
|
||||
#
|
||||
# See the big comment in jit/AtomicOperations.h for an explanation.
|
||||
|
||||
import buildconfig
|
||||
|
||||
is_64bit = "JS_64BIT" in buildconfig.defines
|
||||
cpu_arch = buildconfig.substs["CPU_ARCH"]
|
||||
+is_gcc = buildconfig.substs["CC_TYPE"] == "gcc"
|
||||
|
||||
|
||||
def fmt_insn(s):
|
||||
return '"' + s + '\\n\\t"\n'
|
||||
|
||||
|
||||
def gen_seqcst(fun_name):
|
||||
if cpu_arch in ("x86", "x86_64"):
|
||||
return r"""
|
||||
- inline void %(fun_name)s() {
|
||||
+ INLINE_ATTR void %(fun_name)s() {
|
||||
asm volatile ("mfence\n\t" ::: "memory");
|
||||
}""" % {
|
||||
"fun_name": fun_name,
|
||||
}
|
||||
if cpu_arch == "aarch64":
|
||||
return r"""
|
||||
- inline void %(fun_name)s() {
|
||||
+ INLINE_ATTR void %(fun_name)s() {
|
||||
asm volatile ("dmb ish\n\t" ::: "memory");
|
||||
}""" % {
|
||||
"fun_name": fun_name,
|
||||
}
|
||||
if cpu_arch == "arm":
|
||||
return r"""
|
||||
- inline void %(fun_name)s() {
|
||||
+ INLINE_ATTR void %(fun_name)s() {
|
||||
asm volatile ("dmb sy\n\t" ::: "memory");
|
||||
}""" % {
|
||||
"fun_name": fun_name,
|
||||
}
|
||||
raise Exception("Unexpected arch")
|
||||
|
||||
|
||||
def gen_load(fun_name, cpp_type, size, barrier):
|
||||
@@ -58,17 +59,17 @@ def gen_load(fun_name, cpp_type, size, b
|
||||
elif size == 32:
|
||||
insns += fmt_insn("movl (%[arg]), %[res]")
|
||||
else:
|
||||
assert size == 64
|
||||
insns += fmt_insn("movq (%[arg]), %[res]")
|
||||
if barrier:
|
||||
insns += fmt_insn("mfence")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
|
||||
%(cpp_type)s res;
|
||||
asm volatile (%(insns)s
|
||||
: [res] "=r" (res)
|
||||
: [arg] "r" (arg)
|
||||
: "memory");
|
||||
return res;
|
||||
}""" % {
|
||||
"cpp_type": cpp_type,
|
||||
@@ -86,17 +87,17 @@ def gen_load(fun_name, cpp_type, size, b
|
||||
elif size == 32:
|
||||
insns += fmt_insn("ldr %w[res], [%x[arg]]")
|
||||
else:
|
||||
assert size == 64
|
||||
insns += fmt_insn("ldr %x[res], [%x[arg]]")
|
||||
if barrier:
|
||||
insns += fmt_insn("dmb ish")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
|
||||
%(cpp_type)s res;
|
||||
asm volatile (%(insns)s
|
||||
: [res] "=r" (res)
|
||||
: [arg] "r" (arg)
|
||||
: "memory");
|
||||
return res;
|
||||
}""" % {
|
||||
"cpp_type": cpp_type,
|
||||
@@ -112,17 +113,17 @@ def gen_load(fun_name, cpp_type, size, b
|
||||
elif size == 16:
|
||||
insns += fmt_insn("ldrh %[res], [%[arg]]")
|
||||
else:
|
||||
assert size == 32
|
||||
insns += fmt_insn("ldr %[res], [%[arg]]")
|
||||
if barrier:
|
||||
insns += fmt_insn("dmb sy")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(const %(cpp_type)s* arg) {
|
||||
%(cpp_type)s res;
|
||||
asm volatile (%(insns)s
|
||||
: [res] "=r" (res)
|
||||
: [arg] "r" (arg)
|
||||
: "memory");
|
||||
return res;
|
||||
}""" % {
|
||||
"cpp_type": cpp_type,
|
||||
@@ -149,17 +150,17 @@ def gen_store(fun_name, cpp_type, size,
|
||||
elif size == 32:
|
||||
insns += fmt_insn("movl %[val], (%[addr])")
|
||||
else:
|
||||
assert size == 64
|
||||
insns += fmt_insn("movq %[val], (%[addr])")
|
||||
if barrier:
|
||||
insns += fmt_insn("mfence")
|
||||
return """
|
||||
- inline void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
+ INLINE_ATTR void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
asm volatile (%(insns)s
|
||||
:
|
||||
: [addr] "r" (addr), [val] "r"(val)
|
||||
: "memory");
|
||||
}""" % {
|
||||
"cpp_type": cpp_type,
|
||||
"fun_name": fun_name,
|
||||
"insns": insns,
|
||||
@@ -175,17 +176,17 @@ def gen_store(fun_name, cpp_type, size,
|
||||
elif size == 32:
|
||||
insns += fmt_insn("str %w[val], [%x[addr]]")
|
||||
else:
|
||||
assert size == 64
|
||||
insns += fmt_insn("str %x[val], [%x[addr]]")
|
||||
if barrier:
|
||||
insns += fmt_insn("dmb ish")
|
||||
return """
|
||||
- inline void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
+ INLINE_ATTR void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
asm volatile (%(insns)s
|
||||
:
|
||||
: [addr] "r" (addr), [val] "r"(val)
|
||||
: "memory");
|
||||
}""" % {
|
||||
"cpp_type": cpp_type,
|
||||
"fun_name": fun_name,
|
||||
"insns": insns,
|
||||
@@ -199,17 +200,17 @@ def gen_store(fun_name, cpp_type, size,
|
||||
elif size == 16:
|
||||
insns += fmt_insn("strh %[val], [%[addr]]")
|
||||
else:
|
||||
assert size == 32
|
||||
insns += fmt_insn("str %[val], [%[addr]]")
|
||||
if barrier:
|
||||
insns += fmt_insn("dmb sy")
|
||||
return """
|
||||
- inline void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
+ INLINE_ATTR void %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
asm volatile (%(insns)s
|
||||
:
|
||||
: [addr] "r" (addr), [val] "r"(val)
|
||||
: "memory");
|
||||
}""" % {
|
||||
"cpp_type": cpp_type,
|
||||
"fun_name": fun_name,
|
||||
"insns": insns,
|
||||
@@ -230,17 +231,17 @@ def gen_exchange(fun_name, cpp_type, siz
|
||||
elif size == 16:
|
||||
insns += fmt_insn("xchgw %[val], (%[addr])")
|
||||
elif size == 32:
|
||||
insns += fmt_insn("xchgl %[val], (%[addr])")
|
||||
else:
|
||||
assert size == 64
|
||||
insns += fmt_insn("xchgq %[val], (%[addr])")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
asm volatile (%(insns)s
|
||||
: [val] "+r" (val)
|
||||
: [addr] "r" (addr)
|
||||
: "memory");
|
||||
return val;
|
||||
}""" % {
|
||||
"cpp_type": cpp_type,
|
||||
"fun_name": fun_name,
|
||||
@@ -261,17 +262,17 @@ def gen_exchange(fun_name, cpp_type, siz
|
||||
insns += fmt_insn("stxr %w[scratch], %w[val], [%x[addr]]")
|
||||
else:
|
||||
assert size == 64
|
||||
insns += fmt_insn("ldxr %x[res], [%x[addr]]")
|
||||
insns += fmt_insn("stxr %w[scratch], %x[val], [%x[addr]]")
|
||||
insns += fmt_insn("cbnz %w[scratch], 0b")
|
||||
insns += fmt_insn("dmb ish")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
%(cpp_type)s res;
|
||||
uint32_t scratch;
|
||||
asm volatile (%(insns)s
|
||||
: [res] "=&r"(res), [scratch] "=&r"(scratch)
|
||||
: [addr] "r" (addr), [val] "r"(val)
|
||||
: "memory", "cc");
|
||||
return res;
|
||||
}""" % {
|
||||
@@ -292,17 +293,17 @@ def gen_exchange(fun_name, cpp_type, siz
|
||||
else:
|
||||
assert size == 32
|
||||
insns += fmt_insn("ldrex %[res], [%[addr]]")
|
||||
insns += fmt_insn("strex %[scratch], %[val], [%[addr]]")
|
||||
insns += fmt_insn("cmp %[scratch], #1")
|
||||
insns += fmt_insn("beq 0b")
|
||||
insns += fmt_insn("dmb sy")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
%(cpp_type)s res;
|
||||
uint32_t scratch;
|
||||
asm volatile (%(insns)s
|
||||
: [res] "=&r"(res), [scratch] "=&r"(scratch)
|
||||
: [addr] "r" (addr), [val] "r"(val)
|
||||
: "memory", "cc");
|
||||
return res;
|
||||
}""" % {
|
||||
@@ -316,33 +317,33 @@ def gen_exchange(fun_name, cpp_type, siz
|
||||
def gen_cmpxchg(fun_name, cpp_type, size):
|
||||
# NOTE: the assembly code must match the generated code in:
|
||||
# - MacroAssembler::compareExchange
|
||||
# - MacroAssembler::compareExchange64
|
||||
if cpu_arch == "x86" and size == 64:
|
||||
# Use a +A constraint to load `oldval` into EDX:EAX as input/output.
|
||||
# `newval` is loaded into ECX:EBX.
|
||||
return r"""
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
|
||||
%(cpp_type)s oldval,
|
||||
%(cpp_type)s newval) {
|
||||
asm volatile ("lock; cmpxchg8b (%%[addr])\n\t"
|
||||
: "+A" (oldval)
|
||||
: [addr] "r" (addr),
|
||||
"b" (uint32_t(newval & 0xffff'ffff)),
|
||||
"c" (uint32_t(newval >> 32))
|
||||
: "memory", "cc");
|
||||
return oldval;
|
||||
}""" % {
|
||||
"cpp_type": cpp_type,
|
||||
"fun_name": fun_name,
|
||||
}
|
||||
if cpu_arch == "arm" and size == 64:
|
||||
return r"""
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
|
||||
%(cpp_type)s oldval,
|
||||
%(cpp_type)s newval) {
|
||||
uint32_t oldval0 = oldval & 0xffff'ffff;
|
||||
uint32_t oldval1 = oldval >> 32;
|
||||
uint32_t newval0 = newval & 0xffff'ffff;
|
||||
uint32_t newval1 = newval >> 32;
|
||||
asm volatile (
|
||||
"dmb sy\n\t"
|
||||
@@ -375,17 +376,17 @@ def gen_cmpxchg(fun_name, cpp_type, size
|
||||
elif size == 16:
|
||||
insns += fmt_insn("lock; cmpxchgw %[newval], (%[addr])")
|
||||
elif size == 32:
|
||||
insns += fmt_insn("lock; cmpxchgl %[newval], (%[addr])")
|
||||
else:
|
||||
assert size == 64
|
||||
insns += fmt_insn("lock; cmpxchgq %[newval], (%[addr])")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
|
||||
%(cpp_type)s oldval,
|
||||
%(cpp_type)s newval) {
|
||||
asm volatile (%(insns)s
|
||||
: [oldval] "+a" (oldval)
|
||||
: [addr] "r" (addr), [newval] "r" (newval)
|
||||
: "memory", "cc");
|
||||
return oldval;
|
||||
}""" % {
|
||||
@@ -420,17 +421,17 @@ def gen_cmpxchg(fun_name, cpp_type, size
|
||||
insns += fmt_insn("mov %x[scratch], %x[oldval]")
|
||||
insns += fmt_insn("ldxr %x[res], [%x[addr]]")
|
||||
insns += fmt_insn("cmp %x[res], %x[scratch]")
|
||||
insns += fmt_insn("b.ne 1f")
|
||||
insns += fmt_insn("stxr %w[scratch], %x[newval], [%x[addr]]")
|
||||
insns += fmt_insn("cbnz %w[scratch], 0b")
|
||||
insns += fmt_insn("1: dmb ish")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
|
||||
%(cpp_type)s oldval,
|
||||
%(cpp_type)s newval) {
|
||||
%(cpp_type)s res, scratch;
|
||||
asm volatile (%(insns)s
|
||||
: [res] "=&r" (res), [scratch] "=&r" (scratch)
|
||||
: [addr] "r" (addr), [oldval] "r"(oldval), [newval] "r" (newval)
|
||||
: "memory", "cc");
|
||||
return res;
|
||||
@@ -461,17 +462,17 @@ def gen_cmpxchg(fun_name, cpp_type, size
|
||||
insns += fmt_insn("ldrex %[res], [%[addr]]")
|
||||
insns += fmt_insn("cmp %[res], %[scratch]")
|
||||
insns += fmt_insn("bne 1f")
|
||||
insns += fmt_insn("strex %[scratch], %[newval], [%[addr]]")
|
||||
insns += fmt_insn("cmp %[scratch], #1")
|
||||
insns += fmt_insn("beq 0b")
|
||||
insns += fmt_insn("1: dmb sy")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr,
|
||||
%(cpp_type)s oldval,
|
||||
%(cpp_type)s newval) {
|
||||
%(cpp_type)s res, scratch;
|
||||
asm volatile (%(insns)s
|
||||
: [res] "=&r" (res), [scratch] "=&r" (scratch)
|
||||
: [addr] "r" (addr), [oldval] "r"(oldval), [newval] "r" (newval)
|
||||
: "memory", "cc");
|
||||
return res;
|
||||
@@ -496,17 +497,17 @@ def gen_fetchop(fun_name, cpp_type, size
|
||||
elif size == 16:
|
||||
insns += fmt_insn("lock; xaddw %[val], (%[addr])")
|
||||
elif size == 32:
|
||||
insns += fmt_insn("lock; xaddl %[val], (%[addr])")
|
||||
else:
|
||||
assert size == 64
|
||||
insns += fmt_insn("lock; xaddq %[val], (%[addr])")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
asm volatile (%(insns)s
|
||||
: [val] "+&r" (val)
|
||||
: [addr] "r" (addr)
|
||||
: "memory", "cc");
|
||||
return val;
|
||||
}""" % {
|
||||
"cpp_type": cpp_type,
|
||||
"fun_name": fun_name,
|
||||
@@ -534,17 +535,17 @@ def gen_fetchop(fun_name, cpp_type, size
|
||||
assert size == 64
|
||||
insns += fmt_insn("movq (%[addr]), %[res]")
|
||||
insns += fmt_insn("0: movq %[res], %[scratch]")
|
||||
insns += fmt_insn("OPq %[val], %[scratch]")
|
||||
insns += fmt_insn("lock; cmpxchgq %[scratch], (%[addr])")
|
||||
insns = insns.replace("OP", op)
|
||||
insns += fmt_insn("jnz 0b")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
%(cpp_type)s res, scratch;
|
||||
asm volatile (%(insns)s
|
||||
: [res] "=&a" (res), [scratch] "=&r" (scratch)
|
||||
: [addr] "r" (addr), [val] "r"(val)
|
||||
: "memory", "cc");
|
||||
return res;
|
||||
}""" % {
|
||||
"cpp_type": cpp_type,
|
||||
@@ -576,17 +577,17 @@ def gen_fetchop(fun_name, cpp_type, size
|
||||
if cpu_op == "or":
|
||||
cpu_op = "orr"
|
||||
if cpu_op == "xor":
|
||||
cpu_op = "eor"
|
||||
insns = insns.replace("OP", cpu_op)
|
||||
insns += fmt_insn("cbnz %w[scratch2], 0b")
|
||||
insns += fmt_insn("dmb ish")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
%(cpp_type)s res;
|
||||
uintptr_t scratch1, scratch2;
|
||||
asm volatile (%(insns)s
|
||||
: [res] "=&r" (res), [scratch1] "=&r" (scratch1), [scratch2] "=&r"(scratch2)
|
||||
: [addr] "r" (addr), [val] "r"(val)
|
||||
: "memory", "cc");
|
||||
return res;
|
||||
}""" % {
|
||||
@@ -616,17 +617,17 @@ def gen_fetchop(fun_name, cpp_type, size
|
||||
cpu_op = "orr"
|
||||
if cpu_op == "xor":
|
||||
cpu_op = "eor"
|
||||
insns = insns.replace("OP", cpu_op)
|
||||
insns += fmt_insn("cmp %[scratch2], #1")
|
||||
insns += fmt_insn("beq 0b")
|
||||
insns += fmt_insn("dmb sy")
|
||||
return """
|
||||
- inline %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
+ INLINE_ATTR %(cpp_type)s %(fun_name)s(%(cpp_type)s* addr, %(cpp_type)s val) {
|
||||
%(cpp_type)s res;
|
||||
uintptr_t scratch1, scratch2;
|
||||
asm volatile (%(insns)s
|
||||
: [res] "=&r" (res), [scratch1] "=&r" (scratch1), [scratch2] "=&r"(scratch2)
|
||||
: [addr] "r" (addr), [val] "r"(val)
|
||||
: "memory", "cc");
|
||||
return res;
|
||||
}""" % {
|
||||
@@ -660,33 +661,33 @@ def gen_copy(fun_name, cpp_type, size, u
|
||||
insns += fmt_insn("ldrb %w[scratch], [%x[src], OFFSET]")
|
||||
insns += fmt_insn("strb %w[scratch], [%x[dst], OFFSET]")
|
||||
else:
|
||||
assert size == 8
|
||||
insns += fmt_insn("ldr %x[scratch], [%x[src], OFFSET]")
|
||||
insns += fmt_insn("str %x[scratch], [%x[dst], OFFSET]")
|
||||
elif cpu_arch == "arm":
|
||||
if size == 1:
|
||||
- insns += fmt_insn("ldrb %[scratch], [%[src], OFFSET]")
|
||||
- insns += fmt_insn("strb %[scratch], [%[dst], OFFSET]")
|
||||
+ insns += fmt_insn("ldrb %[scratch], [%[src], #OFFSET]")
|
||||
+ insns += fmt_insn("strb %[scratch], [%[dst], #OFFSET]")
|
||||
else:
|
||||
assert size == 4
|
||||
- insns += fmt_insn("ldr %[scratch], [%[src], OFFSET]")
|
||||
- insns += fmt_insn("str %[scratch], [%[dst], OFFSET]")
|
||||
+ insns += fmt_insn("ldr %[scratch], [%[src], #OFFSET]")
|
||||
+ insns += fmt_insn("str %[scratch], [%[dst], #OFFSET]")
|
||||
else:
|
||||
raise Exception("Unexpected arch")
|
||||
insns = insns.replace("OFFSET", str(offset * size))
|
||||
|
||||
if direction == "down":
|
||||
offset += 1
|
||||
else:
|
||||
offset -= 1
|
||||
|
||||
return """
|
||||
- inline void %(fun_name)s(uint8_t* dst, const uint8_t* src) {
|
||||
+ INLINE_ATTR void %(fun_name)s(uint8_t* dst, const uint8_t* src) {
|
||||
%(cpp_type)s* dst_ = reinterpret_cast<%(cpp_type)s*>(dst);
|
||||
const %(cpp_type)s* src_ = reinterpret_cast<const %(cpp_type)s*>(src);
|
||||
%(cpp_type)s scratch;
|
||||
asm volatile (%(insns)s
|
||||
: [scratch] "=&r" (scratch)
|
||||
: [dst] "r" (dst_), [src] "r"(src_)
|
||||
: "memory");
|
||||
}""" % {
|
||||
@@ -848,14 +849,21 @@ def generate_atomics_header(c_out):
|
||||
"constexpr size_t JS_GENERATED_ATOMICS_BLOCKSIZE = "
|
||||
+ str(blocksize)
|
||||
+ ";\n"
|
||||
)
|
||||
contents += (
|
||||
"constexpr size_t JS_GENERATED_ATOMICS_WORDSIZE = " + str(wordsize) + ";\n"
|
||||
)
|
||||
|
||||
+ # Work around a GCC issue on 32-bit x86 by adding MOZ_NEVER_INLINE.
|
||||
+ # See bug 1756347.
|
||||
+ if is_gcc and cpu_arch == "x86":
|
||||
+ contents = contents.replace("INLINE_ATTR", "MOZ_NEVER_INLINE inline")
|
||||
+ else:
|
||||
+ contents = contents.replace("INLINE_ATTR", "inline")
|
||||
+
|
||||
c_out.write(
|
||||
HEADER_TEMPLATE
|
||||
% {
|
||||
"contents": contents,
|
||||
}
|
||||
)
|
File diff suppressed because it is too large
Load Diff
@ -1,20 +1,10 @@
|
||||
# HG changeset patch
|
||||
# Parent e4abeadbbb7a0c63c17177f1d14ea04c77c6128e
|
||||
# Parent 3802b7b2b99885f3ad4d2ec3e2c157e38d04a168
|
||||
|
||||
diff --git a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
|
||||
--- a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
|
||||
+++ b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
|
||||
@@ -22,23 +22,27 @@ class FFmpegDecoderModule {
|
||||
static already_AddRefed<PlatformDecoderModule> Create(FFmpegLibWrapper*);
|
||||
};
|
||||
|
||||
static FFmpegLibWrapper sLibAV;
|
||||
|
||||
static const char* sLibs[] = {
|
||||
// clang-format off
|
||||
#if defined(XP_DARWIN)
|
||||
+ "libavcodec.58.134.dylib",
|
||||
+ "libavcodec.58.91.dylib",
|
||||
@@ -31,16 +31,18 @@ static const char* sLibs[] = {
|
||||
"libavcodec.58.dylib",
|
||||
"libavcodec.57.dylib",
|
||||
"libavcodec.56.dylib",
|
||||
@ -22,6 +12,7 @@ diff --git a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp b/dom/media/plat
|
||||
"libavcodec.54.dylib",
|
||||
"libavcodec.53.dylib",
|
||||
#else
|
||||
"libavcodec.so.59",
|
||||
+ "libavcodec.so.58.134",
|
||||
+ "libavcodec.so.58.91",
|
||||
"libavcodec.so.58",
|
||||
|
@ -1,11 +1,11 @@
|
||||
# HG changeset patch
|
||||
# User Wolfgang Rosenauer <wr@rosenauer.org>
|
||||
# Parent ebd7e379c85889b6f8dba0542479110ab1f6b059
|
||||
# Parent 02ffee15578fd4dc2dd5ade32e7dab907d633b0d
|
||||
|
||||
diff --git a/build/moz.configure/lto-pgo.configure b/build/moz.configure/lto-pgo.configure
|
||||
--- a/build/moz.configure/lto-pgo.configure
|
||||
+++ b/build/moz.configure/lto-pgo.configure
|
||||
@@ -243,34 +243,34 @@ def lto(
|
||||
@@ -242,34 +242,34 @@ def lto(
|
||||
"configure."
|
||||
)
|
||||
|
||||
@ -181,10 +181,10 @@ diff --git a/toolkit/components/terminator/nsTerminator.cpp b/toolkit/components
|
||||
+ crashAfterMS = INT32_MAX;
|
||||
+
|
||||
UniquePtr<Options> options(new Options());
|
||||
const PRIntervalTime ticksDuration =
|
||||
PR_MillisecondsToInterval(HEARTBEAT_INTERVAL_MS);
|
||||
options->crashAfterTicks = crashAfterMS / ticksDuration;
|
||||
// Handle systems where ticksDuration is greater than crashAfterMS.
|
||||
if (options->crashAfterTicks == 0) {
|
||||
// crashAfterTicks is guaranteed to be > 0 as
|
||||
// crashAfterMS >= ADDITIONAL_WAIT_BEFORE_CRASH_MS >> HEARTBEAT_INTERVAL_MS
|
||||
options->crashAfterTicks = crashAfterMS / HEARTBEAT_INTERVAL_MS;
|
||||
}
|
||||
|
||||
DebugOnly<PRThread*> watchdogThread =
|
||||
CreateSystemThread(RunWatchdog, options.release());
|
||||
MOZ_ASSERT(watchdogThread);
|
||||
|
@ -3,21 +3,21 @@
|
||||
# Date 1558452408 -7200
|
||||
# Tue May 21 17:26:48 2019 +0200
|
||||
# Node ID 602e92722e765a3c238d3b96b26c0c8063b5eeb4
|
||||
# Parent 60715122a04aad06b33ad7259f1bde19803230da
|
||||
# Parent 136e1f2c44a3099b3e49a576fa62c8ad77aa431e
|
||||
[mq]: mozilla-s390-context.patch
|
||||
|
||||
diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp
|
||||
--- a/js/src/wasm/WasmSignalHandlers.cpp
|
||||
+++ b/js/src/wasm/WasmSignalHandlers.cpp
|
||||
@@ -151,16 +151,20 @@ using mozilla::DebugOnly;
|
||||
# define FP_sig(p) ((p)->uc_mcontext.mc_fp)
|
||||
# define SP_sig(p) ((p)->uc_mcontext.mc_i7)
|
||||
# endif
|
||||
# if defined(__linux__) && (defined(__ppc64__) || defined(__PPC64__) || \
|
||||
defined(__ppc64le__) || defined(__PPC64LE__))
|
||||
# define R01_sig(p) ((p)->uc_mcontext.gp_regs[1])
|
||||
@@ -157,16 +157,20 @@ using mozilla::DebugOnly;
|
||||
# define R32_sig(p) ((p)->uc_mcontext.gp_regs[32])
|
||||
# endif
|
||||
# if defined(__linux__) && defined(__loongarch__)
|
||||
# define EPC_sig(p) ((p)->uc_mcontext.pc)
|
||||
# define RRA_sig(p) ((p)->uc_mcontext.gregs[1])
|
||||
# define RSP_sig(p) ((p)->uc_mcontext.gregs[3])
|
||||
# define RFP_sig(p) ((p)->uc_mcontext.gregs[22])
|
||||
# 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)
|
||||
@ -30,15 +30,15 @@ diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers
|
||||
# define RSP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RSP])
|
||||
# define RBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RBP])
|
||||
# define R11_sig(p) ((p)->uc_mcontext.__gregs[_REG_R11])
|
||||
@@ -371,16 +375,20 @@ struct macos_aarch64_context {
|
||||
# define FP_sig(p) RFP_sig(p)
|
||||
# define SP_sig(p) RSP_sig(p)
|
||||
# define LR_sig(p) R31_sig(p)
|
||||
# elif defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || \
|
||||
defined(__PPC64LE__)
|
||||
@@ -399,16 +403,20 @@ struct macos_aarch64_context {
|
||||
# define PC_sig(p) R32_sig(p)
|
||||
# define SP_sig(p) R01_sig(p)
|
||||
# define FP_sig(p) R01_sig(p)
|
||||
# elif defined(__loongarch__)
|
||||
# define PC_sig(p) EPC_sig(p)
|
||||
# define FP_sig(p) RFP_sig(p)
|
||||
# define SP_sig(p) RSP_sig(p)
|
||||
# define LR_sig(p) RRA_sig(p)
|
||||
+# elif defined(__s390x__)
|
||||
+# define PC_sig(p) PSWa_sig(p)
|
||||
+# define SP_sig(p) GR_sig(p, 15)
|
||||
|
@ -1,10 +1,10 @@
|
||||
PRODUCT="firefox"
|
||||
CHANNEL="release"
|
||||
VERSION="98.0.2"
|
||||
VERSION="99.0"
|
||||
VERSION_SUFFIX=""
|
||||
PREV_VERSION="98.0.1"
|
||||
PREV_VERSION="98.0.2"
|
||||
PREV_VERSION_SUFFIX=""
|
||||
#SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation
|
||||
RELEASE_REPO="https://hg.mozilla.org/releases/mozilla-release"
|
||||
RELEASE_TAG="cc23a50fcf60e8f94b168659870d765dc502ea56"
|
||||
RELEASE_TIMESTAMP="20220322144853"
|
||||
RELEASE_TAG="384926270a61c2dd2101752565a6175de3d62781"
|
||||
RELEASE_TIMESTAMP="20220330194208"
|
||||
|
Loading…
Reference in New Issue
Block a user