diff options
author | Sagar Thakur <sagar.thakur@imgtec.com> | 2015-12-09 12:31:01 +0000 |
---|---|---|
committer | Sagar Thakur <sagar.thakur@imgtec.com> | 2015-12-09 12:31:01 +0000 |
commit | 4f58827a57f6b151fd749e008f0b652d64d380fc (patch) | |
tree | 3166672c2b42a585e726d4e47f7b3bc4f5190eb5 | |
parent | 2d3d4ec860ff13494aaf56855dbe05bf1ab68a29 (diff) | |
download | bcm5719-llvm-4f58827a57f6b151fd749e008f0b652d64d380fc.tar.gz bcm5719-llvm-4f58827a57f6b151fd749e008f0b652d64d380fc.zip |
[LLDB][MIPS] Adding call to IsMSAAvailable() while creating RegisterInfoInterface
This patch will fix the test case test_p_returns_correct_data_size_for_each_qRegisterInfo_attach_llgs_* of TestLldbGdbServer.py on mips. The test fails because we were sending RegisterInfo for msa registers to client even when msa registers are not available. With this commit server will send E45(end of resigters) response if msa registers are not available.
llvm-svn: 255108
-rw-r--r-- | lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp | 12 | ||||
-rw-r--r-- | lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.h | 6 |
2 files changed, 11 insertions, 7 deletions
diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp index b0ef3656c68..7aba9c1ba18 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp @@ -20,6 +20,7 @@ #include "lldb/Core/Log.h" #include "lldb/Core/DataBufferHeap.h" #include "lldb/Host/HostInfo.h" +#include "lldb/Host/Host.h" #include "lldb/Core/EmulateInstruction.h" #include "lldb/lldb-enumerations.h" #include "lldb/lldb-private-enumerations.h" @@ -416,14 +417,14 @@ CreateRegisterInfoInterface(const ArchSpec& target_arch) if (HostInfo::GetArchitecture().GetAddressByteSize() == 4) { // 32-bit hosts run with a RegisterContextLinux_mips context. - return new RegisterContextLinux_mips(target_arch); + return new RegisterContextLinux_mips(target_arch, NativeRegisterContextLinux_mips64::IsMSAAvailable()); } else { assert((HostInfo::GetArchitecture().GetAddressByteSize() == 8) && "Register setting path assumes this is a 64-bit host"); // mips64 hosts know how to work with 64-bit and 32-bit EXEs using the mips64 register context. - return new RegisterContextLinux_mips64 (target_arch); + return new RegisterContextLinux_mips64 (target_arch, NativeRegisterContextLinux_mips64::IsMSAAvailable()); } } @@ -1104,9 +1105,12 @@ NativeRegisterContextLinux_mips64::IsMSA(uint32_t reg_index) const bool NativeRegisterContextLinux_mips64::IsMSAAvailable() { - Error error = NativeRegisterContextLinux::ReadRegisterSet(&m_msa, sizeof(MSA_linux_mips), NT_MIPS_MSA); + MSA_linux_mips msa_buf; + unsigned int regset = NT_MIPS_MSA; - if (error.Success() && m_msa.mir) + Error error = NativeProcessLinux::PtraceWrapper(PTRACE_GETREGSET, Host::GetCurrentProcessID(), static_cast<void *>(®set), &msa_buf, sizeof(MSA_linux_mips)); + + if (error.Success() && msa_buf.mir) { return true; } diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.h b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.h index 9099618b50c..9368645116e 100644 --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.h +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.h @@ -89,6 +89,9 @@ namespace process_linux { uint32_t NumSupportedHardwareWatchpoints () override; + static bool + IsMSAAvailable(); + protected: Error DoReadRegisterValue(uint32_t offset, @@ -119,9 +122,6 @@ namespace process_linux { bool IsMSA(uint32_t reg_index) const; - bool - IsMSAAvailable(); - void* GetGPRBuffer() override { return &m_gpr; } |