]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/API/SBLaunchInfo.cpp
Merge clang 7.0.1 and several follow-up changes
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / API / SBLaunchInfo.cpp
1 //===-- SBLaunchInfo.cpp ----------------------------------------*- 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 #include "lldb/API/SBLaunchInfo.h"
11
12 #include "lldb/API/SBFileSpec.h"
13 #include "lldb/API/SBListener.h"
14 #include "lldb/Target/ProcessLaunchInfo.h"
15
16 using namespace lldb;
17 using namespace lldb_private;
18
19 class lldb_private::SBLaunchInfoImpl : public ProcessLaunchInfo {
20 public:
21   SBLaunchInfoImpl()
22       : ProcessLaunchInfo(), m_envp(GetEnvironment().getEnvp()) {}
23
24   const char *const *GetEnvp() const { return m_envp; }
25   void RegenerateEnvp() { m_envp = GetEnvironment().getEnvp(); }
26
27   SBLaunchInfoImpl &operator=(const ProcessLaunchInfo &rhs) {
28     ProcessLaunchInfo::operator=(rhs);
29     RegenerateEnvp();
30     return *this;
31   }
32
33 private:
34   Environment::Envp m_envp;
35 };
36
37 SBLaunchInfo::SBLaunchInfo(const char **argv)
38     : m_opaque_sp(new SBLaunchInfoImpl()) {
39   m_opaque_sp->GetFlags().Reset(eLaunchFlagDebug | eLaunchFlagDisableASLR);
40   if (argv && argv[0])
41     m_opaque_sp->GetArguments().SetArguments(argv);
42 }
43
44 SBLaunchInfo::~SBLaunchInfo() {}
45
46 const lldb_private::ProcessLaunchInfo &SBLaunchInfo::ref() const {
47   return *m_opaque_sp;
48 }
49
50 void SBLaunchInfo::set_ref(const ProcessLaunchInfo &info) {
51   *m_opaque_sp = info;
52 }
53
54 lldb::pid_t SBLaunchInfo::GetProcessID() { return m_opaque_sp->GetProcessID(); }
55
56 uint32_t SBLaunchInfo::GetUserID() { return m_opaque_sp->GetUserID(); }
57
58 uint32_t SBLaunchInfo::GetGroupID() { return m_opaque_sp->GetGroupID(); }
59
60 bool SBLaunchInfo::UserIDIsValid() { return m_opaque_sp->UserIDIsValid(); }
61
62 bool SBLaunchInfo::GroupIDIsValid() { return m_opaque_sp->GroupIDIsValid(); }
63
64 void SBLaunchInfo::SetUserID(uint32_t uid) { m_opaque_sp->SetUserID(uid); }
65
66 void SBLaunchInfo::SetGroupID(uint32_t gid) { m_opaque_sp->SetGroupID(gid); }
67
68 SBFileSpec SBLaunchInfo::GetExecutableFile() {
69   return SBFileSpec(m_opaque_sp->GetExecutableFile());
70 }
71
72 void SBLaunchInfo::SetExecutableFile(SBFileSpec exe_file,
73                                      bool add_as_first_arg) {
74   m_opaque_sp->SetExecutableFile(exe_file.ref(), add_as_first_arg);
75 }
76
77 SBListener SBLaunchInfo::GetListener() {
78   return SBListener(m_opaque_sp->GetListener());
79 }
80
81 void SBLaunchInfo::SetListener(SBListener &listener) {
82   m_opaque_sp->SetListener(listener.GetSP());
83 }
84
85 uint32_t SBLaunchInfo::GetNumArguments() {
86   return m_opaque_sp->GetArguments().GetArgumentCount();
87 }
88
89 const char *SBLaunchInfo::GetArgumentAtIndex(uint32_t idx) {
90   return m_opaque_sp->GetArguments().GetArgumentAtIndex(idx);
91 }
92
93 void SBLaunchInfo::SetArguments(const char **argv, bool append) {
94   if (append) {
95     if (argv)
96       m_opaque_sp->GetArguments().AppendArguments(argv);
97   } else {
98     if (argv)
99       m_opaque_sp->GetArguments().SetArguments(argv);
100     else
101       m_opaque_sp->GetArguments().Clear();
102   }
103 }
104
105 uint32_t SBLaunchInfo::GetNumEnvironmentEntries() {
106   return m_opaque_sp->GetEnvironment().size();
107 }
108
109 const char *SBLaunchInfo::GetEnvironmentEntryAtIndex(uint32_t idx) {
110   if (idx > GetNumEnvironmentEntries())
111     return nullptr;
112   return m_opaque_sp->GetEnvp()[idx];
113 }
114
115 void SBLaunchInfo::SetEnvironmentEntries(const char **envp, bool append) {
116   Environment env(envp);
117   if (append)
118     m_opaque_sp->GetEnvironment().insert(env.begin(), env.end());
119   else
120     m_opaque_sp->GetEnvironment() = env;
121   m_opaque_sp->RegenerateEnvp();
122 }
123
124 void SBLaunchInfo::Clear() { m_opaque_sp->Clear(); }
125
126 const char *SBLaunchInfo::GetWorkingDirectory() const {
127   return m_opaque_sp->GetWorkingDirectory().GetCString();
128 }
129
130 void SBLaunchInfo::SetWorkingDirectory(const char *working_dir) {
131   m_opaque_sp->SetWorkingDirectory(FileSpec{working_dir, false});
132 }
133
134 uint32_t SBLaunchInfo::GetLaunchFlags() {
135   return m_opaque_sp->GetFlags().Get();
136 }
137
138 void SBLaunchInfo::SetLaunchFlags(uint32_t flags) {
139   m_opaque_sp->GetFlags().Reset(flags);
140 }
141
142 const char *SBLaunchInfo::GetProcessPluginName() {
143   return m_opaque_sp->GetProcessPluginName();
144 }
145
146 void SBLaunchInfo::SetProcessPluginName(const char *plugin_name) {
147   return m_opaque_sp->SetProcessPluginName(plugin_name);
148 }
149
150 const char *SBLaunchInfo::GetShell() {
151   // Constify this string so that it is saved in the string pool.  Otherwise it
152   // would be freed when this function goes out of scope.
153   ConstString shell(m_opaque_sp->GetShell().GetPath().c_str());
154   return shell.AsCString();
155 }
156
157 void SBLaunchInfo::SetShell(const char *path) {
158   m_opaque_sp->SetShell(FileSpec(path, false));
159 }
160
161 bool SBLaunchInfo::GetShellExpandArguments() {
162   return m_opaque_sp->GetShellExpandArguments();
163 }
164
165 void SBLaunchInfo::SetShellExpandArguments(bool expand) {
166   m_opaque_sp->SetShellExpandArguments(expand);
167 }
168
169 uint32_t SBLaunchInfo::GetResumeCount() {
170   return m_opaque_sp->GetResumeCount();
171 }
172
173 void SBLaunchInfo::SetResumeCount(uint32_t c) {
174   m_opaque_sp->SetResumeCount(c);
175 }
176
177 bool SBLaunchInfo::AddCloseFileAction(int fd) {
178   return m_opaque_sp->AppendCloseFileAction(fd);
179 }
180
181 bool SBLaunchInfo::AddDuplicateFileAction(int fd, int dup_fd) {
182   return m_opaque_sp->AppendDuplicateFileAction(fd, dup_fd);
183 }
184
185 bool SBLaunchInfo::AddOpenFileAction(int fd, const char *path, bool read,
186                                      bool write) {
187   return m_opaque_sp->AppendOpenFileAction(fd, FileSpec{path, false}, read,
188                                            write);
189 }
190
191 bool SBLaunchInfo::AddSuppressFileAction(int fd, bool read, bool write) {
192   return m_opaque_sp->AppendSuppressFileAction(fd, read, write);
193 }
194
195 void SBLaunchInfo::SetLaunchEventData(const char *data) {
196   m_opaque_sp->SetLaunchEventData(data);
197 }
198
199 const char *SBLaunchInfo::GetLaunchEventData() const {
200   return m_opaque_sp->GetLaunchEventData();
201 }
202
203 void SBLaunchInfo::SetDetachOnError(bool enable) {
204   m_opaque_sp->SetDetachOnError(enable);
205 }
206
207 bool SBLaunchInfo::GetDetachOnError() const {
208   return m_opaque_sp->GetDetachOnError();
209 }