diff options
author | Pavel Labath <labath@google.com> | 2015-07-15 17:20:01 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2015-07-15 17:20:01 +0000 |
commit | 827965c33c5aae9440c4744e0c65a43db3f18cd6 (patch) | |
tree | bfb66bffdae3477b9a622be42b5d67883f262120 /lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_arm64.cpp | |
parent | 2e668b2d11177e3f83147133ad4d6512a00f97aa (diff) | |
download | bcm5719-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.cpp | 69 |
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, ®set, &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, ®set, &ioVec, ioVec.iov_len); + watch_count = dreg_state.dbg_info & 0xff; - regset = NT_ARM_HW_BREAK; - error = NativeProcessLinux::PtraceWrapper(PTRACE_GETREGSET, tid, ®set, &ioVec, ioVec.iov_len); - break_count = dreg_state.dbg_info & 0xff; + regset = NT_ARM_HW_BREAK; + error = NativeProcessLinux::PtraceWrapper(PTRACE_GETREGSET, tid, ®set, &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 |