LLDB mainline
|
#include <GDBRemoteRegisterContext.h>
Public Member Functions | |
GDBRemoteRegisterContext (ThreadGDBRemote &thread, uint32_t concrete_frame_idx, GDBRemoteDynamicRegisterInfoSP reg_info_sp, bool read_all_at_once, bool write_all_at_once) | |
~GDBRemoteRegisterContext () override | |
void | InvalidateAllRegisters () override |
size_t | GetRegisterCount () override |
const RegisterInfo * | GetRegisterInfoAtIndex (size_t reg) override |
size_t | GetRegisterSetCount () override |
const RegisterSet * | GetRegisterSet (size_t reg_set) override |
bool | ReadRegister (const RegisterInfo *reg_info, RegisterValue &value) override |
bool | WriteRegister (const RegisterInfo *reg_info, const RegisterValue &value) override |
bool | ReadAllRegisterValues (lldb::WritableDataBufferSP &data_sp) override |
bool | WriteAllRegisterValues (const lldb::DataBufferSP &data_sp) override |
bool | ReadAllRegisterValues (RegisterCheckpoint ®_checkpoint) override |
bool | WriteAllRegisterValues (const RegisterCheckpoint ®_checkpoint) override |
uint32_t | ConvertRegisterKindToRegisterNumber (lldb::RegisterKind kind, uint32_t num) override |
Convert from a given register numbering scheme to the lldb register numbering scheme. | |
bool | AArch64SVEReconfigure () |
![]() | |
RegisterContext (Thread &thread, uint32_t concrete_frame_idx) | |
~RegisterContext () override | |
void | InvalidateIfNeeded (bool force) |
virtual void | InvalidateAllRegisters ()=0 |
virtual size_t | GetRegisterCount ()=0 |
virtual const RegisterInfo * | GetRegisterInfoAtIndex (size_t reg)=0 |
virtual size_t | GetRegisterSetCount ()=0 |
virtual const RegisterSet * | GetRegisterSet (size_t reg_set)=0 |
virtual lldb::ByteOrder | GetByteOrder () |
virtual bool | ReadRegister (const RegisterInfo *reg_info, RegisterValue ®_value)=0 |
virtual bool | WriteRegister (const RegisterInfo *reg_info, const RegisterValue ®_value)=0 |
virtual bool | ReadAllRegisterValues (lldb::WritableDataBufferSP &data_sp) |
virtual bool | WriteAllRegisterValues (const lldb::DataBufferSP &data_sp) |
virtual bool | ReadAllRegisterValues (lldb_private::RegisterCheckpoint ®_checkpoint) |
virtual bool | WriteAllRegisterValues (const lldb_private::RegisterCheckpoint ®_checkpoint) |
bool | CopyFromRegisterContext (lldb::RegisterContextSP context) |
virtual uint32_t | ConvertRegisterKindToRegisterNumber (lldb::RegisterKind kind, uint32_t num) |
Convert from a given register numbering scheme to the lldb register numbering scheme. | |
virtual uint32_t | NumSupportedHardwareBreakpoints () |
virtual uint32_t | SetHardwareBreakpoint (lldb::addr_t addr, size_t size) |
virtual bool | ClearHardwareBreakpoint (uint32_t hw_idx) |
virtual uint32_t | NumSupportedHardwareWatchpoints () |
virtual uint32_t | SetHardwareWatchpoint (lldb::addr_t addr, size_t size, bool read, bool write) |
virtual bool | ClearHardwareWatchpoint (uint32_t hw_index) |
virtual bool | HardwareSingleStep (bool enable) |
virtual Status | ReadRegisterValueFromMemory (const lldb_private::RegisterInfo *reg_info, lldb::addr_t src_addr, uint32_t src_len, RegisterValue ®_value) |
virtual Status | WriteRegisterValueToMemory (const lldb_private::RegisterInfo *reg_info, lldb::addr_t dst_addr, uint32_t dst_len, const RegisterValue ®_value) |
virtual lldb::tid_t | GetThreadID () const |
virtual Thread & | GetThread () |
const RegisterInfo * | GetRegisterInfoByName (llvm::StringRef reg_name, uint32_t start_idx=0) |
const RegisterInfo * | GetRegisterInfo (lldb::RegisterKind reg_kind, uint32_t reg_num) |
uint64_t | GetPC (uint64_t fail_value=LLDB_INVALID_ADDRESS) |
bool | GetPCForSymbolication (Address &address) |
Get an address suitable for symbolication. | |
bool | SetPC (uint64_t pc) |
bool | SetPC (Address addr) |
uint64_t | GetSP (uint64_t fail_value=LLDB_INVALID_ADDRESS) |
bool | SetSP (uint64_t sp) |
uint64_t | GetFP (uint64_t fail_value=LLDB_INVALID_ADDRESS) |
bool | SetFP (uint64_t fp) |
const char * | GetRegisterName (uint32_t reg) |
uint64_t | GetReturnAddress (uint64_t fail_value=LLDB_INVALID_ADDRESS) |
uint64_t | GetFlags (uint64_t fail_value=0) |
uint64_t | ReadRegisterAsUnsigned (uint32_t reg, uint64_t fail_value) |
uint64_t | ReadRegisterAsUnsigned (const RegisterInfo *reg_info, uint64_t fail_value) |
bool | WriteRegisterFromUnsigned (uint32_t reg, uint64_t uval) |
bool | WriteRegisterFromUnsigned (const RegisterInfo *reg_info, uint64_t uval) |
bool | ConvertBetweenRegisterKinds (lldb::RegisterKind source_rk, uint32_t source_regnum, lldb::RegisterKind target_rk, uint32_t &target_regnum) |
lldb::TargetSP | CalculateTarget () override |
lldb::ProcessSP | CalculateProcess () override |
lldb::ThreadSP | CalculateThread () override |
lldb::StackFrameSP | CalculateStackFrame () override |
void | CalculateExecutionContext (ExecutionContext &exe_ctx) override |
Reconstruct the object's execution context into sc. | |
uint32_t | GetStopID () const |
void | SetStopID (uint32_t stop_id) |
![]() | |
virtual | ~ExecutionContextScope ()=default |
virtual lldb::TargetSP | CalculateTarget ()=0 |
virtual lldb::ProcessSP | CalculateProcess ()=0 |
virtual lldb::ThreadSP | CalculateThread ()=0 |
virtual lldb::StackFrameSP | CalculateStackFrame ()=0 |
virtual void | CalculateExecutionContext (ExecutionContext &exe_ctx)=0 |
Reconstruct the object's execution context into sc. | |
Protected Member Functions | |
bool | ReadRegisterBytes (const RegisterInfo *reg_info) |
bool | WriteRegisterBytes (const RegisterInfo *reg_info, DataExtractor &data, uint32_t data_offset) |
bool | PrivateSetRegisterValue (uint32_t reg, llvm::ArrayRef< uint8_t > data) |
bool | PrivateSetRegisterValue (uint32_t reg, uint64_t val) |
void | SetAllRegisterValid (bool b) |
bool | GetRegisterIsValid (uint32_t reg) const |
void | SetRegisterIsValid (const RegisterInfo *reg_info, bool valid) |
void | SetRegisterIsValid (uint32_t reg, bool valid) |
![]() | |
virtual bool | BehavesLikeZerothFrame () const |
Indicates that this frame is currently executing code, that the PC value is not a return-pc but an actual executing instruction. | |
Protected Attributes | |
GDBRemoteDynamicRegisterInfoSP | m_reg_info_sp |
std::vector< bool > | m_reg_valid |
DataExtractor | m_reg_data |
bool | m_read_all_at_once |
bool | m_write_all_at_once |
bool | m_gpacket_cached |
![]() | |
Thread & | m_thread |
uint32_t | m_concrete_frame_idx |
uint32_t | m_stop_id |
Private Member Functions | |
bool | GetPrimordialRegister (const RegisterInfo *reg_info, GDBRemoteCommunicationClient &gdb_comm) |
bool | SetPrimordialRegister (const RegisterInfo *reg_info, GDBRemoteCommunicationClient &gdb_comm) |
GDBRemoteRegisterContext (const GDBRemoteRegisterContext &)=delete | |
const GDBRemoteRegisterContext & | operator= (const GDBRemoteRegisterContext &)=delete |
Friends | |
class | ThreadGDBRemote |
Definition at line 44 of file GDBRemoteRegisterContext.h.
GDBRemoteRegisterContext::GDBRemoteRegisterContext | ( | ThreadGDBRemote & | thread, |
uint32_t | concrete_frame_idx, | ||
GDBRemoteDynamicRegisterInfoSP | reg_info_sp, | ||
bool | read_all_at_once, | ||
bool | write_all_at_once | ||
) |
Definition at line 32 of file GDBRemoteRegisterContext.cpp.
References lldb_private::Thread::GetProcess(), m_reg_data, m_reg_info_sp, m_reg_valid, lldb_private::DataExtractor::SetByteOrder(), and lldb_private::DataExtractor::SetData().
|
overridedefault |
|
privatedelete |
bool GDBRemoteRegisterContext::AArch64SVEReconfigure | ( | ) |
Definition at line 763 of file GDBRemoteRegisterContext.cpp.
References lldb::eRegisterKindLLDB, lldb_private::RegisterContext::GetByteOrder(), InvalidateAllRegisters(), LLDB_INVALID_ADDRESS, m_reg_data, m_reg_info_sp, lldb_private::RegisterContext::ReadRegisterAsUnsigned(), lldb_private::DataExtractor::SetByteOrder(), and lldb_private::DataExtractor::SetData().
Referenced by lldb_private::process_gdb_remote::ProcessGDBRemote::SetThreadStopInfo(), and WriteRegisterBytes().
|
overridevirtual |
Convert from a given register numbering scheme to the lldb register numbering scheme.
There may be multiple ways to enumerate the registers for a given architecture. ABI references will specify one to be used with DWARF, the register numberings from process plugin, there may be a variation used for eh_frame unwind instructions (e.g. on Darwin), and so on. Register 5 by itself is meaningless - RegisterKind enumeration tells you what context that number should be translated as.
Inside lldb, register numbers are in the eRegisterKindLLDB scheme; arguments which take a register number should take one in that scheme.
eRegisterKindGeneric is a special numbering scheme which gives us constant values for the pc, frame register, stack register, etc., for use within lldb. They may not be defined for all architectures but it allows generic code to translate these common registers into the lldb numbering scheme.
This method translates a given register kind + register number into the eRegisterKindLLDB register numbering.
[in] | kind | The register numbering scheme (RegisterKind) that the following register number is in. |
[in] | num | A register number in the 'kind' register numbering scheme. |
Reimplemented from lldb_private::RegisterContext.
Definition at line 758 of file GDBRemoteRegisterContext.cpp.
References m_reg_info_sp.
Referenced by WriteRegisterBytes().
|
private |
Definition at line 191 of file GDBRemoteRegisterContext.cpp.
References lldb::eRegisterKindLLDB, lldb::eRegisterKindProcessPlugin, lldb_private::Thread::GetProtocolID(), lldb_private::RegisterContext::m_thread, PrivateSetRegisterValue(), and lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::ReadRegister().
Referenced by ReadRegisterBytes().
|
overridevirtual |
Implements lldb_private::RegisterContext.
Definition at line 66 of file GDBRemoteRegisterContext.cpp.
References m_reg_info_sp.
|
overridevirtual |
Implements lldb_private::RegisterContext.
Definition at line 71 of file GDBRemoteRegisterContext.cpp.
References m_reg_info_sp.
Referenced by PrivateSetRegisterValue(), ReadAllRegisterValues(), and WriteAllRegisterValues().
|
inlineprotected |
Definition at line 96 of file GDBRemoteRegisterContext.h.
References m_reg_valid.
Referenced by ReadRegisterBytes().
|
overridevirtual |
Implements lldb_private::RegisterContext.
Definition at line 79 of file GDBRemoteRegisterContext.cpp.
References m_reg_info_sp.
|
overridevirtual |
Implements lldb_private::RegisterContext.
Definition at line 75 of file GDBRemoteRegisterContext.cpp.
References m_reg_info_sp.
|
overridevirtual |
Implements lldb_private::RegisterContext.
Definition at line 55 of file GDBRemoteRegisterContext.cpp.
References SetAllRegisterValid().
Referenced by AArch64SVEReconfigure(), and ReadAllRegisterValues().
|
privatedelete |
|
protected |
Definition at line 122 of file GDBRemoteRegisterContext.cpp.
References GetRegisterInfoAtIndex(), lldb_private::RegisterContext::InvalidateIfNeeded(), m_reg_data, lldb_private::DataExtractor::PeekData(), and SetRegisterIsValid().
Referenced by GetPrimordialRegister(), and lldb_private::process_gdb_remote::ThreadGDBRemote::PrivateSetRegisterValue().
|
protected |
Definition at line 146 of file GDBRemoteRegisterContext.cpp.
References lldb_private::DataExtractor::CopyByteOrderedData(), lldb::eByteOrderInvalid, lldb_private::DataExtractor::GetByteOrder(), lldb_private::DataExtractor::GetByteSize(), GetRegisterInfoAtIndex(), lldb_private::endian::InlHostByteOrder(), lldb_private::RegisterContext::InvalidateIfNeeded(), m_reg_data, lldb_private::DataExtractor::PeekData(), and SetRegisterIsValid().
|
overridevirtual |
Reimplemented from lldb_private::RegisterContext.
Definition at line 519 of file GDBRemoteRegisterContext.cpp.
References lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::AvoidGPackets(), lldb_private::RegisterContext::CalculateThread(), lldb_private::process_gdb_remote::GDBRemoteCommunication::DumpHistory(), lldb_private::StreamString::GetData(), lldb_private::DataExtractor::GetDataStart(), lldb_private::GetLog(), lldb_private::ExecutionContext::GetProcessPtr(), lldb_private::Thread::GetProtocolID(), GetRegisterInfoAtIndex(), lldb_private::ExecutionContext::GetThreadPtr(), lldb_private::Log::GetVerbose(), InvalidateAllRegisters(), LLDB_LOGF, m_reg_data, m_reg_info_sp, lldb_private::RegisterContext::m_thread, lldb_private::process_gdb_remote::Packets, lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::ReadAllRegisters(), ReadRegisterBytes(), lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::SyncThreadState(), and lldb_private::process_gdb_remote::Thread.
Referenced by ReadAllRegisterValues().
|
overridevirtual |
Reimplemented from lldb_private::RegisterContext.
Definition at line 476 of file GDBRemoteRegisterContext.cpp.
References lldb_private::RegisterContext::CalculateThread(), lldb_private::RegisterCheckpoint::GetData(), lldb_private::ExecutionContext::GetProcessPtr(), lldb_private::Thread::GetProtocolID(), lldb_private::ExecutionContext::GetThreadPtr(), ReadAllRegisterValues(), lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::SaveRegisterState(), and lldb_private::UserID::SetID().
|
overridevirtual |
Implements lldb_private::RegisterContext.
Definition at line 83 of file GDBRemoteRegisterContext.cpp.
References lldb_private::DataExtractor::CopyData(), lldb::eRegisterKindLLDB, error(), lldb_private::DataExtractor::GetByteOrder(), lldb_private::RegisterContext::GetRegisterInfo(), LLDB_INVALID_REGNUM, m_reg_data, m_reg_valid, ReadRegisterBytes(), lldb_private::RegisterValue::SetFromMemoryData(), and lldb_private::RegisterValue::SetValueFromData().
|
protected |
Definition at line 204 of file GDBRemoteRegisterContext.cpp.
References lldb_private::RegisterContext::CalculateThread(), lldb::eRegisterKindLLDB, lldb_private::DataExtractor::GetByteSize(), lldb_private::DataExtractor::GetDataStart(), lldb_private::GetLog(), GetPrimordialRegister(), lldb_private::ExecutionContext::GetProcessPtr(), lldb_private::Thread::GetProtocolID(), lldb_private::RegisterContext::GetRegisterInfo(), GetRegisterIsValid(), lldb_private::ExecutionContext::GetThreadPtr(), lldb_private::RegisterContext::InvalidateIfNeeded(), LLDB_INVALID_REGNUM, LLDB_LOGF, m_gpacket_cached, m_read_all_at_once, m_reg_data, m_reg_info_sp, m_reg_valid, lldb_private::RegisterContext::m_thread, lldb_private::process_gdb_remote::Packets, lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::ReadAllRegisters(), SetAllRegisterValid(), SetRegisterIsValid(), and lldb_private::process_gdb_remote::Thread.
Referenced by ReadAllRegisterValues(), and ReadRegister().
|
protected |
Definition at line 59 of file GDBRemoteRegisterContext.cpp.
References m_gpacket_cached, and m_reg_valid.
Referenced by InvalidateAllRegisters(), ReadRegisterBytes(), and WriteRegisterBytes().
|
private |
Definition at line 334 of file GDBRemoteRegisterContext.cpp.
References lldb::eRegisterKindLLDB, lldb::eRegisterKindProcessPlugin, lldb_private::Thread::GetProtocolID(), lldb_private::RegisterContext::m_thread, SetRegisterIsValid(), and lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::WriteRegister().
Referenced by WriteRegisterBytes().
|
inlineprotected |
Definition at line 103 of file GDBRemoteRegisterContext.h.
References lldb::eRegisterKindLLDB, and SetRegisterIsValid().
Referenced by PrivateSetRegisterValue(), ReadRegisterBytes(), SetPrimordialRegister(), SetRegisterIsValid(), WriteAllRegisterValues(), and WriteRegisterBytes().
|
inlineprotected |
Definition at line 109 of file GDBRemoteRegisterContext.h.
References m_reg_valid.
|
overridevirtual |
Reimplemented from lldb_private::RegisterContext.
Definition at line 585 of file GDBRemoteRegisterContext.cpp.
References lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::AvoidGPackets(), lldb_private::RegisterContext::CalculateThread(), lldb_private::process_gdb_remote::GDBRemoteCommunication::DumpHistory(), lldb::eRegisterKindLLDB, lldb::eRegisterKindProcessPlugin, lldb_private::DataExtractor::GetAddressByteSize(), lldb_private::DataExtractor::GetByteOrder(), lldb_private::DataExtractor::GetByteSize(), lldb_private::StreamString::GetData(), lldb_private::GetLog(), lldb_private::ArchSpec::GetMachine(), lldb_private::Thread::GetProcess(), lldb_private::ExecutionContext::GetProcessPtr(), lldb_private::Thread::GetProtocolID(), GetRegisterInfoAtIndex(), lldb_private::ExecutionContext::GetThreadPtr(), lldb_private::ArchSpec::GetTriple(), lldb_private::Log::GetVerbose(), lldb_private::ArchSpec::IsValid(), LLDB_LOGF, m_reg_data, lldb_private::RegisterContext::m_thread, lldb_private::process_gdb_remote::Packets, lldb_private::DataExtractor::PeekData(), SetRegisterIsValid(), lldb_private::process_gdb_remote::Thread, lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::WriteAllRegisters(), and lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::WriteRegister().
Referenced by WriteAllRegisterValues().
|
overridevirtual |
Reimplemented from lldb_private::RegisterContext.
Definition at line 499 of file GDBRemoteRegisterContext.cpp.
References lldb_private::RegisterContext::CalculateThread(), lldb_private::RegisterCheckpoint::GetData(), lldb_private::UserID::GetID(), lldb_private::ExecutionContext::GetProcessPtr(), lldb_private::Thread::GetProtocolID(), lldb_private::ExecutionContext::GetThreadPtr(), lldb_private::RegisterContext::m_thread, lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::RestoreRegisterState(), and WriteAllRegisterValues().
|
overridevirtual |
Implements lldb_private::RegisterContext.
Definition at line 295 of file GDBRemoteRegisterContext.cpp.
References lldb::eRegisterKindLLDB, lldb_private::DataExtractor::GetByteSize(), lldb_private::RegisterValue::GetData(), lldb_private::RegisterContext::GetRegisterInfo(), LLDB_INVALID_REGNUM, and WriteRegisterBytes().
|
protected |
Definition at line 348 of file GDBRemoteRegisterContext.cpp.
References AArch64SVEReconfigure(), lldb_private::RegisterContext::CalculateThread(), ConvertRegisterKindToRegisterNumber(), lldb_private::DataExtractor::CopyByteOrderedData(), lldb_private::process_gdb_remote::GDBRemoteCommunication::DumpHistory(), lldb::eRegisterKindLLDB, lldb_private::Target::GetArchitecture(), lldb_private::DataExtractor::GetByteOrder(), lldb_private::DataExtractor::GetByteSize(), lldb_private::StreamString::GetData(), lldb_private::GetLog(), lldb_private::ExecutionContext::GetProcessPtr(), lldb_private::Thread::GetProtocolID(), lldb_private::RegisterContext::GetRegisterInfo(), lldb_private::Process::GetTarget(), lldb_private::ExecutionContext::GetThreadPtr(), lldb_private::ArchSpec::GetTriple(), lldb_private::Log::GetVerbose(), lldb_private::RegisterContext::InvalidateIfNeeded(), lldb_private::ArchSpec::IsValid(), LLDB_INVALID_REGNUM, LLDB_LOGF, m_reg_data, lldb_private::RegisterContext::m_thread, m_write_all_at_once, lldb_private::process_gdb_remote::Packets, lldb_private::DataExtractor::PeekData(), SetAllRegisterValid(), SetPrimordialRegister(), SetRegisterIsValid(), lldb_private::process_gdb_remote::Thread, and lldb_private::process_gdb_remote::GDBRemoteCommunicationClient::WriteAllRegisters().
Referenced by WriteRegister().
|
friend |
Definition at line 83 of file GDBRemoteRegisterContext.h.
|
protected |
Definition at line 120 of file GDBRemoteRegisterContext.h.
Referenced by ReadRegisterBytes(), and SetAllRegisterValid().
|
protected |
Definition at line 118 of file GDBRemoteRegisterContext.h.
Referenced by ReadRegisterBytes().
|
protected |
Definition at line 117 of file GDBRemoteRegisterContext.h.
Referenced by AArch64SVEReconfigure(), GDBRemoteRegisterContext(), PrivateSetRegisterValue(), ReadAllRegisterValues(), ReadRegister(), ReadRegisterBytes(), WriteAllRegisterValues(), and WriteRegisterBytes().
|
protected |
Definition at line 115 of file GDBRemoteRegisterContext.h.
Referenced by AArch64SVEReconfigure(), ConvertRegisterKindToRegisterNumber(), GDBRemoteRegisterContext(), GetRegisterCount(), GetRegisterInfoAtIndex(), GetRegisterSet(), GetRegisterSetCount(), ReadAllRegisterValues(), and ReadRegisterBytes().
|
protected |
Definition at line 116 of file GDBRemoteRegisterContext.h.
Referenced by GDBRemoteRegisterContext(), GetRegisterIsValid(), ReadRegister(), ReadRegisterBytes(), SetAllRegisterValid(), and SetRegisterIsValid().
|
protected |
Definition at line 119 of file GDBRemoteRegisterContext.h.
Referenced by WriteRegisterBytes().