X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcpu%2Flegiontrace.cc;h=b94b8f5fef7abfded6415696162cbb1df7b632f8;hb=072f78471d11c31b6009beb572296f704912d0f7;hp=8750e56e51671778be8c55e1ecdd28a8f4dca708;hpb=6f4bd2c1da0dc7783da87c4877a41332901199b2;p=gem5.git diff --git a/src/cpu/legiontrace.cc b/src/cpu/legiontrace.cc index 8750e56e5..b94b8f5fe 100644 --- a/src/cpu/legiontrace.cc +++ b/src/cpu/legiontrace.cc @@ -36,41 +36,32 @@ #error Legion tracing only works with SPARC simulations! #endif -#include "config/full_system.hh" -#if !FULL_SYSTEM - #error Legion tracing only works in full system! -#endif - #include #include #include #include -#include "arch/sparc/predecoder.hh" +#include "arch/sparc/decoder.hh" #include "arch/sparc/registers.hh" #include "arch/sparc/utility.hh" +#include "arch/tlb.hh" #include "base/socket.hh" #include "cpu/base.hh" #include "cpu/legiontrace.hh" #include "cpu/static_inst.hh" #include "cpu/thread_context.hh" +#include "sim/full_system.hh" #include "sim/system.hh" -#if FULL_SYSTEM -#include "arch/tlb.hh" -#endif - //XXX This is temporary #include "cpu/m5legion_interface.h" using namespace std; using namespace TheISA; -#if FULL_SYSTEM static int diffcount = 0; static bool wasMicro = false; -#endif namespace Trace { SharedData *shared_data = NULL; @@ -154,7 +145,6 @@ Trace::LegionTraceRecord::dump() { ostream &outs = Trace::output(); - static TheISA::Predecoder predecoder(NULL); // Compare bool compared = false; bool diffPC = false; @@ -166,7 +156,7 @@ Trace::LegionTraceRecord::dump() bool diffTnpc = false; bool diffTstate = false; bool diffTt = false; - bool diffTba = false; + bool diffTba M5_VAR_USED = false; bool diffHpstate = false; bool diffHtstate = false; bool diffHtba = false; @@ -431,15 +421,13 @@ Trace::LegionTraceRecord::dump() << staticInst->disassemble(m5Pc, debugSymbolTable) << endl; - predecoder.setTC(thread); - predecoder.moreBytes(m5Pc, m5Pc, shared_data->instruction); + TheISA::Decoder *decoder = thread->getDecoderPtr(); + decoder->moreBytes(m5Pc, m5Pc, shared_data->instruction); - assert(predecoder.extMachInstReady()); + assert(decoder->instReady()); PCState tempPC = pc; - StaticInstPtr legionInst = - StaticInst::decode(predecoder.getExtMachInst(tempPC), - lgnPc); + StaticInstPtr legionInst = decoder->decode(tempPC); outs << setfill(' ') << setw(15) << " Legion Inst: " << "0x" << setw(8) << setfill('0') << hex @@ -547,7 +535,7 @@ Trace::LegionTraceRecord::dump() } if (diffTlb) { printColumnLabels(outs); - char label[8]; + char label[9]; for (int x = 0; x < 64; x++) { if (shared_data->itb[x] != ULL(0xFFFFFFFFFFFFFFFF) || @@ -587,7 +575,7 @@ Trace::LegionTraceRecord::dump() } // if not microop } -/* namespace Trace */ } +} // namespace Trace //////////////////////////////////////////////////////////////////////// // @@ -596,5 +584,7 @@ Trace::LegionTraceRecord::dump() Trace::LegionTrace * LegionTraceParams::create() { + if (!FullSystem) + panic("Legion tracing only works in full system!"); return new Trace::LegionTrace(this); };