From: Sagar Thakur Date: Wed, 9 Dec 2015 12:31:01 +0000 (+0000) Subject: [LLDB][MIPS] Adding call to IsMSAAvailable() while creating RegisterInfoInterface X-Git-Tag: llvmorg-3.8.0-rc1~2395 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4f58827a57f6b151fd749e008f0b652d64d380fc;p=platform%2Fupstream%2Fllvm.git [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 --- diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.cpp index b0ef365..7aba9c1 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(®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 9099618..9368645 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; }