1 //===-- RemoteAwarePlatform.h -----------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_TARGET_REMOTEAWAREPLATFORM_H 10 #define LLDB_TARGET_REMOTEAWAREPLATFORM_H 11 12 #include "lldb/Target/Platform.h" 13 #include <optional> 14 15 namespace lldb_private { 16 17 /// A base class for platforms which automatically want to be able to forward 18 /// operations to a remote platform instance (such as PlatformRemoteGDBServer). 19 class RemoteAwarePlatform : public Platform { 20 public: 21 using Platform::Platform; 22 23 virtual Status 24 ResolveExecutable(const ModuleSpec &module_spec, 25 lldb::ModuleSP &exe_module_sp, 26 const FileSpecList *module_search_paths_ptr) override; 27 28 bool GetModuleSpec(const FileSpec &module_file_spec, const ArchSpec &arch, 29 ModuleSpec &module_spec) override; 30 31 lldb::user_id_t OpenFile(const FileSpec &file_spec, File::OpenOptions flags, 32 uint32_t mode, Status &error) override; 33 34 bool CloseFile(lldb::user_id_t fd, Status &error) override; 35 36 uint64_t ReadFile(lldb::user_id_t fd, uint64_t offset, void *dst, 37 uint64_t dst_len, Status &error) override; 38 39 uint64_t WriteFile(lldb::user_id_t fd, uint64_t offset, const void *src, 40 uint64_t src_len, Status &error) override; 41 42 lldb::user_id_t GetFileSize(const FileSpec &file_spec) override; 43 44 Status CreateSymlink(const FileSpec &src, const FileSpec &dst) override; 45 46 bool GetFileExists(const FileSpec &file_spec) override; 47 48 Status Unlink(const FileSpec &file_spec) override; 49 50 FileSpec GetRemoteWorkingDirectory() override; 51 52 bool SetRemoteWorkingDirectory(const FileSpec &working_dir) override; 53 54 Status MakeDirectory(const FileSpec &file_spec, uint32_t mode) override; 55 56 Status GetFilePermissions(const FileSpec &file_spec, 57 uint32_t &file_permissions) override; 58 59 Status SetFilePermissions(const FileSpec &file_spec, 60 uint32_t file_permissions) override; 61 62 llvm::ErrorOr<llvm::MD5::MD5Result> 63 CalculateMD5(const FileSpec &file_spec) override; 64 65 Status GetFileWithUUID(const FileSpec &platform_file, const UUID *uuid, 66 FileSpec &local_file) override; 67 68 bool GetRemoteOSVersion() override; 69 std::optional<std::string> GetRemoteOSBuildString() override; 70 std::optional<std::string> GetRemoteOSKernelDescription() override; 71 ArchSpec GetRemoteSystemArchitecture() override; 72 73 Status RunShellCommand(llvm::StringRef command, const FileSpec &working_dir, 74 int *status_ptr, int *signo_ptr, 75 std::string *command_output, 76 const Timeout<std::micro> &timeout) override; 77 78 Status RunShellCommand(llvm::StringRef interpreter, llvm::StringRef command, 79 const FileSpec &working_dir, int *status_ptr, 80 int *signo_ptr, std::string *command_output, 81 const Timeout<std::micro> &timeout) override; 82 83 const char *GetHostname() override; 84 UserIDResolver &GetUserIDResolver() override; 85 lldb_private::Environment GetEnvironment() override; 86 87 bool IsConnected() const override; 88 89 bool GetProcessInfo(lldb::pid_t pid, ProcessInstanceInfo &proc_info) override; 90 uint32_t FindProcesses(const ProcessInstanceInfoMatch &match_info, 91 ProcessInstanceInfoList &process_infos) override; 92 93 lldb::ProcessSP ConnectProcess(llvm::StringRef connect_url, 94 llvm::StringRef plugin_name, 95 Debugger &debugger, Target *target, 96 Status &error) override; 97 98 Status LaunchProcess(ProcessLaunchInfo &launch_info) override; 99 100 Status KillProcess(const lldb::pid_t pid) override; 101 102 size_t ConnectToWaitingProcesses(Debugger &debugger, 103 Status &error) override; 104 105 protected: 106 lldb::PlatformSP m_remote_platform_sp; 107 }; 108 109 } // namespace lldb_private 110 111 #endif // LLDB_TARGET_REMOTEAWAREPLATFORM_H 112