aboutsummaryrefslogtreecommitdiff
path: root/source/Plugins/Process/Utility/UnwindLLDB.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/Plugins/Process/Utility/UnwindLLDB.h')
-rw-r--r--source/Plugins/Process/Utility/UnwindLLDB.h37
1 files changed, 24 insertions, 13 deletions
diff --git a/source/Plugins/Process/Utility/UnwindLLDB.h b/source/Plugins/Process/Utility/UnwindLLDB.h
index ce897cd82423..d3c07078759b 100644
--- a/source/Plugins/Process/Utility/UnwindLLDB.h
+++ b/source/Plugins/Process/Utility/UnwindLLDB.h
@@ -10,8 +10,12 @@
#ifndef lldb_UnwindLLDB_h_
#define lldb_UnwindLLDB_h_
+// C Includes
+// C++ Includes
#include <vector>
+// Other libraries and framework includes
+// Project includes
#include "lldb/lldb-public.h"
#include "lldb/Core/ConstString.h"
#include "lldb/Symbol/FuncUnwinders.h"
@@ -27,9 +31,8 @@ class UnwindLLDB : public lldb_private::Unwind
{
public:
UnwindLLDB (lldb_private::Thread &thread);
-
- virtual
- ~UnwindLLDB() { }
+
+ ~UnwindLLDB() override = default;
enum RegisterSearchResult
{
@@ -62,23 +65,23 @@ protected:
};
void
- DoClear()
+ DoClear() override
{
m_frames.clear();
m_candidate_frame.reset();
m_unwind_complete = false;
}
- virtual uint32_t
- DoGetFrameCount();
+ uint32_t
+ DoGetFrameCount() override;
bool
- DoGetFrameInfoAtIndex (uint32_t frame_idx,
- lldb::addr_t& cfa,
- lldb::addr_t& start_pc);
+ DoGetFrameInfoAtIndex(uint32_t frame_idx,
+ lldb::addr_t& cfa,
+ lldb::addr_t& start_pc) override;
lldb::RegisterContextSP
- DoCreateRegisterContextForFrame (lldb_private::StackFrame *frame);
+ DoCreateRegisterContextForFrame(lldb_private::StackFrame *frame) override;
typedef std::shared_ptr<RegisterContextLLDB> RegisterContextLLDBSP;
@@ -112,7 +115,6 @@ protected:
}
private:
-
struct Cursor
{
lldb::addr_t start_pc; // The start address of the function/symbol for this frame - current pc if unknown
@@ -134,6 +136,15 @@ private:
std::vector<ConstString> m_user_supplied_trap_handler_functions;
+ //-----------------------------------------------------------------
+ // Check if Full UnwindPlan of First frame is valid or not.
+ // If not then try Fallback UnwindPlan of the frame. If Fallback
+ // UnwindPlan succeeds then update the Full UnwindPlan with the
+ // Fallback UnwindPlan.
+ //-----------------------------------------------------------------
+ void
+ UpdateUnwindPlanForFirstFrameIfInvalid (ABI* abi);
+
CursorSP
GetOneMoreFrame (ABI* abi);
@@ -149,6 +160,6 @@ private:
DISALLOW_COPY_AND_ASSIGN (UnwindLLDB);
};
-} // namespace lldb_private
+} // namespace lldb_private
-#endif // lldb_UnwindLLDB_h_
+#endif // lldb_UnwindLLDB_h_