LLDB  mainline
Classes | Public Member Functions | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
RegisterContextDarwin_i386 Class Referenceabstract

#include <RegisterContextDarwin_i386.h>

Inheritance diagram for RegisterContextDarwin_i386:
Inheritance graph
Collaboration diagram for RegisterContextDarwin_i386:
Collaboration graph


struct  EXC
struct  FPU
struct  GPR
struct  MMSReg
struct  XMMReg

Public Member Functions

 RegisterContextDarwin_i386 (lldb_private::Thread &thread, uint32_t concrete_frame_idx)
 ~RegisterContextDarwin_i386 () override
void InvalidateAllRegisters () override
size_t GetRegisterCount () override
const lldb_private::RegisterInfo * GetRegisterInfoAtIndex (size_t reg) override
size_t GetRegisterSetCount () override
const lldb_private::RegisterSet * GetRegisterSet (size_t 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::DataBufferSP &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. More...
bool HardwareSingleStep (bool enable) override
- Public Member Functions inherited from lldb_private::RegisterContext
 RegisterContext (Thread &thread, uint32_t concrete_frame_idx)
 ~RegisterContext () override
void InvalidateIfNeeded (bool force)
uint32_t UpdateDynamicRegisterSize (const lldb_private::ArchSpec &arch, RegisterInfo *reg_info)
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_private::RegisterCheckpoint &reg_checkpoint)
virtual bool WriteAllRegisterValues (const lldb_private::RegisterCheckpoint &reg_checkpoint)
bool CopyFromRegisterContext (lldb::RegisterContextSP context)
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 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 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. More...
uint32_t GetStopID () const
void SetStopID (uint32_t stop_id)
- Public Member Functions inherited from lldb_private::ExecutionContextScope
virtual ~ExecutionContextScope ()

Protected Types

enum  { GPRRegSet = 1, FPURegSet = 2, EXCRegSet = 3 }
enum  { GPRWordCount = sizeof(GPR) / sizeof(uint32_t), FPUWordCount = sizeof(FPU) / sizeof(uint32_t), EXCWordCount = sizeof(EXC) / sizeof(uint32_t) }
enum  { Read = 0, Write = 1, kNumErrors = 2 }

Protected Member Functions

void InvalidateAllRegisterStates ()
int GetError (int flavor, uint32_t err_idx) const
bool SetError (int flavor, uint32_t err_idx, int err)
bool RegisterSetIsCached (int set) const
void LogGPR (lldb_private::Log *log, const char *title)
int ReadGPR (bool force)
int ReadFPU (bool force)
int ReadEXC (bool force)
int WriteGPR ()
int WriteFPU ()
int WriteEXC ()
virtual int DoReadGPR (lldb::tid_t tid, int flavor, GPR &gpr)=0
virtual int DoReadFPU (lldb::tid_t tid, int flavor, FPU &fpu)=0
virtual int DoReadEXC (lldb::tid_t tid, int flavor, EXC &exc)=0
virtual int DoWriteGPR (lldb::tid_t tid, int flavor, const GPR &gpr)=0
virtual int DoWriteFPU (lldb::tid_t tid, int flavor, const FPU &fpu)=0
virtual int DoWriteEXC (lldb::tid_t tid, int flavor, const EXC &exc)=0
int ReadRegisterSet (uint32_t set, bool force)
int WriteRegisterSet (uint32_t set)

Static Protected Member Functions

static uint32_t GetRegisterNumber (uint32_t reg_kind, uint32_t reg_num)
static int GetSetForNativeRegNum (int reg_num)
static size_t GetRegisterInfosCount ()
static const lldb_private::RegisterInfo * GetRegisterInfos ()

Protected Attributes

GPR gpr
FPU fpu
EXC exc
int gpr_errs [2]
int fpu_errs [2]
int exc_errs [2]
- Protected Attributes inherited from lldb_private::RegisterContext
uint32_t m_concrete_frame_idx
uint32_t m_stop_id

Detailed Description

