summaryrefslogtreecommitdiff
path: root/cpu
diff options
context:
space:
mode:
authorSteve Reinhardt <stever@eecs.umich.edu>2004-11-15 01:56:40 -0500
committerSteve Reinhardt <stever@eecs.umich.edu>2004-11-15 01:56:40 -0500
commitfed64a3b3634315bce420b2bc63312c1fa62bb8f (patch)
treefa45a0e8c3154c7e1e27e393198fd1e2ad1cd5fb /cpu
parent2e0695ec9ae9bbc798c8164e9dd66f59fef93b4e (diff)
downloadgem5-fed64a3b3634315bce420b2bc63312c1fa62bb8f.tar.xz
Add support for sampled PC profiling to FullCPU.
Simple text list of symbol (or address) and count will be dumped to m5prof.<cpu-name> if the cpu's pc_sample_interval param is set. SConscript: Add cpu/full_cpu/pc_sample_profile.cc base/callback.hh: Add a comment about MakeCallback. Fix type in another comment. base/loader/symtab.cc: Revamp findNearestSymbol() to provide addresses of both nearest symbols (preceding and following) as well as string for former. Move global definition of debugSymbolTable here too. base/loader/symtab.hh: Revamp findNearestSymbol() to provide addresses of both nearest symbols (preceding and following) as well as string for former. Move global declaration of debugSymbolTable here too. cpu/exetrace.cc: Use new findNearestSymbol() interface for trace symbols. kern/linux/linux_system.cc: sim/system.cc: Remove extern of debugSymbolTable (now in symtab.hh) sim/process.cc: Initialize debugSymbolTable if binary has a symbol table. --HG-- extra : convert_revision : 0b5393dc39c40ac88c953684708f1125da550671
Diffstat (limited to 'cpu')
-rw-r--r--cpu/exetrace.cc16
1 files changed, 10 insertions, 6 deletions
diff --git a/cpu/exetrace.cc b/cpu/exetrace.cc
index e31c3590c..58fb7d668 100644
--- a/cpu/exetrace.cc
+++ b/cpu/exetrace.cc
@@ -48,8 +48,6 @@ using namespace std;
//
-SymbolTable *debugSymbolTable = NULL;
-
void
Trace::InstRecord::dump(ostream &outs)
{
@@ -66,11 +64,17 @@ Trace::InstRecord::dump(ostream &outs)
outs << "T" << thread << " : ";
- std::string str;
- if ((debugSymbolTable) && (debugSymbolTable->findNearestSymbol(PC, str)))
- outs << "@" << setw(17) << str << " : ";
- else
+ std::string sym_str;
+ Addr sym_addr;
+ if (debugSymbolTable
+ && debugSymbolTable->findNearestSymbol(PC, sym_str, sym_addr)) {
+ if (PC != sym_addr)
+ sym_str += csprintf("+%d", addr - sym_addr);
+ outs << "@" << setw(17) << sym_str << " : ";
+ }
+ else {
outs << "0x" << hex << PC << " : ";
+ }
//
// Print decoded instruction