summaryrefslogtreecommitdiffstats
path: root/lldb/source/Symbol/UnwindPlan.cpp
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2015-02-23 10:29:01 +0000
committerPavel Labath <labath@google.com>2015-02-23 10:29:01 +0000
commitdbb41cf41899db8c2900800f5cb1b8eff9fbcc29 (patch)
treed79bc6cb4cdff15682a58780cdda637378b00821 /lldb/source/Symbol/UnwindPlan.cpp
parentab970f5e08a976d4ea1ae64e4b3b9ff15a88aeb9 (diff)
downloadbcm5719-llvm-dbb41cf41899db8c2900800f5cb1b8eff9fbcc29.tar.gz
bcm5719-llvm-dbb41cf41899db8c2900800f5cb1b8eff9fbcc29.zip
Support evaluation of DWARF expressions setting CFA
Summary: This patch enables evaluation of DWARF expressions setting the CFA during stack unwinding. This makes TestSigtrampUnwind "almost" pass on linux. I am not enabling the test yet since the symbol name for the signal trampoline does not get resolved properly due to a different bug, but apart from that, the backtrace is sane. I am unsure how this change affects Mac. I think it makes the unwinder prefer the DWARF unwind plan instead of some custom platform-dependant plan. However, it does not affect the end result - the stack unwinding works as expected. Reviewers: jasonmolenda Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D7792 llvm-svn: 230211
Diffstat (limited to 'lldb/source/Symbol/UnwindPlan.cpp')
-rw-r--r--lldb/source/Symbol/UnwindPlan.cpp4
1 files changed, 1 insertions, 3 deletions
diff --git a/lldb/source/Symbol/UnwindPlan.cpp b/lldb/source/Symbol/UnwindPlan.cpp
index d4b06d5c925..b35a6e7b28a 100644
--- a/lldb/source/Symbol/UnwindPlan.cpp
+++ b/lldb/source/Symbol/UnwindPlan.cpp
@@ -434,10 +434,8 @@ UnwindPlan::PlanValidAtAddress (Address addr)
// If the 0th Row of unwind instructions is missing, or if it doesn't provide
// a register to use to find the Canonical Frame Address, this is not a valid UnwindPlan.
- // CFA set by a DWARF expression is not currently supported, so ignore that as well.
if (GetRowAtIndex(0).get() == nullptr ||
- GetRowAtIndex(0)->GetCFAValue().GetValueType() == Row::CFAValue::unspecified ||
- GetRowAtIndex(0)->GetCFAValue().GetValueType() == Row::CFAValue::isDWARFExpression)
+ GetRowAtIndex(0)->GetCFAValue().GetValueType() == Row::CFAValue::unspecified)
{
Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_UNWIND));
if (log)
OpenPOWER on IntegriCloud