LLDB mainline
|
#include <UnwindAssemblyInstEmulation.h>
Static Public Member Functions | |
static lldb_private::UnwindAssembly * | CreateInstance (const lldb_private::ArchSpec &arch) |
static void | Initialize () |
static void | Terminate () |
static llvm::StringRef | GetPluginNameStatic () |
static llvm::StringRef | GetPluginDescriptionStatic () |
Static Public Member Functions inherited from lldb_private::UnwindAssembly | |
static lldb::UnwindAssemblySP | FindPlugin (const ArchSpec &arch) |
Private Types | |
typedef std::map< uint64_t, uint64_t > | PushedRegisterToAddrMap |
typedef std::map< uint64_t, lldb_private::RegisterValue > | RegisterValueMap |
Private Member Functions | |
UnwindAssemblyInstEmulation (const lldb_private::ArchSpec &arch, lldb_private::EmulateInstruction *inst_emulator) | |
size_t | WriteMemory (lldb_private::EmulateInstruction *instruction, const lldb_private::EmulateInstruction::Context &context, lldb::addr_t addr, const void *dst, size_t length) |
bool | ReadRegister (lldb_private::EmulateInstruction *instruction, const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue ®_value) |
bool | WriteRegister (lldb_private::EmulateInstruction *instruction, const lldb_private::EmulateInstruction::Context &context, const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue ®_value) |
void | SetRegisterValue (const lldb_private::RegisterInfo ®_info, const lldb_private::RegisterValue ®_value) |
bool | GetRegisterValue (const lldb_private::RegisterInfo ®_info, lldb_private::RegisterValue ®_value) |
Static Private Member Functions | |
static size_t | ReadMemory (lldb_private::EmulateInstruction *instruction, void *baton, const lldb_private::EmulateInstruction::Context &context, lldb::addr_t addr, void *dst, size_t length) |
static size_t | WriteMemory (lldb_private::EmulateInstruction *instruction, void *baton, const lldb_private::EmulateInstruction::Context &context, lldb::addr_t addr, const void *dst, size_t length) |
static bool | ReadRegister (lldb_private::EmulateInstruction *instruction, void *baton, const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue ®_value) |
static bool | WriteRegister (lldb_private::EmulateInstruction *instruction, void *baton, const lldb_private::EmulateInstruction::Context &context, const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue ®_value) |
static uint64_t | MakeRegisterKindValuePair (const lldb_private::RegisterInfo ®_info) |
Private Attributes | |
std::unique_ptr< lldb_private::EmulateInstruction > | m_inst_emulator_up |
lldb_private::AddressRange * | m_range_ptr |
lldb_private::UnwindPlan * | m_unwind_plan_ptr |
lldb_private::UnwindPlan::RowSP | m_curr_row |
uint64_t | m_initial_sp |
lldb_private::RegisterInfo | m_cfa_reg_info |
bool | m_fp_is_cfa |
RegisterValueMap | m_register_values |
PushedRegisterToAddrMap | m_pushed_regs |
bool | m_curr_row_modified |
uint32_t | m_forward_branch_offset |
Additional Inherited Members | |
Protected Member Functions inherited from lldb_private::UnwindAssembly | |
UnwindAssembly (const ArchSpec &arch) | |
Protected Attributes inherited from lldb_private::UnwindAssembly | |
ArchSpec | m_arch |
Definition at line 18 of file UnwindAssemblyInstEmulation.h.
|
private |
Definition at line 131 of file UnwindAssemblyInstEmulation.h.
|
private |
Definition at line 135 of file UnwindAssemblyInstEmulation.h.
|
overridedefault |
|
inlineprivate |
Definition at line 63 of file UnwindAssemblyInstEmulation.h.
References m_inst_emulator_up, ReadMemory(), ReadRegister(), WriteMemory(), and WriteRegister().
|
overridevirtual |
Implements lldb_private::UnwindAssembly.
Definition at line 308 of file UnwindAssemblyInstEmulation.cpp.
|
static |
Definition at line 326 of file UnwindAssemblyInstEmulation.cpp.
References lldb_private::eInstructionTypePrologueEpilogue, and lldb_private::EmulateInstruction::FindPlugin().
Referenced by Initialize(), and Terminate().
|
overridevirtual |
Implements lldb_private::UnwindAssembly.
Definition at line 319 of file UnwindAssemblyInstEmulation.cpp.
|
overridevirtual |
Implements lldb_private::UnwindAssembly.
Definition at line 313 of file UnwindAssemblyInstEmulation.cpp.
|
overridevirtual |
Implements lldb_private::UnwindAssembly.
Definition at line 36 of file UnwindAssemblyInstEmulation.cpp.
References error().
bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly | ( | lldb_private::AddressRange & | func, |
uint8_t * | opcode_data, | ||
size_t | opcode_size, | ||
lldb_private::UnwindPlan & | unwind_plan | ||
) |
Definition at line 53 of file UnwindAssemblyInstEmulation.cpp.
References lldb_private::RegisterInfo::byte_size, lldb_private::AddressRange::ContainsFileAddress(), lldb_private::Disassembler::DisassembleBytes(), lldb_private::UnwindPlan::Dump(), lldb_private::Instruction::Dump(), lldb::eRegisterKindGeneric, lldb_private::Instruction::GetAddress(), lldb_private::ArchSpec::GetAddressByteSize(), lldb_private::AddressRange::GetBaseAddress(), lldb_private::AddressRange::GetByteSize(), lldb_private::Opcode::GetByteSize(), lldb_private::Address::GetFileAddress(), lldb_private::UnwindPlan::GetInitialCFARegister(), lldb_private::InstructionList::GetInstructionAtIndex(), lldb_private::UnwindPlan::GetLastRow(), lldb_private::GetLog(), lldb_private::InstructionList::GetMaxOpcocdeByteSize(), lldb_private::Instruction::GetOpcode(), lldb_private::UnwindPlan::GetRegisterKind(), lldb_private::UnwindPlan::GetRowCount(), lldb_private::InstructionList::GetSize(), lldb_private::StreamString::GetString(), lldb_private::Log::GetVerbose(), lldb_private::UnwindPlan::InsertRow(), lldb_private::Address::IsValid(), lldb_private::RegisterInfo::kinds, LLDB_REGNUM_GENERIC_SP, lldb_private::UnwindAssembly::m_arch, m_cfa_reg_info, m_curr_row, m_curr_row_modified, m_forward_branch_offset, m_fp_is_cfa, m_initial_sp, m_inst_emulator_up, m_pushed_regs, m_range_ptr, m_register_values, m_unwind_plan_ptr, lldb_private::RegisterInfo::name, lldb_private::FormatEntity::Parse(), lldb_private::Stream::Printf(), lldb_private::Log::PutString(), lldb_private::UnwindPlan::Row::SetOffset(), SetRegisterValue(), lldb_private::RegisterValue::SetUInt(), and lldb_private::EmulateInstruction::UnconditionalCondition.
|
static |
Definition at line 345 of file UnwindAssemblyInstEmulation.cpp.
Referenced by Initialize().
|
inlineoverridevirtual |
Implements lldb_private::PluginInterface.
Definition at line 59 of file UnwindAssemblyInstEmulation.h.
References GetPluginNameStatic().
|
inlinestatic |
Definition at line 55 of file UnwindAssemblyInstEmulation.h.
Referenced by GetPluginName(), and Initialize().
|
private |
Definition at line 364 of file UnwindAssemblyInstEmulation.cpp.
References lldb_private::RegisterInfo::byte_size, m_register_values, MakeRegisterKindValuePair(), and lldb_private::RegisterValue::SetUInt().
Referenced by ReadRegister(), and WriteRegister().
|
static |
Definition at line 336 of file UnwindAssemblyInstEmulation.cpp.
References CreateInstance(), GetPluginDescriptionStatic(), GetPluginNameStatic(), and lldb_private::PluginManager::RegisterPlugin().
|
staticprivate |
Definition at line 349 of file UnwindAssemblyInstEmulation.cpp.
References lldb_private::EmulateInstruction::GetBestRegisterKindAndNumber().
Referenced by GetRegisterValue(), and SetRegisterValue().
|
staticprivate |
Definition at line 378 of file UnwindAssemblyInstEmulation.cpp.
References lldb_private::EmulateInstruction::Context::Dump(), lldb_private::GetLog(), lldb_private::StreamString::GetString(), lldb_private::Log::GetVerbose(), lldb_private::Stream::Printf(), and lldb_private::Log::PutString().
Referenced by UnwindAssemblyInstEmulation().
|
private |
Definition at line 487 of file UnwindAssemblyInstEmulation.cpp.
References lldb_private::DumpRegisterValue(), lldb::eFormatDefault, lldb_private::GetLog(), GetRegisterValue(), lldb_private::StreamString::GetString(), lldb_private::Log::GetVerbose(), lldb_private::RegisterInfo::name, lldb_private::Stream::Printf(), and lldb_private::Log::PutString().
|
staticprivate |
Definition at line 477 of file UnwindAssemblyInstEmulation.cpp.
Referenced by UnwindAssemblyInstEmulation().
|
private |
Definition at line 359 of file UnwindAssemblyInstEmulation.cpp.
References m_register_values, and MakeRegisterKindValuePair().
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), and WriteRegister().
|
static |
Definition at line 341 of file UnwindAssemblyInstEmulation.cpp.
References CreateInstance(), and lldb_private::PluginManager::UnregisterPlugin().
|
private |
Definition at line 407 of file UnwindAssemblyInstEmulation.cpp.
References lldb_private::EmulateInstruction::Context::ContextInfo::RegisterToRegisterPlusOffset::data_reg, lldb_private::EmulateInstruction::Context::Dump(), lldb_private::DumpDataExtractor(), lldb_private::EmulateInstruction::eContextAbsoluteBranchRegister, lldb_private::EmulateInstruction::eContextAdjustBaseRegister, lldb_private::EmulateInstruction::eContextAdjustPC, lldb_private::EmulateInstruction::eContextAdjustStackPointer, lldb_private::EmulateInstruction::eContextAdvancePC, lldb_private::EmulateInstruction::eContextArithmetic, lldb_private::EmulateInstruction::eContextImmediate, lldb_private::EmulateInstruction::eContextInvalid, lldb_private::EmulateInstruction::eContextPopRegisterOffStack, lldb_private::EmulateInstruction::eContextPushRegisterOnStack, lldb_private::EmulateInstruction::eContextReadOpcode, lldb_private::EmulateInstruction::eContextRegisterLoad, lldb_private::EmulateInstruction::eContextRegisterPlusOffset, lldb_private::EmulateInstruction::eContextRegisterStore, lldb_private::EmulateInstruction::eContextRelativeBranchImmediate, lldb_private::EmulateInstruction::eContextReturnFromException, lldb_private::EmulateInstruction::eContextSupervisorCall, lldb_private::EmulateInstruction::eContextTableBranchReadMemory, lldb_private::EmulateInstruction::eContextWriteMemoryRandomBits, lldb_private::EmulateInstruction::eContextWriteRegisterRandomBits, lldb::eFormatBytes, lldb_private::EmulateInstruction::eInfoTypeRegisterToRegisterPlusOffset, lldb::eRegisterKindGeneric, lldb_private::ArchSpec::GetAddressByteSize(), lldb_private::EmulateInstruction::GetArchitecture(), lldb_private::ArchSpec::GetByteOrder(), lldb_private::EmulateInstruction::Context::GetInfoType(), lldb_private::GetLog(), lldb_private::UnwindPlan::GetRegisterKind(), lldb_private::StreamString::GetString(), lldb_private::Log::GetVerbose(), lldb_private::EmulateInstruction::Context::info, lldb_private::RegisterInfo::kinds, LLDB_INVALID_REGNUM, LLDB_REGNUM_GENERIC_SP, m_curr_row, m_curr_row_modified, m_initial_sp, m_pushed_regs, m_unwind_plan_ptr, lldb_private::Stream::PutCString(), lldb_private::Log::PutString(), lldb_private::EmulateInstruction::Context::ContextInfo::RegisterToRegisterPlusOffset, lldb_private::EmulateInstruction::Context::type, and UINT32_MAX.
|
staticprivate |
Definition at line 397 of file UnwindAssemblyInstEmulation.cpp.
Referenced by UnwindAssemblyInstEmulation().
|
private |
Definition at line 515 of file UnwindAssemblyInstEmulation.cpp.
References lldb_private::EmulateInstruction::Context::ContextInfo::address, lldb_private::EmulateInstruction::Context::Dump(), lldb_private::DumpRegisterValue(), lldb_private::EmulateInstruction::eContextAbsoluteBranchRegister, lldb_private::EmulateInstruction::eContextAdjustBaseRegister, lldb_private::EmulateInstruction::eContextAdjustPC, lldb_private::EmulateInstruction::eContextAdjustStackPointer, lldb_private::EmulateInstruction::eContextAdvancePC, lldb_private::EmulateInstruction::eContextArithmetic, lldb_private::EmulateInstruction::eContextImmediate, lldb_private::EmulateInstruction::eContextInvalid, lldb_private::EmulateInstruction::eContextPopRegisterOffStack, lldb_private::EmulateInstruction::eContextPushRegisterOnStack, lldb_private::EmulateInstruction::eContextReadOpcode, lldb_private::EmulateInstruction::eContextRegisterLoad, lldb_private::EmulateInstruction::eContextRegisterPlusOffset, lldb_private::EmulateInstruction::eContextRegisterStore, lldb_private::EmulateInstruction::eContextRelativeBranchImmediate, lldb_private::EmulateInstruction::eContextRestoreStackPointer, lldb_private::EmulateInstruction::eContextReturnFromException, lldb_private::EmulateInstruction::eContextSetFramePointer, lldb_private::EmulateInstruction::eContextSupervisorCall, lldb_private::EmulateInstruction::eContextTableBranchReadMemory, lldb_private::EmulateInstruction::eContextWriteMemoryRandomBits, lldb_private::EmulateInstruction::eContextWriteRegisterRandomBits, lldb::eFormatDefault, lldb_private::EmulateInstruction::eInfoTypeAddress, lldb_private::EmulateInstruction::eInfoTypeImmediate, lldb_private::EmulateInstruction::eInfoTypeImmediateSigned, lldb_private::EmulateInstruction::eInfoTypeISA, lldb_private::EmulateInstruction::eInfoTypeISAAndImmediate, lldb_private::EmulateInstruction::eInfoTypeISAAndImmediateSigned, lldb_private::EmulateInstruction::eInfoTypeRegisterPlusOffset, lldb::eRegisterKindGeneric, lldb_private::RegisterValue::GetAsUInt64(), lldb_private::EmulateInstruction::Context::GetInfoType(), lldb_private::GetLog(), lldb_private::UnwindPlan::GetRegisterKind(), GetRegisterValue(), lldb_private::StreamString::GetString(), lldb_private::Log::GetVerbose(), lldb_private::EmulateInstruction::Context::info, lldb_private::EmulateInstruction::Context::ContextInfo::ISAAndImmediate, lldb_private::EmulateInstruction::Context::ContextInfo::ISAAndImmediateSigned, lldb_private::RegisterInfo::kinds, LLDB_INVALID_REGNUM, LLDB_REGNUM_GENERIC_FLAGS, LLDB_REGNUM_GENERIC_PC, LLDB_REGNUM_GENERIC_SP, m_cfa_reg_info, m_curr_row, m_curr_row_modified, m_forward_branch_offset, m_fp_is_cfa, m_initial_sp, m_inst_emulator_up, m_pushed_regs, m_unwind_plan_ptr, lldb_private::RegisterInfo::name, lldb_private::Stream::Printf(), lldb_private::Stream::PutCString(), lldb_private::Log::PutString(), lldb_private::EmulateInstruction::Context::ContextInfo::RegisterPlusOffset::reg, lldb_private::EmulateInstruction::Context::ContextInfo::RegisterPlusOffset, SetRegisterValue(), lldb_private::EmulateInstruction::Context::ContextInfo::ISAAndImmediateSigned::signed_data32, lldb_private::EmulateInstruction::Context::ContextInfo::signed_immediate, lldb_private::EmulateInstruction::Context::ContextInfo::RegisterPlusOffset::signed_offset, lldb_private::EmulateInstruction::Context::type, lldb_private::EmulateInstruction::Context::ContextInfo::ISAAndImmediate::unsigned_data32, and lldb_private::EmulateInstruction::Context::ContextInfo::unsigned_immediate.
|
staticprivate |
Definition at line 506 of file UnwindAssemblyInstEmulation.cpp.
Referenced by UnwindAssemblyInstEmulation().
|
private |
Definition at line 133 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), and WriteRegister().
|
private |
Definition at line 130 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), WriteMemory(), and WriteRegister().
|
private |
Definition at line 146 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), WriteMemory(), and WriteRegister().
|
private |
Definition at line 149 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), and WriteRegister().
|
private |
Definition at line 134 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), and WriteRegister().
|
private |
Definition at line 132 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), WriteMemory(), and WriteRegister().
|
private |
Definition at line 127 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), UnwindAssemblyInstEmulation(), and WriteRegister().
|
private |
Definition at line 137 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), WriteMemory(), and WriteRegister().
|
private |
Definition at line 128 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly().
|
private |
Definition at line 136 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), GetRegisterValue(), and SetRegisterValue().
|
private |
Definition at line 129 of file UnwindAssemblyInstEmulation.h.
Referenced by GetNonCallSiteUnwindPlanFromAssembly(), WriteMemory(), and WriteRegister().