summaryrefslogtreecommitdiff
path: root/sim
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 /sim
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 'sim')
-rw-r--r--sim/process.cc13
-rw-r--r--sim/system.cc2
2 files changed, 13 insertions, 2 deletions
diff --git a/sim/process.cc b/sim/process.cc
index 98db1f2e0..bd1a2d8fd 100644
--- a/sim/process.cc
+++ b/sim/process.cc
@@ -34,6 +34,7 @@
#include "base/intmath.hh"
#include "base/loader/object_file.hh"
+#include "base/loader/symtab.hh"
#include "base/statistics.hh"
#include "cpu/exec_context.hh"
#include "cpu/full_cpu/smt.hh"
@@ -263,6 +264,18 @@ LiveProcess::LiveProcess(const string &name, ObjectFile *objFile,
// load object file into target memory
objFile->loadSections(memory);
+ // load up symbols, if any... these may be used for debugging or
+ // profiling.
+ if (!debugSymbolTable) {
+ debugSymbolTable = new SymbolTable();
+ if (!objFile->loadGlobalSymbols(debugSymbolTable) ||
+ !objFile->loadLocalSymbols(debugSymbolTable)) {
+ // didn't load any symbols
+ delete debugSymbolTable;
+ debugSymbolTable = NULL;
+ }
+ }
+
// Set up stack. On Alpha, stack goes below text section. This
// code should get moved to some architecture-specific spot.
stack_base = text_base - (409600+4096);
diff --git a/sim/system.cc b/sim/system.cc
index 1b1a145c6..c6a65f9d9 100644
--- a/sim/system.cc
+++ b/sim/system.cc
@@ -44,8 +44,6 @@ vector<System *> System::systemList;
int System::numSystemsRunning = 0;
-extern SymbolTable *debugSymbolTable;
-
System::System(Params *p)
: SimObject(p->name), memctrl(p->memctrl), physmem(p->physmem),
init_param(p->init_param), params(p)