opnsense-src/include/lldb/Target/ProcessLaunchInfo.h

252 lines
6.5 KiB
C++

//===-- ProcessLaunchInfo.h -------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef liblldb_ProcessLaunch_Info_h
#define liblldb_ProcessLaunch_Info_h
// C++ Headers
#include <string>
// LLDB Headers
#include "lldb/Core/Flags.h"
#include "lldb/Host/FileSpec.h"
#include "lldb/Host/Host.h"
#include "lldb/Target/FileAction.h"
#include "lldb/Target/ProcessInfo.h"
#include "lldb/Utility/PseudoTerminal.h"
namespace lldb_private
{
//----------------------------------------------------------------------
// ProcessLaunchInfo
//
// Describes any information that is required to launch a process.
//----------------------------------------------------------------------
class ProcessLaunchInfo : public ProcessInfo
{
public:
ProcessLaunchInfo ();
ProcessLaunchInfo(const FileSpec &stdin_file_spec,
const FileSpec &stdout_file_spec,
const FileSpec &stderr_file_spec,
const FileSpec &working_dir,
uint32_t launch_flags);
void
AppendFileAction (const FileAction &info)
{
m_file_actions.push_back(info);
}
bool
AppendCloseFileAction (int fd);
bool
AppendDuplicateFileAction (int fd, int dup_fd);
bool
AppendOpenFileAction(int fd, const FileSpec &file_spec,
bool read, bool write);
bool
AppendSuppressFileAction (int fd, bool read, bool write);
void
FinalizeFileActions (Target *target,
bool default_to_use_pty);
size_t
GetNumFileActions () const
{
return m_file_actions.size();
}
const FileAction *
GetFileActionAtIndex (size_t idx) const;
const FileAction *
GetFileActionForFD (int fd) const;
Flags &
GetFlags ()
{
return m_flags;
}
const Flags &
GetFlags () const
{
return m_flags;
}
const FileSpec &
GetWorkingDirectory() const;
void
SetWorkingDirectory(const FileSpec &working_dir);
const char *
GetProcessPluginName () const;
void
SetProcessPluginName (const char *plugin);
const FileSpec &
GetShell () const;
void
SetShell (const FileSpec &shell);
uint32_t
GetResumeCount () const
{
return m_resume_count;
}
void
SetResumeCount (uint32_t c)
{
m_resume_count = c;
}
bool
GetLaunchInSeparateProcessGroup() const
{
return m_flags.Test(lldb::eLaunchFlagLaunchInSeparateProcessGroup);
}
void
SetLaunchInSeparateProcessGroup (bool separate);
bool
GetShellExpandArguments () const
{
return m_flags.Test(lldb::eLaunchFlagShellExpandArguments);
}
void
SetShellExpandArguments (bool expand);
void
Clear ();
bool
ConvertArgumentsForLaunchingInShell (Error &error,
bool localhost,
bool will_debug,
bool first_arg_is_full_shell_command,
int32_t num_resumes);
void
SetMonitorProcessCallback (Host::MonitorChildProcessCallback callback,
void *baton,
bool monitor_signals);
Host::MonitorChildProcessCallback
GetMonitorProcessCallback() const
{
return m_monitor_callback;
}
void *
GetMonitorProcessBaton() const
{
return m_monitor_callback_baton;
}
bool
GetMonitorSignals() const
{
return m_monitor_signals;
}
// If the LaunchInfo has a monitor callback, then arrange to monitor the process.
// Return true if the LaunchInfo has taken care of monitoring the process, and false if the
// caller might want to monitor the process themselves.
bool
MonitorProcess () const;
lldb_utility::PseudoTerminal &
GetPTY ()
{
return *m_pty;
}
// Get and set the actual listener that will be used for the process events
lldb::ListenerSP
GetListener () const
{
return m_listener_sp;
}
void
SetListener (const lldb::ListenerSP &listener_sp)
{
m_listener_sp = listener_sp;
}
Listener &
GetListenerForProcess (Debugger &debugger);
lldb::ListenerSP
GetHijackListener () const
{
return m_hijack_listener_sp;
}
void
SetHijackListener (const lldb::ListenerSP &listener_sp)
{
m_hijack_listener_sp = listener_sp;
}
void
SetLaunchEventData (const char *data)
{
m_event_data.assign (data);
}
const char *
GetLaunchEventData () const
{
return m_event_data.c_str();
}
void
SetDetachOnError (bool enable);
bool
GetDetachOnError () const
{
return m_flags.Test(lldb::eLaunchFlagDetachOnError);
}
protected:
FileSpec m_working_dir;
std::string m_plugin_name;
FileSpec m_shell;
Flags m_flags; // Bitwise OR of bits from lldb::LaunchFlags
std::vector<FileAction> m_file_actions; // File actions for any other files
std::shared_ptr<lldb_utility::PseudoTerminal> m_pty;
uint32_t m_resume_count; // How many times do we resume after launching
Host::MonitorChildProcessCallback m_monitor_callback;
void *m_monitor_callback_baton;
bool m_monitor_signals;
std::string m_event_data; // A string passed to the plugin launch, having no meaning to the upper levels of lldb.
lldb::ListenerSP m_listener_sp;
lldb::ListenerSP m_hijack_listener_sp;
};
}
#endif // liblldb_ProcessLaunch_Info_h