diff options
author | Jason Molenda <jmolenda@apple.com> | 2013-05-07 22:55:04 +0000 |
---|---|---|
committer | Jason Molenda <jmolenda@apple.com> | 2013-05-07 22:55:04 +0000 |
commit | 933979342a78bb8c91e0bd49fdb22b7d126beb68 (patch) | |
tree | 13b62f9f3c32f6ca639972194be7245c773dbb1f /lldb/source/Plugins/SymbolVendor | |
parent | bcd06966d512f0fdca937deb87d21a5c07520103 (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.cpp | 10 |
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); } |