Closed
Bug 1212298
Opened 10 years ago
Closed 10 years ago
Assertion failure: containsPC(pc), at js/src/jsscript.cpp:3815 (bailout Ion -> baseline)
Categories
(Core :: JavaScript Engine: JIT, defect)
Tracking
()
RESOLVED
FIXED
mozilla46
People
(Reporter: decoder, Assigned: jandem)
References
Details
(Keywords: assertion, regression, testcase, Whiteboard: [jsbugmon:ignore])
Attachments
(1 file)
1.12 KB,
patch
|
shu
:
review+
ritu
:
approval-mozilla-aurora+
ritu
:
approval-mozilla-beta+
|
Details | Diff | Splinter Review |
The following testcase crashes on mozilla-central-oom (https://github.com/nbp/gecko-dev/tree/oom) revision c119c16978b4f08f5e0c1269b52b9fdd9085be5f (build with --enable-optimize --enable-posix-nspr-emulation --enable-valgrind --enable-gczeal --target=i686-pc-linux-gnu --disable-tests --enable-debug, run with --fuzzing-safe --thread-count=2 --ion-offthread-compile=off --baseline-eager):
for (var e = 1; e < 10000; e++) {
new(function(arguments, message, get) {
eval("var y");
});
}
Backtrace:
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x0884e3d8 in JSScript::getStaticBlockScope (this=0xf3e750d0, pc=pc@entry=0xf4080868 "{") at js/src/jsscript.cpp:3815
#1 0x0884e799 in innermostStaticScopeInScript (pc=0xf4080868 "{", pc@entry=0x0, this=0xf3e750d0) at js/src/jsscript.cpp:3867
#2 JSScript::innermostStaticScope (this=0xf3e750d0, pc=pc@entry=0xf4080868 "{") at js/src/jsscript.cpp:3877
#3 0x082080fe in js::DirectEvalStringFromIon (cx=0xf7277020, scopeobj=..., callerScript=..., thisValue=..., newTargetValue=..., str=..., pc=0xf4080868 "{", vp=...) at js/src/builtin/Eval.cpp:397
#4 0xf746d086 in ?? ()
eax 0x0 0
ebx 0x97a3434 159003700
ecx 0xf762488c -144553844
edx 0x0 0
esi 0xf4080868 -200800152
edi 0xffbf57f0 -4237328
ebp 0xffbf5748 4290729800
esp 0xffbf5710 4290729744
eip 0x884e3d8 <JSScript::getStaticBlockScope(unsigned char*)+200>
=> 0x884e3d8 <JSScript::getStaticBlockScope(unsigned char*)+200>: movl $0xee7,0x0
0x884e3e2 <JSScript::getStaticBlockScope(unsigned char*)+210>: call 0x80f1660 <abort()>
Comment 1•10 years ago
|
||
Wohoo, I get another assert on Mac OS X (release-debug build):
Assertion failure: v.isUndefined() || v.isMagic(JS_OPTIMIZED_OUT), at js/src/jit/BaselineBailouts.cpp:691
Segmentation fault: 11
Comment 2•10 years ago
|
||
Also on debug.
Value appears to be garbage:
(JS::Value) $0 = {
data = {
asBits = 18158514807639138304
debugView = (payload47 = 1110081298432, tag = -2048)
s = {
payload = (i32 = 1979736064, u32 = 1979736064, why = 1979736064)
}
asDouble = -1.9495432220209402E+289
asPtr = 0xfc00010276006000
asWord = 18158514807639138304
asUIntPtr = 18158514807639138304
}
}
Comment 3•10 years ago
|
||
This is a simpler test case - no confusing argument names, no eval - that fails reliably with e=1098 on my system (debug build):
for (var e = 1; e < 10000; e++) {
print(e);
var z = function(a, b, c) {}
new z;
}
To fail, there must be a "new z" and z must be created within the loop.
There's no evidence yet that the GC is running, for example. Not sure about interrupts, say.
This looks like a generic JIT bailout bug, not OOM related.
Component: JavaScript Engine → JavaScript Engine: JIT
Summary: Assertion failure: containsPC(pc), at js/src/jsscript.cpp:3815 with OOM → Assertion failure: containsPC(pc), at js/src/jsscript.cpp:3815 (bailout Ion -> baseline)
Whiteboard: [jsbugmon:ignore][js-oom2015] → [jsbugmon:ignore]
![]() |
||
Comment 4•10 years ago
|
||
(In reply to Lars T Hansen [:lth] from comment #3)
> This looks like a generic JIT bailout bug, not OOM related.
Setting needinfo? from Jan, please feel free to forward this to someone else as deemed suitable.
Flags: needinfo?(jdemooij)
Assignee | ||
Comment 5•10 years ago
|
||
This is an older bug with direct eval calls inside an inlined function in Ion, but it was likely exposed by bug 1199143. Since that bug, we inline heavyweight functions in Ion (all functions containing eval are heavyweight).
Assignee: nobody → jdemooij
Status: NEW → ASSIGNED
Flags: needinfo?(jdemooij)
Attachment #8702946 -
Flags: review?(shu)
Comment 6•10 years ago
|
||
Comment on attachment 8702946 [details] [diff] [review]
Patch
Review of attachment 8702946 [details] [diff] [review]:
-----------------------------------------------------------------
::: js/src/jit/CodeGenerator.cpp
@@ +3690,5 @@
>
> pushArg(ImmPtr(lir->mir()->pc()));
> pushArg(string);
> pushArg(ToValue(lir, LCallDirectEval::NewTarget));
> + pushArg(ImmGCPtr(current->mir()->info().script()));
Doh, nice catch fuzzers.
Attachment #8702946 -
Flags: review?(shu) → review+
Comment 8•10 years ago
|
||
bugherder |
Status: ASSIGNED → RESOLVED
Closed: 10 years ago
status-firefox46:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla46
Assignee | ||
Comment 9•10 years ago
|
||
Comment on attachment 8702946 [details] [diff] [review]
Patch
Approval Request Comment
[Feature/regressing bug #]: Bug 1199143.
[User impact if declined]: Crashes.
[Describe test coverage new/current, TreeHerder]: Adds a test that was fixed.
[Risks and why]: Very low risk. The patch is a safe and simple one-liner, I think we should just take it on aurora/beta.
[String/UUID change made/needed]: None.
Attachment #8702946 -
Flags: approval-mozilla-beta?
Attachment #8702946 -
Flags: approval-mozilla-aurora?
Comment 10•10 years ago
|
||
Comment on attachment 8702946 [details] [diff] [review]
Patch
Fixes a crash and has an automated test, beta44+, aurora45+
Attachment #8702946 -
Flags: approval-mozilla-beta?
Attachment #8702946 -
Flags: approval-mozilla-beta+
Attachment #8702946 -
Flags: approval-mozilla-aurora?
Attachment #8702946 -
Flags: approval-mozilla-aurora+
status-firefox44:
--- → affected
status-firefox45:
--- → affected
Comment 11•10 years ago
|
||
bugherder uplift |
Comment 12•10 years ago
|
||
bugherder uplift |
Comment 13•10 years ago
|
||
bugherder uplift |
status-b2g-v2.5:
--- → fixed
You need to log in
before you can comment on or make changes to this bug.
Description
•