Add simple function-tracing support. Prints a message
every time the committed PC changes from one symbol scope
to another.
Set function_trace=y on target CPU to enable.
To defer start, use function_trace_start=<tick>
(in addition to setting function_trace=y).
cpu/base_cpu.cc:
cpu/base_cpu.hh:
Add simple function-tracing support.
cpu/simple_cpu/simple_cpu.cc:
Add function_trace, function_trace_start params
Call traceFunctions() on instruction completion
cpu/simple_cpu/simple_cpu.hh:
Add function_trace, function_trace_start params
--HG--
extra : convert_revision : 8a7f84028ccbaee585253629007f32fc8eae35e1
This commit is contained in:
@@ -95,16 +95,18 @@ class BaseCPU : public SimObject
|
||||
BaseCPU(const std::string &_name, int _number_of_threads, bool _def_reg,
|
||||
Counter max_insts_any_thread, Counter max_insts_all_threads,
|
||||
Counter max_loads_any_thread, Counter max_loads_all_threads,
|
||||
System *_system, Tick freq);
|
||||
System *_system, Tick freq,
|
||||
bool _function_trace = false, Tick _function_trace_start = 0);
|
||||
#else
|
||||
BaseCPU(const std::string &_name, int _number_of_threads, bool _def_reg,
|
||||
Counter max_insts_any_thread = 0,
|
||||
Counter max_insts_all_threads = 0,
|
||||
Counter max_loads_any_thread = 0,
|
||||
Counter max_loads_all_threads = 0);
|
||||
Counter max_loads_all_threads = 0,
|
||||
bool _function_trace = false, Tick _function_trace_start = 0);
|
||||
#endif
|
||||
|
||||
virtual ~BaseCPU() {}
|
||||
virtual ~BaseCPU();
|
||||
|
||||
virtual void init();
|
||||
virtual void regStats();
|
||||
@@ -166,6 +168,23 @@ class BaseCPU : public SimObject
|
||||
|
||||
virtual Counter totalInstructions() const { return 0; }
|
||||
|
||||
// Function tracing
|
||||
private:
|
||||
bool functionTracingEnabled;
|
||||
std::ostream *functionTraceStream;
|
||||
Addr currentFunctionStart;
|
||||
Addr currentFunctionEnd;
|
||||
Tick functionEntryTick;
|
||||
void enableFunctionTrace();
|
||||
void traceFunctionsInternal(Addr pc);
|
||||
|
||||
protected:
|
||||
void traceFunctions(Addr pc)
|
||||
{
|
||||
if (functionTracingEnabled)
|
||||
traceFunctionsInternal(pc);
|
||||
}
|
||||
|
||||
private:
|
||||
static std::vector<BaseCPU *> cpuList; //!< Static global cpu list
|
||||
|
||||
|
||||
Reference in New Issue
Block a user