9#if defined(__i386__) || defined(__x86_64__)
11#ifndef lldb_NativeRegisterContextLinux_x86_64_h
12#define lldb_NativeRegisterContextLinux_x86_64_h
22namespace process_linux {
24class NativeProcessLinux;
26class NativeRegisterContextLinux_x86_64
27 :
public NativeRegisterContextLinux,
28 public NativeRegisterContextDBReg_x86 {
30 NativeRegisterContextLinux_x86_64(
const ArchSpec &target_arch,
31 NativeThreadProtocol &native_thread);
33 uint32_t GetRegisterSetCount()
const override;
35 const RegisterSet *GetRegisterSet(
uint32_t set_index)
const override;
37 uint32_t GetUserRegisterCount()
const override;
39 Status ReadRegister(
const RegisterInfo *reg_info,
40 RegisterValue ®_value)
override;
42 Status WriteRegister(
const RegisterInfo *reg_info,
43 const RegisterValue ®_value)
override;
45 Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp)
override;
47 Status WriteAllRegisterValues(
const lldb::DataBufferSP &data_sp)
override;
49 std::optional<SyscallData> GetSyscallData()
override;
51 std::optional<MmapData> GetMmapData()
override;
54 void *GetGPRBuffer()
override {
return &m_gpr_x86_64; }
56 void *GetFPRBuffer()
override;
58 size_t GetFPRSize()
override;
62 Status WriteFPR()
override;
68 enum class XStateType {
Invalid, FXSAVE, XSAVE };
69 enum class RegSet { gpr, fpu, avx, mpx };
99 mutable XStateType m_xstate_type;
100 std::unique_ptr<FPR, llvm::FreeDeleter>
102 struct iovec m_iovec;
107 uint32_t m_fctrl_offset_in_userarea;
110 bool IsCPUFeatureAvailable(RegSet feature_code)
const;
112 bool IsRegisterSetAvailable(
uint32_t set_index)
const;
114 bool IsGPR(
uint32_t reg_index)
const;
116 bool IsFPR(
uint32_t reg_index)
const;
118 bool IsDR(
uint32_t reg_index)
const;
124 bool IsAVX(
uint32_t reg_index)
const;
130 bool IsMPX(
uint32_t reg_index)
const;
132 void UpdateXSTATEforWrite(
uint32_t reg_index);
A class that represents a running process on the host machine.
@ k_num_gpr_registers_x86_64
ByteOrder
Byte ordering definitions.