1 //===-- ProcessInfo.h -------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef liblldb_ProcessInfo_h_
11 #define liblldb_ProcessInfo_h_
12 
13 // LLDB headers
14 #include "lldb/Utility/ArchSpec.h"
15 #include "lldb/Utility/Args.h"
16 #include "lldb/Utility/Environment.h"
17 #include "lldb/Utility/FileSpec.h"
18 
19 namespace lldb_private {
20 //----------------------------------------------------------------------
21 // ProcessInfo
22 //
23 // A base class for information for a process. This can be used to fill
24 // out information for a process prior to launching it, or it can be used for
25 // an instance of a process and can be filled in with the existing values for
26 // that process.
27 //----------------------------------------------------------------------
28 class ProcessInfo {
29 public:
30   ProcessInfo();
31 
32   ProcessInfo(const char *name, const ArchSpec &arch, lldb::pid_t pid);
33 
34   void Clear();
35 
36   const char *GetName() const;
37 
38   size_t GetNameLength() const;
39 
GetExecutableFile()40   FileSpec &GetExecutableFile() { return m_executable; }
41 
42   void SetExecutableFile(const FileSpec &exe_file,
43                          bool add_exe_file_as_first_arg);
44 
GetExecutableFile()45   const FileSpec &GetExecutableFile() const { return m_executable; }
46 
GetUserID()47   uint32_t GetUserID() const { return m_uid; }
48 
GetGroupID()49   uint32_t GetGroupID() const { return m_gid; }
50 
UserIDIsValid()51   bool UserIDIsValid() const { return m_uid != UINT32_MAX; }
52 
GroupIDIsValid()53   bool GroupIDIsValid() const { return m_gid != UINT32_MAX; }
54 
SetUserID(uint32_t uid)55   void SetUserID(uint32_t uid) { m_uid = uid; }
56 
SetGroupID(uint32_t gid)57   void SetGroupID(uint32_t gid) { m_gid = gid; }
58 
GetArchitecture()59   ArchSpec &GetArchitecture() { return m_arch; }
60 
GetArchitecture()61   const ArchSpec &GetArchitecture() const { return m_arch; }
62 
SetArchitecture(const ArchSpec & arch)63   void SetArchitecture(const ArchSpec &arch) { m_arch = arch; }
64 
GetProcessID()65   lldb::pid_t GetProcessID() const { return m_pid; }
66 
SetProcessID(lldb::pid_t pid)67   void SetProcessID(lldb::pid_t pid) { m_pid = pid; }
68 
ProcessIDIsValid()69   bool ProcessIDIsValid() const { return m_pid != LLDB_INVALID_PROCESS_ID; }
70 
71   void Dump(Stream &s, Platform *platform) const;
72 
GetArguments()73   Args &GetArguments() { return m_arguments; }
74 
GetArguments()75   const Args &GetArguments() const { return m_arguments; }
76 
77   llvm::StringRef GetArg0() const;
78 
79   void SetArg0(llvm::StringRef arg);
80 
81   void SetArguments(const Args &args, bool first_arg_is_executable);
82 
83   void SetArguments(char const **argv, bool first_arg_is_executable);
84 
GetEnvironment()85   Environment &GetEnvironment() { return m_environment; }
GetEnvironment()86   const Environment &GetEnvironment() const { return m_environment; }
87 
88 protected:
89   FileSpec m_executable;
90   std::string m_arg0; // argv[0] if supported. If empty, then use m_executable.
91   // Not all process plug-ins support specifying an argv[0] that differs from
92   // the resolved platform executable (which is in m_executable)
93   Args m_arguments; // All program arguments except argv[0]
94   Environment m_environment;
95   uint32_t m_uid;
96   uint32_t m_gid;
97   ArchSpec m_arch;
98   lldb::pid_t m_pid;
99 };
100 }
101 
102 #endif // #ifndef liblldb_ProcessInfo_h_
103