1 //===-- SBLaunchInfo.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 LLDB_SBLaunchInfo_h_
11 #define LLDB_SBLaunchInfo_h_
12 
13 #include "lldb/API/SBDefines.h"
14 
15 namespace lldb_private {
16 class SBLaunchInfoImpl;
17 }
18 
19 namespace lldb {
20 
21 class SBPlatform;
22 class SBTarget;
23 
24 class LLDB_API SBLaunchInfo {
25 public:
26   SBLaunchInfo(const char **argv);
27 
28   ~SBLaunchInfo();
29 
30   lldb::pid_t GetProcessID();
31 
32   uint32_t GetUserID();
33 
34   uint32_t GetGroupID();
35 
36   bool UserIDIsValid();
37 
38   bool GroupIDIsValid();
39 
40   void SetUserID(uint32_t uid);
41 
42   void SetGroupID(uint32_t gid);
43 
44   SBFileSpec GetExecutableFile();
45 
46   //----------------------------------------------------------------------
47   /// Set the executable file that will be used to launch the process and
48   /// optionally set it as the first argument in the argument vector.
49   ///
50   /// This only needs to be specified if clients wish to carefully control
51   /// the exact path will be used to launch a binary. If you create a
52   /// target with a symlink, that symlink will get resolved in the target
53   /// and the resolved path will get used to launch the process. Calling
54   /// this function can help you still launch your process using the
55   /// path of your choice.
56   ///
57   /// If this function is not called prior to launching with
58   /// SBTarget::Launch(...), the target will use the resolved executable
59   /// path that was used to create the target.
60   ///
61   /// @param[in] exe_file
62   ///     The override path to use when launching the executable.
63   ///
64   /// @param[in] add_as_first_arg
65   ///     If true, then the path will be inserted into the argument vector
66   ///     prior to launching. Otherwise the argument vector will be left
67   ///     alone.
68   //----------------------------------------------------------------------
69   void SetExecutableFile(SBFileSpec exe_file, bool add_as_first_arg);
70 
71   //----------------------------------------------------------------------
72   /// Get the listener that will be used to receive process events.
73   ///
74   /// If no listener has been set via a call to
75   /// SBLaunchInfo::SetListener(), then an invalid SBListener will be
76   /// returned (SBListener::IsValid() will return false). If a listener
77   /// has been set, then the valid listener object will be returned.
78   //----------------------------------------------------------------------
79   SBListener GetListener();
80 
81   //----------------------------------------------------------------------
82   /// Set the listener that will be used to receive process events.
83   ///
84   /// By default the SBDebugger, which has a listener, that the SBTarget
85   /// belongs to will listen for the process events. Calling this function
86   /// allows a different listener to be used to listen for process events.
87   //----------------------------------------------------------------------
88   void SetListener(SBListener &listener);
89 
90   uint32_t GetNumArguments();
91 
92   const char *GetArgumentAtIndex(uint32_t idx);
93 
94   void SetArguments(const char **argv, bool append);
95 
96   uint32_t GetNumEnvironmentEntries();
97 
98   const char *GetEnvironmentEntryAtIndex(uint32_t idx);
99 
100   void SetEnvironmentEntries(const char **envp, bool append);
101 
102   void Clear();
103 
104   const char *GetWorkingDirectory() const;
105 
106   void SetWorkingDirectory(const char *working_dir);
107 
108   uint32_t GetLaunchFlags();
109 
110   void SetLaunchFlags(uint32_t flags);
111 
112   const char *GetProcessPluginName();
113 
114   void SetProcessPluginName(const char *plugin_name);
115 
116   const char *GetShell();
117 
118   void SetShell(const char *path);
119 
120   bool GetShellExpandArguments();
121 
122   void SetShellExpandArguments(bool expand);
123 
124   uint32_t GetResumeCount();
125 
126   void SetResumeCount(uint32_t c);
127 
128   bool AddCloseFileAction(int fd);
129 
130   bool AddDuplicateFileAction(int fd, int dup_fd);
131 
132   bool AddOpenFileAction(int fd, const char *path, bool read, bool write);
133 
134   bool AddSuppressFileAction(int fd, bool read, bool write);
135 
136   void SetLaunchEventData(const char *data);
137 
138   const char *GetLaunchEventData() const;
139 
140   bool GetDetachOnError() const;
141 
142   void SetDetachOnError(bool enable);
143 
144 protected:
145   friend class SBPlatform;
146   friend class SBTarget;
147 
148   const lldb_private::ProcessLaunchInfo &ref() const;
149   void set_ref(const lldb_private::ProcessLaunchInfo &info);
150 
151   std::shared_ptr<lldb_private::SBLaunchInfoImpl> m_opaque_sp;
152 };
153 
154 } // namespace lldb
155 
156 #endif // LLDB_SBLaunchInfo_h_
157