[Lldb-commits] [lldb] r166604 - in /lldb/trunk: source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp test/functionalities/register/TestRegisters.py test/lldbtest.py
Greg Clayton
gclayton at apple.com
Wed Oct 24 11:24:15 PDT 2012
Author: gclayton
Date: Wed Oct 24 13:24:14 2012
New Revision: 166604
URL: http://llvm.org/viewvc/llvm-project?rev=166604&view=rev
Log:
Patch from Ashok Thirumurthi that enabled FPU registers for POSIX x86_64.
Modified:
lldb/trunk/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp
lldb/trunk/test/functionalities/register/TestRegisters.py
lldb/trunk/test/lldbtest.py
Modified: lldb/trunk/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp?rev=166604&r1=166603&r2=166604&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp (original)
+++ lldb/trunk/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp Wed Oct 24 13:24:14 2012
@@ -13,6 +13,7 @@
#include "lldb/Core/DataBufferHeap.h"
#include "lldb/Core/DataExtractor.h"
+#include "lldb/Core/RegisterValue.h"
#include "lldb/Core/Scalar.h"
#include "lldb/Target/Thread.h"
#include "lldb/Host/Endian.h"
@@ -500,12 +501,66 @@
}
bool
-RegisterContext_x86_64::ReadRegister(const RegisterInfo *reg_info,
- RegisterValue &value)
+RegisterContext_x86_64::ReadRegister(const RegisterInfo *reg_info, RegisterValue &value)
{
const uint32_t reg = reg_info->kinds[eRegisterKindLLDB];
- ProcessMonitor &monitor = GetMonitor();
- return monitor.ReadRegisterValue(GetRegOffset(reg), GetRegSize(reg), value);
+
+ if (reg >= k_first_fpr && reg <= k_last_fpr) {
+ if (!ReadFPR())
+ return false;
+ }
+ else {
+ ProcessMonitor &monitor = GetMonitor();
+ return monitor.ReadRegisterValue(GetRegOffset(reg),GetRegSize(reg), value);
+ }
+
+ if (reg_info->encoding == eEncodingVector) {
+ // Get the target process whose privileged thread was used for the register read.
+ Process *process = CalculateProcess().get();
+ if (process) {
+ if (reg >= fpu_stmm0 && reg <= fpu_stmm7) {
+ value.SetBytes(user.i387.stmm[reg - fpu_stmm0].bytes, reg_info->byte_size, process->GetByteOrder());
+ return value.GetType() == RegisterValue::eTypeBytes;
+ }
+ if (reg >= fpu_xmm0 && reg <= fpu_xmm15) {
+ value.SetBytes(user.i387.xmm[reg - fpu_xmm0].bytes, reg_info->byte_size, process->GetByteOrder());
+ return value.GetType() == RegisterValue::eTypeBytes;
+ }
+ }
+ return false;
+ }
+
+ // Note that lldb uses slightly different naming conventions from sys/user.h
+ switch (reg)
+ {
+ default:
+ return false;
+ case fpu_dp:
+ value = user.i387.dp;
+ break;
+ case fpu_fcw:
+ value = user.i387.fcw;
+ break;
+ case fpu_fsw:
+ value = user.i387.fsw;
+ break;
+ case fpu_ip:
+ value = user.i387.ip;
+ break;
+ case fpu_fop:
+ value = user.i387.fop;
+ break;
+ case fpu_ftw:
+ value = user.i387.ftw;
+ break;
+ case fpu_mxcsr:
+ value = user.i387.mxcsr;
+ break;
+ case fpu_mxcsrmask:
+ value = user.i387.mxcsrmask;
+ break;
+ }
+ return true;
}
bool
Modified: lldb/trunk/test/functionalities/register/TestRegisters.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/register/TestRegisters.py?rev=166604&r1=166603&r2=166604&view=diff
==============================================================================
--- lldb/trunk/test/functionalities/register/TestRegisters.py (original)
+++ lldb/trunk/test/functionalities/register/TestRegisters.py Wed Oct 24 13:24:14 2012
@@ -50,7 +50,8 @@
# Test some register-related commands.
- self.runCmd("register read -a")
+ self.expect("register read -a", MISSING_EXPECTED_REGISTERS,
+ substrs = ['registers were unavailable'], matching = False)
self.runCmd("register read xmm0")
# rdar://problem/10611315
Modified: lldb/trunk/test/lldbtest.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lldbtest.py?rev=166604&r1=166603&r2=166604&view=diff
==============================================================================
--- lldb/trunk/test/lldbtest.py (original)
+++ lldb/trunk/test/lldbtest.py Wed Oct 24 13:24:14 2012
@@ -91,6 +91,8 @@
BREAKPOINT_HIT_THRICE = "Breakpoint resolved with hit cout = 3"
+MISSING_EXPECTED_REGISTERS = "At least one expected register is unavailable."
+
OBJECT_PRINTED_CORRECTLY = "Object printed correctly"
SOURCE_DISPLAYED_CORRECTLY = "Source code displayed correctly"
More information about the lldb-commits
mailing list