arch,cpu: Consolidate most of the StackTrace classes into a base class.
[gem5.git] / src / arch / power / stacktrace.hh
index d67569ff944d8a5b453e00f82be035eaca125ec2..729daf1a979b24bdd6571336c42d1bdbfa9628e8 100644 (file)
 #ifndef __ARCH_POWER_STACKTRACE_HH__
 #define __ARCH_POWER_STACKTRACE_HH__
 
-#include "base/trace.hh"
-#include "cpu/static_inst.hh"
-#include "debug/Stack.hh"
-
-class ThreadContext;
-class StackTrace;
+#include "base/logging.hh"
+#include "cpu/profile.hh"
 
 namespace PowerISA
 {
 
-class StackTrace
+class StackTrace : public BaseStackTrace
 {
-  private:
-    ThreadContext *tc;
-    std::vector<Addr> stack;
-
-  private:
-    bool isEntry(Addr addr);
-    bool decodePrologue(Addr sp, Addr callpc, Addr func, int &size, Addr &ra);
-    bool decodeSave(MachInst inst, int &reg, int &disp);
-    bool decodeStack(MachInst inst, int &disp);
-
-    void trace(ThreadContext *tc, bool is_call);
-
-  public:
-    StackTrace();
-    StackTrace(ThreadContext *tc, const StaticInstPtr &inst);
-    ~StackTrace();
-
+  protected:
     void
-    clear()
+    trace(ThreadContext *tc, bool is_call) override
     {
-        tc = 0;
-        stack.clear();
+        panic("StackTrace::trace not implemented.");
     }
-
-    bool
-    valid() const
-    {
-        return tc != NULL;
-    }
-
-    bool trace(ThreadContext *tc, const StaticInstPtr &inst);
-
-  public:
-    const std::vector<Addr> &
-    getstack() const
-    {
-        return stack;
-    }
-
-    static const int user = 1;
-    static const int console = 2;
-    static const int unknown = 3;
-
-#if TRACING_ON
-  private:
-    void dump();
-
-  public:
-    void
-    dprintf()
-    {
-        if (DTRACE(Stack))
-            dump();
-    }
-#else
-  public:
-    void
-    dprintf()
-    {
-    }
-#endif
 };
 
-inline bool
-StackTrace::trace(ThreadContext *tc, const StaticInstPtr &inst)
-{
-    if (!inst->isCall() && !inst->isReturn())
-        return false;
-
-    if (valid())
-        clear();
-
-    trace(tc, !inst->isReturn());
-    return true;
-}
-
 } // namespace PowerISA
 
 #endif // __ARCH_POWER_STACKTRACE_HH__