LLDB mainline
lldb_private::RegisterContextThreadMemory Class Reference

#include <RegisterContextThreadMemory.h>

Inheritance diagram for lldb_private::RegisterContextThreadMemory:
[legend]

Public Member Functions

 RegisterContextThreadMemory (Thread &thread, lldb::addr_t register_data_addr)
 ~RegisterContextThreadMemory () override
void InvalidateAllRegisters () override
size_t GetRegisterCount () override
const RegisterInfoGetRegisterInfoAtIndex (size_t reg) override
size_t GetRegisterSetCount () override
const RegisterSetGetRegisterSet (size_t reg_set) override
bool ReadRegister (const RegisterInfo *reg_info, RegisterValue &reg_value) override
bool WriteRegister (const RegisterInfo *reg_info, const RegisterValue &reg_value) override
bool ReadAllRegisterValues (lldb::WritableDataBufferSP &data_sp) override
bool ReadAllRegisterValues (lldb_private::RegisterCheckpoint &reg_checkpoint) override
bool WriteAllRegisterValues (const lldb::DataBufferSP &data_sp) override
bool WriteAllRegisterValues (const lldb_private::RegisterCheckpoint &reg_checkpoint) override
bool CopyFromRegisterContext (lldb::RegisterContextSP context)
uint32_t ConvertRegisterKindToRegisterNumber (lldb::RegisterKind kind, uint32_t num) override
 Convert from a given register numbering scheme to the lldb register numbering scheme.
uint32_t NumSupportedHardwareBreakpoints () override
uint32_t SetHardwareBreakpoint (lldb::addr_t addr, size_t size) override
bool ClearHardwareBreakpoint (uint32_t hw_idx) override
uint32_t NumSupportedHardwareWatchpoints () override
uint32_t SetHardwareWatchpoint (lldb::addr_t addr, size_t size, bool read, bool write) override
bool ClearHardwareWatchpoint (uint32_t hw_index) override
bool HardwareSingleStep (bool enable) override
Status ReadRegisterValueFromMemory (const lldb_private::RegisterInfo *reg_info, lldb::addr_t src_addr, uint32_t src_len, RegisterValue &reg_value) override
Status WriteRegisterValueToMemory (const lldb_private::RegisterInfo *reg_info, lldb::addr_t dst_addr, uint32_t dst_len, const RegisterValue &reg_value) override
Public Member Functions inherited from lldb_private::RegisterContext
 RegisterContext (Thread &thread, uint32_t concrete_frame_idx)
 ~RegisterContext () override
