diff options
Diffstat (limited to 'cpu/base_cpu.hh')
-rw-r--r-- | cpu/base_cpu.hh | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/cpu/base_cpu.hh b/cpu/base_cpu.hh index f75f00409..baa956aa8 100644 --- a/cpu/base_cpu.hh +++ b/cpu/base_cpu.hh @@ -55,6 +55,7 @@ class BaseCPU : public SimObject virtual void post_interrupt(int int_num, int index); virtual void clear_interrupt(int int_num, int index); virtual void clear_interrupts(); + bool checkInterrupts; bool check_interrupt(int int_num) const { if (int_num > NumInterruptLevels) @@ -91,22 +92,26 @@ class BaseCPU : public SimObject public: #ifdef FULL_SYSTEM - BaseCPU(const std::string &_name, int _number_of_threads, + 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, + 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(); + bool deferRegistration; void registerExecContexts(); /// Prepare for another CPU to take over execution. Called by @@ -140,7 +145,6 @@ class BaseCPU : public SimObject #ifdef FULL_SYSTEM System *system; - /** * Serialize this object to the given output stream. * @param os The stream to serialize to. @@ -164,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 |