summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2015-07-15 17:20:01 +0000
committerPavel Labath <labath@google.com>2015-07-15 17:20:01 +0000
commit827965c33c5aae9440c4744e0c65a43db3f18cd6 (patch)
treebfb66bffdae3477b9a622be42b5d67883f262120 /lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
parent2e668b2d11177e3f83147133ad4d6512a00f97aa (diff)
downloadbcm5719-llvm-827965c33c5aae9440c4744e0c65a43db3f18cd6.tar.gz
bcm5719-llvm-827965c33c5aae9440c4744e0c65a43db3f18cd6.zip
[NativeProcessLinux] Integrate MainLoop
Summary: This commit integrates MainLoop into NativeProcessLinux. By registering a SIGCHLD handler with the llgs main loop, we can get rid of the special monitor thread in NPL, which saves as a lot of thread ping-pong when responding to client requests (e.g. qThreadInfo processing time has been reduced by about 40%). It also makes the code simpler, IMHO. Reviewers: ovyalov, clayborg, tberghammer, chaoren Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D11150 llvm-svn: 242305
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp')
-rw-r--r--lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp69
1 files changed, 28 insertions, 41 deletions
diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
index 308ffe30505..6904418644c 100644
--- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
+++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp
@@ -715,29 +715,23 @@ Error
NativeRegisterContextLinux_arm64::ReadHardwareDebugInfo(unsigned int &watch_count,
unsigned int &break_count)
{
- NativeProcessProtocolSP process_sp (m_thread.GetProcess());
- if (!process_sp)
- return Error("NativeProcessProtocol is NULL");
- NativeProcessLinux *const process_p = reinterpret_cast<NativeProcessLinux*>(process_sp.get());
::pid_t tid = m_thread.GetID();
- return process_p->DoOperation([&] {
- int regset = NT_ARM_HW_WATCH;
- struct iovec ioVec;
- struct user_hwdebug_state dreg_state;
- Error error;
+ int regset = NT_ARM_HW_WATCH;
+ struct iovec ioVec;
+ struct user_hwdebug_state dreg_state;
+ Error error;
- ioVec.iov_base = &dreg_state;
- ioVec.iov_len = sizeof (dreg_state);
- error = NativeProcessLinux::PtraceWrapper(PTRACE_GETREGSET, tid, &regset, &ioVec, ioVec.iov_len);
- watch_count = dreg_state.dbg_info & 0xff;
+ ioVec.iov_base = &dreg_state;
+ ioVec.iov_len = sizeof (dreg_state);
+ error = NativeProcessLinux::PtraceWrapper(PTRACE_GETREGSET, tid, &regset, &ioVec, ioVec.iov_len);
+ watch_count = dreg_state.dbg_info & 0xff;
- regset = NT_ARM_HW_BREAK;
- error = NativeProcessLinux::PtraceWrapper(PTRACE_GETREGSET, tid, &regset, &ioVec, ioVec.iov_len);
- break_count = dreg_state.dbg_info & 0xff;
+ regset = NT_ARM_HW_BREAK;
+ error = NativeProcessLinux::PtraceWrapper(PTRACE_GETREGSET, tid, &regset, &ioVec, ioVec.iov_len);
+ break_count = dreg_state.dbg_info & 0xff;
- return error;
- });
+ return error;
}
Error
@@ -746,33 +740,26 @@ NativeRegisterContextLinux_arm64::WriteHardwareDebugRegs(lldb::addr_t *addr_buf,
int type,
int count)
{
- NativeProcessProtocolSP process_sp (m_thread.GetProcess());
- if (!process_sp)
- return Error("NativeProcessProtocol is NULL");
- NativeProcessLinux *const process_p = reinterpret_cast<NativeProcessLinux*>(process_sp.get());
-
- return process_p->DoOperation([&] {
- struct iovec ioVec;
- struct user_hwdebug_state dreg_state;
- Error error;
+ struct iovec ioVec;
+ struct user_hwdebug_state dreg_state;
+ Error error;
- memset (&dreg_state, 0, sizeof (dreg_state));
- ioVec.iov_base = &dreg_state;
- ioVec.iov_len = sizeof (dreg_state);
+ memset (&dreg_state, 0, sizeof (dreg_state));
+ ioVec.iov_base = &dreg_state;
+ ioVec.iov_len = sizeof (dreg_state);
- if (type == 0)
- type = NT_ARM_HW_WATCH;
- else
- type = NT_ARM_HW_BREAK;
+ if (type == 0)
+ type = NT_ARM_HW_WATCH;
+ else
+ type = NT_ARM_HW_BREAK;
- for (int i = 0; i < count; i++)
- {
- dreg_state.dbg_regs[i].addr = addr_buf[i];
- dreg_state.dbg_regs[i].ctrl = cntrl_buf[i];
- }
+ for (int i = 0; i < count; i++)
+ {
+ dreg_state.dbg_regs[i].addr = addr_buf[i];
+ dreg_state.dbg_regs[i].ctrl = cntrl_buf[i];
+ }
- return NativeProcessLinux::PtraceWrapper(PTRACE_SETREGSET, m_thread.GetID(), &type, &ioVec, ioVec.iov_len);
- });
+ return NativeProcessLinux::PtraceWrapper(PTRACE_SETREGSET, m_thread.GetID(), &type, &ioVec, ioVec.iov_len);
}
Error
OpenPOWER on IntegriCloud