llvm-project/lldb/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.h
Jason Molenda f23bf7432c Add a new base class, Frame. It is a pure virtual function which
defines a protocol that all subclasses will implement.  StackFrame
is currently the only subclass and the methods that Frame vends are
nearly identical to StackFrame's old methods.

Update all callers to use Frame*/Frame& instead of pointers to
StackFrames.

This is almost entirely a mechanical change that touches a lot of
the code base so I'm committing it alone.  No new functionality is
added with this patch, no new subclasses of Frame exist yet.

I'll probably need to tweak some of the separation, possibly moving
some of StackFrame's methods up in to Frame, but this is a good
starting point.

<rdar://problem/15314068>

llvm-svn: 193907
2013-11-02 02:23:02 +00:00

75 lines
1.9 KiB
C++

//===-- UnwindMacOSXFrameBackchain.h ----------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef lldb_UnwindMacOSXFrameBackchain_h_
#define lldb_UnwindMacOSXFrameBackchain_h_
// C Includes
// C++ Includes
#include <vector>
// Other libraries and framework includes
// Project includes
#include "lldb/lldb-private.h"
#include "lldb/Target/Unwind.h"
class UnwindMacOSXFrameBackchain : public lldb_private::Unwind
{
public:
UnwindMacOSXFrameBackchain (lldb_private::Thread &thread);
virtual
~UnwindMacOSXFrameBackchain()
{
}
protected:
virtual void
DoClear()
{
m_cursors.clear();
}
virtual uint32_t
DoGetFrameCount();
bool
DoGetFrameInfoAtIndex (uint32_t frame_idx,
lldb::addr_t& cfa,
lldb::addr_t& pc);
lldb::RegisterContextSP
DoCreateRegisterContextForFrame (lldb_private::Frame *frame);
friend class RegisterContextMacOSXFrameBackchain;
struct Cursor
{
lldb::addr_t pc; // Program counter
lldb::addr_t fp; // Frame pointer for us with backchain
};
private:
std::vector<Cursor> m_cursors;
size_t
GetStackFrameData_i386 (const lldb_private::ExecutionContext &exe_ctx);
size_t
GetStackFrameData_x86_64 (const lldb_private::ExecutionContext &exe_ctx);
//------------------------------------------------------------------
// For UnwindMacOSXFrameBackchain only
//------------------------------------------------------------------
DISALLOW_COPY_AND_ASSIGN (UnwindMacOSXFrameBackchain);
};
#endif // lldb_UnwindMacOSXFrameBackchain_h_