LLDB mainline
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
lldb_private::RegisterContextHistory Class Reference

#include <RegisterContextHistory.h>

Inheritance diagram for lldb_private::RegisterContextHistory:
Inheritance graph
[legend]

Public Types

typedef std::shared_ptr< RegisterContextHistorySharedPtr
 

Public Member Functions

 RegisterContextHistory (Thread &thread, uint32_t concrete_frame_idx, uint32_t address_byte_size, lldb::addr_t pc_value)
 
 ~RegisterContextHistory () override
 
void InvalidateAllRegisters () override
 
size_t GetRegisterCount () override
 
const lldb_private::RegisterInfoGetRegisterInfoAtIndex (size_t reg) override
 
size_t GetRegisterSetCount () override
 
const lldb_private::RegisterSetGetRegisterSet (size_t reg_set) override
 
bool ReadRegister (const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue &value) override
 
bool WriteRegister (const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue &value) override
 
bool ReadAllRegisterValues (lldb::WritableDataBufferSP &data_sp) override
 
bool WriteAllRegisterValues (const lldb::DataBufferSP &data_sp) override
 
uint32_t ConvertRegisterKindToRegisterNumber (lldb::RegisterKind kind, uint32_t num) override
 Convert from a given register numbering scheme to the lldb register numbering scheme.
 
- 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 RegisterInfoGetRegisterInfoAtIndex (size_t reg)=0
 
virtual size_t GetRegisterSetCount ()=0
 
virtual const RegisterSetGetRegisterSet (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 RegisterWriteCausesReconfigure (const llvm::StringRef name)
 
virtual bool ReconfigureRegisterInfo ()
 
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 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
 
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.
 

Private Member Functions

 RegisterContextHistory (const RegisterContextHistory &)=delete
 
const RegisterContextHistoryoperator= (const RegisterContextHistory &)=delete
 

Private Attributes

lldb_private::RegisterSet m_reg_set0
 
lldb_private::RegisterInfo m_pc_reg_info
 
lldb::addr_t m_pc_value
 

Additional Inherited Members

- 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 inherited from lldb_private::RegisterContext
Threadm_thread
 
uint32_t m_concrete_frame_idx
 
uint32_t m_stop_id
 

Detailed Description

Definition at line 21 of file RegisterContextHistory.h.

Member Typedef Documentation

◆ SharedPtr

Definition at line 23 of file RegisterContextHistory.h.

Constructor & Destructor Documentation

◆ RegisterContextHistory() [1/2]

RegisterContextHistory::RegisterContextHistory ( Thread thread,
uint32_t  concrete_frame_idx,
uint32_t  address_byte_size,
lldb::addr_t  pc_value 
)

◆ ~RegisterContextHistory()

RegisterContextHistory::~RegisterContextHistory ( )
override

◆ RegisterContextHistory() [2/2]

lldb_private::RegisterContextHistory::RegisterContextHistory ( const RegisterContextHistory )
privatedelete

Member Function Documentation

◆ ConvertRegisterKindToRegisterNumber()

uint32_t RegisterContextHistory::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 116 of file RegisterContextHistory.cpp.

References lldb::eRegisterKindGeneric, LLDB_INVALID_REGNUM, and LLDB_REGNUM_GENERIC_PC.

◆ GetRegisterCount()

size_t RegisterContextHistory::GetRegisterCount ( )
overridevirtual

Implements lldb_private::RegisterContext.

Definition at line 69 of file RegisterContextHistory.cpp.

◆ GetRegisterInfoAtIndex()

const lldb_private::RegisterInfo * RegisterContextHistory::GetRegisterInfoAtIndex ( size_t  reg)
overridevirtual

Implements lldb_private::RegisterContext.

Definition at line 72 of file RegisterContextHistory.cpp.

References m_pc_reg_info.

◆ GetRegisterSet()

const lldb_private::RegisterSet * RegisterContextHistory::GetRegisterSet ( size_t  reg_set)
overridevirtual

Implements lldb_private::RegisterContext.

Definition at line 81 of file RegisterContextHistory.cpp.

References m_reg_set0.

◆ GetRegisterSetCount()

size_t RegisterContextHistory::GetRegisterSetCount ( )
overridevirtual

Implements lldb_private::RegisterContext.

Definition at line 78 of file RegisterContextHistory.cpp.

◆ InvalidateAllRegisters()

void RegisterContextHistory::InvalidateAllRegisters ( )
overridevirtual

Implements lldb_private::RegisterContext.

Definition at line 67 of file RegisterContextHistory.cpp.

◆ operator=()

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

◆ ReadAllRegisterValues()

bool RegisterContextHistory::ReadAllRegisterValues ( lldb::WritableDataBufferSP data_sp)
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 106 of file RegisterContextHistory.cpp.

◆ ReadRegister()

bool RegisterContextHistory::ReadRegister ( const lldb_private::RegisterInfo reg_info,
lldb_private::RegisterValue value 
)
overridevirtual

◆ WriteAllRegisterValues()

bool RegisterContextHistory::WriteAllRegisterValues ( const lldb::DataBufferSP data_sp)
overridevirtual

Reimplemented from lldb_private::RegisterContext.

Definition at line 111 of file RegisterContextHistory.cpp.

◆ WriteRegister()

bool RegisterContextHistory::WriteRegister ( const lldb_private::RegisterInfo reg_info,
const lldb_private::RegisterValue value 
)
overridevirtual

Implements lldb_private::RegisterContext.

Definition at line 100 of file RegisterContextHistory.cpp.

Member Data Documentation

◆ m_pc_reg_info

lldb_private::RegisterInfo lldb_private::RegisterContextHistory::m_pc_reg_info
private

◆ m_pc_value

lldb::addr_t lldb_private::RegisterContextHistory::m_pc_value
private

Definition at line 59 of file RegisterContextHistory.h.

Referenced by ReadRegister().

◆ m_reg_set0

lldb_private::RegisterSet lldb_private::RegisterContextHistory::m_reg_set0
private

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