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