summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
diff options
context:
space:
mode:
authorTamas Berghammer <tberghammer@google.com>2015-09-07 10:11:23 +0000
committerTamas Berghammer <tberghammer@google.com>2015-09-07 10:11:23 +0000
commitc40e7b17699e0f2d9816e0733b4c4393f6a9fbd8 (patch)
tree772d86f4ceab60157b29f4ee1be0de2851291719 /lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
parent25b9f7ebd382a2b79b80c25efdd10cf26b7f3ad1 (diff)
downloadbcm5719-llvm-c40e7b17699e0f2d9816e0733b4c4393f6a9fbd8.tar.gz
bcm5719-llvm-c40e7b17699e0f2d9816e0733b4c4393f6a9fbd8.zip
Fix the handling of FPR offsets in Linux arm/aarch64 register contexts
Differential revision: http://reviews.llvm.org/D12636 llvm-svn: 246959
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp')
-rw-r--r--lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
index f692cb9cd52..82d17c1a0b6 100644
--- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
+++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
@@ -249,8 +249,9 @@ NativeRegisterContextLinux_arm64::ReadRegister (const RegisterInfo *reg_info, Re
}
// Get pointer to m_fpr variable and set the data from it.
- assert (reg_info->byte_offset < sizeof m_fpr);
- uint8_t *src = (uint8_t *)&m_fpr + reg_info->byte_offset;
+ uint32_t fpr_offset = CalculateFprOffset(reg_info);
+ assert (fpr_offset < sizeof m_fpr);
+ uint8_t *src = (uint8_t *)&m_fpr + fpr_offset;
reg_value.SetFromMemoryData(reg_info, src, reg_info->byte_size, eByteOrderLittle, error);
return error;
@@ -272,8 +273,9 @@ NativeRegisterContextLinux_arm64::WriteRegister (const RegisterInfo *reg_info, c
if (IsFPR(reg_index))
{
// Get pointer to m_fpr variable and set the data to it.
- assert (reg_info->byte_offset < sizeof(m_fpr));
- uint8_t *dst = (uint8_t *)&m_fpr + reg_info->byte_offset;
+ uint32_t fpr_offset = CalculateFprOffset(reg_info);
+ assert (fpr_offset < sizeof m_fpr);
+ uint8_t *dst = (uint8_t *)&m_fpr + fpr_offset;
switch (reg_info->byte_size)
{
case 2:
@@ -980,4 +982,10 @@ NativeRegisterContextLinux_arm64::DoWriteFPR(void *buf, size_t buf_size)
return NativeProcessLinux::PtraceWrapper(PTRACE_SETREGSET, m_thread.GetID(), &regset, &ioVec, buf_size);
}
+uint32_t
+NativeRegisterContextLinux_arm64::CalculateFprOffset(const RegisterInfo* reg_info) const
+{
+ return reg_info->byte_offset - GetRegisterInfoAtIndex(m_reg_info.first_fpr)->byte_offset;
+}
+
#endif // defined (__arm64__) || defined (__aarch64__)
OpenPOWER on IntegriCloud