Definition at line 15 of file RegisterContextDarwin_i386.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

Definition at line 103 of file RegisterContextDarwin_i386.h.

◆ anonymous enum

anonymous enum

Definition at line 105 of file RegisterContextDarwin_i386.h.

◆ anonymous enum

anonymous enum

Definition at line 111 of file RegisterContextDarwin_i386.h.

Constructor & Destructor Documentation

◆ RegisterContextDarwin_i386()

RegisterContextDarwin_i386::RegisterContextDarwin_i386 ( lldb_private::Thread thread,
uint32_t  concrete_frame_idx 

Definition at line 397 of file RegisterContextDarwin_i386.cpp.

References exc_errs, fpu_errs, gpr_errs, and kNumErrors.

◆ ~RegisterContextDarwin_i386()

RegisterContextDarwin_i386::~RegisterContextDarwin_i386 ( )

Definition at line 408 of file RegisterContextDarwin_i386.cpp.

Member Function Documentation

◆ ConvertRegisterKindToRegisterNumber()

uint32_t RegisterContextDarwin_i386::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 864 of file RegisterContextDarwin_i386.cpp.

References dwarf_eax, dwarf_ebp, dwarf_ebx, dwarf_ecx, dwarf_edi, dwarf_edx, dwarf_eflags, dwarf_eip, dwarf_esi, dwarf_esp, dwarf_stmm0, dwarf_stmm1, dwarf_stmm2, dwarf_stmm3, dwarf_stmm4, dwarf_stmm5, dwarf_stmm6, dwarf_stmm7, dwarf_xmm0, dwarf_xmm1, dwarf_xmm2, dwarf_xmm3, dwarf_xmm4, dwarf_xmm5, dwarf_xmm6, dwarf_xmm7, lldb::eRegisterKindDWARF, lldb::eRegisterKindEHFrame, lldb::eRegisterKindGeneric, lldb::eRegisterKindLLDB, fpu_stmm0, fpu_stmm1, fpu_stmm2, fpu_stmm3, fpu_stmm4, fpu_stmm5, fpu_stmm6, fpu_stmm7, fpu_xmm0, fpu_xmm1, fpu_xmm2, fpu_xmm3, fpu_xmm4, fpu_xmm5, fpu_xmm6, fpu_xmm7, gpr_eax, gpr_ebp, gpr_ebx, gpr_ecx, gpr_edi, gpr_edx, gpr_eflags, gpr_eip, gpr_esi, gpr_esp, LLDB_INVALID_REGNUM, LLDB_REGNUM_GENERIC_FLAGS, LLDB_REGNUM_GENERIC_FP, LLDB_REGNUM_GENERIC_PC, LLDB_REGNUM_GENERIC_RA, and LLDB_REGNUM_GENERIC_SP.

◆ DoReadEXC()

virtual int RegisterContextDarwin_i386::DoReadEXC ( lldb::tid_t  tid,
int  flavor,
EXC exc 
protectedpure virtual

◆ DoReadFPU()

virtual int RegisterContextDarwin_i386::DoReadFPU ( lldb::tid_t  tid,
int  flavor,
FPU fpu 
protectedpure virtual

◆ DoReadGPR()

virtual int RegisterContextDarwin_i386::DoReadGPR ( lldb::tid_t  tid,
int  flavor,
GPR gpr 
protectedpure virtual

◆ DoWriteEXC()

virtual int RegisterContextDarwin_i386::DoWriteEXC ( lldb::tid_t  tid,
int  flavor,
const EXC exc 
protectedpure virtual

◆ DoWriteFPU()

virtual int RegisterContextDarwin_i386::DoWriteFPU ( lldb::tid_t  tid,
int  flavor,
const FPU fpu 
protectedpure virtual

◆ DoWriteGPR()

virtual int RegisterContextDarwin_i386::DoWriteGPR ( lldb::tid_t  tid,
int  flavor,
const GPR gpr 
protectedpure virtual

◆ GetError()

int RegisterContextDarwin_i386::GetError ( int  flavor,
uint32_t  err_idx 
) const

◆ GetRegisterCount()

size_t RegisterContextDarwin_i386::GetRegisterCount ( )

◆ GetRegisterInfoAtIndex()

const RegisterInfo * RegisterContextDarwin_i386::GetRegisterInfoAtIndex ( size_t  reg)

◆ GetRegisterInfos()

const RegisterInfo * RegisterContextDarwin_i386::GetRegisterInfos ( )

Definition at line 431 of file RegisterContextDarwin_i386.cpp.

References g_register_infos.

Referenced by RegisterSetIsCached().

◆ GetRegisterInfosCount()

size_t RegisterContextDarwin_i386::GetRegisterInfosCount ( )

Definition at line 427 of file RegisterContextDarwin_i386.cpp.

References k_num_register_infos.

Referenced by RegisterSetIsCached().

◆ GetRegisterNumber()

static uint32_t RegisterContextDarwin_i386::GetRegisterNumber ( uint32_t  reg_kind,
uint32_t  reg_num 

Referenced by RegisterSetIsCached().

◆ GetRegisterSet()

const RegisterSet * RegisterContextDarwin_i386::GetRegisterSet ( size_t  set)

Implements lldb_private::RegisterContext.

Definition at line 473 of file RegisterContextDarwin_i386.cpp.

References g_reg_sets, and k_num_regsets.

◆ GetRegisterSetCount()

size_t RegisterContextDarwin_i386::GetRegisterSetCount ( )

Implements lldb_private::RegisterContext.

Definition at line 469 of file RegisterContextDarwin_i386.cpp.

References k_num_regsets.

◆ GetSetForNativeRegNum()

int RegisterContextDarwin_i386::GetSetForNativeRegNum ( int  reg_num)

◆ HardwareSingleStep()

bool RegisterContextDarwin_i386::HardwareSingleStep ( bool  enable)

◆ InvalidateAllRegisters()

void RegisterContextDarwin_i386::InvalidateAllRegisters ( )

◆ InvalidateAllRegisterStates()

void RegisterContextDarwin_i386::InvalidateAllRegisterStates ( )

Definition at line 120 of file RegisterContextDarwin_i386.h.

References EXCRegSet, FPURegSet, GPRRegSet, Read, and SetError().

Referenced by InvalidateAllRegisters().

◆ LogGPR()

void RegisterContextDarwin_i386::LogGPR ( lldb_private::Log log,
const char *  title 

◆ ReadAllRegisterValues()

bool RegisterContextDarwin_i386::ReadAllRegisterValues ( lldb::DataBufferSP &  data_sp)

Reimplemented from lldb_private::RegisterContext.

Definition at line 824 of file RegisterContextDarwin_i386.cpp.

References exc, fpu, gpr, ReadEXC(), ReadFPU(), ReadGPR(), and REG_CONTEXT_SIZE.

◆ ReadEXC()

int RegisterContextDarwin_i386::ReadEXC ( bool  force)

◆ ReadFPU()

int RegisterContextDarwin_i386::ReadFPU ( bool  force)

◆ ReadGPR()

int RegisterContextDarwin_i386::ReadGPR ( bool  force)

◆ ReadRegister()

bool RegisterContextDarwin_i386::ReadRegister ( const lldb_private::RegisterInfo *  reg_info,
lldb_private::RegisterValue value 

◆ ReadRegisterSet()

int RegisterContextDarwin_i386::ReadRegisterSet ( uint32_t  set,
bool  force 

◆ RegisterSetIsCached()

bool RegisterContextDarwin_i386::RegisterSetIsCached ( int  set) const

◆ SetError()

bool RegisterContextDarwin_i386::SetError ( int  flavor,
uint32_t  err_idx,
int  err 

◆ WriteAllRegisterValues()

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

Reimplemented from lldb_private::RegisterContext.

Definition at line 841 of file RegisterContextDarwin_i386.cpp.

References exc, fpu, gpr, REG_CONTEXT_SIZE, WriteEXC(), WriteFPU(), and WriteGPR().

◆ WriteEXC()

int RegisterContextDarwin_i386::WriteEXC ( )

◆ WriteFPU()

int RegisterContextDarwin_i386::WriteFPU ( )

◆ WriteGPR()

int RegisterContextDarwin_i386::WriteGPR ( )

◆ WriteRegister()

bool RegisterContextDarwin_i386::WriteRegister ( const lldb_private::RegisterInfo *  reg_info,
const lldb_private::RegisterValue value 

Definition at line 707 of file RegisterContextDarwin_i386.cpp.

References RegisterContextDarwin_i386::MMSReg::bytes, RegisterContextDarwin_i386::XMMReg::bytes, RegisterContextDarwin_i386::FPU::cs, RegisterContextDarwin_i386::FPU::dp, RegisterContextDarwin_i386::FPU::ds, RegisterContextDarwin_i386::GPR::eax, lldb::eRegisterKindLLDB, RegisterContextDarwin_i386::EXC::err, exc, exc_err, exc_faultvaddr, exc_trapno, RegisterContextDarwin_i386::EXC::faultvaddr, RegisterContextDarwin_i386::FPU::fcw, RegisterContextDarwin_i386::FPU::fop, fpu, fpu_cs, fpu_dp, fpu_ds, fpu_fcw, fpu_fop, fpu_fsw, fpu_ftw, fpu_ip, fpu_mxcsr, fpu_mxcsrmask, fpu_stmm0, fpu_stmm1, fpu_stmm2, fpu_stmm3, fpu_stmm4, fpu_stmm5, fpu_stmm6, fpu_stmm7, fpu_xmm0, fpu_xmm1, fpu_xmm2, fpu_xmm3, fpu_xmm4, fpu_xmm5, fpu_xmm6, fpu_xmm7, RegisterContextDarwin_i386::FPU::fsw, RegisterContextDarwin_i386::FPU::ftw, lldb_private::RegisterValue::GetAsUInt16(), lldb_private::RegisterValue::GetAsUInt32(), lldb_private::RegisterValue::GetAsUInt8(), lldb_private::RegisterValue::GetBytes(), lldb_private::RegisterValue::GetByteSize(), GetSetForNativeRegNum(), gpr, gpr_cs, gpr_ds, gpr_eax, gpr_ebp, gpr_ebx, gpr_ecx, gpr_edi, gpr_edx, gpr_eflags, gpr_eip, gpr_es, gpr_esi, gpr_esp, gpr_fs, gpr_gs, gpr_ss, RegisterContextDarwin_i386::FPU::ip, RegisterContextDarwin_i386::FPU::mxcsr, RegisterContextDarwin_i386::FPU::mxcsrmask, ReadRegisterSet(), RegisterContextDarwin_i386::FPU::stmm, RegisterContextDarwin_i386::EXC::trapno, WriteRegisterSet(), and RegisterContextDarwin_i386::FPU::xmm.

◆ WriteRegisterSet()

int RegisterContextDarwin_i386::WriteRegisterSet ( uint32_t  set)

Member Data Documentation

◆ exc

EXC RegisterContextDarwin_i386::exc

◆ exc_errs

int RegisterContextDarwin_i386::exc_errs[2]

Definition at line 118 of file RegisterContextDarwin_i386.h.

Referenced by RegisterContextDarwin_i386().

◆ fpu

FPU RegisterContextDarwin_i386::fpu

◆ fpu_errs

int RegisterContextDarwin_i386::fpu_errs[2]

Definition at line 117 of file RegisterContextDarwin_i386.h.

Referenced by RegisterContextDarwin_i386().

◆ gpr

GPR RegisterContextDarwin_i386::gpr

◆ gpr_errs

int RegisterContextDarwin_i386::gpr_errs[2]

Definition at line 116 of file RegisterContextDarwin_i386.h.

Referenced by RegisterContextDarwin_i386().

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