arch: Create a base class for decoders.
[gem5.git] / src / arch / x86 / stacktrace.hh
index bd0a4b7ad9d9e7c80c0d439910ff1625a131d5f8..8fa3b65d6c56e8b674a70bd5fe66b7d5c47741f8 100644 (file)
 #ifndef __ARCH_X86_STACKTRACE_HH__
 #define __ARCH_X86_STACKTRACE_HH__
 
-#include "base/trace.hh"
-#include "cpu/static_inst.hh"
-#include "debug/Stack.hh"
+#include "cpu/profile.hh"
 
-class ThreadContext;
 namespace X86ISA
 {
-    class StackTrace;
 
-    class ProcessInfo
-    {
-      private:
-        ThreadContext *tc;
-
-        int thread_info_size;
-        int task_struct_size;
-        int task_off;
-        int pid_off;
-        int name_off;
-
-      public:
-        ProcessInfo(ThreadContext *_tc);
-
-        Addr task(Addr ksp) const;
-        int pid(Addr ksp) const;
-        std::string name(Addr ksp) const;
-    };
-
-    class StackTrace
-    {
-      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();
-
-        void clear()
-        {
-            tc = 0;
-            stack.clear();
-        }
-
-        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();
+class StackTrace : public BaseStackTrace
+{
+  protected:
+    void trace(ThreadContext *tc, bool is_call) override {};
+};
 
-        trace(tc, !inst->isReturn());
-        return true;
-    }
-}
+} // namespace X86ISA
 
 #endif // __ARCH_X86_STACKTRACE_HH__