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
This commit is contained in:
Pavel Labath 2016-08-31 17:43:49 +00:00
parent 0de580aaab
commit c7f76104b3
2 changed files with 26 additions and 4 deletions

View File

@ -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]";
}

View File

@ -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);
};