LLDB mainline
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Friends | List of all members
lldb_private::process_gdb_remote::GDBRemoteRegisterContext Class Reference

#include <GDBRemoteRegisterContext.h>

Inheritance diagram for lldb_private::process_gdb_remote::GDBRemoteRegisterContext:
Inheritance graph
Collaboration diagram for lldb_private::process_gdb_remote::GDBRemoteRegisterContext:
Collaboration graph

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 &reg_checkpoint) override
bool WriteAllRegisterValues (const RegisterCheckpoint &reg_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 ()
- Public Member Functions inherited from lldb_private::RegisterContext
 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 &reg_value)=0
virtual bool WriteRegister (const RegisterInfo *reg_info, const RegisterValue &reg_value)=0
virtual bool ReadAllRegisterValues (lldb::WritableDataBufferSP &data_sp)
virtual bool WriteAllRegisterValues (const lldb::DataBufferSP &data_sp)
virtual bool ReadAllRegisterValues (lldb_private::RegisterCheckpoint &reg_checkpoint)
virtual bool WriteAllRegisterValues (const lldb_private::RegisterCheckpoint &reg_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 &reg_value)
virtual Status WriteRegisterValueToMemory (const lldb_private::RegisterInfo *reg_info, lldb::addr_t dst_addr, uint32_t dst_len, const RegisterValue &reg_value)
virtual lldb::tid_t GetThreadID () const
virtual ThreadGetThread ()
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)
- Public Member Functions inherited from lldb_private::ExecutionContextScope
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)
- Protected Member Functions inherited from lldb_private::RegisterContext
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
- Protected Attributes inherited from lldb_private::RegisterContext
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 GDBRemoteRegisterContextoperator= (const GDBRemoteRegisterContext &)=delete


class ThreadGDBRemote

Detailed Description

Definition at line 44 of file GDBRemoteRegisterContext.h.

Constructor & Destructor Documentation

◆ GDBRemoteRegisterContext() [1/2]

