LLDB  mainline
Public Member Functions | Protected Attributes | List of all members
lldb_private::RemoteAwarePlatform Class Reference

A base class for platforms which automatically want to be able to forward operations to a remote platform instance (such as PlatformRemoteGDBServer). More...

#include <RemoteAwarePlatform.h>

Inheritance diagram for lldb_private::RemoteAwarePlatform:
Inheritance graph
Collaboration diagram for lldb_private::RemoteAwarePlatform:
Collaboration graph

Public Member Functions

bool GetModuleSpec (const FileSpec &module_file_spec, const ArchSpec &arch, ModuleSpec &module_spec) override
lldb::user_id_t OpenFile (const FileSpec &file_spec, uint32_t flags, uint32_t mode, Status &error) override
bool CloseFile (lldb::user_id_t fd, Status &error) override
uint64_t ReadFile (lldb::user_id_t fd, uint64_t offset, void *dst, uint64_t dst_len, Status &error) override
uint64_t WriteFile (lldb::user_id_t fd, uint64_t offset, const void *src, uint64_t src_len, Status &error) override
lldb::user_id_t GetFileSize (const FileSpec &file_spec) override
Status CreateSymlink (const FileSpec &src, const FileSpec &dst) override
bool GetFileExists (const FileSpec &file_spec) override
Status Unlink (const FileSpec &file_spec) override
FileSpec GetRemoteWorkingDirectory () override
bool SetRemoteWorkingDirectory (const FileSpec &working_dir) override
Status MakeDirectory (const FileSpec &file_spec, uint32_t mode) override
Status GetFilePermissions (const FileSpec &file_spec, uint32_t &file_permissions) override
Status SetFilePermissions (const FileSpec &file_spec, uint32_t file_permissions) override
bool CalculateMD5 (const FileSpec &file_spec, uint64_t &low, uint64_t &high) override
Status GetFileWithUUID (const FileSpec &platform_file, const UUID *uuid, FileSpec &local_file) override
 Locate a file for a platform. More...
bool GetRemoteOSVersion () override
bool GetRemoteOSBuildString (std::string &s) override
bool GetRemoteOSKernelDescription (std::string &s) override
ArchSpec GetRemoteSystemArchitecture () override
Status RunShellCommand (const char *command, const FileSpec &working_dir, int *status_ptr, int *signo_ptr, std::string *command_output, const Timeout< std::micro > &timeout) override
const char * GetHostname () override
UserIDResolverGetUserIDResolver () override
lldb_private::Environment GetEnvironment () override
bool IsConnected () const override
bool GetProcessInfo (lldb::pid_t pid, ProcessInstanceInfo &proc_info) override
uint32_t FindProcesses (const ProcessInstanceInfoMatch &match_info, ProcessInstanceInfoList &process_infos) override
 Attach to an existing process by process name. More...
lldb::ProcessSP ConnectProcess (llvm::StringRef connect_url, llvm::StringRef plugin_name, Debugger &debugger, Target *target, Status &error) override
Status LaunchProcess (ProcessLaunchInfo &launch_info) override
 Launch a new process on a platform, not necessarily for debugging, it could be just for running the process. More...
Status KillProcess (const lldb::pid_t pid) override
 Kill process on a platform. More...
- Public Member Functions inherited from lldb_private::Platform
 Platform (bool is_host_platform)
 Default Constructor. More...
 ~Platform () override
 Destructor. More...
virtual Status ResolveExecutable (const ModuleSpec &module_spec, lldb::ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr)
 Find a platform plugin for a given process. More...
virtual Status ResolveSymbolFile (Target &target, const ModuleSpec &sym_spec, FileSpec &sym_file)
 Find a symbol file given a symbol file module specification. More...
virtual bool ResolveRemotePath (const FileSpec &platform_path, FileSpec &resolved_platform_path)
 Resolves the FileSpec to a (possibly) remote path. More...
virtual llvm::VersionTuple GetOSVersion (Process *process=nullptr)
 Get the OS version from a connected platform. More...
