diff --git a/src/arch/x86/stacktrace.hh b/src/arch/x86/stacktrace.hh index 8ed89ec5f6..c53362d08e 100644 --- a/src/arch/x86/stacktrace.hh +++ b/src/arch/x86/stacktrace.hh @@ -36,65 +36,67 @@ class ThreadContext; namespace X86ISA { - class StackTrace + +class StackTrace +{ + private: + ThreadContext *tc; + std::vector stack; + + private: + bool isEntry(Addr addr); + bool decodePrologue(Addr sp, Addr callpc, Addr func, int &size, Addr &ra); + bool decodeSave(MachInst inst, int ®, int &disp); + bool decodeStack(MachInst inst, int &disp); + + void trace(ThreadContext *tc, bool is_call); + + public: + StackTrace(); + StackTrace(ThreadContext *tc, const StaticInstPtr &inst); + ~StackTrace(); + + void clear() { - private: - ThreadContext *tc; - std::vector stack; + tc = 0; + stack.clear(); + } - private: - bool isEntry(Addr addr); - bool decodePrologue(Addr sp, Addr callpc, Addr func, int &size, Addr &ra); - bool decodeSave(MachInst inst, int ®, int &disp); - bool decodeStack(MachInst inst, int &disp); + bool valid() const { return tc != NULL; } + bool trace(ThreadContext *tc, const StaticInstPtr &inst); - void trace(ThreadContext *tc, bool is_call); + public: + const std::vector &getstack() const { return stack; } - public: - StackTrace(); - StackTrace(ThreadContext *tc, const StaticInstPtr &inst); - ~StackTrace(); - - void clear() - { - tc = 0; - stack.clear(); - } - - bool valid() const { return tc != NULL; } - bool trace(ThreadContext *tc, const StaticInstPtr &inst); - - public: - const std::vector &getstack() const { return stack; } - - static const int user = 1; - static const int console = 2; - static const int unknown = 3; + static const int user = 1; + static const int console = 2; + static const int unknown = 3; #if TRACING_ON - private: - void dump(); + private: + void dump(); - public: - void dprintf() { if (DTRACE(Stack)) dump(); } + public: + void dprintf() { if (DTRACE(Stack)) dump(); } #else - public: - void dprintf() {} + public: + void dprintf() {} #endif - }; +}; - inline bool - StackTrace::trace(ThreadContext *tc, const StaticInstPtr &inst) - { - if (!inst->isCall() && !inst->isReturn()) - return false; +inline bool +StackTrace::trace(ThreadContext *tc, const StaticInstPtr &inst) +{ + if (!inst->isCall() && !inst->isReturn()) + return false; - if (valid()) - clear(); + if (valid()) + clear(); - trace(tc, !inst->isReturn()); - return true; - } + trace(tc, !inst->isReturn()); + return true; } +} // namespace X86ISA + #endif // __ARCH_X86_STACKTRACE_HH__