exetrace.cc
来自「M5,一个功能强大的多处理器系统模拟器.很多针对处理器架构,性能的研究都使用它作」· CC 代码 · 共 120 行
CC
120 行
/* * Copyright (c) 2001, 2002, 2003, 2004, 2005 * The Regents of The University of Michigan * All Rights Reserved * * This code is part of the M5 simulator. * * Permission is granted to use, copy, create derivative works and * redistribute this software and such derivative works for any * purpose, so long as the copyright notice above, this grant of * permission, and the disclaimer below appear in all copies made; and * so long as the name of The University of Michigan is not used in * any advertising or publicity pertaining to the use or distribution * of this software without specific, written prior authorization. * * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE * UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND * WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE * LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, SPECIAL, INDIRECT, * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM * ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH * DAMAGES. * * Authors: Steven K. Reinhardt * Lisa R. Hsu * Nathan L. Binkert * Steven E. Raasch */#include <iomanip>#include "base/loader/symtab.hh"#include "cpu/base.hh"#include "cpu/exetrace.hh"#include "cpu/static_inst.hh"#include "cpu/thread_context.hh"#include "enums/OpClass.hh"using namespace std;using namespace TheISA;namespace Trace {voidTrace::ExeTracerRecord::dump(){ ostream &outs = Trace::output(); if (IsOn(ExecTicks)) ccprintf(outs, "%7d: ", when); outs << thread->getCpuPtr()->name() << " "; if (IsOn(ExecSpeculative)) outs << (misspeculating ? "-" : "+") << " "; if (IsOn(ExecThread)) outs << "T" << thread->getThreadNum() << " : "; std::string sym_str; Addr sym_addr; if (debugSymbolTable && IsOn(ExecSymbol) && debugSymbolTable->findNearestSymbol(PC, sym_str, sym_addr)) { if (PC != sym_addr) sym_str += csprintf("+%d", PC - sym_addr); outs << "@" << sym_str << " : "; } else { outs << "0x" << hex << PC << " : "; } // // Print decoded instruction // outs << setw(26) << left; outs << staticInst->disassemble(PC, debugSymbolTable); outs << " : "; if (IsOn(ExecOpClass)) { outs << Enums::OpClassStrings[staticInst->opClass()] << " : "; } if (IsOn(ExecResult) && data_status != DataInvalid) { ccprintf(outs, " D=%#018x", data.as_int); } if (IsOn(ExecEffAddr) && addr_valid) outs << " A=0x" << hex << addr; if (IsOn(ExecFetchSeq) && fetch_seq_valid) outs << " FetchSeq=" << dec << fetch_seq; if (IsOn(ExecCPSeq) && cp_seq_valid) outs << " CPSeq=" << dec << cp_seq; // // End of line... // outs << endl;}/* namespace Trace */ }//////////////////////////////////////////////////////////////////////////// ExeTracer Simulation Object//Trace::ExeTracer *ExeTracerParams::create(){ return new Trace::ExeTracer(this);};
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?