bool SetOSVersion (llvm::VersionTuple os_version)
bool GetOSBuildString (std::string &s)
bool GetOSKernelDescription (std::string &s)
ConstString GetName ()
virtual ConstString GetFullNameForDylib (ConstString basename)
virtual const char * GetDescription ()=0
virtual void GetStatus (Stream &strm)
 Report the current status for this platform. More...
virtual std::vector< std::string > GetSystemIncludeDirectories (lldb::LanguageType lang)
 Retrieve the system include directories on this platform for the given language. More...
virtual FileSpecList LocateExecutableScriptingResources (Target *target, Module &module, Stream *feedback_stream)
virtual Status GetSharedModule (const ModuleSpec &module_spec, Process *process, lldb::ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, lldb::ModuleSP *old_module_sp_ptr, bool *did_create_ptr)
virtual Status ConnectRemote (Args &args)
virtual Status DisconnectRemote ()
virtual bool GetSupportedArchitectureAtIndex (uint32_t idx, ArchSpec &arch)=0
 Get the platform's supported architectures in the order in which they should be searched. More...
virtual size_t GetSoftwareBreakpointTrapOpcode (Target &target, BreakpointSite *bp_site)
virtual Status ShellExpandArguments (ProcessLaunchInfo &launch_info)
 Perform expansion of the command-line for this launch info This can potentially involve wildcard expansion environment variable replacement, and whatever other argument magic the platform defines as part of its typical user experience. More...
virtual bool IsCompatibleArchitecture (const ArchSpec &arch, bool exact_arch_match, ArchSpec *compatible_arch_ptr)
 Lets a platform answer if it is compatible with a given architecture and the target triple contained within. More...
virtual bool CanDebugProcess ()
 Not all platforms will support debugging a process by spawning somehow halted for a debugger (specified using the "eLaunchFlagDebug" launch flag) and then attaching. More...
virtual lldb::ProcessSP DebugProcess (ProcessLaunchInfo &launch_info, Debugger &debugger, Target *target, Status &error)
 Subclasses do not need to implement this function as it uses the Platform::LaunchProcess() followed by Platform::Attach (). More...
virtual lldb::ProcessSP Attach (ProcessAttachInfo &attach_info, Debugger &debugger, Target *target, Status &error)=0
 Attach to an existing process using a process ID. More...
virtual lldb::BreakpointSP SetThreadCreationBreakpoint (Target &target)
virtual lldb_private::ConstString GetSDKDirectory (lldb_private::Target &target)
const std::string & GetRemoteURL () const
bool IsHost () const
bool IsRemote () const
const ArchSpecGetSystemArchitecture ()
void SetSystemArchitecture (const ArchSpec &arch)
ArchSpec GetAugmentedArchSpec (llvm::StringRef triple)
 If the triple contains not specify the vendor, os, and environment parts, we "augment" these using information from the platform and return the resulting ArchSpec object. More...
size_t GetMaxUserIDNameLength () const
size_t GetMaxGroupIDNameLength () const
ConstString GetSDKRootDirectory () const
void SetSDKRootDirectory (ConstString dir)
ConstString GetSDKBuild () const
void SetSDKBuild (ConstString sdk_build)
virtual bool SupportsModules ()
virtual void AddClangModuleCompilationOptions (Target *target, std::vector< std::string > &options)
FileSpec GetWorkingDirectory ()
bool SetWorkingDirectory (const FileSpec &working_dir)
virtual bool ModuleIsExcludedForUnconstrainedSearches (Target &target, const lldb::ModuleSP &module_sp)
virtual Status GetFile (const FileSpec &source, const FileSpec &destination)
virtual Status PutFile (const FileSpec &source, const FileSpec &destination, uint32_t uid=UINT32_MAX, uint32_t gid=UINT32_MAX)
virtual Status Install (const FileSpec &src, const FileSpec &dst)
 Install a file or directory to the remote system. More...
