mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 14:45:29 +00:00
Print exit names instead of numbers (bug 500522, r=gal).
This commit is contained in:
parent
01555189df
commit
cf76f7bcd1
@ -366,6 +366,21 @@ js_InitJITLogController ( void )
|
||||
}
|
||||
#endif
|
||||
|
||||
static const char*
|
||||
js_ExitName(ExitType type)
|
||||
{
|
||||
static const char* exitNames[] =
|
||||
{
|
||||
#define MAKE_EXIT_STRING(x) #x,
|
||||
JS_TM_EXITCODES(MAKE_EXIT_STRING)
|
||||
#undef MAKE_EXIT_STRING
|
||||
};
|
||||
|
||||
JS_ASSERT(unsigned(type) < JS_ARRAY_LENGTH(exitNames));
|
||||
|
||||
return exitNames[type];
|
||||
}
|
||||
|
||||
/* The entire VM shares one oracle. Collisions and concurrent updates are tolerated and worst
|
||||
case cause performance regressions. */
|
||||
static Oracle oracle;
|
||||
@ -2949,8 +2964,8 @@ TraceRecorder::guard(bool expected, LIns* cond, VMSideExit* exit)
|
||||
{
|
||||
debug_only_printf(LC_TMRecorder,
|
||||
" About to try emitting guard code for "
|
||||
"SideExit=%p exitType=%d\n",
|
||||
(void*)exit, exit->exitType);
|
||||
"SideExit=%p exitType=%s\n",
|
||||
(void*)exit, js_ExitName(exit->exitType));
|
||||
|
||||
LIns* guardRec = createGuardRecord(exit);
|
||||
|
||||
@ -4765,7 +4780,7 @@ js_RecordLoopEdge(JSContext* cx, TraceRecorder* r, uintN& inlineCallCount)
|
||||
js_AbortRecording(cx, "Inner tree is trying to grow, abort outer recording");
|
||||
return js_AttemptToExtendTree(cx, lr, NULL, outer);
|
||||
default:
|
||||
debug_only_printf(LC_TMTracer, "exit_type=%d\n", lr->exitType);
|
||||
debug_only_printf(LC_TMTracer, "exit_type=%s\n", js_ExitName(lr->exitType));
|
||||
js_AbortRecording(cx, "Inner tree not suitable for calling");
|
||||
return false;
|
||||
}
|
||||
@ -5312,14 +5327,14 @@ LeaveTree(InterpState& state, VMSideExit* lr)
|
||||
#endif
|
||||
|
||||
debug_only_printf(LC_TMTracer,
|
||||
"leaving trace at %s:%u@%u, op=%s, lr=%p, exitType=%d, sp=%d, "
|
||||
"leaving trace at %s:%u@%u, op=%s, lr=%p, exitType=%s, sp=%d, "
|
||||
"calldepth=%d, cycles=%llu\n",
|
||||
fp->script->filename,
|
||||
js_FramePCToLineNumber(cx, fp),
|
||||
FramePCOffset(fp),
|
||||
js_CodeName[fp->imacpc ? *fp->imacpc : *fp->regs->pc],
|
||||
(void*)lr,
|
||||
lr->exitType,
|
||||
js_ExitName(lr->exitType),
|
||||
fp->regs->sp - StackBase(fp),
|
||||
calldepth,
|
||||
cycles);
|
||||
|
@ -228,47 +228,48 @@ public:
|
||||
bool matches(TypeMap& other) const;
|
||||
};
|
||||
|
||||
#define JS_TM_EXITCODES(_) \
|
||||
/* \
|
||||
* An exit at a possible branch-point in the trace at which to attach a \
|
||||
* future secondary trace. Therefore the recorder must generate different \
|
||||
* code to handle the other outcome of the branch condition from the \
|
||||
* primary trace's outcome. \
|
||||
*/ \
|
||||
_(BRANCH) \
|
||||
/* \
|
||||
* Exit at a tableswitch via a numbered case. \
|
||||
*/ \
|
||||
_(CASE) \
|
||||
/* \
|
||||
* Exit at a tableswitch via the default case. \
|
||||
*/ \
|
||||
_(DEFAULT) \
|
||||
_(LOOP) \
|
||||
_(NESTED) \
|
||||
/* \
|
||||
* An exit from a trace because a condition relied upon at recording time \
|
||||
* no longer holds, where the alternate path of execution is so rare or \
|
||||
* difficult to address in native code that it is not traced at all, e.g. \
|
||||
* negative array index accesses, which differ from positive indexes in \
|
||||
* that they require a string-based property lookup rather than a simple \
|
||||
* memory access. \
|
||||
*/ \
|
||||
_(MISMATCH) \
|
||||
/* \
|
||||
* A specialization of MISMATCH_EXIT to handle allocation failures. \
|
||||
*/ \
|
||||
_(OOM) \
|
||||
_(OVERFLOW) \
|
||||
_(UNSTABLE_LOOP) \
|
||||
_(TIMEOUT) \
|
||||
_(DEEP_BAIL) \
|
||||
_(STATUS)
|
||||
|
||||
|
||||
enum ExitType {
|
||||
/*
|
||||
* An exit at a possible branch-point in the trace at which to attach a
|
||||
* future secondary trace. Therefore the recorder must generate different
|
||||
* code to handle the other outcome of the branch condition from the
|
||||
* primary trace's outcome.
|
||||
*/
|
||||
BRANCH_EXIT,
|
||||
|
||||
/*
|
||||
* Exit at a tableswitch via a numbered case.
|
||||
*/
|
||||
CASE_EXIT,
|
||||
|
||||
/*
|
||||
* Exit at a tableswitch via the default case.
|
||||
*/
|
||||
DEFAULT_EXIT,
|
||||
|
||||
LOOP_EXIT,
|
||||
NESTED_EXIT,
|
||||
|
||||
/*
|
||||
* An exit from a trace because a condition relied upon at recording time
|
||||
* no longer holds, where the alternate path of execution is so rare or
|
||||
* difficult to address in native code that it is not traced at all, e.g.
|
||||
* negative array index accesses, which differ from positive indexes in
|
||||
* that they require a string-based property lookup rather than a simple
|
||||
* memory access.
|
||||
*/
|
||||
MISMATCH_EXIT,
|
||||
|
||||
/*
|
||||
* A specialization of MISMATCH_EXIT to handle allocation failures.
|
||||
*/
|
||||
OOM_EXIT,
|
||||
OVERFLOW_EXIT,
|
||||
UNSTABLE_LOOP_EXIT,
|
||||
TIMEOUT_EXIT,
|
||||
DEEP_BAIL_EXIT,
|
||||
STATUS_EXIT
|
||||
#define MAKE_EXIT_CODE(x) x##_EXIT,
|
||||
JS_TM_EXITCODES(MAKE_EXIT_CODE)
|
||||
#undef MAKE_EXIT_CODE
|
||||
};
|
||||
|
||||
struct VMSideExit : public nanojit::SideExit
|
||||
|
Loading…
Reference in New Issue
Block a user