<rdar://problem/13128331>
Fixed "target symbols add" to correctly extract all module specifications from a dSYM file that is supplied and match the symbol file to a current target module using the UUID values if they are available.
This fixes the case where you add a dSYM file (like "foo.dSYM") which is for a renamed executable (like "bar"). In our case it was "mach_kernel.dSYM" which didn't match "mach_kernel.sys".
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@181916 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index cfa5438..140272e 100644
--- a/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -397,6 +397,26 @@
}
};
+static uint32_t
+MachHeaderSizeFromMagic(uint32_t magic)
+{
+ switch (magic)
+ {
+ case HeaderMagic32:
+ case HeaderMagic32Swapped:
+ return sizeof(struct mach_header);
+
+ case HeaderMagic64:
+ case HeaderMagic64Swapped:
+ return sizeof(struct mach_header_64);
+ break;
+
+ default:
+ break;
+ }
+ return 0;
+}
+
#define MACHO_NLIST_ARM_SYMBOL_IS_THUMB 0x0008
void
@@ -493,7 +513,7 @@
if (header.sizeofcmds >= data_sp->GetByteSize())
{
data_sp = file.ReadFileContents(file_offset, header.sizeofcmds);
- data_offset = 0;
+ data_offset = MachHeaderSizeFromMagic(header.magic) + file_offset;
}
if (data_sp)
{
@@ -550,29 +570,6 @@
return g_section_name_eh_frame;
}
-
-
-static uint32_t
-MachHeaderSizeFromMagic(uint32_t magic)
-{
- switch (magic)
- {
- case HeaderMagic32:
- case HeaderMagic32Swapped:
- return sizeof(struct mach_header);
-
- case HeaderMagic64:
- case HeaderMagic64Swapped:
- return sizeof(struct mach_header_64);
- break;
-
- default:
- break;
- }
- return 0;
-}
-
-
bool
ObjectFileMachO::MagicBytesMatch (DataBufferSP& data_sp,
lldb::addr_t data_offset,