LLDB mainline
lldb_private::PlatformDarwin Class Reference

#include <PlatformDarwin.h>

Inheritance diagram for lldb_private::PlatformDarwin:
[legend]

Classes

struct  CrashInfoAnnotations
struct  SDKEnumeratorInfo

Public Member Functions

 ~PlatformDarwin () override
 Destructor.
Status PutFile (const FileSpec &source, const FileSpec &destination, uint32_t uid=UINT32_MAX, uint32_t gid=UINT32_MAX) override
Status ResolveSymbolFile (Target &target, const ModuleSpec &sym_spec, FileSpec &sym_file) override
 Find a symbol file given a symbol file module specification.
FileSpecList LocateExecutableScriptingResources (Target *target, Module &module, Stream &feedback_stream) override
Status GetSharedModule (const ModuleSpec &module_spec, Process *process, lldb::ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, llvm::SmallVectorImpl< lldb::ModuleSP > *old_modules, bool *did_create_ptr) override
size_t GetSoftwareBreakpointTrapOpcode (Target &target, BreakpointSite *bp_site) override
lldb::BreakpointSP SetThreadCreationBreakpoint (Target &target) override
bool ModuleIsExcludedForUnconstrainedSearches (Target &target, const lldb::ModuleSP &module_sp) override
void ARMGetSupportedArchitectures (std::vector< ArchSpec > &archs, std::optional< llvm::Triple::OSType > os={})
 The architecture selection rules for arm processors These cpu subtypes have distinct names (e.g.
void x86GetSupportedArchitectures (std::vector< ArchSpec > &archs)
uint32_t GetResumeCountForLaunchInfo (ProcessLaunchInfo &launch_info) override
lldb::ProcessSP DebugProcess (ProcessLaunchInfo &launch_info, Debugger &debugger, Target &target, Status &error) override
 Subclasses do not need to implement this function as it uses the Platform::LaunchProcess() followed by Platform::Attach ().
void CalculateTrapHandlerSymbolNames () override
 Ask the Platform subclass to fill in the list of trap handler names.
llvm::VersionTuple GetOSVersion (Process *process=nullptr) override
 Get the OS version from a connected platform.
bool SupportsModules () override
ConstString GetFullNameForDylib (ConstString basename) override
FileSpec LocateExecutable (const char *basename) override
 Find a support executable that may not live within in the standard locations related to LLDB.
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.
Args GetExtraStartupCommands () override
llvm::Expected< StructuredData::DictionarySPFetchExtendedCrashInformation (Process &process) override
 Gather all of crash informations into a structured data dictionary.
llvm::Expected< std::pair< XcodeSDK, bool > > GetSDKPathFromDebugInfo (Module &module) override
 Search each CU associated with the specified 'module' for the SDK paths the CUs were compiled against.
llvm::Expected< std::string > ResolveSDKPathFromDebugInfo (Module &module) override
 Returns the full path of the most appropriate SDK for the specified 'module'.
llvm::Expected< XcodeSDKGetSDKPathFromDebugInfo (CompileUnit &unit) override
 Search CU for the SDK path the CUs was compiled against.
llvm::Expected< std::string > ResolveSDKPathFromDebugInfo (CompileUnit &unit) override
 Returns the full path of the most appropriate SDK for the specified compile unit.
 PlatformPOSIX (bool is_host)
 Default Constructor.
Public Member Functions inherited from PlatformPOSIX
 PlatformPOSIX (bool is_host)
 Default Constructor.
 ~PlatformPOSIX () override
 Destructor.
lldb_private::OptionGroupOptionsGetConnectionOptions (lldb_private::CommandInterpreter &interpreter) override
lldb_private::Status PutFile (const lldb_private::FileSpec &source, const lldb_private::FileSpec &destination, uint32_t uid=UINT32_MAX, uint32_t gid=UINT32_MAX) override
lldb_private::Status GetFile (const lldb_private::FileSpec &source, const lldb_private::FileSpec &destination) override
const lldb::UnixSignalsSPGetRemoteUnixSignals () override
lldb::ProcessSP Attach (lldb_private::ProcessAttachInfo &attach_info, lldb_private::Debugger &debugger, lldb_private::Target *target, lldb_private::Status &error) override
 Attach to an existing process using a process ID.
lldb::ProcessSP DebugProcess (lldb_private::ProcessLaunchInfo &launch_info, lldb_private::Debugger &debugger, lldb_private::Target &target, lldb_private::Status &error) override
 Subclasses do not need to implement this function as it uses the Platform::LaunchProcess() followed by Platform::Attach ().
std::string GetPlatformSpecificConnectionInformation () override
void CalculateTrapHandlerSymbolNames () override
 Ask the Platform subclass to fill in the list of trap handler names.
lldb_private::Status ConnectRemote (lldb_private::Args &args) override
lldb_private::Status DisconnectRemote () override
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_image) override
lldb_private::Status UnloadImage (lldb_private::Process *process, uint32_t image_token) override
lldb_private::ConstString GetFullNameForDylib (lldb_private::ConstString basename) override
Public Member Functions inherited from lldb_private::RemoteAwarePlatform
virtual Status ResolveExecutable (const ModuleSpec &module_spec, lldb::ModuleSP &exe_module_sp, const FileSpecList *module_search_paths_ptr) override
 Set the target's executable based off of the existing architecture information in target given a path to an executable exe_file.
