summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2011-06-03 20:41:02 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2011-06-03 20:41:02 +0000
commit10bc01032c9a099d4e5a438cfdd66431c6749dc0 (patch)
treebfa12bea5f1d75ea0fbfadde6b6fff1d00a8c02f /lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
parent5a6fa540dcc0a86b6e4412ad27bbb0a732bc859b (diff)
downloadbcm5719-llvm-10bc01032c9a099d4e5a438cfdd66431c6749dc0.tar.gz
bcm5719-llvm-10bc01032c9a099d4e5a438cfdd66431c6749dc0.zip
Implement RegisterContextLinux_x86_64::{Read,Write}AllRegisterValues
llvm-svn: 132587
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp')
-rw-r--r--lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
index f482c014ee1..af8d7c39c35 100644
--- a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
+++ b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
@@ -334,6 +334,58 @@ ReadFPROperation::Execute(ProcessMonitor *monitor)
}
//------------------------------------------------------------------------------
+/// @class WriteGPROperation
+/// @brief Implements ProcessMonitor::WriteGPR.
+class WriteGPROperation : public Operation
+{
+public:
+ WriteGPROperation(void *buf, bool &result)
+ : m_buf(buf), m_result(result)
+ { }
+
+ void Execute(ProcessMonitor *monitor);
+
+private:
+ void *m_buf;
+ bool &m_result;
+};
+
+void
+WriteGPROperation::Execute(ProcessMonitor *monitor)
+{
+ if (ptrace(PTRACE_SETREGS, monitor->GetPID(), NULL, m_buf) < 0)
+ m_result = false;
+ else
+ m_result = true;
+}
+
+//------------------------------------------------------------------------------
+/// @class WriteFPROperation
+/// @brief Implements ProcessMonitor::WriteFPR.
+class WriteFPROperation : public Operation
+{
+public:
+ WriteFPROperation(void *buf, bool &result)
+ : m_buf(buf), m_result(result)
+ { }
+
+ void Execute(ProcessMonitor *monitor);
+
+private:
+ void *m_buf;
+ bool &m_result;
+};
+
+void
+WriteFPROperation::Execute(ProcessMonitor *monitor)
+{
+ if (ptrace(PTRACE_SETFPREGS, monitor->GetPID(), NULL, m_buf) < 0)
+ m_result = false;
+ else
+ m_result = true;
+}
+
+//------------------------------------------------------------------------------
/// @class ResumeOperation
/// @brief Implements ProcessMonitor::Resume.
class ResumeOperation : public Operation
@@ -1134,6 +1186,24 @@ ProcessMonitor::ReadFPR(void *buf)
}
bool
+ProcessMonitor::WriteGPR(void *buf)
+{
+ bool result;
+ WriteGPROperation op(buf, result);
+ DoOperation(&op);
+ return result;
+}
+
+bool
+ProcessMonitor::WriteFPR(void *buf)
+{
+ bool result;
+ WriteFPROperation op(buf, result);
+ DoOperation(&op);
+ return result;
+}
+
+bool
ProcessMonitor::Resume(lldb::tid_t tid, uint32_t signo)
{
bool result;
OpenPOWER on IntegriCloud