9#if defined(__i386__) || defined(__x86_64__)
11#ifndef lldb_NativeRegisterContextLinux_x86_h
12#define lldb_NativeRegisterContextLinux_x86_h
27class NativeRegisterContextLinux_x86
29 public NativeRegisterContextDBReg_x86 {
31 NativeRegisterContextLinux_x86(
const ArchSpec &target_arch,
32 NativeThreadProtocol &native_thread);
34 uint32_t GetRegisterCount()
const override;
36 const RegisterInfo *GetRegisterInfoAtIndex(uint32_t reg)
const override;
38 uint32_t GetRegisterSetCount()
const override;
40 const RegisterSet *GetRegisterSet(uint32_t set_index)
const override;
42 uint32_t GetUserRegisterCount()
const override;
44 Status ReadRegister(
const RegisterInfo *reg_info,
45 RegisterValue ®_value)
override;
47 Status WriteRegister(
const RegisterInfo *reg_info,
48 const RegisterValue ®_value)
override;
54 std::optional<SyscallData> GetSyscallData()
override;
56 std::optional<MmapData> GetMmapData()
override;
58 const RegisterInfo *GetDR(
int num)
const override;
61 void *GetGPRBuffer()
override {
return &m_gpr_x86_64; }
63 void *GetFPRBuffer()
override;
65 size_t GetFPRSize()
override;
69 Status WriteFPR()
override;
71 uint32_t GetPtraceOffset(uint32_t reg_index)
override;
75 enum class XStateType {
Invalid, FXSAVE, XSAVE };
76 enum class RegSet { gpr, fpu, avx, mpx };
80 uint32_t num_registers;
81 uint32_t num_gpr_registers;
82 uint32_t num_fpr_registers;
83 uint32_t num_avx_registers;
84 uint32_t num_mpx_registers;
106 mutable XStateType m_xstate_type;
107 std::unique_ptr<FPR, llvm::FreeDeleter>
109 struct iovec m_iovec;
113 RegisterInfo m_i386_thread_pointer_info = {};
114 uint64_t m_gpr_x86_64[x86_64_with_base::k_num_gpr_registers];
115 uint32_t m_fctrl_offset_in_userarea;
118 bool IsCPUFeatureAvailable(RegSet feature_code)
const;
120 bool IsRegisterSetAvailable(uint32_t set_index)
const;
122 bool IsGPR(uint32_t reg_index)
const;
124 bool IsFPR(uint32_t reg_index)
const;
126 bool IsDR(uint32_t reg_index)
const;
132 bool IsAVX(uint32_t reg_index)
const;
134 bool CopyXSTATEtoMPX(uint32_t reg);
136 bool CopyMPXtoXSTATE(uint32_t reg);
138 bool IsMPX(uint32_t reg_index)
const;
140 bool IsThreadPointer(
const RegisterInfo ®_info)
const;
142 Status ReadThreadPointer(RegisterValue ®_value);
144 uint32_t GetRegisterInfoIndex(uint32_t lldb_reg)
const;
146 void UpdateXSTATEforWrite(uint32_t reg_index);
148 RegisterContextLinux_x86 &GetRegisterInfo()
const {
149 return static_cast<RegisterContextLinux_x86 &
>(
150 *m_register_info_interface_up);
Manages communication with the inferior (debugee) process.
A class that represents a running process on the host machine.
ByteOrder
Byte ordering definitions.
std::shared_ptr< lldb_private::DataBuffer > DataBufferSP
std::shared_ptr< lldb_private::WritableDataBuffer > WritableDataBufferSP