diff options
Diffstat (limited to 'source/Plugins/Process/FreeBSD')
-rw-r--r-- | source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp | 27 | ||||
-rw-r--r-- | source/Plugins/Process/FreeBSD/ProcessMonitor.cpp | 17 | ||||
-rw-r--r-- | source/Plugins/Process/FreeBSD/ProcessMonitor.h | 7 |
3 files changed, 31 insertions, 20 deletions
diff --git a/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp b/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp index d13b9a485858..4b488444de1e 100644 --- a/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp +++ b/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp @@ -22,12 +22,23 @@ #include "ProcessFreeBSD.h" #include "ProcessPOSIXLog.h" #include "Plugins/Process/Utility/InferiorCallPOSIX.h" +#include "Plugins/Process/Utility/FreeBSDSignals.h" #include "ProcessMonitor.h" #include "FreeBSDThread.h" using namespace lldb; using namespace lldb_private; +namespace +{ + UnixSignalsSP& + GetFreeBSDSignals () + { + static UnixSignalsSP s_freebsd_signals_sp (new FreeBSDSignals ()); + return s_freebsd_signals_sp; + } +} + //------------------------------------------------------------------------------ // Static functions. @@ -113,7 +124,8 @@ ProcessFreeBSD::EnablePluginLogging(Stream *strm, Args &command) // Constructors and destructors. ProcessFreeBSD::ProcessFreeBSD(Target& target, Listener &listener) - : ProcessPOSIX(target, listener) + : ProcessPOSIX(target, listener, GetFreeBSDSignals ()), + m_resume_signo(0) { } @@ -132,8 +144,6 @@ ProcessFreeBSD::DoDetach(bool keep_stopped) return error; } - DisableAllBreakpointSites(); - error = m_monitor->Detach(GetID()); if (error.Success()) @@ -147,9 +157,6 @@ ProcessFreeBSD::DoResume() { Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS)); - // FreeBSD's ptrace() uses 0 to indicate "no signal is to be sent." - int resume_signal = 0; - SetPrivateState(eStateRunning); Mutex::Locker lock(m_thread_list.GetMutex()); @@ -172,11 +179,11 @@ ProcessFreeBSD::DoResume() } if (log) - log->Printf("process %lu resuming (%s)", GetID(), do_step ? "step" : "continue"); + log->Printf("process %" PRIu64 " resuming (%s)", GetID(), do_step ? "step" : "continue"); if (do_step) - m_monitor->SingleStep(GetID(), resume_signal); + m_monitor->SingleStep(GetID(), m_resume_signo); else - m_monitor->Resume(GetID(), resume_signal); + m_monitor->Resume(GetID(), m_resume_signo); return Error(); } @@ -228,6 +235,7 @@ ProcessFreeBSD::UpdateThreadList(ThreadList &old_thread_list, ThreadList &new_th Error ProcessFreeBSD::WillResume() { + m_resume_signo = 0; m_suspend_tids.clear(); m_run_tids.clear(); m_step_tids.clear(); @@ -274,4 +282,3 @@ ProcessFreeBSD::SendMessage(const ProcessMessage &message) m_message_queue.push(message); } - diff --git a/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp b/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp index 3d793d0c1c20..63439b155111 100644 --- a/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp +++ b/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp @@ -702,7 +702,7 @@ EventMessageOperation::Execute(ProcessMonitor *monitor) //------------------------------------------------------------------------------ /// @class KillOperation -/// @brief Implements ProcessMonitor::BringProcessIntoLimbo. +/// @brief Implements ProcessMonitor::Kill. class KillOperation : public Operation { public: @@ -727,7 +727,7 @@ KillOperation::Execute(ProcessMonitor *monitor) //------------------------------------------------------------------------------ /// @class DetachOperation -/// @brief Implements ProcessMonitor::BringProcessIntoLimbo. +/// @brief Implements ProcessMonitor::Detach. class DetachOperation : public Operation { public: @@ -807,6 +807,7 @@ ProcessMonitor::ProcessMonitor(ProcessPOSIX *process, const char *stdout_path, const char *stderr_path, const char *working_dir, + const lldb_private::ProcessLaunchInfo & /* launch_info */, lldb_private::Error &error) : m_process(static_cast<ProcessFreeBSD *>(process)), m_operation_thread(LLDB_INVALID_HOST_THREAD), @@ -1628,9 +1629,13 @@ ProcessMonitor::Resume(lldb::tid_t unused, uint32_t signo) bool result; Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS)); - if (log) - log->Printf ("ProcessMonitor::%s() resuming pid %" PRIu64 " with signal %s", __FUNCTION__, GetPID(), - m_process->GetUnixSignals().GetSignalAsCString (signo)); + if (log) { + const char *signame = m_process->GetUnixSignals().GetSignalAsCString (signo); + if (signame == nullptr) + signame = "<none>"; + log->Printf("ProcessMonitor::%s() resuming pid %" PRIu64 " with signal %s", + __FUNCTION__, GetPID(), signame); + } ResumeOperation op(signo, result); DoOperation(&op); if (log) @@ -1648,7 +1653,7 @@ ProcessMonitor::SingleStep(lldb::tid_t unused, uint32_t signo) } bool -ProcessMonitor::BringProcessIntoLimbo() +ProcessMonitor::Kill() { bool result; KillOperation op(result); diff --git a/source/Plugins/Process/FreeBSD/ProcessMonitor.h b/source/Plugins/Process/FreeBSD/ProcessMonitor.h index 4c8198fb2e4c..314743b00754 100644 --- a/source/Plugins/Process/FreeBSD/ProcessMonitor.h +++ b/source/Plugins/Process/FreeBSD/ProcessMonitor.h @@ -55,6 +55,7 @@ public: const char *stdout_path, const char *stderr_path, const char *working_dir, + const lldb_private::ProcessLaunchInfo &launch_info, lldb_private::Error &error); ProcessMonitor(ProcessPOSIX *process, @@ -194,11 +195,9 @@ public: bool SingleStep(lldb::tid_t unused, uint32_t signo); - /// Sends the inferior process a PTRACE_KILL signal. The inferior will - /// still exists and can be interrogated. Once resumed it will exit as - /// though it received a SIGKILL. + /// Terminate the traced process. bool - BringProcessIntoLimbo(); + Kill(); lldb_private::Error Detach(lldb::tid_t tid); |