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>
|
Thu Mar 24 21:49:57 UTC 2022 - Andreas Stieger <andreas.stieger@gmx.de>
|
||||||
|
|
||||||
@ -28,7 +73,7 @@ Tue Mar 22 12:22:51 UTC 2022 - Guillaume GARDET <guillaume.gardet@opensuse.org>
|
|||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Mar 17 14:52:39 UTC 2022 - Dirk Müller <dmueller@suse.com>
|
Thu Mar 17 14:52:39 UTC 2022 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
- exclude slow cpus for building
|
- exclude slow cpus for building
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Mar 17 09:18:01 UTC 2022 - Martin Sirringhaus <martin.sirringhaus@suse.com>
|
Thu Mar 17 09:18:01 UTC 2022 - Martin Sirringhaus <martin.sirringhaus@suse.com>
|
||||||
|
@ -28,9 +28,9 @@
|
|||||||
# orig_suffix b3
|
# orig_suffix b3
|
||||||
# major 69
|
# major 69
|
||||||
# mainver %major.99
|
# mainver %major.99
|
||||||
%define major 98
|
%define major 99
|
||||||
%define mainver %major.0.2
|
%define mainver %major.0
|
||||||
%define orig_version 98.0.2
|
%define orig_version 99.0
|
||||||
%define orig_suffix %{nil}
|
%define orig_suffix %{nil}
|
||||||
%define update_channel release
|
%define update_channel release
|
||||||
%define branding 1
|
%define branding 1
|
||||||
@ -114,7 +114,7 @@ BuildRequires: libiw-devel
|
|||||||
BuildRequires: libproxy-devel
|
BuildRequires: libproxy-devel
|
||||||
BuildRequires: makeinfo
|
BuildRequires: makeinfo
|
||||||
BuildRequires: mozilla-nspr-devel >= 4.33
|
BuildRequires: mozilla-nspr-devel >= 4.33
|
||||||
BuildRequires: mozilla-nss-devel >= 3.75
|
BuildRequires: mozilla-nss-devel >= 3.76.1
|
||||||
BuildRequires: nasm >= 2.14
|
BuildRequires: nasm >= 2.14
|
||||||
BuildRequires: nodejs >= 10.22.1
|
BuildRequires: nodejs >= 10.22.1
|
||||||
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} < 150000
|
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} < 150000
|
||||||
@ -219,8 +219,6 @@ Patch20: mozilla-s390x-skia-gradient.patch
|
|||||||
Patch21: mozilla-libavcodec58_91.patch
|
Patch21: mozilla-libavcodec58_91.patch
|
||||||
Patch22: mozilla-silence-no-return-type.patch
|
Patch22: mozilla-silence-no-return-type.patch
|
||||||
Patch23: mozilla-bmo531915.patch
|
Patch23: mozilla-bmo531915.patch
|
||||||
Patch24: mozilla-bmo1756347.patch
|
|
||||||
Patch25: mozilla-bmo1757571.patch
|
|
||||||
# Firefox/browser
|
# Firefox/browser
|
||||||
Patch101: firefox-kde.patch
|
Patch101: firefox-kde.patch
|
||||||
Patch102: firefox-branded-icons.patch
|
Patch102: firefox-branded-icons.patch
|
||||||
|
@ -37,6 +37,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
SOURCE_TARBALL="$PRODUCT-$VERSION$VERSION_SUFFIX.source.tar.xz"
|
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_URL="https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source"
|
||||||
FTP_CANDIDATES_BASE_URL="https://ftp.mozilla.org/pub/$PRODUCT/candidates"
|
FTP_CANDIDATES_BASE_URL="https://ftp.mozilla.org/pub/$PRODUCT/candidates"
|
||||||
# Make first letter of PRODCUT upper case
|
# Make first letter of PRODCUT upper case
|
||||||
@ -145,22 +146,48 @@ function locales_get() {
|
|||||||
fi
|
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"
|
URL="$1"
|
||||||
curl -s "$URL" | python -c "import json; import sys; \
|
curl -s "$URL" | python -c "import json; import sys; \
|
||||||
print('\n'.join(['{} {}'.format(key, value['changeset']) \
|
print('\n'.join(['{} {}'.format(key, value['changeset']) \
|
||||||
for key, value in sorted(json.load(sys.stdin)['locales'].items())]));"
|
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() {
|
function locales_unchanged() {
|
||||||
BUILD_ID="$1"
|
BUILD_ID="$1"
|
||||||
PREV_BUILD_ID=$(get_build_number "$PREV_VERSION$PREV_VERSION_SUFFIX")
|
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"
|
# 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
|
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_url=$(locales_get "$VERSION$VERSION_SUFFIX" "$BUILD_ID")
|
||||||
curr_content=$(locales_parse "$curr_url") || exit 1
|
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")
|
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
|
# we might have an upstream archive already and can skip the checkout
|
||||||
if [ -e $SOURCE_TARBALL ]; then
|
if [ -e $SOURCE_TARBALL ]; then
|
||||||
if [ -z ${SKIP_LOCALES+x} ] && [ $LOCALES_CHANGED -ne 0 ]; then
|
if [ -z ${SKIP_LOCALES+x} ] && [ $LOCALES_CHANGED -ne 0 ]; then
|
||||||
# still need to extract the locale information from the archive
|
extract_locales_file
|
||||||
echo "extract locale changesets"
|
|
||||||
tar -xf $SOURCE_TARBALL $LOCALE_FILE
|
|
||||||
fi
|
fi
|
||||||
get_source_stamp "$BUILD_ID"
|
get_source_stamp "$BUILD_ID"
|
||||||
else
|
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"
|
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"
|
mv "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz" "l10n-$VERSION$VERSION_SUFFIX.tar.xz"
|
||||||
fi
|
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
|
# HG changeset patch
|
||||||
# Parent e4abeadbbb7a0c63c17177f1d14ea04c77c6128e
|
# Parent 3802b7b2b99885f3ad4d2ec3e2c157e38d04a168
|
||||||
|
|
||||||
diff --git a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
|
diff --git a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
|
||||||
--- a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
|
--- a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
|
||||||
+++ b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
|
+++ b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
|
||||||
@@ -22,23 +22,27 @@ class FFmpegDecoderModule {
|
@@ -31,16 +31,18 @@ static const char* sLibs[] = {
|
||||||
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",
|
|
||||||
"libavcodec.58.dylib",
|
"libavcodec.58.dylib",
|
||||||
"libavcodec.57.dylib",
|
"libavcodec.57.dylib",
|
||||||
"libavcodec.56.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.54.dylib",
|
||||||
"libavcodec.53.dylib",
|
"libavcodec.53.dylib",
|
||||||
#else
|
#else
|
||||||
|
"libavcodec.so.59",
|
||||||
+ "libavcodec.so.58.134",
|
+ "libavcodec.so.58.134",
|
||||||
+ "libavcodec.so.58.91",
|
+ "libavcodec.so.58.91",
|
||||||
"libavcodec.so.58",
|
"libavcodec.so.58",
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
# HG changeset patch
|
# HG changeset patch
|
||||||
# User Wolfgang Rosenauer <wr@rosenauer.org>
|
# 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
|
diff --git a/build/moz.configure/lto-pgo.configure b/build/moz.configure/lto-pgo.configure
|
||||||
--- a/build/moz.configure/lto-pgo.configure
|
--- a/build/moz.configure/lto-pgo.configure
|
||||||
+++ b/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."
|
"configure."
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -181,10 +181,10 @@ diff --git a/toolkit/components/terminator/nsTerminator.cpp b/toolkit/components
|
|||||||
+ crashAfterMS = INT32_MAX;
|
+ crashAfterMS = INT32_MAX;
|
||||||
+
|
+
|
||||||
UniquePtr<Options> options(new Options());
|
UniquePtr<Options> options(new Options());
|
||||||
const PRIntervalTime ticksDuration =
|
// crashAfterTicks is guaranteed to be > 0 as
|
||||||
PR_MillisecondsToInterval(HEARTBEAT_INTERVAL_MS);
|
// crashAfterMS >= ADDITIONAL_WAIT_BEFORE_CRASH_MS >> HEARTBEAT_INTERVAL_MS
|
||||||
options->crashAfterTicks = crashAfterMS / ticksDuration;
|
options->crashAfterTicks = crashAfterMS / HEARTBEAT_INTERVAL_MS;
|
||||||
// Handle systems where ticksDuration is greater than crashAfterMS.
|
|
||||||
if (options->crashAfterTicks == 0) {
|
DebugOnly<PRThread*> watchdogThread =
|
||||||
options->crashAfterTicks = crashAfterMS / HEARTBEAT_INTERVAL_MS;
|
CreateSystemThread(RunWatchdog, options.release());
|
||||||
}
|
MOZ_ASSERT(watchdogThread);
|
||||||
|
@ -3,21 +3,21 @@
|
|||||||
# Date 1558452408 -7200
|
# Date 1558452408 -7200
|
||||||
# Tue May 21 17:26:48 2019 +0200
|
# Tue May 21 17:26:48 2019 +0200
|
||||||
# Node ID 602e92722e765a3c238d3b96b26c0c8063b5eeb4
|
# Node ID 602e92722e765a3c238d3b96b26c0c8063b5eeb4
|
||||||
# Parent 60715122a04aad06b33ad7259f1bde19803230da
|
# Parent 136e1f2c44a3099b3e49a576fa62c8ad77aa431e
|
||||||
[mq]: mozilla-s390-context.patch
|
[mq]: mozilla-s390-context.patch
|
||||||
|
|
||||||
diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp
|
diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp
|
||||||
--- a/js/src/wasm/WasmSignalHandlers.cpp
|
--- a/js/src/wasm/WasmSignalHandlers.cpp
|
||||||
+++ b/js/src/wasm/WasmSignalHandlers.cpp
|
+++ b/js/src/wasm/WasmSignalHandlers.cpp
|
||||||
@@ -151,16 +151,20 @@ using mozilla::DebugOnly;
|
@@ -157,16 +157,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])
|
|
||||||
# define R32_sig(p) ((p)->uc_mcontext.gp_regs[32])
|
# define R32_sig(p) ((p)->uc_mcontext.gp_regs[32])
|
||||||
# endif
|
# 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__)
|
+# if defined(__linux__) && defined(__s390x__)
|
||||||
+# define GR_sig(p,x) ((p)->uc_mcontext.gregs[x])
|
+# define GR_sig(p,x) ((p)->uc_mcontext.gregs[x])
|
||||||
+# define PSWa_sig(p) ((p)->uc_mcontext.psw.addr)
|
+# 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 RSP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RSP])
|
||||||
# define RBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RBP])
|
# define RBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_RBP])
|
||||||
# define R11_sig(p) ((p)->uc_mcontext.__gregs[_REG_R11])
|
# define R11_sig(p) ((p)->uc_mcontext.__gregs[_REG_R11])
|
||||||
@@ -371,16 +375,20 @@ struct macos_aarch64_context {
|
@@ -399,16 +403,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__)
|
|
||||||
# define PC_sig(p) R32_sig(p)
|
# define PC_sig(p) R32_sig(p)
|
||||||
# define SP_sig(p) R01_sig(p)
|
# define SP_sig(p) R01_sig(p)
|
||||||
# define FP_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__)
|
+# elif defined(__s390x__)
|
||||||
+# define PC_sig(p) PSWa_sig(p)
|
+# define PC_sig(p) PSWa_sig(p)
|
||||||
+# define SP_sig(p) GR_sig(p, 15)
|
+# define SP_sig(p) GR_sig(p, 15)
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
PRODUCT="firefox"
|
PRODUCT="firefox"
|
||||||
CHANNEL="release"
|
CHANNEL="release"
|
||||||
VERSION="98.0.2"
|
VERSION="99.0"
|
||||||
VERSION_SUFFIX=""
|
VERSION_SUFFIX=""
|
||||||
PREV_VERSION="98.0.1"
|
PREV_VERSION="98.0.2"
|
||||||
PREV_VERSION_SUFFIX=""
|
PREV_VERSION_SUFFIX=""
|
||||||
#SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation
|
#SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation
|
||||||
RELEASE_REPO="https://hg.mozilla.org/releases/mozilla-release"
|
RELEASE_REPO="https://hg.mozilla.org/releases/mozilla-release"
|
||||||
RELEASE_TAG="cc23a50fcf60e8f94b168659870d765dc502ea56"
|
RELEASE_TAG="384926270a61c2dd2101752565a6175de3d62781"
|
||||||
RELEASE_TIMESTAMP="20220322144853"
|
RELEASE_TIMESTAMP="20220330194208"
|
||||||
|
Loading…
Reference in New Issue
Block a user