virtual MmapArgList GetMmapArgumentList (const ArchSpec &arch, lldb::addr_t addr, lldb::addr_t length, unsigned prot, unsigned flags, lldb::addr_t fd, lldb::addr_t offset)
virtual bool GetSupportsRSync ()
virtual void SetSupportsRSync (bool flag)
virtual const char * GetRSyncOpts ()
virtual void SetRSyncOpts (const char *opts)
virtual const char * GetRSyncPrefix ()
virtual void SetRSyncPrefix (const char *prefix)
virtual bool GetSupportsSSH ()
virtual void SetSupportsSSH (bool flag)
virtual const char * GetSSHOpts ()
virtual void SetSSHOpts (const char *opts)
virtual bool GetIgnoresRemoteHostname ()
virtual void SetIgnoresRemoteHostname (bool flag)
virtual lldb_private::OptionGroupOptionsGetConnectionOptions (CommandInterpreter &interpreter)
virtual void SetLocalCacheDirectory (const char *local)
virtual const char * GetLocalCacheDirectory ()
virtual std::string GetPlatformSpecificConnectionInformation ()
virtual int32_t GetResumeCountForLaunchInfo (ProcessLaunchInfo &launch_info)
virtual const lldb::UnixSignalsSP & GetRemoteUnixSignals ()
lldb::UnixSignalsSP GetUnixSignals ()
virtual std::string GetQueueNameForThreadQAddress (Process *process, lldb::addr_t dispatch_qaddr)
 Locate a queue name given a thread's qaddr. More...
virtual lldb::queue_id_t GetQueueIDForThreadQAddress (Process *process, lldb::addr_t dispatch_qaddr)
 Locate a queue ID given a thread's qaddr. More...
virtual const std::vector< ConstString > & GetTrapHandlerSymbolNames ()
 Provide a list of trap handler function names for this platform. More...
virtual FileSpec LocateExecutable (const char *basename)
 Find a support executable that may not live within in the standard locations related to LLDB. More...
virtual uint32_t GetDefaultMemoryCacheLineSize ()
 Allow the platform to set preferred memory cache line size. More...
uint32_t LoadImage (lldb_private::Process *process, const lldb_private::FileSpec &local_file, const lldb_private::FileSpec &remote_file, lldb_private::Status &error)
 Load a shared library into this process. More...
uint32_t LoadImageUsingPaths (lldb_private::Process *process, const lldb_private::FileSpec &library_name, const std::vector< std::string > &paths, lldb_private::Status &error, lldb_private::FileSpec *loaded_path)
 Load a shared library specified by base name into this process, looking by hand along a set of paths. More...
virtual uint32_t DoLoadImage (lldb_private::Process *process, const lldb_private::FileSpec &remote_file, const std::vector< std::string > *paths, lldb_private::Status &error, lldb_private::FileSpec *loaded_path=nullptr)
virtual Status UnloadImage (lldb_private::Process *process, uint32_t image_token)
virtual size_t ConnectToWaitingProcesses (lldb_private::Debugger &debugger, lldb_private::Status &error)
 Connect to all processes waiting for a debugger to attach. More...
- Public Member Functions inherited from lldb_private::PluginInterface
virtual ~PluginInterface ()
virtual ConstString GetPluginName ()=0
virtual uint32_t GetPluginVersion ()=0

Protected Attributes

lldb::PlatformSP m_remote_platform_sp
- Protected Attributes inherited from lldb_private::Platform
bool m_is_host
bool m_os_version_set_while_connected
bool m_system_arch_set_while_connected
ConstString m_sdk_sysroot
ConstString m_sdk_build
FileSpec m_working_dir
std::string m_remote_url
std::string m_name
llvm::VersionTuple m_os_version
ArchSpec m_system_arch
std::mutex m_mutex
size_t m_max_uid_name_len
size_t m_max_gid_name_len
bool m_supports_rsync
std::string m_rsync_opts
std::string m_rsync_prefix
bool m_supports_ssh
std::string m_ssh_opts
bool m_ignores_remote_hostname
std::string m_local_cache_directory
std::vector< ConstStringm_trap_handlers
bool m_calculated_trap_handlers
const std::unique_ptr< ModuleCachem_module_cache

Additional Inherited Members

