diff options
Diffstat (limited to 'lldb/source/Plugins/Process/Utility')
7 files changed, 21 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.cpp index 6563796db12..2eebaddcecc 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.cpp @@ -111,6 +111,10 @@ RegisterContextLinux_i386::RegisterContextLinux_i386( size_t RegisterContextLinux_i386::GetGPRSize() const { return sizeof(GPR); } +size_t RegisterContextLinux_i386::GetFXSAVEOffset() const { + return (LLVM_EXTENSION offsetof(UserArea, i387)); +} + const RegisterInfo *RegisterContextLinux_i386::GetRegisterInfo() const { switch (m_target_arch.GetMachine()) { case llvm::Triple::x86: diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.h b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.h index fbf803789cc..bb6707b0ed7 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.h +++ b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_i386.h @@ -18,6 +18,8 @@ public: size_t GetGPRSize() const override; + size_t GetFXSAVEOffset() const override; + const lldb_private::RegisterInfo *GetRegisterInfo() const override; uint32_t GetRegisterCount() const override; diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.cpp index 526b3eca81a..6f4bb800c4d 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.cpp @@ -179,6 +179,11 @@ RegisterContextLinux_x86_64::RegisterContextLinux_x86_64( size_t RegisterContextLinux_x86_64::GetGPRSize() const { return sizeof(GPR); } +size_t RegisterContextLinux_x86_64::GetFXSAVEOffset() const { + return (LLVM_EXTENSION offsetof(UserArea, fpr) + + LLVM_EXTENSION offsetof(FPR, xstate)); +} + const std::vector<lldb_private::RegisterInfo> * RegisterContextLinux_x86_64::GetDynamicRegisterInfoP() const { return &d_register_infos; diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.h b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.h index 99a4cb73679..e9e3e8bffde 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.h +++ b/lldb/source/Plugins/Process/Utility/RegisterContextLinux_x86_64.h @@ -18,6 +18,8 @@ public: size_t GetGPRSize() const override; + size_t GetFXSAVEOffset() const override; + const lldb_private::RegisterInfo *GetRegisterInfo() const override; uint32_t GetRegisterCount() const override; diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp index 77f3fcb0e9c..d6f67cbc0bd 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.cpp @@ -419,6 +419,10 @@ size_t RegisterContextPOSIX_x86::GetGPRSize() { return m_register_info_ap->GetGPRSize(); } +size_t RegisterContextPOSIX_x86::GetFXSAVEOffset() { + return m_register_info_ap->GetFXSAVEOffset(); +} + const RegisterInfo *RegisterContextPOSIX_x86::GetRegisterInfo() { // Commonly, this method is overridden and g_register_infos is copied and // specialized. diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.h b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.h index 22f3493b4ee..c5afe089e47 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.h +++ b/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_x86.h @@ -38,6 +38,8 @@ public: virtual size_t GetGPRSize(); + virtual size_t GetFXSAVEOffset(); + virtual unsigned GetRegisterSize(unsigned reg); virtual unsigned GetRegisterOffset(unsigned reg); diff --git a/lldb/source/Plugins/Process/Utility/RegisterInfoInterface.h b/lldb/source/Plugins/Process/Utility/RegisterInfoInterface.h index 12db366d7a5..a0776407908 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterInfoInterface.h +++ b/lldb/source/Plugins/Process/Utility/RegisterInfoInterface.h @@ -29,6 +29,8 @@ public: virtual size_t GetGPRSize() const = 0; + virtual size_t GetFXSAVEOffset() const { return 0; } + virtual const lldb_private::RegisterInfo *GetRegisterInfo() const = 0; // Returns the number of registers including the user registers and the |