bool GetModuleSpec (const FileSpec &module_file_spec, const ArchSpec &arch, ModuleSpec &module_spec) override
lldb::user_id_t OpenFile (const FileSpec &file_spec, File::OpenOptions 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
llvm::ErrorOr< llvm::MD5::MD5Result > CalculateMD5 (const FileSpec &file_spec) override
Status GetFileWithUUID (const FileSpec &platform_file, const UUID *uuid, FileSpec &local_file) override
 Locate a file for a platform.
bool GetRemoteOSVersion () override
std::optional< std::string > GetRemoteOSBuildString () override
std::optional< std::string > GetRemoteOSKernelDescription () override
ArchSpec GetRemoteSystemArchitecture () override
Status RunShellCommand (llvm::StringRef command, const FileSpec &working_dir, int *status_ptr, int *signo_ptr, std::string *command_output, const Timeout< std::micro > &timeout) override
Status RunShellCommand (llvm::StringRef interpreter, llvm::StringRef 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.
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.
Status KillProcess (const lldb::pid_t pid) override
 Kill process on a platform.
size_t ConnectToWaitingProcesses (Debugger &debugger, Status &error) override
 Connect to all processes waiting for a debugger to attach.
 Platform (bool is_host_platform)
 Default Constructor.
Public Member Functions inherited from lldb_private::Platform
 Platform (bool is_host_platform)
 Default Constructor.
 ~Platform () override
 The destructor is virtual since this class is designed to be inherited from by the plug-in instance.
virtual bool ResolveRemotePath (const FileSpec &platform_path, FileSpec &resolved_platform_path)
 Resolves the FileSpec to a (possibly) remote path.
bool SetOSVersion (llvm::VersionTuple os_version)
std::optional< std::string > GetOSBuildString ()
std::optional< std::string > GetOSKernelDescription ()
llvm::StringRef GetName ()
virtual llvm::StringRef GetDescription ()=0
virtual void GetStatus (Stream &strm)
 Report the current status for this platform.
void CallLocateModuleCallbackIfSet (const ModuleSpec &module_spec, lldb::ModuleSP &module_sp, FileSpec &symbol_file_spec, bool *did_create_ptr)
virtual std::vector< ArchSpecGetSupportedArchitectures (const ArchSpec &process_host_arch)=0
 Get the platform's supported architectures in the order in which they should be searched.
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.
virtual bool IsCompatibleArchitecture (const ArchSpec &arch, const ArchSpec &process_host_arch, ArchSpec::MatchType match, ArchSpec *compatible_arch_ptr)
 Lets a platform answer if it is compatible with a given architecture and the target triple contained within.
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.
virtual lldb::ProcessSP ConnectProcessSynchronous (llvm::StringRef connect_url, llvm::StringRef plugin_name, Debugger &debugger, Stream &stream, Target *target, Status &error)
ProcessInstanceInfoList GetAllProcesses ()
virtual lldb_private::ConstString GetSDKDirectory (lldb_private::Target &target)
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.
size_t GetMaxUserIDNameLength () const
size_t GetMaxGroupIDNameLength () const
const std::string & GetSDKRootDirectory () const
void SetSDKRootDirectory (std::string dir)
const std::string & GetSDKBuild () const
void SetSDKBuild (std::string sdk_build)
virtual void AddClangModuleCompilationOptions (Target *target, std::vector< std::string > &options)
FileSpec GetWorkingDirectory ()
bool SetWorkingDirectory (const FileSpec &working_dir)
virtual void AutoCompleteDiskFileOrDirectory (CompletionRequest &request, bool only_dir)
virtual Status Install (const FileSpec &src, const FileSpec &dst)
 Install a file or directory to the remote system.
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 void SetLocalCacheDirectory (const char *local)
virtual const char * GetLocalCacheDirectory ()
lldb::UnixSignalsSP GetUnixSignals ()
virtual std::string GetQueueNameForThreadQAddress (Process *process, lldb::addr_t dispatch_qaddr)
 Locate a queue name given a thread's qaddr.
virtual lldb::queue_id_t GetQueueIDForThreadQAddress (Process *process, lldb::addr_t dispatch_qaddr)
 Locate a queue ID given a thread's qaddr.
virtual const std::vector< ConstString > & GetTrapHandlerSymbolNames ()
 Provide a list of trap handler function names for this platform.
virtual lldb::UnwindPlanSP GetTrapHandlerUnwindPlan (const llvm::Triple &triple, ConstString name)
 Try to get a specific unwind plan for a named trap handler.
virtual uint32_t GetDefaultMemoryCacheLineSize ()
 Allow the platform to set preferred memory cache line size.
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.
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.
virtual bool LoadPlatformBinaryAndSetup (Process *process, lldb::addr_t addr, bool notify)
 Detect a binary in memory that will determine which Platform and DynamicLoader should be used in this target/process, and update the Platform/DynamicLoader.
virtual CompilerType GetSiginfoType (const llvm::Triple &triple)
virtual lldb::StopInfoSP GetStopInfoFromSiginfo (Thread &thread)
void SetLocateModuleCallback (LocateModuleCallback callback)
 Set locate module callback.
LocateModuleCallback GetLocateModuleCallback () const
Public Member Functions inherited from lldb_private::PluginInterface
 PluginInterface ()=default
virtual ~PluginInterface ()=default
virtual llvm::StringRef GetPluginName ()=0
 PluginInterface (const PluginInterface &)=delete
PluginInterfaceoperator= (const PluginInterface &)=delete

Static Public Member Functions

static lldb::PlatformSP CreateInstance (bool force, const ArchSpec *arch)
static void DebuggerInitialize (lldb_private::Debugger &debugger)
static void Initialize ()
static void Terminate ()
static llvm::StringRef GetPluginNameStatic ()
static llvm::StringRef GetDescriptionStatic ()
static std::tuple< llvm::VersionTuple, llvm::StringRef > ParseVersionBuildDir (llvm::StringRef str)
Static Public Member Functions inherited from lldb_private::Platform
static void Initialize ()
static void Terminate ()
static PlatformPropertiesGetGlobalPlatformProperties ()
static lldb::PlatformSP GetHostPlatform ()
 Get the native host platform plug-in.
static const char * GetHostPlatformName ()
static void SetHostPlatform (const lldb::PlatformSP &platform_sp)
static lldb::PlatformSP Create (llvm::StringRef name)
static ArchSpec GetAugmentedArchSpec (Platform *platform, llvm::StringRef triple)
 Augments the triple either with information from platform or the host system (if platform is null).

Protected Member Functions

StructuredData::ArraySP ExtractCrashInfoAnnotations (Process &process)
 Extract the __crash_info annotations from each of the target's modules.
StructuredData::DictionarySP ExtractAppSpecificInfo (Process &process)
 Extract the Application Specific Information messages from a crash report.
void ReadLibdispatchOffsetsAddress (Process *process)
void ReadLibdispatchOffsets (Process *process)
virtual bool CheckLocalSharedCache () const
void AddClangModuleCompilationOptionsForSDKType (Target *target, std::vector< std::string > &options, XcodeSDK::Type sdk_type)
Status FindBundleBinaryInExecSearchPaths (const ModuleSpec &module_spec, Process *process, lldb::ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, llvm::SmallVectorImpl< lldb::ModuleSP > *old_modules, bool *did_create_ptr)
Protected Member Functions inherited from PlatformPOSIX
lldb_private::Status EvaluateLibdlExpression (lldb_private::Process *process, const char *expr_cstr, llvm::StringRef expr_prefix, lldb::ValueObjectSP &result_valobj_sp)
std::unique_ptr< lldb_private::UtilityFunctionMakeLoadImageUtilityFunction (lldb_private::ExecutionContext &exe_ctx, lldb_private::Status &error)
virtual llvm::StringRef GetLibdlFunctionDeclarations (lldb_private::Process *process)
Protected Member Functions inherited from lldb_private::Platform
lldb::ProcessSP DoConnectProcess (llvm::StringRef connect_url, llvm::StringRef plugin_name, Debugger &debugger, Stream *stream, Target *target, Status &error)
 Private implementation of connecting to a process.
Status GetCachedExecutable (ModuleSpec &module_spec, lldb::ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr)
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 ()

Static Protected Member Functions

static const char * GetCompatibleArch (ArchSpec::Core core, size_t idx)
static FileSystem::EnumerateDirectoryResult DirectoryEnumerator (void *baton, llvm::sys::fs::file_type file_type, llvm::StringRef path)
static FileSpec FindSDKInXcodeForModules (XcodeSDK::Type sdk_type, const FileSpec &sdks_spec)
static FileSpec GetSDKDirectoryForModules (XcodeSDK::Type sdk_type)
static llvm::Triple::OSType GetHostOSType ()
Static Protected Member Functions inherited from lldb_private::Platform
static std::vector< ArchSpecCreateArchList (llvm::ArrayRef< llvm::Triple::ArchType > archs, llvm::Triple::OSType os)
 Create a list of ArchSpecs with the given OS and a architectures.

Protected Attributes

std::string m_developer_directory
llvm::StringMap< std::string > m_sdk_path
std::mutex m_sdk_path_mutex
Protected Attributes inherited from PlatformPOSIX
std::unique_ptr< lldb_private::OptionGroupPlatformRSyncm_option_group_platform_rsync
std::unique_ptr< lldb_private::OptionGroupPlatformSSHm_option_group_platform_ssh
std::unique_ptr< lldb_private::OptionGroupPlatformCachingm_option_group_platform_caching
std::map< lldb_private::CommandInterpreter *, std::unique_ptr< lldb_private::OptionGroupOptions > > m_options
Protected Attributes inherited from lldb_private::RemoteAwarePlatform
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
std::string m_sdk_sysroot
std::string m_sdk_build
FileSpec m_working_dir
std::string m_hostname
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
LocateModuleCallback m_locate_module_callback

Private Member Functions

 PlatformDarwin (const PlatformDarwin &)=delete
const PlatformDarwinoperator= (const PlatformDarwin &)=delete

Additional Inherited Members

Public Types inherited from lldb_private::Platform
typedef std::function< Status(const ModuleSpec &module_spec, FileSpec &module_file_spec, FileSpec &symbol_file_spec)> LocateModuleCallback
Protected Types inherited from lldb_private::Platform
typedef std::map< uint32_t, ConstStringIDToNameMap

Detailed Description

Definition at line 45 of file PlatformDarwin.h.

Constructor & Destructor Documentation

◆ ~PlatformDarwin()

PlatformDarwin::~PlatformDarwin ( )
overridedefault

Destructor.

The destructor is virtual since this class is designed to be inherited from by the plug-in instance.

◆ PlatformDarwin()

lldb_private::PlatformDarwin::PlatformDarwin ( const PlatformDarwin & )
privatedelete

Member Function Documentation

◆ AddClangModuleCompilationOptionsForSDKType()

◆ ARMGetSupportedArchitectures()

void PlatformDarwin::ARMGetSupportedArchitectures ( std::vector< ArchSpec > & archs,
std::optional< llvm::Triple::OSType > os = {} )

The architecture selection rules for arm processors These cpu subtypes have distinct names (e.g.

armv7f) but armv7 binaries run fine on an armv7f processor.

Definition at line 603 of file PlatformDarwin.cpp.

References GetCompatibleArchs(), lldb_private::ArchSpec::GetCore(), and lldb_private::Platform::GetSystemArchitecture().

Referenced by lldb_private::PlatformMacOSX::GetSupportedArchitectures(), lldb_private::PlatformRemoteiOS::GetSupportedArchitectures(), and lldb_private::PlatformRemoteMacOSX::GetSupportedArchitectures().

◆ CalculateTrapHandlerSymbolNames()

void PlatformDarwin::CalculateTrapHandlerSymbolNames ( )
overridevirtual

Ask the Platform subclass to fill in the list of trap handler names.

For most Unix user process environments, this will be a single function name, _sigtramp. More specialized environments may have additional handler names. The unwinder code needs to know when a trap handler is on the stack because the unwind rules for the frame that caused the trap are different.

The base class Platform ivar m_trap_handlers should be updated by the Platform subclass when this method is called. If there are no predefined trap handlers, this method may be a no-op.

Implements lldb_private::Platform.

Definition at line 725 of file PlatformDarwin.cpp.

References lldb_private::Platform::m_trap_handlers.

◆ CheckLocalSharedCache()

virtual bool lldb_private::PlatformDarwin::CheckLocalSharedCache ( ) const
inlineprotectedvirtual

◆ CreateInstance()

PlatformSP PlatformDarwin::CreateInstance ( bool force,
const ArchSpec * arch )
static

Definition at line 116 of file PlatformDarwin.cpp.

Referenced by Initialize(), and Terminate().

◆ DebuggerInitialize()

◆ DebugProcess()

lldb::ProcessSP PlatformDarwin::DebugProcess ( ProcessLaunchInfo & launch_info,
Debugger & debugger,
Target & target,
Status & error )
overridevirtual

Subclasses do not need to implement this function as it uses the Platform::LaunchProcess() followed by Platform::Attach ().

Remote platforms will want to subclass this function in order to be able to intercept STDIO and possibly launch a separate process that will debug the debuggee.

Reimplemented from lldb_private::Platform.

Definition at line 701 of file PlatformDarwin.cpp.

References lldb_private::Platform::DebugProcess(), error(), lldb_private::Status::FromErrorString(), lldb_private::Platform::IsHost(), lldb_private::RemoteAwarePlatform::m_remote_platform_sp, lldb_private::ProcessLaunchInfo::NoOpMonitorCallback(), and lldb_private::ProcessLaunchInfo::SetMonitorProcessCallback().

◆ DirectoryEnumerator()

FileSystem::EnumerateDirectoryResult PlatformDarwin::DirectoryEnumerator ( void * baton,
llvm::sys::fs::file_type file_type,
llvm::StringRef path )
staticprotected

◆ ExtractAppSpecificInfo()

◆ ExtractCrashInfoAnnotations()

StructuredData::ArraySP PlatformDarwin::ExtractCrashInfoAnnotations ( Process & process)
protected

Extract the __crash_info annotations from each of the target's modules.

If the platform have a crashed processes with a __crash_info section, extract the section to gather the messages annotations and the abort cause.

Parameters
[in]processThe crashed process.
Returns
A structured data array containing at each entry in each entry, the module spec, its UUID, the crash messages and the abort cause. nullptr if process has no crash information annotations.

Definition at line 898 of file PlatformDarwin.cpp.

References lldb_private::PlatformDarwin::CrashInfoAnnotations::abort_cause, error(), lldb_private::SectionList::FindSectionByName(), lldb_private::Target::GetImages(), lldb_private::GetLog(), lldb_private::Process::GetTarget(), LLDB_INVALID_ADDRESS, LLDB_LOG, lldb_private::PlatformDarwin::CrashInfoAnnotations::message, lldb_private::PlatformDarwin::CrashInfoAnnotations::message2, lldb_private::ModuleList::Modules(), lldb_private::Process, lldb_private::Process::ReadCStringFromMemory(), lldb_private::Process::ReadMemoryFromInferior(), and lldb_private::PlatformDarwin::CrashInfoAnnotations::version.

Referenced by FetchExtendedCrashInformation().

◆ FetchExtendedCrashInformation()

llvm::Expected< StructuredData::DictionarySP > PlatformDarwin::FetchExtendedCrashInformation ( Process & process)
overridevirtual

Gather all of crash informations into a structured data dictionary.

If the platform have a crashed process with crash information entries, gather all the entries into an structured data dictionary or return a nullptr. This dictionary is generic and extensible, as it contains an array for each different type of crash information.

Parameters
[in]processThe crashed process.
Returns
A structured data dictionary containing at each entry, the crash information type as the entry key and the matching an array as the entry value. nullptr if not implemented or if the process has no crash information entry. error if an error occured.

Reimplemented from lldb_private::Platform.

Definition at line 863 of file PlatformDarwin.cpp.

References ExtractAppSpecificInfo(), ExtractCrashInfoAnnotations(), and lldb_private::Process::GetExtendedCrashInfoDict().

◆ FindBundleBinaryInExecSearchPaths()

◆ FindSDKInXcodeForModules()

◆ GetCompatibleArch()

const char * lldb_private::PlatformDarwin::GetCompatibleArch ( ArchSpec::Core core,
size_t idx )
staticprotected

◆ GetDescriptionStatic()

llvm::StringRef PlatformDarwin::GetDescriptionStatic ( )
static

Definition at line 112 of file PlatformDarwin.cpp.

Referenced by Initialize().

◆ GetExtraStartupCommands()

Args PlatformDarwin::GetExtraStartupCommands ( )
overridevirtual

Reimplemented from lldb_private::Platform.

Definition at line 179 of file PlatformDarwin.cpp.

References lldb_private::Args::AppendArgument(), and GetGlobalProperties().

◆ GetFullNameForDylib()

ConstString PlatformDarwin::GetFullNameForDylib ( ConstString basename)
overridevirtual

◆ GetHostOSType()

llvm::Triple::OSType PlatformDarwin::GetHostOSType ( )
staticprotected

◆ GetOSVersion()

llvm::VersionTuple PlatformDarwin::GetOSVersion ( Process * process = nullptr)
overridevirtual

Get the OS version from a connected platform.

Some platforms might not be connected to a remote platform, but can figure out the OS version for a process. This is common for simulator platforms that will run native programs on the current host, but the simulator might be simulating a different OS. The process parameter might be specified to help to determine the OS version.

Reimplemented from lldb_private::Platform.

Definition at line 1201 of file PlatformDarwin.cpp.

References lldb_private::ProcessInfo::GetEnvironment(), lldb_private::Process::GetID(), lldb_private::Platform::GetOSVersion(), lldb_private::PluginInterface::GetPluginName(), lldb_private::Host::GetProcessInfo(), and lldb_private::ApplePropertyList::GetValueAsString().

Referenced by AddClangModuleCompilationOptionsForSDKType(), and lldb_private::PlatformDarwinDevice::GetSDKDirectoryForCurrentOSVersion().

◆ GetPluginNameStatic()

llvm::StringRef lldb_private::PlatformDarwin::GetPluginNameStatic ( )
inlinestatic

Definition at line 59 of file PlatformDarwin.h.

Referenced by Initialize().

◆ GetResumeCountForLaunchInfo()

uint32_t PlatformDarwin::GetResumeCountForLaunchInfo ( ProcessLaunchInfo & launch_info)
overridevirtual

◆ GetSDKDirectoryForModules()

◆ GetSDKPathFromDebugInfo() [1/2]

llvm::Expected< XcodeSDK > PlatformDarwin::GetSDKPathFromDebugInfo ( CompileUnit & unit)
overridevirtual

Search CU for the SDK path the CUs was compiled against.

Parameters
[in]unitThe CU
Returns
A parsed XcodeSDK object if successful, an Error otherwise.

Reimplemented from lldb_private::Platform.

Definition at line 1456 of file PlatformDarwin.cpp.

References lldb_private::CompileUnit::CalculateSymbolContextModule(), and lldb_private::SymbolFile::ParseXcodeSDK().

◆ GetSDKPathFromDebugInfo() [2/2]

llvm::Expected< std::pair< XcodeSDK, bool > > PlatformDarwin::GetSDKPathFromDebugInfo ( Module & module)
overridevirtual

Search each CU associated with the specified 'module' for the SDK paths the CUs were compiled against.

In the presence of different SDKs, we try to pick the most appropriate one using XcodeSDK::Merge.

Parameters
[in]moduleModule whose debug-info CUs to parse for which SDK they were compiled against.
Returns
If successful, returns a pair of a parsed XcodeSDK object and a boolean that is 'true' if we encountered a conflicting combination of SDKs when parsing the CUs (e.g., a public and internal SDK).

Reimplemented from lldb_private::Platform.

Definition at line 1397 of file PlatformDarwin.cpp.

References lldb_private::ConstString::AsCString(), lldb_private::SymbolFile::GetCompileUnitAtIndex(), lldb_private::FileSpec::GetFilename(), lldb_private::Module::GetFileSpec(), lldb_private::SymbolFile::GetNumCompileUnits(), lldb_private::XcodeSDK::IsAppleInternalSDK(), lldb_private::XcodeSDK::Merge(), and lldb_private::SymbolFile::ParseXcodeSDK().

Referenced by ResolveSDKPathFromDebugInfo(), and ResolveSDKPathFromDebugInfo().

◆ GetSharedModule()

Status PlatformDarwin::GetSharedModule ( const ModuleSpec & module_spec,
Process * process,
lldb::ModuleSP & module_sp,
const FileSpecList * module_search_paths_ptr,
llvm::SmallVectorImpl< lldb::ModuleSP > * old_modules,
bool * did_create_ptr )
overridevirtual
Parameters
[in]module_specThe ModuleSpec of a binary to find.
[in]processA Process.
[out]module_spA Module that matches the ModuleSpec, if one is found.
[in]module_search_paths_ptrLocations to possibly look for a binary that matches the ModuleSpec.
[out]old_modulesExisting Modules in the Process' Target image list which match the FileSpec.
[out]did_create_ptrOptional boolean, nullptr may be passed for this argument. If this method is returning a new ModuleSP, this will be set to true. If this method is returning a ModuleSP that is already in the Target's image list, it will be false.
Returns
The Status object for any errors found while searching for the binary.

Reimplemented from lldb_private::Platform.

Reimplemented in lldb_private::PlatformMacOSX, and lldb_private::PlatformRemoteDarwinDevice.

Definition at line 332 of file PlatformDarwin.cpp.

References error(), lldb_private::Host::GetBundleDirectory(), lldb_private::ModuleSpec::GetFileSpec(), lldb_private::FileSpecList::GetFileSpecAtIndex(), lldb_private::FileSpec::GetPath(), lldb_private::Platform::GetSharedModule(), lldb_private::FileSpecList::GetSize(), lldb_private::FileSystem::Instance(), lldb_private::Platform::IsRemote(), lldb_private::RemoteAwarePlatform::m_remote_platform_sp, PATH_MAX, and lldb_private::Host::ResolveExecutableInBundle().

◆ GetSoftwareBreakpointTrapOpcode()

◆ Initialize()

◆ LaunchProcess()

lldb_private::Status PlatformDarwin::LaunchProcess ( lldb_private::ProcessLaunchInfo & launch_info)
overridevirtual

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

Reimplemented from lldb_private::Platform.

Definition at line 1284 of file PlatformDarwin.cpp.

References lldb_private::ProcessInfo::GetEnvironment(), and lldb_private::Platform::LaunchProcess().

◆ LocateExecutable()

lldb_private::FileSpec PlatformDarwin::LocateExecutable ( const char * basename)
overridevirtual

Find a support executable that may not live within in the standard locations related to LLDB.

Executable might exist within the Platform SDK directories, or in standard tool directories within the current IDE that is running LLDB.

Parameters
[in]basenameThe basename of the executable to locate in the current platform.
Returns
A FileSpec pointing to the executable on disk, or an invalid FileSpec if the executable cannot be found.

Reimplemented from lldb_private::Platform.

Definition at line 1232 of file PlatformDarwin.cpp.

References lldb_private::FileSpec::AppendPathComponent(), GetCommandLineToolsLibraryPath(), lldb_private::FileSpec::GetPathAsConstString(), lldb_private::FileSystem::Instance(), lldb_private::FileSpec::SetDirectory(), and lldb_private::FileSpec::SetFilename().

◆ LocateExecutableScriptingResources()

◆ ModuleIsExcludedForUnconstrainedSearches()

bool PlatformDarwin::ModuleIsExcludedForUnconstrainedSearches ( lldb_private::Target & target,
const lldb::ModuleSP & module_sp )
overridevirtual

◆ operator=()

const PlatformDarwin & lldb_private::PlatformDarwin::operator= ( const PlatformDarwin & )
privatedelete

References PlatformDarwin().

◆ ParseVersionBuildDir()

std::tuple< llvm::VersionTuple, llvm::StringRef > PlatformDarwin::ParseVersionBuildDir ( llvm::StringRef str)
static

Definition at line 845 of file PlatformDarwin.cpp.

◆ PlatformPOSIX()

PlatformPOSIX::PlatformPOSIX ( bool is_host)

Default Constructor.

Definition at line 20 of file PlatformPOSIX.cpp.

◆ PutFile()

lldb_private::Status PlatformDarwin::PutFile ( const FileSpec & source,
const FileSpec & destination,
uint32_t uid = UINT32_MAX,
uint32_t gid = UINT32_MAX )
overridevirtual

◆ ReadLibdispatchOffsets()

void lldb_private::PlatformDarwin::ReadLibdispatchOffsets ( Process * process)
protected

◆ ReadLibdispatchOffsetsAddress()

void lldb_private::PlatformDarwin::ReadLibdispatchOffsetsAddress ( Process * process)
protected

◆ ResolveSDKPathFromDebugInfo() [1/2]

llvm::Expected< std::string > PlatformDarwin::ResolveSDKPathFromDebugInfo ( CompileUnit & unit)
overridevirtual

Returns the full path of the most appropriate SDK for the specified compile unit.

This function gets this path by parsing debug-info (see `GetSDKPathFromDebugInfo`).

Parameters
[in]unitThe CU to scan.
Returns
If successful, returns the full path to an Xcode SDK.

Reimplemented from lldb_private::Platform.

Definition at line 1470 of file PlatformDarwin.cpp.

References GetSDKPathFromDebugInfo().

◆ ResolveSDKPathFromDebugInfo() [2/2]

llvm::Expected< std::string > PlatformDarwin::ResolveSDKPathFromDebugInfo ( Module & module)
overridevirtual

Returns the full path of the most appropriate SDK for the specified 'module'.

This function gets this path by parsing debug-info (see `GetSDKPathFromDebugInfo`).

Parameters
[in]moduleModule whose debug-info to parse for which SDK it was compiled against.
Returns
If successful, returns the full path to an Xcode SDK.

Reimplemented from lldb_private::Platform.

Definition at line 1431 of file PlatformDarwin.cpp.

References GetSDKPathFromDebugInfo(), and lldb_private::FileSystem::Instance().

Referenced by AddClangModuleCompilationOptionsForSDKType().

◆ ResolveSymbolFile()

Status PlatformDarwin::ResolveSymbolFile ( Target & target,
const ModuleSpec & sym_spec,
FileSpec & sym_file )
overridevirtual

Find a symbol file given a symbol file module specification.

Each platform might have tricks to find symbol files for an executable given information in a symbol file ModuleSpec. Some platforms might also support symbol files that are bundles and know how to extract the right symbol file given a bundle.

Parameters
[in]targetThe target in which we are trying to resolve the symbol file. The target has a list of modules that we might be able to use in order to help find the right symbol file. If the "m_file" or "m_platform_file" entries in the sym_spec are filled in, then we might be able to locate a module in the target, extract its UUID and locate a symbol file. If just the "m_uuid" is specified, then we might be able to find the module in the target that matches that UUID and pair the symbol file along with it. If just "m_symbol_file" is specified, we can use a variety of tricks to locate the symbols in an SDK, PDK, or other development kit location.
[in]sym_specA module spec that describes some information about the symbol file we are trying to resolve. The ModuleSpec might contain the following: m_file - A full or partial path to an executable from the target (might be empty). m_platform_file - Another executable hint that contains the path to the file as known on the local/remote platform. m_symbol_file - A full or partial path to a symbol file or symbol bundle that should be used when trying to resolve the symbol file. m_arch - The architecture we are looking for when resolving the symbol file. m_uuid - The UUID of the executable and symbol file. This can often be used to match up an executable with a symbol file, or resolve an symbol file in a symbol file bundle.
[out]sym_fileThe resolved symbol file spec if the returned error indicates success.
Returns
Returns an error that describes success or failure.

Reimplemented from lldb_private::Platform.

Definition at line 321 of file PlatformDarwin.cpp.

References lldb_private::PluginManager::FindSymbolFileInBundle(), lldb_private::ModuleSpec::GetArchitecturePtr(), lldb_private::ModuleSpec::GetSymbolFileSpec(), lldb_private::ModuleSpec::GetUUIDPtr(), and lldb_private::FileSystem::Instance().

◆ SetThreadCreationBreakpoint()

BreakpointSP PlatformDarwin::SetThreadCreationBreakpoint ( Target & target)
overridevirtual

◆ SupportsModules()

bool lldb_private::PlatformDarwin::SupportsModules ( )
inlineoverridevirtual

Reimplemented from lldb_private::Platform.

Definition at line 104 of file PlatformDarwin.h.

◆ Terminate()

◆ x86GetSupportedArchitectures()

void PlatformDarwin::x86GetSupportedArchitectures ( std::vector< ArchSpec > & archs)

Member Data Documentation

◆ m_developer_directory

std::string lldb_private::PlatformDarwin::m_developer_directory
protected

Definition at line 198 of file PlatformDarwin.h.

◆ m_sdk_path

llvm::StringMap<std::string> lldb_private::PlatformDarwin::m_sdk_path
protected

Definition at line 199 of file PlatformDarwin.h.

◆ m_sdk_path_mutex

std::mutex lldb_private::PlatformDarwin::m_sdk_path_mutex
protected

Definition at line 200 of file PlatformDarwin.h.


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