- Static Public Member Functions inherited from lldb_private::Platform
static void Initialize ()
static void Terminate ()
static const PlatformPropertiesSPGetGlobalPlatformProperties ()
static lldb::PlatformSP GetHostPlatform ()
 Get the native host platform plug-in. More...
static lldb::PlatformSP GetPlatformForArchitecture (const ArchSpec &arch, ArchSpec *platform_arch_ptr)
static const char * GetHostPlatformName ()
static void SetHostPlatform (const lldb::PlatformSP &platform_sp)
static lldb::PlatformSP Find (ConstString name)
static lldb::PlatformSP Create (ConstString name, Status &error)
static lldb::PlatformSP Create (const ArchSpec &arch, ArchSpec *platform_arch_ptr, Status &error)
static ArchSpec GetAugmentedArchSpec (Platform *platform, llvm::StringRef triple)
 Augments the triple either with information from platform or the host system (if platform is null). More...
- Protected Types inherited from lldb_private::Platform
typedef std::map< uint32_t, ConstStringIDToNameMap
- Protected Member Functions inherited from lldb_private::Platform
virtual void CalculateTrapHandlerSymbolNames ()=0
 Ask the Platform subclass to fill in the list of trap handler names. More...
Status GetCachedExecutable (ModuleSpec &module_spec, lldb::ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, Platform &remote_platform)
virtual Status DownloadModuleSlice (const FileSpec &src_file_spec, const uint64_t src_offset, const uint64_t src_size, const FileSpec &dst_file_spec)
virtual Status DownloadSymbolFile (const lldb::ModuleSP &module_sp, const FileSpec &dst_file_spec)
virtual const char * GetCacheHostname ()

Detailed Description

A base class for platforms which automatically want to be able to forward operations to a remote platform instance (such as PlatformRemoteGDBServer).

Definition at line 18 of file RemoteAwarePlatform.h.

Member Function Documentation

◆ CalculateMD5()

