On startup Seg fault: js::TenuringTracer::moveToTenured(): zone->tenuredStrings++
Categories
(Core :: JavaScript: GC, defect, P3)
Tracking
()
Tracking | Status | |
---|---|---|
firefox66 | --- | fixed |
People
(Reporter: cgrobertson, Assigned: sfink)
References
Details
Attachments
(3 files, 5 obsolete files)
30.40 KB,
text/plain
|
Details | |
1.05 KB,
patch
|
tcampbell
:
review+
|
Details | Diff | Splinter Review |
5.22 KB,
patch
|
Details | Diff | Splinter Review |
Updated•7 years ago
|
Assignee | ||
Comment 1•7 years ago
|
||
Comment 3•7 years ago
|
||
Comment 4•7 years ago
|
||
Assignee | ||
Comment 5•7 years ago
|
||
Assignee | ||
Comment 6•7 years ago
|
||
Assignee | ||
Comment 7•7 years ago
|
||
Assignee | ||
Updated•7 years ago
|
Comment 8•7 years ago
|
||
Comment 9•7 years ago
|
||
Assignee | ||
Comment 10•7 years ago
|
||
Assignee | ||
Updated•7 years ago
|
Assignee | ||
Comment 11•7 years ago
|
||
Reporter | ||
Comment 12•7 years ago
|
||
Reporter | ||
Comment 13•7 years ago
|
||
Assignee | ||
Comment 14•7 years ago
|
||
Assignee | ||
Comment 15•7 years ago
|
||
Comment 16•7 years ago
|
||
Reporter | ||
Comment 17•7 years ago
|
||
Reporter | ||
Comment 18•7 years ago
|
||
Assignee | ||
Comment 19•7 years ago
|
||
Assignee | ||
Comment 20•7 years ago
|
||
Assignee | ||
Updated•7 years ago
|
Reporter | ||
Comment 21•7 years ago
|
||
Comment 22•7 years ago
|
||
Assignee | ||
Comment 23•7 years ago
|
||
Assignee | ||
Updated•7 years ago
|
Comment 24•7 years ago
|
||
Assignee | ||
Comment 25•7 years ago
|
||
Assignee | ||
Comment 26•7 years ago
|
||
Comment 27•7 years ago
|
||
Comment 28•7 years ago
|
||
Reporter | ||
Comment 29•7 years ago
|
||
Reporter | ||
Comment 30•7 years ago
|
||
Reporter | ||
Comment 31•7 years ago
|
||
Comment 32•7 years ago
|
||
Reporter | ||
Comment 33•7 years ago
|
||
Reporter | ||
Comment 34•7 years ago
|
||
Comment 35•7 years ago
|
||
Assignee | ||
Updated•7 years ago
|
Comment 36•7 years ago
|
||
Comment 37•7 years ago
|
||
Assignee | ||
Comment 38•7 years ago
|
||
Assignee | ||
Comment 39•7 years ago
|
||
Assignee | ||
Updated•7 years ago
|
Assignee | ||
Comment 40•7 years ago
|
||
Comment 41•7 years ago
|
||
Comment 42•7 years ago
|
||
Comment 43•7 years ago
|
||
bugherder |
Comment 44•7 years ago
|
||
I'm looking at backporting this fix to Spidermonkey 60 (aka mozjs60) in Debian, but I'm confused about the status of the patches. Which patch(es) would be desirable to apply to backport this fix? Attachment #9008245 [details] [diff]? Attachment #9008260 [details] [diff]? Attachment #9016789 [details] [diff]? Some combination of those?
Debian has all combinations of 32- and 64-bit LE and BE architectures available, so I can test via the Spidermonkey test suite on any or all combinations.
For a version usable in Debian we can't just #error on 32-bit BE, but the vast majority of the Spidermonkey tests already pass on our 32-bit BE machines (mips and powerpc), which I think indicates that the LE code paths were OK for 32-bit BE before this bug was fixed, so it seems we only need two code paths:
- little-endian || 32-bit
- big-endian && 64-bit
Is there a separate bug open for making this work on 32-bit BE, or is this bug the right place to continue discussion?
Comment 45•7 years ago
|
||
(Needinfo-ing myself to look at next week.)
This is the right place for 32-bit BE discussion. Probably can fix and get these things uplifted to ESR60. This code was a gnarly mess and was re-written in Bug 1479900 but that cannot be backported to ESR60.
Comment 46•7 years ago
|
||
Thanks! Please let me know if there's something you'd like tested on an assortment of architectures.
Comment 47•7 years ago
|
||
MongoDB is in the process of upgrading our bundled third party libraries, including MozJS. We currently bundle ESR-45 and are attempting to upgrade to ESR-60. We appear to be encountering this bug on our s390x builds, where we are observing crashes like the following:
[js_test:application_message] 2019-01-25T02:24:12.277+0000 2019-01-25T02:24:12.269+0000 F - [js] Invalid access at address: 0
[js_test:application_message] 2019-01-25T02:24:12.287+0000 2019-01-25T02:24:12.281+0000 F - [js] Got signal: 11 (Segmentation fault).
[js_test:application_message] 2019-01-25T02:24:12.287+0000 mongo(mongo::printStackTrace(std::basic_ostream<char, std::char_traits<char> >&)+0x42) [0x2aa0b783242]
[js_test:application_message] 2019-01-25T02:24:12.287+0000 mongo(+0x198235E) [0x2aa0b78235e]
[js_test:application_message] 2019-01-25T02:24:12.287+0000 mongo(+0x19829E2) [0x2aa0b7829e2]
[js_test:application_message] 2019-01-25T02:24:12.287+0000 ??? [0x3ffb71fda98]
[js_test:application_message] 2019-01-25T02:24:12.287+0000 mongo(js::TenuringTracer::moveToTenured(JSString*)+0xC2) [0x2aa0ae0a1ba]
[js_test:application_message] 2019-01-25T02:24:12.287+0000 mongo(void js::TenuringTracer::traverse<JSString>(JSString**)+0x54) [0x2aa0ae0a364]
[js_test:application_message] 2019-01-25T02:24:12.287+0000 mongo(js::gc::StoreBuffer::MonoTypeBuffer<js::gc::StoreBuffer::CellPtrEdge>::trace(js::gc::StoreBuffer*, js::TenuringTracer&)+0x36) [0x2aa0ae2228e]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(js::Nursery::doCollection(JS::gcreason::Reason, js::gc::TenureCountCache&)+0x232) [0x2aa0ae0f462]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(js::Nursery::collect(JS::gcreason::Reason)+0x136) [0x2aa0ae0fa06]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(js::gc::GCRuntime::minorGC(JS::gcreason::Reason, js::gcstats::PhaseKind)+0xAC) [0x2aa0adc38ac]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(js::gc::GCRuntime::gcCycle(bool, js::SliceBudget&, JS::gcreason::Reason)+0x9A) [0x2aa0adda632]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(js::gc::GCRuntime::collect(bool, js::SliceBudget, JS::gcreason::Reason)+0x4CC) [0x2aa0addacb4]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(js::gc::GCRuntime::gc(JSGCInvocationKind, JS::gcreason::Reason)+0x54) [0x2aa0addaf64]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(JSRuntime::destroyRuntime()+0x1AE) [0x2aa0ac1b3d6]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(js::DestroyContext(JSContext*)+0x2CA) [0x2aa0ab9943a]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(mongo::mozjs::MozJSImplScope::~MozJSImplScope()+0x15A0) [0x2aa0a6a6428]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(mongo::mozjs::MozJSImplScope::~MozJSImplScope()+0x1A) [0x2aa0a6a6592]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(mongo::mozjs::MozJSProxyScope::implThread(void*)+0x344) [0x2aa0a6e5814]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(nspr::Thread::ThreadRoutine(void*)+0x42) [0x2aa0a6df7c2]
[js_test:application_message] 2019-01-25T02:24:12.288+0000 mongo(+0x1AE9D1C) [0x2aa0b8e9d1c]
Like the above commenter, we are a little puzzled about the state of things after reading through the history in this bug. We would very much appreciate a unified patch (or clear guidance on the correct sequence of patches already linked here) that we can cherry-pick into ESR 60 and test. In our case we do not need a 32-bit BE fix.
Along with s390x, we will also be testing on aarch64, ppc64le, and x86_64.
Comment 48•7 years ago
|
||
Here is an attempt at some backports to mozjs60, including untested fixes for 32-bit big-endian: https://salsa.debian.org/gnome-team/mozjs60/merge_requests/1. Note that with those patches, several unit tests still fail on s390x (I think TypedArray is broken there, perhaps with a single root cause); that should perhaps be addressed as a separate bug.
Comment 49•7 years ago
|
||
This is the patch we are shipping. Please note that this patch has NOT been tested on 32-bit BE yet, as we are still in the process of bringing up Rust on ppc32. We aren't just building mozjs but the entire Firefox 60 ESR browser.
That should be done this week, if we're lucky, and then I can begin ensuring that this patch should work. Functionally, it is definitely correct on 64-bit BE.
Comment 50•7 years ago
|
||
FWIW https://people.debian.org/~jcristau/mozjs60-mips.log is a log from building SM 60 on mips (32-bit BE) with the patch from comment 49. jstests don't look too unhappy. (ion is disabled)
I'll try and do the same on s390x (64-bit BE) soon.
Comment 51•7 years ago
|
||
https://people.debian.org/~jcristau/mozjs60-s390x.log is my s390x build log.
The number of unexpected failures goes from 28+k to 65. \o/
TEST-UNEXPECTED-FAIL | non262/extensions/clone-transferables.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | non262/extensions/sharedtypedarray.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | non262/extensions/clone-errors.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | non262/extensions/typedarray.js | (args: "") [0.2 s]
TEST-UNEXPECTED-FAIL | non262/TypedArray/slice-detached.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | non262/TypedArray/Tconstructor-fromTypedArray-byteLength.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | non262/TypedArray/set-same-buffer-different-source-target-types.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | non262/TypedArray/iterator-next-with-detached.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | non262/TypedArray/subarray.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | non262/TypedArray/sort_byteoffset.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | non262/TypedArray/indexOf-and-lastIndexOf.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | non262/ArrayBuffer/CloneArrayBuffer.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArray/prototype/subarray/speciesctor-get-species-custom-ctor-invocation.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArray/prototype/copyWithin/bit-precision.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArray/prototype/set/typedarray-arg-set-values-same-buffer-same-type-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArray/prototype/set/typedarray-arg-set-values-diff-buffer-same-type-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArray/prototype/set/typedarray-arg-set-values-diff-buffer-other-type-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArray/prototype/byteLength/return-bytelength.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/Atomics/wait/was-woken.js | (args: "") [0.5 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/Atomics/wait/no-spurious-wakeup.js | (args: "") [0.5 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/Atomics/wait/did-timeout.js | (args: "") | (TIMEOUT) [600.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/Atomics/wait/nan-timeout.js | (args: "") [0.5 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/Atomics/wait/negative-timeout.js | (args: "") | (TIMEOUT) [600.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/Atomics/wake/wake-one.js | (args: "") [0.1 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/Atomics/wake/wake-zero.js | (args: "") [0.1 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/Atomics/wake/wake-two.js | (args: "") [0.1 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/Atomics/wake/wake-nan.js | (args: "") [0.7 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/Atomics/wake/wake-negative.js | (args: "") [0.5 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-toindex-byteoffset-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-excessive-offset-throws.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-defined-offset-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-returns-new-instance-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-excessive-length-throws.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-defined-length.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-returns-new-instance.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-defined-length-and-offset-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-toindex-byteoffset.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-bufferbyteoffset-throws-from-modulo-element-size.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-excessive-offset-throws-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-defined-length-and-offset.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-bufferbyteoffset-throws-from-modulo-element-size-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-defined-length-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-byteoffset-throws-from-modulo-element-size.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-byteoffset-throws-from-modulo-element-size-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-defined-offset.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/buffer-arg-excessive-length-throws-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Float64Array/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Float64Array/prototype/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Uint16Array/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Uint16Array/prototype/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/internals/Get/indexed-value-sab.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Uint8Array/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Uint8Array/prototype/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Int32Array/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Int32Array/prototype/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Float32Array/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Float32Array/prototype/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Int16Array/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Int16Array/prototype/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Int8Array/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Int8Array/prototype/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Uint8ClampedArray/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Uint8ClampedArray/prototype/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Uint32Array/BYTES_PER_ELEMENT.js | (args: "") [0.0 s]
TEST-UNEXPECTED-FAIL | test262/built-ins/TypedArrays/Uint32Array/prototype/BYTES_PER_ELEMENT.js | (args: "") [0.1 s]
Updated•6 years ago
|
Updated•6 years ago
|
Comment 53•6 years ago
|
||
This should all be fixed on in ESR68.
For big-endian 64-bit, Comment 49 seems to have a reasonable looking workaround. I'm unclear what the state of big-endian 32-bit is.
Description
•