1fbb76349SGreg Clayton //===-- SBPlatform.cpp ------------------------------------------*- C++ -*-===//
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"
11fbb76349SGreg Clayton #include "lldb/API/SBError.h"
12fbb76349SGreg Clayton #include "lldb/API/SBFileSpec.h"
131ef7b2c8SOleksiy Vyalov #include "lldb/API/SBLaunchInfo.h"
1498d0a4b3SChaoren Lin #include "lldb/API/SBUnixSignals.h"
15fbb76349SGreg Clayton #include "lldb/Host/File.h"
16fbb76349SGreg Clayton #include "lldb/Target/Platform.h"
17b9c1b51eSKate Stone #include "lldb/Target/Target.h"
185f19b907SPavel Labath #include "lldb/Utility/ArchSpec.h"
19145d95c9SPavel Labath #include "lldb/Utility/Args.h"
2097206d57SZachary Turner #include "lldb/Utility/Status.h"
21fbb76349SGreg Clayton 
227d86ee5aSZachary Turner #include "llvm/Support/FileSystem.h"
237d86ee5aSZachary Turner 
241ef7b2c8SOleksiy Vyalov #include <functional>
251ef7b2c8SOleksiy Vyalov 
26fbb76349SGreg Clayton using namespace lldb;
27fbb76349SGreg Clayton using namespace lldb_private;
28fbb76349SGreg Clayton 
29fbb76349SGreg Clayton //----------------------------------------------------------------------
30fbb76349SGreg Clayton // PlatformConnectOptions
31fbb76349SGreg Clayton //----------------------------------------------------------------------
32fbb76349SGreg Clayton struct PlatformConnectOptions {
33b9c1b51eSKate Stone   PlatformConnectOptions(const char *url = NULL)
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 
41b9c1b51eSKate Stone   ~PlatformConnectOptions() {}
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 //----------------------------------------------------------------------
52fbb76349SGreg Clayton // PlatformShellCommand
53fbb76349SGreg Clayton //----------------------------------------------------------------------
54fbb76349SGreg Clayton struct PlatformShellCommand {
55b9c1b51eSKate Stone   PlatformShellCommand(const char *shell_command = NULL)
5619dd1a0eSPavel Labath       : m_command(), m_working_dir(), m_status(0), m_signo(0) {
57fbb76349SGreg Clayton     if (shell_command && shell_command[0])
58fbb76349SGreg Clayton       m_command = shell_command;
59fbb76349SGreg Clayton   }
60fbb76349SGreg Clayton 
61b9c1b51eSKate Stone   ~PlatformShellCommand() {}
62fbb76349SGreg Clayton 
63fbb76349SGreg Clayton   std::string m_command;
64fbb76349SGreg Clayton   std::string m_working_dir;
65fbb76349SGreg Clayton   std::string m_output;
66fbb76349SGreg Clayton   int m_status;
67fbb76349SGreg Clayton   int m_signo;
6819dd1a0eSPavel Labath   Timeout<std::ratio<1>> m_timeout = llvm::None;
69fbb76349SGreg Clayton };
70fbb76349SGreg Clayton //----------------------------------------------------------------------
71fbb76349SGreg Clayton // SBPlatformConnectOptions
72fbb76349SGreg Clayton //----------------------------------------------------------------------
73b9c1b51eSKate Stone SBPlatformConnectOptions::SBPlatformConnectOptions(const char *url)
74baf5664fSJonas Devlieghere     : m_opaque_ptr(new PlatformConnectOptions(url)) {
75baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatformConnectOptions, (const char *), url);
76baf5664fSJonas Devlieghere }
77fbb76349SGreg Clayton 
78b9c1b51eSKate Stone SBPlatformConnectOptions::SBPlatformConnectOptions(
79b9c1b51eSKate Stone     const SBPlatformConnectOptions &rhs)
80b9c1b51eSKate Stone     : m_opaque_ptr(new PlatformConnectOptions()) {
81baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatformConnectOptions,
82baf5664fSJonas Devlieghere                           (const lldb::SBPlatformConnectOptions &), rhs);
83baf5664fSJonas Devlieghere 
84fbb76349SGreg Clayton   *m_opaque_ptr = *rhs.m_opaque_ptr;
85fbb76349SGreg Clayton }
86fbb76349SGreg Clayton 
87b9c1b51eSKate Stone SBPlatformConnectOptions::~SBPlatformConnectOptions() { delete m_opaque_ptr; }
88fbb76349SGreg Clayton 
89b9c1b51eSKate Stone void SBPlatformConnectOptions::operator=(const SBPlatformConnectOptions &rhs) {
90baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(
91baf5664fSJonas Devlieghere       void,
92baf5664fSJonas Devlieghere       SBPlatformConnectOptions, operator=,(
93baf5664fSJonas Devlieghere                                     const lldb::SBPlatformConnectOptions &),
94baf5664fSJonas Devlieghere       rhs);
95baf5664fSJonas Devlieghere 
96fbb76349SGreg Clayton   *m_opaque_ptr = *rhs.m_opaque_ptr;
97fbb76349SGreg Clayton }
98fbb76349SGreg Clayton 
99b9c1b51eSKate Stone const char *SBPlatformConnectOptions::GetURL() {
100baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformConnectOptions, GetURL);
101baf5664fSJonas Devlieghere 
102fbb76349SGreg Clayton   if (m_opaque_ptr->m_url.empty())
103fbb76349SGreg Clayton     return NULL;
104fbb76349SGreg Clayton   return m_opaque_ptr->m_url.c_str();
105fbb76349SGreg Clayton }
106fbb76349SGreg Clayton 
107b9c1b51eSKate Stone void SBPlatformConnectOptions::SetURL(const char *url) {
108baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformConnectOptions, SetURL, (const char *),
109baf5664fSJonas Devlieghere                      url);
110baf5664fSJonas Devlieghere 
111fbb76349SGreg Clayton   if (url && url[0])
112fbb76349SGreg Clayton     m_opaque_ptr->m_url = url;
113fbb76349SGreg Clayton   else
114fbb76349SGreg Clayton     m_opaque_ptr->m_url.clear();
115fbb76349SGreg Clayton }
116fbb76349SGreg Clayton 
117b9c1b51eSKate Stone bool SBPlatformConnectOptions::GetRsyncEnabled() {
118baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBPlatformConnectOptions, GetRsyncEnabled);
119baf5664fSJonas Devlieghere 
120fbb76349SGreg Clayton   return m_opaque_ptr->m_rsync_enabled;
121fbb76349SGreg Clayton }
122fbb76349SGreg Clayton 
123b9c1b51eSKate Stone void SBPlatformConnectOptions::EnableRsync(
124b9c1b51eSKate Stone     const char *options, const char *remote_path_prefix,
125b9c1b51eSKate Stone     bool omit_hostname_from_remote_path) {
126baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformConnectOptions, EnableRsync,
127baf5664fSJonas Devlieghere                      (const char *, const char *, bool), options,
128baf5664fSJonas Devlieghere                      remote_path_prefix, omit_hostname_from_remote_path);
129baf5664fSJonas Devlieghere 
130fbb76349SGreg Clayton   m_opaque_ptr->m_rsync_enabled = true;
131b9c1b51eSKate Stone   m_opaque_ptr->m_rsync_omit_hostname_from_remote_path =
132b9c1b51eSKate Stone       omit_hostname_from_remote_path;
133fbb76349SGreg Clayton   if (remote_path_prefix && remote_path_prefix[0])
134fbb76349SGreg Clayton     m_opaque_ptr->m_rsync_remote_path_prefix = remote_path_prefix;
135fbb76349SGreg Clayton   else
136fbb76349SGreg Clayton     m_opaque_ptr->m_rsync_remote_path_prefix.clear();
137fbb76349SGreg Clayton 
138fbb76349SGreg Clayton   if (options && options[0])
139fbb76349SGreg Clayton     m_opaque_ptr->m_rsync_options = options;
140fbb76349SGreg Clayton   else
141fbb76349SGreg Clayton     m_opaque_ptr->m_rsync_options.clear();
142fbb76349SGreg Clayton }
143fbb76349SGreg Clayton 
144b9c1b51eSKate Stone void SBPlatformConnectOptions::DisableRsync() {
145baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatformConnectOptions, DisableRsync);
146baf5664fSJonas Devlieghere 
147fbb76349SGreg Clayton   m_opaque_ptr->m_rsync_enabled = false;
148fbb76349SGreg Clayton }
149fbb76349SGreg Clayton 
150b9c1b51eSKate Stone const char *SBPlatformConnectOptions::GetLocalCacheDirectory() {
151baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformConnectOptions,
152baf5664fSJonas Devlieghere                              GetLocalCacheDirectory);
153baf5664fSJonas Devlieghere 
154fbb76349SGreg Clayton   return m_opaque_ptr->m_local_cache_directory.GetCString();
155fbb76349SGreg Clayton }
156fbb76349SGreg Clayton 
157b9c1b51eSKate Stone void SBPlatformConnectOptions::SetLocalCacheDirectory(const char *path) {
158baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformConnectOptions, SetLocalCacheDirectory,
159baf5664fSJonas Devlieghere                      (const char *), path);
160baf5664fSJonas Devlieghere 
161fbb76349SGreg Clayton   if (path && path[0])
162fbb76349SGreg Clayton     m_opaque_ptr->m_local_cache_directory.SetCString(path);
163fbb76349SGreg Clayton   else
164fbb76349SGreg Clayton     m_opaque_ptr->m_local_cache_directory = ConstString();
165fbb76349SGreg Clayton }
166fbb76349SGreg Clayton 
167fbb76349SGreg Clayton //----------------------------------------------------------------------
168fbb76349SGreg Clayton // SBPlatformShellCommand
169fbb76349SGreg Clayton //----------------------------------------------------------------------
170b9c1b51eSKate Stone SBPlatformShellCommand::SBPlatformShellCommand(const char *shell_command)
171baf5664fSJonas Devlieghere     : m_opaque_ptr(new PlatformShellCommand(shell_command)) {
172baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatformShellCommand, (const char *),
173baf5664fSJonas Devlieghere                           shell_command);
174baf5664fSJonas Devlieghere }
175fbb76349SGreg Clayton 
176b9c1b51eSKate Stone SBPlatformShellCommand::SBPlatformShellCommand(
177b9c1b51eSKate Stone     const SBPlatformShellCommand &rhs)
178b9c1b51eSKate Stone     : m_opaque_ptr(new PlatformShellCommand()) {
179baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatformShellCommand,
180baf5664fSJonas Devlieghere                           (const lldb::SBPlatformShellCommand &), rhs);
181baf5664fSJonas Devlieghere 
182fbb76349SGreg Clayton   *m_opaque_ptr = *rhs.m_opaque_ptr;
183fbb76349SGreg Clayton }
184fbb76349SGreg Clayton 
185b9c1b51eSKate Stone SBPlatformShellCommand::~SBPlatformShellCommand() { delete m_opaque_ptr; }
186fbb76349SGreg Clayton 
187b9c1b51eSKate Stone void SBPlatformShellCommand::Clear() {
188baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatformShellCommand, Clear);
189baf5664fSJonas Devlieghere 
1903a29f8b9SPavel Labath   m_opaque_ptr->m_output = std::string();
191fbb76349SGreg Clayton   m_opaque_ptr->m_status = 0;
192fbb76349SGreg Clayton   m_opaque_ptr->m_signo = 0;
193fbb76349SGreg Clayton }
194fbb76349SGreg Clayton 
195b9c1b51eSKate Stone const char *SBPlatformShellCommand::GetCommand() {
196baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformShellCommand, GetCommand);
197baf5664fSJonas Devlieghere 
198fbb76349SGreg Clayton   if (m_opaque_ptr->m_command.empty())
199fbb76349SGreg Clayton     return NULL;
200fbb76349SGreg Clayton   return m_opaque_ptr->m_command.c_str();
201fbb76349SGreg Clayton }
202fbb76349SGreg Clayton 
203b9c1b51eSKate Stone void SBPlatformShellCommand::SetCommand(const char *shell_command) {
204baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformShellCommand, SetCommand, (const char *),
205baf5664fSJonas Devlieghere                      shell_command);
206baf5664fSJonas Devlieghere 
207fbb76349SGreg Clayton   if (shell_command && shell_command[0])
208fbb76349SGreg Clayton     m_opaque_ptr->m_command = shell_command;
209fbb76349SGreg Clayton   else
210fbb76349SGreg Clayton     m_opaque_ptr->m_command.clear();
211fbb76349SGreg Clayton }
212fbb76349SGreg Clayton 
213b9c1b51eSKate Stone const char *SBPlatformShellCommand::GetWorkingDirectory() {
214baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformShellCommand,
215baf5664fSJonas Devlieghere                              GetWorkingDirectory);
216baf5664fSJonas Devlieghere 
217fbb76349SGreg Clayton   if (m_opaque_ptr->m_working_dir.empty())
218fbb76349SGreg Clayton     return NULL;
219fbb76349SGreg Clayton   return m_opaque_ptr->m_working_dir.c_str();
220fbb76349SGreg Clayton }
221fbb76349SGreg Clayton 
222b9c1b51eSKate Stone void SBPlatformShellCommand::SetWorkingDirectory(const char *path) {
223baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformShellCommand, SetWorkingDirectory,
224baf5664fSJonas Devlieghere                      (const char *), path);
225baf5664fSJonas Devlieghere 
226fbb76349SGreg Clayton   if (path && path[0])
227fbb76349SGreg Clayton     m_opaque_ptr->m_working_dir = path;
228fbb76349SGreg Clayton   else
229fbb76349SGreg Clayton     m_opaque_ptr->m_working_dir.clear();
230fbb76349SGreg Clayton }
231fbb76349SGreg Clayton 
232b9c1b51eSKate Stone uint32_t SBPlatformShellCommand::GetTimeoutSeconds() {
233baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatformShellCommand,
234baf5664fSJonas Devlieghere                              GetTimeoutSeconds);
235baf5664fSJonas Devlieghere 
23619dd1a0eSPavel Labath   if (m_opaque_ptr->m_timeout)
23719dd1a0eSPavel Labath     return m_opaque_ptr->m_timeout->count();
23819dd1a0eSPavel Labath   return UINT32_MAX;
239fbb76349SGreg Clayton }
240fbb76349SGreg Clayton 
241b9c1b51eSKate Stone void SBPlatformShellCommand::SetTimeoutSeconds(uint32_t sec) {
242baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(void, SBPlatformShellCommand, SetTimeoutSeconds,
243baf5664fSJonas Devlieghere                      (uint32_t), sec);
244baf5664fSJonas Devlieghere 
24519dd1a0eSPavel Labath   if (sec == UINT32_MAX)
24619dd1a0eSPavel Labath     m_opaque_ptr->m_timeout = llvm::None;
24719dd1a0eSPavel Labath   else
24819dd1a0eSPavel Labath     m_opaque_ptr->m_timeout = std::chrono::seconds(sec);
249fbb76349SGreg Clayton }
250fbb76349SGreg Clayton 
251baf5664fSJonas Devlieghere int SBPlatformShellCommand::GetSignal() {
252baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(int, SBPlatformShellCommand, GetSignal);
253fbb76349SGreg Clayton 
254baf5664fSJonas Devlieghere   return m_opaque_ptr->m_signo;
255baf5664fSJonas Devlieghere }
256baf5664fSJonas Devlieghere 
257baf5664fSJonas Devlieghere int SBPlatformShellCommand::GetStatus() {
258baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(int, SBPlatformShellCommand, GetStatus);
259baf5664fSJonas Devlieghere 
260baf5664fSJonas Devlieghere   return m_opaque_ptr->m_status;
261baf5664fSJonas Devlieghere }
262fbb76349SGreg Clayton 
263b9c1b51eSKate Stone const char *SBPlatformShellCommand::GetOutput() {
264baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformShellCommand, GetOutput);
265baf5664fSJonas Devlieghere 
266fbb76349SGreg Clayton   if (m_opaque_ptr->m_output.empty())
267fbb76349SGreg Clayton     return NULL;
268fbb76349SGreg Clayton   return m_opaque_ptr->m_output.c_str();
269fbb76349SGreg Clayton }
270fbb76349SGreg Clayton 
271fbb76349SGreg Clayton //----------------------------------------------------------------------
272fbb76349SGreg Clayton // SBPlatform
273fbb76349SGreg Clayton //----------------------------------------------------------------------
274baf5664fSJonas Devlieghere SBPlatform::SBPlatform() : m_opaque_sp() {
275baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBPlatform);
276baf5664fSJonas Devlieghere }
277fbb76349SGreg Clayton 
278b9c1b51eSKate Stone SBPlatform::SBPlatform(const char *platform_name) : m_opaque_sp() {
279baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBPlatform, (const char *), platform_name);
280baf5664fSJonas Devlieghere 
28197206d57SZachary Turner   Status error;
282615eb7e6SGreg Clayton   if (platform_name && platform_name[0])
283615eb7e6SGreg Clayton     m_opaque_sp = Platform::Create(ConstString(platform_name), error);
284fbb76349SGreg Clayton }
285fbb76349SGreg Clayton 
286b9c1b51eSKate Stone SBPlatform::~SBPlatform() {}
287fbb76349SGreg Clayton 
288baf5664fSJonas Devlieghere bool SBPlatform::IsValid() const {
289baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBPlatform, IsValid);
2907f5237bcSPavel Labath   return this->operator bool();
2917f5237bcSPavel Labath }
2927f5237bcSPavel Labath SBPlatform::operator bool() const {
2937f5237bcSPavel Labath   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBPlatform, operator bool);
294fbb76349SGreg Clayton 
295baf5664fSJonas Devlieghere   return m_opaque_sp.get() != NULL;
296baf5664fSJonas Devlieghere }
297baf5664fSJonas Devlieghere 
298baf5664fSJonas Devlieghere void SBPlatform::Clear() {
299baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatform, Clear);
300baf5664fSJonas Devlieghere 
301baf5664fSJonas Devlieghere   m_opaque_sp.reset();
302baf5664fSJonas Devlieghere }
303fbb76349SGreg Clayton 
304b9c1b51eSKate Stone const char *SBPlatform::GetName() {
305baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetName);
306baf5664fSJonas Devlieghere 
307fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
308fbb76349SGreg Clayton   if (platform_sp)
309fbb76349SGreg Clayton     return platform_sp->GetName().GetCString();
310fbb76349SGreg Clayton   return NULL;
311fbb76349SGreg Clayton }
312fbb76349SGreg Clayton 
313b9c1b51eSKate Stone lldb::PlatformSP SBPlatform::GetSP() const { return m_opaque_sp; }
314fbb76349SGreg Clayton 
315b9c1b51eSKate Stone void SBPlatform::SetSP(const lldb::PlatformSP &platform_sp) {
316fbb76349SGreg Clayton   m_opaque_sp = platform_sp;
317fbb76349SGreg Clayton }
318fbb76349SGreg Clayton 
319b9c1b51eSKate Stone const char *SBPlatform::GetWorkingDirectory() {
320baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetWorkingDirectory);
321baf5664fSJonas Devlieghere 
322fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
323fbb76349SGreg Clayton   if (platform_sp)
324fbb76349SGreg Clayton     return platform_sp->GetWorkingDirectory().GetCString();
325fbb76349SGreg Clayton   return NULL;
326fbb76349SGreg Clayton }
327fbb76349SGreg Clayton 
328b9c1b51eSKate Stone bool SBPlatform::SetWorkingDirectory(const char *path) {
329baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(bool, SBPlatform, SetWorkingDirectory, (const char *),
330baf5664fSJonas Devlieghere                      path);
331baf5664fSJonas Devlieghere 
332fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
333b9c1b51eSKate Stone   if (platform_sp) {
334fbb76349SGreg Clayton     if (path)
3358f3be7a3SJonas Devlieghere       platform_sp->SetWorkingDirectory(FileSpec(path));
336fbb76349SGreg Clayton     else
3378f3be7a3SJonas Devlieghere       platform_sp->SetWorkingDirectory(FileSpec());
338fbb76349SGreg Clayton     return true;
339fbb76349SGreg Clayton   }
340fbb76349SGreg Clayton   return false;
341fbb76349SGreg Clayton }
342fbb76349SGreg Clayton 
343b9c1b51eSKate Stone SBError SBPlatform::ConnectRemote(SBPlatformConnectOptions &connect_options) {
344baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, ConnectRemote,
345baf5664fSJonas Devlieghere                      (lldb::SBPlatformConnectOptions &), connect_options);
346baf5664fSJonas Devlieghere 
347fbb76349SGreg Clayton   SBError sb_error;
348fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
349b9c1b51eSKate Stone   if (platform_sp && connect_options.GetURL()) {
350fbb76349SGreg Clayton     Args args;
351ecbb0bb1SZachary Turner     args.AppendArgument(
352ecbb0bb1SZachary Turner         llvm::StringRef::withNullAsEmpty(connect_options.GetURL()));
353fbb76349SGreg Clayton     sb_error.ref() = platform_sp->ConnectRemote(args);
354b9c1b51eSKate Stone   } else {
355fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
356fbb76349SGreg Clayton   }
357baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
358fbb76349SGreg Clayton }
359fbb76349SGreg Clayton 
360b9c1b51eSKate Stone void SBPlatform::DisconnectRemote() {
361baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatform, DisconnectRemote);
362baf5664fSJonas Devlieghere 
363fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
364fbb76349SGreg Clayton   if (platform_sp)
365fbb76349SGreg Clayton     platform_sp->DisconnectRemote();
366fbb76349SGreg Clayton }
367fbb76349SGreg Clayton 
368b9c1b51eSKate Stone bool SBPlatform::IsConnected() {
369baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBPlatform, IsConnected);
370baf5664fSJonas Devlieghere 
371fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
372fbb76349SGreg Clayton   if (platform_sp)
373ca38766cSJim Ingham     return platform_sp->IsConnected();
374fbb76349SGreg Clayton   return false;
375fbb76349SGreg Clayton }
376fbb76349SGreg Clayton 
377b9c1b51eSKate Stone const char *SBPlatform::GetTriple() {
378baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetTriple);
379baf5664fSJonas Devlieghere 
380fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
381b9c1b51eSKate Stone   if (platform_sp) {
382ccd28a14STamas Berghammer     ArchSpec arch(platform_sp->GetSystemArchitecture());
383b9c1b51eSKate Stone     if (arch.IsValid()) {
384b9c1b51eSKate Stone       // Const-ify the string so we don't need to worry about the lifetime of
385b9c1b51eSKate Stone       // the string
386fbb76349SGreg Clayton       return ConstString(arch.GetTriple().getTriple().c_str()).GetCString();
387fbb76349SGreg Clayton     }
388fbb76349SGreg Clayton   }
389fbb76349SGreg Clayton   return NULL;
390fbb76349SGreg Clayton }
391fbb76349SGreg Clayton 
392b9c1b51eSKate Stone const char *SBPlatform::GetOSBuild() {
393baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetOSBuild);
394baf5664fSJonas Devlieghere 
395fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
396b9c1b51eSKate Stone   if (platform_sp) {
397fbb76349SGreg Clayton     std::string s;
398b9c1b51eSKate Stone     if (platform_sp->GetOSBuildString(s)) {
399b9c1b51eSKate Stone       if (!s.empty()) {
400b9c1b51eSKate Stone         // Const-ify the string so we don't need to worry about the lifetime of
401b9c1b51eSKate Stone         // the string
402fbb76349SGreg Clayton         return ConstString(s.c_str()).GetCString();
403fbb76349SGreg Clayton       }
404fbb76349SGreg Clayton     }
405fbb76349SGreg Clayton   }
406fbb76349SGreg Clayton   return NULL;
407fbb76349SGreg Clayton }
408fbb76349SGreg Clayton 
409b9c1b51eSKate Stone const char *SBPlatform::GetOSDescription() {
410baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetOSDescription);
411baf5664fSJonas Devlieghere 
412fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
413b9c1b51eSKate Stone   if (platform_sp) {
414fbb76349SGreg Clayton     std::string s;
415b9c1b51eSKate Stone     if (platform_sp->GetOSKernelDescription(s)) {
416b9c1b51eSKate Stone       if (!s.empty()) {
417b9c1b51eSKate Stone         // Const-ify the string so we don't need to worry about the lifetime of
418b9c1b51eSKate Stone         // the string
419fbb76349SGreg Clayton         return ConstString(s.c_str()).GetCString();
420fbb76349SGreg Clayton       }
421fbb76349SGreg Clayton     }
422fbb76349SGreg Clayton   }
423fbb76349SGreg Clayton   return NULL;
424fbb76349SGreg Clayton }
425fbb76349SGreg Clayton 
426b9c1b51eSKate Stone const char *SBPlatform::GetHostname() {
427baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetHostname);
428baf5664fSJonas Devlieghere 
429fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
430fbb76349SGreg Clayton   if (platform_sp)
431fbb76349SGreg Clayton     return platform_sp->GetHostname();
432fbb76349SGreg Clayton   return NULL;
433fbb76349SGreg Clayton }
434fbb76349SGreg Clayton 
435b9c1b51eSKate Stone uint32_t SBPlatform::GetOSMajorVersion() {
436baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSMajorVersion);
437baf5664fSJonas Devlieghere 
4382272c481SPavel Labath   llvm::VersionTuple version;
4392272c481SPavel Labath   if (PlatformSP platform_sp = GetSP())
4402272c481SPavel Labath     version = platform_sp->GetOSVersion();
4412272c481SPavel Labath   return version.empty() ? UINT32_MAX : version.getMajor();
442fbb76349SGreg Clayton }
443fbb76349SGreg Clayton 
444b9c1b51eSKate Stone uint32_t SBPlatform::GetOSMinorVersion() {
445baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSMinorVersion);
446baf5664fSJonas Devlieghere 
4472272c481SPavel Labath   llvm::VersionTuple version;
4482272c481SPavel Labath   if (PlatformSP platform_sp = GetSP())
4492272c481SPavel Labath     version = platform_sp->GetOSVersion();
4502272c481SPavel Labath   return version.getMinor().getValueOr(UINT32_MAX);
451fbb76349SGreg Clayton }
452fbb76349SGreg Clayton 
453b9c1b51eSKate Stone uint32_t SBPlatform::GetOSUpdateVersion() {
454baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSUpdateVersion);
455baf5664fSJonas Devlieghere 
4562272c481SPavel Labath   llvm::VersionTuple version;
4572272c481SPavel Labath   if (PlatformSP platform_sp = GetSP())
4582272c481SPavel Labath     version = platform_sp->GetOSVersion();
4592272c481SPavel Labath   return version.getSubminor().getValueOr(UINT32_MAX);
460fbb76349SGreg Clayton }
461fbb76349SGreg Clayton 
462b9c1b51eSKate Stone SBError SBPlatform::Get(SBFileSpec &src, SBFileSpec &dst) {
463baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Get,
464baf5664fSJonas Devlieghere                      (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst);
465baf5664fSJonas Devlieghere 
466fbb76349SGreg Clayton   SBError sb_error;
467fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
468b9c1b51eSKate Stone   if (platform_sp) {
469fbb76349SGreg Clayton     sb_error.ref() = platform_sp->GetFile(src.ref(), dst.ref());
470b9c1b51eSKate Stone   } else {
471fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
472fbb76349SGreg Clayton   }
473baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
474fbb76349SGreg Clayton }
475fbb76349SGreg Clayton 
476b9c1b51eSKate Stone SBError SBPlatform::Put(SBFileSpec &src, SBFileSpec &dst) {
477baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Put,
478baf5664fSJonas Devlieghere                      (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst);
479baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
480baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
481b9c1b51eSKate Stone         if (src.Exists()) {
482baf5664fSJonas Devlieghere           uint32_t permissions =
483baf5664fSJonas Devlieghere               FileSystem::Instance().GetPermissions(src.ref());
484b9c1b51eSKate Stone           if (permissions == 0) {
4853a58d898SJonas Devlieghere             if (FileSystem::Instance().IsDirectory(src.ref()))
486fbb76349SGreg Clayton               permissions = eFilePermissionsDirectoryDefault;
487fbb76349SGreg Clayton             else
488fbb76349SGreg Clayton               permissions = eFilePermissionsFileDefault;
489fbb76349SGreg Clayton           }
490fbb76349SGreg Clayton 
4911ef7b2c8SOleksiy Vyalov           return platform_sp->PutFile(src.ref(), dst.ref(), permissions);
492fbb76349SGreg Clayton         }
4931ef7b2c8SOleksiy Vyalov 
49497206d57SZachary Turner         Status error;
495b9c1b51eSKate Stone         error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'",
496b9c1b51eSKate Stone                                        src.ref().GetPath().c_str());
4971ef7b2c8SOleksiy Vyalov         return error;
498baf5664fSJonas Devlieghere       }));
499fbb76349SGreg Clayton }
500fbb76349SGreg Clayton 
501b9c1b51eSKate Stone SBError SBPlatform::Install(SBFileSpec &src, SBFileSpec &dst) {
502baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Install,
503baf5664fSJonas Devlieghere                      (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst);
504baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
505baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
506fbb76349SGreg Clayton         if (src.Exists())
5071ef7b2c8SOleksiy Vyalov           return platform_sp->Install(src.ref(), dst.ref());
5081ef7b2c8SOleksiy Vyalov 
50997206d57SZachary Turner         Status error;
510b9c1b51eSKate Stone         error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'",
511b9c1b51eSKate Stone                                        src.ref().GetPath().c_str());
5121ef7b2c8SOleksiy Vyalov         return error;
513baf5664fSJonas Devlieghere       }));
514fbb76349SGreg Clayton }
515fbb76349SGreg Clayton 
516b9c1b51eSKate Stone SBError SBPlatform::Run(SBPlatformShellCommand &shell_command) {
517baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Run,
518baf5664fSJonas Devlieghere                      (lldb::SBPlatformShellCommand &), shell_command);
519baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(ExecuteConnected([&](const lldb::PlatformSP
520baf5664fSJonas Devlieghere                                                      &platform_sp) {
521fbb76349SGreg Clayton     const char *command = shell_command.GetCommand();
5221ef7b2c8SOleksiy Vyalov     if (!command)
52397206d57SZachary Turner       return Status("invalid shell command (empty)");
5241ef7b2c8SOleksiy Vyalov 
525fbb76349SGreg Clayton     const char *working_dir = shell_command.GetWorkingDirectory();
526b9c1b51eSKate Stone     if (working_dir == NULL) {
527fbb76349SGreg Clayton       working_dir = platform_sp->GetWorkingDirectory().GetCString();
528fbb76349SGreg Clayton       if (working_dir)
529fbb76349SGreg Clayton         shell_command.SetWorkingDirectory(working_dir);
530fbb76349SGreg Clayton     }
5318f3be7a3SJonas Devlieghere     return platform_sp->RunShellCommand(command, FileSpec(working_dir),
532fbb76349SGreg Clayton                                         &shell_command.m_opaque_ptr->m_status,
533fbb76349SGreg Clayton                                         &shell_command.m_opaque_ptr->m_signo,
534fbb76349SGreg Clayton                                         &shell_command.m_opaque_ptr->m_output,
53519dd1a0eSPavel Labath                                         shell_command.m_opaque_ptr->m_timeout);
536baf5664fSJonas Devlieghere   }));
537fbb76349SGreg Clayton }
5381ef7b2c8SOleksiy Vyalov 
539b9c1b51eSKate Stone SBError SBPlatform::Launch(SBLaunchInfo &launch_info) {
540baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Launch, (lldb::SBLaunchInfo &),
541baf5664fSJonas Devlieghere                      launch_info);
542baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
543baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
54462930e57SPavel Labath         ProcessLaunchInfo info = launch_info.ref();
54562930e57SPavel Labath         Status error = platform_sp->LaunchProcess(info);
54662930e57SPavel Labath         launch_info.set_ref(info);
54762930e57SPavel Labath         return error;
548baf5664fSJonas Devlieghere       }));
5491ef7b2c8SOleksiy Vyalov }
5501ef7b2c8SOleksiy Vyalov 
551b9c1b51eSKate Stone SBError SBPlatform::Kill(const lldb::pid_t pid) {
552baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Kill, (const lldb::pid_t), pid);
553baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(
554baf5664fSJonas Devlieghere       ExecuteConnected([&](const lldb::PlatformSP &platform_sp) {
5551ef7b2c8SOleksiy Vyalov         return platform_sp->KillProcess(pid);
556baf5664fSJonas Devlieghere       }));
5571ef7b2c8SOleksiy Vyalov }
5581ef7b2c8SOleksiy Vyalov 
559b9c1b51eSKate Stone SBError SBPlatform::ExecuteConnected(
56097206d57SZachary Turner     const std::function<Status(const lldb::PlatformSP &)> &func) {
5611ef7b2c8SOleksiy Vyalov   SBError sb_error;
5621ef7b2c8SOleksiy Vyalov   const auto platform_sp(GetSP());
563b9c1b51eSKate Stone   if (platform_sp) {
5641ef7b2c8SOleksiy Vyalov     if (platform_sp->IsConnected())
5651ef7b2c8SOleksiy Vyalov       sb_error.ref() = func(platform_sp);
5661ef7b2c8SOleksiy Vyalov     else
567fbb76349SGreg Clayton       sb_error.SetErrorString("not connected");
568b9c1b51eSKate Stone   } else
569fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
5701ef7b2c8SOleksiy Vyalov 
571fbb76349SGreg Clayton   return sb_error;
572fbb76349SGreg Clayton }
573fbb76349SGreg Clayton 
574b9c1b51eSKate Stone SBError SBPlatform::MakeDirectory(const char *path, uint32_t file_permissions) {
575baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, MakeDirectory,
576baf5664fSJonas Devlieghere                      (const char *, uint32_t), path, file_permissions);
577baf5664fSJonas Devlieghere 
578fbb76349SGreg Clayton   SBError sb_error;
579fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
580b9c1b51eSKate Stone   if (platform_sp) {
581b9c1b51eSKate Stone     sb_error.ref() =
5828f3be7a3SJonas Devlieghere         platform_sp->MakeDirectory(FileSpec(path), file_permissions);
583b9c1b51eSKate Stone   } else {
584fbb76349SGreg Clayton     sb_error.SetErrorString("invalid platform");
585fbb76349SGreg Clayton   }
586baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(sb_error);
587fbb76349SGreg Clayton }
588fbb76349SGreg Clayton 
589b9c1b51eSKate Stone uint32_t SBPlatform::GetFilePermissions(const char *path) {
590baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(uint32_t, SBPlatform, GetFilePermissions, (const char *),
591baf5664fSJonas Devlieghere                      path);
592baf5664fSJonas Devlieghere 
593fbb76349SGreg Clayton   PlatformSP platform_sp(GetSP());
594b9c1b51eSKate Stone   if (platform_sp) {
595fbb76349SGreg Clayton     uint32_t file_permissions = 0;
5968f3be7a3SJonas Devlieghere     platform_sp->GetFilePermissions(FileSpec(path), file_permissions);
597fbb76349SGreg Clayton     return file_permissions;
598fbb76349SGreg Clayton   }
599fbb76349SGreg Clayton   return 0;
600fbb76349SGreg Clayton }
601fbb76349SGreg Clayton 
602b9c1b51eSKate Stone SBError SBPlatform::SetFilePermissions(const char *path,
603b9c1b51eSKate Stone                                        uint32_t file_permissions) {
604baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, SetFilePermissions,
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) {
6108f3be7a3SJonas Devlieghere     sb_error.ref() =
6118f3be7a3SJonas Devlieghere         platform_sp->SetFilePermissions(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 SBUnixSignals SBPlatform::GetUnixSignals() const {
619baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBUnixSignals, SBPlatform,
620baf5664fSJonas Devlieghere                                    GetUnixSignals);
62198d0a4b3SChaoren Lin 
622baf5664fSJonas Devlieghere   if (auto platform_sp = GetSP())
623baf5664fSJonas Devlieghere     return LLDB_RECORD_RESULT(SBUnixSignals{platform_sp});
624baf5664fSJonas Devlieghere 
625baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(SBUnixSignals());
62698d0a4b3SChaoren Lin }
627*ae211eceSMichal Gorny 
628*ae211eceSMichal Gorny namespace lldb_private {
629*ae211eceSMichal Gorny namespace repro {
630*ae211eceSMichal Gorny 
631*ae211eceSMichal Gorny template <>
632*ae211eceSMichal Gorny void RegisterMethods<SBPlatformConnectOptions>(Registry &R) {
633*ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformConnectOptions, (const char *));
634*ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformConnectOptions,
635*ae211eceSMichal Gorny                             (const lldb::SBPlatformConnectOptions &));
636*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(
637*ae211eceSMichal Gorny       void,
638*ae211eceSMichal Gorny       SBPlatformConnectOptions, operator=,(
639*ae211eceSMichal Gorny                                     const lldb::SBPlatformConnectOptions &));
640*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformConnectOptions, GetURL, ());
641*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, SetURL,
642*ae211eceSMichal Gorny                        (const char *));
643*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBPlatformConnectOptions, GetRsyncEnabled, ());
644*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, EnableRsync,
645*ae211eceSMichal Gorny                        (const char *, const char *, bool));
646*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, DisableRsync, ());
647*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformConnectOptions,
648*ae211eceSMichal Gorny                        GetLocalCacheDirectory, ());
649*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, SetLocalCacheDirectory,
650*ae211eceSMichal Gorny                        (const char *));
651*ae211eceSMichal Gorny }
652*ae211eceSMichal Gorny 
653*ae211eceSMichal Gorny template <>
654*ae211eceSMichal Gorny void RegisterMethods<SBPlatformShellCommand>(Registry &R) {
655*ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformShellCommand, (const char *));
656*ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatformShellCommand,
657*ae211eceSMichal Gorny                             (const lldb::SBPlatformShellCommand &));
658*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, Clear, ());
659*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand, GetCommand, ());
660*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetCommand,
661*ae211eceSMichal Gorny                        (const char *));
662*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand,
663*ae211eceSMichal Gorny                        GetWorkingDirectory, ());
664*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetWorkingDirectory,
665*ae211eceSMichal Gorny                        (const char *));
666*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatformShellCommand, GetTimeoutSeconds,
667*ae211eceSMichal Gorny                        ());
668*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetTimeoutSeconds,
669*ae211eceSMichal Gorny                        (uint32_t));
670*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(int, SBPlatformShellCommand, GetSignal, ());
671*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(int, SBPlatformShellCommand, GetStatus, ());
672*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand, GetOutput, ());
673*ae211eceSMichal Gorny }
674*ae211eceSMichal Gorny 
675*ae211eceSMichal Gorny template <>
676*ae211eceSMichal Gorny void RegisterMethods<SBPlatform>(Registry &R) {
677*ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatform, ());
678*ae211eceSMichal Gorny   LLDB_REGISTER_CONSTRUCTOR(SBPlatform, (const char *));
679*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBPlatform, IsValid, ());
680*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(bool, SBPlatform, operator bool, ());
681*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatform, Clear, ());
682*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetName, ());
683*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetWorkingDirectory, ());
684*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBPlatform, SetWorkingDirectory, (const char *));
685*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, ConnectRemote,
686*ae211eceSMichal Gorny                        (lldb::SBPlatformConnectOptions &));
687*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(void, SBPlatform, DisconnectRemote, ());
688*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(bool, SBPlatform, IsConnected, ());
689*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetTriple, ());
690*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetOSBuild, ());
691*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetOSDescription, ());
692*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(const char *, SBPlatform, GetHostname, ());
693*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSMajorVersion, ());
694*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSMinorVersion, ());
695*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSUpdateVersion, ());
696*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Get,
697*ae211eceSMichal Gorny                        (lldb::SBFileSpec &, lldb::SBFileSpec &));
698*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Put,
699*ae211eceSMichal Gorny                        (lldb::SBFileSpec &, lldb::SBFileSpec &));
700*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Install,
701*ae211eceSMichal Gorny                        (lldb::SBFileSpec &, lldb::SBFileSpec &));
702*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Run,
703*ae211eceSMichal Gorny                        (lldb::SBPlatformShellCommand &));
704*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Launch,
705*ae211eceSMichal Gorny                        (lldb::SBLaunchInfo &));
706*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Kill, (const lldb::pid_t));
707*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, MakeDirectory,
708*ae211eceSMichal Gorny                        (const char *, uint32_t));
709*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetFilePermissions,
710*ae211eceSMichal Gorny                        (const char *));
711*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, SetFilePermissions,
712*ae211eceSMichal Gorny                        (const char *, uint32_t));
713*ae211eceSMichal Gorny   LLDB_REGISTER_METHOD_CONST(lldb::SBUnixSignals, SBPlatform, GetUnixSignals,
714*ae211eceSMichal Gorny                              ());
715*ae211eceSMichal Gorny }
716*ae211eceSMichal Gorny 
717*ae211eceSMichal Gorny }
718*ae211eceSMichal Gorny }
719