summaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/SymbolVendor
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2013-05-07 22:55:04 +0000
committerJason Molenda <jmolenda@apple.com>2013-05-07 22:55:04 +0000
commit933979342a78bb8c91e0bd49fdb22b7d126beb68 (patch)
tree13b62f9f3c32f6ca639972194be7245c773dbb1f /lldb/source/Plugins/SymbolVendor
parentbcd06966d512f0fdca937deb87d21a5c07520103 (diff)
Add code to ReplaceDSYMSectionsWithExecutableSections() to handle the case where
a new section is added to the executable after the dSYM has been created, e.g. the CTF segment added to mach_kernel after all other linking and processing has been finished. <rdar://problem/13258780>
Diffstat (limited to 'lldb/source/Plugins/SymbolVendor')
-rw-r--r--lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp b/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
index 4b271b40317..56c04ba17b6 100644
--- a/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
+++ b/lldb/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
@@ -107,6 +107,16 @@ ReplaceDSYMSectionsWithExecutableSections (ObjectFile *exec_objfile, ObjectFile
// and in the dSYM with those from the executable. If we fail to
// replace the one in the dSYM, then add the executable section to
// the dSYM.
+ SectionSP dsym_sect_sp(dsym_section_list->FindSectionByID(exec_sect_sp->GetID()));
+ if (dsym_sect_sp.get() && dsym_sect_sp->GetName() != exec_sect_sp->GetName())
+ {
+ // The sections in a dSYM are normally a superset of the sections in an executable.
+ // If we find a section # in the exectuable & dSYM that don't have the same name,
+ // something has changed since the dSYM was written. The mach_kernel DSTROOT binary
+ // has a CTF segment added, for instance, and it's easiest to simply not add that to
+ // the dSYM - none of the nlist entries are going to have references to that section.
+ continue;
+ }
if (dsym_section_list->ReplaceSection(exec_sect_sp->GetID(), exec_sect_sp, 0) == false)
dsym_section_list->AddSection(exec_sect_sp);
}