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"
11ca69be21SWalter 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"
15ca69be21SWalter 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() {
309*5c2bf577SJonas Devlieghere   LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBPlatform, SBPlatform,
310*5c2bf577SJonas Devlieghere                                     GetHostPlatform);
311*5c2bf577SJonas Devlieghere 
312a31130f6STatyana Krasnukha   SBPlatform host_platform;
313a31130f6STatyana Krasnukha   host_platform.m_opaque_sp = Platform::GetHostPlatform();
314*5c2bf577SJonas Devlieghere   return LLDB_RECORD_RESULT(host_platform);
315a31130f6STatyana Krasnukha }
316a31130f6STatyana Krasnukha 
317baf5664fSJonas Devlieghere bool SBPlatform::IsValid() const {
318baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBPlatform, IsValid);
3197f5237bcSPavel Labath   return this->operator bool();
3207f5237bcSPavel Labath }
3217f5237bcSPavel Labath SBPlatform::operator bool() const {
3227f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBPlatform, operator bool);
323fbb76349SGreg Clayton 
324248a1305SKonrad Kleine   return m_opaque_sp.get() != nullptr;
325baf5664fSJonas Devlieghere }
326baf5664fSJonas Devlieghere 
327baf5664fSJonas Devlieghere void SBPlatform::Clear() {
328baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatform, Clear);
329baf5664fSJonas Devlieghere 
330baf5664fSJonas Devlieghere   m_opaque_sp.reset();
331baf5664fSJonas Devlieghere }
332fbb76349SGreg Clayton 
333b9c1b51eSKate Stone const char *SBPlatform::GetName() {
334baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetName);
335baf5664fSJonas Devlieghere 
336fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
337fbb76349SGreg Clayton   if (platform_sp)
338fbb76349SGreg Clayton     return platform_sp->GetName().GetCString();
339248a1305SKonrad Kleine   return nullptr;
340fbb76349SGreg Clayton }
341fbb76349SGreg Clayton 
342b9c1b51eSKate Stone lldb::PlatformSP SBPlatform::GetSP() const { return m_opaque_sp; }
343fbb76349SGreg Clayton 
344b9c1b51eSKate Stone void SBPlatform::SetSP(const lldb::PlatformSP &platform_sp) {
345fbb76349SGreg Clayton   m_opaque_sp = platform_sp;
346fbb76349SGreg Clayton }
347fbb76349SGreg Clayton 
348b9c1b51eSKate Stone const char *SBPlatform::GetWorkingDirectory() {
349baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetWorkingDirectory);
350baf5664fSJonas Devlieghere 
351fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
352fbb76349SGreg Clayton   if (platform_sp)
353fbb76349SGreg Clayton     return platform_sp->GetWorkingDirectory().GetCString();
354248a1305SKonrad Kleine   return nullptr;
355fbb76349SGreg Clayton }
356fbb76349SGreg Clayton 
357b9c1b51eSKate Stone bool SBPlatform::SetWorkingDirectory(const char *path) {
358baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBPlatform, SetWorkingDirectory, (const char *),
359baf5664fSJonas Devlieghere                      path);
360baf5664fSJonas Devlieghere 
361fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
362b9c1b51eSKate Stone   if (platform_sp) {
363fbb76349SGreg Clayton     if (path)
3648f3be7a3SJonas Devlieghere       platform_sp->SetWorkingDirectory(FileSpec(path));
365fbb76349SGreg Clayton     else
3668f3be7a3SJonas Devlieghere       platform_sp->SetWorkingDirectory(FileSpec());
367fbb76349SGreg Clayton     return true;
368fbb76349SGreg Clayton   }
369fbb76349SGreg Clayton   return false;
370fbb76349SGreg Clayton }
371fbb76349SGreg Clayton 
372b9c1b51eSKate Stone SBError SBPlatform::ConnectRemote(SBPlatformConnectOptions &connect_options) {
373baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, ConnectRemote,
374baf5664fSJonas Devlieghere                      (lldb::SBPlatformConnectOptions &), connect_options);
375baf5664fSJonas Devlieghere 
376fbb76349SGreg Clayton   SBError sb_error;
377fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
378b9c1b51eSKate Stone   if (platform_sp && connect_options.GetURL()) {
379fbb76349SGreg Clayton     Args args;
380ecbb0bb1SZachary Turner     args.AppendArgument(
381ecbb0bb1SZachary Turner         llvm::StringRef::withNullAsEmpty(connect_options.GetURL()));
382fbb76349SGreg Clayton     sb_error.ref() = platform_sp->ConnectRemote(args);
383b9c1b51eSKate Stone   } else {
384fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
385fbb76349SGreg Clayton   }
386baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
387fbb76349SGreg Clayton }
388fbb76349SGreg Clayton 
389b9c1b51eSKate Stone void SBPlatform::DisconnectRemote() {
390baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatform, DisconnectRemote);
391baf5664fSJonas Devlieghere 
392fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
393fbb76349SGreg Clayton   if (platform_sp)
394fbb76349SGreg Clayton     platform_sp->DisconnectRemote();
395fbb76349SGreg Clayton }
396fbb76349SGreg Clayton 
397b9c1b51eSKate Stone bool SBPlatform::IsConnected() {
398baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBPlatform, IsConnected);
399baf5664fSJonas Devlieghere 
400fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
401fbb76349SGreg Clayton   if (platform_sp)
402ca38766cSJim Ingham     return platform_sp->IsConnected();
403fbb76349SGreg Clayton   return false;
404fbb76349SGreg Clayton }
405fbb76349SGreg Clayton 
406b9c1b51eSKate Stone const char *SBPlatform::GetTriple() {
407baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetTriple);
408baf5664fSJonas Devlieghere 
409fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
410b9c1b51eSKate Stone   if (platform_sp) {
411ccd28a14STamas Berghammer     ArchSpec arch(platform_sp->GetSystemArchitecture());
412b9c1b51eSKate Stone     if (arch.IsValid()) {
413b9c1b51eSKate Stone       // Const-ify the string so we don't need to worry about the lifetime of
414b9c1b51eSKate Stone       // the string
415fbb76349SGreg Clayton       return ConstString(arch.GetTriple().getTriple().c_str()).GetCString();
416fbb76349SGreg Clayton     }
417fbb76349SGreg Clayton   }
418248a1305SKonrad Kleine   return nullptr;
419fbb76349SGreg Clayton }
420fbb76349SGreg Clayton 
421b9c1b51eSKate Stone const char *SBPlatform::GetOSBuild() {
422baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetOSBuild);
423baf5664fSJonas Devlieghere 
424fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
425b9c1b51eSKate Stone   if (platform_sp) {
426fbb76349SGreg Clayton     std::string s;
427b9c1b51eSKate Stone     if (platform_sp->GetOSBuildString(s)) {
428b9c1b51eSKate Stone       if (!s.empty()) {
429b9c1b51eSKate Stone         // Const-ify the string so we don't need to worry about the lifetime of
430b9c1b51eSKate Stone         // the string
431fbb76349SGreg Clayton         return ConstString(s.c_str()).GetCString();
432fbb76349SGreg Clayton       }
433fbb76349SGreg Clayton     }
434fbb76349SGreg Clayton   }
435248a1305SKonrad Kleine   return nullptr;
436fbb76349SGreg Clayton }
437fbb76349SGreg Clayton 
438b9c1b51eSKate Stone const char *SBPlatform::GetOSDescription() {
439baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetOSDescription);
440baf5664fSJonas Devlieghere 
441fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
442b9c1b51eSKate Stone   if (platform_sp) {
443fbb76349SGreg Clayton     std::string s;
444b9c1b51eSKate Stone     if (platform_sp->GetOSKernelDescription(s)) {
445b9c1b51eSKate Stone       if (!s.empty()) {
446b9c1b51eSKate Stone         // Const-ify the string so we don't need to worry about the lifetime of
447b9c1b51eSKate Stone         // the string
448fbb76349SGreg Clayton         return ConstString(s.c_str()).GetCString();
449fbb76349SGreg Clayton       }
450fbb76349SGreg Clayton     }
451fbb76349SGreg Clayton   }
452248a1305SKonrad Kleine   return nullptr;
453fbb76349SGreg Clayton }
454fbb76349SGreg Clayton 
455b9c1b51eSKate Stone const char *SBPlatform::GetHostname() {
456baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetHostname);
457baf5664fSJonas Devlieghere 
458fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
459fbb76349SGreg Clayton   if (platform_sp)
460fbb76349SGreg Clayton     return platform_sp->GetHostname();
461248a1305SKonrad Kleine   return nullptr;
462fbb76349SGreg Clayton }
463fbb76349SGreg Clayton 
464b9c1b51eSKate Stone uint32_t SBPlatform::GetOSMajorVersion() {
465baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSMajorVersion);
466baf5664fSJonas Devlieghere 
4672272c481SPavel Labath   llvm::VersionTuple version;
4682272c481SPavel Labath   if (PlatformSP platform_sp = GetSP())
4692272c481SPavel Labath     version = platform_sp->GetOSVersion();
4702272c481SPavel Labath   return version.empty() ? UINT32_MAX : version.getMajor();
471fbb76349SGreg Clayton }
472fbb76349SGreg Clayton 
473b9c1b51eSKate Stone uint32_t SBPlatform::GetOSMinorVersion() {
474baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSMinorVersion);
475baf5664fSJonas Devlieghere 
4762272c481SPavel Labath   llvm::VersionTuple version;
4772272c481SPavel Labath   if (PlatformSP platform_sp = GetSP())
4782272c481SPavel Labath     version = platform_sp->GetOSVersion();
4792272c481SPavel Labath   return version.getMinor().getValueOr(UINT32_MAX);
480fbb76349SGreg Clayton }
481fbb76349SGreg Clayton 
482b9c1b51eSKate Stone uint32_t SBPlatform::GetOSUpdateVersion() {
483baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSUpdateVersion);
484baf5664fSJonas Devlieghere 
4852272c481SPavel Labath   llvm::VersionTuple version;
4862272c481SPavel Labath   if (PlatformSP platform_sp = GetSP())
4872272c481SPavel Labath     version = platform_sp->GetOSVersion();
4882272c481SPavel Labath   return version.getSubminor().getValueOr(UINT32_MAX);
489fbb76349SGreg Clayton }
490fbb76349SGreg Clayton 
491b9c1b51eSKate Stone SBError SBPlatform::Get(SBFileSpec &src, SBFileSpec &dst) {
492baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Get,
493baf5664fSJonas Devlieghere                      (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst);
494baf5664fSJonas Devlieghere 
495fbb76349SGreg Clayton   SBError sb_error;
496fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
497b9c1b51eSKate Stone   if (platform_sp) {
498fbb76349SGreg Clayton     sb_error.ref() = platform_sp->GetFile(src.ref(), dst.ref());
499b9c1b51eSKate Stone   } else {
500fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
501fbb76349SGreg Clayton   }
502baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
503fbb76349SGreg Clayton }
504fbb76349SGreg Clayton 
505b9c1b51eSKate Stone SBError SBPlatform::Put(SBFileSpec &src, SBFileSpec &dst) {
506baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Put,
507baf5664fSJonas Devlieghere                      (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst);
508baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
509baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
510b9c1b51eSKate Stone         if (src.Exists()) {
511baf5664fSJonas Devlieghere           uint32_t permissions =
512baf5664fSJonas Devlieghere               FileSystem::Instance().GetPermissions(src.ref());
513b9c1b51eSKate Stone           if (permissions == 0) {
5143a58d898SJonas Devlieghere             if (FileSystem::Instance().IsDirectory(src.ref()))
515fbb76349SGreg Clayton               permissions = eFilePermissionsDirectoryDefault;
516fbb76349SGreg Clayton             else
517fbb76349SGreg Clayton               permissions = eFilePermissionsFileDefault;
518fbb76349SGreg Clayton           }
519fbb76349SGreg Clayton 
5201ef7b2c8SOleksiy Vyalov           return platform_sp->PutFile(src.ref(), dst.ref(), permissions);
521fbb76349SGreg Clayton         }
5221ef7b2c8SOleksiy Vyalov 
52397206d57SZachary Turner         Status error;
524b9c1b51eSKate Stone         error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'",
525b9c1b51eSKate Stone                                        src.ref().GetPath().c_str());
5261ef7b2c8SOleksiy Vyalov         return error;
527baf5664fSJonas Devlieghere       }));
528fbb76349SGreg Clayton }
529fbb76349SGreg Clayton 
530b9c1b51eSKate Stone SBError SBPlatform::Install(SBFileSpec &src, SBFileSpec &dst) {
531baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Install,
532baf5664fSJonas Devlieghere                      (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst);
533baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
534baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
535fbb76349SGreg Clayton         if (src.Exists())
5361ef7b2c8SOleksiy Vyalov           return platform_sp->Install(src.ref(), dst.ref());
5371ef7b2c8SOleksiy Vyalov 
53897206d57SZachary Turner         Status error;
539b9c1b51eSKate Stone         error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'",
540b9c1b51eSKate Stone                                        src.ref().GetPath().c_str());
5411ef7b2c8SOleksiy Vyalov         return error;
542baf5664fSJonas Devlieghere       }));
543fbb76349SGreg Clayton }
544fbb76349SGreg Clayton 
545b9c1b51eSKate Stone SBError SBPlatform::Run(SBPlatformShellCommand &shell_command) {
546baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Run,
547baf5664fSJonas Devlieghere                      (lldb::SBPlatformShellCommand &), shell_command);
548baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(ExecuteConnected([&](const lldb::PlatformSP
549baf5664fSJonas Devlieghere                                                      &platform_sp) {
550fbb76349SGreg Clayton     const char *command = shell_command.GetCommand();
5511ef7b2c8SOleksiy Vyalov     if (!command)
55297206d57SZachary Turner       return Status("invalid shell command (empty)");
5531ef7b2c8SOleksiy Vyalov 
554fbb76349SGreg Clayton     const char *working_dir = shell_command.GetWorkingDirectory();
555248a1305SKonrad Kleine     if (working_dir == nullptr) {
556fbb76349SGreg Clayton       working_dir = platform_sp->GetWorkingDirectory().GetCString();
557fbb76349SGreg Clayton       if (working_dir)
558fbb76349SGreg Clayton         shell_command.SetWorkingDirectory(working_dir);
559fbb76349SGreg Clayton     }
5608f3be7a3SJonas Devlieghere     return platform_sp->RunShellCommand(command, FileSpec(working_dir),
561fbb76349SGreg Clayton                                         &shell_command.m_opaque_ptr->m_status,
562fbb76349SGreg Clayton                                         &shell_command.m_opaque_ptr->m_signo,
563fbb76349SGreg Clayton                                         &shell_command.m_opaque_ptr->m_output,
56419dd1a0eSPavel Labath                                         shell_command.m_opaque_ptr->m_timeout);
565baf5664fSJonas Devlieghere   }));
566fbb76349SGreg Clayton }
5671ef7b2c8SOleksiy Vyalov 
568b9c1b51eSKate Stone SBError SBPlatform::Launch(SBLaunchInfo &launch_info) {
569baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Launch, (lldb::SBLaunchInfo &),
570baf5664fSJonas Devlieghere                      launch_info);
571baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
572baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
57362930e57SPavel Labath         ProcessLaunchInfo info = launch_info.ref();
57462930e57SPavel Labath         Status error = platform_sp->LaunchProcess(info);
57562930e57SPavel Labath         launch_info.set_ref(info);
57662930e57SPavel Labath         return error;
577baf5664fSJonas Devlieghere       }));
5781ef7b2c8SOleksiy Vyalov }
5791ef7b2c8SOleksiy Vyalov 
580b9c1b51eSKate Stone SBError SBPlatform::Kill(const lldb::pid_t pid) {
581baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Kill, (const lldb::pid_t), pid);
582baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
583baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
5841ef7b2c8SOleksiy Vyalov         return platform_sp->KillProcess(pid);
585baf5664fSJonas Devlieghere       }));
5861ef7b2c8SOleksiy Vyalov }
5871ef7b2c8SOleksiy Vyalov 
588b9c1b51eSKate Stone SBError SBPlatform::ExecuteConnected(
58997206d57SZachary Turner     const std::function<Status(const lldb::PlatformSP &)> &func) {
5901ef7b2c8SOleksiy Vyalov   SBError sb_error;
5911ef7b2c8SOleksiy Vyalov   const auto platform_sp(GetSP());
592b9c1b51eSKate Stone   if (platform_sp) {
5931ef7b2c8SOleksiy Vyalov     if (platform_sp->IsConnected())
5941ef7b2c8SOleksiy Vyalov       sb_error.ref() = func(platform_sp);
5951ef7b2c8SOleksiy Vyalov     else
596fbb76349SGreg Clayton       sb_error.SetErrorString("not connected");
597b9c1b51eSKate Stone   } else
598fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
5991ef7b2c8SOleksiy Vyalov 
600fbb76349SGreg Clayton   return sb_error;
601fbb76349SGreg Clayton }
602fbb76349SGreg Clayton 
603b9c1b51eSKate Stone SBError SBPlatform::MakeDirectory(const char *path, uint32_t file_permissions) {
604baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, MakeDirectory,
605baf5664fSJonas Devlieghere                      (const char *, uint32_t), path, file_permissions);
606baf5664fSJonas Devlieghere 
607fbb76349SGreg Clayton   SBError sb_error;
608fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
609b9c1b51eSKate Stone   if (platform_sp) {
610b9c1b51eSKate Stone     sb_error.ref() =
6118f3be7a3SJonas Devlieghere         platform_sp->MakeDirectory(FileSpec(path), file_permissions);
612b9c1b51eSKate Stone   } else {
613fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
614fbb76349SGreg Clayton   }
615baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
616fbb76349SGreg Clayton }
617fbb76349SGreg Clayton 
618b9c1b51eSKate Stone uint32_t SBPlatform::GetFilePermissions(const char *path) {
619baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBPlatform, GetFilePermissions, (const char *),
620baf5664fSJonas Devlieghere                      path);
621baf5664fSJonas Devlieghere 
622fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
623b9c1b51eSKate Stone   if (platform_sp) {
624fbb76349SGreg Clayton     uint32_t file_permissions = 0;
6258f3be7a3SJonas Devlieghere     platform_sp->GetFilePermissions(FileSpec(path), file_permissions);
626fbb76349SGreg Clayton     return file_permissions;
627fbb76349SGreg Clayton   }
628fbb76349SGreg Clayton   return 0;
629fbb76349SGreg Clayton }
630fbb76349SGreg Clayton 
631b9c1b51eSKate Stone SBError SBPlatform::SetFilePermissions(const char *path,
632b9c1b51eSKate Stone                                        uint32_t file_permissions) {
633baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, SetFilePermissions,
634baf5664fSJonas Devlieghere                      (const char *, uint32_t), path, file_permissions);
635baf5664fSJonas Devlieghere 
636fbb76349SGreg Clayton   SBError sb_error;
637fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
638b9c1b51eSKate Stone   if (platform_sp) {
6398f3be7a3SJonas Devlieghere     sb_error.ref() =
6408f3be7a3SJonas Devlieghere         platform_sp->SetFilePermissions(FileSpec(path), file_permissions);
641b9c1b51eSKate Stone   } else {
642fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
643fbb76349SGreg Clayton   }
644baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
645fbb76349SGreg Clayton }
646fbb76349SGreg Clayton 
647b9c1b51eSKate Stone SBUnixSignals SBPlatform::GetUnixSignals() const {
648baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBUnixSignals, SBPlatform,
649baf5664fSJonas Devlieghere                                    GetUnixSignals);
65098d0a4b3SChaoren Lin 
651baf5664fSJonas Devlieghere   if (auto platform_sp = GetSP())
652baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBUnixSignals{platform_sp});
653baf5664fSJonas Devlieghere 
654baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBUnixSignals());
65598d0a4b3SChaoren Lin }
656ae211eceSMichal Gorny 
657ca69be21SWalter Erquinigo SBEnvironment SBPlatform::GetEnvironment() {
658ca69be21SWalter Erquinigo   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBEnvironment, SBPlatform, GetEnvironment);
659ca69be21SWalter Erquinigo   PlatformSP platform_sp(GetSP());
660ca69be21SWalter Erquinigo 
661ca69be21SWalter Erquinigo   if (platform_sp) {
662ca69be21SWalter Erquinigo     return LLDB_RECORD_RESULT(SBEnvironment(platform_sp->GetEnvironment()));
663ca69be21SWalter Erquinigo   }
664ca69be21SWalter Erquinigo 
665ca69be21SWalter Erquinigo   return LLDB_RECORD_RESULT(SBEnvironment());
666ca69be21SWalter Erquinigo }
667ca69be21SWalter Erquinigo 
668ae211eceSMichal Gorny namespace lldb_private {
669ae211eceSMichal Gorny namespace repro {
670ae211eceSMichal Gorny 
671ae211eceSMichal Gorny template <>
672ae211eceSMichal Gorny void RegisterMethods<SBPlatformConnectOptions>(Registry &R) {
673ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformConnectOptions, (const char *));
674ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformConnectOptions,
675ae211eceSMichal Gorny                             (const lldb::SBPlatformConnectOptions &));
676ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
677ede5cd9aSJonas Devlieghere       SBPlatformConnectOptions &,
678ae211eceSMichal Gorny       SBPlatformConnectOptions, operator=,(
679ae211eceSMichal Gorny                                     const lldb::SBPlatformConnectOptions &));
680ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformConnectOptions, GetURL, ());
681ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, SetURL,
682ae211eceSMichal Gorny                        (const char *));
683ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBPlatformConnectOptions, GetRsyncEnabled, ());
684ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, EnableRsync,
685ae211eceSMichal Gorny                        (const char *, const char *, bool));
686ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, DisableRsync, ());
687ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformConnectOptions,
688ae211eceSMichal Gorny                        GetLocalCacheDirectory, ());
689ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, SetLocalCacheDirectory,
690ae211eceSMichal Gorny                        (const char *));
691ae211eceSMichal Gorny }
692ae211eceSMichal Gorny 
693ae211eceSMichal Gorny template <>
694ae211eceSMichal Gorny void RegisterMethods<SBPlatformShellCommand>(Registry &R) {
695ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformShellCommand, (const char *));
696ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformShellCommand,
697ae211eceSMichal Gorny                             (const lldb::SBPlatformShellCommand &));
698ede5cd9aSJonas Devlieghere   LLDB_REGISTER_METHOD(
699ede5cd9aSJonas Devlieghere       SBPlatformShellCommand &,
700ede5cd9aSJonas Devlieghere       SBPlatformShellCommand, operator=,(const lldb::SBPlatformShellCommand &));
701ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, Clear, ());
702ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand, GetCommand, ());
703ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetCommand,
704ae211eceSMichal Gorny                        (const char *));
705ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand,
706ae211eceSMichal Gorny                        GetWorkingDirectory, ());
707ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetWorkingDirectory,
708ae211eceSMichal Gorny                        (const char *));
709ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatformShellCommand, GetTimeoutSeconds,
710ae211eceSMichal Gorny                        ());
711ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetTimeoutSeconds,
712ae211eceSMichal Gorny                        (uint32_t));
713ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(int, SBPlatformShellCommand, GetSignal, ());
714ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(int, SBPlatformShellCommand, GetStatus, ());
715ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand, GetOutput, ());
716ae211eceSMichal Gorny }
717ae211eceSMichal Gorny 
718ae211eceSMichal Gorny template <>
719ae211eceSMichal Gorny void RegisterMethods<SBPlatform>(Registry &R) {
720ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatform, ());
721ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatform, (const char *));
72266dc4672SJonas Devlieghere   LLDB_REGISTER_CONSTRUCTOR(SBPlatform, (const lldb::SBPlatform &));
723ede5cd9aSJonas Devlieghere   LLDB_REGISTER_METHOD(SBPlatform &,
724ede5cd9aSJonas Devlieghere                        SBPlatform, operator=,(const lldb::SBPlatform &));
725ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBPlatform, IsValid, ());
726ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBPlatform, operator bool, ());
727ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatform, Clear, ());
728ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetName, ());
729ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetWorkingDirectory, ());
730ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBPlatform, SetWorkingDirectory, (const char *));
731ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, ConnectRemote,
732ae211eceSMichal Gorny                        (lldb::SBPlatformConnectOptions &));
733ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatform, DisconnectRemote, ());
734ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBPlatform, IsConnected, ());
735ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetTriple, ());
736ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetOSBuild, ());
737ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetOSDescription, ());
738ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetHostname, ());
739ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSMajorVersion, ());
740ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSMinorVersion, ());
741ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSUpdateVersion, ());
742ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Get,
743ae211eceSMichal Gorny                        (lldb::SBFileSpec &, lldb::SBFileSpec &));
744ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Put,
745ae211eceSMichal Gorny                        (lldb::SBFileSpec &, lldb::SBFileSpec &));
746ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Install,
747ae211eceSMichal Gorny                        (lldb::SBFileSpec &, lldb::SBFileSpec &));
748ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Run,
749ae211eceSMichal Gorny                        (lldb::SBPlatformShellCommand &));
750ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Launch,
751ae211eceSMichal Gorny                        (lldb::SBLaunchInfo &));
752ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Kill, (const lldb::pid_t));
753ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, MakeDirectory,
754ae211eceSMichal Gorny                        (const char *, uint32_t));
755ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetFilePermissions,
756ae211eceSMichal Gorny                        (const char *));
757ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, SetFilePermissions,
758ae211eceSMichal Gorny                        (const char *, uint32_t));
759ca69be21SWalter Erquinigo   LLDB_REGISTER_METHOD(lldb::SBEnvironment, SBPlatform, GetEnvironment, ());
760ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::SBUnixSignals, SBPlatform, GetUnixSignals,
761ae211eceSMichal Gorny                              ());
762*5c2bf577SJonas Devlieghere   LLDB_REGISTER_STATIC_METHOD(lldb::SBPlatform, SBPlatform, GetHostPlatform,
763*5c2bf577SJonas Devlieghere                               ());
764ae211eceSMichal Gorny }
765ae211eceSMichal Gorny 
766ae211eceSMichal Gorny }
767ae211eceSMichal Gorny }
768