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;
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,
77 bool *did_create_ptr) override;
78
79 Status
80 GetModuleFromSharedCaches(const ModuleSpec &module_spec, Process *process,
81 lldb::ModuleSP &module_sp,
83 bool *did_create_ptr);
84
86 BreakpointSite *bp_site) override;
87
89
91 Target &target, const lldb::ModuleSP &module_sp) override;
92
93 void
94 ARMGetSupportedArchitectures(std::vector<ArchSpec> &archs,
95 std::optional<llvm::Triple::OSType> os = {});
96
97 void x86GetSupportedArchitectures(std::vector<ArchSpec> &archs);
98
99 uint32_t GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) override;
100
101 lldb::ProcessSP DebugProcess(ProcessLaunchInfo &launch_info,
102 Debugger &debugger, Target &target,
103 Status &error) override;
104
105 void CalculateTrapHandlerSymbolNames() override;
106
107 llvm::VersionTuple GetOSVersion(Process *process = nullptr) override;
108
109 bool SupportsModules() override { return true; }
110
112
113 FileSpec LocateExecutable(const char *basename) override;
114
115 Status LaunchProcess(ProcessLaunchInfo &launch_info) override;
116
117 Args GetExtraStartupCommands() override;
118
119 static std::tuple<llvm::VersionTuple, llvm::StringRef>
120 ParseVersionBuildDir(llvm::StringRef str);
121
122 llvm::Expected<StructuredData::DictionarySP>
123 FetchExtendedCrashInformation(Process &process) override;
124
125 llvm::Expected<std::pair<XcodeSDK, bool>>
126 GetSDKPathFromDebugInfo(Module &module) override;
127
128 llvm::Expected<std::string>
129 ResolveSDKPathFromDebugInfo(Module &module) override;
130
131 llvm::Expected<XcodeSDK> GetSDKPathFromDebugInfo(CompileUnit &unit) override;
132
133 llvm::Expected<std::string>
135
136 /// Helper function for \c LocateExecutableScriptingResources
137 /// which gathers FileSpecs for executable scripts (currently
138 /// just Python) from a .dSYM Python directory.
139 ///
140 /// \param[out] feedback_stream Any warnings/errors are printed into this
141 /// stream.
142 ///
143 /// \param[in] module_spec FileSpec of the Module for which to locate
144 /// scripting resources.
145 ///
146 /// \param[in] target Target which owns the ScriptInterpreter which is
147 /// eventually used for loading the scripting resources.
148 ///
149 /// \param[in] symfile_spec FileSpec for the SymbolFile inside the Module's
150 /// dSYM directory. The scripting resources are loaded from the adjacent
151 /// Resources directory in the same dSYM.
152 /// E.g., \c /path/to/.dSYM/Contents/Resources/DWARF/a.out
153 ///
155 Stream &feedback_stream, FileSpec module_spec, const Target &target,
156 const FileSpec &symfile_spec);
157
158protected:
159 static const char *GetCompatibleArch(ArchSpec::Core core, size_t idx);
160
162 uint64_t version; // unsigned long
163 uint64_t message; // char *
164 uint64_t signature_string; // char *
165 uint64_t backtrace; // char *
166 uint64_t message2; // char *
167 uint64_t thread; // uint64_t
168 uint64_t dialog_mode; // unsigned int
169 uint64_t abort_cause; // unsigned int
170 };
171
172 /// Extract the `__crash_info` annotations from each of the target's
173 /// modules.
174 ///
175 /// If the platform have a crashed processes with a `__crash_info` section,
176 /// extract the section to gather the messages annotations and the abort
177 /// cause.
178 ///
179 /// \param[in] process
180 /// The crashed process.
181 ///
182 /// \return
183 /// A structured data array containing at each entry in each entry, the
184 /// module spec, its UUID, the crash messages and the abort cause.
185 /// \b nullptr if process has no crash information annotations.
187
188 /// Extract the `Application Specific Information` messages from a crash
189 /// report.
191
193
195
196 virtual bool CheckLocalSharedCache() const { return IsHost(); }
197
202
204 DirectoryEnumerator(void *baton, llvm::sys::fs::file_type file_type,
205 llvm::StringRef path);
206
208 const FileSpec &sdks_spec);
209
211
212 void
214 std::vector<std::string> &options,
215 XcodeSDK::Type sdk_type);
216
218 const ModuleSpec &module_spec, Process *process,
219 lldb::ModuleSP &module_sp,
220 llvm::SmallVectorImpl<lldb::ModuleSP> *old_modules, bool *did_create_ptr);
221
222 // The OSType where lldb is running.
223 static llvm::Triple::OSType GetHostOSType();
224
226 llvm::StringMap<std::string> m_sdk_path;
228
229private:
231 const PlatformDarwin &operator=(const PlatformDarwin &) = delete;
232};
233
234} // namespace lldb_private
235
236#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:32
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:87
A file collection class.
A file utility class.
Definition FileSpec.h:57
A class that describes an executable image and its associated object and symbol files.
Definition Module.h:90
void ReadLibdispatchOffsets(Process *process)
StructuredData::ArraySP ExtractCrashInfoAnnotations(Process &process)
Extract the __crash_info annotations from each of the target's modules.
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 GetModuleFromSharedCaches(const ModuleSpec &module_spec, Process *process, lldb::ModuleSP &module_sp, llvm::SmallVectorImpl< lldb::ModuleSP > *old_modules, bool *did_create_ptr)
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 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)
PlatformPOSIX(bool is_host)
Default Constructor.
Status GetSharedModule(const ModuleSpec &module_spec, Process *process, lldb::ModuleSP &module_sp, llvm::SmallVectorImpl< lldb::ModuleSP > *old_modules, bool *did_create_ptr) override
static FileSystem::EnumerateDirectoryResult DirectoryEnumerator(void *baton, llvm::sys::fs::file_type file_type, llvm::StringRef path)
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
static FileSpecList LocateExecutableScriptingResourcesFromDSYM(Stream &feedback_stream, FileSpec module_spec, const Target &target, const FileSpec &symfile_spec)
Helper function for LocateExecutableScriptingResources which gathers FileSpecs for executable scripts...
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 FindBundleBinaryInExecSearchPaths(const ModuleSpec &module_spec, Process *process, lldb::ModuleSP &module_sp, llvm::SmallVectorImpl< lldb::ModuleSP > *old_modules, bool *did_create_ptr)
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
static const char * GetCompatibleArch(ArchSpec::Core core, size_t idx)
uint32_t GetResumeCountForLaunchInfo(ProcessLaunchInfo &launch_info) override
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:505
A plug-in interface definition class for debugging a process.
Definition Process.h:354
An error handling class.
Definition Status.h:118
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:31
#define UINT32_MAX
A class that represents a running process on the host machine.
std::shared_ptr< lldb_private::Platform > PlatformSP
std::shared_ptr< lldb_private::Breakpoint > BreakpointSP
std::shared_ptr< lldb_private::Process > ProcessSP
std::shared_ptr< lldb_private::Module > ModuleSP