diff options
author | Pavel Labath <pavel@labath.sk> | 2019-05-24 09:54:39 +0000 |
---|---|---|
committer | Pavel Labath <pavel@labath.sk> | 2019-05-24 09:54:39 +0000 |
commit | 1a0312ca0b20d16edb859065bbace75f6701c92e (patch) | |
tree | fe9cd486333ced50714cac80b23b24ffbb90267f /lldb/source/Symbol/FuncUnwinders.cpp | |
parent | 7d4a67852da7ecce3ae43b61baa9f0cd068b05c6 (diff) | |
download | bcm5719-llvm-1a0312ca0b20d16edb859065bbace75f6701c92e.tar.gz bcm5719-llvm-1a0312ca0b20d16edb859065bbace75f6701c92e.zip |
[FuncUnwinders] Use "symbol file" unwind plans for unwinding
Summary:
Previous patch (r360409) introduced the "symbol file unwind plan"
concept, but that plan wasn't used for unwinding yet. With this patch,
we start to consider the new plan as a possible strategy for both
synchronous and asynchronous unwinding. I also add a test that asserts
that unwinding via breakpad STACK CFI info works end-to-end.
Reviewers: jasonmolenda, clayborg
Subscribers: lldb-commits, amccarth, markmentovai
Differential Revision: https://reviews.llvm.org/D61853
llvm-svn: 361618
Diffstat (limited to 'lldb/source/Symbol/FuncUnwinders.cpp')
-rw-r--r-- | lldb/source/Symbol/FuncUnwinders.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lldb/source/Symbol/FuncUnwinders.cpp b/lldb/source/Symbol/FuncUnwinders.cpp index bbdb5e1bbf7..33b2e295989 100644 --- a/lldb/source/Symbol/FuncUnwinders.cpp +++ b/lldb/source/Symbol/FuncUnwinders.cpp @@ -54,9 +54,12 @@ FuncUnwinders::FuncUnwinders(UnwindTable &unwind_table, AddressRange range) FuncUnwinders::~FuncUnwinders() {} -UnwindPlanSP FuncUnwinders::GetUnwindPlanAtCallSite(Target &target) { +UnwindPlanSP FuncUnwinders::GetUnwindPlanAtCallSite(Target &target, + Thread &thread) { std::lock_guard<std::recursive_mutex> guard(m_mutex); + if (UnwindPlanSP plan_sp = GetSymbolFileUnwindPlan(thread)) + return plan_sp; if (UnwindPlanSP plan_sp = GetEHFrameUnwindPlan(target)) return plan_sp; if (UnwindPlanSP plan_sp = GetDebugFrameUnwindPlan(target)) @@ -357,6 +360,8 @@ UnwindPlanSP FuncUnwinders::GetUnwindPlanAtNonCallSite(Target &target, return eh_frame_sp; } + if (UnwindPlanSP plan_sp = GetSymbolFileUnwindPlan(thread)) + return plan_sp; if (UnwindPlanSP plan_sp = GetEHFrameAugmentedUnwindPlan(target, thread)) return plan_sp; if (UnwindPlanSP plan_sp = GetDebugFrameAugmentedUnwindPlan(target, thread)) |