summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Kopec <Matt.Kopec@intel.com>2013-03-06 17:20:48 +0000
committerMatt Kopec <Matt.Kopec@intel.com>2013-03-06 17:20:48 +0000
commit7de484640e3ea29f97890a3690c00f2d57a76425 (patch)
treea3ca93520db7a7e4f709966eda3c5ba8b850c0b1
parent15225aee178791b33cffb1ec070e10934bfe4550 (diff)
downloadbcm5719-llvm-7de484640e3ea29f97890a3690c00f2d57a76425.tar.gz
bcm5719-llvm-7de484640e3ea29f97890a3690c00f2d57a76425.zip
Improve/Cleanup ptrace wrapper and remove dependency on user.h
Patch by Ashok Thirumurthi. llvm-svn: 176558
-rw-r--r--lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp28
-rw-r--r--lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.h6
-rw-r--r--lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp119
-rw-r--r--lldb/source/Plugins/Process/Linux/ProcessMonitor.h10
-rw-r--r--lldb/source/Plugins/Process/POSIX/RegisterContext_i386.cpp4
-rw-r--r--lldb/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp8
6 files changed, 103 insertions, 72 deletions
diff --git a/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp b/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
index e88d792d737..724086baa8c 100644
--- a/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
+++ b/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
@@ -58,6 +58,8 @@ Get_PT_IO_OP(int op)
}
}
+// Wrapper for ptrace to catch errors and log calls.
+// Note that ptrace sets errno on error because -1 is reserved as a valid result.
extern long
PtraceWrapper(int req, ::pid_t pid, void *addr, int data,
const char* reqName, const char* file, int line)
@@ -84,7 +86,7 @@ PtraceWrapper(int req, ::pid_t pid, void *addr, int data,
//PtraceDisplayBytes(req, data);
- if (log && (result == -1 || errno != 0))
+ if (log && errno != 0)
{
const char* str;
switch (errno)
@@ -112,10 +114,21 @@ PtraceWrapper(int req, ::pid_t pid, void *addr, int data,
return result;
}
+// Wrapper for ptrace when logging is not required.
+// Sets errno to 0 prior to calling ptrace.
+extern long
+PtraceWrapper(__ptrace_request req, pid_t pid, void *addr, void *data)
+{
+ long result = 0;
+ errno = 0;
+ result = ptrace(req, pid, addr, data);
+ return result;
+}
+
#define PTRACE(req, pid, addr, data) \
PtraceWrapper((req), (pid), (addr), (data), #req, __FILE__, __LINE__)
#else
-#define PTRACE ptrace
+ PtraceWrapper((req), (pid), (addr), (data))
#endif
//------------------------------------------------------------------------------
@@ -1104,7 +1117,8 @@ ProcessMonitor::MonitorSIGTRAP(ProcessMonitor *monitor,
{
ProcessMessage message;
- assert(info->si_signo == SIGTRAP && "Unexpected child signal!");
+ assert(monitor);
+ assert(info && info->si_signo == SIGTRAP && "Unexpected child signal!");
switch (info->si_code)
{
@@ -1443,7 +1457,7 @@ ProcessMonitor::WriteRegisterValue(lldb::tid_t tid, unsigned offset,
}
bool
-ProcessMonitor::ReadGPR(lldb::tid_t tid, void *buf)
+ProcessMonitor::ReadGPR(lldb::tid_t tid, void *buf, size_t buf_size)
{
bool result;
ReadGPROperation op(buf, result);
@@ -1452,7 +1466,7 @@ ProcessMonitor::ReadGPR(lldb::tid_t tid, void *buf)
}
bool
-ProcessMonitor::ReadFPR(lldb::tid_t tid, void *buf)
+ProcessMonitor::ReadFPR(lldb::tid_t tid, void *buf, size_t buf_size)
{
bool result;
ReadFPROperation op(buf, result);
@@ -1461,7 +1475,7 @@ ProcessMonitor::ReadFPR(lldb::tid_t tid, void *buf)
}
bool
-ProcessMonitor::WriteGPR(lldb::tid_t tid, void *buf)
+ProcessMonitor::WriteGPR(lldb::tid_t tid, void *buf, size_t buf_size)
{
bool result;
WriteGPROperation op(buf, result);
@@ -1470,7 +1484,7 @@ ProcessMonitor::WriteGPR(lldb::tid_t tid, void *buf)
}
bool
-ProcessMonitor::WriteFPR(lldb::tid_t tid, void *buf)
+ProcessMonitor::WriteFPR(lldb::tid_t tid, void *buf, size_t buf_size)
{
bool result;
WriteFPROperation op(buf, result);
diff --git a/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.h b/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.h
index 1485f2bb249..bc0fbdf2aae 100644
--- a/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.h
+++ b/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.h
@@ -124,19 +124,19 @@ public:
/// FIXME: The FreeBSD implementation of this function should use tid in order
/// to enable support for debugging threaded programs.
bool
- ReadGPR(lldb::tid_t tid, void *buf);
+ ReadGPR(lldb::tid_t tid, void *buf, size_t buf_size);
/// Reads all floating point registers into the specified buffer.
/// FIXME: The FreeBSD implementation of this function should use tid in order
/// to enable support for debugging threaded programs.
bool
- ReadFPR(lldb::tid_t tid, void *buf);
+ ReadFPR(lldb::tid_t tid, void *buf, size_t buf_size);
/// Writes all general purpose registers into the specified buffer.
/// FIXME: The FreeBSD implementation of this function should use tid in order
/// to enable support for debugging threaded programs.
bool
- WriteGPR(lldb::tid_t tid, void *buf);
+ WriteGPR(lldb::tid_t tid, void *buf, size_t buf_size);
/// Writes all floating point registers into the specified buffer.
/// FIXME: The FreeBSD implementation of this function should use tid in order
diff --git a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
index f36a9eef732..872dffe098c 100644
--- a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
+++ b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
@@ -18,7 +18,6 @@
#include <sys/ptrace.h>
#include <sys/socket.h>
#include <sys/types.h>
-#include <sys/user.h>
#include <sys/wait.h>
// C++ Includes
@@ -64,7 +63,7 @@ DisplayBytes (lldb_private::StreamString &s, void *bytes, uint32_t count)
}
}
-static void PtraceDisplayBytes(__ptrace_request &req, void *data)
+static void PtraceDisplayBytes(__ptrace_request &req, void *data, size_t data_size)
{
StreamString buf;
LogSP verbose_log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (
@@ -94,13 +93,13 @@ static void PtraceDisplayBytes(__ptrace_request &req, void *data)
}
case PTRACE_SETREGS:
{
- DisplayBytes(buf, data, sizeof(user_regs_struct));
+ DisplayBytes(buf, data, data_size);
verbose_log->Printf("PTRACE_SETREGS %s", buf.GetData());
break;
}
case PTRACE_SETFPREGS:
{
- DisplayBytes(buf, data, sizeof(user_fpregs_struct));
+ DisplayBytes(buf, data, data_size);
verbose_log->Printf("PTRACE_SETFPREGS %s", buf.GetData());
break;
}
@@ -118,8 +117,9 @@ static void PtraceDisplayBytes(__ptrace_request &req, void *data)
}
// Wrapper for ptrace to catch errors and log calls.
+// Note that ptrace sets errno on error because -1 is a valid result for PTRACE_PEEK*
extern long
-PtraceWrapper(__ptrace_request req, pid_t pid, void *addr, void *data,
+PtraceWrapper(__ptrace_request req, pid_t pid, void *addr, void *data, size_t data_size,
const char* reqName, const char* file, int line)
{
long int result;
@@ -127,17 +127,17 @@ PtraceWrapper(__ptrace_request req, pid_t pid, void *addr, void *data,
LogSP log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PTRACE));
if (log)
- log->Printf("ptrace(%s, %u, %p, %p) called from file %s line %d",
- reqName, pid, addr, data, file, line);
+ log->Printf("ptrace(%s, %u, %p, %p, %zu) called from file %s line %d",
+ reqName, pid, addr, data, data_size, file, line);
- PtraceDisplayBytes(req, data);
+ PtraceDisplayBytes(req, data, data_size);
errno = 0;
result = ptrace(req, pid, addr, data);
- PtraceDisplayBytes(req, data);
+ PtraceDisplayBytes(req, data, data_size);
- if (log && (result == -1 || errno != 0))
+ if (log && errno != 0)
{
const char* str;
switch (errno)
@@ -154,10 +154,20 @@ PtraceWrapper(__ptrace_request req, pid_t pid, void *addr, void *data,
return result;
}
-#define PTRACE(req, pid, addr, data) \
- PtraceWrapper((req), (pid), (addr), (data), #req, __FILE__, __LINE__)
+// Wrapper for ptrace when logging is not required.
+// Sets errno to 0 prior to calling ptrace.
+extern long
+PtraceWrapper(__ptrace_request req, pid_t pid, void *addr, void *data, size_t data_size)
+{
+ errno = 0;
+ long result = ptrace(req, pid, addr, data);
+ return result;
+}
+
+#define PTRACE(req, pid, addr, data, data_size) \
+ PtraceWrapper((req), (pid), (addr), (data), (data_size), #req, __FILE__, __LINE__)
#else
-#define PTRACE ptrace
+ PtraceWrapper((req), (pid), (addr), (data), (data_size))
#endif
//------------------------------------------------------------------------------
@@ -187,8 +197,8 @@ DoReadMemory(lldb::pid_t pid,
for (bytes_read = 0; bytes_read < size; bytes_read += remainder)
{
errno = 0;
- data = PTRACE(PTRACE_PEEKDATA, pid, (void*)vm_addr, NULL);
- if (data == -1L && errno)
+ data = PTRACE(PTRACE_PEEKDATA, pid, (void*)vm_addr, NULL, 0);
+ if (errno)
{
error.SetErrorToErrno();
if (log)
@@ -261,7 +271,7 @@ DoWriteMemory(lldb::pid_t pid,
log->Printf ("ProcessMonitor::%s() [%p]:0x%lx (0x%lx)", __FUNCTION__,
(void*)vm_addr, *(unsigned long*)src, data);
- if (PTRACE(PTRACE_POKEDATA, pid, (void*)vm_addr, (void*)data))
+ if (PTRACE(PTRACE_POKEDATA, pid, (void*)vm_addr, (void*)data, 0))
{
error.SetErrorToErrno();
if (log)
@@ -434,8 +444,8 @@ ReadRegOperation::Execute(ProcessMonitor *monitor)
// Set errno to zero so that we can detect a failed peek.
errno = 0;
- lldb::addr_t data = PTRACE(PTRACE_PEEKUSER, m_tid, (void*)m_offset, NULL);
- if (data == -1UL && errno)
+ lldb::addr_t data = PTRACE(PTRACE_PEEKUSER, m_tid, (void*)m_offset, NULL, 0);
+ if (errno)
m_result = false;
else
{
@@ -483,7 +493,7 @@ WriteRegOperation::Execute(ProcessMonitor *monitor)
if (log)
log->Printf ("ProcessMonitor::%s() reg %s: %p", __FUNCTION__,
POSIXThread::GetRegisterNameFromOffset(m_offset), buf);
- if (PTRACE(PTRACE_POKEUSER, m_tid, (void*)m_offset, buf))
+ if (PTRACE(PTRACE_POKEUSER, m_tid, (void*)m_offset, buf, 0))
m_result = false;
else
m_result = true;
@@ -495,8 +505,8 @@ WriteRegOperation::Execute(ProcessMonitor *monitor)
class ReadGPROperation : public Operation
{
public:
- ReadGPROperation(lldb::tid_t tid, void *buf, bool &result)
- : m_tid(tid), m_buf(buf), m_result(result)
+ ReadGPROperation(lldb::tid_t tid, void *buf, size_t buf_size, bool &result)
+ : m_tid(tid), m_buf(buf), m_buf_size(buf_size), m_result(result)
{ }
void Execute(ProcessMonitor *monitor);
@@ -504,13 +514,14 @@ public:
private:
lldb::tid_t m_tid;
void *m_buf;
+ size_t m_buf_size;
bool &m_result;
};
void
ReadGPROperation::Execute(ProcessMonitor *monitor)
{
- if (PTRACE(PTRACE_GETREGS, m_tid, NULL, m_buf) < 0)
+ if (PTRACE(PTRACE_GETREGS, m_tid, NULL, m_buf, m_buf_size) < 0)
m_result = false;
else
m_result = true;
@@ -522,8 +533,8 @@ ReadGPROperation::Execute(ProcessMonitor *monitor)
class ReadFPROperation : public Operation
{
public:
- ReadFPROperation(lldb::tid_t tid, void *buf, bool &result)
- : m_tid(tid), m_buf(buf), m_result(result)
+ ReadFPROperation(lldb::tid_t tid, void *buf, size_t buf_size, bool &result)
+ : m_tid(tid), m_buf(buf), m_buf_size(buf_size), m_result(result)
{ }
void Execute(ProcessMonitor *monitor);
@@ -531,13 +542,14 @@ public:
private:
lldb::tid_t m_tid;
void *m_buf;
+ size_t m_buf_size;
bool &m_result;
};
void
ReadFPROperation::Execute(ProcessMonitor *monitor)
{
- if (PTRACE(PTRACE_GETFPREGS, m_tid, NULL, m_buf) < 0)
+ if (PTRACE(PTRACE_GETFPREGS, m_tid, NULL, m_buf, m_buf_size) < 0)
m_result = false;
else
m_result = true;
@@ -549,8 +561,8 @@ ReadFPROperation::Execute(ProcessMonitor *monitor)
class WriteGPROperation : public Operation
{
public:
- WriteGPROperation(lldb::tid_t tid, void *buf, bool &result)
- : m_tid(tid), m_buf(buf), m_result(result)
+ WriteGPROperation(lldb::tid_t tid, void *buf, size_t buf_size, bool &result)
+ : m_tid(tid), m_buf(buf), m_buf_size(buf_size), m_result(result)
{ }
void Execute(ProcessMonitor *monitor);
@@ -558,13 +570,14 @@ public:
private:
lldb::tid_t m_tid;
void *m_buf;
+ size_t m_buf_size;
bool &m_result;
};
void
WriteGPROperation::Execute(ProcessMonitor *monitor)
{
- if (PTRACE(PTRACE_SETREGS, m_tid, NULL, m_buf) < 0)
+ if (PTRACE(PTRACE_SETREGS, m_tid, NULL, m_buf, m_buf_size) < 0)
m_result = false;
else
m_result = true;
@@ -576,8 +589,8 @@ WriteGPROperation::Execute(ProcessMonitor *monitor)
class WriteFPROperation : public Operation
{
public:
- WriteFPROperation(lldb::tid_t tid, void *buf, bool &result)
- : m_tid(tid), m_buf(buf), m_result(result)
+ WriteFPROperation(lldb::tid_t tid, void *buf, size_t buf_size, bool &result)
+ : m_tid(tid), m_buf(buf), m_buf_size(buf_size), m_result(result)
{ }
void Execute(ProcessMonitor *monitor);
@@ -585,13 +598,14 @@ public:
private:
lldb::tid_t m_tid;
void *m_buf;
+ size_t m_buf_size;
bool &m_result;
};
void
WriteFPROperation::Execute(ProcessMonitor *monitor)
{
- if (PTRACE(PTRACE_SETFPREGS, m_tid, NULL, m_buf) < 0)
+ if (PTRACE(PTRACE_SETFPREGS, m_tid, NULL, m_buf, m_buf_size) < 0)
m_result = false;
else
m_result = true;
@@ -622,7 +636,7 @@ ResumeOperation::Execute(ProcessMonitor *monitor)
if (m_signo != LLDB_INVALID_SIGNAL_NUMBER)
data = m_signo;
- if (PTRACE(PTRACE_CONT, m_tid, NULL, (void*)data))
+ if (PTRACE(PTRACE_CONT, m_tid, NULL, (void*)data, 0))
m_result = false;
else
m_result = true;
@@ -653,7 +667,7 @@ SingleStepOperation::Execute(ProcessMonitor *monitor)
if (m_signo != LLDB_INVALID_SIGNAL_NUMBER)
data = m_signo;
- if (PTRACE(PTRACE_SINGLESTEP, m_tid, NULL, (void*)data))
+ if (PTRACE(PTRACE_SINGLESTEP, m_tid, NULL, (void*)data, 0))
m_result = false;
else
m_result = true;
@@ -680,7 +694,7 @@ private:
void
SiginfoOperation::Execute(ProcessMonitor *monitor)
{
- if (PTRACE(PTRACE_GETSIGINFO, m_tid, NULL, m_info)) {
+ if (PTRACE(PTRACE_GETSIGINFO, m_tid, NULL, m_info, 0)) {
m_result = false;
m_err = errno;
}
@@ -708,7 +722,7 @@ private:
void
EventMessageOperation::Execute(ProcessMonitor *monitor)
{
- if (PTRACE(PTRACE_GETEVENTMSG, m_tid, NULL, m_message))
+ if (PTRACE(PTRACE_GETEVENTMSG, m_tid, NULL, m_message, 0))
m_result = false;
else
m_result = true;
@@ -733,7 +747,7 @@ KillOperation::Execute(ProcessMonitor *monitor)
{
lldb::pid_t pid = monitor->GetPID();
- if (PTRACE(PTRACE_KILL, pid, NULL, NULL))
+ if (PTRACE(PTRACE_KILL, pid, NULL, NULL, 0))
m_result = false;
else
m_result = true;
@@ -824,9 +838,9 @@ ProcessMonitor::ProcessMonitor(ProcessPOSIX *process,
lldb_private::Error &error)
: m_process(static_cast<ProcessLinux *>(process)),
m_operation_thread(LLDB_INVALID_HOST_THREAD),
+ m_monitor_thread(LLDB_INVALID_HOST_THREAD),
m_pid(LLDB_INVALID_PROCESS_ID),
m_terminal_fd(-1),
- m_monitor_thread(LLDB_INVALID_HOST_THREAD),
m_client_fd(-1),
m_server_fd(-1)
{
@@ -883,9 +897,10 @@ ProcessMonitor::ProcessMonitor(ProcessPOSIX *process,
lldb_private::Error &error)
: m_process(static_cast<ProcessLinux *>(process)),
m_operation_thread(LLDB_INVALID_HOST_THREAD),
+ m_monitor_thread(LLDB_INVALID_HOST_THREAD),
m_pid(LLDB_INVALID_PROCESS_ID),
m_terminal_fd(-1),
- m_monitor_thread(LLDB_INVALID_HOST_THREAD),
+
m_client_fd(-1),
m_server_fd(-1)
{
@@ -1023,7 +1038,7 @@ ProcessMonitor::Launch(LaunchArgs *args)
if (pid == 0)
{
// Trace this process.
- if (PTRACE(PTRACE_TRACEME, 0, NULL, NULL) < 0)
+ if (PTRACE(PTRACE_TRACEME, 0, NULL, NULL, 0) < 0)
exit(ePtraceFailed);
// Do not inherit setgid powers.
@@ -1108,7 +1123,7 @@ ProcessMonitor::Launch(LaunchArgs *args)
// Have the tracer trace threads which spawn in the inferior process.
ptrace_opts |= PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE;
- if (PTRACE(PTRACE_SETOPTIONS, pid, NULL, (void*)ptrace_opts) < 0)
+ if (PTRACE(PTRACE_SETOPTIONS, pid, NULL, (void*)ptrace_opts, 0) < 0)
{
args->m_error.SetErrorToErrno();
goto FINISH;
@@ -1197,7 +1212,7 @@ ProcessMonitor::Attach(AttachArgs *args)
}
// Attach to the requested process.
- if (PTRACE(PTRACE_ATTACH, pid, NULL, NULL) < 0)
+ if (PTRACE(PTRACE_ATTACH, pid, NULL, NULL, 0) < 0)
{
args->m_error.SetErrorToErrno();
goto FINISH;
@@ -1610,7 +1625,8 @@ ProcessMonitor::WriteMemory(lldb::addr_t vm_addr, const void *buf, size_t size,
}
bool
-ProcessMonitor::ReadRegisterValue(lldb::tid_t tid, unsigned offset, unsigned size, RegisterValue &value)
+ProcessMonitor::ReadRegisterValue(lldb::tid_t tid, unsigned offset,
+ unsigned size, RegisterValue &value)
{
bool result;
ReadRegOperation op(tid, offset, value, result);
@@ -1619,7 +1635,8 @@ ProcessMonitor::ReadRegisterValue(lldb::tid_t tid, unsigned offset, unsigned siz
}
bool
-ProcessMonitor::WriteRegisterValue(lldb::tid_t tid, unsigned offset, const RegisterValue &value)
+ProcessMonitor::WriteRegisterValue(lldb::tid_t tid, unsigned offset,
+ const RegisterValue &value)
{
bool result;
WriteRegOperation op(tid, offset, value, result);
@@ -1628,37 +1645,37 @@ ProcessMonitor::WriteRegisterValue(lldb::tid_t tid, unsigned offset, const Regis
}
bool
-ProcessMonitor::ReadGPR(lldb::tid_t tid, void *buf)
+ProcessMonitor::ReadGPR(lldb::tid_t tid, void *buf, size_t buf_size)
{
bool result;
- ReadGPROperation op(tid, buf, result);
+ ReadGPROperation op(tid, buf, buf_size, result);
DoOperation(&op);
return result;
}
bool
-ProcessMonitor::ReadFPR(lldb::tid_t tid, void *buf)
+ProcessMonitor::ReadFPR(lldb::tid_t tid, void *buf, size_t buf_size)
{
bool result;
- ReadFPROperation op(tid, buf, result);
+ ReadFPROperation op(tid, buf, buf_size, result);
DoOperation(&op);
return result;
}
bool
-ProcessMonitor::WriteGPR(lldb::tid_t tid, void *buf)
+ProcessMonitor::WriteGPR(lldb::tid_t tid, void *buf, size_t buf_size)
{
bool result;
- WriteGPROperation op(tid, buf, result);
+ WriteGPROperation op(tid, buf, buf_size, result);
DoOperation(&op);
return result;
}
bool
-ProcessMonitor::WriteFPR(lldb::tid_t tid, void *buf)
+ProcessMonitor::WriteFPR(lldb::tid_t tid, void *buf, size_t buf_size)
{
bool result;
- WriteFPROperation op(tid, buf, result);
+ WriteFPROperation op(tid, buf, buf_size, result);
DoOperation(&op);
return result;
}
diff --git a/lldb/source/Plugins/Process/Linux/ProcessMonitor.h b/lldb/source/Plugins/Process/Linux/ProcessMonitor.h
index 4fefae23035..aa014789d62 100644
--- a/lldb/source/Plugins/Process/Linux/ProcessMonitor.h
+++ b/lldb/source/Plugins/Process/Linux/ProcessMonitor.h
@@ -120,19 +120,19 @@ public:
/// Reads all general purpose registers into the specified buffer.
bool
- ReadGPR(lldb::tid_t tid, void *buf);
+ ReadGPR(lldb::tid_t tid, void *buf, size_t buf_size);
/// Reads all floating point registers into the specified buffer.
bool
- ReadFPR(lldb::tid_t tid, void *buf);
+ ReadFPR(lldb::tid_t tid, void *buf, size_t buf_size);
/// Writes all general purpose registers into the specified buffer.
bool
- WriteGPR(lldb::tid_t tid, void *buf);
+ WriteGPR(lldb::tid_t tid, void *buf, size_t buf_size);
/// Writes all floating point registers into the specified buffer.
bool
- WriteFPR(lldb::tid_t tid, void *buf);
+ WriteFPR(lldb::tid_t tid, void *buf, size_t buf_size);
/// Writes a siginfo_t structure corresponding to the given thread ID to the
/// memory region pointed to by @p siginfo.
@@ -169,10 +169,10 @@ private:
ProcessLinux *m_process;
lldb::thread_t m_operation_thread;
+ lldb::thread_t m_monitor_thread;
lldb::pid_t m_pid;
int m_terminal_fd;
- lldb::thread_t m_monitor_thread;
lldb_private::Mutex m_server_mutex;
int m_client_fd;
diff --git a/lldb/source/Plugins/Process/POSIX/RegisterContext_i386.cpp b/lldb/source/Plugins/Process/POSIX/RegisterContext_i386.cpp
index 979d6b41766..e1a155f3d54 100644
--- a/lldb/source/Plugins/Process/POSIX/RegisterContext_i386.cpp
+++ b/lldb/source/Plugins/Process/POSIX/RegisterContext_i386.cpp
@@ -535,7 +535,7 @@ RegisterContext_i386::ReadGPR()
bool result;
ProcessMonitor &monitor = GetMonitor();
- result = monitor.ReadGPR(m_thread.GetID(), &user.regs);
+ result = monitor.ReadGPR(m_thread.GetID(), &user.regs, sizeof(user.regs));
LogGPR("RegisterContext_i386::ReadGPR()");
return result;
}
@@ -544,5 +544,5 @@ bool
RegisterContext_i386::ReadFPR()
{
ProcessMonitor &monitor = GetMonitor();
- return monitor.ReadFPR(m_thread.GetID(), &user.i387);
+ return monitor.ReadFPR(m_thread.GetID(), &user.i387, sizeof(user.i387));
}
diff --git a/lldb/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp b/lldb/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp
index 1b14370926b..e8380e1183d 100644
--- a/lldb/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp
+++ b/lldb/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp
@@ -952,26 +952,26 @@ bool
RegisterContext_x86_64::ReadGPR()
{
ProcessMonitor &monitor = GetMonitor();
- return monitor.ReadGPR(m_thread.GetID(), &user.regs);
+ return monitor.ReadGPR(m_thread.GetID(), &user.regs, sizeof(user.regs));
}
bool
RegisterContext_x86_64::ReadFPR()
{
ProcessMonitor &monitor = GetMonitor();
- return monitor.ReadFPR(m_thread.GetID(), &user.i387);
+ return monitor.ReadFPR(m_thread.GetID(), &user.i387, sizeof(user.i387));
}
bool
RegisterContext_x86_64::WriteGPR()
{
ProcessMonitor &monitor = GetMonitor();
- return monitor.WriteGPR(m_thread.GetID(), &user.regs);
+ return monitor.WriteGPR(m_thread.GetID(), &user.regs, sizeof(user.regs));
}
bool
RegisterContext_x86_64::WriteFPR()
{
ProcessMonitor &monitor = GetMonitor();
- return monitor.WriteFPR(m_thread.GetID(), &user.i387);
+ return monitor.WriteFPR(m_thread.GetID(), &user.i387, sizeof(user.i387));
}
OpenPOWER on IntegriCloud