bool RemoteAwarePlatform::CalculateMD5 ( const FileSpec file_spec,
uint64_t &  low,
uint64_t &  high 

◆ CloseFile()

bool RemoteAwarePlatform::CloseFile ( lldb::user_id_t  fd,
Status error 

◆ ConnectProcess()

lldb::ProcessSP RemoteAwarePlatform::ConnectProcess ( llvm::StringRef  connect_url,
llvm::StringRef  plugin_name,
Debugger debugger,
Target target,
Status error 

◆ CreateSymlink()

Status RemoteAwarePlatform::CreateSymlink ( const FileSpec src,
const FileSpec dst 

◆ FindProcesses()

uint32_t RemoteAwarePlatform::FindProcesses ( const ProcessInstanceInfoMatch match_info,
ProcessInstanceInfoList proc_infos 

Attach to an existing process by process name.

This function is not meant to be overridden by Process subclasses. It will first call Process::WillAttach (const char *) and if that returns true, Process::DoAttach (const char *) will be called to actually do the attach. If DoAttach returns true, then Process::DidAttach() will be called.

[in]process_nameA process name to match against the current process list.
Returns pid if attaching was successful, or LLDB_INVALID_PROCESS_ID if attaching fails.

Reimplemented from lldb_private::Platform.

Reimplemented in PlatformiOSSimulator, PlatformAppleTVSimulator, and PlatformAppleWatchSimulator.

Definition at line 243 of file RemoteAwarePlatform.cpp.

References lldb_private::Platform::FindProcesses(), lldb_private::Platform::IsHost(), and m_remote_platform_sp.

◆ GetEnvironment()

Environment RemoteAwarePlatform::GetEnvironment ( )

◆ GetFileExists()

bool RemoteAwarePlatform::GetFileExists ( const FileSpec file_spec)

◆ GetFilePermissions()

Status RemoteAwarePlatform::GetFilePermissions ( const FileSpec file_spec,
uint32_t file_permissions 

◆ GetFileSize()

lldb::user_id_t RemoteAwarePlatform::GetFileSize ( const FileSpec file_spec)

◆ GetFileWithUUID()

Status RemoteAwarePlatform::GetFileWithUUID ( const FileSpec platform_file,
const UUID uuid_ptr,
FileSpec local_file 

Locate a file for a platform.

The default implementation of this function will return the same file patch in local_file as was in platform_file.

[in]platform_fileThe platform file path to locate and cache locally.
[in]uuid_ptrIf we know the exact UUID of the file we are looking for, it can be specified. If it is not specified, we might now know the exact file. The UUID is usually some sort of MD5 checksum for the file and is sometimes known by dynamic linkers/loaders. If the UUID is known, it is best to supply it to platform file queries to ensure we are finding the correct file, not just a file at the correct path.
[out]local_fileA locally cached version of the platform file. For platforms that describe the current host computer, this will just be the same file. For remote platforms, this file might come from and SDK directory, or might need to be sync'ed over to the current machine for efficient debugging access.
An error object.

Reimplemented from lldb_private::Platform.

Reimplemented in PlatformMacOSX.

Definition at line 160 of file RemoteAwarePlatform.cpp.

References lldb_private::Platform::IsRemote(), m_remote_platform_sp, and lldb_private::Status.

◆ GetHostname()

const char * RemoteAwarePlatform::GetHostname ( )

◆ GetModuleSpec()

bool RemoteAwarePlatform::GetModuleSpec ( const FileSpec module_file_spec,
const ArchSpec arch,
ModuleSpec module_spec 

Reimplemented from lldb_private::Platform.

Definition at line 17 of file RemoteAwarePlatform.cpp.

References lldb_private::Platform::GetModuleSpec(), and m_remote_platform_sp.

◆ GetProcessInfo()

bool RemoteAwarePlatform::GetProcessInfo ( lldb::pid_t  pid,
ProcessInstanceInfo proc_info 

◆ GetRemoteOSBuildString()

bool RemoteAwarePlatform::GetRemoteOSBuildString ( std::string &  s)

Reimplemented from lldb_private::Platform.

Definition at line 180 of file RemoteAwarePlatform.cpp.

References m_remote_platform_sp.

Referenced by PlatformRemoteDarwinDevice::GetConnectedSDKIndex().

◆ GetRemoteOSKernelDescription()

bool RemoteAwarePlatform::GetRemoteOSKernelDescription ( std::string &  s)

Reimplemented from lldb_private::Platform.

Definition at line 187 of file RemoteAwarePlatform.cpp.

References m_remote_platform_sp.

◆ GetRemoteOSVersion()

bool RemoteAwarePlatform::GetRemoteOSVersion ( )

◆ GetRemoteSystemArchitecture()

ArchSpec RemoteAwarePlatform::GetRemoteSystemArchitecture ( )

Reimplemented from lldb_private::Platform.

Definition at line 194 of file RemoteAwarePlatform.cpp.

References m_remote_platform_sp.

◆ GetRemoteWorkingDirectory()

FileSpec RemoteAwarePlatform::GetRemoteWorkingDirectory ( )

◆ GetUserIDResolver()

UserIDResolver & RemoteAwarePlatform::GetUserIDResolver ( )

◆ IsConnected()

bool RemoteAwarePlatform::IsConnected ( ) const

◆ KillProcess()

Status RemoteAwarePlatform::KillProcess ( const lldb::pid_t  pid)

◆ LaunchProcess()

Status RemoteAwarePlatform::LaunchProcess ( ProcessLaunchInfo launch_info)

Launch a new process on a platform, not necessarily for debugging, it could be just for running the process.

Reimplemented from lldb_private::Platform.

Reimplemented in PlatformDarwin, lldb_private::platform_freebsd::PlatformFreeBSD, and PlatformAppleSimulator.

Definition at line 264 of file RemoteAwarePlatform.cpp.

References lldb_private::Platform::IsHost(), lldb_private::Platform::LaunchProcess(), m_remote_platform_sp, and lldb_private::Status::SetErrorString().

Referenced by PlatformDarwin::LaunchProcess().

◆ MakeDirectory()

Status RemoteAwarePlatform::MakeDirectory ( const FileSpec file_spec,
uint32_t  mode 

Reimplemented from lldb_private::Platform.

Definition at line 40 of file RemoteAwarePlatform.cpp.

References m_remote_platform_sp, and lldb_private::Platform::MakeDirectory().

◆ OpenFile()

lldb::user_id_t RemoteAwarePlatform::OpenFile ( const FileSpec file_spec,
uint32_t  flags,
uint32_t  mode,
Status error 

◆ ReadFile()

uint64_t RemoteAwarePlatform::ReadFile ( lldb::user_id_t  fd,
uint64_t  offset,
void *  dst,
uint64_t  dst_len,
Status error 

◆ RunShellCommand()

Status RemoteAwarePlatform::RunShellCommand ( const char *  command,
const FileSpec working_dir,
int *  status_ptr,
int *  signo_ptr,
std::string *  command_output,
const Timeout< std::micro > &  timeout 

◆ SetFilePermissions()

Status RemoteAwarePlatform::SetFilePermissions ( const FileSpec file_spec,
uint32_t  file_permissions 

◆ SetRemoteWorkingDirectory()

bool RemoteAwarePlatform::SetRemoteWorkingDirectory ( const FileSpec working_dir)

◆ Unlink()

Status RemoteAwarePlatform::Unlink ( const FileSpec file_spec)

◆ WriteFile()

uint64_t RemoteAwarePlatform::WriteFile ( lldb::user_id_t  fd,
uint64_t  offset,
const void *  src,
uint64_t  src_len,
Status error 

Member Data Documentation

◆ m_remote_platform_sp

lldb::PlatformSP lldb_private::RemoteAwarePlatform::m_remote_platform_sp

Definition at line 92 of file RemoteAwarePlatform.h.

Referenced by PlatformPOSIX::Attach(), lldb_private::platform_freebsd::PlatformFreeBSD::Attach(), lldb_private::PlatformWindows::Attach(), CalculateMD5(), CloseFile(), ConnectProcess(), lldb_private::platform_android::PlatformAndroid::ConnectRemote(), lldb_private::PlatformWindows::ConnectRemote(), PlatformPOSIX::ConnectRemote(), PlatformPOSIX::ConnectToWaitingProcesses(), CreateSymlink(), PlatformPOSIX::DebugProcess(), lldb_private::PlatformWindows::DebugProcess(), lldb_private::PlatformWindows::DisconnectRemote(), PlatformPOSIX::DisconnectRemote(), FindProcesses(), GetEnvironment(), PlatformPOSIX::GetFile(), lldb_private::platform_android::PlatformAndroid::GetFile(), GetFileExists(), GetFilePermissions(), GetFileSize(), GetFileWithUUID(), PlatformMacOSX::GetFileWithUUID(), GetHostname(), GetModuleSpec(), GetProcessInfo(), GetRemoteOSBuildString(), GetRemoteOSKernelDescription(), GetRemoteOSVersion(), GetRemoteSystemArchitecture(), PlatformPOSIX::GetRemoteUnixSignals(), GetRemoteWorkingDirectory(), PlatformDarwin::GetSharedModule(), PlatformDarwin::GetSharedModuleWithLocalCache(), lldb_private::platform_linux::PlatformLinux::GetSupportedArchitectureAtIndex(), lldb_private::platform_freebsd::PlatformFreeBSD::GetSupportedArchitectureAtIndex(), lldb_private::platform_netbsd::PlatformNetBSD::GetSupportedArchitectureAtIndex(), lldb_private::platform_openbsd::PlatformOpenBSD::GetSupportedArchitectureAtIndex(), PlatformMacOSX::GetSymbolFile(), GetUserIDResolver(), IsConnected(), KillProcess(), lldb_private::platform_freebsd::PlatformFreeBSD::LaunchProcess(), LaunchProcess(), MakeDirectory(), OpenFile(), PlatformPOSIX::PutFile(), lldb_private::platform_android::PlatformAndroid::PutFile(), ReadFile(), lldb_private::PlatformWindows::ResolveExecutable(), PlatformPOSIX::ResolveExecutable(), RunShellCommand(), SetFilePermissions(), SetRemoteWorkingDirectory(), Unlink(), and WriteFile().

The documentation for this class was generated from the following files: