diff options
Diffstat (limited to 'source/Host/common/MonitoringProcessLauncher.cpp')
| -rw-r--r-- | source/Host/common/MonitoringProcessLauncher.cpp | 118 | 
1 files changed, 55 insertions, 63 deletions
diff --git a/source/Host/common/MonitoringProcessLauncher.cpp b/source/Host/common/MonitoringProcessLauncher.cpp index 2845155987e3..ae98cc83379d 100644 --- a/source/Host/common/MonitoringProcessLauncher.cpp +++ b/source/Host/common/MonitoringProcessLauncher.cpp @@ -1,4 +1,4 @@ -//===-- ProcessLauncherWindows.cpp ------------------------------*- C++ -*-===// +//===-- MonitoringProcessLauncher.cpp ---------------------------*- C++ -*-===//  //  //                     The LLVM Compiler Infrastructure  // @@ -7,12 +7,12 @@  //  //===----------------------------------------------------------------------===// +#include "lldb/Host/MonitoringProcessLauncher.h"  #include "lldb/Core/Error.h"  #include "lldb/Core/Log.h"  #include "lldb/Core/Module.h"  #include "lldb/Core/ModuleSpec.h"  #include "lldb/Host/HostProcess.h" -#include "lldb/Host/MonitoringProcessLauncher.h"  #include "lldb/Target/Platform.h"  #include "lldb/Target/Process.h"  #include "lldb/Target/ProcessLaunchInfo.h" @@ -20,81 +20,73 @@  using namespace lldb;  using namespace lldb_private; -MonitoringProcessLauncher::MonitoringProcessLauncher(std::unique_ptr<ProcessLauncher> delegate_launcher) -    : m_delegate_launcher(std::move(delegate_launcher)) -{ -} +MonitoringProcessLauncher::MonitoringProcessLauncher( +    std::unique_ptr<ProcessLauncher> delegate_launcher) +    : m_delegate_launcher(std::move(delegate_launcher)) {}  HostProcess -MonitoringProcessLauncher::LaunchProcess(const ProcessLaunchInfo &launch_info, Error &error) -{ -    ProcessLaunchInfo resolved_info(launch_info); +MonitoringProcessLauncher::LaunchProcess(const ProcessLaunchInfo &launch_info, +                                         Error &error) { +  ProcessLaunchInfo resolved_info(launch_info); -    error.Clear(); -    char exe_path[PATH_MAX]; +  error.Clear(); +  char exe_path[PATH_MAX]; -    PlatformSP host_platform_sp(Platform::GetHostPlatform()); +  PlatformSP host_platform_sp(Platform::GetHostPlatform()); -    const ArchSpec &arch_spec = resolved_info.GetArchitecture(); +  const ArchSpec &arch_spec = resolved_info.GetArchitecture(); -    FileSpec exe_spec(resolved_info.GetExecutableFile()); +  FileSpec exe_spec(resolved_info.GetExecutableFile()); -    FileSpec::FileType file_type = exe_spec.GetFileType(); -    if (file_type != FileSpec::eFileTypeRegular) -    { -        ModuleSpec module_spec(exe_spec, arch_spec); -        lldb::ModuleSP exe_module_sp; -        error = host_platform_sp->ResolveExecutable(module_spec, exe_module_sp, NULL); +  FileSpec::FileType file_type = exe_spec.GetFileType(); +  if (file_type != FileSpec::eFileTypeRegular) { +    ModuleSpec module_spec(exe_spec, arch_spec); +    lldb::ModuleSP exe_module_sp; +    error = +        host_platform_sp->ResolveExecutable(module_spec, exe_module_sp, NULL); -        if (error.Fail()) -            return HostProcess(); +    if (error.Fail()) +      return HostProcess(); -        if (exe_module_sp) -            exe_spec = exe_module_sp->GetFileSpec(); -    } +    if (exe_module_sp) +      exe_spec = exe_module_sp->GetFileSpec(); +  } -    if (exe_spec.Exists()) -    { -        exe_spec.GetPath(exe_path, sizeof(exe_path)); -    } -    else -    { -        resolved_info.GetExecutableFile().GetPath(exe_path, sizeof(exe_path)); -        error.SetErrorStringWithFormat("executable doesn't exist: '%s'", exe_path); -        return HostProcess(); -    } - -    resolved_info.SetExecutableFile(exe_spec, false); -    assert(!resolved_info.GetFlags().Test(eLaunchFlagLaunchInTTY)); +  if (exe_spec.Exists()) { +    exe_spec.GetPath(exe_path, sizeof(exe_path)); +  } else { +    resolved_info.GetExecutableFile().GetPath(exe_path, sizeof(exe_path)); +    error.SetErrorStringWithFormat("executable doesn't exist: '%s'", exe_path); +    return HostProcess(); +  } -    HostProcess process = m_delegate_launcher->LaunchProcess(resolved_info, error); +  resolved_info.SetExecutableFile(exe_spec, false); +  assert(!resolved_info.GetFlags().Test(eLaunchFlagLaunchInTTY)); -    if (process.GetProcessId() != LLDB_INVALID_PROCESS_ID) -    { -        Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS)); +  HostProcess process = +      m_delegate_launcher->LaunchProcess(resolved_info, error); -        Host::MonitorChildProcessCallback callback = launch_info.GetMonitorProcessCallback(); +  if (process.GetProcessId() != LLDB_INVALID_PROCESS_ID) { +    Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS)); -        bool monitor_signals = false; -        if (callback) -        { -            // If the ProcessLaunchInfo specified a callback, use that. -            monitor_signals = launch_info.GetMonitorSignals(); -        } -        else -        { -            callback = Process::SetProcessExitStatus; -        } +    Host::MonitorChildProcessCallback callback = +        launch_info.GetMonitorProcessCallback(); -        process.StartMonitoring(callback, monitor_signals); -        if (log) -            log->PutCString("started monitoring child process."); +    bool monitor_signals = false; +    if (callback) { +      // If the ProcessLaunchInfo specified a callback, use that. +      monitor_signals = launch_info.GetMonitorSignals(); +    } else { +      callback = Process::SetProcessExitStatus;      } -    else -    { -        // Invalid process ID, something didn't go well -        if (error.Success()) -            error.SetErrorString("process launch failed for unknown reasons"); -    } -    return process; + +    process.StartMonitoring(callback, monitor_signals); +    if (log) +      log->PutCString("started monitoring child process."); +  } else { +    // Invalid process ID, something didn't go well +    if (error.Success()) +      error.SetErrorString("process launch failed for unknown reasons"); +  } +  return process;  }  | 
