Home | History | Annotate | Download | only in Utility
      1 //===-- UnwindMacOSXFrameBackchain.h ----------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef lldb_UnwindMacOSXFrameBackchain_h_
     11 #define lldb_UnwindMacOSXFrameBackchain_h_
     12 
     13 // C Includes
     14 // C++ Includes
     15 #include <vector>
     16 
     17 // Other libraries and framework includes
     18 
     19 // Project includes
     20 #include "lldb/lldb-private.h"
     21 #include "lldb/Target/Unwind.h"
     22 
     23 class UnwindMacOSXFrameBackchain : public lldb_private::Unwind
     24 {
     25 public:
     26     UnwindMacOSXFrameBackchain (lldb_private::Thread &thread);
     27 
     28     virtual
     29     ~UnwindMacOSXFrameBackchain()
     30     {
     31     }
     32 
     33 protected:
     34     virtual void
     35     DoClear()
     36     {
     37         m_cursors.clear();
     38     }
     39 
     40     virtual uint32_t
     41     DoGetFrameCount();
     42 
     43     bool
     44     DoGetFrameInfoAtIndex (uint32_t frame_idx,
     45                          lldb::addr_t& cfa,
     46                          lldb::addr_t& pc);
     47 
     48     lldb::RegisterContextSP
     49     DoCreateRegisterContextForFrame (lldb_private::StackFrame *frame);
     50 
     51     friend class RegisterContextMacOSXFrameBackchain;
     52 
     53     struct Cursor
     54     {
     55         lldb::addr_t pc;    // Program counter
     56         lldb::addr_t fp;    // Frame pointer for us with backchain
     57     };
     58 
     59 private:
     60     std::vector<Cursor> m_cursors;
     61 
     62     size_t
     63     GetStackFrameData_i386 (const lldb_private::ExecutionContext &exe_ctx);
     64 
     65     size_t
     66     GetStackFrameData_x86_64 (const lldb_private::ExecutionContext &exe_ctx);
     67 
     68     //------------------------------------------------------------------
     69     // For UnwindMacOSXFrameBackchain only
     70     //------------------------------------------------------------------
     71     DISALLOW_COPY_AND_ASSIGN (UnwindMacOSXFrameBackchain);
     72 };
     73 
     74 #endif  // lldb_UnwindMacOSXFrameBackchain_h_
     75