Date: Mon, 7 May 2018 20:31:04 +0000 (UTC) From: Jan Beich <jbeich@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r469332 - in head/www/firefox: . files Message-ID: <201805072031.w47KV409001259@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jbeich Date: Mon May 7 20:31:04 2018 New Revision: 469332 URL: https://svnweb.freebsd.org/changeset/ports/469332 Log: www/firefox: apply some aarch64 fixes Obtained from: upstream (Firefox 61) Added: head/www/firefox/files/patch-bug1375074 (contents, props changed) head/www/firefox/files/patch-bug1442583 (contents, props changed) head/www/firefox/files/patch-bug1445907 (contents, props changed) head/www/firefox/files/patch-bug1447359 (contents, props changed) head/www/firefox/files/patch-bug1451292 (contents, props changed) head/www/firefox/files/patch-bug1456556 (contents, props changed) Modified: head/www/firefox/Makefile (contents, props changed) Modified: head/www/firefox/Makefile ============================================================================== --- head/www/firefox/Makefile Mon May 7 20:02:54 2018 (r469331) +++ head/www/firefox/Makefile Mon May 7 20:31:04 2018 (r469332) @@ -3,7 +3,7 @@ PORTNAME= firefox DISTVERSION= 60.0 -PORTREVISION= 1 +PORTREVISION= 2 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ Added: head/www/firefox/files/patch-bug1375074 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/firefox/files/patch-bug1375074 Mon May 7 20:31:04 2018 (r469332) @@ -0,0 +1,82 @@ +commit fc25eb4380d0 +Author: Lars T Hansen <lhansen@mozilla.com> +Date: Wed Feb 28 13:57:52 2018 +0100 + + Bug 1375074 - Save and restore non-volatile x28 on ARM64 for generated unboxed object constructor. r=sstangl + + --HG-- + extra : rebase_source : 4a2824b23cf7453d07c962123f780c0ff2fd5292 + extra : source : dec6ab6522a4eb4b3c2defc5078b38ed904f3383 +--- + js/src/jit-test/tests/bug1375074.js | 18 ++++++++++++++++++ + js/src/vm/UnboxedObject.cpp | 25 ++++++++++++++++++++++++- + 2 files changed, 42 insertions(+), 1 deletion(-) + +diff --git js/src/jit-test/tests/bug1375074.js js/src/jit-test/tests/bug1375074.js +new file mode 100644 +index 0000000000000..8bf01d96903fc +--- /dev/null ++++ js/src/jit-test/tests/bug1375074.js +@@ -0,0 +1,18 @@ ++// This forces the VM to start creating unboxed objects and thus stresses a ++// particular path into generated code for a specialized unboxed object ++// constructor. ++ ++var K = 2000; // 2000 should be plenty ++var s = "["; ++var i; ++for ( i=0; i < K-1; i++ ) ++ s = s + `{"i":${i}},`; ++s += `{"i":${i}}]`; ++var v = JSON.parse(s); ++ ++assertEq(v.length == K, true); ++ ++for ( i=0; i < K; i++) { ++ assertEq(v[i] instanceof Object, true); ++ assertEq(v[i].i, i); ++} +diff --git js/src/vm/UnboxedObject.cpp js/src/vm/UnboxedObject.cpp +index c8c178965c488..5badf328ede4f 100644 +--- js/src/vm/UnboxedObject.cpp ++++ js/src/vm/UnboxedObject.cpp +@@ -95,7 +95,15 @@ UnboxedLayout::makeConstructorCode(JSContext* cx, HandleObjectGroup group) + #endif + + #ifdef JS_CODEGEN_ARM64 +- // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing. ++ // ARM64 communicates stack address via sp, but uses a pseudo-sp (PSP) for ++ // addressing. The register we use for PSP may however also be used by ++ // calling code, and it is nonvolatile, so save it. Do this as a special ++ // case first because the generic save/restore code needs the PSP to be ++ // initialized already. ++ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64())); ++ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex)); ++ ++ // Initialize the PSP from the SP. + masm.initStackPtr(); + #endif + +@@ -233,7 +241,22 @@ UnboxedLayout::makeConstructorCode(JSContext* cx, HandleObjectGroup group) + masm.pop(ScratchDoubleReg); + masm.PopRegsInMask(savedNonVolatileRegisters); + ++#ifdef JS_CODEGEN_ARM64 ++ // Now restore the value that was in the PSP register on entry, and return. ++ ++ // Obtain the correct SP from the PSP. ++ masm.Mov(sp, PseudoStackPointer64); ++ ++ // Restore the saved value of the PSP register, this value is whatever the ++ // caller had saved in it, not any actual SP value, and it must not be ++ // overwritten subsequently. ++ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex)); ++ ++ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong. ++ masm.Ret(vixl::lr); ++#else + masm.abiret(); ++#endif + + masm.bind(&failureStoreOther); + Added: head/www/firefox/files/patch-bug1442583 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/firefox/files/patch-bug1442583 Mon May 7 20:31:04 2018 (r469332) @@ -0,0 +1,39 @@ +commit 7371a080accd +Author: Lars T Hansen <lhansen@mozilla.com> +Date: Mon Mar 5 09:55:28 2018 +0100 + + Bug 1442583 - Properly initialize ARM64 icache flushing machinery. r=sstangl + + --HG-- + extra : rebase_source : 73b5921da1fa0a19d6072e35d09bd7b528bb6bfc + extra : intermediate-source : 19516efbbf6750ba04e11c7099586d5be2fe818f + extra : source : 4316cc82d6302edf839a4af6fcb815f0ffa9f65c +--- + js/src/jit/ProcessExecutableMemory.cpp | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git js/src/jit/ProcessExecutableMemory.cpp js/src/jit/ProcessExecutableMemory.cpp +index e763a9d68dc17..8a6d50b6a7845 100644 +--- js/src/jit/ProcessExecutableMemory.cpp ++++ js/src/jit/ProcessExecutableMemory.cpp +@@ -20,6 +20,9 @@ + #include "jsutil.h" + + #include "gc/Memory.h" ++#ifdef JS_CODEGEN_ARM64 ++# include "jit/arm64/vixl/Cpu-vixl.h" ++#endif + #include "threading/LockGuard.h" + #include "threading/Mutex.h" + #include "util/Windows.h" +@@ -621,6 +624,10 @@ js::jit::DeallocateExecutableMemory(void* addr, size_t bytes) + bool + js::jit::InitProcessExecutableMemory() + { ++#ifdef JS_CODEGEN_ARM64 ++ // Initialize instruction cache flushing. ++ vixl::CPU::SetUp(); ++#endif + return execMemory.init(); + } + Added: head/www/firefox/files/patch-bug1445907 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/firefox/files/patch-bug1445907 Mon May 7 20:31:04 2018 (r469332) @@ -0,0 +1,75 @@ +commit 0c6dd4a750db +Author: Lars T Hansen <lhansen@mozilla.com> +Date: Mon Mar 19 09:58:06 2018 +0100 + + Bug 1445907 - Save x28 before clobbering it in the regex compiler. r=sstangl +--- + js/src/irregexp/NativeRegExpMacroAssembler.cpp | 25 ++++++++++++++++++++++++- + js/src/jit-test/tests/regexp/bug1445907.js | 15 +++++++++++++++ + 2 files changed, 39 insertions(+), 1 deletion(-) + +diff --git js/src/irregexp/NativeRegExpMacroAssembler.cpp js/src/irregexp/NativeRegExpMacroAssembler.cpp +index 28a4c35e75bfe..c08b005cf856b 100644 +--- js/src/irregexp/NativeRegExpMacroAssembler.cpp ++++ js/src/irregexp/NativeRegExpMacroAssembler.cpp +@@ -123,7 +123,15 @@ NativeRegExpMacroAssembler::GenerateCode(JSContext* cx, bool match_only) + masm.bind(&entry_label_); + + #ifdef JS_CODEGEN_ARM64 +- // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing. ++ // ARM64 communicates stack address via SP, but uses a pseudo-sp (PSP) for ++ // addressing. The register we use for PSP may however also be used by ++ // calling code, and it is nonvolatile, so save it. Do this as a special ++ // case first because the generic save/restore code needs the PSP to be ++ // initialized already. ++ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64())); ++ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex)); ++ ++ // Initialize the PSP from the SP. + masm.initStackPtr(); + #endif + +@@ -421,7 +429,22 @@ NativeRegExpMacroAssembler::GenerateCode(JSContext* cx, bool match_only) + for (GeneralRegisterBackwardIterator iter(savedNonVolatileRegisters); iter.more(); ++iter) + masm.Pop(*iter); + ++#ifdef JS_CODEGEN_ARM64 ++ // Now restore the value that was in the PSP register on entry, and return. ++ ++ // Obtain the correct SP from the PSP. ++ masm.Mov(sp, PseudoStackPointer64); ++ ++ // Restore the saved value of the PSP register, this value is whatever the ++ // caller had saved in it, not any actual SP value, and it must not be ++ // overwritten subsequently. ++ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex)); ++ ++ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong. ++ masm.Ret(vixl::lr); ++#else + masm.abiret(); ++#endif + + // Backtrack code (branch target for conditional backtracks). + if (backtrack_label_.used()) { +diff --git js/src/jit-test/tests/regexp/bug1445907.js js/src/jit-test/tests/regexp/bug1445907.js +new file mode 100644 +index 0000000000000..75b23753eaf93 +--- /dev/null ++++ js/src/jit-test/tests/regexp/bug1445907.js +@@ -0,0 +1,15 @@ ++// On ARM64, we failed to save x28 properly when generating code for the regexp ++// matcher. ++// ++// There's wasm and Debugger code here because the combination forces the use of ++// x28 and exposes the bug when running on the simulator. ++ ++if (!wasmIsSupported()) ++ quit(); ++ ++var g = newGlobal(''); ++var dbg = new Debugger(g); ++g.eval(`var m = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary('(module (func (export "test")))')))`); ++var re = /./; ++dbg.onEnterFrame = function(frame) { re.exec("x") }; ++result = g.eval("m.exports.test()"); Added: head/www/firefox/files/patch-bug1447359 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/firefox/files/patch-bug1447359 Mon May 7 20:31:04 2018 (r469332) @@ -0,0 +1,45 @@ +commit fef467b5a93d +Author: Luke Wagner <luke@mozilla.com> +Date: Thu Mar 22 10:28:13 2018 -0500 + + Bug 1447359 - Baldr: add AutoForbidPools in a few missing places (r=lth) + + --HG-- + extra : rebase_source : 75f1909deb352391529ce5e58a89e5f9cfeb3662 +--- + js/src/jit/arm64/MacroAssembler-arm64-inl.h | 1 + + js/src/jit/arm64/MacroAssembler-arm64.cpp | 2 ++ + 2 files changed, 3 insertions(+) + +diff --git js/src/jit/arm64/MacroAssembler-arm64-inl.h js/src/jit/arm64/MacroAssembler-arm64-inl.h +index 7061cbfd93ebb..190442f7afa0a 100644 +--- js/src/jit/arm64/MacroAssembler-arm64-inl.h ++++ js/src/jit/arm64/MacroAssembler-arm64-inl.h +@@ -359,6 +359,7 @@ MacroAssembler::sub32FromStackPtrWithPatch(Register dest) + { + vixl::UseScratchRegisterScope temps(this); + const ARMRegister scratch = temps.AcquireX(); ++ AutoForbidPools afp(this, /* max number of instructions in scope = */ 3); + CodeOffset offs = CodeOffset(currentOffset()); + movz(scratch, 0, 0); + movk(scratch, 0, 16); +diff --git js/src/jit/arm64/MacroAssembler-arm64.cpp js/src/jit/arm64/MacroAssembler-arm64.cpp +index 7b599b7e9d610..4e8fdb6a67019 100644 +--- js/src/jit/arm64/MacroAssembler-arm64.cpp ++++ js/src/jit/arm64/MacroAssembler-arm64.cpp +@@ -707,6 +707,7 @@ MacroAssembler::patchFarJump(CodeOffset farJump, uint32_t targetOffset) + CodeOffset + MacroAssembler::nopPatchableToCall(const wasm::CallSiteDesc& desc) + { ++ AutoForbidPools afp(this, /* max number of instructions in scope = */ 1); + CodeOffset offset(currentOffset()); + Nop(); + append(desc, CodeOffset(currentOffset())); +@@ -1077,6 +1078,7 @@ MacroAssembler::comment(const char* msg) + CodeOffset + MacroAssembler::wasmTrapInstruction() + { ++ AutoForbidPools afp(this, /* max number of instructions in scope = */ 1); + CodeOffset offs(currentOffset()); + Unreachable(); + return offs; Added: head/www/firefox/files/patch-bug1451292 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/firefox/files/patch-bug1451292 Mon May 7 20:31:04 2018 (r469332) @@ -0,0 +1,33 @@ +commit b3a02fddbce8 +Author: Lars T Hansen <lhansen@mozilla.com> +Date: Wed Apr 4 15:48:48 2018 +0200 + + Bug 1451292 - Better payload for arm64 breakpoint instruction. r=sstangl + + At least some non-zero payloads confuse GDB and make it iloop on the + breakpoint instruction rather than break to the command line as it + should. There seems to be no reason not to use a zero payload. + + --HG-- + extra : rebase_source : 6d6f9aa2911b86b02572f88948d48bc2238c6353 + extra : amend_source : 9fed9235d481a9eadafc4a3e0075c9fef8b6050d +--- + js/src/jit/arm64/MacroAssembler-arm64.cpp | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git js/src/jit/arm64/MacroAssembler-arm64.cpp js/src/jit/arm64/MacroAssembler-arm64.cpp +index 4ea64b1225d00..a212de0ec2f45 100644 +--- js/src/jit/arm64/MacroAssembler-arm64.cpp ++++ js/src/jit/arm64/MacroAssembler-arm64.cpp +@@ -237,8 +237,9 @@ MacroAssemblerCompat::profilerEnterFrame(RegisterOrSP framePtr, Register scratch + void + MacroAssemblerCompat::breakpoint() + { +- static int code = 0xA77; +- Brk((code++) & 0xffff); ++ // Note, other payloads are possible, but GDB is known to misinterpret them ++ // sometimes and iloop on the breakpoint instead of stopping properly. ++ Brk(0); + } + + // Either `any` is valid or `sixtyfour` is valid. Return a 32-bit ARMRegister Added: head/www/firefox/files/patch-bug1456556 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/www/firefox/files/patch-bug1456556 Mon May 7 20:31:04 2018 (r469332) @@ -0,0 +1,22 @@ +commit f6fc0b418aa3 +Author: Andrea Marchesini <amarchesini@mozilla.com> +Date: Tue May 1 08:47:13 2018 +0200 + + Bug 1456556 - FetchConsumer scope-exit RAII must grab 'self' by value, r=erahm +--- + dom/fetch/FetchConsumer.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git dom/fetch/FetchConsumer.cpp dom/fetch/FetchConsumer.cpp +index 134bf7f2e703a..3c3687fea1d5a 100644 +--- dom/fetch/FetchConsumer.cpp ++++ dom/fetch/FetchConsumer.cpp +@@ -582,7 +582,7 @@ FetchBodyConsumer<Derived>::ContinueConsumeBody(nsresult aStatus, + RefPtr<Promise> localPromise = mConsumePromise.forget(); + + RefPtr<FetchBodyConsumer<Derived>> self = this; +- auto autoReleaseObject = mozilla::MakeScopeExit([&] { ++ auto autoReleaseObject = mozilla::MakeScopeExit([self] { + self->ReleaseObject(); + }); +
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201805072031.w47KV409001259>