35#ifdef ENABLE_DEBUG_PRINTF
37#define DEBUG_PRINTF(fmt, ...) printf(fmt, ##__VA_ARGS__)
39#define DEBUG_PRINTF(fmt, ...)
61 Module *exe_module = process->GetTarget().GetExecutableModulePointer();
70 const llvm::Triple &triple_ref =
72 switch (triple_ref.getOS()) {
73 case llvm::Triple::Darwin:
74 case llvm::Triple::MacOSX:
75 case llvm::Triple::IOS:
76 case llvm::Triple::TvOS:
77 case llvm::Triple::WatchOS:
78 case llvm::Triple::XROS:
79 case llvm::Triple::BridgeOS:
80 create = triple_ref.getVendor() == llvm::Triple::Apple;
89 if (UseDYLDSPI(process)) {
102 m_dyld_all_image_infos(), m_dyld_all_image_infos_stop_id(
UINT32_MAX),
104 m_process_image_addr_is_all_images_infos(false) {}
113 std::lock_guard<std::recursive_mutex> baseclass_guard(
GetMutex());
114 bool did_exec =
false;
141 frame_sp->GetSymbolContext(eSymbolContextSymbol).symbol;
143 if (symbol->
GetName() ==
"_dyld_start")
161 std::lock_guard<std::recursive_mutex> guard(
m_mutex);
199 uint32_t magic = data.
GetU32(&offset);
201 case llvm::MachO::MH_MAGIC:
202 case llvm::MachO::MH_MAGIC_64:
203 case llvm::MachO::MH_CIGAM:
204 case llvm::MachO::MH_CIGAM_64:
238 }
else if (exe_arch.
GetMachine() == llvm::Triple::arm ||
239 exe_arch.
GetMachine() == llvm::Triple::thumb ||
240 exe_arch.
GetMachine() == llvm::Triple::aarch64 ||
241 exe_arch.
GetMachine() == llvm::Triple::aarch64_32) {
252 std::lock_guard<std::recursive_mutex> baseclass_guard(
GetMutex());
254 static ConstString g_dyld_all_image_infos(
"dyld_all_image_infos");
255 static ConstString g_new_dyld_all_image_infos(
"dyld4::dyld_all_image_infos");
257 if (
m_dyld.
header.filetype == llvm::MachO::MH_DYLINKER) {
273 dyld_module_sp.get()) {
274 const Symbol *symbol = dyld_module_sp->FindFirstSymbolWithNameAndType(
277 symbol = dyld_module_sp->FindFirstSymbolWithNameAndType(
287 dyld_module_sp->GetSectionList()->FindSectionByName(g_sect_name);
288 if (dyld_aii_section_sp) {
289 Address dyld_aii_addr(dyld_aii_section_sp, 0);
302 if (dyld_module_sp) {
308 modules.
Append(dyld_module_sp);
388 if (abi->GetArgumentValues(exe_ctx.
GetThreadRef(), argument_values)) {
391 if (dyld_mode !=
static_cast<uint32_t
>(-1)) {
394 uint32_t image_infos_count =
396 if (image_infos_count !=
static_cast<uint32_t
>(-1)) {
404 if (dyld_mode == 0) {
411 image_infos_addr, image_infos_count);
419 "no ABI plugin located for triple " +
421 ": shared libraries will not be registered",
430 std::lock_guard<std::recursive_mutex> guard(
m_mutex);
447 const size_t count_v2 =
sizeof(uint32_t) +
454 const size_t count_v11 = count_v2 + addr_size +
468 const size_t count_v13 = count_v11 + addr_size +
471 assert(
sizeof(buf) >= count_v13);
499 const size_t bytes_read =
501 if (bytes_read == count) {
511 offset += addr_size - 2;
514 offset += addr_size * 8;
515 uint64_t dyld_all_image_infos_addr = data.
GetAddress(&offset);
531 uint64_t image_infos_offset =
532 dyld_all_image_infos_addr -
534 uint64_t notification_offset =
551 lldb::addr_t image_infos_addr, uint32_t image_infos_count) {
552 ImageInfo::collection image_infos;
553 Log *log =
GetLog(LLDBLog::DynamicLoader);
554 LLDB_LOGF(log,
"Adding %d modules.\n", image_infos_count);
556 std::lock_guard<std::recursive_mutex> guard(
m_mutex);
557 std::lock_guard<std::recursive_mutex> baseclass_guard(
GetMutex());
564 if (image_infos_json_sp.get() && image_infos_json_sp->GetAsDictionary() &&
565 image_infos_json_sp->GetAsDictionary()->HasKey(
"images") &&
566 image_infos_json_sp->GetAsDictionary()
567 ->GetValueForKey(
"images")
569 image_infos_json_sp->GetAsDictionary()
570 ->GetValueForKey(
"images")
572 ->GetSize() == image_infos_count) {
573 bool return_value =
false;
583 if (!
ReadImageInfos(image_infos_addr, image_infos_count, image_infos))
593 lldb::addr_t image_infos_addr, uint32_t image_infos_count) {
594 ImageInfo::collection image_infos;
595 Log *log =
GetLog(LLDBLog::DynamicLoader);
597 std::lock_guard<std::recursive_mutex> guard(
m_mutex);
598 std::lock_guard<std::recursive_mutex> baseclass_guard(
GetMutex());
604 if (!
ReadImageInfos(image_infos_addr, image_infos_count, image_infos)) {
606 log->
PutCString(
"Failed reading image infos array.");
610 LLDB_LOGF(log,
"Removing %d modules.", image_infos_count);
613 for (uint32_t idx = 0; idx < image_infos.size(); ++idx) {
615 LLDB_LOGF(log,
"Removing module at address=0x%16.16" PRIx64
".",
616 image_infos[idx].address);
617 image_infos[idx].PutToLog(log);
632 if (image_infos[idx].address == (*pos).address) {
633 image_infos[idx].uuid = (*pos).uuid;
640 if (unload_image_module_sp.get()) {
647 LLDB_LOGF(log,
"Could not find module for unloading info entry:");
648 image_infos[idx].PutToLog(log);
662 LLDB_LOGF(log,
"Could not find image_info entry for unloading image:");
663 image_infos[idx].PutToLog(log);
667 if (unloaded_module_list.
GetSize() > 0) {
671 log,
"DynamicLoaderMacOSXDYLD::ModulesDidUnload");
680 lldb::addr_t image_infos_addr, uint32_t image_infos_count,
681 ImageInfo::collection &image_infos) {
682 std::lock_guard<std::recursive_mutex> baseclass_guard(
GetMutex());
686 image_infos.resize(image_infos_count);
687 const size_t count = image_infos.size() * 3 * addr_size;
692 if (bytes_read == count) {
697 i < image_infos.size() && info_data_ref.
ValidOffset(info_data_offset);
699 image_infos[i].address = info_data_ref.
GetAddress(&info_data_offset);
707 if (
error.Success()) {
708 image_infos[i].file_spec.SetFile(raw_path, FileSpec::Style::native);
722 Log *log =
GetLog(LLDBLog::DynamicLoader);
724 std::lock_guard<std::recursive_mutex> guard(
m_mutex);
725 std::lock_guard<std::recursive_mutex> baseclass_guard(
GetMutex());
744 DEBUG_PRINTF(
"%s",
"unable to read all data for all_dylib_infos.");
758 if (!module_sp->IsLoadedInTarget(&target)) {
764 not_loaded_modules.
Append(module_sp);
768 if (not_loaded_modules.
GetSize() != 0) {
782 llvm::MachO::mach_header *header,
788 if (bytes_read ==
sizeof(llvm::MachO::mach_header)) {
790 ::memset(header, 0,
sizeof(llvm::MachO::mach_header));
796 header->magic = data.
GetU32(&offset);
800 switch (header->magic) {
801 case llvm::MachO::MH_MAGIC:
802 case llvm::MachO::MH_CIGAM:
804 load_cmd_addr +=
sizeof(llvm::MachO::mach_header);
807 case llvm::MachO::MH_MAGIC_64:
808 case llvm::MachO::MH_CIGAM_64:
810 load_cmd_addr +=
sizeof(llvm::MachO::mach_header_64);
818 if (data.
GetU32(&offset, &header->cputype,
819 (
sizeof(llvm::MachO::mach_header) /
sizeof(uint32_t)) -
821 if (load_command_data ==
nullptr)
828 size_t load_cmd_bytes_read =
830 load_cmd_data_sp->GetByteSize(),
error);
832 if (load_cmd_bytes_read == header->sizeofcmds) {
835 load_command_data->
SetData(load_cmd_data_sp, 0, header->sizeofcmds);
855 dylib_info.
Clear(
true);
857 for (cmd_idx = 0; cmd_idx < dylib_info.
header.ncmds; cmd_idx++) {
862 sizeof(llvm::MachO::load_command))) {
863 llvm::MachO::load_command load_cmd;
865 load_cmd.cmd = data.
GetU32(&offset);
866 load_cmd.cmdsize = data.
GetU32(&offset);
867 switch (load_cmd.cmd) {
868 case llvm::MachO::LC_SEGMENT: {
870 (
const char *)data.
GetData(&offset, 16), 16);
879 dylib_info.
segments.push_back(segment);
882 case llvm::MachO::LC_SEGMENT_64: {
884 (
const char *)data.
GetData(&offset, 16), 16);
889 dylib_info.
segments.push_back(segment);
892 case llvm::MachO::LC_ID_DYLINKER:
893 if (lc_id_dylinker) {
895 load_cmd_offset + data.
GetU32(&offset);
896 const char *path = data.
PeekCStr(name_offset);
897 lc_id_dylinker->
SetFile(path, FileSpec::Style::native);
902 case llvm::MachO::LC_UUID:
910 offset = load_cmd_offset + load_cmd.cmdsize;
920 const size_t num_sections = dylib_info.
segments.size();
921 for (
size_t i = 0; i < num_sections; ++i) {
924 if ((dylib_info.
segments[i].fileoff == 0 &&
925 dylib_info.
segments[i].filesize > 0) ||
926 (dylib_info.
segments[i].name ==
"__TEXT")) {
939 ImageInfo::collection &image_infos, uint32_t infos_count,
940 bool update_executable) {
943 for (uint32_t i = 0; i < infos_count; i++) {
944 if (!image_infos[i].UUIDValid()) {
946 if (!
ReadMachHeader(image_infos[i].address, &image_infos[i].header,
952 if (image_infos[i].header.filetype == llvm::MachO::MH_EXECUTE)
959 if (exe_idx < image_infos.size()) {
960 const bool can_create =
true;
962 can_create,
nullptr));
981 if (dyld_module_sp) {
983 std::lock_guard<std::recursive_mutex> baseclass_guard(
GetMutex());
1000 std::lock_guard<std::recursive_mutex> guard(
m_mutex);
1001 std::lock_guard<std::recursive_mutex> baseclass_guard(
GetMutex());
1003 "dyld_all_image_infos = { version=%d, count=%d, addr=0x%8.8" PRIx64
1004 ", notify=0x%8.8" PRIx64
" }",
1013 for (i = 0; i < count; i++)
1019 DEBUG_PRINTF(
"DynamicLoaderMacOSXDYLD::%s() process state = %s\n",
1031 if (dyld_module_sp) {
1032 std::lock_guard<std::recursive_mutex> baseclass_guard(
GetMutex());
1089 uint32_t version_or_magic =
1091 if (version_or_magic !=
static_cast<uint32_t
>(-1) &&
1092 version_or_magic != llvm::MachO::MH_MAGIC &&
1093 version_or_magic != llvm::MachO::MH_CIGAM &&
1094 version_or_magic != llvm::MachO::MH_MAGIC_64 &&
1095 version_or_magic != llvm::MachO::MH_CIGAM_64 &&
1096 version_or_magic >= 13) {
1099 if (wordsize == 8) {
1100 sharedCacheUUID_address =
1101 all_image_infos + 160;
1103 if (wordsize == 4) {
1104 sharedCacheUUID_address =
1105 all_image_infos + 84;
1108 uuid_t shared_cache_uuid;
1111 uuid =
UUID(shared_cache_uuid, 16);
1117 if (version_or_magic >= 15) {
1120 addr_t sharedCacheBaseAddr_address = sharedCacheUUID_address + 16;
1167 return "Dynamic loader plug-in that watches for shared library loads/unloads "
1168 "in MacOSX user processes.";
1172 std::lock_guard<std::recursive_mutex> baseclass_guard(
GetMutex());
1175 case llvm::MachO::MH_MAGIC:
1176 case llvm::MachO::MH_CIGAM:
1179 case llvm::MachO::MH_MAGIC_64:
1180 case llvm::MachO::MH_CIGAM_64:
1191 case llvm::MachO::MH_MAGIC:
1192 case llvm::MachO::MH_MAGIC_64:
1195 case llvm::MachO::MH_CIGAM:
1196 case llvm::MachO::MH_CIGAM_64:
static llvm::raw_ostream & error(Stream &strm)
#define DEBUG_PRINTF(fmt,...)
#define LLDB_LOGF(log,...)
#define LLDB_PLUGIN_DEFINE(PluginName)
bool ReadDYLDInfoFromMemoryAndSetNotificationCallback(lldb::addr_t addr)
void PutToLog(lldb_private::Log *log) const
bool RemoveModulesUsingImageInfosAddress(lldb::addr_t image_infos_addr, uint32_t image_infos_count)
static void DebuggerInitialize(lldb_private::Debugger &debugger)
~DynamicLoaderMacOSXDYLD() override
static lldb_private::DynamicLoader * CreateInstance(lldb_private::Process *process, bool force)
void UpdateImageInfosHeaderAndLoadCommands(ImageInfo::collection &image_infos, uint32_t infos_count, bool update_executable)
static llvm::StringRef GetPluginNameStatic()
void DoInitialImageFetch() override
static llvm::StringRef GetPluginDescriptionStatic()
static lldb::ByteOrder GetByteOrderFromMagic(uint32_t magic)
void ClearNotificationBreakpoint() override
DynamicLoaderMacOSXDYLD(lldb_private::Process *process)
bool SetNotificationBreakpoint() override
bool InitializeFromAllImageInfos()
bool ReadImageInfos(lldb::addr_t image_infos_addr, uint32_t image_infos_count, ImageInfo::collection &image_infos)
bool DidSetNotificationBreakpoint() override
uint32_t ParseLoadCommands(const lldb_private::DataExtractor &data, ImageInfo &dylib_info, lldb_private::FileSpec *lc_id_dylinker)
lldb_private::Status CanLoadImage() override
Ask if it is ok to try and load or unload an shared library (image).
uint32_t m_dyld_all_image_infos_stop_id
bool ReadMachHeader(lldb::addr_t addr, llvm::MachO::mach_header *header, lldb_private::DataExtractor *load_command_data)
bool ProcessDidExec() override
Called after attaching a process.
bool IsFullyInitialized() override
Return whether the dynamic loader is fully initialized and it's safe to call its APIs.
bool GetSharedCacheInformation(lldb::addr_t &base_address, lldb_private::UUID &uuid, lldb_private::LazyBool &using_shared_cache, lldb_private::LazyBool &private_shared_cache) override
Get information about the shared cache for a process, if possible.
bool AddModulesUsingImageInfosAddress(lldb::addr_t image_infos_addr, uint32_t image_infos_count)
static bool NotifyBreakpointHit(void *baton, lldb_private::StoppointCallbackContext *context, lldb::user_id_t break_id, lldb::user_id_t break_loc_id)
bool m_process_image_addr_is_all_images_infos
std::recursive_mutex m_mutex
DYLDAllImageInfos m_dyld_all_image_infos
bool ReadAllImageInfosStructure()
lldb::user_id_t m_break_id
lldb::addr_t m_dyld_all_image_infos_addr
bool NeedToDoInitialImageFetch() override
A section + offset based address class.
lldb::addr_t GetLoadAddress(Target *target) const
Get the load address.
void Clear()
Clear the object's state.
An architecture specification class.
uint32_t GetAddressByteSize() const
Returns the size in bytes of an address of the current architecture.
llvm::Triple & GetTriple()
Architecture triple accessor.
lldb::ByteOrder GetByteOrder() const
Returns the byte order for the architecture specification.
llvm::Triple::ArchType GetMachine() const
Returns a machine family for the current architecture.
General Outline: A breakpoint has four main parts, a filter, a resolver, the list of breakpoint locat...
void SetBreakpointKind(const char *kind)
Set the "kind" description for a breakpoint.
void SetCallback(BreakpointHitCallback callback, void *baton, bool is_synchronous=false)
Set the callback action invoked when the breakpoint is hit.
Generic representation of a type in a programming language.
CompilerType GetPointerType() const
Return a new CompilerType that is a pointer to this type.
A uniqued constant string class.
void SetTrimmedCStringWithLength(const char *cstr, size_t fixed_cstr_len)
Set the C string value with the minimum length between fixed_cstr_len and the actual length of the C ...
A subclass of DataBuffer that stores a data buffer on the heap.
lldb::offset_t GetByteSize() const override
Get the number of bytes in the data buffer.
A class to manage flag bits.
static void ReportWarning(std::string message, std::optional< lldb::user_id_t > debugger_id=std::nullopt, std::once_flag *once=nullptr)
Report warning events.
lldb_private::ConstString name
bool UpdateDYLDImageInfoFromNewImageInfo(ImageInfo &image_info)
lldb::ModuleSP GetDYLDModule()
ImageInfo::collection m_dyld_image_infos
uint32_t m_dyld_image_infos_stop_id
std::recursive_mutex & GetMutex() const
static void CreateSettings(lldb_private::Debugger &debugger)
lldb::ModuleSP FindTargetModuleForImageInfo(const ImageInfo &image_info, bool can_create, bool *did_create_ptr)
bool AddModulesUsingImageInfos(ImageInfo::collection &image_infos)
std::vector< std::pair< ImageInfo, lldb::ModuleSP > > PreloadModulesFromImageInfos(const ImageInfo::collection &image_infos)
lldb::ModuleWP m_libpthread_module_wp
bool JSONImageInformationIntoImageInfo(lldb_private::StructuredData::ObjectSP image_details, ImageInfo::collection &image_infos)
bool UpdateImageLoadAddress(lldb_private::Module *module, ImageInfo &info)
void UpdateSpecialBinariesFromPreloadedModules(std::vector< std::pair< ImageInfo, lldb::ModuleSP > > &images)
bool AddModulesUsingPreloadedModules(std::vector< std::pair< ImageInfo, lldb::ModuleSP > > &images)
void SetDYLDModule(lldb::ModuleSP &dyld_module_sp)
lldb_private::Address m_pthread_getspecific_addr
bool UnloadModuleSections(lldb_private::Module *module, ImageInfo &info)
A plug-in interface definition class for dynamic loaders.
Process * m_process
The process that this dynamic loader plug-in is tracking.
bool GetStopWhenImagesChange() const
Get whether the process should stop when images change.
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
Process * GetProcessPtr() const
Returns a pointer to the process object.
Thread & GetThreadRef() const
Returns a reference to the thread object.
void SetFile(llvm::StringRef path, Style style)
Change the file specified with a new path.
void Resolve(llvm::SmallVectorImpl< char > &path)
Resolve path to make it canonical.
static FileSystem & Instance()
void PutCString(const char *cstr)
A collection class for Module objects.
bool AppendIfNeeded(const lldb::ModuleSP &new_module, bool notify=true)
Append a module to the module list, if it is not already there.
bool Remove(const lldb::ModuleSP &module_sp, bool notify=true)
Remove a module from the module list.
void Append(const lldb::ModuleSP &module_sp, bool notify=true)
Append a module to the module list.
ModuleIterable Modules() const
size_t GetSize() const
Gets the size of the module list.
void LogUUIDAndPaths(Log *log, const char *prefix_cstr)
A class that describes an executable image and its associated object and symbol files.
virtual ObjectFile * GetObjectFile()
Get the object file representation for the current architecture.
const ArchSpec & GetArchitecture() const
Get const accessor for the module architecture.
A plug-in interface definition class for object file parsers.
virtual ArchSpec GetArchitecture()=0
Get the ArchSpec for this object file.
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description, ABICreateInstance create_callback)
static bool UnregisterPlugin(ABICreateInstance create_callback)
A plug-in interface definition class for debugging a process.
ThreadList & GetThreadList()
size_t ReadCStringFromMemory(lldb::addr_t vm_addr, char *cstr, size_t cstr_max_len, Status &error)
Read a NULL terminated C string from memory.
virtual size_t ReadMemory(lldb::addr_t vm_addr, void *buf, size_t size, Status &error)
Read of memory from a process.
virtual lldb_private::StructuredData::ObjectSP GetLoadedDynamicLibrariesInfos(lldb::addr_t image_list_address, lldb::addr_t image_count)
Retrieve the list of shared libraries that are loaded for this process This method is used on pre-mac...
lldb::StateType GetState()
Get accessor for the current process state.
uint64_t ReadUnsignedIntegerFromMemory(lldb::addr_t load_addr, size_t byte_size, uint64_t fail_value, Status &error)
Reads an unsigned integer of the specified byte size from process memory.
virtual lldb::addr_t GetImageInfoAddress()
Get the image information address for the current process.
uint32_t GetAddressByteSize() const
uint32_t GetStopID() const
const lldb::ABISP & GetABI()
Target & GetTarget()
Get the target object pointer for this module.
unsigned int UInt(unsigned int fail_value=0) const
unsigned long long ULongLong(unsigned long long fail_value=0) const
static lldb::TypeSystemClangSP GetForTarget(Target &target, std::optional< IsolatedASTKind > ast_kind=DefaultAST, bool create_on_demand=true)
Returns the scratch TypeSystemClang for the given target.
static Status FromErrorString(const char *str)
General Outline: When we hit a breakpoint we need to package up whatever information is needed to eva...
ExecutionContextRef exe_ctx_ref
lldb::break_id_t GetID() const
const char * GetData() const
llvm::raw_ostream & AsRawOstream()
Returns a raw_ostream that forwards the data to this Stream object.
std::shared_ptr< Object > ObjectSP
lldb::addr_t GetLoadAddress(Target *target) const
ConstString GetName() const
void ModulesDidLoad(ModuleList &module_list)
Module * GetExecutableModulePointer()
bool RemoveBreakpointByID(lldb::break_id_t break_id)
lldb::BreakpointSP CreateBreakpoint(const FileSpecList *containingModules, const FileSpec &file, uint32_t line_no, uint32_t column, lldb::addr_t offset, LazyBool check_inlines, LazyBool skip_prologue, bool internal, bool request_hardware, LazyBool move_to_nearest_code)
bool ResolveLoadAddress(lldb::addr_t load_addr, Address &so_addr, uint32_t stop_id=SectionLoadHistory::eStopIDNow)
const ModuleList & GetImages() const
Get accessor for the images for this process.
const ArchSpec & GetArchitecture() const
void SetExecutableModule(lldb::ModuleSP &module_sp, LoadDependentFiles load_dependent_files=eLoadDependentsDefault)
Set the main executable module.
uint32_t GetSize(bool can_update=true)
lldb::ThreadSP GetThreadAtIndex(uint32_t idx, bool can_update=true)
void PushValue(const Value &value)
Value * GetValueAtIndex(size_t idx)
const Scalar & GetScalar() const
void SetCompilerType(const CompilerType &compiler_type)
void SetValueType(ValueType value_type)
uint8_t * GetBytes()
Get a pointer to the data.
#define LLDB_INVALID_BREAK_ID
#define UNUSED_IF_ASSERT_DISABLED(x)
#define LLDB_BREAK_ID_IS_VALID(bid)
#define LLDB_INVALID_ADDRESS
lldb::ByteOrder InlHostByteOrder()
A class that represents a running process on the host machine.
Log * GetLog(Cat mask)
Retrieve the Log object for the channel associated with the given log enum.
const char * StateAsCString(lldb::StateType state)
Converts a StateType to a C string.
std::shared_ptr< lldb_private::ABI > ABISP
std::shared_ptr< lldb_private::StackFrame > StackFrameSP
std::shared_ptr< lldb_private::Thread > ThreadSP
@ eEncodingUint
unsigned integer
ByteOrder
Byte ordering definitions.
std::shared_ptr< lldb_private::TypeSystemClang > TypeSystemClangSP
std::shared_ptr< lldb_private::Section > SectionSP
std::shared_ptr< lldb_private::WritableDataBuffer > WritableDataBufferSP
std::shared_ptr< lldb_private::Module > ModuleSP
uint32_t dylib_info_count
bool processDetachedFromSharedRegion
bool libSystemInitialized
lldb::addr_t dylib_info_addr
lldb::addr_t notification
lldb::addr_t dyldImageLoadAddress
lldb_private::UUID uuid
UUID for this dylib if it has one, else all zeros.
lldb::addr_t address
Address of mach header for this dylib.
lldb::addr_t slide
The amount to slide all segments by if there is a global slide.
llvm::MachO::mach_header header
The mach header for this image.
std::vector< Segment > segments
All segment vmaddr and vmsize pairs for this executable (from memory of inferior).
lldb_private::FileSpec file_spec
Resolved path for this dylib.
void Clear(bool load_cmd_data_only)
uint32_t GetAddressByteSize()
lldb::user_id_t GetID() const
Get accessor for the user ID.