From c9b0204e2891d2004d33aff196833fa009e00892 Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Tue, 16 Nov 2004 17:20:38 -0500 Subject: 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= (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 --- cpu/base_cpu.hh | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'cpu/base_cpu.hh') diff --git a/cpu/base_cpu.hh b/cpu/base_cpu.hh index 8668c3216..baa956aa8 100644 --- a/cpu/base_cpu.hh +++ b/cpu/base_cpu.hh @@ -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 cpuList; //!< Static global cpu list -- cgit v1.2.3