void InvalidateIfNeeded (bool force)
virtual lldb::ByteOrder GetByteOrder ()
virtual bool RegisterWriteCausesReconfigure (const llvm::StringRef name)
virtual bool ReconfigureRegisterInfo ()
bool CopyFromRegisterContext (lldb::RegisterContextSP context)
virtual lldb::tid_t GetThreadID () const
virtual ThreadGetThread ()
const RegisterInfoGetRegisterInfoByName (llvm::StringRef reg_name, uint32_t start_idx=0)
const RegisterInfoGetRegisterInfo (lldb::RegisterKind reg_kind, uint32_t reg_num)
uint64_t GetPC (uint64_t fail_value=LLDB_INVALID_ADDRESS)
uint64_t GetThreadPointer (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

Protected Member Functions

void UpdateRegisterContext ()
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

lldb::ThreadWP m_thread_wp
lldb::RegisterContextSP m_reg_ctx_sp
lldb::addr_t m_register_data_addr
uint32_t m_stop_id
Protected Attributes inherited from lldb_private::RegisterContext
Threadm_thread
uint32_t m_concrete_frame_idx
uint32_t m_stop_id

Private Member Functions

 RegisterContextThreadMemory (const RegisterContextThreadMemory &)=delete
const RegisterContextThreadMemoryoperator= (const RegisterContextThreadMemory &)=delete

Private Attributes

std::mutex m_update_register_ctx_lock

Detailed Description

Definition at line 20 of file RegisterContextThreadMemory.h.

Constructor & Destructor Documentation

◆ RegisterContextThreadMemory() [1/2]

RegisterContextThreadMemory::RegisterContextThreadMemory ( Thread & thread,
lldb::addr_t register_data_addr )

◆ ~RegisterContextThreadMemory()

RegisterContextThreadMemory::~RegisterContextThreadMemory ( )
overridedefault

◆ RegisterContextThreadMemory() [2/2]

lldb_private::RegisterContextThreadMemory::RegisterContextThreadMemory ( const RegisterContextThreadMemory & )
privatedelete

Member Function Documentation

◆ ClearHardwareBreakpoint()

bool RegisterContextThreadMemory::ClearHardwareBreakpoint ( uint32_t hw_idx)
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 174 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ ClearHardwareWatchpoint()

bool RegisterContextThreadMemory::ClearHardwareWatchpoint ( uint32_t hw_index)
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 198 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ ConvertRegisterKindToRegisterNumber()

uint32_t RegisterContextThreadMemory::ConvertRegisterKindToRegisterNumber ( lldb::RegisterKind kind,
uint32_t num )
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.

Parameters
[in]kindThe register numbering scheme (RegisterKind) that the following register number is in.
[in]numA register number in the 'kind' register numbering scheme.
Returns
The equivalent register number in the eRegisterKindLLDB numbering scheme, if possible, else LLDB_INVALID_REGNUM.

Reimplemented from lldb_private::RegisterContext.

Definition at line 151 of file RegisterContextThreadMemory.cpp.

References LLDB_INVALID_REGNUM, m_reg_ctx_sp, and UpdateRegisterContext().

◆ CopyFromRegisterContext()

bool RegisterContextThreadMemory::CopyFromRegisterContext ( lldb::RegisterContextSP context)

Definition at line 143 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ GetRegisterCount()

size_t RegisterContextThreadMemory::GetRegisterCount ( )
overridevirtual

◆ GetRegisterInfoAtIndex()

const RegisterInfo * RegisterContextThreadMemory::GetRegisterInfoAtIndex ( size_t reg)
overridevirtual

◆ GetRegisterSet()

const RegisterSet * RegisterContextThreadMemory::GetRegisterSet ( size_t reg_set)
overridevirtual

◆ GetRegisterSetCount()

size_t RegisterContextThreadMemory::GetRegisterSetCount ( )
overridevirtual

◆ HardwareSingleStep()

bool RegisterContextThreadMemory::HardwareSingleStep ( bool enable)
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 205 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ InvalidateAllRegisters()

void RegisterContextThreadMemory::InvalidateAllRegisters ( )
overridevirtual

◆ NumSupportedHardwareBreakpoints()

uint32_t RegisterContextThreadMemory::NumSupportedHardwareBreakpoints ( )
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 159 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ NumSupportedHardwareWatchpoints()

uint32_t RegisterContextThreadMemory::NumSupportedHardwareWatchpoints ( )
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 181 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ operator=()

const RegisterContextThreadMemory & lldb_private::RegisterContextThreadMemory::operator= ( const RegisterContextThreadMemory & )
privatedelete

◆ ReadAllRegisterValues() [1/2]

bool RegisterContextThreadMemory::ReadAllRegisterValues ( lldb::WritableDataBufferSP & data_sp)
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 111 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ ReadAllRegisterValues() [2/2]

bool RegisterContextThreadMemory::ReadAllRegisterValues ( lldb_private::RegisterCheckpoint & reg_checkpoint)
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 119 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ ReadRegister()

bool RegisterContextThreadMemory::ReadRegister ( const RegisterInfo * reg_info,
RegisterValue & reg_value )
overridevirtual

◆ ReadRegisterValueFromMemory()

Status RegisterContextThreadMemory::ReadRegisterValueFromMemory ( const lldb_private::RegisterInfo * reg_info,
lldb::addr_t src_addr,
uint32_t src_len,
RegisterValue & reg_value )
overridevirtual

◆ SetHardwareBreakpoint()

uint32_t RegisterContextThreadMemory::SetHardwareBreakpoint ( lldb::addr_t addr,
size_t size )
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 166 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ SetHardwareWatchpoint()

uint32_t RegisterContextThreadMemory::SetHardwareWatchpoint ( lldb::addr_t addr,
size_t size,
bool read,
bool write )
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 188 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ UpdateRegisterContext()

◆ WriteAllRegisterValues() [1/2]

bool RegisterContextThreadMemory::WriteAllRegisterValues ( const lldb::DataBufferSP & data_sp)
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 127 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ WriteAllRegisterValues() [2/2]

bool RegisterContextThreadMemory::WriteAllRegisterValues ( const lldb_private::RegisterCheckpoint & reg_checkpoint)
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 135 of file RegisterContextThreadMemory.cpp.

References m_reg_ctx_sp, and UpdateRegisterContext().

◆ WriteRegister()

bool RegisterContextThreadMemory::WriteRegister ( const RegisterInfo * reg_info,
const RegisterValue & reg_value )
overridevirtual

◆ WriteRegisterValueToMemory()

Status RegisterContextThreadMemory::WriteRegisterValueToMemory ( const lldb_private::RegisterInfo * reg_info,
lldb::addr_t dst_addr,
uint32_t dst_len,
const RegisterValue & reg_value )
overridevirtual

Member Data Documentation

◆ m_reg_ctx_sp

◆ m_register_data_addr

lldb::addr_t lldb_private::RegisterContextThreadMemory::m_register_data_addr
protected

◆ m_stop_id

uint32_t lldb_private::RegisterContextThreadMemory::m_stop_id
protected

◆ m_thread_wp

lldb::ThreadWP lldb_private::RegisterContextThreadMemory::m_thread_wp
protected

◆ m_update_register_ctx_lock

std::mutex lldb_private::RegisterContextThreadMemory::m_update_register_ctx_lock
private

Definition at line 103 of file RegisterContextThreadMemory.h.

Referenced by UpdateRegisterContext().


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