mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-06-01 01:41:37 +00:00
#596: M1618131+M1618880 (consolidated) (non-debug portions)
This commit is contained in:
parent
11a28b361d
commit
114bbdfd03
|
@ -2904,10 +2904,11 @@ InvalidateActivation(FreeOp* fop, const JitActivationIterator& activations, bool
|
||||||
type = "Baseline";
|
type = "Baseline";
|
||||||
else if (it.isBailoutJS())
|
else if (it.isBailoutJS())
|
||||||
type = "Bailing";
|
type = "Bailing";
|
||||||
|
JSScript* script = it.maybeForwardedScript();
|
||||||
JitSpew(JitSpew_IonInvalidate,
|
JitSpew(JitSpew_IonInvalidate,
|
||||||
"#%d %s JS frame @ %p, %s:%" PRIuSIZE " (fun: %p, script: %p, pc %p)",
|
"#%d %s JS frame @ %p, %s:%" PRIuSIZE " (fun: %p, script: %p, pc %p)",
|
||||||
frameno, type, it.fp(), it.script()->maybeForwardedFilename(),
|
frameno, type, it.fp(), script->maybeForwardedFilename(),
|
||||||
it.script()->lineno(), it.maybeCallee(), (JSScript*)it.script(),
|
script->lineno(), it.maybeCallee(), script,
|
||||||
it.returnAddressToFp());
|
it.returnAddressToFp());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2953,7 +2954,7 @@ InvalidateActivation(FreeOp* fop, const JitActivationIterator& activations, bool
|
||||||
if (!calledFromLinkStub && it.checkInvalidation())
|
if (!calledFromLinkStub && it.checkInvalidation())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
JSScript* script = it.script();
|
JSScript* script = it.maybeForwardedScript();
|
||||||
if (!script->hasIonScript())
|
if (!script->hasIonScript())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -204,6 +204,7 @@ class JitFrameIterator
|
||||||
JSFunction* maybeCallee() const;
|
JSFunction* maybeCallee() const;
|
||||||
unsigned numActualArgs() const;
|
unsigned numActualArgs() const;
|
||||||
JSScript* script() const;
|
JSScript* script() const;
|
||||||
|
JSScript* maybeForwardedScript() const;
|
||||||
void baselineScriptAndPc(JSScript** scriptRes, jsbytecode** pcRes) const;
|
void baselineScriptAndPc(JSScript** scriptRes, jsbytecode** pcRes) const;
|
||||||
Value* actualArgs() const;
|
Value* actualArgs() const;
|
||||||
|
|
||||||
|
|
|
@ -221,6 +221,31 @@ JitFrameIterator::script() const
|
||||||
return script;
|
return script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSScript*
|
||||||
|
MaybeForwardedScriptFromCalleeToken(CalleeToken token) {
|
||||||
|
switch (GetCalleeTokenTag(token)) {
|
||||||
|
case CalleeToken_Script:
|
||||||
|
return MaybeForwarded(CalleeTokenToScript(token));
|
||||||
|
case CalleeToken_Function:
|
||||||
|
case CalleeToken_FunctionConstructing: {
|
||||||
|
JSFunction* fun = MaybeForwarded(CalleeTokenToFunction(token));
|
||||||
|
return MaybeForwarded(fun)->nonLazyScript();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MOZ_CRASH("invalid callee token tag");
|
||||||
|
}
|
||||||
|
|
||||||
|
JSScript*
|
||||||
|
JitFrameIterator::maybeForwardedScript() const
|
||||||
|
{
|
||||||
|
MOZ_ASSERT(isScripted());
|
||||||
|
if (isBaselineJS())
|
||||||
|
return MaybeForwardedScriptFromCalleeToken(baselineFrame()->calleeToken());
|
||||||
|
JSScript* script = MaybeForwardedScriptFromCalleeToken(calleeToken());
|
||||||
|
MOZ_ASSERT(script);
|
||||||
|
return script;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
JitFrameIterator::baselineScriptAndPc(JSScript** scriptRes, jsbytecode** pcRes) const
|
JitFrameIterator::baselineScriptAndPc(JSScript** scriptRes, jsbytecode** pcRes) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -88,6 +88,8 @@ ScriptFromCalleeToken(CalleeToken token)
|
||||||
MOZ_CRASH("invalid callee token tag");
|
MOZ_CRASH("invalid callee token tag");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JSScript* MaybeForwardedScriptFromCalleeToken(CalleeToken token);
|
||||||
|
|
||||||
// In between every two frames lies a small header describing both frames. This
|
// In between every two frames lies a small header describing both frames. This
|
||||||
// header, minimally, contains a returnAddress word and a descriptor word. The
|
// header, minimally, contains a returnAddress word and a descriptor word. The
|
||||||
// descriptor describes the size and type of the previous frame, whereas the
|
// descriptor describes the size and type of the previous frame, whereas the
|
||||||
|
|
Loading…
Reference in New Issue
Block a user