Closed
Bug 680684
Opened 13 years ago
Closed 13 years ago
"Assertion failure: index < atomMap.length, at /Users/jorendorff/dev/m-i/js/src/jsscript.h:633" with methodjit, single-step mode, exception
Categories
(Core :: JavaScript Engine, defect)
Tracking
()
RESOLVED
DUPLICATE
of bug 658491
People
(Reporter: jorendorff, Unassigned)
References
Details
Paste the jsapi-test below into jsapi-test/testDebugger.cpp, make, and make check.
It asserts in ic::SetGlobalName trying to figure out what name we're assigning to. It should get "e" but it's trying to fetch the atom from the wrong script, because f.fp() is the frame for the call to f that wasn't removed from the stack when it threw.
Asserts in m-i tip. I thought this might be mozilla-central rev cb456a20aeef, so I checked, and it's not: the test also asserts exactly the same way in the revision just before jsdbg2 landed.
BEGIN_TEST(testDebugger_singleStepThrow)
{
CHECK(JS_SetDebugModeForCompartment(cx, cx->compartment, true));
CHECK(JS_SetInterrupt(rt, onStep, NULL));
uint32 opts = JS_GetOptions(cx);
opts |= JSOPTION_METHODJIT | JSOPTION_METHODJIT_ALWAYS;
opts &= ~JSOPTION_JIT;
JS_SetOptions(cx, opts);
CHECK(JS_DefineFunction(cx, global, "setStepMode", setStepMode, 0, 0));
EXEC("var e;\n"
"setStepMode();\n"
"function f() { throw 0; }\n"
"try { f(); }\n"
"catch (x) { e = x; }\n");
return true;
}
static JSBool
setStepMode(JSContext *cx, uintN argc, jsval *vp)
{
JSStackFrame *fp = JS_GetScriptedCaller(cx, NULL);
JS_ASSERT(fp);
JSScript *script = JS_GetFrameScript(cx, fp);
JS_ASSERT(script);
if (!JS_SetSingleStepMode(cx, script, true))
return false;
JS_SET_RVAL(cx, vp, JSVAL_VOID);
return true;
}
static JSTrapStatus
onStep(JSContext *cx, JSScript *script, jsbytecode *pc, jsval *rval, void *closure)
{
return JSTRAP_CONTINUE;
}
END_TEST(testDebugger_singleStepThrow)
Reporter | ||
Comment 1•13 years ago
|
||
Confusing. js_InternalThrow seems to be doing the right thing, calling ScriptEpilogue, popping f's frame, leaving f.entryFrame as the top frame on the stack, returning
(the right script)->nativeCodeForPC(the right pc).
It apparently returns to JaegerThrowpoline, which GDB doesn't handle too well, and then--in methodjit code, which GDB also doesn't handle well--we set cx->stack.seg_->regs_->fp_ back to the already-popped frame.
Reporter | ||
Comment 2•13 years ago
|
||
This has been fixed in TI for months. I'll transplant the fix over to mozilla-inbound today.
Status: NEW → RESOLVED
Closed: 13 years ago
Resolution: --- → DUPLICATE
You need to log in
before you can comment on or make changes to this bug.
Description
•