[Lldb-commits] [lldb] r123797 - in /lldb/trunk/source/Plugins/Process/Linux: ProcessMonitor.cpp ProcessMonitor.h
Stephen Wilson
wilsons at start.ca
Tue Jan 18 17:31:38 PST 2011
Author: wilsons
Date: Tue Jan 18 19:31:38 2011
New Revision: 123797
URL: http://llvm.org/viewvc/llvm-project?rev=123797&view=rev
Log:
Support the reading of registers en masse via the linux ProcessMonitor.
Modified:
lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp
lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.h
Modified: lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp?rev=123797&r1=123796&r2=123797&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp (original)
+++ lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.cpp Tue Jan 18 19:31:38 2011
@@ -260,6 +260,58 @@
}
//------------------------------------------------------------------------------
+/// @class ReadGPROperation
+/// @brief Implements ProcessMonitor::ReadGPR.
+class ReadGPROperation : public Operation
+{
+public:
+ ReadGPROperation(void *buf, bool &result)
+ : m_buf(buf), m_result(result)
+ { }
+
+ void Execute(ProcessMonitor *monitor);
+
+private:
+ void *m_buf;
+ bool &m_result;
+};
+
+void
+ReadGPROperation::Execute(ProcessMonitor *monitor)
+{
+ if (ptrace(PTRACE_GETREGS, monitor->GetPID(), NULL, m_buf) < 0)
+ m_result = false;
+ else
+ m_result = true;
+}
+
+//------------------------------------------------------------------------------
+/// @class ReadFPROperation
+/// @brief Implements ProcessMonitor::ReadFPR.
+class ReadFPROperation : public Operation
+{
+public:
+ ReadFPROperation(void *buf, bool &result)
+ : m_buf(buf), m_result(result)
+ { }
+
+ void Execute(ProcessMonitor *monitor);
+
+private:
+ void *m_buf;
+ bool &m_result;
+};
+
+void
+ReadFPROperation::Execute(ProcessMonitor *monitor)
+{
+ if (ptrace(PTRACE_GETFPREGS, monitor->GetPID(), NULL, m_buf) < 0)
+ m_result = false;
+ else
+ m_result = true;
+}
+
+//------------------------------------------------------------------------------
/// @class ResumeOperation
/// @brief Implements ProcessMonitor::Resume.
class ResumeOperation : public Operation
@@ -876,6 +928,24 @@
}
bool
+ProcessMonitor::ReadGPR(void *buf)
+{
+ bool result;
+ ReadGPROperation op(buf, result);
+ DoOperation(&op);
+ return result;
+}
+
+bool
+ProcessMonitor::ReadFPR(void *buf)
+{
+ bool result;
+ ReadFPROperation op(buf, result);
+ DoOperation(&op);
+ return result;
+}
+
+bool
ProcessMonitor::Resume(lldb::tid_t tid)
{
bool result;
Modified: lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.h?rev=123797&r1=123796&r2=123797&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.h (original)
+++ lldb/trunk/source/Plugins/Process/Linux/ProcessMonitor.h Tue Jan 18 19:31:38 2011
@@ -108,6 +108,14 @@
bool
WriteRegisterValue(unsigned offset, const lldb_private::Scalar &value);
+ /// Reads all general purpose registers into the specified buffer.
+ bool
+ ReadGPR(void *buf);
+
+ /// Reads all floating point registers into the specified buffer.
+ bool
+ ReadFPR(void *buf);
+
/// Writes a siginfo_t structure corresponding to the given thread ID to the
/// memory region pointed to by @p siginfo.
bool
More information about the lldb-commits
mailing list