sim: Add debug output when executing pseudo-instructions
This commit is contained in:
parent
2b65fce5d9
commit
743f80712e
2 changed files with 30 additions and 0 deletions
|
@ -72,6 +72,7 @@ DebugFlag('IPI')
|
||||||
DebugFlag('IPR')
|
DebugFlag('IPR')
|
||||||
DebugFlag('Interrupt')
|
DebugFlag('Interrupt')
|
||||||
DebugFlag('Loader')
|
DebugFlag('Loader')
|
||||||
|
DebugFlag('PseudoInst')
|
||||||
DebugFlag('Stack')
|
DebugFlag('Stack')
|
||||||
DebugFlag('SyscallVerbose')
|
DebugFlag('SyscallVerbose')
|
||||||
DebugFlag('TimeSync')
|
DebugFlag('TimeSync')
|
||||||
|
|
|
@ -59,6 +59,7 @@
|
||||||
#include "cpu/quiesce_event.hh"
|
#include "cpu/quiesce_event.hh"
|
||||||
#include "cpu/thread_context.hh"
|
#include "cpu/thread_context.hh"
|
||||||
#include "debug/Loader.hh"
|
#include "debug/Loader.hh"
|
||||||
|
#include "debug/PseudoInst.hh"
|
||||||
#include "debug/Quiesce.hh"
|
#include "debug/Quiesce.hh"
|
||||||
#include "debug/WorkItems.hh"
|
#include "debug/WorkItems.hh"
|
||||||
#include "params/BaseCPU.hh"
|
#include "params/BaseCPU.hh"
|
||||||
|
@ -90,6 +91,8 @@ pseudoInst(ThreadContext *tc, uint8_t func, uint8_t subfunc)
|
||||||
{
|
{
|
||||||
uint64_t args[4];
|
uint64_t args[4];
|
||||||
|
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::pseudoInst(%i, %i)\n", func, subfunc);
|
||||||
|
|
||||||
// We need to do this in a slightly convoluted way since
|
// We need to do this in a slightly convoluted way since
|
||||||
// getArgument() might have side-effects on arg_num. We could have
|
// getArgument() might have side-effects on arg_num. We could have
|
||||||
// used the Argument class, but due to the possible side effects
|
// used the Argument class, but due to the possible side effects
|
||||||
|
@ -204,6 +207,7 @@ pseudoInst(ThreadContext *tc, uint8_t func, uint8_t subfunc)
|
||||||
void
|
void
|
||||||
arm(ThreadContext *tc)
|
arm(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::arm()\n");
|
||||||
if (!FullSystem)
|
if (!FullSystem)
|
||||||
panicFsOnlyPseudoInst("arm");
|
panicFsOnlyPseudoInst("arm");
|
||||||
|
|
||||||
|
@ -214,6 +218,7 @@ arm(ThreadContext *tc)
|
||||||
void
|
void
|
||||||
quiesce(ThreadContext *tc)
|
quiesce(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::quiesce()\n");
|
||||||
if (!FullSystem)
|
if (!FullSystem)
|
||||||
panicFsOnlyPseudoInst("quiesce");
|
panicFsOnlyPseudoInst("quiesce");
|
||||||
|
|
||||||
|
@ -230,6 +235,7 @@ quiesce(ThreadContext *tc)
|
||||||
void
|
void
|
||||||
quiesceSkip(ThreadContext *tc)
|
quiesceSkip(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::quiesceSkip()\n");
|
||||||
if (!FullSystem)
|
if (!FullSystem)
|
||||||
panicFsOnlyPseudoInst("quiesceSkip");
|
panicFsOnlyPseudoInst("quiesceSkip");
|
||||||
|
|
||||||
|
@ -255,6 +261,7 @@ quiesceSkip(ThreadContext *tc)
|
||||||
void
|
void
|
||||||
quiesceNs(ThreadContext *tc, uint64_t ns)
|
quiesceNs(ThreadContext *tc, uint64_t ns)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::quiesceNs(%i)\n", ns);
|
||||||
if (!FullSystem)
|
if (!FullSystem)
|
||||||
panicFsOnlyPseudoInst("quiesceNs");
|
panicFsOnlyPseudoInst("quiesceNs");
|
||||||
|
|
||||||
|
@ -280,6 +287,7 @@ quiesceNs(ThreadContext *tc, uint64_t ns)
|
||||||
void
|
void
|
||||||
quiesceCycles(ThreadContext *tc, uint64_t cycles)
|
quiesceCycles(ThreadContext *tc, uint64_t cycles)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::quiesceCycles(%i)\n", cycles);
|
||||||
if (!FullSystem)
|
if (!FullSystem)
|
||||||
panicFsOnlyPseudoInst("quiesceCycles");
|
panicFsOnlyPseudoInst("quiesceCycles");
|
||||||
|
|
||||||
|
@ -305,6 +313,7 @@ quiesceCycles(ThreadContext *tc, uint64_t cycles)
|
||||||
uint64_t
|
uint64_t
|
||||||
quiesceTime(ThreadContext *tc)
|
quiesceTime(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::quiesceTime()\n");
|
||||||
if (!FullSystem) {
|
if (!FullSystem) {
|
||||||
panicFsOnlyPseudoInst("quiesceTime");
|
panicFsOnlyPseudoInst("quiesceTime");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -317,12 +326,14 @@ quiesceTime(ThreadContext *tc)
|
||||||
uint64_t
|
uint64_t
|
||||||
rpns(ThreadContext *tc)
|
rpns(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::rpns()\n");
|
||||||
return curTick() / SimClock::Int::ns;
|
return curTick() / SimClock::Int::ns;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
wakeCPU(ThreadContext *tc, uint64_t cpuid)
|
wakeCPU(ThreadContext *tc, uint64_t cpuid)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::wakeCPU(%i)\n", cpuid);
|
||||||
System *sys = tc->getSystemPtr();
|
System *sys = tc->getSystemPtr();
|
||||||
ThreadContext *other_tc = sys->threadContexts[cpuid];
|
ThreadContext *other_tc = sys->threadContexts[cpuid];
|
||||||
if (other_tc->status() == ThreadContext::Suspended)
|
if (other_tc->status() == ThreadContext::Suspended)
|
||||||
|
@ -332,6 +343,7 @@ wakeCPU(ThreadContext *tc, uint64_t cpuid)
|
||||||
void
|
void
|
||||||
m5exit(ThreadContext *tc, Tick delay)
|
m5exit(ThreadContext *tc, Tick delay)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::m5exit(%i)\n", delay);
|
||||||
Tick when = curTick() + delay * SimClock::Int::ns;
|
Tick when = curTick() + delay * SimClock::Int::ns;
|
||||||
exitSimLoop("m5_exit instruction encountered", 0, when);
|
exitSimLoop("m5_exit instruction encountered", 0, when);
|
||||||
}
|
}
|
||||||
|
@ -339,6 +351,7 @@ m5exit(ThreadContext *tc, Tick delay)
|
||||||
void
|
void
|
||||||
m5fail(ThreadContext *tc, Tick delay, uint64_t code)
|
m5fail(ThreadContext *tc, Tick delay, uint64_t code)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::m5fail(%i, %i)\n", delay, code);
|
||||||
Tick when = curTick() + delay * SimClock::Int::ns;
|
Tick when = curTick() + delay * SimClock::Int::ns;
|
||||||
exitSimLoop("m5_fail instruction encountered", code, when);
|
exitSimLoop("m5_fail instruction encountered", code, when);
|
||||||
}
|
}
|
||||||
|
@ -346,6 +359,7 @@ m5fail(ThreadContext *tc, Tick delay, uint64_t code)
|
||||||
void
|
void
|
||||||
loadsymbol(ThreadContext *tc)
|
loadsymbol(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::loadsymbol()\n");
|
||||||
if (!FullSystem)
|
if (!FullSystem)
|
||||||
panicFsOnlyPseudoInst("loadsymbol");
|
panicFsOnlyPseudoInst("loadsymbol");
|
||||||
|
|
||||||
|
@ -397,6 +411,8 @@ loadsymbol(ThreadContext *tc)
|
||||||
void
|
void
|
||||||
addsymbol(ThreadContext *tc, Addr addr, Addr symbolAddr)
|
addsymbol(ThreadContext *tc, Addr addr, Addr symbolAddr)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::addsymbol(0x%x, 0x%x)\n",
|
||||||
|
addr, symbolAddr);
|
||||||
if (!FullSystem)
|
if (!FullSystem)
|
||||||
panicFsOnlyPseudoInst("addSymbol");
|
panicFsOnlyPseudoInst("addSymbol");
|
||||||
|
|
||||||
|
@ -413,6 +429,7 @@ addsymbol(ThreadContext *tc, Addr addr, Addr symbolAddr)
|
||||||
uint64_t
|
uint64_t
|
||||||
initParam(ThreadContext *tc)
|
initParam(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::initParam()\n");
|
||||||
if (!FullSystem) {
|
if (!FullSystem) {
|
||||||
panicFsOnlyPseudoInst("initParam");
|
panicFsOnlyPseudoInst("initParam");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -425,6 +442,7 @@ initParam(ThreadContext *tc)
|
||||||
void
|
void
|
||||||
resetstats(ThreadContext *tc, Tick delay, Tick period)
|
resetstats(ThreadContext *tc, Tick delay, Tick period)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::resetstats(%i, %i)\n", delay, period);
|
||||||
if (!tc->getCpuPtr()->params()->do_statistics_insts)
|
if (!tc->getCpuPtr()->params()->do_statistics_insts)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -438,6 +456,7 @@ resetstats(ThreadContext *tc, Tick delay, Tick period)
|
||||||
void
|
void
|
||||||
dumpstats(ThreadContext *tc, Tick delay, Tick period)
|
dumpstats(ThreadContext *tc, Tick delay, Tick period)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::dumpstats(%i, %i)\n", delay, period);
|
||||||
if (!tc->getCpuPtr()->params()->do_statistics_insts)
|
if (!tc->getCpuPtr()->params()->do_statistics_insts)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -451,6 +470,7 @@ dumpstats(ThreadContext *tc, Tick delay, Tick period)
|
||||||
void
|
void
|
||||||
dumpresetstats(ThreadContext *tc, Tick delay, Tick period)
|
dumpresetstats(ThreadContext *tc, Tick delay, Tick period)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::dumpresetstats(%i, %i)\n", delay, period);
|
||||||
if (!tc->getCpuPtr()->params()->do_statistics_insts)
|
if (!tc->getCpuPtr()->params()->do_statistics_insts)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -464,6 +484,7 @@ dumpresetstats(ThreadContext *tc, Tick delay, Tick period)
|
||||||
void
|
void
|
||||||
m5checkpoint(ThreadContext *tc, Tick delay, Tick period)
|
m5checkpoint(ThreadContext *tc, Tick delay, Tick period)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::m5checkpoint(%i, %i)\n", delay, period);
|
||||||
if (!tc->getCpuPtr()->params()->do_checkpoint_insts)
|
if (!tc->getCpuPtr()->params()->do_checkpoint_insts)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -476,6 +497,8 @@ m5checkpoint(ThreadContext *tc, Tick delay, Tick period)
|
||||||
uint64_t
|
uint64_t
|
||||||
readfile(ThreadContext *tc, Addr vaddr, uint64_t len, uint64_t offset)
|
readfile(ThreadContext *tc, Addr vaddr, uint64_t len, uint64_t offset)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::readfile(0x%x, 0x%x, 0x%x)\n",
|
||||||
|
vaddr, len, offset);
|
||||||
if (!FullSystem) {
|
if (!FullSystem) {
|
||||||
panicFsOnlyPseudoInst("readfile");
|
panicFsOnlyPseudoInst("readfile");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -517,6 +540,8 @@ uint64_t
|
||||||
writefile(ThreadContext *tc, Addr vaddr, uint64_t len, uint64_t offset,
|
writefile(ThreadContext *tc, Addr vaddr, uint64_t len, uint64_t offset,
|
||||||
Addr filename_addr)
|
Addr filename_addr)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::writefile(0x%x, 0x%x, 0x%x, 0x%x)\n",
|
||||||
|
vaddr, len, offset, filename_addr);
|
||||||
ostream *os;
|
ostream *os;
|
||||||
|
|
||||||
// copy out target filename
|
// copy out target filename
|
||||||
|
@ -558,12 +583,14 @@ writefile(ThreadContext *tc, Addr vaddr, uint64_t len, uint64_t offset,
|
||||||
void
|
void
|
||||||
debugbreak(ThreadContext *tc)
|
debugbreak(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::debugbreak()\n");
|
||||||
Debug::breakpoint();
|
Debug::breakpoint();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
switchcpu(ThreadContext *tc)
|
switchcpu(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::switchcpu()\n");
|
||||||
exitSimLoop("switchcpu");
|
exitSimLoop("switchcpu");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -575,6 +602,7 @@ switchcpu(ThreadContext *tc)
|
||||||
void
|
void
|
||||||
workbegin(ThreadContext *tc, uint64_t workid, uint64_t threadid)
|
workbegin(ThreadContext *tc, uint64_t workid, uint64_t threadid)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::workbegin(%i, %i)\n", workid, threadid);
|
||||||
tc->getCpuPtr()->workItemBegin();
|
tc->getCpuPtr()->workItemBegin();
|
||||||
System *sys = tc->getSystemPtr();
|
System *sys = tc->getSystemPtr();
|
||||||
const System::Params *params = sys->params();
|
const System::Params *params = sys->params();
|
||||||
|
@ -632,6 +660,7 @@ workbegin(ThreadContext *tc, uint64_t workid, uint64_t threadid)
|
||||||
void
|
void
|
||||||
workend(ThreadContext *tc, uint64_t workid, uint64_t threadid)
|
workend(ThreadContext *tc, uint64_t workid, uint64_t threadid)
|
||||||
{
|
{
|
||||||
|
DPRINTF(PseudoInst, "PseudoInst::workend(%i, %i)\n", workid, threadid);
|
||||||
tc->getCpuPtr()->workItemEnd();
|
tc->getCpuPtr()->workItemEnd();
|
||||||
System *sys = tc->getSystemPtr();
|
System *sys = tc->getSystemPtr();
|
||||||
const System::Params *params = sys->params();
|
const System::Params *params = sys->params();
|
||||||
|
|
Loading…
Reference in a new issue