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); | 
