blob: 0570cfc9865101b24d828f0492d23a68e56b2a23 [file] [log] [blame]
//===-- ProcessInfo.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_ProcessInfo_h_
#define liblldb_ProcessInfo_h_
// LLDB headers
#include "lldb/Core/ArchSpec.h"
#include "lldb/Host/FileSpec.h"
#include "lldb/Interpreter/Args.h"
namespace lldb_private
{
//----------------------------------------------------------------------
// ProcessInfo
//
// A base class for information for a process. This can be used to fill
// out information for a process prior to launching it, or it can be
// used for an instance of a process and can be filled in with the
// existing values for that process.
//----------------------------------------------------------------------
class ProcessInfo
{
public:
ProcessInfo ();
ProcessInfo (const char *name,
const ArchSpec &arch,
lldb::pid_t pid);
void
Clear ();
const char *
GetName() const;
size_t
GetNameLength() const;
FileSpec &
GetExecutableFile ()
{
return m_executable;
}
void
SetExecutableFile (const FileSpec &exe_file, bool add_exe_file_as_first_arg);
const FileSpec &
GetExecutableFile () const
{
return m_executable;
}
uint32_t
GetUserID() const
{
return m_uid;
}
uint32_t
GetGroupID() const
{
return m_gid;
}
bool
UserIDIsValid () const
{
return m_uid != UINT32_MAX;
}
bool
GroupIDIsValid () const
{
return m_gid != UINT32_MAX;
}
void
SetUserID (uint32_t uid)
{
m_uid = uid;
}
void
SetGroupID (uint32_t gid)
{
m_gid = gid;
}
ArchSpec &
GetArchitecture ()
{
return m_arch;
}
const ArchSpec &
GetArchitecture () const
{
return m_arch;
}
void
SetArchitecture (ArchSpec arch)
{
m_arch = arch;
}
lldb::pid_t
GetProcessID () const
{
return m_pid;
}
void
SetProcessID (lldb::pid_t pid)
{
m_pid = pid;
}
bool
ProcessIDIsValid() const
{
return m_pid != LLDB_INVALID_PROCESS_ID;
}
void
Dump (Stream &s, Platform *platform) const;
Args &
GetArguments ()
{
return m_arguments;
}
const Args &
GetArguments () const
{
return m_arguments;
}
const char *
GetArg0 () const;
void
SetArg0 (const char *arg);
void
SetArguments (const Args& args, bool first_arg_is_executable);
void
SetArguments (char const **argv, bool first_arg_is_executable);
Args &
GetEnvironmentEntries ()
{
return m_environment;
}
const Args &
GetEnvironmentEntries () const
{
return m_environment;
}
protected:
FileSpec m_executable;
std::string m_arg0; // argv[0] if supported. If empty, then use m_executable.
// Not all process plug-ins support specifying an argv[0]
// that differs from the resolved platform executable
// (which is in m_executable)
Args m_arguments; // All program arguments except argv[0]
Args m_environment;
uint32_t m_uid;
uint32_t m_gid;
ArchSpec m_arch;
lldb::pid_t m_pid;
};
}
#endif // #ifndef liblldb_ProcessInfo_h_