}
} // namespace AlphaISA
-
-#if FULL_SYSTEM
-
-using namespace AlphaISA;
-
-/**
- * Check for special simulator handling of specific PAL calls.
- * If return value is false, actual PAL call will be suppressed.
- */
-bool
-SimpleThread::simPalCheck(int palFunc)
-{
- if (kernelStats)
- kernelStats->callpal(palFunc, tc);
-
- switch (palFunc) {
- case PAL::halt:
- halt();
- if (--System::numSystemsRunning == 0)
- exitSimLoop("all cpus halted");
- break;
-
- case PAL::bpt:
- case PAL::bugchk:
- if (system->breakpoint())
- return false;
- break;
- }
-
- return true;
-}
-
-#endif // FULL_SYSTEM
else {
// check to see if simulator wants to do something special
// on this PAL call (including maybe suppress it)
- bool dopal = xc->simPalCheck(palFunc);
+
+ bool dopal = true;
+
+ ThreadContext * tc = xc->tcBase();
+ AlphaISA::Kernel::Statistics * kernelStats = tc->getKernelStats();
+ System * system = tc->getSystemPtr();
+ if (kernelStats)
+ kernelStats->callpal(palFunc, tc);
+
+ switch (palFunc) {
+ case PAL::halt:
+ tc->halt();
+ if (--System::numSystemsRunning == 0)
+ exitSimLoop("all cpus halted");
+ break;
+
+ case PAL::bpt:
+ case PAL::bugchk:
+ if (system->breakpoint())
+ dopal = false;
+ break;
+ }
if (dopal) {
xc->setMiscReg(IPR_EXC_ADDR, NPC);
#if FULL_SYSTEM
#include "arch/alpha/kernel_stats.hh"
+#include "arch/alpha/osfpal.hh"
#include "sim/pseudo_inst.hh"
#endif
#include "arch/alpha/ipr.hh"
#if FULL_SYSTEM
void ev5_trap(Fault fault) { fault->invoke(tc); }
- bool simPalCheck(int palFunc) { return thread->simPalCheck(palFunc); }
#else
// Assume that the normal CPU's call to syscall was successful.
// The checker's state would have already been updated by the syscall.
* given flags. */
void writeHint(Addr addr, int size, unsigned flags);
-#if FULL_SYSTEM
- /**
- * Check for special simulator handling of specific PAL calls. If
- * return value is false, actual PAL call will be suppressed.
- */
- bool simPalCheck(int palFunc);
-#else
+#if !FULL_SYSTEM
/** Executes a syscall specified by the callnum. */
void syscall(int64_t callnum);
#endif
#include "cpu/checker/cpu.hh"
#endif
-#if THE_ISA == ALPHA_ISA
-#include "arch/alpha/osfpal.hh"
-#endif
-
class BaseCPUParams;
using namespace TheISA;
}
}
-template <class Impl>
-bool
-FullO3CPU<Impl>::simPalCheck(int palFunc, unsigned tid)
-{
-#if THE_ISA == ALPHA_ISA
- if (this->thread[tid]->kernelStats)
- this->thread[tid]->kernelStats->callpal(palFunc,
- this->threadContexts[tid]);
-
- switch (palFunc) {
- case PAL::halt:
- halt();
- if (--System::numSystemsRunning == 0)
- exitSimLoop("all cpus halted");
- break;
-
- case PAL::bpt:
- case PAL::bugchk:
- if (this->system->breakpoint())
- return false;
- break;
- }
-#endif
- return true;
-}
-
template <class Impl>
Fault
FullO3CPU<Impl>::getInterrupts()
/** Posts an interrupt. */
void post_interrupt(int int_num, int index);
- bool simPalCheck(int palFunc, unsigned tid);
-
/** Returns the Fault for any valid interrupt. */
Fault getInterrupts();
#if FULL_SYSTEM
/** Traps to handle specified fault. */
void trap(Fault fault);
- bool simPalCheck(int palFunc);
#else
/** Calls a syscall. */
void syscall(int64_t callnum);
{
this->cpu->trap(fault, this->threadNumber);
}
-
-template <class Impl>
-bool
-BaseO3DynInst<Impl>::simPalCheck(int palFunc)
-{
-#if THE_ISA != ALPHA_ISA
- panic("simPalCheck called, but PAL only exists in Alpha!\n");
-#endif
- return this->cpu->simPalCheck(palFunc, this->threadNumber);
-}
#else
template <class Impl>
void
void dumpInsts() { frontEnd->dumpInsts(); }
#if FULL_SYSTEM
- bool simPalCheck(int palFunc);
void processInterrupts();
#else
void syscall(uint64_t &callnum);
interrupt->invoke(thread.getTC());
}
}
-
-template <class Impl>
-bool
-OzoneCPU<Impl>::simPalCheck(int palFunc)
-{
- // Need to move this to ISA code
- // May also need to make this per thread
- thread.kernelStats->callpal(palFunc, tc);
-
- switch (palFunc) {
- case PAL::halt:
- haltContext(thread.readTid());
- if (--System::numSystemsRunning == 0)
- exitSimLoop("all cpus halted");
- break;
-
- case PAL::bpt:
- case PAL::bugchk:
- if (system->breakpoint())
- return false;
- break;
- }
-
- return true;
-}
#endif
template <class Impl>
#if FULL_SYSTEM
void trap(Fault fault);
- bool simPalCheck(int palFunc);
#else
void syscall(uint64_t &callnum);
#endif
{
fault->invoke(this->thread->getTC());
}
-
-template <class Impl>
-bool
-OzoneDynInst<Impl>::simPalCheck(int palFunc)
-{
- return this->cpu->simPalCheck(palFunc);
-}
#else
template <class Impl>
void
#if FULL_SYSTEM
void ev5_trap(Fault fault) { fault->invoke(tc); }
- bool simPalCheck(int palFunc) { return thread->simPalCheck(palFunc); }
#else
void syscall(int64_t callnum) { thread->syscall(callnum); }
#endif
void dumpFuncProfile();
- bool simPalCheck(int palFunc);
-
#endif
/*******************************************