summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSagar Thakur <sagar.thakur@imgtec.com>2015-12-09 12:31:01 +0000
committerSagar Thakur <sagar.thakur@imgtec.com>2015-12-09 12:31:01 +0000
commit4f58827a57f6b151fd749e008f0b652d64d380fc (patch)
tree3166672c2b42a585e726d4e47f7b3bc4f5190eb5
parent2d3d4ec860ff13494aaf56855dbe05bf1ab68a29 (diff)
downloadbcm5719-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.cpp12
-rw-r--r--lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_mips64.h6
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 *>(&regset), &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; }
OpenPOWER on IntegriCloud