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(), 359494c510SJonas Devlieghere 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; 469494c510SJonas Devlieghere bool m_rsync_enabled = false; 479494c510SJonas Devlieghere bool m_rsync_omit_hostname_from_remote_path = false; 48fbb76349SGreg Clayton ConstString m_local_cache_directory; 49fbb76349SGreg Clayton }; 50fbb76349SGreg Clayton 51fbb76349SGreg Clayton // PlatformShellCommand 52fbb76349SGreg Clayton struct PlatformShellCommand { 53addb5148SMed Ismail Bennani PlatformShellCommand(llvm::StringRef shell_interpreter, 54addb5148SMed Ismail Bennani llvm::StringRef shell_command) 5519dd1a0eSPavel Labath : m_command(), m_working_dir(), m_status(0), m_signo(0) { 56addb5148SMed Ismail Bennani if (!shell_interpreter.empty()) 57addb5148SMed Ismail Bennani m_shell = shell_interpreter.str(); 58addb5148SMed Ismail Bennani 59addb5148SMed Ismail Bennani if (!m_shell.empty() && !shell_command.empty()) 60addb5148SMed Ismail Bennani m_command = shell_command.str(); 61addb5148SMed Ismail Bennani } 62addb5148SMed Ismail Bennani 63addb5148SMed Ismail Bennani PlatformShellCommand(llvm::StringRef shell_command = llvm::StringRef()) 649494c510SJonas Devlieghere : m_shell(), m_command(), m_working_dir() { 65addb5148SMed Ismail Bennani if (!shell_command.empty()) 66addb5148SMed Ismail Bennani m_command = shell_command.str(); 67fbb76349SGreg Clayton } 68fbb76349SGreg Clayton 69866b7a65SJonas Devlieghere ~PlatformShellCommand() = default; 70fbb76349SGreg Clayton 71addb5148SMed Ismail Bennani std::string m_shell; 72fbb76349SGreg Clayton std::string m_command; 73fbb76349SGreg Clayton std::string m_working_dir; 74fbb76349SGreg Clayton std::string m_output; 759494c510SJonas Devlieghere int m_status = 0; 769494c510SJonas Devlieghere int m_signo = 0; 7719dd1a0eSPavel Labath Timeout<std::ratio<1>> m_timeout = llvm::None; 78fbb76349SGreg Clayton }; 79fbb76349SGreg Clayton // SBPlatformConnectOptions 80b9c1b51eSKate Stone SBPlatformConnectOptions::SBPlatformConnectOptions(const char *url) 81baf5664fSJonas Devlieghere : m_opaque_ptr(new PlatformConnectOptions(url)) { 82baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBPlatformConnectOptions, (const char *), url); 83baf5664fSJonas Devlieghere } 84fbb76349SGreg Clayton 85b9c1b51eSKate Stone SBPlatformConnectOptions::SBPlatformConnectOptions( 86b9c1b51eSKate Stone const SBPlatformConnectOptions &rhs) 87b9c1b51eSKate Stone : m_opaque_ptr(new PlatformConnectOptions()) { 88baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBPlatformConnectOptions, 89baf5664fSJonas Devlieghere (const lldb::SBPlatformConnectOptions &), rhs); 90baf5664fSJonas Devlieghere 91fbb76349SGreg Clayton *m_opaque_ptr = *rhs.m_opaque_ptr; 92fbb76349SGreg Clayton } 93fbb76349SGreg Clayton 94b9c1b51eSKate Stone SBPlatformConnectOptions::~SBPlatformConnectOptions() { delete m_opaque_ptr; } 95fbb76349SGreg Clayton 96bc0a35f3SJonas Devlieghere SBPlatformConnectOptions & 97bc0a35f3SJonas Devlieghere SBPlatformConnectOptions::operator=(const SBPlatformConnectOptions &rhs) { 98baf5664fSJonas Devlieghere LLDB_RECORD_METHOD( 99ede5cd9aSJonas Devlieghere SBPlatformConnectOptions &, 100baf5664fSJonas Devlieghere SBPlatformConnectOptions, operator=,( 101baf5664fSJonas Devlieghere const lldb::SBPlatformConnectOptions &), 102baf5664fSJonas Devlieghere rhs); 103baf5664fSJonas Devlieghere 104fbb76349SGreg Clayton *m_opaque_ptr = *rhs.m_opaque_ptr; 105ede5cd9aSJonas Devlieghere return LLDB_RECORD_RESULT(*this); 106fbb76349SGreg Clayton } 107fbb76349SGreg Clayton 108b9c1b51eSKate Stone const char *SBPlatformConnectOptions::GetURL() { 109baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformConnectOptions, GetURL); 110baf5664fSJonas Devlieghere 111fbb76349SGreg Clayton if (m_opaque_ptr->m_url.empty()) 112248a1305SKonrad Kleine return nullptr; 113fbb76349SGreg Clayton return m_opaque_ptr->m_url.c_str(); 114fbb76349SGreg Clayton } 115fbb76349SGreg Clayton 116b9c1b51eSKate Stone void SBPlatformConnectOptions::SetURL(const char *url) { 117baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBPlatformConnectOptions, SetURL, (const char *), 118baf5664fSJonas Devlieghere url); 119baf5664fSJonas Devlieghere 120fbb76349SGreg Clayton if (url && url[0]) 121fbb76349SGreg Clayton m_opaque_ptr->m_url = url; 122fbb76349SGreg Clayton else 123fbb76349SGreg Clayton m_opaque_ptr->m_url.clear(); 124fbb76349SGreg Clayton } 125fbb76349SGreg Clayton 126b9c1b51eSKate Stone bool SBPlatformConnectOptions::GetRsyncEnabled() { 127baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(bool, SBPlatformConnectOptions, GetRsyncEnabled); 128baf5664fSJonas Devlieghere 129fbb76349SGreg Clayton return m_opaque_ptr->m_rsync_enabled; 130fbb76349SGreg Clayton } 131fbb76349SGreg Clayton 132b9c1b51eSKate Stone void SBPlatformConnectOptions::EnableRsync( 133b9c1b51eSKate Stone const char *options, const char *remote_path_prefix, 134b9c1b51eSKate Stone bool omit_hostname_from_remote_path) { 135baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBPlatformConnectOptions, EnableRsync, 136baf5664fSJonas Devlieghere (const char *, const char *, bool), options, 137baf5664fSJonas Devlieghere remote_path_prefix, omit_hostname_from_remote_path); 138baf5664fSJonas Devlieghere 139fbb76349SGreg Clayton m_opaque_ptr->m_rsync_enabled = true; 140b9c1b51eSKate Stone m_opaque_ptr->m_rsync_omit_hostname_from_remote_path = 141b9c1b51eSKate Stone omit_hostname_from_remote_path; 142fbb76349SGreg Clayton if (remote_path_prefix && remote_path_prefix[0]) 143fbb76349SGreg Clayton m_opaque_ptr->m_rsync_remote_path_prefix = remote_path_prefix; 144fbb76349SGreg Clayton else 145fbb76349SGreg Clayton m_opaque_ptr->m_rsync_remote_path_prefix.clear(); 146fbb76349SGreg Clayton 147fbb76349SGreg Clayton if (options && options[0]) 148fbb76349SGreg Clayton m_opaque_ptr->m_rsync_options = options; 149fbb76349SGreg Clayton else 150fbb76349SGreg Clayton m_opaque_ptr->m_rsync_options.clear(); 151fbb76349SGreg Clayton } 152fbb76349SGreg Clayton 153b9c1b51eSKate Stone void SBPlatformConnectOptions::DisableRsync() { 154baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatformConnectOptions, DisableRsync); 155baf5664fSJonas Devlieghere 156fbb76349SGreg Clayton m_opaque_ptr->m_rsync_enabled = false; 157fbb76349SGreg Clayton } 158fbb76349SGreg Clayton 159b9c1b51eSKate Stone const char *SBPlatformConnectOptions::GetLocalCacheDirectory() { 160baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformConnectOptions, 161baf5664fSJonas Devlieghere GetLocalCacheDirectory); 162baf5664fSJonas Devlieghere 163fbb76349SGreg Clayton return m_opaque_ptr->m_local_cache_directory.GetCString(); 164fbb76349SGreg Clayton } 165fbb76349SGreg Clayton 166b9c1b51eSKate Stone void SBPlatformConnectOptions::SetLocalCacheDirectory(const char *path) { 167baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBPlatformConnectOptions, SetLocalCacheDirectory, 168baf5664fSJonas Devlieghere (const char *), path); 169baf5664fSJonas Devlieghere 170fbb76349SGreg Clayton if (path && path[0]) 171fbb76349SGreg Clayton m_opaque_ptr->m_local_cache_directory.SetCString(path); 172fbb76349SGreg Clayton else 173fbb76349SGreg Clayton m_opaque_ptr->m_local_cache_directory = ConstString(); 174fbb76349SGreg Clayton } 175fbb76349SGreg Clayton 176fbb76349SGreg Clayton // SBPlatformShellCommand 177addb5148SMed Ismail Bennani SBPlatformShellCommand::SBPlatformShellCommand(const char *shell_interpreter, 178addb5148SMed Ismail Bennani const char *shell_command) 179addb5148SMed Ismail Bennani : m_opaque_ptr(new PlatformShellCommand(shell_interpreter, shell_command)) { 180addb5148SMed Ismail Bennani LLDB_RECORD_CONSTRUCTOR(SBPlatformShellCommand, (const char *, const char *), 181addb5148SMed Ismail Bennani shell_interpreter, shell_command); 182addb5148SMed Ismail Bennani } 183addb5148SMed Ismail Bennani 184b9c1b51eSKate Stone SBPlatformShellCommand::SBPlatformShellCommand(const char *shell_command) 185baf5664fSJonas Devlieghere : m_opaque_ptr(new PlatformShellCommand(shell_command)) { 186baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBPlatformShellCommand, (const char *), 187baf5664fSJonas Devlieghere shell_command); 188baf5664fSJonas Devlieghere } 189fbb76349SGreg Clayton 190b9c1b51eSKate Stone SBPlatformShellCommand::SBPlatformShellCommand( 191b9c1b51eSKate Stone const SBPlatformShellCommand &rhs) 192b9c1b51eSKate Stone : m_opaque_ptr(new PlatformShellCommand()) { 193baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBPlatformShellCommand, 194baf5664fSJonas Devlieghere (const lldb::SBPlatformShellCommand &), rhs); 195baf5664fSJonas Devlieghere 196fbb76349SGreg Clayton *m_opaque_ptr = *rhs.m_opaque_ptr; 197fbb76349SGreg Clayton } 198fbb76349SGreg Clayton 199bc0a35f3SJonas Devlieghere SBPlatformShellCommand & 200bc0a35f3SJonas Devlieghere SBPlatformShellCommand::operator=(const SBPlatformShellCommand &rhs) { 201ede5cd9aSJonas Devlieghere 202ede5cd9aSJonas Devlieghere LLDB_RECORD_METHOD( 203ede5cd9aSJonas Devlieghere SBPlatformShellCommand &, 204ede5cd9aSJonas Devlieghere SBPlatformShellCommand, operator=,(const lldb::SBPlatformShellCommand &), 205ede5cd9aSJonas Devlieghere rhs); 206ede5cd9aSJonas Devlieghere 207ede5cd9aSJonas Devlieghere *m_opaque_ptr = *rhs.m_opaque_ptr; 208ede5cd9aSJonas Devlieghere return LLDB_RECORD_RESULT(*this); 209ede5cd9aSJonas Devlieghere } 210ede5cd9aSJonas Devlieghere 211b9c1b51eSKate Stone SBPlatformShellCommand::~SBPlatformShellCommand() { delete m_opaque_ptr; } 212fbb76349SGreg Clayton 213b9c1b51eSKate Stone void SBPlatformShellCommand::Clear() { 214baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatformShellCommand, Clear); 215baf5664fSJonas Devlieghere 2163a29f8b9SPavel Labath m_opaque_ptr->m_output = std::string(); 217fbb76349SGreg Clayton m_opaque_ptr->m_status = 0; 218fbb76349SGreg Clayton m_opaque_ptr->m_signo = 0; 219fbb76349SGreg Clayton } 220fbb76349SGreg Clayton 221addb5148SMed Ismail Bennani const char *SBPlatformShellCommand::GetShell() { 222addb5148SMed Ismail Bennani LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformShellCommand, GetShell); 223addb5148SMed Ismail Bennani 224addb5148SMed Ismail Bennani if (m_opaque_ptr->m_shell.empty()) 225addb5148SMed Ismail Bennani return nullptr; 226addb5148SMed Ismail Bennani return m_opaque_ptr->m_shell.c_str(); 227addb5148SMed Ismail Bennani } 228addb5148SMed Ismail Bennani 229addb5148SMed Ismail Bennani void SBPlatformShellCommand::SetShell(const char *shell_interpreter) { 230addb5148SMed Ismail Bennani LLDB_RECORD_METHOD(void, SBPlatformShellCommand, SetShell, (const char *), 231addb5148SMed Ismail Bennani shell_interpreter); 232addb5148SMed Ismail Bennani 233addb5148SMed Ismail Bennani if (shell_interpreter && shell_interpreter[0]) 234addb5148SMed Ismail Bennani m_opaque_ptr->m_shell = shell_interpreter; 235addb5148SMed Ismail Bennani else 236addb5148SMed Ismail Bennani m_opaque_ptr->m_shell.clear(); 237addb5148SMed Ismail Bennani } 238addb5148SMed Ismail Bennani 239b9c1b51eSKate Stone const char *SBPlatformShellCommand::GetCommand() { 240baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformShellCommand, GetCommand); 241baf5664fSJonas Devlieghere 242fbb76349SGreg Clayton if (m_opaque_ptr->m_command.empty()) 243248a1305SKonrad Kleine return nullptr; 244fbb76349SGreg Clayton return m_opaque_ptr->m_command.c_str(); 245fbb76349SGreg Clayton } 246fbb76349SGreg Clayton 247b9c1b51eSKate Stone void SBPlatformShellCommand::SetCommand(const char *shell_command) { 248baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBPlatformShellCommand, SetCommand, (const char *), 249baf5664fSJonas Devlieghere shell_command); 250baf5664fSJonas Devlieghere 251fbb76349SGreg Clayton if (shell_command && shell_command[0]) 252fbb76349SGreg Clayton m_opaque_ptr->m_command = shell_command; 253fbb76349SGreg Clayton else 254fbb76349SGreg Clayton m_opaque_ptr->m_command.clear(); 255fbb76349SGreg Clayton } 256fbb76349SGreg Clayton 257b9c1b51eSKate Stone const char *SBPlatformShellCommand::GetWorkingDirectory() { 258baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformShellCommand, 259baf5664fSJonas Devlieghere GetWorkingDirectory); 260baf5664fSJonas Devlieghere 261fbb76349SGreg Clayton if (m_opaque_ptr->m_working_dir.empty()) 262248a1305SKonrad Kleine return nullptr; 263fbb76349SGreg Clayton return m_opaque_ptr->m_working_dir.c_str(); 264fbb76349SGreg Clayton } 265fbb76349SGreg Clayton 266b9c1b51eSKate Stone void SBPlatformShellCommand::SetWorkingDirectory(const char *path) { 267baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBPlatformShellCommand, SetWorkingDirectory, 268baf5664fSJonas Devlieghere (const char *), path); 269baf5664fSJonas Devlieghere 270fbb76349SGreg Clayton if (path && path[0]) 271fbb76349SGreg Clayton m_opaque_ptr->m_working_dir = path; 272fbb76349SGreg Clayton else 273fbb76349SGreg Clayton m_opaque_ptr->m_working_dir.clear(); 274fbb76349SGreg Clayton } 275fbb76349SGreg Clayton 276b9c1b51eSKate Stone uint32_t SBPlatformShellCommand::GetTimeoutSeconds() { 277baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatformShellCommand, 278baf5664fSJonas Devlieghere GetTimeoutSeconds); 279baf5664fSJonas Devlieghere 28019dd1a0eSPavel Labath if (m_opaque_ptr->m_timeout) 28119dd1a0eSPavel Labath return m_opaque_ptr->m_timeout->count(); 28219dd1a0eSPavel Labath return UINT32_MAX; 283fbb76349SGreg Clayton } 284fbb76349SGreg Clayton 285b9c1b51eSKate Stone void SBPlatformShellCommand::SetTimeoutSeconds(uint32_t sec) { 286baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(void, SBPlatformShellCommand, SetTimeoutSeconds, 287baf5664fSJonas Devlieghere (uint32_t), sec); 288baf5664fSJonas Devlieghere 28919dd1a0eSPavel Labath if (sec == UINT32_MAX) 29019dd1a0eSPavel Labath m_opaque_ptr->m_timeout = llvm::None; 29119dd1a0eSPavel Labath else 29219dd1a0eSPavel Labath m_opaque_ptr->m_timeout = std::chrono::seconds(sec); 293fbb76349SGreg Clayton } 294fbb76349SGreg Clayton 295baf5664fSJonas Devlieghere int SBPlatformShellCommand::GetSignal() { 296baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(int, SBPlatformShellCommand, GetSignal); 297fbb76349SGreg Clayton 298baf5664fSJonas Devlieghere return m_opaque_ptr->m_signo; 299baf5664fSJonas Devlieghere } 300baf5664fSJonas Devlieghere 301baf5664fSJonas Devlieghere int SBPlatformShellCommand::GetStatus() { 302baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(int, SBPlatformShellCommand, GetStatus); 303baf5664fSJonas Devlieghere 304baf5664fSJonas Devlieghere return m_opaque_ptr->m_status; 305baf5664fSJonas Devlieghere } 306fbb76349SGreg Clayton 307b9c1b51eSKate Stone const char *SBPlatformShellCommand::GetOutput() { 308baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatformShellCommand, GetOutput); 309baf5664fSJonas Devlieghere 310fbb76349SGreg Clayton if (m_opaque_ptr->m_output.empty()) 311248a1305SKonrad Kleine return nullptr; 312fbb76349SGreg Clayton return m_opaque_ptr->m_output.c_str(); 313fbb76349SGreg Clayton } 314fbb76349SGreg Clayton 315fbb76349SGreg Clayton // SBPlatform 316baf5664fSJonas Devlieghere SBPlatform::SBPlatform() : m_opaque_sp() { 317baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBPlatform); 318baf5664fSJonas Devlieghere } 319fbb76349SGreg Clayton 320b9c1b51eSKate Stone SBPlatform::SBPlatform(const char *platform_name) : m_opaque_sp() { 321baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBPlatform, (const char *), platform_name); 322baf5664fSJonas Devlieghere 32397206d57SZachary Turner Status error; 324615eb7e6SGreg Clayton if (platform_name && platform_name[0]) 325615eb7e6SGreg Clayton m_opaque_sp = Platform::Create(ConstString(platform_name), error); 326fbb76349SGreg Clayton } 327fbb76349SGreg Clayton 32866dc4672SJonas Devlieghere SBPlatform::SBPlatform(const SBPlatform &rhs) { 32966dc4672SJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBPlatform, (const lldb::SBPlatform &), rhs); 33066dc4672SJonas Devlieghere 33166dc4672SJonas Devlieghere m_opaque_sp = rhs.m_opaque_sp; 33266dc4672SJonas Devlieghere } 33366dc4672SJonas Devlieghere 334ede5cd9aSJonas Devlieghere SBPlatform &SBPlatform::operator=(const SBPlatform &rhs) { 335ede5cd9aSJonas Devlieghere LLDB_RECORD_METHOD(SBPlatform &, 336ede5cd9aSJonas Devlieghere SBPlatform, operator=,(const lldb::SBPlatform &), rhs); 33766dc4672SJonas Devlieghere 33866dc4672SJonas Devlieghere m_opaque_sp = rhs.m_opaque_sp; 339ede5cd9aSJonas Devlieghere return LLDB_RECORD_RESULT(*this); 34066dc4672SJonas Devlieghere } 34166dc4672SJonas Devlieghere 342866b7a65SJonas Devlieghere SBPlatform::~SBPlatform() = default; 343fbb76349SGreg Clayton 344a31130f6STatyana Krasnukha SBPlatform SBPlatform::GetHostPlatform() { 3455c2bf577SJonas Devlieghere LLDB_RECORD_STATIC_METHOD_NO_ARGS(lldb::SBPlatform, SBPlatform, 3465c2bf577SJonas Devlieghere GetHostPlatform); 3475c2bf577SJonas Devlieghere 348a31130f6STatyana Krasnukha SBPlatform host_platform; 349a31130f6STatyana Krasnukha host_platform.m_opaque_sp = Platform::GetHostPlatform(); 3505c2bf577SJonas Devlieghere return LLDB_RECORD_RESULT(host_platform); 351a31130f6STatyana Krasnukha } 352a31130f6STatyana Krasnukha 353baf5664fSJonas Devlieghere bool SBPlatform::IsValid() const { 354baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBPlatform, IsValid); 3557f5237bcSPavel Labath return this->operator bool(); 3567f5237bcSPavel Labath } 3577f5237bcSPavel Labath SBPlatform::operator bool() const { 3587f5237bcSPavel Labath LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBPlatform, operator bool); 359fbb76349SGreg Clayton 360248a1305SKonrad Kleine return m_opaque_sp.get() != nullptr; 361baf5664fSJonas Devlieghere } 362baf5664fSJonas Devlieghere 363baf5664fSJonas Devlieghere void SBPlatform::Clear() { 364baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatform, Clear); 365baf5664fSJonas Devlieghere 366baf5664fSJonas Devlieghere m_opaque_sp.reset(); 367baf5664fSJonas Devlieghere } 368fbb76349SGreg Clayton 369b9c1b51eSKate Stone const char *SBPlatform::GetName() { 370baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetName); 371baf5664fSJonas Devlieghere 372fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 373fbb76349SGreg Clayton if (platform_sp) 374fbb76349SGreg Clayton return platform_sp->GetName().GetCString(); 375248a1305SKonrad Kleine return nullptr; 376fbb76349SGreg Clayton } 377fbb76349SGreg Clayton 378b9c1b51eSKate Stone lldb::PlatformSP SBPlatform::GetSP() const { return m_opaque_sp; } 379fbb76349SGreg Clayton 380b9c1b51eSKate Stone void SBPlatform::SetSP(const lldb::PlatformSP &platform_sp) { 381fbb76349SGreg Clayton m_opaque_sp = platform_sp; 382fbb76349SGreg Clayton } 383fbb76349SGreg Clayton 384b9c1b51eSKate Stone const char *SBPlatform::GetWorkingDirectory() { 385baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetWorkingDirectory); 386baf5664fSJonas Devlieghere 387fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 388fbb76349SGreg Clayton if (platform_sp) 389fbb76349SGreg Clayton return platform_sp->GetWorkingDirectory().GetCString(); 390248a1305SKonrad Kleine return nullptr; 391fbb76349SGreg Clayton } 392fbb76349SGreg Clayton 393b9c1b51eSKate Stone bool SBPlatform::SetWorkingDirectory(const char *path) { 394baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(bool, SBPlatform, SetWorkingDirectory, (const char *), 395baf5664fSJonas Devlieghere path); 396baf5664fSJonas Devlieghere 397fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 398b9c1b51eSKate Stone if (platform_sp) { 399fbb76349SGreg Clayton if (path) 4008f3be7a3SJonas Devlieghere platform_sp->SetWorkingDirectory(FileSpec(path)); 401fbb76349SGreg Clayton else 4028f3be7a3SJonas Devlieghere platform_sp->SetWorkingDirectory(FileSpec()); 403fbb76349SGreg Clayton return true; 404fbb76349SGreg Clayton } 405fbb76349SGreg Clayton return false; 406fbb76349SGreg Clayton } 407fbb76349SGreg Clayton 408b9c1b51eSKate Stone SBError SBPlatform::ConnectRemote(SBPlatformConnectOptions &connect_options) { 409baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, ConnectRemote, 410baf5664fSJonas Devlieghere (lldb::SBPlatformConnectOptions &), connect_options); 411baf5664fSJonas Devlieghere 412fbb76349SGreg Clayton SBError sb_error; 413fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 414b9c1b51eSKate Stone if (platform_sp && connect_options.GetURL()) { 415fbb76349SGreg Clayton Args args; 416bbea3610SRaphael Isemann args.AppendArgument(connect_options.GetURL()); 417fbb76349SGreg Clayton sb_error.ref() = platform_sp->ConnectRemote(args); 418b9c1b51eSKate Stone } else { 419fbb76349SGreg Clayton sb_error.SetErrorString("invalid platform"); 420fbb76349SGreg Clayton } 421baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_error); 422fbb76349SGreg Clayton } 423fbb76349SGreg Clayton 424b9c1b51eSKate Stone void SBPlatform::DisconnectRemote() { 425baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBPlatform, DisconnectRemote); 426baf5664fSJonas Devlieghere 427fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 428fbb76349SGreg Clayton if (platform_sp) 429fbb76349SGreg Clayton platform_sp->DisconnectRemote(); 430fbb76349SGreg Clayton } 431fbb76349SGreg Clayton 432b9c1b51eSKate Stone bool SBPlatform::IsConnected() { 433baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(bool, SBPlatform, IsConnected); 434baf5664fSJonas Devlieghere 435fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 436fbb76349SGreg Clayton if (platform_sp) 437ca38766cSJim Ingham return platform_sp->IsConnected(); 438fbb76349SGreg Clayton return false; 439fbb76349SGreg Clayton } 440fbb76349SGreg Clayton 441b9c1b51eSKate Stone const char *SBPlatform::GetTriple() { 442baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetTriple); 443baf5664fSJonas Devlieghere 444fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 445b9c1b51eSKate Stone if (platform_sp) { 446ccd28a14STamas Berghammer ArchSpec arch(platform_sp->GetSystemArchitecture()); 447b9c1b51eSKate Stone if (arch.IsValid()) { 448b9c1b51eSKate Stone // Const-ify the string so we don't need to worry about the lifetime of 449b9c1b51eSKate Stone // the string 450fbb76349SGreg Clayton return ConstString(arch.GetTriple().getTriple().c_str()).GetCString(); 451fbb76349SGreg Clayton } 452fbb76349SGreg Clayton } 453248a1305SKonrad Kleine return nullptr; 454fbb76349SGreg Clayton } 455fbb76349SGreg Clayton 456b9c1b51eSKate Stone const char *SBPlatform::GetOSBuild() { 457baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetOSBuild); 458baf5664fSJonas Devlieghere 459fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 460b9c1b51eSKate Stone if (platform_sp) { 46140e4ac3eSPavel Labath std::string s = platform_sp->GetOSBuildString().getValueOr(""); 462b9c1b51eSKate Stone if (!s.empty()) { 463b9c1b51eSKate Stone // Const-ify the string so we don't need to worry about the lifetime of 464b9c1b51eSKate Stone // the string 46540e4ac3eSPavel Labath return ConstString(s).GetCString(); 466fbb76349SGreg Clayton } 467fbb76349SGreg Clayton } 468248a1305SKonrad Kleine return nullptr; 469fbb76349SGreg Clayton } 470fbb76349SGreg Clayton 471b9c1b51eSKate Stone const char *SBPlatform::GetOSDescription() { 472baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetOSDescription); 473baf5664fSJonas Devlieghere 474fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 475b9c1b51eSKate Stone if (platform_sp) { 476*f5158ca4SPavel Labath std::string s = platform_sp->GetOSKernelDescription().getValueOr(""); 477b9c1b51eSKate Stone if (!s.empty()) { 478b9c1b51eSKate Stone // Const-ify the string so we don't need to worry about the lifetime of 479b9c1b51eSKate Stone // the string 480fbb76349SGreg Clayton return ConstString(s.c_str()).GetCString(); 481fbb76349SGreg Clayton } 482fbb76349SGreg Clayton } 483248a1305SKonrad Kleine return nullptr; 484fbb76349SGreg Clayton } 485fbb76349SGreg Clayton 486b9c1b51eSKate Stone const char *SBPlatform::GetHostname() { 487baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(const char *, SBPlatform, GetHostname); 488baf5664fSJonas Devlieghere 489fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 490fbb76349SGreg Clayton if (platform_sp) 491fbb76349SGreg Clayton return platform_sp->GetHostname(); 492248a1305SKonrad Kleine return nullptr; 493fbb76349SGreg Clayton } 494fbb76349SGreg Clayton 495b9c1b51eSKate Stone uint32_t SBPlatform::GetOSMajorVersion() { 496baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSMajorVersion); 497baf5664fSJonas Devlieghere 4982272c481SPavel Labath llvm::VersionTuple version; 4992272c481SPavel Labath if (PlatformSP platform_sp = GetSP()) 5002272c481SPavel Labath version = platform_sp->GetOSVersion(); 5012272c481SPavel Labath return version.empty() ? UINT32_MAX : version.getMajor(); 502fbb76349SGreg Clayton } 503fbb76349SGreg Clayton 504b9c1b51eSKate Stone uint32_t SBPlatform::GetOSMinorVersion() { 505baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSMinorVersion); 506baf5664fSJonas Devlieghere 5072272c481SPavel Labath llvm::VersionTuple version; 5082272c481SPavel Labath if (PlatformSP platform_sp = GetSP()) 5092272c481SPavel Labath version = platform_sp->GetOSVersion(); 5102272c481SPavel Labath return version.getMinor().getValueOr(UINT32_MAX); 511fbb76349SGreg Clayton } 512fbb76349SGreg Clayton 513b9c1b51eSKate Stone uint32_t SBPlatform::GetOSUpdateVersion() { 514baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBPlatform, GetOSUpdateVersion); 515baf5664fSJonas Devlieghere 5162272c481SPavel Labath llvm::VersionTuple version; 5172272c481SPavel Labath if (PlatformSP platform_sp = GetSP()) 5182272c481SPavel Labath version = platform_sp->GetOSVersion(); 5192272c481SPavel Labath return version.getSubminor().getValueOr(UINT32_MAX); 520fbb76349SGreg Clayton } 521fbb76349SGreg Clayton 522b9c1b51eSKate Stone SBError SBPlatform::Get(SBFileSpec &src, SBFileSpec &dst) { 523baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Get, 524baf5664fSJonas Devlieghere (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst); 525baf5664fSJonas Devlieghere 526fbb76349SGreg Clayton SBError sb_error; 527fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 528b9c1b51eSKate Stone if (platform_sp) { 529fbb76349SGreg Clayton sb_error.ref() = platform_sp->GetFile(src.ref(), dst.ref()); 530b9c1b51eSKate Stone } else { 531fbb76349SGreg Clayton sb_error.SetErrorString("invalid platform"); 532fbb76349SGreg Clayton } 533baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_error); 534fbb76349SGreg Clayton } 535fbb76349SGreg Clayton 536b9c1b51eSKate Stone SBError SBPlatform::Put(SBFileSpec &src, SBFileSpec &dst) { 537baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Put, 538baf5664fSJonas Devlieghere (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst); 539baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT( 540baf5664fSJonas Devlieghere ExecuteConnected([&](const lldb::PlatformSP &platform_sp) { 541b9c1b51eSKate Stone if (src.Exists()) { 542baf5664fSJonas Devlieghere uint32_t permissions = 543baf5664fSJonas Devlieghere FileSystem::Instance().GetPermissions(src.ref()); 544b9c1b51eSKate Stone if (permissions == 0) { 5453a58d898SJonas Devlieghere if (FileSystem::Instance().IsDirectory(src.ref())) 546fbb76349SGreg Clayton permissions = eFilePermissionsDirectoryDefault; 547fbb76349SGreg Clayton else 548fbb76349SGreg Clayton permissions = eFilePermissionsFileDefault; 549fbb76349SGreg Clayton } 550fbb76349SGreg Clayton 5511ef7b2c8SOleksiy Vyalov return platform_sp->PutFile(src.ref(), dst.ref(), permissions); 552fbb76349SGreg Clayton } 5531ef7b2c8SOleksiy Vyalov 55497206d57SZachary Turner Status error; 555b9c1b51eSKate Stone error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'", 556b9c1b51eSKate Stone src.ref().GetPath().c_str()); 5571ef7b2c8SOleksiy Vyalov return error; 558baf5664fSJonas Devlieghere })); 559fbb76349SGreg Clayton } 560fbb76349SGreg Clayton 561b9c1b51eSKate Stone SBError SBPlatform::Install(SBFileSpec &src, SBFileSpec &dst) { 562baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Install, 563baf5664fSJonas Devlieghere (lldb::SBFileSpec &, lldb::SBFileSpec &), src, dst); 564baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT( 565baf5664fSJonas Devlieghere ExecuteConnected([&](const lldb::PlatformSP &platform_sp) { 566fbb76349SGreg Clayton if (src.Exists()) 5671ef7b2c8SOleksiy Vyalov return platform_sp->Install(src.ref(), dst.ref()); 5681ef7b2c8SOleksiy Vyalov 56997206d57SZachary Turner Status error; 570b9c1b51eSKate Stone error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'", 571b9c1b51eSKate Stone src.ref().GetPath().c_str()); 5721ef7b2c8SOleksiy Vyalov return error; 573baf5664fSJonas Devlieghere })); 574fbb76349SGreg Clayton } 575fbb76349SGreg Clayton 576b9c1b51eSKate Stone SBError SBPlatform::Run(SBPlatformShellCommand &shell_command) { 577baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Run, 578baf5664fSJonas Devlieghere (lldb::SBPlatformShellCommand &), shell_command); 579bc0a35f3SJonas Devlieghere return LLDB_RECORD_RESULT( 580bc0a35f3SJonas Devlieghere ExecuteConnected([&](const lldb::PlatformSP &platform_sp) { 581fbb76349SGreg Clayton const char *command = shell_command.GetCommand(); 5821ef7b2c8SOleksiy Vyalov if (!command) 58397206d57SZachary Turner return Status("invalid shell command (empty)"); 5841ef7b2c8SOleksiy Vyalov 585fbb76349SGreg Clayton const char *working_dir = shell_command.GetWorkingDirectory(); 586248a1305SKonrad Kleine if (working_dir == nullptr) { 587fbb76349SGreg Clayton working_dir = platform_sp->GetWorkingDirectory().GetCString(); 588fbb76349SGreg Clayton if (working_dir) 589fbb76349SGreg Clayton shell_command.SetWorkingDirectory(working_dir); 590fbb76349SGreg Clayton } 591bc0a35f3SJonas Devlieghere return platform_sp->RunShellCommand( 592bc0a35f3SJonas Devlieghere shell_command.m_opaque_ptr->m_shell, command, FileSpec(working_dir), 593fbb76349SGreg Clayton &shell_command.m_opaque_ptr->m_status, 594fbb76349SGreg Clayton &shell_command.m_opaque_ptr->m_signo, 595fbb76349SGreg Clayton &shell_command.m_opaque_ptr->m_output, 59619dd1a0eSPavel Labath shell_command.m_opaque_ptr->m_timeout); 597baf5664fSJonas Devlieghere })); 598fbb76349SGreg Clayton } 5991ef7b2c8SOleksiy Vyalov 600b9c1b51eSKate Stone SBError SBPlatform::Launch(SBLaunchInfo &launch_info) { 601baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Launch, (lldb::SBLaunchInfo &), 602baf5664fSJonas Devlieghere launch_info); 603baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT( 604baf5664fSJonas Devlieghere ExecuteConnected([&](const lldb::PlatformSP &platform_sp) { 60562930e57SPavel Labath ProcessLaunchInfo info = launch_info.ref(); 60662930e57SPavel Labath Status error = platform_sp->LaunchProcess(info); 60762930e57SPavel Labath launch_info.set_ref(info); 60862930e57SPavel Labath return error; 609baf5664fSJonas Devlieghere })); 6101ef7b2c8SOleksiy Vyalov } 6111ef7b2c8SOleksiy Vyalov 612b9c1b51eSKate Stone SBError SBPlatform::Kill(const lldb::pid_t pid) { 613baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, Kill, (const lldb::pid_t), pid); 614baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT( 615baf5664fSJonas Devlieghere ExecuteConnected([&](const lldb::PlatformSP &platform_sp) { 6161ef7b2c8SOleksiy Vyalov return platform_sp->KillProcess(pid); 617baf5664fSJonas Devlieghere })); 6181ef7b2c8SOleksiy Vyalov } 6191ef7b2c8SOleksiy Vyalov 620b9c1b51eSKate Stone SBError SBPlatform::ExecuteConnected( 62197206d57SZachary Turner const std::function<Status(const lldb::PlatformSP &)> &func) { 6221ef7b2c8SOleksiy Vyalov SBError sb_error; 6231ef7b2c8SOleksiy Vyalov const auto platform_sp(GetSP()); 624b9c1b51eSKate Stone if (platform_sp) { 6251ef7b2c8SOleksiy Vyalov if (platform_sp->IsConnected()) 6261ef7b2c8SOleksiy Vyalov sb_error.ref() = func(platform_sp); 6271ef7b2c8SOleksiy Vyalov else 628fbb76349SGreg Clayton sb_error.SetErrorString("not connected"); 629b9c1b51eSKate Stone } else 630fbb76349SGreg Clayton sb_error.SetErrorString("invalid platform"); 6311ef7b2c8SOleksiy Vyalov 632fbb76349SGreg Clayton return sb_error; 633fbb76349SGreg Clayton } 634fbb76349SGreg Clayton 635b9c1b51eSKate Stone SBError SBPlatform::MakeDirectory(const char *path, uint32_t file_permissions) { 636baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, MakeDirectory, 637baf5664fSJonas Devlieghere (const char *, uint32_t), path, file_permissions); 638baf5664fSJonas Devlieghere 639fbb76349SGreg Clayton SBError sb_error; 640fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 641b9c1b51eSKate Stone if (platform_sp) { 642b9c1b51eSKate Stone sb_error.ref() = 6438f3be7a3SJonas Devlieghere platform_sp->MakeDirectory(FileSpec(path), file_permissions); 644b9c1b51eSKate Stone } else { 645fbb76349SGreg Clayton sb_error.SetErrorString("invalid platform"); 646fbb76349SGreg Clayton } 647baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_error); 648fbb76349SGreg Clayton } 649fbb76349SGreg Clayton 650b9c1b51eSKate Stone uint32_t SBPlatform::GetFilePermissions(const char *path) { 651baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(uint32_t, SBPlatform, GetFilePermissions, (const char *), 652baf5664fSJonas Devlieghere path); 653baf5664fSJonas Devlieghere 654fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 655b9c1b51eSKate Stone if (platform_sp) { 656fbb76349SGreg Clayton uint32_t file_permissions = 0; 6578f3be7a3SJonas Devlieghere platform_sp->GetFilePermissions(FileSpec(path), file_permissions); 658fbb76349SGreg Clayton return file_permissions; 659fbb76349SGreg Clayton } 660fbb76349SGreg Clayton return 0; 661fbb76349SGreg Clayton } 662fbb76349SGreg Clayton 663b9c1b51eSKate Stone SBError SBPlatform::SetFilePermissions(const char *path, 664b9c1b51eSKate Stone uint32_t file_permissions) { 665baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBError, SBPlatform, SetFilePermissions, 666baf5664fSJonas Devlieghere (const char *, uint32_t), path, file_permissions); 667baf5664fSJonas Devlieghere 668fbb76349SGreg Clayton SBError sb_error; 669fbb76349SGreg Clayton PlatformSP platform_sp(GetSP()); 670b9c1b51eSKate Stone if (platform_sp) { 6718f3be7a3SJonas Devlieghere sb_error.ref() = 6728f3be7a3SJonas Devlieghere platform_sp->SetFilePermissions(FileSpec(path), file_permissions); 673b9c1b51eSKate Stone } else { 674fbb76349SGreg Clayton sb_error.SetErrorString("invalid platform"); 675fbb76349SGreg Clayton } 676baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(sb_error); 677fbb76349SGreg Clayton } 678fbb76349SGreg Clayton 679b9c1b51eSKate Stone SBUnixSignals SBPlatform::GetUnixSignals() const { 680baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::SBUnixSignals, SBPlatform, 681baf5664fSJonas Devlieghere GetUnixSignals); 68298d0a4b3SChaoren Lin 683baf5664fSJonas Devlieghere if (auto platform_sp = GetSP()) 684baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBUnixSignals{platform_sp}); 685baf5664fSJonas Devlieghere 686baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(SBUnixSignals()); 68798d0a4b3SChaoren Lin } 688ae211eceSMichal Gorny 689ca69be21SWalter Erquinigo SBEnvironment SBPlatform::GetEnvironment() { 690ca69be21SWalter Erquinigo LLDB_RECORD_METHOD_NO_ARGS(lldb::SBEnvironment, SBPlatform, GetEnvironment); 691ca69be21SWalter Erquinigo PlatformSP platform_sp(GetSP()); 692ca69be21SWalter Erquinigo 693ca69be21SWalter Erquinigo if (platform_sp) { 694ca69be21SWalter Erquinigo return LLDB_RECORD_RESULT(SBEnvironment(platform_sp->GetEnvironment())); 695ca69be21SWalter Erquinigo } 696ca69be21SWalter Erquinigo 697ca69be21SWalter Erquinigo return LLDB_RECORD_RESULT(SBEnvironment()); 698ca69be21SWalter Erquinigo } 699ca69be21SWalter Erquinigo 700ae211eceSMichal Gorny namespace lldb_private { 701ae211eceSMichal Gorny namespace repro { 702ae211eceSMichal Gorny 703bc0a35f3SJonas Devlieghere template <> void RegisterMethods<SBPlatformConnectOptions>(Registry &R) { 704ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBPlatformConnectOptions, (const char *)); 705ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBPlatformConnectOptions, 706ae211eceSMichal Gorny (const lldb::SBPlatformConnectOptions &)); 707ae211eceSMichal Gorny LLDB_REGISTER_METHOD( 708ede5cd9aSJonas Devlieghere SBPlatformConnectOptions &, 709ae211eceSMichal Gorny SBPlatformConnectOptions, operator=,( 710ae211eceSMichal Gorny const lldb::SBPlatformConnectOptions &)); 711ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatformConnectOptions, GetURL, ()); 712bc0a35f3SJonas Devlieghere LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, SetURL, (const char *)); 713ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBPlatformConnectOptions, GetRsyncEnabled, ()); 714ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, EnableRsync, 715ae211eceSMichal Gorny (const char *, const char *, bool)); 716ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, DisableRsync, ()); 717ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatformConnectOptions, 718ae211eceSMichal Gorny GetLocalCacheDirectory, ()); 719ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBPlatformConnectOptions, SetLocalCacheDirectory, 720ae211eceSMichal Gorny (const char *)); 721ae211eceSMichal Gorny } 722ae211eceSMichal Gorny 723bc0a35f3SJonas Devlieghere template <> void RegisterMethods<SBPlatformShellCommand>(Registry &R) { 724ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBPlatformShellCommand, (const char *)); 725ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBPlatformShellCommand, 726ae211eceSMichal Gorny (const lldb::SBPlatformShellCommand &)); 727ede5cd9aSJonas Devlieghere LLDB_REGISTER_METHOD( 728ede5cd9aSJonas Devlieghere SBPlatformShellCommand &, 729ede5cd9aSJonas Devlieghere SBPlatformShellCommand, operator=,(const lldb::SBPlatformShellCommand &)); 730ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, Clear, ()); 731addb5148SMed Ismail Bennani LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand, GetShell, ()); 732addb5148SMed Ismail Bennani LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetShell, (const char *)); 733ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand, GetCommand, ()); 734ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetCommand, 735ae211eceSMichal Gorny (const char *)); 736ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand, 737ae211eceSMichal Gorny GetWorkingDirectory, ()); 738ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetWorkingDirectory, 739ae211eceSMichal Gorny (const char *)); 740bc0a35f3SJonas Devlieghere LLDB_REGISTER_METHOD(uint32_t, SBPlatformShellCommand, GetTimeoutSeconds, ()); 741ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBPlatformShellCommand, SetTimeoutSeconds, 742ae211eceSMichal Gorny (uint32_t)); 743ae211eceSMichal Gorny LLDB_REGISTER_METHOD(int, SBPlatformShellCommand, GetSignal, ()); 744ae211eceSMichal Gorny LLDB_REGISTER_METHOD(int, SBPlatformShellCommand, GetStatus, ()); 745ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatformShellCommand, GetOutput, ()); 746ae211eceSMichal Gorny } 747ae211eceSMichal Gorny 748bc0a35f3SJonas Devlieghere template <> void RegisterMethods<SBPlatform>(Registry &R) { 749ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBPlatform, ()); 750ae211eceSMichal Gorny LLDB_REGISTER_CONSTRUCTOR(SBPlatform, (const char *)); 75166dc4672SJonas Devlieghere LLDB_REGISTER_CONSTRUCTOR(SBPlatform, (const lldb::SBPlatform &)); 752bc0a35f3SJonas Devlieghere LLDB_REGISTER_CONSTRUCTOR(SBPlatformShellCommand, 753bc0a35f3SJonas Devlieghere (const char *, const char *)); 754ede5cd9aSJonas Devlieghere LLDB_REGISTER_METHOD(SBPlatform &, 755ede5cd9aSJonas Devlieghere SBPlatform, operator=,(const lldb::SBPlatform &)); 756ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBPlatform, IsValid, ()); 757ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(bool, SBPlatform, operator bool,()); 758ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBPlatform, Clear, ()); 759ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatform, GetName, ()); 760ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatform, GetWorkingDirectory, ()); 761ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBPlatform, SetWorkingDirectory, (const char *)); 762ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, ConnectRemote, 763ae211eceSMichal Gorny (lldb::SBPlatformConnectOptions &)); 764ae211eceSMichal Gorny LLDB_REGISTER_METHOD(void, SBPlatform, DisconnectRemote, ()); 765ae211eceSMichal Gorny LLDB_REGISTER_METHOD(bool, SBPlatform, IsConnected, ()); 766ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatform, GetTriple, ()); 767ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatform, GetOSBuild, ()); 768ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatform, GetOSDescription, ()); 769ae211eceSMichal Gorny LLDB_REGISTER_METHOD(const char *, SBPlatform, GetHostname, ()); 770ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSMajorVersion, ()); 771ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSMinorVersion, ()); 772ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetOSUpdateVersion, ()); 773ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Get, 774ae211eceSMichal Gorny (lldb::SBFileSpec &, lldb::SBFileSpec &)); 775ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Put, 776ae211eceSMichal Gorny (lldb::SBFileSpec &, lldb::SBFileSpec &)); 777ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Install, 778ae211eceSMichal Gorny (lldb::SBFileSpec &, lldb::SBFileSpec &)); 779ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Run, 780ae211eceSMichal Gorny (lldb::SBPlatformShellCommand &)); 781ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Launch, 782ae211eceSMichal Gorny (lldb::SBLaunchInfo &)); 783ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, Kill, (const lldb::pid_t)); 784ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, MakeDirectory, 785ae211eceSMichal Gorny (const char *, uint32_t)); 786ae211eceSMichal Gorny LLDB_REGISTER_METHOD(uint32_t, SBPlatform, GetFilePermissions, 787ae211eceSMichal Gorny (const char *)); 788ae211eceSMichal Gorny LLDB_REGISTER_METHOD(lldb::SBError, SBPlatform, SetFilePermissions, 789ae211eceSMichal Gorny (const char *, uint32_t)); 790ca69be21SWalter Erquinigo LLDB_REGISTER_METHOD(lldb::SBEnvironment, SBPlatform, GetEnvironment, ()); 791ae211eceSMichal Gorny LLDB_REGISTER_METHOD_CONST(lldb::SBUnixSignals, SBPlatform, GetUnixSignals, 792ae211eceSMichal Gorny ()); 7935c2bf577SJonas Devlieghere LLDB_REGISTER_STATIC_METHOD(lldb::SBPlatform, SBPlatform, GetHostPlatform, 7945c2bf577SJonas Devlieghere ()); 795ae211eceSMichal Gorny } 796ae211eceSMichal Gorny 797bc0a35f3SJonas Devlieghere } // namespace repro 798bc0a35f3SJonas Devlieghere } // namespace lldb_private 799