forked from OSchip/llvm-project
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:
parent
0de580aaab
commit
c7f76104b3
|
@ -7,8 +7,12 @@
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
// C Includes
|
// Main header include
|
||||||
// C++ Includes
|
#include "DynamicLoaderPOSIXDYLD.h"
|
||||||
|
|
||||||
|
// Project includes
|
||||||
|
#include "AuxVector.h"
|
||||||
|
|
||||||
// Other libraries and framework includes
|
// Other libraries and framework includes
|
||||||
#include "lldb/Core/PluginManager.h"
|
#include "lldb/Core/PluginManager.h"
|
||||||
#include "lldb/Core/Log.h"
|
#include "lldb/Core/Log.h"
|
||||||
|
@ -22,9 +26,10 @@
|
||||||
#include "lldb/Target/Thread.h"
|
#include "lldb/Target/Thread.h"
|
||||||
#include "lldb/Target/ThreadPlanRunToAddress.h"
|
#include "lldb/Target/ThreadPlanRunToAddress.h"
|
||||||
#include "lldb/Breakpoint/BreakpointLocation.h"
|
#include "lldb/Breakpoint/BreakpointLocation.h"
|
||||||
|
#include "lldb/Symbol/Function.h"
|
||||||
|
|
||||||
#include "AuxVector.h"
|
// C++ Includes
|
||||||
#include "DynamicLoaderPOSIXDYLD.h"
|
// C Includes
|
||||||
|
|
||||||
using namespace lldb;
|
using namespace lldb;
|
||||||
using namespace lldb_private;
|
using namespace lldb_private;
|
||||||
|
@ -691,3 +696,17 @@ DynamicLoaderPOSIXDYLD::ResolveExecutableModule (lldb::ModuleSP &module_sp)
|
||||||
|
|
||||||
target.SetExecutableModule (module_sp, false);
|
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]";
|
||||||
|
}
|
||||||
|
|
|
@ -172,6 +172,9 @@ protected:
|
||||||
void
|
void
|
||||||
ResolveExecutableModule(lldb::ModuleSP &module_sp);
|
ResolveExecutableModule(lldb::ModuleSP &module_sp);
|
||||||
|
|
||||||
|
bool
|
||||||
|
AlwaysRelyOnEHUnwindInfo(lldb_private::SymbolContext &sym_ctx) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DISALLOW_COPY_AND_ASSIGN(DynamicLoaderPOSIXDYLD);
|
DISALLOW_COPY_AND_ASSIGN(DynamicLoaderPOSIXDYLD);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue