diff options
| author | Pavel Labath <labath@google.com> | 2016-08-31 17:43:49 +0000 |
|---|---|---|
| committer | Pavel Labath <labath@google.com> | 2016-08-31 17:43:49 +0000 |
| commit | c7f76104b35f8e30b10405cab374f12b1ac01473 (patch) | |
| tree | c5c0f843d2150956efa764b44c34ffb7c2346768 /lldb | |
| parent | 0de580aaabbdb1a8eb7a0464f08a28b40282d50d (diff) | |
| download | bcm5719-llvm-c7f76104b35f8e30b10405cab374f12b1ac01473.tar.gz bcm5719-llvm-c7f76104b35f8e30b10405cab374f12b1ac01473.zip | |
Always rely on CFI unwind info for linux vdso
Summary:
The vdso is full of hand-written assembly which the instruction emulator has a hard time
understanding. Luckily, the kernel already provides us with correct unwind info for them. So
let's use it.
This fixes (at least) the AssertingInferiorTestCase.test_inferior_asserting_disassemble test on
android N i386.
Reviewers: tberghammer
Subscribers: tberghammer, danalbert, lldb-commits
Differential Revision: https://reviews.llvm.org/D24079
llvm-svn: 280264
Diffstat (limited to 'lldb')
| -rw-r--r-- | lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp | 27 | ||||
| -rw-r--r-- | lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h | 3 |
2 files changed, 26 insertions, 4 deletions
diff --git a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp index 6515c02f37e..772efc17c1e 100644 --- a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp +++ b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp @@ -7,8 +7,12 @@ // //===----------------------------------------------------------------------===// -// C Includes -// C++ Includes +// Main header include +#include "DynamicLoaderPOSIXDYLD.h" + +// Project includes +#include "AuxVector.h" + // Other libraries and framework includes #include "lldb/Core/PluginManager.h" #include "lldb/Core/Log.h" @@ -22,9 +26,10 @@ #include "lldb/Target/Thread.h" #include "lldb/Target/ThreadPlanRunToAddress.h" #include "lldb/Breakpoint/BreakpointLocation.h" +#include "lldb/Symbol/Function.h" -#include "AuxVector.h" -#include "DynamicLoaderPOSIXDYLD.h" +// C++ Includes +// C Includes using namespace lldb; using namespace lldb_private; @@ -691,3 +696,17 @@ DynamicLoaderPOSIXDYLD::ResolveExecutableModule (lldb::ModuleSP &module_sp) target.SetExecutableModule (module_sp, false); } + +bool +DynamicLoaderPOSIXDYLD::AlwaysRelyOnEHUnwindInfo(lldb_private::SymbolContext &sym_ctx) +{ + ModuleSP module_sp; + if (sym_ctx.symbol) + module_sp = sym_ctx.symbol->GetAddressRef().GetModule(); + if (!module_sp && sym_ctx.function) + module_sp = sym_ctx.function->GetAddressRange().GetBaseAddress().GetModule(); + if (!module_sp) + return false; + + return module_sp->GetFileSpec().GetPath() == "[vdso]"; +} diff --git a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h index 890808c5179..1049e543256 100644 --- a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h +++ b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h @@ -172,6 +172,9 @@ protected: void ResolveExecutableModule(lldb::ModuleSP &module_sp); + bool + AlwaysRelyOnEHUnwindInfo(lldb_private::SymbolContext &sym_ctx) override; + private: DISALLOW_COPY_AND_ASSIGN(DynamicLoaderPOSIXDYLD); }; |

