* add firefox-esr (jit enabled on powerpc64le)
This commit is contained in:
parent
4fadba2c0e
commit
37643dba3f
542
firefox-esr/.SRCINFO
Normal file
542
firefox-esr/.SRCINFO
Normal file
@ -0,0 +1,542 @@
|
||||
pkgbase = firefox-esr
|
||||
pkgdesc = Standalone web browser from mozilla.org, Extended Support Release
|
||||
pkgver = 115.9.1
|
||||
pkgrel = 1
|
||||
url = https://www.mozilla.org/en-US/firefox/enterprise/
|
||||
arch = x86_64
|
||||
license = MPL
|
||||
license = GPL
|
||||
license = LGPL
|
||||
makedepends = unzip
|
||||
makedepends = zip
|
||||
makedepends = diffutils
|
||||
makedepends = yasm
|
||||
makedepends = mesa
|
||||
makedepends = imake
|
||||
makedepends = inetutils
|
||||
makedepends = xorg-server-xvfb
|
||||
makedepends = autoconf2.13
|
||||
makedepends = rust
|
||||
makedepends = clang
|
||||
makedepends = llvm
|
||||
makedepends = jack
|
||||
makedepends = nodejs
|
||||
makedepends = cbindgen
|
||||
makedepends = nasm
|
||||
makedepends = python
|
||||
makedepends = lld
|
||||
makedepends = dump_syms
|
||||
makedepends = wasi-compiler-rt
|
||||
makedepends = wasi-libc
|
||||
makedepends = wasi-libc++
|
||||
makedepends = wasi-libc++abi
|
||||
depends = gtk3
|
||||
depends = libxt
|
||||
depends = mime-types
|
||||
depends = dbus-glib
|
||||
depends = ffmpeg
|
||||
depends = nss
|
||||
depends = ttf-font
|
||||
depends = libpulse
|
||||
optdepends = networkmanager: Location detection via available WiFi networks
|
||||
optdepends = libnotify: Notification integration
|
||||
optdepends = pulseaudio: Audio support
|
||||
optdepends = speech-dispatcher: Text-to-Speech
|
||||
optdepends = hunspell-en_US: Spell checking, American English
|
||||
optdepends = xdg-desktop-portal: Screensharing with Wayland
|
||||
noextract = firefox-esr-i18n-115.9.1-ach.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-af.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-an.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ar.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ast.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-az.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-be.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-bg.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-bn.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-br.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-bs.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ca-valencia.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ca.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-cak.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-cs.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-cy.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-da.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-de.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-dsb.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-el.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-en-CA.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-en-GB.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-en-US.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-eo.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-es-AR.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-es-CL.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-es-ES.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-es-MX.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-et.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-eu.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-fa.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ff.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-fi.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-fr.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-fy-NL.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ga-IE.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-gd.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-gl.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-gn.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-gu-IN.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-he.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-hi-IN.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-hr.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-hsb.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-hu.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-hy-AM.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ia.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-id.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-is.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-it.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ja.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ka.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-kab.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-kk.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-km.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-kn.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ko.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-lij.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-lt.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-lv.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-mk.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-mr.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ms.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-my.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-nb-NO.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ne-NP.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-nl.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-nn-NO.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-oc.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-pa-IN.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-pl.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-pt-BR.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-pt-PT.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-rm.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ro.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ru.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-si.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-sk.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-sl.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-son.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-sq.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-sr.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-sv-SE.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ta.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-te.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-th.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-tl.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-tr.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-trs.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-uk.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-ur.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-uz.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-vi.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-xh.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-zh-CN.xpi
|
||||
noextract = firefox-esr-i18n-115.9.1-zh-TW.xpi
|
||||
options = !emptydirs
|
||||
options = !makeflags
|
||||
options = !strip
|
||||
options = !lto
|
||||
options = !debug
|
||||
source = https://archive.mozilla.org/pub/firefox/releases/115.9.1esr/source/firefox-115.9.1esr.source.tar.xz
|
||||
source = https://archive.mozilla.org/pub/firefox/releases/115.9.1esr/source/firefox-115.9.1esr.source.tar.xz.asc
|
||||
source = firefox-esr.desktop
|
||||
source = identity-icons-brand.svg
|
||||
source = firefox-esr-i18n-115.9.1-ach.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ach.xpi
|
||||
source = firefox-esr-i18n-115.9.1-af.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/af.xpi
|
||||
source = firefox-esr-i18n-115.9.1-an.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/an.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ar.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ar.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ast.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ast.xpi
|
||||
source = firefox-esr-i18n-115.9.1-az.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/az.xpi
|
||||
source = firefox-esr-i18n-115.9.1-be.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/be.xpi
|
||||
source = firefox-esr-i18n-115.9.1-bg.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/bg.xpi
|
||||
source = firefox-esr-i18n-115.9.1-bn.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/bn.xpi
|
||||
source = firefox-esr-i18n-115.9.1-br.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/br.xpi
|
||||
source = firefox-esr-i18n-115.9.1-bs.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/bs.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ca-valencia.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ca-valencia.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ca.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ca.xpi
|
||||
source = firefox-esr-i18n-115.9.1-cak.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/cak.xpi
|
||||
source = firefox-esr-i18n-115.9.1-cs.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/cs.xpi
|
||||
source = firefox-esr-i18n-115.9.1-cy.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/cy.xpi
|
||||
source = firefox-esr-i18n-115.9.1-da.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/da.xpi
|
||||
source = firefox-esr-i18n-115.9.1-de.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/de.xpi
|
||||
source = firefox-esr-i18n-115.9.1-dsb.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/dsb.xpi
|
||||
source = firefox-esr-i18n-115.9.1-el.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/el.xpi
|
||||
source = firefox-esr-i18n-115.9.1-en-CA.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/en-CA.xpi
|
||||
source = firefox-esr-i18n-115.9.1-en-GB.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/en-GB.xpi
|
||||
source = firefox-esr-i18n-115.9.1-en-US.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/en-US.xpi
|
||||
source = firefox-esr-i18n-115.9.1-eo.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/eo.xpi
|
||||
source = firefox-esr-i18n-115.9.1-es-AR.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/es-AR.xpi
|
||||
source = firefox-esr-i18n-115.9.1-es-CL.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/es-CL.xpi
|
||||
source = firefox-esr-i18n-115.9.1-es-ES.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/es-ES.xpi
|
||||
source = firefox-esr-i18n-115.9.1-es-MX.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/es-MX.xpi
|
||||
source = firefox-esr-i18n-115.9.1-et.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/et.xpi
|
||||
source = firefox-esr-i18n-115.9.1-eu.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/eu.xpi
|
||||
source = firefox-esr-i18n-115.9.1-fa.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/fa.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ff.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ff.xpi
|
||||
source = firefox-esr-i18n-115.9.1-fi.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/fi.xpi
|
||||
source = firefox-esr-i18n-115.9.1-fr.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/fr.xpi
|
||||
source = firefox-esr-i18n-115.9.1-fy-NL.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/fy-NL.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ga-IE.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ga-IE.xpi
|
||||
source = firefox-esr-i18n-115.9.1-gd.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/gd.xpi
|
||||
source = firefox-esr-i18n-115.9.1-gl.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/gl.xpi
|
||||
source = firefox-esr-i18n-115.9.1-gn.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/gn.xpi
|
||||
source = firefox-esr-i18n-115.9.1-gu-IN.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/gu-IN.xpi
|
||||
source = firefox-esr-i18n-115.9.1-he.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/he.xpi
|
||||
source = firefox-esr-i18n-115.9.1-hi-IN.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/hi-IN.xpi
|
||||
source = firefox-esr-i18n-115.9.1-hr.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/hr.xpi
|
||||
source = firefox-esr-i18n-115.9.1-hsb.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/hsb.xpi
|
||||
source = firefox-esr-i18n-115.9.1-hu.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/hu.xpi
|
||||
source = firefox-esr-i18n-115.9.1-hy-AM.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/hy-AM.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ia.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ia.xpi
|
||||
source = firefox-esr-i18n-115.9.1-id.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/id.xpi
|
||||
source = firefox-esr-i18n-115.9.1-is.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/is.xpi
|
||||
source = firefox-esr-i18n-115.9.1-it.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/it.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ja.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ja.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ka.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ka.xpi
|
||||
source = firefox-esr-i18n-115.9.1-kab.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/kab.xpi
|
||||
source = firefox-esr-i18n-115.9.1-kk.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/kk.xpi
|
||||
source = firefox-esr-i18n-115.9.1-km.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/km.xpi
|
||||
source = firefox-esr-i18n-115.9.1-kn.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/kn.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ko.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ko.xpi
|
||||
source = firefox-esr-i18n-115.9.1-lij.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/lij.xpi
|
||||
source = firefox-esr-i18n-115.9.1-lt.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/lt.xpi
|
||||
source = firefox-esr-i18n-115.9.1-lv.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/lv.xpi
|
||||
source = firefox-esr-i18n-115.9.1-mk.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/mk.xpi
|
||||
source = firefox-esr-i18n-115.9.1-mr.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/mr.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ms.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ms.xpi
|
||||
source = firefox-esr-i18n-115.9.1-my.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/my.xpi
|
||||
source = firefox-esr-i18n-115.9.1-nb-NO.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/nb-NO.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ne-NP.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ne-NP.xpi
|
||||
source = firefox-esr-i18n-115.9.1-nl.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/nl.xpi
|
||||
source = firefox-esr-i18n-115.9.1-nn-NO.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/nn-NO.xpi
|
||||
source = firefox-esr-i18n-115.9.1-oc.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/oc.xpi
|
||||
source = firefox-esr-i18n-115.9.1-pa-IN.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/pa-IN.xpi
|
||||
source = firefox-esr-i18n-115.9.1-pl.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/pl.xpi
|
||||
source = firefox-esr-i18n-115.9.1-pt-BR.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/pt-BR.xpi
|
||||
source = firefox-esr-i18n-115.9.1-pt-PT.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/pt-PT.xpi
|
||||
source = firefox-esr-i18n-115.9.1-rm.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/rm.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ro.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ro.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ru.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ru.xpi
|
||||
source = firefox-esr-i18n-115.9.1-si.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/si.xpi
|
||||
source = firefox-esr-i18n-115.9.1-sk.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/sk.xpi
|
||||
source = firefox-esr-i18n-115.9.1-sl.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/sl.xpi
|
||||
source = firefox-esr-i18n-115.9.1-son.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/son.xpi
|
||||
source = firefox-esr-i18n-115.9.1-sq.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/sq.xpi
|
||||
source = firefox-esr-i18n-115.9.1-sr.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/sr.xpi
|
||||
source = firefox-esr-i18n-115.9.1-sv-SE.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/sv-SE.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ta.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ta.xpi
|
||||
source = firefox-esr-i18n-115.9.1-te.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/te.xpi
|
||||
source = firefox-esr-i18n-115.9.1-th.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/th.xpi
|
||||
source = firefox-esr-i18n-115.9.1-tl.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/tl.xpi
|
||||
source = firefox-esr-i18n-115.9.1-tr.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/tr.xpi
|
||||
source = firefox-esr-i18n-115.9.1-trs.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/trs.xpi
|
||||
source = firefox-esr-i18n-115.9.1-uk.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/uk.xpi
|
||||
source = firefox-esr-i18n-115.9.1-ur.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/ur.xpi
|
||||
source = firefox-esr-i18n-115.9.1-uz.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/uz.xpi
|
||||
source = firefox-esr-i18n-115.9.1-vi.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/vi.xpi
|
||||
source = firefox-esr-i18n-115.9.1-xh.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/xh.xpi
|
||||
source = firefox-esr-i18n-115.9.1-zh-CN.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/zh-CN.xpi
|
||||
source = firefox-esr-i18n-115.9.1-zh-TW.xpi::https://archive.mozilla.org/pub/mozilla.org/firefox/releases/115.9.1esr/linux-x86_64/xpi/zh-TW.xpi
|
||||
validpgpkeys = 14F26682D0916CDD81E37B6D61B7B526D98F0353
|
||||
sha512sums = 9ccaede2fcda13a07f98a2110bb8f99c7324601d66bff311f3070a669576a1598fe1d7de2d005d725d1f44dbe3934a9c0fd0b7950f60686047d4ce8d9d812310
|
||||
sha512sums = SKIP
|
||||
sha512sums = 4b53ee133a4ecaf068e240f6a05a1ebf4b788d67fe9141cc5b3561e1128907c8c3edb49bf2b24ba89daf1552f94ac48adf682dbe7dd070cffe7f78d98f2b3338
|
||||
sha512sums = b579b73176c72a5ecf36e3f63bba08fdb8041ae99d54e5cab906660fed6a9cf2311f7ca1ec1649e451cc6d5a4b1e6060b974b1d7befe9c8df3c5a89c50383c17
|
||||
sha512sums = b5b73c34355a29846ff6278bdd7b3b71df28310a474ab71c08db7947d5a558b2a09a8abbfdbbe19c83db4777e454d81b73c66811488e5d04e1545da13fbd35a7
|
||||
sha512sums = 8f3b0c9166f663a8342a7208c8b797b90359cb6b52024e1c145e0c42d7ff649a9dc2a8e6540ceb4079e98ee677590d75cf9c4515285d98841116b68bf5a2831b
|
||||
sha512sums = 6e2b9647bf63fc07ac6f12cfdd1b928bfc401c968ac440f3ecbb76eafe2f91b0e48134ecefb0cde4f0473e896562ce93ba0eb90f88a8c02eb4fb72520c2ce02a
|
||||
sha512sums = 344cf25d4217b1bbe56f06af70dbbc82c3227d8d01017d33fbe31eb19c2d86bc15939099941a83a6b03da3f2d33ad272cd5b5b333bf2363ceca1ef32fe58ce2b
|
||||
sha512sums = 20dd0bc191a19b168e911e9d5592a0136eb95dfeb5e40744596b1fc05f6586301dcc3557b8bf29c27be7f6aaad543156f2294feb4cddc99347ce6fa33b7c24b4
|
||||
sha512sums = ea34d899a66109731838c833611541c1d83481b769f600b203ebebdf97081afb312fcaaf16e2efdd9a88edc2e22c597560d96b4be37e4a9e321c802d43c1309b
|
||||
sha512sums = 638e2c8a697fd0313d167dca026257b3e70a75818f00e3f5197feebffe1c4ded17e261905193b95e991b46413d0110fbcc49c5fc538b78bf669a781f17626eeb
|
||||
sha512sums = 79579ffcdfb8ce03b6948e8974a375381bbb73e43ac6fc04dffa93415b00d00071e236937bbef0093a483ed5483dcb2cfc1f4e69cdcf9cc53caa6a3138e62a64
|
||||
sha512sums = f3c54ab0b37ede0d0e996134dea4fef5035caaa554ef6e2e6e1ed909222780c6401c2d1e1a3ab635f805a1d237aee2b60ae6a52d3b9032f9121c7e35917f18cf
|
||||
sha512sums = af7253d9b687fdc5f05090dd96abeb104261dfe9130ad5ad03d7b1d0ce15b5a08abe9a33abbaed7c9cb16f57a019cca9d083e65aafe5e58a546d6a1c49fe7063
|
||||
sha512sums = a8c47fb87e347d2d5a3dce7fb762ecd158de70b9f05305d96b9149984d9b90b26b9fd19c9fdb8253fdeadb4893a6a6829be42197bcbba8617310f328609d70ae
|
||||
sha512sums = cc066186702a7ae7f62bebb2454202330aa5efc96038ec6dd2d4c1ba52934bc06574dd7b955029e40aaccfd8c1db50e549dc89466690d5abab97efb56d8002c4
|
||||
sha512sums = e55fa05b54aad2e9f1b8b1e843c8c4dccfc718d100eb2a151193624c0f4614649aa1f92543a7201e11a569bd588c19be4b4a138e519f2ff2fe2d771058e933fd
|
||||
sha512sums = ea5eb3af74dcae5e9519ad106fcd439819563817f061b51c19ea464208519bed92dcd03ba63a3008b9a1df0076585cc29dfd1d381748e35687f2def71be89a76
|
||||
sha512sums = 5ab124adced31b637c221c9a7f1e646e8040fc95d2ffefd0e11fc649620189468f61cba134ed14ec935269a3dd4aed55f269055179972719398fa0170cd7572c
|
||||
sha512sums = 2b11ad2c240325ec60f7123473fdfef81947e4048ac3c97720d90857079667c27b3bc001d733c3c603b8cdd237b8f8ea8252644dec282733207d2a07c688c338
|
||||
sha512sums = 44f83faeffad1f60f472180f4de8b909ca4643b9bc8b76e3c159ac7ae6639f5b93f99fa991d06a108d937a296d0d379ff37d842fc4f6e37e3f045fbbfed9759c
|
||||
sha512sums = 7150f5b0d2a993ff17c29a9fd0e1bfa8057482457c4c10a7d49e5418b28a87e895a310366e6eb669a5b392fda5f3409e04217436b6ae7a71b6b2f76ab8327c09
|
||||
sha512sums = 9b24411fc63b5e9501a61fe26022f38dd33a721359053eea2ef653d866db06c454c17c2e66da0a26506b4db63e66b0917c1f1d140e5952a3c77073758ea97de6
|
||||
sha512sums = 8e9b50970e8464d18329234e268e19d3691960b821a3cdbdb757f1e1d8986f56b6d16565381bc6ff8c5028a1e200a868f05cc4b0099fe47c55707278884fd5f5
|
||||
sha512sums = d8e367167c60b6cb1c36e55bfda8373a2a0c8d10c64f65063b8b0b88893f4ca78d06a5a2fdf3351336c6657527dc989b70145c6cf0a6d20f558bbeaff08c98a0
|
||||
sha512sums = 9919b4f5d46f6f4e696df39d99d456a489bad2964ece66f7ec09b6bf91419c18d2b8ecc12304c0dffdd6d72fb5526521025f41d7f921cafde829ebc26a7ce47b
|
||||
sha512sums = 06716e27559c065c7c26d0a9d62c41592749ad6ba93a495532fc7852f07a55b87bd3c8039f324d34f658c37e06a55562e761e59ace85f783b3c8d65f405ae417
|
||||
sha512sums = 49a731e801008139089ba053cb2635bafe22826fcb6dcb4655a4848889d09113646d361a4bd07e07e89d0ef65ec0dfef130ae7f171172e3ec62558e67291603d
|
||||
sha512sums = 5bda67d2ddb392cad85efc96ec6d3aaf6b9632e0a8b47e475e84419116bed2392f8513383b2eab24d6675fc3b4fbce742c8ea442a5f8c849dbf1011b9e176699
|
||||
sha512sums = e40c5bc89e8efdff470ffd73acba673def11d219f3ad85b9d47c91b471c4c2ea4102bb979836f1bcd6c611aaf0a0ffe6d66f65aed94490f76c91b364c31667c1
|
||||
sha512sums = ea30d92deeac378fb0c287304a2c5beae40290f9e0b3afb5da5fe5187a9f4064be7704bc817b1f8c7625c54ee5ef5a794f95951abbac34a54ae6e00b09b4eb12
|
||||
sha512sums = 5d6038b5b931136476ce5a8a192e321d284331fe859e0303ef09b93a00c625ee9abcf8d62542d1d6285c2e3eb4a357085ecee50f83501cf38d870449b2071c3e
|
||||
sha512sums = 6be042890b5627e6d97d18bec888f380532d47578bf01e0c489279caf589abcf2b3804a8f51df2a6f6e6f523298842ec8369d6fc96d7a7460d09e5f4c4dba2a4
|
||||
sha512sums = 7e27b4fd95a463cf51c50f705154a84598742db3f9af08b2cec5735cdd7c47307b7bbe1146eaf06423c007352726568c7ff9d4671e265826cd66062aa77c2cfe
|
||||
sha512sums = 9381279cf31e4dea7a1694cc090041129abf3f1db804b2f37884e4c3fcfca2920c6fe3c325758299c674b7a52b6968d501878f5cc0b4109f854dd9b65421c571
|
||||
sha512sums = dd75c3433f50e7422a346cb9dbd9cebb7fe60244a60725814ba7c52d2c8c2bdac303af9cd54a7ed7181abfdd99af74c80c04249f7c7a2d0940d8529396590ba5
|
||||
sha512sums = 902188f6793cc2d69faff81f6ae4509873fff5d6f75d727de7f3de18c50e151fafa5152d719f4abb0d432f8f4963c331d8c6c055bf74a28a5d4894b416f53d1a
|
||||
sha512sums = 4999e722353991613cdfbf18c88415b2939a80f501e1feda5ff70950443933245667bc15b99a987937ed9d4611d3c4a6ee063e053c80556e04431f9e1851a4a7
|
||||
sha512sums = cd62da432c163d66f05c1009fdc4b750d62967e588bc208c43e4a560679d301623b46eff3800b29ed5be95558884910c2427724aec313ac3c1d0fe7f738af226
|
||||
sha512sums = 8f054372293c564b0bba96c8e471eaadfe73f002b20362ca203b30b93dc4efe67f734b4ee4f69ba9f3a1a550a55b49f82778e0029d56d8e6b78d3d1a1f4553a2
|
||||
sha512sums = 0000914b086840f707fa5a18b9c907373e9ad50efa85869d849f2865aa697da9a9b05608d24e003fa6ab6091d90fd772cf0683c6012ec207959e5de2dab7f376
|
||||
sha512sums = 20b6458fdd5c7dbc4d31c08351ecd578ac60926a2c3f6fa5b081f47d5f8bcb620a21c6f8a99427c8adfcd8db94c98898c13af5ada8f7cdd2d3d739179356b935
|
||||
sha512sums = 3759eb3d5603e6f626330e623b06dbcf429f922df8a8114d0e35d8f1507c4ea2ba70062c776a41c8fb60d8da7fec691618ae654167328db41e7b961581151a86
|
||||
sha512sums = 27c4983de51b43a247f95cf0824fcef242f9008e65c8aae0df8883ca3918f3cb928163a744f137ae27a81fca270e9ad563a996c6e743e96071cd1158d8508419
|
||||
sha512sums = 9ab4da7b76f4ff89edd1c9daf74362ad3d99427f7928f663002f86583a527945ab77bf2df2f492585a5eb3103607fc8948780e24f583856f793dad2fc3f649ef
|
||||
sha512sums = 1a2be6602eec4c6802d223257ece1110643f0ee6d3ee5bccd89ec9f814174e15aa18f71e80627d4f00ea7c96a931354cbe5a5a084faf628596fdabbf61dce988
|
||||
sha512sums = f5e6c124937f17690f70a2735cd1ab588cf4308495e980bb9e099a06105fc458abfe844e708f045ebb4babc02e8cccbac96a5c5b0820432afd433f92aa254059
|
||||
sha512sums = ce7a30486846a041f56a5d3c29ae19843541fef03b6f2f4db66dd2a97ee9962982c7617ca97e81c9c5fdff18f4ac671b328c2a109e92f99d17197e5216e7e341
|
||||
sha512sums = dd190d68f9ddd2e5768658813e2ed27d27e5c827fd1a04ba97a3aac5d68c306194f8e8a1333e2b86443e1b1fcad1235a24376d966e07a4463a3aa8f74bb372ef
|
||||
sha512sums = b2593ae44213021b8fcc7ee16881f35bae67b216c71a7fc8da461bd20757741a020cc4a4e46efdb3527ea93188d1e6667522f8d3cdeeee836d81be792e18868e
|
||||
sha512sums = 11a83d5945c24fe1e38c397939de2331934ba37f71169318f0a79fab9f0e2b5b302c8bfec7e9d77a0733cbda0524ed412760d588d304341bdd9f5e3f4ff5c932
|
||||
sha512sums = 6db1c445f57541dd3696583d33cfb91b235f93bde47374b85d5417ef721efc0fb6e757d08a5165aca90207c0158aab1319fc7e5445bdd3ea0b60735950b9c166
|
||||
sha512sums = 54bf217e9fdae93130a39bd3e56ce05df80aca734a0ed158b877e34661b777497b8011924f999a21d1e3bb2b7a8b914c1345ef45873d995a4d6302f209d1f89e
|
||||
sha512sums = c9c817a6f0039a06d3cf113769a70beb8fd5f3ceb659ab4f9809beff68ce5199152316ab30e7ea47d45cb13320da946d06e13fdc25605984ab802cb81e1e232b
|
||||
sha512sums = 473a0ad6c806f4471edd110af81dd831d07558987151f01a0ba61b728d8ca1da50bff82444e656d49a74835e480ef8ab8ddd411e634b09e1df74389f71e7d728
|
||||
sha512sums = a53dc0b51769377326c6adc48d831c96e69ada214a8c7757ab19e10d1e5b9dff155394ca2d4e09855553b14c615b0c780d227379c392b4377e1a506b739a6c1e
|
||||
sha512sums = 4280c7e46754cb52cd43edbd4ad99b93d3571162445376b2ae40da0e5c61ce973527dc3d9c9cf448d6abfb65f9572eff8eedeeb6b054ba56a3887e7139714427
|
||||
sha512sums = 88dba31e9b97a0a08b25eb23dabeff03461ad7370b4c1e03ab9164e75563ab1ef56b441be2393e93dba1aa8def83606ec02df348deac522752419943cdc13653
|
||||
sha512sums = 3592bd27185da919b7058c4610bf52d96bea27df0b834df47a14780929757dd06b57d5722b5275b51ad94873ce1d7e509b76e0057dd836b712cf2a5aef2de16d
|
||||
sha512sums = 7a2b1330a3b2a2341b66472404630bd785c8f0cb7f2efebe0c79a46d1f9ef7b3a7374e3e2daab03f41ddf74b30cd2fe0836afd2bd21a118f7466878577f1f0e2
|
||||
sha512sums = 6643055511d3c447423d112784dd882ec1ce95c1c5dee332aec14059b3653280f75cf4c44ce8c02b351ca284d8ab8562134e006c7233b1b1edc13376f4df69ee
|
||||
sha512sums = b73d979a71bd165c6682481112ec6527ed55790c800a62bba680b11ebfaad2bcc88beb4e236a2d76c019216261d384d4ddcf5e90021979f0025aa76c176ece14
|
||||
sha512sums = 8d6e8b5f1187de2d757d3731e59dbab6fd2508b683ff56e54bb649ecfb8ee7f49259d099ba0caf61e47cd4c0efb4a6b2d45d2051b07530d339bd44f1084cef6f
|
||||
sha512sums = 6658ada6661c08fa866f84d21b5e7fce3458f73e1852e3ed4a3fb3c2df2ce5f6a851631b4012608b8e96e80c2e4cf011640a198bfacdf20a95ae258e3ae889a5
|
||||
sha512sums = 1d3afa83c66cdc21452af795acd2b939cf01c618e9f546568dbe23b46b6d12d2efb13391a2d345dbe5ebc21873ff4761261076d33c6cb403db55f5c0a12a0f58
|
||||
sha512sums = 2881464e5ed8162c85437f694ec34d24cc5f71050e8bdfcee015a67baf0fd6b021834bdda7431ee5b70abac83483c4abdc3035e3a37e1efa62de6a3603fe42ca
|
||||
sha512sums = cb125cb4d1fb50aca7d74a021324d7cd7af58d208c697035d818b37957759e7aa4e8d51ea5a0ec6d97db5a79f79a8bc7a63ba9e68caa38c1bdff715fd51024b5
|
||||
sha512sums = 496f72274cfd75f0397286b05b72a3494e7adcdbc8ab1a25825d10423b72bc4390b39397e23c284835768bf1027def66721f1f2990c3819cc4de92e815400457
|
||||
sha512sums = ea0b3b5049b99fbb6ab55496aac3e763ea437457f86a7adad733624f32e358d15cd3eac2544b66505febfabe6803407652e1755e81b7240ec89a1f054567109b
|
||||
sha512sums = 8f9a790bb7542501eaa4803cb096e99f18fa4d8da9924568e8c222dda1ca9066393f8c6ff2fdc1a15418adfc79a275f4699216624514135b9a54bd63c2561f80
|
||||
sha512sums = dc054927be9f8c06fd0068585e86116b72b962e2a6968c8560c46dff07ce5cbd04d7e9e19ed9b5303aac2e3d3a638f6cb82262ef7aafba66cbf27b9d9321da28
|
||||
sha512sums = 08c0e52833a3dbd216fb1eb8c75b8b7f11ccfc056d7fdbd0143c910fcab25d58369d409df310e56e46cb849a57e9e7adde49e5956ba346067997d153445b8e89
|
||||
sha512sums = 5aca8e603932691e972e962eabec7e02dd37465b1dbaa1b9e6298a06d51384b4ffcb7a800356501b419c3382cb29a809f59c7920bd93c2e6e5785d73e5d27739
|
||||
sha512sums = 774e2460dfb8f95e2e9aa91f00647ea13403be5e936cbb102d77e23aeef3f153b5f5911edf825b2b0d9658e62500d8aef3b3c328720c7fd82cce29e2806c245f
|
||||
sha512sums = b6c75cce3207c0ccdd43a8235dd3f0d974d84ef094a9e876c373a9ea5ee4d8d95707770f6f76c0eb0bf049b0b262e7f0e52e9464e64bdca718af03fc46164362
|
||||
sha512sums = b12980e6d000d2da7ce5fcc4824bdb93e42aa32e9c9c45a45f303257be37b4a3b3f690f2715194fec60c129ff1b36a21ab0b2b14f2093b9e63254fe59a3bb9b5
|
||||
sha512sums = 4e5c4907412ae981e23958b0e6ef70f449ade93acfe3f224115d96eacf73a2c15f35e9ae6e7634a4377ad61b7a551ec72f19080cb68f340779afd62ad561da11
|
||||
sha512sums = 172897824011b1ba19fb9fa3ca8b0c0b81c5719d1239fea9d38effdfe83fb629eae783aee54b2c8605fde0f64d593c17e14702829ff4cada327c84db36bbc20d
|
||||
sha512sums = 01c108d7327f8f4c1d91abb7c8b6a24058dedf1faa5e563950baa82a1441dedfc8dc625204485f0c70a92d5b89fccb2c18874b3308d8e85c9bb655615513bb78
|
||||
sha512sums = e4296e037d22dc1aad7428a15a666cb379d49bb0b70a11ae0aa781207b9042ec829658526ada9606450bda8c0de9c66754ba0c14284996d5f1340969dcebbcbb
|
||||
sha512sums = 0bfff1c614c6b42beef6786e324b09671085496678e2aa9256a7c1756dd54f891414fb0ca50e286bfa785f47fccada295e65e6d7e8e95243dceea413d43e12a7
|
||||
sha512sums = 6472e145354e272c55f38b27eccc1941f236a30e6bb4ba00861331f3ed523e26ff1e7d9e624788cc659c0fd79efbe933a627baa4cbf21e09b38ccdba07e000d6
|
||||
sha512sums = 29c497da7b3e257afabdd0f3ae603cfb22278b28953c3047820a69cafe556e737aa1cac2a018c6e6420a47ea437b747b9ca8fe1a7db4ea92bf4fb36956bcd11d
|
||||
sha512sums = e138a6efe1418d5716c916965d33591f51bdaf300ed275ec3be645c5a4226a4d7d39f6af23198f0604d47cf8f50699be32d3d17c1037d9b63589491cf4e5da9f
|
||||
sha512sums = 3b7ee840d0d3dd58682a2718f04c8c8b720c7929fb71e23f595f5cc758a01fa39832b3b98d3ccb2e99dc8096d8dbd6f463a1bd9cbab8aab924b5f6be469b1ecb
|
||||
sha512sums = 6280f35b6fb70b80470ac689eb04e640286c34e1bdf2e7944c8df3d9c5f447099a6dc808c436085ed81684efc14109a1fd7b49f7b4ae38bf883e748cba6c5fd2
|
||||
sha512sums = 5c2a17110321e1ed8f0d53efd4b76ae29a81a678a163cb2d8747e5eb13a08ef39d51ec9835488e293f49d2651f8fe4d8a733a46609cd42d362b2aa945d6a9fe7
|
||||
sha512sums = b15fdc750416ae9a3de5dadbd9a0148b82a37cc8168f8c9b585d5102fa7a148dd3ea65fb1a6b78d7dc31eff57b4c41718c8b8f5901409ff8d739c798a7688bdf
|
||||
sha512sums = c7171b5d895adb73dcb1f36d3a72473ff5c670707bc58468be93955657c625cfd761e2ec9fa3ccc834b804ccaeabd0a7a2c1ca3b69d883f6a209fc4fdc178f6c
|
||||
sha512sums = bff17ec2cf68d5adaddaf0919b071a59c94033cc1fa237663fbeb9d40a7e46a1bbf4eedb0f34afe0d5f8b12aec7b7fd28dca3421947822d7b057d43d352970c1
|
||||
sha512sums = 4d04e092b6d846e514012348d19d71a9551599348a7f7cd06f01c9cbf980b2fe451fc2d05b04fc76cc0f4b69a8e827cce6b184cf5657e1cebb8f4694ed5c11f1
|
||||
sha512sums = 0ea7aad7884b1a9e00e73e9fb128d6263e0d495d4954f5df630853cf20e3f90e2d59ab1f2d71da3acf0be3eee7985c22328e965cd7e1dbe9876fe1b53157de30
|
||||
sha512sums = c2f629760ef77e57d8149bfb5ee10555f33461637473b93dde58f859c1bd7d2aab4e6dacee0fc75cc621c9304418ddb00eca6f40b11014d864db1f7ef991ffce
|
||||
sha512sums = bc8dbf28cd134dbe68da3370524477621eeb5af70ff9938b2c396c12e4379fbd119198bf7c9140fe8301b6afcbd15c7a73674de722aa874270d8de30ddc2e9f0
|
||||
sha512sums = 6f84a51318f973a3954b4655a2dfbd1c12e7cef91d69d623843e5a4037b3eb8ed841b56ac8551a07e1a6bd31cf2f6f87c20f2a1ff3ce117182116ed4dc3f1d89
|
||||
sha512sums = 6fa8b20c6caa15513c53fc0890c8074ae5e4e313f2ca4c55f70dc3d0c6f72d55a9c1c6a8fcee793b7516b222676ebe67ab5c6865e760322411a490291978bed5
|
||||
sha512sums = 94872f3b954fa99743bfc6f8c4814b75830a7e1eae7070b4f890d87ec77d64ee223417d45f17e3ea8def1bf08ca89b0a7f6a7e75e22c704e87ee82a8e38903c2
|
||||
sha512sums = 6d3e09544361db0dc25810e15c5106f51ddc8cdf75749c0aa3d8661196944615240b1454a418328a667dfeb223be59978ab10030b672efaa02be9d48bee7ca26
|
||||
sha512sums = d49fff9b47d0f70efd499a51d7f77713e5229ac00b95711e653a0ee059df0df1983aac5b43f2716b267ed2efe64bef688d81583d8d22eeff98124845a3fcf387
|
||||
sha512sums = 03ed70c173531b51243037fd6483e5d1cfc13c913922bf904089a7723143f62805ace58024bfcbc6cc3fe761c5dc7be75fda615f8f9274a9b8713b88891643b6
|
||||
|
||||
pkgname = firefox-esr
|
||||
|
||||
pkgname = firefox-esr-i18n-ach
|
||||
|
||||
pkgname = firefox-esr-i18n-af
|
||||
|
||||
pkgname = firefox-esr-i18n-an
|
||||
|
||||
pkgname = firefox-esr-i18n-ar
|
||||
|
||||
pkgname = firefox-esr-i18n-ast
|
||||
|
||||
pkgname = firefox-esr-i18n-az
|
||||
|
||||
pkgname = firefox-esr-i18n-be
|
||||
|
||||
pkgname = firefox-esr-i18n-bg
|
||||
|
||||
pkgname = firefox-esr-i18n-bn
|
||||
|
||||
pkgname = firefox-esr-i18n-br
|
||||
|
||||
pkgname = firefox-esr-i18n-bs
|
||||
|
||||
pkgname = firefox-esr-i18n-ca-valencia
|
||||
|
||||
pkgname = firefox-esr-i18n-ca
|
||||
|
||||
pkgname = firefox-esr-i18n-cak
|
||||
|
||||
pkgname = firefox-esr-i18n-cs
|
||||
|
||||
pkgname = firefox-esr-i18n-cy
|
||||
|
||||
pkgname = firefox-esr-i18n-da
|
||||
|
||||
pkgname = firefox-esr-i18n-de
|
||||
|
||||
pkgname = firefox-esr-i18n-dsb
|
||||
|
||||
pkgname = firefox-esr-i18n-el
|
||||
|
||||
pkgname = firefox-esr-i18n-en-ca
|
||||
|
||||
pkgname = firefox-esr-i18n-en-gb
|
||||
|
||||
pkgname = firefox-esr-i18n-en-us
|
||||
|
||||
pkgname = firefox-esr-i18n-eo
|
||||
|
||||
pkgname = firefox-esr-i18n-es-ar
|
||||
|
||||
pkgname = firefox-esr-i18n-es-cl
|
||||
|
||||
pkgname = firefox-esr-i18n-es-es
|
||||
|
||||
pkgname = firefox-esr-i18n-es-mx
|
||||
|
||||
pkgname = firefox-esr-i18n-et
|
||||
|
||||
pkgname = firefox-esr-i18n-eu
|
||||
|
||||
pkgname = firefox-esr-i18n-fa
|
||||
|
||||
pkgname = firefox-esr-i18n-ff
|
||||
|
||||
pkgname = firefox-esr-i18n-fi
|
||||
|
||||
pkgname = firefox-esr-i18n-fr
|
||||
|
||||
pkgname = firefox-esr-i18n-fy-nl
|
||||
|
||||
pkgname = firefox-esr-i18n-ga-ie
|
||||
|
||||
pkgname = firefox-esr-i18n-gd
|
||||
|
||||
pkgname = firefox-esr-i18n-gl
|
||||
|
||||
pkgname = firefox-esr-i18n-gn
|
||||
|
||||
pkgname = firefox-esr-i18n-gu-in
|
||||
|
||||
pkgname = firefox-esr-i18n-he
|
||||
|
||||
pkgname = firefox-esr-i18n-hi-in
|
||||
|
||||
pkgname = firefox-esr-i18n-hr
|
||||
|
||||
pkgname = firefox-esr-i18n-hsb
|
||||
|
||||
pkgname = firefox-esr-i18n-hu
|
||||
|
||||
pkgname = firefox-esr-i18n-hy-am
|
||||
|
||||
pkgname = firefox-esr-i18n-ia
|
||||
|
||||
pkgname = firefox-esr-i18n-id
|
||||
|
||||
pkgname = firefox-esr-i18n-is
|
||||
|
||||
pkgname = firefox-esr-i18n-it
|
||||
|
||||
pkgname = firefox-esr-i18n-ja
|
||||
|
||||
pkgname = firefox-esr-i18n-ka
|
||||
|
||||
pkgname = firefox-esr-i18n-kab
|
||||
|
||||
pkgname = firefox-esr-i18n-kk
|
||||
|
||||
pkgname = firefox-esr-i18n-km
|
||||
|
||||
pkgname = firefox-esr-i18n-kn
|
||||
|
||||
pkgname = firefox-esr-i18n-ko
|
||||
|
||||
pkgname = firefox-esr-i18n-lij
|
||||
|
||||
pkgname = firefox-esr-i18n-lt
|
||||
|
||||
pkgname = firefox-esr-i18n-lv
|
||||
|
||||
pkgname = firefox-esr-i18n-mk
|
||||
|
||||
pkgname = firefox-esr-i18n-mr
|
||||
|
||||
pkgname = firefox-esr-i18n-ms
|
||||
|
||||
pkgname = firefox-esr-i18n-my
|
||||
|
||||
pkgname = firefox-esr-i18n-nb-no
|
||||
|
||||
pkgname = firefox-esr-i18n-ne-np
|
||||
|
||||
pkgname = firefox-esr-i18n-nl
|
||||
|
||||
pkgname = firefox-esr-i18n-nn-no
|
||||
|
||||
pkgname = firefox-esr-i18n-oc
|
||||
|
||||
pkgname = firefox-esr-i18n-pa-in
|
||||
|
||||
pkgname = firefox-esr-i18n-pl
|
||||
|
||||
pkgname = firefox-esr-i18n-pt-br
|
||||
|
||||
pkgname = firefox-esr-i18n-pt-pt
|
||||
|
||||
pkgname = firefox-esr-i18n-rm
|
||||
|
||||
pkgname = firefox-esr-i18n-ro
|
||||
|
||||
pkgname = firefox-esr-i18n-ru
|
||||
|
||||
pkgname = firefox-esr-i18n-si
|
||||
|
||||
pkgname = firefox-esr-i18n-sk
|
||||
|
||||
pkgname = firefox-esr-i18n-sl
|
||||
|
||||
pkgname = firefox-esr-i18n-son
|
||||
|
||||
pkgname = firefox-esr-i18n-sq
|
||||
|
||||
pkgname = firefox-esr-i18n-sr
|
||||
|
||||
pkgname = firefox-esr-i18n-sv-se
|
||||
|
||||
pkgname = firefox-esr-i18n-ta
|
||||
|
||||
pkgname = firefox-esr-i18n-te
|
||||
|
||||
pkgname = firefox-esr-i18n-th
|
||||
|
||||
pkgname = firefox-esr-i18n-tl
|
||||
|
||||
pkgname = firefox-esr-i18n-tr
|
||||
|
||||
pkgname = firefox-esr-i18n-trs
|
||||
|
||||
pkgname = firefox-esr-i18n-uk
|
||||
|
||||
pkgname = firefox-esr-i18n-ur
|
||||
|
||||
pkgname = firefox-esr-i18n-uz
|
||||
|
||||
pkgname = firefox-esr-i18n-vi
|
||||
|
||||
pkgname = firefox-esr-i18n-xh
|
||||
|
||||
pkgname = firefox-esr-i18n-zh-cn
|
||||
|
||||
pkgname = firefox-esr-i18n-zh-tw
|
285
firefox-esr/PKGBUILD
Normal file
285
firefox-esr/PKGBUILD
Normal file
@ -0,0 +1,285 @@
|
||||
# POWER Maintainer: Alexander Baldeck <alex.bldck@gmail.com>
|
||||
# Maintainer: Dudemanguy <dudemanguy@artixlinux.org>
|
||||
# Contributor: Luna Jernberg <droidbittin@gmail.com>
|
||||
# Contributor: Jonathon Fernyhough <jonathon+m2x+dev>
|
||||
# Contributor: Figue <ffigue@gmail.com>
|
||||
# Contributor: Dct Mei <dctxmei@yandex.com>
|
||||
# Contributor: Felix Golatofski <contact@xdfr.de>
|
||||
# Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
|
||||
# Contributor: Ionut Biru <ibiru@archlinux.org>
|
||||
# Contributor: Jakub Schmidtke <sjakub@gmail.com>
|
||||
|
||||
pkgbase=firefox-esr
|
||||
pkgname=(firefox-esr)
|
||||
pkgver=115.9.1
|
||||
pkgrel=1
|
||||
pkgdesc="Standalone web browser from mozilla.org, Extended Support Release"
|
||||
arch=(x86_64 powerpc64le)
|
||||
license=(MPL GPL LGPL)
|
||||
url="https://www.mozilla.org/en-US/firefox/enterprise/"
|
||||
depends=(
|
||||
dbus
|
||||
ffmpeg
|
||||
gtk3
|
||||
libpulse
|
||||
libxss
|
||||
libxt
|
||||
mime-types
|
||||
nss
|
||||
ttf-font
|
||||
)
|
||||
makedepends=(
|
||||
cbindgen
|
||||
clang
|
||||
dbus-glib
|
||||
diffutils
|
||||
imake
|
||||
inetutils
|
||||
jack
|
||||
llvm
|
||||
mesa
|
||||
nasm
|
||||
nodejs-lts-iron
|
||||
python
|
||||
rust
|
||||
unzip
|
||||
wasi-compiler-rt
|
||||
wasi-libc
|
||||
wasi-libc++
|
||||
wasi-libc++abi
|
||||
xorg-server-xvfb
|
||||
zip
|
||||
)
|
||||
makedepends_powerpc64=(lld)
|
||||
makedepends_powerpc64le=(lld)
|
||||
makedepends_x86_64=(lld yasm)
|
||||
optdepends=('networkmanager: Location detection via available WiFi networks'
|
||||
'libnotify: Notification integration'
|
||||
'pulseaudio: Audio support'
|
||||
'speech-dispatcher: Text-to-Speech'
|
||||
'hunspell-en_US: Spell checking, American English'
|
||||
'xdg-desktop-portal: Screensharing with Wayland')
|
||||
options=(!emptydirs !makeflags !strip !lto !debug)
|
||||
source=(https://archive.mozilla.org/pub/firefox/releases/${pkgver}esr/source/firefox-${pkgver}esr.source.tar.xz{,.asc}
|
||||
$pkgname.desktop identity-icons-brand.svg
|
||||
power9-jit-744146.diff
|
||||
power9-jit-744147.diff
|
||||
power9-jit-744148.diff
|
||||
power9-jit-744150.diff
|
||||
power9-jit-744151.diff
|
||||
power9-jit-744152.diff
|
||||
power9-jit-744153.diff
|
||||
power9-jit-744154.diff
|
||||
power9-jit-744155.diff)
|
||||
|
||||
validpgpkeys=('14F26682D0916CDD81E37B6D61B7B526D98F0353') # Mozilla Software Releases <release@mozilla.com>
|
||||
|
||||
# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
|
||||
# Note: These are for Arch POWER use ONLY. For your own distribution, please
|
||||
# get your own set of keys. Feel free to contact alex.bldck@gmail.com for
|
||||
# more information.
|
||||
_google_api_key=AIzaSyDgkw4O3LM0Jnr2N7Wq2NG7iUVzRU5sBaA
|
||||
|
||||
# Mozilla API keys (see https://location.services.mozilla.com/api)
|
||||
# Note: These are for Arch POWER use ONLY. For your own distribution, please
|
||||
# get your own set of keys. Feel free to contact alex.bldck@gmail.com for
|
||||
# more information.
|
||||
_mozilla_api_key=de0473f2-d53f-46da-956c-6aff61bda3ab
|
||||
|
||||
prepare() {
|
||||
mkdir -p mozbuild
|
||||
cd firefox-$pkgver
|
||||
|
||||
echo "${noextract[@]}"
|
||||
|
||||
echo -n "$_google_api_key" >google-api-key
|
||||
echo -n "$_mozilla_api_key" >mozilla-api-key
|
||||
|
||||
# JIT enablement on powerpc64le provided for ESR by classilla
|
||||
# https://github.com/chmeeedalf/gecko-dev/issues/4
|
||||
patch -Np1 -i ${srcdir}/power9-jit-744146.diff
|
||||
patch -Np1 -i ${srcdir}/power9-jit-744147.diff
|
||||
patch -Np1 -i ${srcdir}/power9-jit-744148.diff
|
||||
patch -Np1 -i ${srcdir}/power9-jit-744150.diff
|
||||
patch -Np1 -i ${srcdir}/power9-jit-744151.diff
|
||||
patch -Np1 -i ${srcdir}/power9-jit-744152.diff
|
||||
patch -Np1 -i ${srcdir}/power9-jit-744153.diff
|
||||
patch -Np1 -i ${srcdir}/power9-jit-744154.diff
|
||||
patch -Np1 -i ${srcdir}/power9-jit-744155.diff
|
||||
|
||||
cat >../mozconfig <<END
|
||||
ac_add_options --enable-application=browser
|
||||
mk_add_options MOZ_OBJDIR=${PWD@Q}/obj
|
||||
|
||||
ac_add_options --prefix=/usr
|
||||
ac_add_options --enable-release
|
||||
ac_add_options --enable-hardening
|
||||
ac_add_options --enable-optimize
|
||||
ac_add_options --enable-rust-simd
|
||||
ac_add_options --disable-bootstrap
|
||||
ac_add_options --disable-debug
|
||||
|
||||
# Branding
|
||||
ac_add_options --enable-official-branding
|
||||
ac_add_options --enable-update-channel=release
|
||||
ac_add_options --with-distribution-id=org.archpower
|
||||
ac_add_options --with-unsigned-addon-scopes=app,system
|
||||
ac_add_options --allow-addon-sideload
|
||||
ac_add_options --with-app-name=$pkgname
|
||||
export MOZILLA_OFFICIAL=1
|
||||
export MOZ_APP_REMOTINGNAME=$pkgname
|
||||
export MOZ_APP_PROFILE="mozilla/firefox-esr"
|
||||
|
||||
# Keys
|
||||
ac_add_options --with-google-location-service-api-keyfile=${PWD@Q}/google-api-key
|
||||
ac_add_options --with-google-safebrowsing-api-keyfile=${PWD@Q}/google-api-key
|
||||
ac_add_options --with-mozilla-api-keyfile=${PWD@Q}/mozilla-api-key
|
||||
|
||||
# System libraries
|
||||
ac_add_options --with-system-nspr
|
||||
ac_add_options --with-system-nss
|
||||
|
||||
# Features
|
||||
ac_add_options --enable-alsa
|
||||
ac_add_options --enable-jack
|
||||
ac_add_options --disable-crashreporter
|
||||
ac_add_options --disable-updater
|
||||
ac_add_options --disable-tests
|
||||
END
|
||||
|
||||
case "${CARCH}" in
|
||||
powerpc64le)
|
||||
echo "export CC=${CHOST}-gcc" >> ../mozconfig
|
||||
echo "export CXX=${CHOST}-g++" >> ../mozconfig
|
||||
echo 'ac_add_options --enable-linker=bfd' >> ../mozconfig
|
||||
echo 'ac_add_options --enable-lto=full' >> ../mozconfig
|
||||
echo 'ac_add_options --without-wasm-sandboxed-libraries' >> ../mozconfig
|
||||
echo 'ac_add_options MOZ_PGO=1' >> ../mozconfig
|
||||
;;
|
||||
x86_64)
|
||||
echo 'ac_add_options --disable-elf-hack' >> ../mozconfig
|
||||
echo 'ac_add_options --enable-linker=lld' >> ../mozconfig
|
||||
echo 'ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot' >> ../mozconfig
|
||||
;;
|
||||
esac
|
||||
cat ../mozconfig
|
||||
}
|
||||
|
||||
build() {
|
||||
cd firefox-$pkgver
|
||||
|
||||
export MOZCONFIG="$srcdir/mozconfig"
|
||||
export MOZ_NOSPAM=1
|
||||
export MOZBUILD_STATE_PATH="$srcdir/mozbuild"
|
||||
export MOZ_ENABLE_FULL_SYMBOLS=1
|
||||
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=pip
|
||||
|
||||
export MOZ_BUILD_DATE=$(head -1 sourcestamp.txt)
|
||||
export RUSTFLAGS="-C debuginfo=1"
|
||||
export RUSTC_OPT_LEVEL=2
|
||||
|
||||
case "${CARCH}" in
|
||||
powerpc64le)
|
||||
export CC=${CHOST}-gcc
|
||||
export CXX=${CHOST}-g++
|
||||
;;
|
||||
esac
|
||||
|
||||
# LTO needs more open files
|
||||
ulimit -n 4096
|
||||
|
||||
xvfb-run -s "-screen 0 1920x1080x24 -nolisten local" \
|
||||
./mach build
|
||||
|
||||
#echo "Building symbol archive..."
|
||||
#xvfb-run -s "-screen 0 1920x1080x24 -nolisten local" \
|
||||
#./mach buildsymbols
|
||||
}
|
||||
|
||||
package_firefox-esr() {
|
||||
cd firefox-$pkgver
|
||||
DESTDIR="$pkgdir" ./mach install
|
||||
|
||||
local vendorjs="$pkgdir/usr/lib/$pkgname/browser/defaults/preferences/vendor.js"
|
||||
install -Dvm644 /dev/stdin "$vendorjs" <<END
|
||||
// Use LANG environment variable to choose locale
|
||||
pref("intl.locale.requested", "");
|
||||
|
||||
// Use system-provided dictionaries
|
||||
pref("spellchecker.dictionary_path", "/usr/share/hunspell");
|
||||
|
||||
// Disable default browser checking.
|
||||
pref("browser.shell.checkDefaultBrowser", false);
|
||||
|
||||
// Don't disable extensions in the application directory
|
||||
pref("extensions.autoDisableScopes", 11);
|
||||
END
|
||||
|
||||
local distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini"
|
||||
install -Dvm644 /dev/stdin "$distini" <<END
|
||||
[Global]
|
||||
id=archpower
|
||||
version=1.0
|
||||
about=Mozilla Firefox ESR for Arch POWER
|
||||
|
||||
[Preferences]
|
||||
app.distributor=archpower
|
||||
app.distributor.channel=$pkgname
|
||||
app.partner.archpower=archpower
|
||||
END
|
||||
|
||||
local i theme=official
|
||||
for i in 16 22 24 32 48 64 128 256; do
|
||||
install -Dvm644 browser/branding/$theme/default$i.png \
|
||||
"$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png"
|
||||
done
|
||||
install -Dvm644 browser/branding/$theme/content/about-logo.png \
|
||||
"$pkgdir/usr/share/icons/hicolor/192x192/apps/$pkgname.png"
|
||||
install -Dvm644 browser/branding/$theme/content/about-logo@2x.png \
|
||||
"$pkgdir/usr/share/icons/hicolor/384x384/apps/$pkgname.png"
|
||||
install -Dvm644 browser/branding/$theme/content/about-logo.svg \
|
||||
"$pkgdir/usr/share/icons/hicolor/scalable/apps/$pkgname.svg"
|
||||
install -Dvm644 ../identity-icons-brand.svg \
|
||||
"$pkgdir/usr/share/icons/hicolor/symbolic/apps/$pkgname-symbolic.svg"
|
||||
|
||||
install -Dvm644 ../$pkgname.desktop \
|
||||
"$pkgdir/usr/share/applications/$pkgname.desktop"
|
||||
|
||||
# Install a wrapper to avoid confusion about binary path
|
||||
install -Dvm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <<END
|
||||
#!/bin/sh
|
||||
exec /usr/lib/$pkgname/firefox-esr "\$@"
|
||||
END
|
||||
|
||||
# Replace duplicate binary with wrapper
|
||||
# https://bugzilla.mozilla.org/show_bug.cgi?id=658850
|
||||
ln -srfv "$pkgdir/usr/bin/$pkgname" "$pkgdir/usr/lib/$pkgname/firefox-bin"
|
||||
|
||||
# Use system certificates
|
||||
local nssckbi="$pkgdir/usr/lib/$pkgname/libnssckbi.so"
|
||||
if [[ -e $nssckbi ]]; then
|
||||
ln -srfv "$pkgdir/usr/lib/libnssckbi.so" "$nssckbi"
|
||||
fi
|
||||
|
||||
#export SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE="$startdir/.crash-stats-api.token"
|
||||
#if [[ -f $SOCORRO_SYMBOL_UPLOAD_TOKEN_FILE ]]; then
|
||||
# make -C obj uploadsymbols
|
||||
#else
|
||||
# cp -fvt "$startdir" obj/dist/*crashreporter-symbols-full.tar.zst
|
||||
#fi
|
||||
}
|
||||
|
||||
# vim:set sw=2 et:
|
||||
sha256sums=('23657808bfefb8ba33a191645d4df776d5b8d99d453edde32b785d2a8846f929'
|
||||
'SKIP'
|
||||
'c798853574da42bc22b066acb4b0bfdd630dc05b22560fcf0db9235b4207e051'
|
||||
'a9b8b4a0a1f4a7b4af77d5fc70c2686d624038909263c795ecc81e0aec7711e9'
|
||||
'7b98f766b632aab9c1247ecad0575b722fd8ff57ced3f5d8a9d2c8da6f6353d4'
|
||||
'75c96962ae0f1fffdd3e051bede12e7e0cdf2051c849cc7b03d462883a32bb39'
|
||||
'df2758a662f54270bf762e3afcb66b0ba287a56caf7d51202853ac6df81f4b1f'
|
||||
'76d8c2440c7c3acd4bd2542477f4ea2a67066e7642710d6f1c65c933ca042159'
|
||||
'05096b194379c68c8a8d8509d00dfb641859f52040c3771b337eca2ef1899f50'
|
||||
'3e2dfb0fe1602e8eba8d031a6477e07e112b6ed392a119c04bef07b5bf36739d'
|
||||
'd97aee7fd15ac27fe192eb3e412d3b0fb70427fed440e5b04525a487a55416b2'
|
||||
'abd67a5612bcb73a1fdf68753a076793deae609c26ff3adf21060cda610c363a'
|
||||
'6031f88d231b6f18c1ff482e364b3830b382b88365e11419092dcd2b81cb2817')
|
340
firefox-esr/firefox-esr.desktop
Normal file
340
firefox-esr/firefox-esr.desktop
Normal file
@ -0,0 +1,340 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=Firefox ESR
|
||||
GenericName=Web Browser
|
||||
GenericName[ar]=متصفح ويب
|
||||
GenericName[ast]=Restolador Web
|
||||
GenericName[bn]=ওয়েব ব্রাউজার
|
||||
GenericName[ca]=Navegador web
|
||||
GenericName[cs]=Webový prohlížeč
|
||||
GenericName[da]=Webbrowser
|
||||
GenericName[de]=Webbrowser
|
||||
GenericName[el]=Περιηγητής διαδικτύου
|
||||
GenericName[es]=Navegador web
|
||||
GenericName[et]=Veebibrauser
|
||||
GenericName[fa]=مرورگر اینترنتی
|
||||
GenericName[fi]=WWW-selain
|
||||
GenericName[fr]=Navigateur Web
|
||||
GenericName[gl]=Navegador Web
|
||||
GenericName[he]=דפדפן אינטרנט
|
||||
GenericName[hr]=Web preglednik
|
||||
GenericName[hu]=Webböngésző
|
||||
GenericName[it]=Browser web
|
||||
GenericName[ja]=ウェブ・ブラウザ
|
||||
GenericName[ko]=웹 브라우저
|
||||
GenericName[ku]=Geroka torê
|
||||
GenericName[lt]=Interneto naršyklė
|
||||
GenericName[nb]=Nettleser
|
||||
GenericName[nl]=Webbrowser
|
||||
GenericName[nn]=Nettlesar
|
||||
GenericName[no]=Nettleser
|
||||
GenericName[pl]=Przeglądarka WWW
|
||||
GenericName[pt]=Navegador Web
|
||||
GenericName[pt_BR]=Navegador Web
|
||||
GenericName[ro]=Navigator Internet
|
||||
GenericName[ru]=Веб-браузер
|
||||
GenericName[sk]=Internetový prehliadač
|
||||
GenericName[sl]=Spletni brskalnik
|
||||
GenericName[sv]=Webbläsare
|
||||
GenericName[tr]=Web Tarayıcı
|
||||
GenericName[ug]=توركۆرگۈ
|
||||
GenericName[uk]=Веб-браузер
|
||||
GenericName[vi]=Trình duyệt Web
|
||||
GenericName[zh_CN]=网络浏览器
|
||||
GenericName[zh_TW]=網路瀏覽器
|
||||
Comment=Browse the World Wide Web
|
||||
Comment[ar]=تصفح الشبكة العنكبوتية العالمية
|
||||
Comment[ast]=Restola pela Rede
|
||||
Comment[bn]=ইন্টারনেট ব্রাউজ করুন
|
||||
Comment[ca]=Navegueu per el web
|
||||
Comment[cs]=Prohlížení stránek World Wide Webu
|
||||
Comment[da]=Surf på internettet
|
||||
Comment[de]=Im Internet surfen
|
||||
Comment[el]=Μπορείτε να περιηγηθείτε στο διαδίκτυο (Web)
|
||||
Comment[es]=Navegue por la web
|
||||
Comment[et]=Lehitse veebi
|
||||
Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
|
||||
Comment[fi]=Selaa Internetin WWW-sivuja
|
||||
Comment[fr]=Naviguer sur le Web
|
||||
Comment[gl]=Navegar pola rede
|
||||
Comment[he]=גלישה ברחבי האינטרנט
|
||||
Comment[hr]=Pretražite web
|
||||
Comment[hu]=A világháló böngészése
|
||||
Comment[it]=Esplora il web
|
||||
Comment[ja]=ウェブを閲覧します
|
||||
Comment[ko]=웹을 돌아 다닙니다
|
||||
Comment[ku]=Li torê bigere
|
||||
Comment[lt]=Naršykite internete
|
||||
Comment[nb]=Surf på nettet
|
||||
Comment[nl]=Verken het internet
|
||||
Comment[nn]=Surf på nettet
|
||||
Comment[no]=Surf på nettet
|
||||
Comment[pl]=Przeglądanie stron WWW
|
||||
Comment[pt]=Navegue na Internet
|
||||
Comment[pt_BR]=Navegue na Internet
|
||||
Comment[ro]=Navigați pe Internet
|
||||
Comment[ru]=Доступ в Интернет
|
||||
Comment[sk]=Prehliadanie internetu
|
||||
Comment[sl]=Brskajte po spletu
|
||||
Comment[sv]=Surfa på webben
|
||||
Comment[tr]=İnternet'te Gezinin
|
||||
Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ
|
||||
Comment[uk]=Перегляд сторінок Інтернету
|
||||
Comment[vi]=Để duyệt các trang web
|
||||
Comment[zh_CN]=浏览互联网
|
||||
Comment[zh_TW]=瀏覽網際網路
|
||||
Keywords=Internet;WWW;Browser;Web;Explorer
|
||||
Keywords[ar]=انترنت;إنترنت;متصفح;ويب;وب
|
||||
Keywords[ast]=Internet;WWW;Restolador;Web;Esplorador
|
||||
Keywords[ca]=Internet;WWW;Navegador;Web;Explorador;Explorer
|
||||
Keywords[cs]=Internet;WWW;Prohlížeč;Web;Explorer
|
||||
Keywords[da]=Internet;Internettet;WWW;Browser;Browse;Web;Surf;Nettet
|
||||
Keywords[de]=Internet;WWW;Browser;Web;Explorer;Webseite;Site;surfen;online;browsen
|
||||
Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Περιηγητής;Firefox;Φιρεφοχ;Ιντερνετ
|
||||
Keywords[es]=Explorador;Internet;WWW
|
||||
Keywords[fi]=Internet;WWW;Browser;Web;Explorer;selain;Internet-selain;internetselain;verkkoselain;netti;surffaa
|
||||
Keywords[fr]=Internet;WWW;Browser;Web;Explorer;Fureteur;Surfer;Navigateur
|
||||
Keywords[he]=דפדפן;אינטרנט;רשת;אתרים;אתר;פיירפוקס;מוזילה;
|
||||
Keywords[hr]=Internet;WWW;preglednik;Web
|
||||
Keywords[hu]=Internet;WWW;Böngésző;Web;Háló;Net;Explorer
|
||||
Keywords[it]=Internet;WWW;Browser;Web;Navigatore
|
||||
Keywords[is]=Internet;WWW;Vafri;Vefur;Netvafri;Flakk
|
||||
Keywords[ja]=Internet;WWW;Web;インターネット;ブラウザ;ウェブ;エクスプローラ
|
||||
Keywords[nb]=Internett;WWW;Nettleser;Explorer;Web;Browser;Nettside
|
||||
Keywords[nl]=Internet;WWW;Browser;Web;Explorer;Verkenner;Website;Surfen;Online
|
||||
Keywords[pt]=Internet;WWW;Browser;Web;Explorador;Navegador
|
||||
Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorador;Navegador
|
||||
Keywords[ru]=Internet;WWW;Browser;Web;Explorer;интернет;браузер;веб;файрфокс;огнелис
|
||||
Keywords[sk]=Internet;WWW;Prehliadač;Web;Explorer
|
||||
Keywords[sl]=Internet;WWW;Browser;Web;Explorer;Brskalnik;Splet
|
||||
Keywords[tr]=İnternet;WWW;Tarayıcı;Web;Gezgin;Web sitesi;Site;sörf;çevrimiçi;tara
|
||||
Keywords[uk]=Internet;WWW;Browser;Web;Explorer;Інтернет;мережа;переглядач;оглядач;браузер;веб;файрфокс;вогнелис;перегляд
|
||||
Keywords[vi]=Internet;WWW;Browser;Web;Explorer;Trình duyệt;Trang web
|
||||
Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;网页;浏览;上网;火狐;Firefox;ff;互联网;网站;
|
||||
Keywords[zh_TW]=Internet;WWW;Browser;Web;Explorer;網際網路;網路;瀏覽器;上網;網頁;火狐
|
||||
Exec=/usr/lib/firefox-esr/firefox-esr %u
|
||||
Icon=firefox-esr
|
||||
Terminal=false
|
||||
X-MultipleArgs=false
|
||||
Type=Application
|
||||
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json;
|
||||
StartupNotify=true
|
||||
StartupWMClass=firefoxesr
|
||||
Categories=Network;WebBrowser;
|
||||
Actions=new-window;new-private-window;
|
||||
|
||||
[Desktop Action new-window]
|
||||
Name=New Window
|
||||
Name[ach]=Dirica manyen
|
||||
Name[af]=Nuwe venster
|
||||
Name[an]=Nueva finestra
|
||||
Name[ar]=نافذة جديدة
|
||||
Name[as]=নতুন উইন্ডো
|
||||
Name[ast]=Ventana nueva
|
||||
Name[az]=Yeni Pəncərə
|
||||
Name[be]=Новае акно
|
||||
Name[bg]=Нов прозорец
|
||||
Name[bn_BD]=নতুন উইন্ডো (N)
|
||||
Name[bn_IN]=নতুন উইন্ডো
|
||||
Name[br]=Prenestr nevez
|
||||
Name[brx]=गोदान उइन्ड'(N)
|
||||
Name[bs]=Novi prozor
|
||||
Name[ca]=Finestra nova
|
||||
Name[cak]=K'ak'a' tzuwäch
|
||||
Name[cs]=Nové okno
|
||||
Name[cy]=Ffenestr Newydd
|
||||
Name[da]=Nyt vindue
|
||||
Name[de]=Neues Fenster
|
||||
Name[dsb]=Nowe wokno
|
||||
Name[el]=Νέο παράθυρο
|
||||
Name[en_GB]=New Window
|
||||
Name[en_US]=New Window
|
||||
Name[en_ZA]=New Window
|
||||
Name[eo]=Nova fenestro
|
||||
Name[es_AR]=Nueva ventana
|
||||
Name[es_CL]=Nueva ventana
|
||||
Name[es_ES]=Nueva ventana
|
||||
Name[es_MX]=Nueva ventana
|
||||
Name[et]=Uus aken
|
||||
Name[eu]=Leiho berria
|
||||
Name[fa]=پنجره جدید
|
||||
Name[ff]=Henorde Hesere
|
||||
Name[fi]=Uusi ikkuna
|
||||
Name[fr]=Nouvelle fenêtre
|
||||
Name[fy_NL]=Nij finster
|
||||
Name[ga_IE]=Fuinneog Nua
|
||||
Name[gd]=Uinneag ùr
|
||||
Name[gl]=Nova xanela
|
||||
Name[gn]=Ovetã pyahu
|
||||
Name[gu_IN]=નવી વિન્ડો
|
||||
Name[he]=חלון חדש
|
||||
Name[hi_IN]=नया विंडो
|
||||
Name[hr]=Novi prozor
|
||||
Name[hsb]=Nowe wokno
|
||||
Name[hu]=Új ablak
|
||||
Name[hy_AM]=Նոր Պատուհան
|
||||
Name[id]=Jendela Baru
|
||||
Name[is]=Nýr gluggi
|
||||
Name[it]=Nuova finestra
|
||||
Name[ja]=新しいウィンドウ
|
||||
Name[ja_JP-mac]=新規ウインドウ
|
||||
Name[ka]=ახალი ფანჯარა
|
||||
Name[kk]=Жаңа терезе
|
||||
Name[km]=បង្អួចថ្មី
|
||||
Name[kn]=ಹೊಸ ಕಿಟಕಿ
|
||||
Name[ko]=새 창
|
||||
Name[kok]=नवें जनेल
|
||||
Name[ks]=نئئ وِنڈو
|
||||
Name[lij]=Neuvo barcon
|
||||
Name[lo]=ຫນ້າຕ່າງໃຫມ່
|
||||
Name[lt]=Naujas langas
|
||||
Name[ltg]=Jauns lūgs
|
||||
Name[lv]=Jauns logs
|
||||
Name[mai]=नव विंडो
|
||||
Name[mk]=Нов прозорец
|
||||
Name[ml]=പുതിയ ജാലകം
|
||||
Name[mr]=नवीन पटल
|
||||
Name[ms]=Tetingkap Baru
|
||||
Name[my]=ဝင်းဒိုးအသစ်
|
||||
Name[nb_NO]=Nytt vindu
|
||||
Name[ne_NP]=नयाँ सञ्झ्याल
|
||||
Name[nl]=Nieuw venster
|
||||
Name[nn_NO]=Nytt vindauge
|
||||
Name[or]=ନୂତନ ୱିଣ୍ଡୋ
|
||||
Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
|
||||
Name[pl]=Nowe okno
|
||||
Name[pt_BR]=Nova janela
|
||||
Name[pt_PT]=Nova janela
|
||||
Name[rm]=Nova fanestra
|
||||
Name[ro]=Fereastră nouă
|
||||
Name[ru]=Новое окно
|
||||
Name[sat]=नावा विंडो (N)
|
||||
Name[si]=නව කවුළුවක්
|
||||
Name[sk]=Nové okno
|
||||
Name[sl]=Novo okno
|
||||
Name[son]=Zanfun taaga
|
||||
Name[sq]=Dritare e Re
|
||||
Name[sr]=Нови прозор
|
||||
Name[sv_SE]=Nytt fönster
|
||||
Name[ta]=புதிய சாளரம்
|
||||
Name[te]=కొత్త విండో
|
||||
Name[th]=หน้าต่างใหม่
|
||||
Name[tr]=Yeni pencere
|
||||
Name[tsz]=Eraatarakua jimpani
|
||||
Name[uk]=Нове вікно
|
||||
Name[ur]=نیا دریچہ
|
||||
Name[uz]=Yangi oyna
|
||||
Name[vi]=Cửa sổ mới
|
||||
Name[wo]=Palanteer bu bees
|
||||
Name[xh]=Ifestile entsha
|
||||
Name[zh_CN]=新建窗口
|
||||
Name[zh_TW]=開新視窗
|
||||
Exec=/usr/lib/firefox-esr/firefox-esr --new-window %u
|
||||
|
||||
[Desktop Action new-private-window]
|
||||
Name=New Private Window
|
||||
Name[ach]=Dirica manyen me mung
|
||||
Name[af]=Nuwe privaatvenster
|
||||
Name[an]=Nueva finestra privada
|
||||
Name[ar]=نافذة خاصة جديدة
|
||||
Name[as]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[ast]=Ventana privada nueva
|
||||
Name[az]=Yeni Məxfi Pəncərə
|
||||
Name[be]=Новае акно адасаблення
|
||||
Name[bg]=Нов прозорец за поверително сърфиране
|
||||
Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
|
||||
Name[br]=Prenestr merdeiñ prevez nevez
|
||||
Name[brx]=गोदान प्राइभेट उइन्ड'
|
||||
Name[bs]=Novi privatni prozor
|
||||
Name[ca]=Finestra privada nova
|
||||
Name[cak]=K'ak'a' ichinan tzuwäch
|
||||
Name[cs]=Nové anonymní okno
|
||||
Name[cy]=Ffenestr Breifat Newydd
|
||||
Name[da]=Nyt privat vindue
|
||||
Name[de]=Neues privates Fenster
|
||||
Name[dsb]=Nowe priwatne wokno
|
||||
Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
|
||||
Name[en_GB]=New Private Window
|
||||
Name[en_US]=New Private Window
|
||||
Name[en_ZA]=New Private Window
|
||||
Name[eo]=Nova privata fenestro
|
||||
Name[es_AR]=Nueva ventana privada
|
||||
Name[es_CL]=Nueva ventana privada
|
||||
Name[es_ES]=Nueva ventana privada
|
||||
Name[es_MX]=Nueva ventana privada
|
||||
Name[et]=Uus privaatne aken
|
||||
Name[eu]=Leiho pribatu berria
|
||||
Name[fa]=پنجره ناشناس جدید
|
||||
Name[ff]=Henorde Suturo Hesere
|
||||
Name[fi]=Uusi yksityinen ikkuna
|
||||
Name[fr]=Nouvelle fenêtre de navigation privée
|
||||
Name[fy_NL]=Nij priveefinster
|
||||
Name[ga_IE]=Fuinneog Nua Phríobháideach
|
||||
Name[gd]=Uinneag phrìobhaideach ùr
|
||||
Name[gl]=Nova xanela privada
|
||||
Name[gn]=Ovetã ñemi pyahu
|
||||
Name[gu_IN]=નવી ખાનગી વિન્ડો
|
||||
Name[he]=חלון פרטי חדש
|
||||
Name[hi_IN]=नयी निजी विंडो
|
||||
Name[hr]=Novi privatni prozor
|
||||
Name[hsb]=Nowe priwatne wokno
|
||||
Name[hu]=Új privát ablak
|
||||
Name[hy_AM]=Սկսել Գաղտնի դիտարկում
|
||||
Name[id]=Jendela Mode Pribadi Baru
|
||||
Name[is]=Nýr huliðsgluggi
|
||||
Name[it]=Nuova finestra anonima
|
||||
Name[ja]=新しいプライベートウィンドウ
|
||||
Name[ja_JP-mac]=新規プライベートウインドウ
|
||||
Name[ka]=ახალი პირადი ფანჯარა
|
||||
Name[kk]=Жаңа жекелік терезе
|
||||
Name[km]=បង្អួចឯកជនថ្មី
|
||||
Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
|
||||
Name[ko]=새 사생활 보호 모드
|
||||
Name[kok]=नवो खाजगी विंडो
|
||||
Name[ks]=نْو پرایوٹ وینڈو
|
||||
Name[lij]=Nêuvo barcón privòu
|
||||
Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
|
||||
Name[lt]=Naujas privataus naršymo langas
|
||||
Name[ltg]=Jauns privatais lūgs
|
||||
Name[lv]=Jauns privātais logs
|
||||
Name[mai]=नया निज विंडो (W)
|
||||
Name[mk]=Нов приватен прозорец
|
||||
Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
|
||||
Name[mr]=नवीन वैयक्तिक पटल
|
||||
Name[ms]=Tetingkap Persendirian Baharu
|
||||
Name[my]=New Private Window
|
||||
Name[nb_NO]=Nytt privat vindu
|
||||
Name[ne_NP]=नयाँ निजी सञ्झ्याल
|
||||
Name[nl]=Nieuw privévenster
|
||||
Name[nn_NO]=Nytt privat vindauge
|
||||
Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
|
||||
Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
|
||||
Name[pl]=Nowe okno prywatne
|
||||
Name[pt_BR]=Nova janela privativa
|
||||
Name[pt_PT]=Nova janela privada
|
||||
Name[rm]=Nova fanestra privata
|
||||
Name[ro]=Fereastră privată nouă
|
||||
Name[ru]=Новое приватное окно
|
||||
Name[sat]=नावा निजेराक् विंडो (W )
|
||||
Name[si]=නව පුද්ගලික කවුළුව (W)
|
||||
Name[sk]=Nové okno v režime Súkromné prehliadanie
|
||||
Name[sl]=Novo zasebno okno
|
||||
Name[son]=Sutura zanfun taaga
|
||||
Name[sq]=Dritare e Re Private
|
||||
Name[sr]=Нови приватан прозор
|
||||
Name[sv_SE]=Nytt privat fönster
|
||||
Name[ta]=புதிய தனிப்பட்ட சாளரம்
|
||||
Name[te]=కొత్త ఆంతరంగిక విండో
|
||||
Name[th]=หน้าต่างส่วนตัวใหม่
|
||||
Name[tr]=Yeni gizli pencere
|
||||
Name[tsz]=Juchiiti eraatarakua jimpani
|
||||
Name[uk]=Приватне вікно
|
||||
Name[ur]=نیا نجی دریچہ
|
||||
Name[uz]=Yangi maxfiy oyna
|
||||
Name[vi]=Cửa sổ riêng tư mới
|
||||
Name[wo]=Panlanteeru biir bu bees
|
||||
Name[xh]=Ifestile yangasese entsha
|
||||
Name[zh_CN]=新建隐私浏览窗口
|
||||
Name[zh_TW]=新增隱私視窗
|
||||
Exec=/usr/lib/firefox-esr/firefox-esr --private-window %u
|
3
firefox-esr/identity-icons-brand.svg
Normal file
3
firefox-esr/identity-icons-brand.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
|
||||
<path fill="context-fill" fill-opacity="context-fill-opacity" d="M15.424 5.366A4.384 4.384 0 0 0 13.817 3.4a7.893 7.893 0 0 1 .811 2.353v.017c-.9-2.185-2.441-3.066-3.7-4.984l-.189-.3c-.035-.059-.063-.112-.088-.161a1.341 1.341 0 0 1-.119-.306.022.022 0 0 0-.013-.019.026.026 0 0 0-.019 0h-.006a5.629 5.629 0 0 0-2.755 4.308c.094-.006.187-.014.282-.014a4.069 4.069 0 0 1 3.51 1.983A2.838 2.838 0 0 0 9.6 5.824a3.2 3.2 0 0 1-1.885 6.013 3.651 3.651 0 0 1-1.042-.2c-.078-.028-.157-.059-.235-.093-.046-.02-.091-.04-.135-.062A3.282 3.282 0 0 1 4.415 8.95s.369-1.334 2.647-1.334a1.91 1.91 0 0 0 .964-.857 12.756 12.756 0 0 1-1.941-1.118c-.29-.277-.428-.411-.551-.511-.066-.054-.128-.1-.207-.152a3.481 3.481 0 0 1-.022-1.894 5.915 5.915 0 0 0-1.929 1.442A4.108 4.108 0 0 1 3.1 2.584a1.561 1.561 0 0 0-.267.138 5.767 5.767 0 0 0-.783.649 6.9 6.9 0 0 0-.748.868 6.446 6.446 0 0 0-1.08 2.348c0 .009-.076.325-.131.715l-.025.182c-.019.117-.033.245-.048.444v.023c-.005.076-.011.16-.016.258v.04A7.884 7.884 0 0 0 8.011 16a7.941 7.941 0 0 0 7.9-6.44l.036-.3a7.724 7.724 0 0 0-.523-3.894z" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
26140
firefox-esr/power9-jit-744146.diff
Normal file
26140
firefox-esr/power9-jit-744146.diff
Normal file
File diff suppressed because it is too large
Load Diff
2681
firefox-esr/power9-jit-744147.diff
Normal file
2681
firefox-esr/power9-jit-744147.diff
Normal file
File diff suppressed because it is too large
Load Diff
488
firefox-esr/power9-jit-744148.diff
Normal file
488
firefox-esr/power9-jit-744148.diff
Normal file
@ -0,0 +1,488 @@
|
||||
# HG changeset patch
|
||||
# User Cameron Kaiser <spectre@floodgap.com>
|
||||
# Date 1694573058 25200
|
||||
# Tue Sep 12 19:44:18 2023 -0700
|
||||
# Node ID e3eda281a1dc739c862eb38c795833595724cefc
|
||||
# Parent 671b771fd1de061e02f382e0cb20237d0e3a84a8
|
||||
builds links
|
||||
|
||||
diff -r 671b771fd1de -r e3eda281a1dc config/check_macroassembler_style.py
|
||||
--- a/config/check_macroassembler_style.py Tue Sep 12 10:27:52 2023 -0700
|
||||
+++ b/config/check_macroassembler_style.py Tue Sep 12 19:44:18 2023 -0700
|
||||
@@ -21,22 +21,22 @@
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
import difflib
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
architecture_independent = set(["generic"])
|
||||
-all_unsupported_architectures_names = set(["mips32", "mips64", "mips_shared"])
|
||||
+all_unsupported_architectures_names = set(["mips32", "mips64", "mips_shared", "ppc64"])
|
||||
all_architecture_names = set(
|
||||
- ["x86", "x64", "arm", "arm64", "loong64", "ppc64", "riscv64", "wasm32"]
|
||||
+ ["x86", "x64", "arm", "arm64", "loong64", "riscv64", "wasm32"]
|
||||
)
|
||||
all_shared_architecture_names = set(
|
||||
- ["x86_shared", "arm", "arm64", "loong64", "ppc64", "riscv64", "wasm32"]
|
||||
+ ["x86_shared", "arm", "arm64", "loong64", "riscv64", "wasm32"]
|
||||
)
|
||||
|
||||
reBeforeArg = "(?<=[(,\s])"
|
||||
reArgType = "(?P<type>[\w\s:*&<>]+)"
|
||||
reArgName = "(?P<name>\s\w+)"
|
||||
reArgDefault = "(?P<default>(?:\s=(?:(?:\s[\w:]+\(\))|[^,)]+))?)"
|
||||
reAfterArg = "(?=[,)])"
|
||||
reMatchArg = re.compile(reBeforeArg + reArgType + reArgName + reArgDefault + reAfterArg)
|
||||
diff -r 671b771fd1de -r e3eda281a1dc js/moz.configure
|
||||
--- a/js/moz.configure Tue Sep 12 10:27:52 2023 -0700
|
||||
+++ b/js/moz.configure Tue Sep 12 19:44:18 2023 -0700
|
||||
@@ -258,16 +258,18 @@
|
||||
if target.cpu == "aarch64":
|
||||
return namespace(arm64=True)
|
||||
elif target.cpu == "x86_64":
|
||||
return namespace(x64=True)
|
||||
elif target.cpu == "loongarch64":
|
||||
return namespace(loong64=True)
|
||||
elif target.cpu == "riscv64":
|
||||
return namespace(riscv64=True)
|
||||
+ elif target.cpu == "ppc64":
|
||||
+ return namespace(ppc64=True)
|
||||
|
||||
return namespace(**{str(target.cpu): True})
|
||||
|
||||
|
||||
set_config("JS_CODEGEN_NONE", jit_codegen.none)
|
||||
set_config("JS_CODEGEN_ARM", jit_codegen.arm)
|
||||
set_config("JS_CODEGEN_ARM64", jit_codegen.arm64)
|
||||
set_config("JS_CODEGEN_MIPS32", jit_codegen.mips32)
|
||||
@@ -281,17 +283,17 @@
|
||||
|
||||
set_define("JS_CODEGEN_NONE", jit_codegen.none)
|
||||
set_define("JS_CODEGEN_ARM", jit_codegen.arm)
|
||||
set_define("JS_CODEGEN_ARM64", jit_codegen.arm64)
|
||||
set_define("JS_CODEGEN_MIPS32", jit_codegen.mips32)
|
||||
set_define("JS_CODEGEN_MIPS64", jit_codegen.mips64)
|
||||
set_define("JS_CODEGEN_LOONG64", jit_codegen.loong64)
|
||||
set_define("JS_CODEGEN_RISCV64", jit_codegen.riscv64)
|
||||
-set_config("JS_CODEGEN_PPC64", jit_codegen.ppc64)
|
||||
+set_define("JS_CODEGEN_PPC64", jit_codegen.ppc64)
|
||||
set_define("JS_CODEGEN_X86", jit_codegen.x86)
|
||||
set_define("JS_CODEGEN_X64", jit_codegen.x64)
|
||||
set_define("JS_CODEGEN_WASM32", jit_codegen.wasm32)
|
||||
|
||||
|
||||
# Profiling
|
||||
# =======================================================
|
||||
option(
|
||||
diff -r 671b771fd1de -r e3eda281a1dc js/src/jit/CodeGenerator.cpp
|
||||
--- a/js/src/jit/CodeGenerator.cpp Tue Sep 12 10:27:52 2023 -0700
|
||||
+++ b/js/src/jit/CodeGenerator.cpp Tue Sep 12 19:44:18 2023 -0700
|
||||
@@ -12513,17 +12513,18 @@
|
||||
|
||||
// We're out-of-bounds. We only handle the index == initlength case.
|
||||
// If index > initializedLength, bail out. Note that this relies on the
|
||||
// condition flags sticking from the incoming branch.
|
||||
// Also note: this branch does not need Spectre mitigations, doing that for
|
||||
// the capacity check below is sufficient.
|
||||
Label allocElement, addNewElement;
|
||||
#if defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64) || \
|
||||
- defined(JS_CODEGEN_LOONG64) || defined(JS_CODEGEN_RISCV64)
|
||||
+ defined(JS_CODEGEN_LOONG64) || defined(JS_CODEGEN_RISCV64) || \
|
||||
+ defined(JS_CODEGEN_PPC64)
|
||||
// Had to reimplement for MIPS because there are no flags.
|
||||
bailoutCmp32(Assembler::NotEqual, initLength, index, ins->snapshot());
|
||||
#else
|
||||
bailoutIf(Assembler::NotEqual, ins->snapshot());
|
||||
#endif
|
||||
|
||||
// If index < capacity, we can add a dense element inline. If not, we need
|
||||
// to allocate more elements first.
|
||||
diff -r 671b771fd1de -r e3eda281a1dc js/src/jit/MacroAssembler.cpp
|
||||
--- a/js/src/jit/MacroAssembler.cpp Tue Sep 12 10:27:52 2023 -0700
|
||||
+++ b/js/src/jit/MacroAssembler.cpp Tue Sep 12 19:44:18 2023 -0700
|
||||
@@ -5183,17 +5183,17 @@
|
||||
ma_sll(temp1, temp1, temp3);
|
||||
#elif JS_CODEGEN_MIPS64
|
||||
ma_dsll(temp1, temp1, temp3);
|
||||
#elif JS_CODEGEN_LOONG64
|
||||
as_sll_d(temp1, temp1, temp3);
|
||||
#elif JS_CODEGEN_RISCV64
|
||||
sll(temp1, temp1, temp3);
|
||||
#elif JS_CODEGEN_PPC64
|
||||
- as_sld(temp1, temp1, temp3)
|
||||
+ as_sld(temp1, temp1, temp3);
|
||||
#elif JS_CODEGEN_WASM32
|
||||
MOZ_CRASH();
|
||||
#elif JS_CODEGEN_NONE
|
||||
MOZ_CRASH();
|
||||
#else
|
||||
# error "Unknown architecture"
|
||||
#endif
|
||||
|
||||
diff -r 671b771fd1de -r e3eda281a1dc js/src/jit/ppc64/Assembler-ppc64.h
|
||||
--- a/js/src/jit/ppc64/Assembler-ppc64.h Tue Sep 12 10:27:52 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/Assembler-ppc64.h Tue Sep 12 19:44:18 2023 -0700
|
||||
@@ -175,25 +175,30 @@
|
||||
static constexpr FloatRegister ReturnFloat32Reg = {FloatRegisters::f1,
|
||||
FloatRegisters::Single};
|
||||
static constexpr FloatRegister ReturnDoubleReg = {FloatRegisters::f1,
|
||||
FloatRegisters::Double};
|
||||
static constexpr FloatRegister ABINonArgDoubleReg = {FloatRegisters::f14,
|
||||
FloatRegisters::Double};
|
||||
static constexpr ValueOperand JSReturnOperand = ValueOperand(JSReturnReg);
|
||||
|
||||
-// Registers used in RegExpMatcher instruction (do not use JSReturnOperand).
|
||||
+// Registers used by RegExpMatcher and RegExpExecMatch stubs (do not use
|
||||
+// JSReturnOperand).
|
||||
static constexpr Register RegExpMatcherRegExpReg = CallTempReg0;
|
||||
static constexpr Register RegExpMatcherStringReg = CallTempReg1;
|
||||
static constexpr Register RegExpMatcherLastIndexReg = CallTempReg2;
|
||||
|
||||
-// Registers used in RegExpTester instruction (do not use ReturnReg).
|
||||
-static constexpr Register RegExpTesterRegExpReg = CallTempReg0;
|
||||
-static constexpr Register RegExpTesterStringReg = CallTempReg1;
|
||||
-static constexpr Register RegExpTesterLastIndexReg = CallTempReg2;
|
||||
+// Registers used by RegExpExecTest stub (do not use ReturnReg).
|
||||
+static constexpr Register RegExpExecTestRegExpReg = CallTempReg0;
|
||||
+static constexpr Register RegExpExecTestStringReg = CallTempReg1;
|
||||
+
|
||||
+// Registers used by RegExpSearcher stub (do not use ReturnReg).
|
||||
+static constexpr Register RegExpSearcherRegExpReg = CallTempReg0;
|
||||
+static constexpr Register RegExpSearcherStringReg = CallTempReg1;
|
||||
+static constexpr Register RegExpSearcherLastIndexReg = CallTempReg2;
|
||||
|
||||
// TLS pointer argument register for WebAssembly functions. This must not alias
|
||||
// any other register used for passing function arguments or return values.
|
||||
// Preserved by WebAssembly functions.
|
||||
static constexpr Register InstanceReg = r18;
|
||||
|
||||
// Registers used for wasm table calls. These registers must be disjoint
|
||||
// from the ABI argument registers, WasmTlsReg and each other.
|
||||
diff -r 671b771fd1de -r e3eda281a1dc js/src/jit/ppc64/CodeGenerator-ppc64.cpp
|
||||
--- a/js/src/jit/ppc64/CodeGenerator-ppc64.cpp Tue Sep 12 10:27:52 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/CodeGenerator-ppc64.cpp Tue Sep 12 19:44:18 2023 -0700
|
||||
@@ -1873,17 +1873,17 @@
|
||||
CodeGeneratorPPC64::toMoveOperand(LAllocation a) const
|
||||
{
|
||||
if (a.isGeneralReg())
|
||||
return MoveOperand(ToRegister(a));
|
||||
if (a.isFloatReg()) {
|
||||
return MoveOperand(ToFloatRegister(a));
|
||||
}
|
||||
MoveOperand::Kind kind =
|
||||
- a.isStackArea() ? MoveOperand::EFFECTIVE_ADDRESS : MoveOperand::MEMORY;
|
||||
+ a.isStackArea() ? MoveOperand::Kind::EffectiveAddress : MoveOperand::Kind::Memory;
|
||||
Address address = ToAddress(a);
|
||||
MOZ_ASSERT((address.offset & 3) == 0);
|
||||
return MoveOperand(address, kind);
|
||||
}
|
||||
|
||||
void
|
||||
CodeGenerator::visitMathD(LMathD* math)
|
||||
{
|
||||
diff -r 671b771fd1de -r e3eda281a1dc js/src/jit/ppc64/MacroAssembler-ppc64-inl.h
|
||||
--- a/js/src/jit/ppc64/MacroAssembler-ppc64-inl.h Tue Sep 12 10:27:52 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/MacroAssembler-ppc64-inl.h Tue Sep 12 19:44:18 2023 -0700
|
||||
@@ -369,16 +369,23 @@
|
||||
MacroAssembler::mulBy3(Register src, Register dest)
|
||||
{
|
||||
// I guess this *is* better than mulli.
|
||||
MOZ_ASSERT(src != ScratchRegister);
|
||||
as_add(ScratchRegister, src, src);
|
||||
as_add(dest, ScratchRegister, src);
|
||||
}
|
||||
|
||||
+void MacroAssembler::mulHighUnsigned32(Imm32 imm, Register src, Register dest) {
|
||||
+ MOZ_ASSERT(src != ScratchRegister);
|
||||
+ move32(imm, ScratchRegister);
|
||||
+ as_mulhw(dest, ScratchRegister, src);
|
||||
+ x_sldi(dest, dest, 32);
|
||||
+}
|
||||
+
|
||||
void
|
||||
MacroAssembler::inc64(AbsoluteAddress dest)
|
||||
{
|
||||
ma_li(SecondScratchReg, ImmWord(uintptr_t(dest.addr)));
|
||||
as_ld(ThirdScratchReg, SecondScratchReg, 0);
|
||||
as_addi(ScratchRegister, ThirdScratchReg, 1);
|
||||
as_std(ScratchRegister, SecondScratchReg, 0);
|
||||
}
|
||||
diff -r 671b771fd1de -r e3eda281a1dc js/src/jit/ppc64/MacroAssembler-ppc64.cpp
|
||||
--- a/js/src/jit/ppc64/MacroAssembler-ppc64.cpp Tue Sep 12 10:27:52 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/MacroAssembler-ppc64.cpp Tue Sep 12 19:44:18 2023 -0700
|
||||
@@ -5,27 +5,28 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "jit/ppc64/MacroAssembler-ppc64.h"
|
||||
|
||||
#include "mozilla/CheckedInt.h"
|
||||
#include "mozilla/DebugOnly.h"
|
||||
#include "mozilla/MathAlgorithms.h"
|
||||
|
||||
-#include <cmath>
|
||||
-
|
||||
+#include "jsmath.h"
|
||||
#include "jit/Bailouts.h"
|
||||
#include "jit/BaselineFrame.h"
|
||||
#include "jit/JitFrames.h"
|
||||
#include "jit/JitRuntime.h"
|
||||
#include "jit/MacroAssembler.h"
|
||||
#include "jit/MoveEmitter.h"
|
||||
#include "jit/SharedICRegisters.h"
|
||||
+#include "util/Memory.h"
|
||||
|
||||
#include "vm/JitActivation.h"
|
||||
+#include "vm/JSContext.h"
|
||||
#include "jit/MacroAssembler-inl.h"
|
||||
|
||||
using namespace js;
|
||||
using namespace jit;
|
||||
|
||||
using mozilla::Abs;
|
||||
using mozilla::CheckedInt;
|
||||
|
||||
@@ -1225,18 +1226,17 @@
|
||||
}
|
||||
void
|
||||
MacroAssemblerPPC64Compat::movePtr(wasm::SymbolicAddress imm, Register dest)
|
||||
{
|
||||
append(wasm::SymbolicAccess(CodeOffset(nextOffset().getOffset()), imm));
|
||||
ma_liPatchable(dest, ImmWord(-1));
|
||||
}
|
||||
|
||||
-CodeOffset MacroAssembler::moveNearAddressWithPatch(Register dest)
|
||||
-{
|
||||
+CodeOffset MacroAssembler::moveNearAddressWithPatch(Register dest) {
|
||||
return movWithPatch(ImmPtr(nullptr), dest);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::patchNearAddressMove(CodeLocationLabel loc,
|
||||
CodeLocationLabel target)
|
||||
{
|
||||
PatchDataWithValueCheck(loc, ImmPtr(target.raw()), ImmPtr(nullptr));
|
||||
@@ -2579,35 +2579,23 @@
|
||||
Label* label)
|
||||
{
|
||||
ADBlock();
|
||||
MOZ_ASSERT(cond == Assembler::Equal || cond == Assembler::NotEqual);
|
||||
Label done;
|
||||
branchTestGCThing(Assembler::NotEqual, value,
|
||||
cond == Assembler::Equal ? &done : label);
|
||||
|
||||
- if (temp != InvalidReg) {
|
||||
- unboxGCThingForGCBarrier(value, temp);
|
||||
- orPtr(Imm32(gc::ChunkMask), temp);
|
||||
- loadPtr(Address(temp, gc::ChunkStoreBufferOffsetFromLastByte), temp);
|
||||
- branchPtr(InvertCondition(cond), temp, ImmWord(0), label);
|
||||
- } else {
|
||||
- // Honey, Ion stole the temp register again. Get out the baseball
|
||||
- // bat, would you?
|
||||
- //
|
||||
- // Both constants are too large to be immediates.
|
||||
- unboxGCThingForGCBarrier(value, ScratchRegister);
|
||||
- ma_li(SecondScratchReg, gc::ChunkMask);
|
||||
- as_or(SecondScratchReg, ScratchRegister, SecondScratchReg);
|
||||
- ma_li(ScratchRegister, gc::ChunkStoreBufferOffsetFromLastByte);
|
||||
- as_add(SecondScratchReg, SecondScratchReg, ScratchRegister);
|
||||
- as_ld(ScratchRegister, SecondScratchReg, 0);
|
||||
- as_cmpdi(ScratchRegister, 0);
|
||||
- ma_bc(InvertCondition(cond), label);
|
||||
- }
|
||||
+ // getGCThingValueChunk uses r0 and may use r12.
|
||||
+ ScratchRegisterScope scratch2(*this);
|
||||
+
|
||||
+ getGCThingValueChunk(value, scratch2);
|
||||
+ loadPtr(Address(scratch2, gc::ChunkStoreBufferOffset), scratch2);
|
||||
+ branchPtr(InvertCondition(cond), scratch2, ImmWord(0), label);
|
||||
+
|
||||
bind(&done);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTestValue(Condition cond, const ValueOperand& lhs,
|
||||
const Value& rhs, Label* label)
|
||||
{
|
||||
ADBlock();
|
||||
@@ -4772,52 +4760,34 @@
|
||||
|
||||
addCodeLabel(cl);
|
||||
return retAddr;
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::loadStoreBuffer(Register ptr, Register buffer)
|
||||
{
|
||||
- if (ptr != buffer)
|
||||
- movePtr(ptr, buffer);
|
||||
- orPtr(Imm32(gc::ChunkMask), buffer);
|
||||
- loadPtr(Address(buffer, gc::ChunkStoreBufferOffsetFromLastByte), buffer);
|
||||
+ ma_and(buffer, ptr, Imm32(int32_t(~gc::ChunkMask)));
|
||||
+ loadPtr(Address(buffer, gc::ChunkStoreBufferOffset), buffer);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchPtrInNurseryChunk(Condition cond, Register ptr, Register temp,
|
||||
Label* label)
|
||||
{
|
||||
ADBlock();
|
||||
- MOZ_ASSERT(cond == Assembler::Equal || cond == Assembler::NotEqual);
|
||||
- MOZ_ASSERT(ptr != temp);
|
||||
- MOZ_ASSERT(ptr != SecondScratchReg);
|
||||
-
|
||||
- if (temp != InvalidReg) {
|
||||
- movePtr(ptr, temp);
|
||||
- orPtr(Imm32(gc::ChunkMask), temp);
|
||||
- branchPtr(InvertCondition(cond),
|
||||
- Address(temp, gc::ChunkStoreBufferOffsetFromLastByte),
|
||||
- ImmWord(0), label);
|
||||
- } else {
|
||||
- // Why, those cheapskates. We have to provide our own temp too?
|
||||
- // Did the bean counters cut our temp register budget this year?
|
||||
- // (Ion hits this.)
|
||||
- MOZ_ASSERT(ptr != ScratchRegister);
|
||||
-
|
||||
- // Both offsets are too big to be immediate displacements.
|
||||
- ma_li(ScratchRegister, gc::ChunkMask);
|
||||
- as_or(SecondScratchReg, ptr, ScratchRegister);
|
||||
- ma_li(ScratchRegister, gc::ChunkStoreBufferOffsetFromLastByte);
|
||||
- as_add(SecondScratchReg, SecondScratchReg, ScratchRegister);
|
||||
- as_ld(ScratchRegister, SecondScratchReg, 0);
|
||||
- as_cmpdi(ScratchRegister, 0);
|
||||
- ma_bc(InvertCondition(cond), label);
|
||||
- }
|
||||
+ MOZ_ASSERT(cond == Assembler::Equal || cond == Assembler::NotEqual);
|
||||
+ MOZ_ASSERT(ptr != temp);
|
||||
+ MOZ_ASSERT(ptr != ScratchRegister); // Both may be used internally.
|
||||
+ MOZ_ASSERT(temp != ScratchRegister);
|
||||
+ MOZ_ASSERT(temp != InvalidReg);
|
||||
+
|
||||
+ ma_and(temp, ptr, Imm32(int32_t(~gc::ChunkMask)));
|
||||
+ branchPtr(InvertCondition(cond), Address(temp, gc::ChunkStoreBufferOffset),
|
||||
+ ImmWord(0), label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::comment(const char* msg)
|
||||
{
|
||||
Assembler::comment(msg);
|
||||
}
|
||||
|
||||
diff -r 671b771fd1de -r e3eda281a1dc js/src/jit/ppc64/MacroAssembler-ppc64.h
|
||||
--- a/js/src/jit/ppc64/MacroAssembler-ppc64.h Tue Sep 12 10:27:52 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/MacroAssembler-ppc64.h Tue Sep 12 19:44:18 2023 -0700
|
||||
@@ -647,16 +647,31 @@
|
||||
void unboxGCThingForGCBarrier(const Address& src, Register dest) {
|
||||
loadPtr(src, dest);
|
||||
as_rldicl(dest, dest, 0, 64-JSVAL_TAG_SHIFT); // "clrldi"
|
||||
}
|
||||
void unboxGCThingForGCBarrier(const ValueOperand& src, Register dest) {
|
||||
as_rldicl(dest, src.valueReg(), 0, 64-JSVAL_TAG_SHIFT); // "clrldi"
|
||||
}
|
||||
|
||||
+ // Like unboxGCThingForGCBarrier, but loads the GC thing's chunk base.
|
||||
+ void getGCThingValueChunk(const Address& src, Register dest) {
|
||||
+// ScratchRegisterScope scratch(asMasm());
|
||||
+// MOZ_ASSERT(scratch != dest);
|
||||
+ MOZ_ASSERT(dest != ScratchRegister);
|
||||
+ loadPtr(src, dest);
|
||||
+ movePtr(ImmWord(JS::detail::ValueGCThingPayloadChunkMask), ScratchRegister);
|
||||
+ as_and(dest, dest, ScratchRegister);
|
||||
+ }
|
||||
+ void getGCThingValueChunk(const ValueOperand& src, Register dest) {
|
||||
+ MOZ_ASSERT(src.valueReg() != dest);
|
||||
+ movePtr(ImmWord(JS::detail::ValueGCThingPayloadChunkMask), dest);
|
||||
+ as_and(dest, dest, src.valueReg());
|
||||
+ }
|
||||
+
|
||||
void unboxInt32(const ValueOperand& operand, Register dest);
|
||||
void unboxInt32(Register src, Register dest);
|
||||
void unboxInt32(const Address& src, Register dest);
|
||||
void unboxInt32(const BaseIndex& src, Register dest);
|
||||
void unboxBoolean(const ValueOperand& operand, Register dest);
|
||||
void unboxBoolean(Register src, Register dest);
|
||||
void unboxBoolean(const Address& src, Register dest);
|
||||
void unboxBoolean(const BaseIndex& src, Register dest);
|
||||
@@ -835,16 +850,20 @@
|
||||
}
|
||||
void pushValue(JSValueType type, Register reg) {
|
||||
// Use SecondScratchReg as the temp since boxValue uses ScratchRegister
|
||||
// for the tag.
|
||||
boxValue(type, reg, SecondScratchReg);
|
||||
push(SecondScratchReg);
|
||||
}
|
||||
void pushValue(const Address& addr);
|
||||
+ void pushValue(const BaseIndex& addr, Register scratch) {
|
||||
+ loadValue(addr, ValueOperand(scratch));
|
||||
+ pushValue(ValueOperand(scratch));
|
||||
+ }
|
||||
|
||||
void handleFailureWithHandlerTail(Label* profilerExitTail, Label* bailoutTail);
|
||||
|
||||
/////////////////////////////////////////////////////////////////
|
||||
// Common interface.
|
||||
/////////////////////////////////////////////////////////////////
|
||||
public:
|
||||
// The following functions are exposed for use in platform-shared code.
|
||||
diff -r 671b771fd1de -r e3eda281a1dc js/src/jit/ppc64/Trampoline-ppc64.cpp
|
||||
--- a/js/src/jit/ppc64/Trampoline-ppc64.cpp Tue Sep 12 10:27:52 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/Trampoline-ppc64.cpp Tue Sep 12 19:44:18 2023 -0700
|
||||
@@ -1,28 +1,28 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
* vim: set ts=8 sts=4 et sw=4 tw=99:
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
-#include "mozilla/DebugOnly.h"
|
||||
-
|
||||
#include "jit/Bailouts.h"
|
||||
+#include "jit/BaselineFrame.h"
|
||||
+#include "jit/CalleeToken.h"
|
||||
#include "jit/JitFrames.h"
|
||||
-#include "jit/JitRealm.h"
|
||||
-#include "jit/JitSpewer.h"
|
||||
-#include "jit/Linker.h"
|
||||
-#include "jit/PerfSpewer.h"
|
||||
-#include "jit/ppc64/SharedICHelpers-ppc64.h"
|
||||
+#include "jit/JitRuntime.h"
|
||||
+#ifdef JS_ION_PERF
|
||||
+# include "jit/PerfSpewer.h"
|
||||
+#endif
|
||||
+#include "jit/ppc64/SharedICRegisters-ppc64.h"
|
||||
#include "jit/VMFunctions.h"
|
||||
-#include "vm/Realm.h"
|
||||
+#include "vm/JitActivation.h" // js::jit::JitActivation
|
||||
+#include "vm/JSContext.h"
|
||||
|
||||
#include "jit/MacroAssembler-inl.h"
|
||||
-#include "jit/SharedICHelpers-inl.h"
|
||||
|
||||
#if DEBUG
|
||||
|
||||
/* Useful class to print visual guard blocks. */
|
||||
class TrampolineAutoDeBlock
|
||||
{
|
||||
private:
|
||||
const char *blockname;
|
||||
@@ -891,17 +891,17 @@
|
||||
case VMFunctionData::WordByValue:
|
||||
if (f.argPassedInFloatReg(explicitArg))
|
||||
masm.passABIArg(MoveOperand(argsBase, argDisp), MoveOp::DOUBLE);
|
||||
else
|
||||
masm.passABIArg(MoveOperand(argsBase, argDisp), MoveOp::GENERAL);
|
||||
argDisp += sizeof(void*);
|
||||
break;
|
||||
case VMFunctionData::WordByRef:
|
||||
- masm.passABIArg(MoveOperand(argsBase, argDisp, MoveOperand::EFFECTIVE_ADDRESS),
|
||||
+ masm.passABIArg(MoveOperand(argsBase, argDisp, MoveOperand::Kind::EffectiveAddress),
|
||||
MoveOp::GENERAL);
|
||||
argDisp += sizeof(void*);
|
||||
break;
|
||||
case VMFunctionData::DoubleByValue:
|
||||
case VMFunctionData::DoubleByRef:
|
||||
MOZ_CRASH("NYI: PPC64 callVM no support for 128-bit values");
|
||||
break;
|
||||
}
|
146
firefox-esr/power9-jit-744150.diff
Normal file
146
firefox-esr/power9-jit-744150.diff
Normal file
@ -0,0 +1,146 @@
|
||||
# HG changeset patch
|
||||
# User Cameron Kaiser <spectre@floodgap.com>
|
||||
# Date 1694753553 25200
|
||||
# Thu Sep 14 21:52:33 2023 -0700
|
||||
# Node ID ba4e29926385c655d979fe4c3726f1bedbcc42b7
|
||||
# Parent 4311f1e4d21272333a719950b15b91a486687ee7
|
||||
passes blinterp and baseline except for wasm-containing tests
|
||||
|
||||
diff -r 4311f1e4d212 -r ba4e29926385 js/src/jit/ppc64/MacroAssembler-ppc64-inl.h
|
||||
--- a/js/src/jit/ppc64/MacroAssembler-ppc64-inl.h Thu Sep 14 20:18:54 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/MacroAssembler-ppc64-inl.h Thu Sep 14 21:52:33 2023 -0700
|
||||
@@ -1910,30 +1910,30 @@
|
||||
Label* label)
|
||||
{
|
||||
ma_bc(cond, lhs, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTruncateFloat32ToInt32(FloatRegister src, Register dest, Label* fail)
|
||||
{
|
||||
- MOZ_CRASH();
|
||||
+ truncDoubleToInt32(src, dest, fail);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchDouble(DoubleCondition cond, FloatRegister lhs, FloatRegister rhs,
|
||||
Label* label)
|
||||
{
|
||||
ma_bc(cond, lhs, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTruncateDoubleToInt32(FloatRegister src, Register dest, Label* fail)
|
||||
{
|
||||
- MOZ_CRASH();
|
||||
+ truncDoubleToInt32(src, dest, fail);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchMulPtr(Condition cond, Register src, Register dest, Label *overflow)
|
||||
{
|
||||
as_mulldo_rc(dest, src, dest);
|
||||
ma_bc(cond, overflow);
|
||||
}
|
||||
diff -r 4311f1e4d212 -r ba4e29926385 js/src/jit/ppc64/MacroAssembler-ppc64.cpp
|
||||
--- a/js/src/jit/ppc64/MacroAssembler-ppc64.cpp Thu Sep 14 20:18:54 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/MacroAssembler-ppc64.cpp Thu Sep 14 21:52:33 2023 -0700
|
||||
@@ -2579,22 +2579,19 @@
|
||||
Label* label)
|
||||
{
|
||||
ADBlock();
|
||||
MOZ_ASSERT(cond == Assembler::Equal || cond == Assembler::NotEqual);
|
||||
Label done;
|
||||
branchTestGCThing(Assembler::NotEqual, value,
|
||||
cond == Assembler::Equal ? &done : label);
|
||||
|
||||
- // getGCThingValueChunk uses r0 and may use r12.
|
||||
- ScratchRegisterScope scratch2(*this);
|
||||
-
|
||||
- getGCThingValueChunk(value, scratch2);
|
||||
- loadPtr(Address(scratch2, gc::ChunkStoreBufferOffset), scratch2);
|
||||
- branchPtr(InvertCondition(cond), scratch2, ImmWord(0), label);
|
||||
+ getGCThingValueChunk(value, SecondScratchReg);
|
||||
+ loadPtr(Address(SecondScratchReg, gc::ChunkStoreBufferOffset), ScratchRegister);
|
||||
+ branchPtr(InvertCondition(cond), ScratchRegister, ImmWord(0), label);
|
||||
|
||||
bind(&done);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchTestValue(Condition cond, const ValueOperand& lhs,
|
||||
const Value& rhs, Label* label)
|
||||
{
|
||||
diff -r 4311f1e4d212 -r ba4e29926385 js/src/jit/ppc64/Trampoline-ppc64.cpp
|
||||
--- a/js/src/jit/ppc64/Trampoline-ppc64.cpp Thu Sep 14 20:18:54 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/Trampoline-ppc64.cpp Thu Sep 14 21:52:33 2023 -0700
|
||||
@@ -297,22 +297,25 @@
|
||||
CodeLabel returnLabel;
|
||||
Label oomReturnLabel;
|
||||
{
|
||||
// Handle Interpreter -> Baseline OSR.
|
||||
AllocatableGeneralRegisterSet regs(GeneralRegisterSet::All());
|
||||
MOZ_ASSERT(!regs.has(FramePointer));
|
||||
regs.take(OsrFrameReg);
|
||||
regs.take(reg_code);
|
||||
+ MOZ_ASSERT(reg_code == ReturnReg); // regs.take(ReturnReg);
|
||||
+ MOZ_ASSERT(!regs.has(ReturnReg), "ReturnReg matches reg_code");
|
||||
+#if(0)
|
||||
// On Power reg_code and the ReturnReg are always aliased because of
|
||||
// ABI requirements. The first argument passed, the code pointer,
|
||||
// comes in r3, and the ABI requires that r3 be the return register.
|
||||
// Therefore, we don't implement the changes in bug 1770922.
|
||||
- MOZ_ASSERT(reg_code == ReturnReg); // regs.take(ReturnReg);
|
||||
regs.take(JSReturnOperand); // ???
|
||||
+#endif
|
||||
|
||||
Label notOsr;
|
||||
masm.ma_bc(OsrFrameReg, OsrFrameReg, ¬Osr, Assembler::Zero, ShortJump);
|
||||
|
||||
Register numStackValues = reg_values;
|
||||
regs.take(numStackValues);
|
||||
Register scratch = regs.takeAny();
|
||||
|
||||
@@ -765,22 +768,22 @@
|
||||
}
|
||||
|
||||
static void
|
||||
GenerateBailoutThunk(MacroAssembler& masm, Label* bailoutTail)
|
||||
{
|
||||
PushBailoutFrame(masm, r3);
|
||||
|
||||
// Put pointer to BailoutInfo.
|
||||
- static const uint32_t sizeOfBailoutInfo = sizeof(uintptr_t) * 2;
|
||||
+ static const uint32_t sizeOfBailoutInfo = sizeof(uintptr_t); // * 2;
|
||||
masm.subPtr(Imm32(sizeOfBailoutInfo), StackPointer);
|
||||
masm.movePtr(StackPointer, r4);
|
||||
|
||||
using Fn = bool (*)(BailoutStack * sp, BaselineBailoutInfo * *info);
|
||||
- masm.setupAlignedABICall();
|
||||
+ masm.setupUnalignedABICall(r5);
|
||||
masm.passABIArg(r3);
|
||||
masm.passABIArg(r4);
|
||||
masm.callWithABI<Fn, Bailout>(MoveOp::GENERAL,
|
||||
CheckUnsafeCallWithABI::DontCheckOther);
|
||||
|
||||
// Get BailoutInfo pointer.
|
||||
masm.loadPtr(Address(StackPointer, 0), r5);
|
||||
|
||||
@@ -986,16 +989,17 @@
|
||||
ADBlock("generatePreBarrier");
|
||||
|
||||
uint32_t offset = startTrampolineCode(masm);
|
||||
|
||||
MOZ_ASSERT(PreBarrierReg == r4);
|
||||
Register temp1 = r3;
|
||||
Register temp2 = r5;
|
||||
Register temp3 = r6;
|
||||
+ // TODO: could be more efficient with multipush/pop
|
||||
masm.push(temp1);
|
||||
masm.push(temp2);
|
||||
masm.push(temp3);
|
||||
|
||||
Label noBarrier;
|
||||
masm.emitPreBarrierFastPath(cx->runtime(), type, temp1, temp2, temp3, &noBarrier);
|
||||
|
||||
// Call into C++ to mark this GC thing.
|
195
firefox-esr/power9-jit-744151.diff
Normal file
195
firefox-esr/power9-jit-744151.diff
Normal file
@ -0,0 +1,195 @@
|
||||
# HG changeset patch
|
||||
# User Cameron Kaiser <spectre@floodgap.com>
|
||||
# Date 1694807083 25200
|
||||
# Fri Sep 15 12:44:43 2023 -0700
|
||||
# Node ID 3ac07c6a65bceaeb75d59aafa7728388c31ea11d
|
||||
# Parent ba4e29926385c655d979fe4c3726f1bedbcc42b7
|
||||
PGO build stuff, hardcode ion off in test build
|
||||
|
||||
diff -r ba4e29926385 -r 3ac07c6a65bc build/moz.configure/lto-pgo.configure
|
||||
--- a/build/moz.configure/lto-pgo.configure Thu Sep 14 21:52:33 2023 -0700
|
||||
+++ b/build/moz.configure/lto-pgo.configure Fri Sep 15 12:44:43 2023 -0700
|
||||
@@ -81,17 +81,17 @@
|
||||
|
||||
@depends(c_compiler, pgo_profile_path, target_is_windows)
|
||||
@imports("multiprocessing")
|
||||
def pgo_flags(compiler, profdata, target_is_windows):
|
||||
if compiler.type == "gcc":
|
||||
return namespace(
|
||||
gen_cflags=["-fprofile-generate"],
|
||||
gen_ldflags=["-fprofile-generate"],
|
||||
- use_cflags=["-fprofile-use", "-fprofile-correction", "-Wcoverage-mismatch"],
|
||||
+ use_cflags=["-fprofile-use", "-fprofile-correction", "-Wno-coverage-mismatch"],
|
||||
use_ldflags=["-fprofile-use"],
|
||||
)
|
||||
|
||||
if compiler.type in ("clang-cl", "clang"):
|
||||
prefix = ""
|
||||
if compiler.type == "clang-cl":
|
||||
prefix = "/clang:"
|
||||
gen_ldflags = None
|
||||
diff -r ba4e29926385 -r 3ac07c6a65bc build/pgo/profileserver.py
|
||||
--- a/build/pgo/profileserver.py Thu Sep 14 21:52:33 2023 -0700
|
||||
+++ b/build/pgo/profileserver.py Fri Sep 15 12:44:43 2023 -0700
|
||||
@@ -82,19 +82,32 @@
|
||||
docroot=os.path.join(build.topsrcdir, "build", "pgo"),
|
||||
path_mappings=path_mappings,
|
||||
)
|
||||
httpd.start(block=False)
|
||||
|
||||
locations = ServerLocations()
|
||||
locations.add_host(host="127.0.0.1", port=PORT, options="primary,privileged")
|
||||
|
||||
- old_profraw_files = glob.glob("*.profraw")
|
||||
- for f in old_profraw_files:
|
||||
- os.remove(f)
|
||||
+ using_gcc = False
|
||||
+ try:
|
||||
+ if build.config_environment.substs.get('CC_TYPE') == 'gcc':
|
||||
+ using_gcc = True
|
||||
+ except BuildEnvironmentNotFoundException:
|
||||
+ pass
|
||||
+
|
||||
+ if using_gcc:
|
||||
+ for dirpath, _, filenames in os.walk('.'):
|
||||
+ for f in filenames:
|
||||
+ if f.endswith('.gcda'):
|
||||
+ os.remove(os.path.join(dirpath, f))
|
||||
+ else:
|
||||
+ old_profraw_files = glob.glob('*.profraw')
|
||||
+ for f in old_profraw_files:
|
||||
+ os.remove(f)
|
||||
|
||||
with TemporaryDirectory() as profilePath:
|
||||
# TODO: refactor this into mozprofile
|
||||
profile_data_dir = os.path.join(build.topsrcdir, "testing", "profiles")
|
||||
with open(os.path.join(profile_data_dir, "profiles.json"), "r") as fh:
|
||||
base_profiles = json.load(fh)["profileserver"]
|
||||
|
||||
prefpaths = [
|
||||
@@ -208,16 +221,20 @@
|
||||
|
||||
# Try to move the crash reports to the artifacts even if Firefox appears
|
||||
# to exit successfully, in case there's a crash that doesn't set the
|
||||
# return code to non-zero for some reason.
|
||||
if get_crashreports(profilePath, name="Firefox exited successfully?") != 0:
|
||||
print("Firefox exited successfully, but produced a crashreport")
|
||||
sys.exit(1)
|
||||
|
||||
+ print('Copying profile data....')
|
||||
+ os.system('pwd');
|
||||
+ os.system('tar cf profdata.tar.gz `find . -name "*.gcda"`; cd ..; tar xf instrumented/profdata.tar.gz;');
|
||||
+
|
||||
llvm_profdata = env.get("LLVM_PROFDATA")
|
||||
if llvm_profdata:
|
||||
profraw_files = glob.glob("*.profraw")
|
||||
if not profraw_files:
|
||||
print(
|
||||
"Could not find profraw files in the current directory: %s"
|
||||
% os.getcwd()
|
||||
)
|
||||
diff -r ba4e29926385 -r 3ac07c6a65bc js/xpconnect/src/XPCJSContext.cpp
|
||||
--- a/js/xpconnect/src/XPCJSContext.cpp Thu Sep 14 21:52:33 2023 -0700
|
||||
+++ b/js/xpconnect/src/XPCJSContext.cpp Fri Sep 15 12:44:43 2023 -0700
|
||||
@@ -895,18 +895,18 @@
|
||||
false);
|
||||
JS_SetGlobalJitCompilerOption(cx, JSJITCOMPILER_JIT_HINTS_ENABLE, false);
|
||||
sSelfHostedUseSharedMemory = false;
|
||||
} else {
|
||||
JS_SetGlobalJitCompilerOption(
|
||||
cx, JSJITCOMPILER_BASELINE_ENABLE,
|
||||
StaticPrefs::javascript_options_baselinejit_DoNotUseDirectly());
|
||||
JS_SetGlobalJitCompilerOption(
|
||||
- cx, JSJITCOMPILER_ION_ENABLE,
|
||||
- StaticPrefs::javascript_options_ion_DoNotUseDirectly());
|
||||
+ cx, JSJITCOMPILER_ION_ENABLE, false); // XXX
|
||||
+ //StaticPrefs::javascript_options_ion_DoNotUseDirectly());
|
||||
JS_SetGlobalJitCompilerOption(cx,
|
||||
JSJITCOMPILER_JIT_TRUSTEDPRINCIPALS_ENABLE,
|
||||
useJitForTrustedPrincipals);
|
||||
JS_SetGlobalJitCompilerOption(
|
||||
cx, JSJITCOMPILER_NATIVE_REGEXP_ENABLE,
|
||||
StaticPrefs::javascript_options_native_regexp_DoNotUseDirectly());
|
||||
// Only enable the jit hints cache for the content process to avoid
|
||||
// any possible jank or delays on the parent process.
|
||||
diff -r ba4e29926385 -r 3ac07c6a65bc modules/libpref/init/all.js
|
||||
--- a/modules/libpref/init/all.js Thu Sep 14 21:52:33 2023 -0700
|
||||
+++ b/modules/libpref/init/all.js Fri Sep 15 12:44:43 2023 -0700
|
||||
@@ -951,21 +951,21 @@
|
||||
// that are associated with other domains which have
|
||||
// user interaction (even if they don't have user
|
||||
// interaction directly).
|
||||
pref("privacy.purge_trackers.consider_entity_list", false);
|
||||
|
||||
pref("dom.event.contextmenu.enabled", true);
|
||||
|
||||
pref("javascript.enabled", true);
|
||||
-pref("javascript.options.asmjs", true);
|
||||
-pref("javascript.options.wasm", true);
|
||||
-pref("javascript.options.wasm_trustedprincipals", true);
|
||||
+pref("javascript.options.asmjs", false);
|
||||
+pref("javascript.options.wasm", false);
|
||||
+pref("javascript.options.wasm_trustedprincipals", false);
|
||||
pref("javascript.options.wasm_verbose", false);
|
||||
-pref("javascript.options.wasm_baselinejit", true);
|
||||
+pref("javascript.options.wasm_baselinejit", false);
|
||||
|
||||
pref("javascript.options.parallel_parsing", true);
|
||||
pref("javascript.options.source_pragmas", true);
|
||||
|
||||
pref("javascript.options.asyncstack", true);
|
||||
// Broadly capturing async stack data adds overhead that is only advisable for
|
||||
// developers, so we only enable it when the devtools are open, by default.
|
||||
pref("javascript.options.asyncstack_capture_debuggee_only", true);
|
||||
diff -r ba4e29926385 -r 3ac07c6a65bc third_party/libwebrtc/moz.build
|
||||
--- a/third_party/libwebrtc/moz.build Thu Sep 14 21:52:33 2023 -0700
|
||||
+++ b/third_party/libwebrtc/moz.build Fri Sep 15 12:44:43 2023 -0700
|
||||
@@ -675,17 +675,22 @@
|
||||
"/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/vector_math_avx2_gn",
|
||||
"/third_party/libwebrtc/modules/desktop_capture/desktop_capture_differ_sse2_gn"
|
||||
]
|
||||
|
||||
if CONFIG["CPU_ARCH"] == "ppc64" and CONFIG["MOZ_X11"] == "1" and CONFIG["OS_TARGET"] == "Linux":
|
||||
|
||||
DIRS += [
|
||||
"/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn",
|
||||
- "/third_party/libwebrtc/modules/desktop_capture/primitives_gn"
|
||||
+ "/third_party/libwebrtc/modules/desktop_capture/primitives_gn",
|
||||
+ "/third_party/libwebrtc/modules/portal/portal_gn",
|
||||
+ "/third_party/libwebrtc/third_party/drm/drm_gn",
|
||||
+ "/third_party/libwebrtc/third_party/gbm/gbm_gn",
|
||||
+ "/third_party/libwebrtc/third_party/libepoxy/libepoxy_gn",
|
||||
+ "/third_party/libwebrtc/third_party/pipewire/pipewire_gn"
|
||||
]
|
||||
|
||||
if CONFIG["CPU_ARCH"] == "riscv64" and CONFIG["MOZ_X11"] == "1" and CONFIG["OS_TARGET"] == "Linux":
|
||||
|
||||
DIRS += [
|
||||
"/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn",
|
||||
"/third_party/libwebrtc/modules/desktop_capture/primitives_gn"
|
||||
]
|
||||
diff -r ba4e29926385 -r 3ac07c6a65bc toolkit/components/terminator/nsTerminator.cpp
|
||||
--- a/toolkit/components/terminator/nsTerminator.cpp Thu Sep 14 21:52:33 2023 -0700
|
||||
+++ b/toolkit/components/terminator/nsTerminator.cpp Fri Sep 15 12:44:43 2023 -0700
|
||||
@@ -455,16 +455,21 @@
|
||||
// Defend against overflow
|
||||
crashAfterMS = INT32_MAX;
|
||||
} else {
|
||||
crashAfterMS *= scaleUp;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
+ // Disable watchdog for PGO train builds - writting profile information at
|
||||
+ // exit may take time and it is better to make build hang rather than
|
||||
+ // silently produce poorly performing binary.
|
||||
+ crashAfterMS = INT32_MAX;
|
||||
+
|
||||
UniquePtr<Options> options(new Options());
|
||||
// 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);
|
285
firefox-esr/power9-jit-744152.diff
Normal file
285
firefox-esr/power9-jit-744152.diff
Normal file
@ -0,0 +1,285 @@
|
||||
# HG changeset patch
|
||||
# User Cameron Kaiser <spectre@floodgap.com>
|
||||
# Date 1695240514 25200
|
||||
# Wed Sep 20 13:08:34 2023 -0700
|
||||
# Node ID bd8eea54a76bd887fd7741eb252ee8bc09bf79f2
|
||||
# Parent 3ac07c6a65bceaeb75d59aafa7728388c31ea11d
|
||||
Ion fixes
|
||||
|
||||
diff -r 3ac07c6a65bc -r bd8eea54a76b js/src/jit/JitFrames.cpp
|
||||
--- a/js/src/jit/JitFrames.cpp Fri Sep 15 12:44:43 2023 -0700
|
||||
+++ b/js/src/jit/JitFrames.cpp Wed Sep 20 13:08:34 2023 -0700
|
||||
@@ -1701,17 +1701,25 @@
|
||||
|
||||
case RValueAllocation::CST_NULL:
|
||||
return NullValue();
|
||||
|
||||
case RValueAllocation::DOUBLE_REG:
|
||||
return DoubleValue(fromRegister<double>(alloc.fpuReg()));
|
||||
|
||||
case RValueAllocation::ANY_FLOAT_REG:
|
||||
+#if defined(JS_CODEGEN_PPC64)
|
||||
+ // There is no (simple) way from the ISA to determine if an arbitrary
|
||||
+ // FPR contains a float or a double since the ISA treats them largely
|
||||
+ // synonymously, so the MachineState will always contain a double even
|
||||
+ // if it's encoding a float.
|
||||
+ return Float32Value((float)fromRegister<double>(alloc.fpuReg()));
|
||||
+#else
|
||||
return Float32Value(fromRegister<float>(alloc.fpuReg()));
|
||||
+#endif
|
||||
|
||||
case RValueAllocation::ANY_FLOAT_STACK:
|
||||
return Float32Value(ReadFrameFloat32Slot(fp_, alloc.stackOffset()));
|
||||
|
||||
case RValueAllocation::TYPED_REG:
|
||||
return FromTypedPayload(alloc.knownType(), fromRegister(alloc.reg2()));
|
||||
|
||||
case RValueAllocation::TYPED_STACK: {
|
||||
@@ -2316,20 +2324,21 @@
|
||||
uintptr_t* addr = state_.as<SafepointState>().addressOfRegister(reg);
|
||||
return *addr;
|
||||
}
|
||||
MOZ_CRASH("Invalid state");
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T MachineState::read(FloatRegister reg) const {
|
||||
-#if !defined(JS_CODEGEN_RISCV64)
|
||||
+#if !defined(JS_CODEGEN_RISCV64) && !defined(JS_CODEGEN_PPC64)
|
||||
MOZ_ASSERT(reg.size() == sizeof(T));
|
||||
#else
|
||||
// RISCV64 always store FloatRegister as 64bit.
|
||||
+ // So does Power ISA (see SnapshotIterator::allocationValue).
|
||||
MOZ_ASSERT(reg.size() == sizeof(double));
|
||||
#endif
|
||||
|
||||
#if !defined(JS_CODEGEN_NONE) && !defined(JS_CODEGEN_WASM32)
|
||||
if (state_.is<BailoutState>()) {
|
||||
uint32_t offset = reg.getRegisterDumpOffsetInBytes();
|
||||
MOZ_ASSERT((offset % sizeof(T)) == 0);
|
||||
MOZ_ASSERT((offset + sizeof(T)) <= sizeof(RegisterDump::FPUArray));
|
||||
diff -r 3ac07c6a65bc -r bd8eea54a76b js/src/jit/LIR.h
|
||||
--- a/js/src/jit/LIR.h Fri Sep 15 12:44:43 2023 -0700
|
||||
+++ b/js/src/jit/LIR.h Wed Sep 20 13:08:34 2023 -0700
|
||||
@@ -547,17 +547,17 @@
|
||||
static LDefinition BogusTemp() { return LDefinition(); }
|
||||
|
||||
Policy policy() const {
|
||||
return (Policy)((bits_ >> POLICY_SHIFT) & POLICY_MASK);
|
||||
}
|
||||
Type type() const { return (Type)((bits_ >> TYPE_SHIFT) & TYPE_MASK); }
|
||||
|
||||
static bool isFloatRegCompatible(Type type, FloatRegister reg) {
|
||||
-#ifdef JS_CODEGEN_RISCV64
|
||||
+#if defined(JS_CODEGEN_RISCV64) || defined(JS_CODEGEN_PPC64)
|
||||
if (type == FLOAT32 || type == DOUBLE) {
|
||||
return reg.isSingle() || reg.isDouble();
|
||||
}
|
||||
#else
|
||||
if (type == FLOAT32) {
|
||||
return reg.isSingle();
|
||||
}
|
||||
if (type == DOUBLE) {
|
||||
diff -r 3ac07c6a65bc -r bd8eea54a76b js/src/jit/ppc64/CodeGenerator-ppc64.cpp
|
||||
--- a/js/src/jit/ppc64/CodeGenerator-ppc64.cpp Fri Sep 15 12:44:43 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/CodeGenerator-ppc64.cpp Wed Sep 20 13:08:34 2023 -0700
|
||||
@@ -1364,18 +1364,17 @@
|
||||
MOZ_ASSERT(shift == 1);
|
||||
masm.x_srwi(tmp, lhs, 31);
|
||||
masm.add32(lhs, tmp);
|
||||
}
|
||||
|
||||
// Do the shift.
|
||||
masm.as_srawi(dest, tmp, shift);
|
||||
} else {
|
||||
- if (lhs != dest)
|
||||
- masm.move32(lhs, dest);
|
||||
+ masm.move32(lhs, dest);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CodeGenerator::visitModI(LModI* ins)
|
||||
{
|
||||
ADBlock();
|
||||
|
||||
@@ -1627,45 +1626,35 @@
|
||||
Register dest = ToRegister(ins->output());
|
||||
|
||||
if (rhs->isConstant()) {
|
||||
int32_t shift = ToInt32(rhs) & 0x1F;
|
||||
switch (ins->bitop()) {
|
||||
case JSOp::Lsh:
|
||||
if (shift)
|
||||
masm.x_slwi(dest, lhs, shift);
|
||||
- else if (dest != lhs)
|
||||
+ else
|
||||
masm.move32(lhs, dest);
|
||||
break;
|
||||
case JSOp::Rsh:
|
||||
if (shift)
|
||||
masm.as_srawi(dest, lhs, shift);
|
||||
- else if (dest != lhs)
|
||||
+ else
|
||||
masm.move32(lhs, dest);
|
||||
break;
|
||||
case JSOp::Ursh:
|
||||
if (shift) {
|
||||
masm.x_srwi(dest, lhs, shift);
|
||||
-#if(0)
|
||||
- } else if (ins->mir()->toUrsh()->fallible()) {
|
||||
+ } else {
|
||||
// x >>> 0 can overflow.
|
||||
- masm.as_extsw(ScratchRegister, lhs);
|
||||
- bailoutCmp32(Assembler::LessThan, ScratchRegister, Imm32(0), ins->snapshot());
|
||||
- } else {
|
||||
+ if (ins->mir()->toUrsh()->fallible()) {
|
||||
+ bailoutCmp32(Assembler::LessThan, lhs, Imm32(0), ins->snapshot());
|
||||
+ }
|
||||
masm.move32(lhs, dest);
|
||||
}
|
||||
-#else
|
||||
- } else {
|
||||
- // x >>> 0 can overflow.
|
||||
- if (ins->mir()->toUrsh()->fallible())
|
||||
- bailoutCmp32(Assembler::LessThan, lhs, Imm32(0), ins->snapshot());
|
||||
- if (dest != lhs)
|
||||
- masm.move32(lhs, dest);
|
||||
- }
|
||||
-#endif
|
||||
break;
|
||||
default:
|
||||
MOZ_CRASH("Unexpected shift op");
|
||||
}
|
||||
} else {
|
||||
// The shift amounts should be AND'ed into the 0-31 range.
|
||||
masm.as_andi_rc(dest, ToRegister(rhs), 0x1f);
|
||||
|
||||
@@ -1675,22 +1664,17 @@
|
||||
break;
|
||||
case JSOp::Rsh:
|
||||
masm.as_sraw(dest, lhs, dest);
|
||||
break;
|
||||
case JSOp::Ursh:
|
||||
masm.as_srw(dest, lhs, dest);
|
||||
if (ins->mir()->toUrsh()->fallible()) {
|
||||
// x >>> 0 can overflow.
|
||||
-#if(0)
|
||||
- masm.as_extsw(ScratchRegister, lhs);
|
||||
- bailoutCmp32(Assembler::LessThan, ScratchRegister, Imm32(0), ins->snapshot());
|
||||
-#else
|
||||
bailoutCmp32(Assembler::LessThan, dest, Imm32(0), ins->snapshot());
|
||||
-#endif
|
||||
}
|
||||
break;
|
||||
default:
|
||||
MOZ_CRASH("Unexpected shift op");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
diff -r 3ac07c6a65bc -r bd8eea54a76b js/src/jit/ppc64/MacroAssembler-ppc64-inl.h
|
||||
--- a/js/src/jit/ppc64/MacroAssembler-ppc64-inl.h Fri Sep 15 12:44:43 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/MacroAssembler-ppc64-inl.h Wed Sep 20 13:08:34 2023 -0700
|
||||
@@ -369,21 +369,29 @@
|
||||
MacroAssembler::mulBy3(Register src, Register dest)
|
||||
{
|
||||
// I guess this *is* better than mulli.
|
||||
MOZ_ASSERT(src != ScratchRegister);
|
||||
as_add(ScratchRegister, src, src);
|
||||
as_add(dest, ScratchRegister, src);
|
||||
}
|
||||
|
||||
+// This is used in MacroAssembler::loadInt32ToStringWithBase. Instead of
|
||||
+// letting us use our superior arithmetic instructions, the JIT has reduced
|
||||
+// us to faffing around with magic constants because that's what x86* does.
|
||||
+// This leads to sign extension hazards.
|
||||
void MacroAssembler::mulHighUnsigned32(Imm32 imm, Register src, Register dest) {
|
||||
MOZ_ASSERT(src != ScratchRegister);
|
||||
+ // Compensate for (likely) sign extension by always clearing upper bits.
|
||||
move32(imm, ScratchRegister);
|
||||
- as_mulhw(dest, ScratchRegister, src);
|
||||
- x_sldi(dest, dest, 32);
|
||||
+ as_rldicl(ScratchRegister, ScratchRegister, 0, 32); // "clrldi"
|
||||
+ // loadInt32ToStringWithBase expects what is effectively unsigned multiply.
|
||||
+ as_mulhwu(dest, ScratchRegister, src);
|
||||
+ // Clear upper bits again, as they are undefined by the spec.
|
||||
+ as_rldicl(dest, dest, 0, 32); // "clrldi"
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::inc64(AbsoluteAddress dest)
|
||||
{
|
||||
ma_li(SecondScratchReg, ImmWord(uintptr_t(dest.addr)));
|
||||
as_ld(ThirdScratchReg, SecondScratchReg, 0);
|
||||
as_addi(ScratchRegister, ThirdScratchReg, 1);
|
||||
diff -r 3ac07c6a65bc -r bd8eea54a76b js/src/jit/ppc64/MacroAssembler-ppc64.cpp
|
||||
--- a/js/src/jit/ppc64/MacroAssembler-ppc64.cpp Fri Sep 15 12:44:43 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/MacroAssembler-ppc64.cpp Wed Sep 20 13:08:34 2023 -0700
|
||||
@@ -4769,21 +4769,23 @@
|
||||
void
|
||||
MacroAssembler::branchPtrInNurseryChunk(Condition cond, Register ptr, Register temp,
|
||||
Label* label)
|
||||
{
|
||||
ADBlock();
|
||||
MOZ_ASSERT(cond == Assembler::Equal || cond == Assembler::NotEqual);
|
||||
MOZ_ASSERT(ptr != temp);
|
||||
MOZ_ASSERT(ptr != ScratchRegister); // Both may be used internally.
|
||||
- MOZ_ASSERT(temp != ScratchRegister);
|
||||
- MOZ_ASSERT(temp != InvalidReg);
|
||||
-
|
||||
- ma_and(temp, ptr, Imm32(int32_t(~gc::ChunkMask)));
|
||||
- branchPtr(InvertCondition(cond), Address(temp, gc::ChunkStoreBufferOffset),
|
||||
+ MOZ_ASSERT(ptr != SecondScratchReg);
|
||||
+ MOZ_ASSERT(temp != ScratchRegister); // probably unpossible
|
||||
+ MOZ_ASSERT(temp != SecondScratchReg);
|
||||
+ MOZ_ASSERT(gc::ChunkStoreBufferOffset < 32767);
|
||||
+
|
||||
+ ma_and(SecondScratchReg, ptr, Imm32(int32_t(~gc::ChunkMask)));
|
||||
+ branchPtr(InvertCondition(cond), Address(SecondScratchReg, gc::ChunkStoreBufferOffset),
|
||||
ImmWord(0), label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::comment(const char* msg)
|
||||
{
|
||||
Assembler::comment(msg);
|
||||
}
|
||||
diff -r 3ac07c6a65bc -r bd8eea54a76b js/src/wasm/WasmFrameIter.cpp
|
||||
--- a/js/src/wasm/WasmFrameIter.cpp Fri Sep 15 12:44:43 2023 -0700
|
||||
+++ b/js/src/wasm/WasmFrameIter.cpp Wed Sep 20 13:08:34 2023 -0700
|
||||
@@ -1286,17 +1286,33 @@
|
||||
#elif defined(JS_CODEGEN_ARM)
|
||||
if (offsetFromEntry == BeforePushRetAddr || codeRange->isThunk()) {
|
||||
// The return address is still in lr and fp holds the caller's fp.
|
||||
fixedPC = (uint8_t*)registers.lr;
|
||||
fixedFP = fp;
|
||||
AssertMatchesCallSite(fixedPC, fixedFP);
|
||||
} else
|
||||
#elif defined(JS_CODEGEN_PPC64)
|
||||
- MOZ_ASSERT(0);
|
||||
+ if (codeRange->isThunk()) {
|
||||
+ // The FarJumpIsland sequence temporarily scrambles LR.
|
||||
+ // Don't unwind to the caller.
|
||||
+ fixedPC = pc;
|
||||
+ fixedFP = fp;
|
||||
+ *unwoundCaller = false;
|
||||
+ AssertMatchesCallSite(
|
||||
+ Frame::fromUntaggedWasmExitFP(fp)->returnAddress(),
|
||||
+ Frame::fromUntaggedWasmExitFP(fp)->rawCaller());
|
||||
+ } else if (offsetFromEntry < PushedFP) {
|
||||
+ // On ppc64 we rely on register state instead of state saved on
|
||||
+ // stack until the wasm::Frame is completely built.
|
||||
+ // On entry the return address is in LR and fp holds the caller's fp.
|
||||
+ fixedPC = (uint8_t*)registers.lr;
|
||||
+ fixedFP = fp;
|
||||
+ AssertMatchesCallSite(fixedPC, fixedFP);
|
||||
+ } else
|
||||
#endif
|
||||
if (offsetFromEntry == PushedRetAddr || codeRange->isThunk()) {
|
||||
// The return address has been pushed on the stack but fp still
|
||||
// points to the caller's fp.
|
||||
fixedPC = sp[0];
|
||||
fixedFP = fp;
|
||||
AssertMatchesCallSite(fixedPC, fixedFP);
|
||||
} else if (offsetFromEntry == PushedFP) {
|
236
firefox-esr/power9-jit-744153.diff
Normal file
236
firefox-esr/power9-jit-744153.diff
Normal file
@ -0,0 +1,236 @@
|
||||
# HG changeset patch
|
||||
# User Cameron Kaiser <spectre@floodgap.com>
|
||||
# Date 1695318886 25200
|
||||
# Thu Sep 21 10:54:46 2023 -0700
|
||||
# Node ID 23890c8cfb6523602d62886442866799431e490d
|
||||
# Parent bd8eea54a76bd887fd7741eb252ee8bc09bf79f2
|
||||
clean up more fails and unfunk wasm
|
||||
|
||||
diff -r bd8eea54a76b -r 23890c8cfb65 js/src/builtin/TestingFunctions.cpp
|
||||
--- a/js/src/builtin/TestingFunctions.cpp Wed Sep 20 13:08:34 2023 -0700
|
||||
+++ b/js/src/builtin/TestingFunctions.cpp Thu Sep 21 10:54:46 2023 -0700
|
||||
@@ -455,16 +455,25 @@
|
||||
value = BooleanValue(true);
|
||||
#else
|
||||
value = BooleanValue(false);
|
||||
#endif
|
||||
if (!JS_SetProperty(cx, info, "riscv64", value)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
+#ifdef JS_CODEGEN_PPC64
|
||||
+ value = BooleanValue(true);
|
||||
+#else
|
||||
+ value = BooleanValue(false);
|
||||
+#endif
|
||||
+ if (!JS_SetProperty(cx, info, "ppc64", value)) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
#ifdef JS_SIMULATOR_RISCV64
|
||||
value = BooleanValue(true);
|
||||
#else
|
||||
value = BooleanValue(false);
|
||||
#endif
|
||||
if (!JS_SetProperty(cx, info, "riscv64-simulator", value)) {
|
||||
return false;
|
||||
}
|
||||
diff -r bd8eea54a76b -r 23890c8cfb65 js/src/jit-test/tests/gc/gcparam.js
|
||||
--- a/js/src/jit-test/tests/gc/gcparam.js Wed Sep 20 13:08:34 2023 -0700
|
||||
+++ b/js/src/jit-test/tests/gc/gcparam.js Thu Sep 21 10:54:46 2023 -0700
|
||||
@@ -25,17 +25,19 @@
|
||||
testGetParam("totalChunks");
|
||||
testGetParam("nurseryBytes");
|
||||
testGetParam("majorGCNumber");
|
||||
testGetParam("minorGCNumber");
|
||||
testGetParam("chunkBytes");
|
||||
testGetParam("helperThreadCount");
|
||||
|
||||
testChangeParam("maxBytes");
|
||||
-testChangeParam("minNurseryBytes", 16 * 1024);
|
||||
+// This cannot be lower than 64K due to 64K page systems, like some ppc64le
|
||||
+// machines in Linux.
|
||||
+testChangeParam("minNurseryBytes", 64 * 1024);
|
||||
testChangeParam("maxNurseryBytes", 1024 * 1024);
|
||||
testChangeParam("incrementalGCEnabled");
|
||||
testChangeParam("perZoneGCEnabled");
|
||||
testChangeParam("sliceTimeBudgetMS");
|
||||
testChangeParam("highFrequencyTimeLimit");
|
||||
testChangeParam("smallHeapSizeMax");
|
||||
testChangeParam("largeHeapSizeMin");
|
||||
testChangeParam("highFrequencySmallHeapGrowth");
|
||||
diff -r bd8eea54a76b -r 23890c8cfb65 js/src/jit-test/tests/gc/oomInRegExp2.js
|
||||
--- a/js/src/jit-test/tests/gc/oomInRegExp2.js Wed Sep 20 13:08:34 2023 -0700
|
||||
+++ b/js/src/jit-test/tests/gc/oomInRegExp2.js Thu Sep 21 10:54:46 2023 -0700
|
||||
@@ -1,5 +1,6 @@
|
||||
-// |jit-test| skip-if: !('oomTest' in this)
|
||||
+// |jit-test| skip-if: !('oomTest' in this) || getBuildConfiguration().ppc64
|
||||
+// On ppc64, this will never exhaust memory before timing out.
|
||||
|
||||
oomTest(() => assertEq("foobar\xff5baz\u1200".search(/bar\u0178\d/i), 3), {keepFailing: true});
|
||||
oomTest(() => assertEq((/(?!(?!(?!6)[\Wc]))/i).test(), false), {keepFailing: true});
|
||||
oomTest(() => assertEq((/bar\u0178\d/i).exec("foobar\xff5baz\u1200") != null, true), {keepFailing: true});
|
||||
diff -r bd8eea54a76b -r 23890c8cfb65 js/src/jit-test/tests/modules/bug1670236.js
|
||||
--- a/js/src/jit-test/tests/modules/bug1670236.js Wed Sep 20 13:08:34 2023 -0700
|
||||
+++ b/js/src/jit-test/tests/modules/bug1670236.js Thu Sep 21 10:54:46 2023 -0700
|
||||
@@ -1,6 +1,8 @@
|
||||
-// |jit-test| skip-if: !('oomTest' in this)
|
||||
+// |jit-test| skip-if: !('oomTest' in this) || getBuildConfiguration().ppc64
|
||||
+// On ppc64, this will never exhaust memory before timing out.
|
||||
+
|
||||
o0=r=/x/;
|
||||
this.toString=(function() {
|
||||
evaluate("",({ element:o0 }));
|
||||
})
|
||||
oomTest(String.prototype.charCodeAt,{ keepFailing:true })
|
||||
diff -r bd8eea54a76b -r 23890c8cfb65 js/src/jit-test/tests/promise/unhandled-rejections-oom.js
|
||||
--- a/js/src/jit-test/tests/promise/unhandled-rejections-oom.js Wed Sep 20 13:08:34 2023 -0700
|
||||
+++ b/js/src/jit-test/tests/promise/unhandled-rejections-oom.js Thu Sep 21 10:54:46 2023 -0700
|
||||
@@ -1,3 +1,4 @@
|
||||
-// |jit-test| allow-oom; skip-if: !('oomTest' in this)
|
||||
+// |jit-test| allow-oom; skip-if: !('oomTest' in this) || getBuildConfiguration().ppc64
|
||||
+// On ppc64, this will never exhaust memory before timing out.
|
||||
|
||||
oomTest(async function() {}, { keepFailing: true });
|
||||
diff -r bd8eea54a76b -r 23890c8cfb65 js/src/jit/ppc64/Architecture-ppc64.h
|
||||
--- a/js/src/jit/ppc64/Architecture-ppc64.h Wed Sep 20 13:08:34 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/Architecture-ppc64.h Thu Sep 21 10:54:46 2023 -0700
|
||||
@@ -12,24 +12,38 @@
|
||||
|
||||
#include "jit/shared/Architecture-shared.h"
|
||||
|
||||
#include "js/Utility.h"
|
||||
|
||||
namespace js {
|
||||
namespace jit {
|
||||
|
||||
-// Used to protect the stack from linkage area clobbers. Minimum size
|
||||
-// is 4 doublewords for SP, LR, CR and TOC.
|
||||
-static const uint32_t ShadowStackSpace = 32;
|
||||
+// Despite my hopes, this does not help protect Wasm Frames from ABI callouts
|
||||
+// unknowingly stomping on them expecting a regular linkage area; the "shadow
|
||||
+// stack space" that this allocates is actually allocated at *higher* addresses
|
||||
+// than the Frame. The Frame demands to be on top of the stack, but that's
|
||||
+// exactly where the linkage area is supposed to go, and everything assumes
|
||||
+// that the Frame will be exactly two pointers in size which defeats my earlier
|
||||
+// attempt to just add the linkage area to the Frame. (On top of that, Wasm GC
|
||||
+// won't let you nab more than 32 bytes anyway, the bare minimum space required
|
||||
+// for simply LR, TOC, CR and SP, and includes no parameter area.) Instead, for
|
||||
+// now we have to tediously pull down dummy frames on demand when calling out
|
||||
+// to heavy functions that are ABI-compliant. This also does nothing for the
|
||||
+// regular JIT, where periodically we need to do the same thing.
|
||||
+//
|
||||
+// See also MacroAssembler::call(wasm::SymbolicAddress) in
|
||||
+// MacroAssembler-ppc64.cpp.
|
||||
+static const uint32_t ShadowStackSpace = 0;
|
||||
+
|
||||
// The return address is in LR, not in memory/stack.
|
||||
static const uint32_t SizeOfReturnAddressAfterCall = 0u;
|
||||
|
||||
// Size of each bailout table entry.
|
||||
-// For PowerPC this is a single bl.
|
||||
+// For Power ISA this is a single bl.
|
||||
static const uint32_t BAILOUT_TABLE_ENTRY_SIZE = sizeof(void *);
|
||||
|
||||
// Range of an immediate jump (26 bit jumps). Take a fudge out in case.
|
||||
static constexpr uint32_t JumpImmediateRange = (32 * 1024 * 1024) - 32;
|
||||
|
||||
// GPRs.
|
||||
class Registers
|
||||
{
|
||||
diff -r bd8eea54a76b -r 23890c8cfb65 js/src/jit/ppc64/MacroAssembler-ppc64.cpp
|
||||
--- a/js/src/jit/ppc64/MacroAssembler-ppc64.cpp Wed Sep 20 13:08:34 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/MacroAssembler-ppc64.cpp Thu Sep 21 10:54:46 2023 -0700
|
||||
@@ -4621,18 +4621,36 @@
|
||||
|
||||
Assembler::WriteLoad64Instructions(inst, ScratchRegister, (uint64_t)offset);
|
||||
FlushICache(inst, sizeof(uint32_t) * 5);
|
||||
}
|
||||
|
||||
CodeOffset
|
||||
MacroAssembler::call(wasm::SymbolicAddress target)
|
||||
{
|
||||
+ ADBlock();
|
||||
+
|
||||
+ // This call is very likely to ABI compliant code. Since this is coming
|
||||
+ // from Wasm and Wasm Frames sit on the top of the stack where the linkage
|
||||
+ // area goes, we need to pull down a dummy ABI stack frame to prevent the
|
||||
+ // callee from unwittingly stomping on the Wasm Frame. ShadowStackSpace
|
||||
+ // does not fix this; see Architecture-ppc64le.h for a more intemperate
|
||||
+ // explanation. We can get away with this in the general case because the
|
||||
+ // argument registers have already been calculated relative to the prior
|
||||
+ // (unsafe) value of the stack pointer. If it's not to ABI compliant code,
|
||||
+ // then we just bloat the stack temporarily and life goes on.
|
||||
+ //
|
||||
+ // 512 bytes ought to be enough for anybody ...
|
||||
+ as_addi(StackPointer, StackPointer, -512);
|
||||
movePtr(target, CallReg);
|
||||
- return call(CallReg);
|
||||
+ // XXX: No current consumer seems to care about the return value.
|
||||
+ // Should it be after the call, or after the stack pointer adjustment?
|
||||
+ CodeOffset c = call(CallReg);
|
||||
+ as_addi(StackPointer, StackPointer, 512);
|
||||
+ return c;
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::call(const Address& addr)
|
||||
{
|
||||
loadPtr(addr, CallReg);
|
||||
call(CallReg);
|
||||
}
|
||||
diff -r bd8eea54a76b -r 23890c8cfb65 js/src/wasm/WasmStubs.cpp
|
||||
--- a/js/src/wasm/WasmStubs.cpp Wed Sep 20 13:08:34 2023 -0700
|
||||
+++ b/js/src/wasm/WasmStubs.cpp Thu Sep 21 10:54:46 2023 -0700
|
||||
@@ -2134,26 +2134,17 @@
|
||||
masm.storePtr(scratch,
|
||||
Address(masm.getStackPointer(), i->offsetFromArgBase()));
|
||||
}
|
||||
i++;
|
||||
MOZ_ASSERT(i.done());
|
||||
|
||||
// Make the call, test whether it succeeded, and extract the return value.
|
||||
AssertStackAlignment(masm, ABIStackAlignment);
|
||||
-#ifdef JS_CODEGEN_PPC64
|
||||
- // Because this is calling an ABI-compliant function, we have to pull down
|
||||
- // a dummy linkage area or the values on the stack will be stomped on. The
|
||||
- // minimum size is sufficient.
|
||||
- masm.as_addi(masm.getStackPointer(), masm.getStackPointer(), -32);
|
||||
-#endif
|
||||
masm.call(SymbolicAddress::CallImport_General);
|
||||
-#ifdef JS_CODEGEN_PPC64
|
||||
- masm.as_addi(masm.getStackPointer(), masm.getStackPointer(), 32);
|
||||
-#endif
|
||||
masm.branchTest32(Assembler::Zero, ReturnReg, ReturnReg, throwLabel);
|
||||
|
||||
ResultType resultType = ResultType::Vector(funcType.results());
|
||||
ValType registerResultType;
|
||||
for (ABIResultIter iter(resultType); !iter.done(); iter.next()) {
|
||||
if (iter.cur().inRegister()) {
|
||||
MOZ_ASSERT(!registerResultType.isValid());
|
||||
registerResultType = iter.cur().type();
|
||||
@@ -2680,19 +2671,24 @@
|
||||
// PushRegsInMask strips out the high lanes of the XMM registers in this case,
|
||||
// while the singles will be stripped as they are aliased by the larger doubles.
|
||||
static const LiveRegisterSet RegsToPreserve(
|
||||
GeneralRegisterSet(Registers::AllMask &
|
||||
~(Registers::SetType(1) << Registers::StackPointer)),
|
||||
FloatRegisterSet(FloatRegisters::AllMask));
|
||||
#elif defined(JS_CODEGEN_PPC64)
|
||||
// Note that this includes no SPRs, since the JIT is unaware of them.
|
||||
+// Since we ass-U-me that traps don't occur while LR (an SPR, not a GPR) is
|
||||
+// live, then we can clobber it and don't have to push it anyway.
|
||||
static const LiveRegisterSet RegsToPreserve(
|
||||
GeneralRegisterSet(Registers::AllMask),
|
||||
FloatRegisterSet(FloatRegisters::AllMask));
|
||||
+# ifdef ENABLE_WASM_SIMD
|
||||
+# error "high lanes of SIMD registers need to be saved too."
|
||||
+# endif
|
||||
#else
|
||||
static const LiveRegisterSet RegsToPreserve(
|
||||
GeneralRegisterSet(0), FloatRegisterSet(FloatRegisters::AllDoubleMask));
|
||||
# ifdef ENABLE_WASM_SIMD
|
||||
# error "no SIMD support"
|
||||
# endif
|
||||
#endif
|
||||
|
70
firefox-esr/power9-jit-744154.diff
Normal file
70
firefox-esr/power9-jit-744154.diff
Normal file
@ -0,0 +1,70 @@
|
||||
# HG changeset patch
|
||||
# User Cameron Kaiser <spectre@floodgap.com>
|
||||
# Date 1695355123 25200
|
||||
# Thu Sep 21 20:58:43 2023 -0700
|
||||
# Node ID 1771d1807f7bfd16be4631b7485f010cfb64031d
|
||||
# Parent 23890c8cfb6523602d62886442866799431e490d
|
||||
last wasm fails fixed, passes jit_test and jstests
|
||||
|
||||
diff -r 23890c8cfb65 -r 1771d1807f7b js/src/jit/ppc64/Assembler-ppc64.cpp
|
||||
--- a/js/src/jit/ppc64/Assembler-ppc64.cpp Thu Sep 21 10:54:46 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/Assembler-ppc64.cpp Thu Sep 21 20:58:43 2023 -0700
|
||||
@@ -38,32 +38,35 @@
|
||||
{
|
||||
switch (type) {
|
||||
case MIRType::Int32:
|
||||
case MIRType::Int64:
|
||||
case MIRType::Pointer:
|
||||
case MIRType::RefOrNull:
|
||||
case MIRType::StackResults: {
|
||||
if (usedGPRs_ > 7) {
|
||||
- MOZ_ASSERT(IsCompilingWasm(), "no stack corruption from GPR overflow kthxbye");
|
||||
+ // We only support spilling arguments to the stack with Wasm calls,
|
||||
+ // but we could be generating Wasm code from the interpreter, so
|
||||
+ // we can't assume there is a JIT context available.
|
||||
+ MOZ_ASSERT(!MaybeGetJitContext() || IsCompilingWasm(), "no stack corruption from GPR overflow kthxbye");
|
||||
current_ = ABIArg(stackOffset_);
|
||||
stackOffset_ += sizeof(uintptr_t);
|
||||
break;
|
||||
}
|
||||
// Note: we could be passing a full 64-bit quantity as an argument to,
|
||||
// say, uint32_t. We have to compensate for that in other ways when
|
||||
// it makes a difference (see notes in wasm).
|
||||
current_ = ABIArg(Register::FromCode((Register::Code)(usedGPRs_ + 3)));
|
||||
usedGPRs_++;
|
||||
break;
|
||||
}
|
||||
case MIRType::Float32:
|
||||
case MIRType::Double: {
|
||||
if (usedFPRs_ == 12) {
|
||||
- MOZ_ASSERT(IsCompilingWasm(), "no stack corruption from FPR overflow kthxbye");
|
||||
+ MOZ_ASSERT(!MaybeGetJitContext() || IsCompilingWasm(), "no stack corruption from FPR overflow kthxbye");
|
||||
current_ = ABIArg(stackOffset_);
|
||||
stackOffset_ += sizeof(double); // keep stack aligned to double
|
||||
break;
|
||||
}
|
||||
current_ = ABIArg(FloatRegister(FloatRegisters::Encoding(usedFPRs_ + 1),
|
||||
type == MIRType::Double ? FloatRegisters::Double : FloatRegisters::Single));
|
||||
usedGPRs_++;
|
||||
usedFPRs_++;
|
||||
diff -r 23890c8cfb65 -r 1771d1807f7b js/src/jit/ppc64/MacroAssembler-ppc64.cpp
|
||||
--- a/js/src/jit/ppc64/MacroAssembler-ppc64.cpp Thu Sep 21 10:54:46 2023 -0700
|
||||
+++ b/js/src/jit/ppc64/MacroAssembler-ppc64.cpp Thu Sep 21 20:58:43 2023 -0700
|
||||
@@ -2235,16 +2235,17 @@
|
||||
jump(bailoutTail);
|
||||
|
||||
// If we are throwing and the innermost frame was a wasm frame, reset SP and
|
||||
// FP; SP is pointing to the unwound return address to the wasm entry, so
|
||||
// we can just ret().
|
||||
bind(&wasm);
|
||||
loadPtr(Address(StackPointer, ResumeFromException::offsetOfFramePointer()), FramePointer);
|
||||
loadPtr(Address(StackPointer, ResumeFromException::offsetOfStackPointer()), StackPointer);
|
||||
+ ma_li(InstanceReg, ImmWord(wasm::FailInstanceReg));
|
||||
ret();
|
||||
|
||||
// Found a wasm catch handler, restore state and jump to it.
|
||||
bind(&wasmCatch);
|
||||
loadPtr(Address(sp, ResumeFromException::offsetOfTarget()), r12);
|
||||
xs_mtctr(r12);
|
||||
loadPtr(Address(StackPointer, ResumeFromException::offsetOfFramePointer()),
|
||||
FramePointer);
|
61
firefox-esr/power9-jit-744155.diff
Normal file
61
firefox-esr/power9-jit-744155.diff
Normal file
@ -0,0 +1,61 @@
|
||||
# HG changeset patch
|
||||
# User Cameron Kaiser <spectre@floodgap.com>
|
||||
# Date 1695355376 25200
|
||||
# Thu Sep 21 21:02:56 2023 -0700
|
||||
# Node ID 4404797bd39a18f98b2f1a2c65ffe079404c2ee6
|
||||
# Parent 1771d1807f7bfd16be4631b7485f010cfb64031d
|
||||
ion and wasm back on in browser build
|
||||
|
||||
diff -r 1771d1807f7b -r 4404797bd39a js/xpconnect/src/XPCJSContext.cpp
|
||||
--- a/js/xpconnect/src/XPCJSContext.cpp Thu Sep 21 20:58:43 2023 -0700
|
||||
+++ b/js/xpconnect/src/XPCJSContext.cpp Thu Sep 21 21:02:56 2023 -0700
|
||||
@@ -895,18 +895,18 @@
|
||||
false);
|
||||
JS_SetGlobalJitCompilerOption(cx, JSJITCOMPILER_JIT_HINTS_ENABLE, false);
|
||||
sSelfHostedUseSharedMemory = false;
|
||||
} else {
|
||||
JS_SetGlobalJitCompilerOption(
|
||||
cx, JSJITCOMPILER_BASELINE_ENABLE,
|
||||
StaticPrefs::javascript_options_baselinejit_DoNotUseDirectly());
|
||||
JS_SetGlobalJitCompilerOption(
|
||||
- cx, JSJITCOMPILER_ION_ENABLE, false); // XXX
|
||||
- //StaticPrefs::javascript_options_ion_DoNotUseDirectly());
|
||||
+ cx, JSJITCOMPILER_ION_ENABLE,
|
||||
+ StaticPrefs::javascript_options_ion_DoNotUseDirectly());
|
||||
JS_SetGlobalJitCompilerOption(cx,
|
||||
JSJITCOMPILER_JIT_TRUSTEDPRINCIPALS_ENABLE,
|
||||
useJitForTrustedPrincipals);
|
||||
JS_SetGlobalJitCompilerOption(
|
||||
cx, JSJITCOMPILER_NATIVE_REGEXP_ENABLE,
|
||||
StaticPrefs::javascript_options_native_regexp_DoNotUseDirectly());
|
||||
// Only enable the jit hints cache for the content process to avoid
|
||||
// any possible jank or delays on the parent process.
|
||||
diff -r 1771d1807f7b -r 4404797bd39a modules/libpref/init/all.js
|
||||
--- a/modules/libpref/init/all.js Thu Sep 21 20:58:43 2023 -0700
|
||||
+++ b/modules/libpref/init/all.js Thu Sep 21 21:02:56 2023 -0700
|
||||
@@ -951,21 +951,21 @@
|
||||
// that are associated with other domains which have
|
||||
// user interaction (even if they don't have user
|
||||
// interaction directly).
|
||||
pref("privacy.purge_trackers.consider_entity_list", false);
|
||||
|
||||
pref("dom.event.contextmenu.enabled", true);
|
||||
|
||||
pref("javascript.enabled", true);
|
||||
-pref("javascript.options.asmjs", false);
|
||||
-pref("javascript.options.wasm", false);
|
||||
-pref("javascript.options.wasm_trustedprincipals", false);
|
||||
+pref("javascript.options.asmjs", true);
|
||||
+pref("javascript.options.wasm", true);
|
||||
+pref("javascript.options.wasm_trustedprincipals", true);
|
||||
pref("javascript.options.wasm_verbose", false);
|
||||
-pref("javascript.options.wasm_baselinejit", false);
|
||||
+pref("javascript.options.wasm_baselinejit", true);
|
||||
|
||||
pref("javascript.options.parallel_parsing", true);
|
||||
pref("javascript.options.source_pragmas", true);
|
||||
|
||||
pref("javascript.options.asyncstack", true);
|
||||
// Broadly capturing async stack data adds overhead that is only advisable for
|
||||
// developers, so we only enable it when the devtools are open, by default.
|
||||
pref("javascript.options.asyncstack_capture_debuggee_only", true);
|
Loading…
x
Reference in New Issue
Block a user