GDBRemoteRegisterContext::GDBRemoteRegisterContext ( ThreadGDBRemote thread,
uint32_t  concrete_frame_idx,
GDBRemoteDynamicRegisterInfoSP  reg_info_sp,
bool  read_all_at_once,
bool  write_all_at_once 

◆ ~GDBRemoteRegisterContext()

GDBRemoteRegisterContext::~GDBRemoteRegisterContext ( )

◆ GDBRemoteRegisterContext() [2/2]

lldb_private::process_gdb_remote::GDBRemoteRegisterContext::GDBRemoteRegisterContext ( const GDBRemoteRegisterContext )

Member Function Documentation

◆ AArch64SVEReconfigure()

bool GDBRemoteRegisterContext::AArch64SVEReconfigure ( )

◆ ConvertRegisterKindToRegisterNumber()

uint32_t GDBRemoteRegisterContext::ConvertRegisterKindToRegisterNumber ( lldb::RegisterKind  kind,
uint32_t  num 

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]kindThe register numbering scheme (RegisterKind) that the following register number is in.
[in]numA register number in the 'kind' register numbering scheme.
The equivalent register number in the eRegisterKindLLDB numbering scheme, if possible, else LLDB_INVALID_REGNUM.

Reimplemented from lldb_private::RegisterContext.

Definition at line 758 of file GDBRemoteRegisterContext.cpp.

References m_reg_info_sp.

Referenced by WriteRegisterBytes().

◆ GetPrimordialRegister()

bool GDBRemoteRegisterContext::GetPrimordialRegister ( const RegisterInfo *  reg_info,
GDBRemoteCommunicationClient gdb_comm 

◆ GetRegisterCount()

size_t GDBRemoteRegisterContext::GetRegisterCount ( )

Implements lldb_private::RegisterContext.

Definition at line 66 of file GDBRemoteRegisterContext.cpp.

References m_reg_info_sp.

◆ GetRegisterInfoAtIndex()

const RegisterInfo * GDBRemoteRegisterContext::GetRegisterInfoAtIndex ( size_t  reg)

◆ GetRegisterIsValid()

bool lldb_private::process_gdb_remote::GDBRemoteRegisterContext::GetRegisterIsValid ( uint32_t  reg) const

Definition at line 96 of file GDBRemoteRegisterContext.h.

References m_reg_valid.

Referenced by ReadRegisterBytes().

◆ GetRegisterSet()

const RegisterSet * GDBRemoteRegisterContext::GetRegisterSet ( size_t  reg_set)

Implements lldb_private::RegisterContext.

Definition at line 79 of file GDBRemoteRegisterContext.cpp.

References m_reg_info_sp.

◆ GetRegisterSetCount()

size_t GDBRemoteRegisterContext::GetRegisterSetCount ( )

Implements lldb_private::RegisterContext.

Definition at line 75 of file GDBRemoteRegisterContext.cpp.

References m_reg_info_sp.

◆ InvalidateAllRegisters()

void GDBRemoteRegisterContext::InvalidateAllRegisters ( )

◆ operator=()

const GDBRemoteRegisterContext & lldb_private::process_gdb_remote::GDBRemoteRegisterContext::operator= ( const GDBRemoteRegisterContext )

◆ PrivateSetRegisterValue() [1/2]

bool GDBRemoteRegisterContext::PrivateSetRegisterValue ( uint32_t  reg,
llvm::ArrayRef< uint8_t >  data 

◆ PrivateSetRegisterValue() [2/2]

bool GDBRemoteRegisterContext::PrivateSetRegisterValue ( uint32_t  reg,
uint64_t  val 

◆ ReadAllRegisterValues() [1/2]

bool GDBRemoteRegisterContext::ReadAllRegisterValues ( lldb::WritableDataBufferSP &  data_sp)

◆ ReadAllRegisterValues() [2/2]

bool GDBRemoteRegisterContext::ReadAllRegisterValues ( RegisterCheckpoint reg_checkpoint)

◆ ReadRegister()

bool GDBRemoteRegisterContext::ReadRegister ( const RegisterInfo *  reg_info,
RegisterValue value 

◆ ReadRegisterBytes()

bool GDBRemoteRegisterContext::ReadRegisterBytes ( const RegisterInfo *  reg_info)

◆ SetAllRegisterValid()

void GDBRemoteRegisterContext::SetAllRegisterValid ( bool  b)

◆ SetPrimordialRegister()

bool GDBRemoteRegisterContext::SetPrimordialRegister ( const RegisterInfo *  reg_info,
GDBRemoteCommunicationClient gdb_comm 

◆ SetRegisterIsValid() [1/2]

void lldb_private::process_gdb_remote::GDBRemoteRegisterContext::SetRegisterIsValid ( const RegisterInfo *  reg_info,
bool  valid 

◆ SetRegisterIsValid() [2/2]

void lldb_private::process_gdb_remote::GDBRemoteRegisterContext::SetRegisterIsValid ( uint32_t  reg,
bool  valid 

Definition at line 109 of file GDBRemoteRegisterContext.h.

References m_reg_valid.

◆ WriteAllRegisterValues() [1/2]

bool GDBRemoteRegisterContext::WriteAllRegisterValues ( const lldb::DataBufferSP &  data_sp)

◆ WriteAllRegisterValues() [2/2]

bool GDBRemoteRegisterContext::WriteAllRegisterValues ( const RegisterCheckpoint reg_checkpoint)

◆ WriteRegister()

bool GDBRemoteRegisterContext::WriteRegister ( const RegisterInfo *  reg_info,
const RegisterValue value 

◆ WriteRegisterBytes()

bool GDBRemoteRegisterContext::WriteRegisterBytes ( const RegisterInfo *  reg_info,
DataExtractor data,
uint32_t  data_offset 

Friends And Related Function Documentation

◆ ThreadGDBRemote

friend class ThreadGDBRemote

Definition at line 83 of file GDBRemoteRegisterContext.h.

Member Data Documentation

◆ m_gpacket_cached

bool lldb_private::process_gdb_remote::GDBRemoteRegisterContext::m_gpacket_cached

Definition at line 120 of file GDBRemoteRegisterContext.h.

Referenced by ReadRegisterBytes(), and SetAllRegisterValid().

◆ m_read_all_at_once

bool lldb_private::process_gdb_remote::GDBRemoteRegisterContext::m_read_all_at_once

Definition at line 118 of file GDBRemoteRegisterContext.h.

Referenced by ReadRegisterBytes().

◆ m_reg_data

DataExtractor lldb_private::process_gdb_remote::GDBRemoteRegisterContext::m_reg_data

◆ m_reg_info_sp

GDBRemoteDynamicRegisterInfoSP lldb_private::process_gdb_remote::GDBRemoteRegisterContext::m_reg_info_sp

◆ m_reg_valid

std::vector<bool> lldb_private::process_gdb_remote::GDBRemoteRegisterContext::m_reg_valid

◆ m_write_all_at_once

bool lldb_private::process_gdb_remote::GDBRemoteRegisterContext::m_write_all_at_once

Definition at line 119 of file GDBRemoteRegisterContext.h.

Referenced by WriteRegisterBytes().

The documentation for this class was generated from the following files: