* add firefox-esr (jit enabled on powerpc64le)

This commit is contained in:
Alexander Baldeck 2024-04-05 19:54:31 +02:00
parent 4fadba2c0e
commit 37643dba3f
13 changed files with 31472 additions and 0 deletions

542
firefox-esr/.SRCINFO Normal file
View 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
View 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')

View 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 duyt 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]=Đ duyt 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 duyt;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]=Ca s mi
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]=Ca s riêng tư mi
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

View 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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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;
}

View 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, &notOsr, 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.

View 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);

View 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) {

View 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

View 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);

View 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);