diff options
Diffstat (limited to 'source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h')
-rw-r--r-- | source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h | 191 |
1 files changed, 83 insertions, 108 deletions
diff --git a/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h b/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h index b04be4bb7688..cc05ec06b297 100644 --- a/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h +++ b/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.h @@ -19,149 +19,124 @@ namespace lldb_private { namespace process_linux { - class NativeProcessLinux; +class NativeProcessLinux; - class NativeRegisterContextLinux_x86_64 : public NativeRegisterContextLinux - { - public: - NativeRegisterContextLinux_x86_64 (const ArchSpec& target_arch, - NativeThreadProtocol &native_thread, - uint32_t concrete_frame_idx); +class NativeRegisterContextLinux_x86_64 : public NativeRegisterContextLinux { +public: + NativeRegisterContextLinux_x86_64(const ArchSpec &target_arch, + NativeThreadProtocol &native_thread, + uint32_t concrete_frame_idx); - uint32_t - GetRegisterSetCount () const override; + uint32_t GetRegisterSetCount() const override; - const RegisterSet * - GetRegisterSet (uint32_t set_index) const override; + const RegisterSet *GetRegisterSet(uint32_t set_index) const override; - uint32_t - GetUserRegisterCount() const override; + uint32_t GetUserRegisterCount() const override; - Error - ReadRegister (const RegisterInfo *reg_info, RegisterValue ®_value) override; + Error ReadRegister(const RegisterInfo *reg_info, + RegisterValue ®_value) override; - Error - WriteRegister (const RegisterInfo *reg_info, const RegisterValue ®_value) override; + Error WriteRegister(const RegisterInfo *reg_info, + const RegisterValue ®_value) override; - Error - ReadAllRegisterValues (lldb::DataBufferSP &data_sp) override; + Error ReadAllRegisterValues(lldb::DataBufferSP &data_sp) override; - Error - WriteAllRegisterValues (const lldb::DataBufferSP &data_sp) override; + Error WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override; - Error - IsWatchpointHit(uint32_t wp_index, bool &is_hit) override; + Error IsWatchpointHit(uint32_t wp_index, bool &is_hit) override; - Error - GetWatchpointHitIndex(uint32_t &wp_index, lldb::addr_t trap_addr) override; + Error GetWatchpointHitIndex(uint32_t &wp_index, + lldb::addr_t trap_addr) override; - Error - IsWatchpointVacant(uint32_t wp_index, bool &is_vacant) override; + Error IsWatchpointVacant(uint32_t wp_index, bool &is_vacant) override; - bool - ClearHardwareWatchpoint(uint32_t wp_index) override; + bool ClearHardwareWatchpoint(uint32_t wp_index) override; - Error - ClearAllHardwareWatchpoints () override; + Error ClearAllHardwareWatchpoints() override; - Error - SetHardwareWatchpointWithIndex(lldb::addr_t addr, size_t size, - uint32_t watch_flags, uint32_t wp_index); + Error SetHardwareWatchpointWithIndex(lldb::addr_t addr, size_t size, + uint32_t watch_flags, uint32_t wp_index); - uint32_t - SetHardwareWatchpoint(lldb::addr_t addr, size_t size, - uint32_t watch_flags) override; + uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size, + uint32_t watch_flags) override; - lldb::addr_t - GetWatchpointAddress(uint32_t wp_index) override; + lldb::addr_t GetWatchpointAddress(uint32_t wp_index) override; - uint32_t - NumSupportedHardwareWatchpoints() override; + uint32_t NumSupportedHardwareWatchpoints() override; - protected: - void* - GetGPRBuffer() override { return &m_gpr_x86_64; } +protected: + void *GetGPRBuffer() override { return &m_gpr_x86_64; } - void* - GetFPRBuffer() override; + void *GetFPRBuffer() override; - size_t - GetFPRSize() override; + size_t GetFPRSize() override; - Error - ReadFPR() override; + Error ReadFPR() override; - Error - WriteFPR() override; + Error WriteFPR() override; - private: +private: + // Private member types. + enum class XStateType { Invalid, FXSAVE, XSAVE }; + enum class RegSet { gpr, fpu, avx, mpx }; - // Private member types. - enum FPRType - { - eFPRTypeNotValid = 0, - eFPRTypeFXSAVE, - eFPRTypeXSAVE - }; + // Info about register ranges. + struct RegInfo { + uint32_t num_registers; + uint32_t num_gpr_registers; + uint32_t num_fpr_registers; + uint32_t num_avx_registers; + uint32_t num_mpx_registers; + uint32_t last_gpr; + uint32_t first_fpr; + uint32_t last_fpr; + uint32_t first_st; + uint32_t last_st; + uint32_t first_mm; + uint32_t last_mm; + uint32_t first_xmm; + uint32_t last_xmm; + uint32_t first_ymm; + uint32_t last_ymm; + uint32_t first_mpxr; + uint32_t last_mpxr; + uint32_t first_mpxc; + uint32_t last_mpxc; + uint32_t first_dr; + uint32_t gpr_flags; + }; - // Info about register ranges. - struct RegInfo - { - uint32_t num_registers; - uint32_t num_gpr_registers; - uint32_t num_fpr_registers; - uint32_t num_avx_registers; + // Private member variables. + mutable XStateType m_xstate_type; + FPR m_fpr; // Extended States Area, named FPR for historical reasons. + IOVEC m_iovec; + YMM m_ymm_set; + MPX m_mpx_set; + RegInfo m_reg_info; + uint64_t m_gpr_x86_64[k_num_gpr_registers_x86_64]; + uint32_t m_fctrl_offset_in_userarea; - uint32_t last_gpr; - uint32_t first_fpr; - uint32_t last_fpr; + // Private member methods. + bool IsCPUFeatureAvailable(RegSet feature_code) const; - uint32_t first_st; - uint32_t last_st; - uint32_t first_mm; - uint32_t last_mm; - uint32_t first_xmm; - uint32_t last_xmm; - uint32_t first_ymm; - uint32_t last_ymm; + bool IsRegisterSetAvailable(uint32_t set_index) const; - uint32_t first_dr; - uint32_t gpr_flags; - }; + bool IsGPR(uint32_t reg_index) const; - // Private member variables. - mutable FPRType m_fpr_type; - FPR m_fpr; - IOVEC m_iovec; - YMM m_ymm_set; - RegInfo m_reg_info; - uint64_t m_gpr_x86_64[k_num_gpr_registers_x86_64]; - uint32_t m_fctrl_offset_in_userarea; + bool IsFPR(uint32_t reg_index) const; - // Private member methods. - bool IsRegisterSetAvailable (uint32_t set_index) const; + bool CopyXSTATEtoYMM(uint32_t reg_index, lldb::ByteOrder byte_order); - bool - IsGPR(uint32_t reg_index) const; + bool CopyYMMtoXSTATE(uint32_t reg, lldb::ByteOrder byte_order); - FPRType - GetFPRType () const; + bool IsAVX(uint32_t reg_index) const; - bool - IsFPR(uint32_t reg_index) const; + bool CopyXSTATEtoMPX(uint32_t reg); - bool - IsFPR(uint32_t reg_index, FPRType fpr_type) const; + bool CopyMPXtoXSTATE(uint32_t reg); - bool - CopyXSTATEtoYMM (uint32_t reg_index, lldb::ByteOrder byte_order); - - bool - CopyYMMtoXSTATE(uint32_t reg, lldb::ByteOrder byte_order); - - bool - IsAVX (uint32_t reg_index) const; - }; + bool IsMPX(uint32_t reg_index) const; +}; } // namespace process_linux } // namespace lldb_private |