180814287SRaphael Isemann //===-- SBPlatform.cpp ----------------------------------------------------===//
2fbb76349SGreg Clayton //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6fbb76349SGreg Clayton //
7fbb76349SGreg Clayton //===----------------------------------------------------------------------===//
8fbb76349SGreg Clayton 
9fbb76349SGreg Clayton #include "lldb/API/SBPlatform.h"
10baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
11*ca69be21SWalter Erquinigo #include "lldb/API/SBEnvironment.h"
12fbb76349SGreg Clayton #include "lldb/API/SBError.h"
13fbb76349SGreg Clayton #include "lldb/API/SBFileSpec.h"
141ef7b2c8SOleksiy Vyalov #include "lldb/API/SBLaunchInfo.h"
15*ca69be21SWalter Erquinigo #include "lldb/API/SBPlatform.h"
1698d0a4b3SChaoren Lin #include "lldb/API/SBUnixSignals.h"
17fbb76349SGreg Clayton #include "lldb/Host/File.h"
18fbb76349SGreg Clayton #include "lldb/Target/Platform.h"
19b9c1b51eSKate Stone #include "lldb/Target/Target.h"
205f19b907SPavel Labath #include "lldb/Utility/ArchSpec.h"
21145d95c9SPavel Labath #include "lldb/Utility/Args.h"
2297206d57SZachary Turner #include "lldb/Utility/Status.h"
23fbb76349SGreg Clayton 
247d86ee5aSZachary Turner #include "llvm/Support/FileSystem.h"
257d86ee5aSZachary Turner 
261ef7b2c8SOleksiy Vyalov #include <functional>
271ef7b2c8SOleksiy Vyalov 
28fbb76349SGreg Clayton using namespace lldb;
29fbb76349SGreg Clayton using namespace lldb_private;
30fbb76349SGreg Clayton 
31fbb76349SGreg Clayton // PlatformConnectOptions
32fbb76349SGreg Clayton struct PlatformConnectOptions {
33248a1305SKonrad Kleine   PlatformConnectOptions(const char *url = nullptr)
34b9c1b51eSKate Stone       : m_url(), m_rsync_options(), m_rsync_remote_path_prefix(),
35b9c1b51eSKate Stone         m_rsync_enabled(false), m_rsync_omit_hostname_from_remote_path(false),
36b9c1b51eSKate Stone         m_local_cache_directory() {
37fbb76349SGreg Clayton     if (url && url[0])
38fbb76349SGreg Clayton       m_url = url;
39fbb76349SGreg Clayton   }
40fbb76349SGreg Clayton 
41866b7a65SJonas Devlieghere   ~PlatformConnectOptions() = default;
42fbb76349SGreg Clayton 
43fbb76349SGreg Clayton   std::string m_url;
44fbb76349SGreg Clayton   std::string m_rsync_options;
45fbb76349SGreg Clayton   std::string m_rsync_remote_path_prefix;
46fbb76349SGreg Clayton   bool m_rsync_enabled;
47fbb76349SGreg Clayton   bool m_rsync_omit_hostname_from_remote_path;
48fbb76349SGreg Clayton   ConstString m_local_cache_directory;
49fbb76349SGreg Clayton };
50fbb76349SGreg Clayton 
51fbb76349SGreg Clayton // PlatformShellCommand
52fbb76349SGreg Clayton struct PlatformShellCommand {
53248a1305SKonrad Kleine   PlatformShellCommand(const char *shell_command = nullptr)
5419dd1a0eSPavel Labath       : m_command(), m_working_dir(), m_status(0), m_signo(0) {
55fbb76349SGreg Clayton     if (shell_command && shell_command[0])
56fbb76349SGreg Clayton       m_command = shell_command;
57fbb76349SGreg Clayton   }
58fbb76349SGreg Clayton 
59866b7a65SJonas Devlieghere   ~PlatformShellCommand() = default;
60fbb76349SGreg Clayton 
61fbb76349SGreg Clayton   std::string m_command;
62fbb76349SGreg Clayton   std::string m_working_dir;
63fbb76349SGreg Clayton   std::string m_output;
64fbb76349SGreg Clayton   int m_status;
65fbb76349SGreg Clayton   int m_signo;
6619dd1a0eSPavel Labath   Timeout<std::ratio<1>> m_timeout = llvm::None;
67fbb76349SGreg Clayton };
68fbb76349SGreg Clayton // SBPlatformConnectOptions
69b9c1b51eSKate Stone SBPlatformConnectOptions::SBPlatformConnectOptions(const char *url)
70baf5664fSJonas Devlieghere     : m_opaque_ptr(new PlatformConnectOptions(url)) {
71baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatformConnectOptions, (const char *), url);
72baf5664fSJonas Devlieghere }
73fbb76349SGreg Clayton 
74b9c1b51eSKate Stone SBPlatformConnectOptions::SBPlatformConnectOptions(
75b9c1b51eSKate Stone     const SBPlatformConnectOptions &rhs)
76b9c1b51eSKate Stone     : m_opaque_ptr(new PlatformConnectOptions()) {
77baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatformConnectOptions,
78baf5664fSJonas Devlieghere                           (const lldb::SBPlatformConnectOptions &), rhs);
79baf5664fSJonas Devlieghere 
80fbb76349SGreg Clayton   *m_opaque_ptr = *rhs.m_opaque_ptr;
81fbb76349SGreg Clayton }
82fbb76349SGreg Clayton 
83b9c1b51eSKate Stone SBPlatformConnectOptions::~SBPlatformConnectOptions() { delete m_opaque_ptr; }
84fbb76349SGreg Clayton 
85ede5cd9aSJonas Devlieghere SBPlatformConnectOptions &SBPlatformConnectOptions::
86ede5cd9aSJonas Devlieghere operator=(const SBPlatformConnectOptions &rhs) {
87baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
88ede5cd9aSJonas Devlieghere       SBPlatformConnectOptions &,
89baf5664fSJonas Devlieghere       SBPlatformConnectOptions, operator=,(
90baf5664fSJonas Devlieghere                                     const lldb::SBPlatformConnectOptions &),
91baf5664fSJonas Devlieghere       rhs);
92baf5664fSJonas Devlieghere 
93fbb76349SGreg Clayton   *m_opaque_ptr = *rhs.m_opaque_ptr;
94ede5cd9aSJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
95fbb76349SGreg Clayton }
96fbb76349SGreg Clayton 
97b9c1b51eSKate Stone const char *SBPlatformConnectOptions::GetURL() {
98baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformConnectOptions, GetURL);
99baf5664fSJonas Devlieghere 
100fbb76349SGreg Clayton   if (m_opaque_ptr->m_url.empty())
101248a1305SKonrad Kleine     return nullptr;
102fbb76349SGreg Clayton   return m_opaque_ptr->m_url.c_str();
103fbb76349SGreg Clayton }
104fbb76349SGreg Clayton 
105b9c1b51eSKate Stone void SBPlatformConnectOptions::SetURL(const char *url) {
106baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformConnectOptions, SetURL, (const char *),
107baf5664fSJonas Devlieghere                      url);
108baf5664fSJonas Devlieghere 
109fbb76349SGreg Clayton   if (url && url[0])
110fbb76349SGreg Clayton     m_opaque_ptr->m_url = url;
111fbb76349SGreg Clayton   else
112fbb76349SGreg Clayton     m_opaque_ptr->m_url.clear();
113fbb76349SGreg Clayton }
114fbb76349SGreg Clayton 
115b9c1b51eSKate Stone bool SBPlatformConnectOptions::GetRsyncEnabled() {
116baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBPlatformConnectOptions, GetRsyncEnabled);
117baf5664fSJonas Devlieghere 
118fbb76349SGreg Clayton   return m_opaque_ptr->m_rsync_enabled;
119fbb76349SGreg Clayton }
120fbb76349SGreg Clayton 
121b9c1b51eSKate Stone void SBPlatformConnectOptions::EnableRsync(
122b9c1b51eSKate Stone     const char *options, const char *remote_path_prefix,
123b9c1b51eSKate Stone     bool omit_hostname_from_remote_path) {
124baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformConnectOptions, EnableRsync,
125baf5664fSJonas Devlieghere                      (const char *, const char *, bool), options,
126baf5664fSJonas Devlieghere                      remote_path_prefix, omit_hostname_from_remote_path);
127baf5664fSJonas Devlieghere 
128fbb76349SGreg Clayton   m_opaque_ptr->m_rsync_enabled = true;
129b9c1b51eSKate Stone   m_opaque_ptr->m_rsync_omit_hostname_from_remote_path =
130b9c1b51eSKate Stone       omit_hostname_from_remote_path;
131fbb76349SGreg Clayton   if (remote_path_prefix && remote_path_prefix[0])
132fbb76349SGreg Clayton     m_opaque_ptr->m_rsync_remote_path_prefix = remote_path_prefix;
133fbb76349SGreg Clayton   else
134fbb76349SGreg Clayton     m_opaque_ptr->m_rsync_remote_path_prefix.clear();
135fbb76349SGreg Clayton 
136fbb76349SGreg Clayton   if (options && options[0])
137fbb76349SGreg Clayton     m_opaque_ptr->m_rsync_options = options;
138fbb76349SGreg Clayton   else
139fbb76349SGreg Clayton     m_opaque_ptr->m_rsync_options.clear();
140fbb76349SGreg Clayton }
141fbb76349SGreg Clayton 
142b9c1b51eSKate Stone void SBPlatformConnectOptions::DisableRsync() {
143baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatformConnectOptions, DisableRsync);
144baf5664fSJonas Devlieghere 
145fbb76349SGreg Clayton   m_opaque_ptr->m_rsync_enabled = false;
146fbb76349SGreg Clayton }
147fbb76349SGreg Clayton 
148b9c1b51eSKate Stone const char *SBPlatformConnectOptions::GetLocalCacheDirectory() {
149baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformConnectOptions,
150baf5664fSJonas Devlieghere                              GetLocalCacheDirectory);
151baf5664fSJonas Devlieghere 
152fbb76349SGreg Clayton   return m_opaque_ptr->m_local_cache_directory.GetCString();
153fbb76349SGreg Clayton }
154fbb76349SGreg Clayton 
155b9c1b51eSKate Stone void SBPlatformConnectOptions::SetLocalCacheDirectory(const char *path) {
156baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformConnectOptions, SetLocalCacheDirectory,
157baf5664fSJonas Devlieghere                      (const char *), path);
158baf5664fSJonas Devlieghere 
159fbb76349SGreg Clayton   if (path && path[0])
160fbb76349SGreg Clayton     m_opaque_ptr->m_local_cache_directory.SetCString(path);
161fbb76349SGreg Clayton   else
162fbb76349SGreg Clayton     m_opaque_ptr->m_local_cache_directory = ConstString();
163fbb76349SGreg Clayton }
164fbb76349SGreg Clayton 
165fbb76349SGreg Clayton // SBPlatformShellCommand
166b9c1b51eSKate Stone SBPlatformShellCommand::SBPlatformShellCommand(const char *shell_command)
167baf5664fSJonas Devlieghere     : m_opaque_ptr(new PlatformShellCommand(shell_command)) {
168baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatformShellCommand, (const char *),
169baf5664fSJonas Devlieghere                           shell_command);
170baf5664fSJonas Devlieghere }
171fbb76349SGreg Clayton 
172b9c1b51eSKate Stone SBPlatformShellCommand::SBPlatformShellCommand(
173b9c1b51eSKate Stone     const SBPlatformShellCommand &rhs)
174b9c1b51eSKate Stone     : m_opaque_ptr(new PlatformShellCommand()) {
175baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatformShellCommand,
176baf5664fSJonas Devlieghere                           (const lldb::SBPlatformShellCommand &), rhs);
177baf5664fSJonas Devlieghere 
178fbb76349SGreg Clayton   *m_opaque_ptr = *rhs.m_opaque_ptr;
179fbb76349SGreg Clayton }
180fbb76349SGreg Clayton 
181ede5cd9aSJonas Devlieghere SBPlatformShellCommand &SBPlatformShellCommand::
182ede5cd9aSJonas Devlieghere operator=(const SBPlatformShellCommand &rhs) {
183ede5cd9aSJonas Devlieghere 
184ede5cd9aSJonas Devlieghere   LLDB_RECORD_METHOD(
185ede5cd9aSJonas Devlieghere       SBPlatformShellCommand &,
186ede5cd9aSJonas Devlieghere       SBPlatformShellCommand, operator=,(const lldb::SBPlatformShellCommand &),
187ede5cd9aSJonas Devlieghere       rhs);
188ede5cd9aSJonas Devlieghere 
189ede5cd9aSJonas Devlieghere   *m_opaque_ptr = *rhs.m_opaque_ptr;
190ede5cd9aSJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
191ede5cd9aSJonas Devlieghere }
192ede5cd9aSJonas Devlieghere 
193b9c1b51eSKate Stone SBPlatformShellCommand::~SBPlatformShellCommand() { delete m_opaque_ptr; }
194fbb76349SGreg Clayton 
195b9c1b51eSKate Stone void SBPlatformShellCommand::Clear() {
196baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatformShellCommand, Clear);
197baf5664fSJonas Devlieghere 
1983a29f8b9SPavel Labath   m_opaque_ptr->m_output = std::string();
199fbb76349SGreg Clayton   m_opaque_ptr->m_status = 0;
200fbb76349SGreg Clayton   m_opaque_ptr->m_signo = 0;
201fbb76349SGreg Clayton }
202fbb76349SGreg Clayton 
203b9c1b51eSKate Stone const char *SBPlatformShellCommand::GetCommand() {
204baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformShellCommand, GetCommand);
205baf5664fSJonas Devlieghere 
206fbb76349SGreg Clayton   if (m_opaque_ptr->m_command.empty())
207248a1305SKonrad Kleine     return nullptr;
208fbb76349SGreg Clayton   return m_opaque_ptr->m_command.c_str();
209fbb76349SGreg Clayton }
210fbb76349SGreg Clayton 
211b9c1b51eSKate Stone void SBPlatformShellCommand::SetCommand(const char *shell_command) {
212baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformShellCommand, SetCommand, (const char *),
213baf5664fSJonas Devlieghere                      shell_command);
214baf5664fSJonas Devlieghere 
215fbb76349SGreg Clayton   if (shell_command && shell_command[0])
216fbb76349SGreg Clayton     m_opaque_ptr->m_command = shell_command;
217fbb76349SGreg Clayton   else
218fbb76349SGreg Clayton     m_opaque_ptr->m_command.clear();
219fbb76349SGreg Clayton }
220fbb76349SGreg Clayton 
221b9c1b51eSKate Stone const char *SBPlatformShellCommand::GetWorkingDirectory() {
222baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformShellCommand,
223baf5664fSJonas Devlieghere                              GetWorkingDirectory);
224baf5664fSJonas Devlieghere 
225fbb76349SGreg Clayton   if (m_opaque_ptr->m_working_dir.empty())
226248a1305SKonrad Kleine     return nullptr;
227fbb76349SGreg Clayton   return m_opaque_ptr->m_working_dir.c_str();
228fbb76349SGreg Clayton }
229fbb76349SGreg Clayton 
230b9c1b51eSKate Stone void SBPlatformShellCommand::SetWorkingDirectory(const char *path) {
231baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformShellCommand, SetWorkingDirectory,
232baf5664fSJonas Devlieghere                      (const char *), path);
233baf5664fSJonas Devlieghere 
234fbb76349SGreg Clayton   if (path && path[0])
235fbb76349SGreg Clayton     m_opaque_ptr->m_working_dir = path;
236fbb76349SGreg Clayton   else
237fbb76349SGreg Clayton     m_opaque_ptr->m_working_dir.clear();
238fbb76349SGreg Clayton }
239fbb76349SGreg Clayton 
240b9c1b51eSKate Stone uint32_t SBPlatformShellCommand::GetTimeoutSeconds() {
241baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatformShellCommand,
242baf5664fSJonas Devlieghere                              GetTimeoutSeconds);
243baf5664fSJonas Devlieghere 
24419dd1a0eSPavel Labath   if (m_opaque_ptr->m_timeout)
24519dd1a0eSPavel Labath     return m_opaque_ptr->m_timeout->count();
24619dd1a0eSPavel Labath   return UINT32_MAX;
247fbb76349SGreg Clayton }
248fbb76349SGreg Clayton 
249b9c1b51eSKate Stone void SBPlatformShellCommand::SetTimeoutSeconds(uint32_t sec) {
250baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformShellCommand, SetTimeoutSeconds,
251baf5664fSJonas Devlieghere                      (uint32_t), sec);
252baf5664fSJonas Devlieghere 
25319dd1a0eSPavel Labath   if (sec == UINT32_MAX)
25419dd1a0eSPavel Labath     m_opaque_ptr->m_timeout = llvm::None;
25519dd1a0eSPavel Labath   else
25619dd1a0eSPavel Labath     m_opaque_ptr->m_timeout = std::chrono::seconds(sec);
257fbb76349SGreg Clayton }
258fbb76349SGreg Clayton 
259baf5664fSJonas Devlieghere int SBPlatformShellCommand::GetSignal() {
260baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(int, SBPlatformShellCommand, GetSignal);
261fbb76349SGreg Clayton 
262baf5664fSJonas Devlieghere   return m_opaque_ptr->m_signo;
263baf5664fSJonas Devlieghere }
264baf5664fSJonas Devlieghere 
265baf5664fSJonas Devlieghere int SBPlatformShellCommand::GetStatus() {
266baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(int, SBPlatformShellCommand, GetStatus);
267baf5664fSJonas Devlieghere 
268baf5664fSJonas Devlieghere   return m_opaque_ptr->m_status;
269baf5664fSJonas Devlieghere }
270fbb76349SGreg Clayton 
271b9c1b51eSKate Stone const char *SBPlatformShellCommand::GetOutput() {
272baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformShellCommand, GetOutput);
273baf5664fSJonas Devlieghere 
274fbb76349SGreg Clayton   if (m_opaque_ptr->m_output.empty())
275248a1305SKonrad Kleine     return nullptr;
276fbb76349SGreg Clayton   return m_opaque_ptr->m_output.c_str();
277fbb76349SGreg Clayton }
278fbb76349SGreg Clayton 
279fbb76349SGreg Clayton // SBPlatform
280baf5664fSJonas Devlieghere SBPlatform::SBPlatform() : m_opaque_sp() {
281baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBPlatform);
282baf5664fSJonas Devlieghere }
283fbb76349SGreg Clayton 
284b9c1b51eSKate Stone SBPlatform::SBPlatform(const char *platform_name) : m_opaque_sp() {
285baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatform, (const char *), platform_name);
286baf5664fSJonas Devlieghere 
28797206d57SZachary Turner   Status error;
288615eb7e6SGreg Clayton   if (platform_name && platform_name[0])
289615eb7e6SGreg Clayton     m_opaque_sp = Platform::Create(ConstString(platform_name), error);
290fbb76349SGreg Clayton }
291fbb76349SGreg Clayton 
29266dc4672SJonas Devlieghere SBPlatform::SBPlatform(const SBPlatform &rhs) {
29366dc4672SJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatform, (const lldb::SBPlatform &), rhs);
29466dc4672SJonas Devlieghere 
29566dc4672SJonas Devlieghere   m_opaque_sp = rhs.m_opaque_sp;
29666dc4672SJonas Devlieghere }
29766dc4672SJonas Devlieghere 
298ede5cd9aSJonas Devlieghere SBPlatform &SBPlatform::operator=(const SBPlatform &rhs) {
299ede5cd9aSJonas Devlieghere   LLDB_RECORD_METHOD(SBPlatform &,
300ede5cd9aSJonas Devlieghere                      SBPlatform, operator=,(const lldb::SBPlatform &), rhs);
30166dc4672SJonas Devlieghere 
30266dc4672SJonas Devlieghere   m_opaque_sp = rhs.m_opaque_sp;
303ede5cd9aSJonas Devlieghere   return LLDB_RECORD_RESULT(*this);
30466dc4672SJonas Devlieghere }
30566dc4672SJonas Devlieghere 
306866b7a65SJonas Devlieghere SBPlatform::~SBPlatform() = default;
307fbb76349SGreg Clayton 
308a31130f6STatyana Krasnukha SBPlatform SBPlatform::GetHostPlatform() {
309a31130f6STatyana Krasnukha   SBPlatform host_platform;
310a31130f6STatyana Krasnukha   host_platform.m_opaque_sp = Platform::GetHostPlatform();
311a31130f6STatyana Krasnukha   return host_platform;
312a31130f6STatyana Krasnukha }
313a31130f6STatyana Krasnukha 
314baf5664fSJonas Devlieghere bool SBPlatform::IsValid() const {
315baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBPlatform, IsValid);
3167f5237bcSPavel Labath   return this->operator bool();
3177f5237bcSPavel Labath }
3187f5237bcSPavel Labath SBPlatform::operator bool() const {
3197f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBPlatform, operator bool);
320fbb76349SGreg Clayton 
321248a1305SKonrad Kleine   return m_opaque_sp.get() != nullptr;
322baf5664fSJonas Devlieghere }
323baf5664fSJonas Devlieghere 
324baf5664fSJonas Devlieghere void SBPlatform::Clear() {
325baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatform, Clear);
326baf5664fSJonas Devlieghere 
327baf5664fSJonas Devlieghere   m_opaque_sp.reset();
328baf5664fSJonas Devlieghere }
329fbb76349SGreg Clayton 
330b9c1b51eSKate Stone const char *SBPlatform::GetName() {
331baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetName);
332baf5664fSJonas Devlieghere 
333fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
334fbb76349SGreg Clayton   if (platform_sp)
335fbb76349SGreg Clayton     return platform_sp->GetName().GetCString();
336248a1305SKonrad Kleine   return nullptr;
337fbb76349SGreg Clayton }
338fbb76349SGreg Clayton 
339b9c1b51eSKate Stone lldb::PlatformSP SBPlatform::GetSP() const { return m_opaque_sp; }
340fbb76349SGreg Clayton 
341b9c1b51eSKate Stone void SBPlatform::SetSP(const lldb::PlatformSP &platform_sp) {
342fbb76349SGreg Clayton   m_opaque_sp = platform_sp;
343fbb76349SGreg Clayton }
344fbb76349SGreg Clayton 
345b9c1b51eSKate Stone const char *SBPlatform::GetWorkingDirectory() {
346baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetWorkingDirectory);
347baf5664fSJonas Devlieghere 
348fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
349fbb76349SGreg Clayton   if (platform_sp)
350fbb76349SGreg Clayton     return platform_sp->GetWorkingDirectory().GetCString();
351248a1305SKonrad Kleine   return nullptr;
352fbb76349SGreg Clayton }
353fbb76349SGreg Clayton 
354b9c1b51eSKate Stone bool SBPlatform::SetWorkingDirectory(const char *path) {
355baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBPlatform, SetWorkingDirectory, (const char *),
356baf5664fSJonas Devlieghere                      path);
357baf5664fSJonas Devlieghere 
358fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
359b9c1b51eSKate Stone   if (platform_sp) {
360fbb76349SGreg Clayton     if (path)
3618f3be7a3SJonas Devlieghere       platform_sp->SetWorkingDirectory(FileSpec(path));
362fbb76349SGreg Clayton     else
3638f3be7a3SJonas Devlieghere       platform_sp->SetWorkingDirectory(FileSpec());
364fbb76349SGreg Clayton     return true;
365fbb76349SGreg Clayton   }
366fbb76349SGreg Clayton   return false;
367fbb76349SGreg Clayton }
368fbb76349SGreg Clayton 
369b9c1b51eSKate Stone SBError SBPlatform::ConnectRemote(SBPlatformConnectOptions &connect_options) {
370baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, ConnectRemote,
371baf5664fSJonas Devlieghere                      (lldb::SBPlatformConnectOptions &), connect_options);
372baf5664fSJonas Devlieghere 
373fbb76349SGreg Clayton   SBError sb_error;
374fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
375b9c1b51eSKate Stone   if (platform_sp && connect_options.GetURL()) {
376fbb76349SGreg Clayton     Args args;
377ecbb0bb1SZachary Turner     args.AppendArgument(
378ecbb0bb1SZachary Turner         llvm::StringRef::withNullAsEmpty(connect_options.GetURL()));
379fbb76349SGreg Clayton     sb_error.ref() = platform_sp->ConnectRemote(args);
380b9c1b51eSKate Stone   } else {
381fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
382fbb76349SGreg Clayton   }
383baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
384fbb76349SGreg Clayton }
385fbb76349SGreg Clayton 
386b9c1b51eSKate Stone void SBPlatform::DisconnectRemote() {
387baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatform, DisconnectRemote);
388baf5664fSJonas Devlieghere 
389fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
390fbb76349SGreg Clayton   if (platform_sp)
391fbb76349SGreg Clayton     platform_sp->DisconnectRemote();
392fbb76349SGreg Clayton }
393fbb76349SGreg Clayton 
394b9c1b51eSKate Stone bool SBPlatform::IsConnected() {
395baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBPlatform, IsConnected);
396baf5664fSJonas Devlieghere 
397fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
398fbb76349SGreg Clayton   if (platform_sp)
399ca38766cSJim Ingham     return platform_sp->IsConnected();
400fbb76349SGreg Clayton   return false;
401fbb76349SGreg Clayton }
402fbb76349SGreg Clayton 
403b9c1b51eSKate Stone const char *SBPlatform::GetTriple() {
404baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetTriple);
405baf5664fSJonas Devlieghere 
406fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
407b9c1b51eSKate Stone   if (platform_sp) {
408ccd28a14STamas Berghammer     ArchSpec arch(platform_sp->GetSystemArchitecture());
409b9c1b51eSKate Stone     if (arch.IsValid()) {
410b9c1b51eSKate Stone       // Const-ify the string so we don't need to worry about the lifetime of
411b9c1b51eSKate Stone       // the string
412fbb76349SGreg Clayton       return ConstString(arch.GetTriple().getTriple().c_str()).GetCString();
413fbb76349SGreg Clayton     }
414fbb76349SGreg Clayton   }
415248a1305SKonrad Kleine   return nullptr;
416fbb76349SGreg Clayton }
417fbb76349SGreg Clayton 
418b9c1b51eSKate Stone const char *SBPlatform::GetOSBuild() {
419baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetOSBuild);
420baf5664fSJonas Devlieghere 
421fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
422b9c1b51eSKate Stone   if (platform_sp) {
423fbb76349SGreg Clayton     std::string s;
424b9c1b51eSKate Stone     if (platform_sp->GetOSBuildString(s)) {
425b9c1b51eSKate Stone       if (!s.empty()) {
426b9c1b51eSKate Stone         // Const-ify the string so we don't need to worry about the lifetime of
427b9c1b51eSKate Stone         // the string
428fbb76349SGreg Clayton         return ConstString(s.c_str()).GetCString();
429fbb76349SGreg Clayton       }
430fbb76349SGreg Clayton     }
431fbb76349SGreg Clayton   }
432248a1305SKonrad Kleine   return nullptr;
433fbb76349SGreg Clayton }
434fbb76349SGreg Clayton 
435b9c1b51eSKate Stone const char *SBPlatform::GetOSDescription() {
436baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetOSDescription);
437baf5664fSJonas Devlieghere 
438fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
439b9c1b51eSKate Stone   if (platform_sp) {
440fbb76349SGreg Clayton     std::string s;
441b9c1b51eSKate Stone     if (platform_sp->GetOSKernelDescription(s)) {
442b9c1b51eSKate Stone       if (!s.empty()) {
443b9c1b51eSKate Stone         // Const-ify the string so we don't need to worry about the lifetime of
444b9c1b51eSKate Stone         // the string
445fbb76349SGreg Clayton         return ConstString(s.c_str()).GetCString();
446fbb76349SGreg Clayton       }
447fbb76349SGreg Clayton     }
448fbb76349SGreg Clayton   }
449248a1305SKonrad Kleine   return nullptr;
450fbb76349SGreg Clayton }
451fbb76349SGreg Clayton 
452b9c1b51eSKate Stone const char *SBPlatform::GetHostname() {
453baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetHostname);
454baf5664fSJonas Devlieghere 
455fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
456fbb76349SGreg Clayton   if (platform_sp)
457fbb76349SGreg Clayton     return platform_sp->GetHostname();
458248a1305SKonrad Kleine   return nullptr;
459fbb76349SGreg Clayton }
460fbb76349SGreg Clayton 
461b9c1b51eSKate Stone uint32_t SBPlatform::GetOSMajorVersion() {
462baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSMajorVersion);
463baf5664fSJonas Devlieghere 
4642272c481SPavel Labath   llvm::VersionTuple version;
4652272c481SPavel Labath   if (PlatformSP platform_sp = GetSP())
4662272c481SPavel Labath     version = platform_sp->GetOSVersion();
4672272c481SPavel Labath   return version.empty() ? UINT32_MAX : version.getMajor();
468fbb76349SGreg Clayton }
469fbb76349SGreg Clayton 
470b9c1b51eSKate Stone uint32_t SBPlatform::GetOSMinorVersion() {
471baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSMinorVersion);
472baf5664fSJonas Devlieghere 
4732272c481SPavel Labath   llvm::VersionTuple version;
4742272c481SPavel Labath   if (PlatformSP platform_sp = GetSP())
4752272c481SPavel Labath     version = platform_sp->GetOSVersion();
4762272c481SPavel Labath   return version.getMinor().getValueOr(UINT32_MAX);
477fbb76349SGreg Clayton }
478fbb76349SGreg Clayton 
479b9c1b51eSKate Stone uint32_t SBPlatform::GetOSUpdateVersion() {
480baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSUpdateVersion);
481baf5664fSJonas Devlieghere 
4822272c481SPavel Labath   llvm::VersionTuple version;
4832272c481SPavel Labath   if (PlatformSP platform_sp = GetSP())
4842272c481SPavel Labath     version = platform_sp->GetOSVersion();
4852272c481SPavel Labath   return version.getSubminor().getValueOr(UINT32_MAX);
486fbb76349SGreg Clayton }
487fbb76349SGreg Clayton 
488b9c1b51eSKate Stone SBError SBPlatform::Get(SBFileSpec &src, SBFileSpec &dst) {
489baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Get,
490baf5664fSJonas Devlieghere                      (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst);
491baf5664fSJonas Devlieghere 
492fbb76349SGreg Clayton   SBError sb_error;
493fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
494b9c1b51eSKate Stone   if (platform_sp) {
495fbb76349SGreg Clayton     sb_error.ref() = platform_sp->GetFile(src.ref(), dst.ref());
496b9c1b51eSKate Stone   } else {
497fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
498fbb76349SGreg Clayton   }
499baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
500fbb76349SGreg Clayton }
501fbb76349SGreg Clayton 
502b9c1b51eSKate Stone SBError SBPlatform::Put(SBFileSpec &src, SBFileSpec &dst) {
503baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Put,
504baf5664fSJonas Devlieghere                      (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst);
505baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
506baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
507b9c1b51eSKate Stone         if (src.Exists()) {
508baf5664fSJonas Devlieghere           uint32_t permissions =
509baf5664fSJonas Devlieghere               FileSystem::Instance().GetPermissions(src.ref());
510b9c1b51eSKate Stone           if (permissions == 0) {
5113a58d898SJonas Devlieghere             if (FileSystem::Instance().IsDirectory(src.ref()))
512fbb76349SGreg Clayton               permissions = eFilePermissionsDirectoryDefault;
513fbb76349SGreg Clayton             else
514fbb76349SGreg Clayton               permissions = eFilePermissionsFileDefault;
515fbb76349SGreg Clayton           }
516fbb76349SGreg Clayton 
5171ef7b2c8SOleksiy Vyalov           return platform_sp->PutFile(src.ref(), dst.ref(), permissions);
518fbb76349SGreg Clayton         }
5191ef7b2c8SOleksiy Vyalov 
52097206d57SZachary Turner         Status error;
521b9c1b51eSKate Stone         error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'",
522b9c1b51eSKate Stone                                        src.ref().GetPath().c_str());
5231ef7b2c8SOleksiy Vyalov         return error;
524baf5664fSJonas Devlieghere       }));
525fbb76349SGreg Clayton }
526fbb76349SGreg Clayton 
527b9c1b51eSKate Stone SBError SBPlatform::Install(SBFileSpec &src, SBFileSpec &dst) {
528baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Install,
529baf5664fSJonas Devlieghere                      (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst);
530baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
531baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
532fbb76349SGreg Clayton         if (src.Exists())
5331ef7b2c8SOleksiy Vyalov           return platform_sp->Install(src.ref(), dst.ref());
5341ef7b2c8SOleksiy Vyalov 
53597206d57SZachary Turner         Status error;
536b9c1b51eSKate Stone         error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'",
537b9c1b51eSKate Stone                                        src.ref().GetPath().c_str());
5381ef7b2c8SOleksiy Vyalov         return error;
539baf5664fSJonas Devlieghere       }));
540fbb76349SGreg Clayton }
541fbb76349SGreg Clayton 
542b9c1b51eSKate Stone SBError SBPlatform::Run(SBPlatformShellCommand &shell_command) {
543baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Run,
544baf5664fSJonas Devlieghere                      (lldb::SBPlatformShellCommand &), shell_command);
545baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(ExecuteConnected([&](const lldb::PlatformSP
546baf5664fSJonas Devlieghere                                                      &platform_sp) {
547fbb76349SGreg Clayton     const char *command = shell_command.GetCommand();
5481ef7b2c8SOleksiy Vyalov     if (!command)
54997206d57SZachary Turner       return Status("invalid shell command (empty)");
5501ef7b2c8SOleksiy Vyalov 
551fbb76349SGreg Clayton     const char *working_dir = shell_command.GetWorkingDirectory();
552248a1305SKonrad Kleine     if (working_dir == nullptr) {
553fbb76349SGreg Clayton       working_dir = platform_sp->GetWorkingDirectory().GetCString();
554fbb76349SGreg Clayton       if (working_dir)
555fbb76349SGreg Clayton         shell_command.SetWorkingDirectory(working_dir);
556fbb76349SGreg Clayton     }
5578f3be7a3SJonas Devlieghere     return platform_sp->RunShellCommand(command, FileSpec(working_dir),
558fbb76349SGreg Clayton                                         &shell_command.m_opaque_ptr->m_status,
559fbb76349SGreg Clayton                                         &shell_command.m_opaque_ptr->m_signo,
560fbb76349SGreg Clayton                                         &shell_command.m_opaque_ptr->m_output,
56119dd1a0eSPavel Labath                                         shell_command.m_opaque_ptr->m_timeout);
562baf5664fSJonas Devlieghere   }));
563fbb76349SGreg Clayton }
5641ef7b2c8SOleksiy Vyalov 
565b9c1b51eSKate Stone SBError SBPlatform::Launch(SBLaunchInfo &launch_info) {
566baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Launch, (lldb::SBLaunchInfo &),
567baf5664fSJonas Devlieghere                      launch_info);
568baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
569baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
57062930e57SPavel Labath         ProcessLaunchInfo info = launch_info.ref();
57162930e57SPavel Labath         Status error = platform_sp->LaunchProcess(info);
57262930e57SPavel Labath         launch_info.set_ref(info);
57362930e57SPavel Labath         return error;
574baf5664fSJonas Devlieghere       }));
5751ef7b2c8SOleksiy Vyalov }
5761ef7b2c8SOleksiy Vyalov 
577b9c1b51eSKate Stone SBError SBPlatform::Kill(const lldb::pid_t pid) {
578baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Kill, (const lldb::pid_t), pid);
579baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
580baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
5811ef7b2c8SOleksiy Vyalov         return platform_sp->KillProcess(pid);
582baf5664fSJonas Devlieghere       }));
5831ef7b2c8SOleksiy Vyalov }
5841ef7b2c8SOleksiy Vyalov 
585b9c1b51eSKate Stone SBError SBPlatform::ExecuteConnected(
58697206d57SZachary Turner     const std::function<Status(const lldb::PlatformSP &)> &func) {
5871ef7b2c8SOleksiy Vyalov   SBError sb_error;
5881ef7b2c8SOleksiy Vyalov   const auto platform_sp(GetSP());
589b9c1b51eSKate Stone   if (platform_sp) {
5901ef7b2c8SOleksiy Vyalov     if (platform_sp->IsConnected())
5911ef7b2c8SOleksiy Vyalov       sb_error.ref() = func(platform_sp);
5921ef7b2c8SOleksiy Vyalov     else
593fbb76349SGreg Clayton       sb_error.SetErrorString("not connected");
594b9c1b51eSKate Stone   } else
595fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
5961ef7b2c8SOleksiy Vyalov 
597fbb76349SGreg Clayton   return sb_error;
598fbb76349SGreg Clayton }
599fbb76349SGreg Clayton 
600b9c1b51eSKate Stone SBError SBPlatform::MakeDirectory(const char *path, uint32_t file_permissions) {
601baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, MakeDirectory,
602baf5664fSJonas Devlieghere                      (const char *, uint32_t), path, file_permissions);
603baf5664fSJonas Devlieghere 
604fbb76349SGreg Clayton   SBError sb_error;
605fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
606b9c1b51eSKate Stone   if (platform_sp) {
607b9c1b51eSKate Stone     sb_error.ref() =
6088f3be7a3SJonas Devlieghere         platform_sp->MakeDirectory(FileSpec(path), file_permissions);
609b9c1b51eSKate Stone   } else {
610fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
611fbb76349SGreg Clayton   }
612baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
613fbb76349SGreg Clayton }
614fbb76349SGreg Clayton 
615b9c1b51eSKate Stone uint32_t SBPlatform::GetFilePermissions(const char *path) {
616baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBPlatform, GetFilePermissions, (const char *),
617baf5664fSJonas Devlieghere                      path);
618baf5664fSJonas Devlieghere 
619fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
620b9c1b51eSKate Stone   if (platform_sp) {
621fbb76349SGreg Clayton     uint32_t file_permissions = 0;
6228f3be7a3SJonas Devlieghere     platform_sp->GetFilePermissions(FileSpec(path), file_permissions);
623fbb76349SGreg Clayton     return file_permissions;
624fbb76349SGreg Clayton   }
625fbb76349SGreg Clayton   return 0;
626fbb76349SGreg Clayton }
627fbb76349SGreg Clayton 
628b9c1b51eSKate Stone SBError SBPlatform::SetFilePermissions(const char *path,
629b9c1b51eSKate Stone                                        uint32_t file_permissions) {
630baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, SetFilePermissions,
631baf5664fSJonas Devlieghere                      (const char *, uint32_t), path, file_permissions);
632baf5664fSJonas Devlieghere 
633fbb76349SGreg Clayton   SBError sb_error;
634fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
635b9c1b51eSKate Stone   if (platform_sp) {
6368f3be7a3SJonas Devlieghere     sb_error.ref() =
6378f3be7a3SJonas Devlieghere         platform_sp->SetFilePermissions(FileSpec(path), file_permissions);
638b9c1b51eSKate Stone   } else {
639fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
640fbb76349SGreg Clayton   }
641baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
642fbb76349SGreg Clayton }
643fbb76349SGreg Clayton 
644b9c1b51eSKate Stone SBUnixSignals SBPlatform::GetUnixSignals() const {
645baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBUnixSignals, SBPlatform,
646baf5664fSJonas Devlieghere                                    GetUnixSignals);
64798d0a4b3SChaoren Lin 
648baf5664fSJonas Devlieghere   if (auto platform_sp = GetSP())
649baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBUnixSignals{platform_sp});
650baf5664fSJonas Devlieghere 
651baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBUnixSignals());
65298d0a4b3SChaoren Lin }
653ae211eceSMichal Gorny 
654*ca69be21SWalter Erquinigo SBEnvironment SBPlatform::GetEnvironment() {
655*ca69be21SWalter Erquinigo   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBEnvironment, SBPlatform, GetEnvironment);
656*ca69be21SWalter Erquinigo   PlatformSP platform_sp(GetSP());
657*ca69be21SWalter Erquinigo 
658*ca69be21SWalter Erquinigo   if (platform_sp) {
659*ca69be21SWalter Erquinigo     return LLDB_RECORD_RESULT(SBEnvironment(platform_sp->GetEnvironment()));
660*ca69be21SWalter Erquinigo   }
661*ca69be21SWalter Erquinigo 
662*ca69be21SWalter Erquinigo   return LLDB_RECORD_RESULT(SBEnvironment());
663*ca69be21SWalter Erquinigo }
664*ca69be21SWalter Erquinigo 
665ae211eceSMichal Gorny namespace lldb_private {
666ae211eceSMichal Gorny namespace repro {
667ae211eceSMichal Gorny 
668ae211eceSMichal Gorny template <>
669ae211eceSMichal Gorny void RegisterMethods<SBPlatformConnectOptions>(Registry &R) {
670ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformConnectOptions, (const char *));
671ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformConnectOptions,
672ae211eceSMichal Gorny                             (const lldb::SBPlatformConnectOptions &));
673ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
674ede5cd9aSJonas Devlieghere       SBPlatformConnectOptions &,
675ae211eceSMichal Gorny       SBPlatformConnectOptions, operator=,(
676ae211eceSMichal Gorny                                     const lldb::SBPlatformConnectOptions &));
677ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformConnectOptions, GetURL, ());
678ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, SetURL,
679ae211eceSMichal Gorny                        (const char *));
680ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBPlatformConnectOptions, GetRsyncEnabled, ());
681ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, EnableRsync,
682ae211eceSMichal Gorny                        (const char *, const char *, bool));
683ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, DisableRsync, ());
684ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformConnectOptions,
685ae211eceSMichal Gorny                        GetLocalCacheDirectory, ());
686ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, SetLocalCacheDirectory,
687ae211eceSMichal Gorny                        (const char *));
688ae211eceSMichal Gorny }
689ae211eceSMichal Gorny 
690ae211eceSMichal Gorny template <>
691ae211eceSMichal Gorny void RegisterMethods<SBPlatformShellCommand>(Registry &R) {
692ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformShellCommand, (const char *));
693ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformShellCommand,
694ae211eceSMichal Gorny                             (const lldb::SBPlatformShellCommand &));
695ede5cd9aSJonas Devlieghere   LLDB_REGISTER_METHOD(
696ede5cd9aSJonas Devlieghere       SBPlatformShellCommand &,
697ede5cd9aSJonas Devlieghere       SBPlatformShellCommand, operator=,(const lldb::SBPlatformShellCommand &));
698ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, Clear, ());
699ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand, GetCommand, ());
700ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetCommand,
701ae211eceSMichal Gorny                        (const char *));
702ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand,
703ae211eceSMichal Gorny                        GetWorkingDirectory, ());
704ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetWorkingDirectory,
705ae211eceSMichal Gorny                        (const char *));
706ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatformShellCommand, GetTimeoutSeconds,
707ae211eceSMichal Gorny                        ());
708ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetTimeoutSeconds,
709ae211eceSMichal Gorny                        (uint32_t));
710ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(int, SBPlatformShellCommand, GetSignal, ());
711ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(int, SBPlatformShellCommand, GetStatus, ());
712ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand, GetOutput, ());
713ae211eceSMichal Gorny }
714ae211eceSMichal Gorny 
715ae211eceSMichal Gorny template <>
716ae211eceSMichal Gorny void RegisterMethods<SBPlatform>(Registry &R) {
717ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatform, ());
718ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatform, (const char *));
71966dc4672SJonas Devlieghere   LLDB_REGISTER_CONSTRUCTOR(SBPlatform, (const lldb::SBPlatform &));
720ede5cd9aSJonas Devlieghere   LLDB_REGISTER_METHOD(SBPlatform &,
721ede5cd9aSJonas Devlieghere                        SBPlatform, operator=,(const lldb::SBPlatform &));
722ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBPlatform, IsValid, ());
723ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBPlatform, operator bool, ());
724ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatform, Clear, ());
725ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetName, ());
726ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetWorkingDirectory, ());
727ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBPlatform, SetWorkingDirectory, (const char *));
728ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, ConnectRemote,
729ae211eceSMichal Gorny                        (lldb::SBPlatformConnectOptions &));
730ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatform, DisconnectRemote, ());
731ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBPlatform, IsConnected, ());
732ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetTriple, ());
733ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetOSBuild, ());
734ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetOSDescription, ());
735ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetHostname, ());
736ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSMajorVersion, ());
737ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSMinorVersion, ());
738ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSUpdateVersion, ());
739ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Get,
740ae211eceSMichal Gorny                        (lldb::SBFileSpec &, lldb::SBFileSpec &));
741ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Put,
742ae211eceSMichal Gorny                        (lldb::SBFileSpec &, lldb::SBFileSpec &));
743ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Install,
744ae211eceSMichal Gorny                        (lldb::SBFileSpec &, lldb::SBFileSpec &));
745ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Run,
746ae211eceSMichal Gorny                        (lldb::SBPlatformShellCommand &));
747ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Launch,
748ae211eceSMichal Gorny                        (lldb::SBLaunchInfo &));
749ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Kill, (const lldb::pid_t));
750ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, MakeDirectory,
751ae211eceSMichal Gorny                        (const char *, uint32_t));
752ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetFilePermissions,
753ae211eceSMichal Gorny                        (const char *));
754ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, SetFilePermissions,
755ae211eceSMichal Gorny                        (const char *, uint32_t));
756*ca69be21SWalter Erquinigo   LLDB_REGISTER_METHOD(lldb::SBEnvironment, SBPlatform, GetEnvironment, ());
757ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::SBUnixSignals, SBPlatform, GetUnixSignals,
758ae211eceSMichal Gorny                              ());
759ae211eceSMichal Gorny }
760ae211eceSMichal Gorny 
761ae211eceSMichal Gorny }
762ae211eceSMichal Gorny }
763