LLDB mainline
PlatformDarwin.h
Go to the documentation of this file.
1//===-- PlatformDarwin.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_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMDARWIN_H
10#define LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMDARWIN_H
11
19#include "lldb/Utility/Status.h"
22#include "lldb/lldb-forward.h"
23#include "llvm/ADT/SmallVector.h"
24#include "llvm/ADT/StringMap.h"
25#include "llvm/ADT/StringRef.h"
26#include "llvm/Support/Error.h"
27#include "llvm/Support/VersionTuple.h"
28#include "llvm/TargetParser/Triple.h"
29
30#include <mutex>
31#include <optional>
32#include <string>
33#include <vector>
34
35namespace lldb_private {
36class BreakpointSite;
37class Debugger;
38class Module;
39class ModuleSpec;
40class Process;
41class ProcessLaunchInfo;
42class Stream;
43class Target;
44
46public:
48
49 ~PlatformDarwin() override;
50
51 static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch);
52
53 static void DebuggerInitialize(lldb_private::Debugger &debugger);
54
55 static void Initialize();
56
57 static void Terminate();
58
59 static llvm::StringRef GetPluginNameStatic() { return "darwin"; }
60
61 static llvm::StringRef GetDescriptionStatic();
62
63 Status PutFile(const FileSpec &source, const FileSpec &destination,
64 uint32_t uid = UINT32_MAX, uint32_t gid = UINT32_MAX) override;
65
66 // Platform functions
67 Status ResolveSymbolFile(Target &target, const ModuleSpec &sym_spec,
68 FileSpec &sym_file) override;
69
72 Stream &feedback_stream) override;
73
74 Status GetSharedModule(const ModuleSpec &module_spec, Process *process,
75 lldb::ModuleSP &module_sp,
76 const FileSpecList *module_search_paths_ptr,
78 bool *did_create_ptr) override;
79
81 BreakpointSite *bp_site) override;
82
84
86 Target &target, const lldb::ModuleSP &module_sp) override;
87
88 void
89 ARMGetSupportedArchitectures(std::vector<ArchSpec> &archs,
90 std::optional<llvm::Triple::OSType> os = {});
91
92 void x86GetSupportedArchitectures(std::vector<ArchSpec> &archs);
93
94 uint32_t GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) override;
95
96 lldb::ProcessSP DebugProcess(ProcessLaunchInfo &launch_info,
97 Debugger &debugger, Target &target,
98 Status &error) override;
99
100 void CalculateTrapHandlerSymbolNames() override;
101
102 llvm::VersionTuple GetOSVersion(Process *process = nullptr) override;
103
104 bool SupportsModules() override { return true; }
105
107
108 FileSpec LocateExecutable(const char *basename) override;
109
110 Status LaunchProcess(ProcessLaunchInfo &launch_info) override;
111
112 Args GetExtraStartupCommands() override;
113
114 static std::tuple<llvm::VersionTuple, llvm::StringRef>
115 ParseVersionBuildDir(llvm::StringRef str);
116
117 llvm::Expected<StructuredData::DictionarySP>
118 FetchExtendedCrashInformation(Process &process) override;
119
120 /// Return the toolchain directory the current LLDB instance is located in.
122
123 /// Return the command line tools directory the current LLDB instance is
124 /// located in.
126
127 llvm::Expected<std::pair<XcodeSDK, bool>>
128 GetSDKPathFromDebugInfo(Module &module) override;
129
130 llvm::Expected<std::string>
131 ResolveSDKPathFromDebugInfo(Module &module) override;
132
133 llvm::Expected<XcodeSDK> GetSDKPathFromDebugInfo(CompileUnit &unit) override;
134
135 llvm::Expected<std::string>
137
138protected:
139 static const char *GetCompatibleArch(ArchSpec::Core core, size_t idx);
140
142 uint64_t version; // unsigned long
143 uint64_t message; // char *
144 uint64_t signature_string; // char *
145 uint64_t backtrace; // char *
146 uint64_t message2; // char *
147 uint64_t thread; // uint64_t
148 uint64_t dialog_mode; // unsigned int
149 uint64_t abort_cause; // unsigned int
150 };
151
152 /// Extract the `__crash_info` annotations from each of the target's
153 /// modules.
154 ///
155 /// If the platform have a crashed processes with a `__crash_info` section,
156 /// extract the section to gather the messages annotations and the abort
157 /// cause.
158 ///
159 /// \param[in] process
160 /// The crashed process.
161 ///
162 /// \return
163 /// A structured data array containing at each entry in each entry, the
164 /// module spec, its UUID, the crash messages and the abort cause.
165 /// \b nullptr if process has no crash information annotations.
167
168 /// Extract the `Application Specific Information` messages from a crash
169 /// report.
171
173
175
176 virtual bool CheckLocalSharedCache() const { return IsHost(); }
177
181 };
182
184 DirectoryEnumerator(void *baton, llvm::sys::fs::file_type file_type,
185 llvm::StringRef path);
186
188 const FileSpec &sdks_spec);
189
191
192 void
194 std::vector<std::string> &options,
195 XcodeSDK::Type sdk_type);
196
198 const ModuleSpec &module_spec, Process *process,
199 lldb::ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr,
200 llvm::SmallVectorImpl<lldb::ModuleSP> *old_modules, bool *did_create_ptr);
201
202 static std::string FindComponentInPath(llvm::StringRef path,
203 llvm::StringRef component);
204
205 // The OSType where lldb is running.
206 static llvm::Triple::OSType GetHostOSType();
207
209 llvm::StringMap<std::string> m_sdk_path;
211
212private:
214 const PlatformDarwin &operator=(const PlatformDarwin &) = delete;
215};
216
217} // namespace lldb_private
218
219#endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMDARWIN_H
static llvm::raw_ostream & error(Stream &strm)
PlatformPOSIX(bool is_host)
Default Constructor.
An architecture specification class.
Definition: ArchSpec.h:31
A command line argument class.
Definition: Args.h:33
Class that manages the actual breakpoint that will be inserted into the running program.
A class that describes a compilation unit.
Definition: CompileUnit.h:43
A uniqued constant string class.
Definition: ConstString.h:40
A class to manage flag bits.
Definition: Debugger.h:80
A file collection class.
Definition: FileSpecList.h:91
A file utility class.
Definition: FileSpec.h:56
A class that describes an executable image and its associated object and symbol files.
Definition: Module.h:89
void ReadLibdispatchOffsets(Process *process)
StructuredData::ArraySP ExtractCrashInfoAnnotations(Process &process)
Extract the __crash_info annotations from each of the target's modules.
static FileSpec GetCurrentCommandLineToolsDirectory()
Return the command line tools directory the current LLDB instance is located in.
llvm::Expected< StructuredData::DictionarySP > FetchExtendedCrashInformation(Process &process) override
Gather all of crash informations into a structured data dictionary.
~PlatformDarwin() override
Destructor.
static FileSpec GetSDKDirectoryForModules(XcodeSDK::Type sdk_type)
Status ResolveSymbolFile(Target &target, const ModuleSpec &sym_spec, FileSpec &sym_file) override
Find a symbol file given a symbol file module specification.
void CalculateTrapHandlerSymbolNames() override
Ask the Platform subclass to fill in the list of trap handler names.
static FileSpec GetCurrentToolchainDirectory()
Return the toolchain directory the current LLDB instance is located in.
static std::tuple< llvm::VersionTuple, llvm::StringRef > ParseVersionBuildDir(llvm::StringRef str)
static lldb::PlatformSP CreateInstance(bool force, const ArchSpec *arch)
llvm::VersionTuple GetOSVersion(Process *process=nullptr) override
Get the OS version from a connected platform.
void ReadLibdispatchOffsetsAddress(Process *process)
static FileSystem::EnumerateDirectoryResult DirectoryEnumerator(void *baton, llvm::sys::fs::file_type file_type, llvm::StringRef path)
static std::string FindComponentInPath(llvm::StringRef path, llvm::StringRef component)
FileSpecList LocateExecutableScriptingResources(Target *target, Module &module, Stream &feedback_stream) override
static FileSpec FindSDKInXcodeForModules(XcodeSDK::Type sdk_type, const FileSpec &sdks_spec)
ConstString GetFullNameForDylib(ConstString basename) override
static void DebuggerInitialize(lldb_private::Debugger &debugger)
static llvm::StringRef GetPluginNameStatic()
static llvm::Triple::OSType GetHostOSType()
virtual bool CheckLocalSharedCache() const
StructuredData::DictionarySP ExtractAppSpecificInfo(Process &process)
Extract the Application Specific Information messages from a crash report.
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 b...
lldb::BreakpointSP SetThreadCreationBreakpoint(Target &target) override
static llvm::StringRef GetDescriptionStatic()
llvm::StringMap< std::string > m_sdk_path
Status LaunchProcess(ProcessLaunchInfo &launch_info) override
Launch a new process on a platform, not necessarily for debugging, it could be just for running the p...
const PlatformDarwin & operator=(const PlatformDarwin &)=delete
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
static const char * GetCompatibleArch(ArchSpec::Core core, size_t idx)
uint32_t GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) override
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)
llvm::Expected< std::string > ResolveSDKPathFromDebugInfo(Module &module) override
Returns the full path of the most appropriate SDK for the specified 'module'.
size_t GetSoftwareBreakpointTrapOpcode(Target &target, BreakpointSite *bp_site) override
void AddClangModuleCompilationOptionsForSDKType(Target *target, std::vector< std::string > &options, XcodeSDK::Type sdk_type)
Args GetExtraStartupCommands() override
Status PutFile(const FileSpec &source, const FileSpec &destination, uint32_t uid=UINT32_MAX, uint32_t gid=UINT32_MAX) override
FileSpec LocateExecutable(const char *basename) override
Find a support executable that may not live within in the standard locations related to LLDB.
void x86GetSupportedArchitectures(std::vector< ArchSpec > &archs)
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...
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....
PlatformDarwin(const PlatformDarwin &)=delete
bool IsHost() const
Definition: Platform.h:502
A plug-in interface definition class for debugging a process.
Definition: Process.h:343
An error handling class.
Definition: Status.h:115
A stream class that can stream formatted output to a file.
Definition: Stream.h:28
std::shared_ptr< Dictionary > DictionarySP
std::shared_ptr< Array > ArraySP
Type
Different types of Xcode SDKs.
Definition: XcodeSDK.h:29
#define UINT32_MAX
Definition: lldb-defines.h:19
A class that represents a running process on the host machine.
std::shared_ptr< lldb_private::Platform > PlatformSP
Definition: lldb-forward.h:388
std::shared_ptr< lldb_private::Breakpoint > BreakpointSP
Definition: lldb-forward.h:321
std::shared_ptr< lldb_private::Process > ProcessSP
Definition: lldb-forward.h:389
std::shared_ptr< lldb_private::Module > ModuleSP
Definition: lldb-forward.h:373