diff options
author | Frederic Riss <friss@apple.com> | 2015-12-11 17:50:37 +0000 |
---|---|---|
committer | Frederic Riss <friss@apple.com> | 2015-12-11 17:50:37 +0000 |
commit | ba16151251acbfd2aec59343aca6c1e6c6a0c97c (patch) | |
tree | 949003c63cc710fed3708d0fbb51c57c4b8d4aca /tools | |
parent | 47be3618f189879a22ceb060548a6a47d124f3f7 (diff) |
[dsymutil] Ignore absolute symbols in the debug map
Quoting from the comment added to the code:
// Objective-C on i386 uses artificial absolute symbols to
// perform some link time checks. Those symbols have a fixed 0
// address that might conflict with real symbols in the object
// file. As I cannot see a way for absolute symbols to find
// their way into the debug information, let's just ignore those.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255350 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r-- | tools/dsymutil/MachODebugMapParser.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/tools/dsymutil/MachODebugMapParser.cpp b/tools/dsymutil/MachODebugMapParser.cpp index 0eb242d321f..4412db25426 100644 --- a/tools/dsymutil/MachODebugMapParser.cpp +++ b/tools/dsymutil/MachODebugMapParser.cpp @@ -10,6 +10,7 @@ #include "BinaryHolder.h" #include "DebugMap.h" #include "dsymutil.h" +#include "llvm/ADT/Optional.h" #include "llvm/Object/MachO.h" #include "llvm/Support/Path.h" #include "llvm/Support/raw_ostream.h" @@ -53,7 +54,7 @@ private: /// Owns the MemoryBuffer for the currently handled object file. BinaryHolder CurrentObjectHolder; /// Map of the currently processed object file symbol addresses. - StringMap<uint64_t> CurrentObjectAddresses; + StringMap<Optional<uint64_t>> CurrentObjectAddresses; /// Element of the debug map corresponfing to the current object file. DebugMapObject *CurrentDebugMapObject; @@ -388,7 +389,9 @@ void MachODebugMapParser::handleStabSymbolTableEntry(uint32_t StringIndex, if (ObjectSymIt == CurrentObjectAddresses.end()) return Warning("could not find object file symbol for symbol " + Twine(Name)); - if (!CurrentDebugMapObject->addSymbol(Name, ObjectSymIt->getValue(), Value, + if (!ObjectSymIt->getValue()) + return; + if (!CurrentDebugMapObject->addSymbol(Name, *ObjectSymIt->getValue(), Value, Size)) return Warning(Twine("failed to insert symbol '") + Name + "' in the debug map."); @@ -404,7 +407,15 @@ void MachODebugMapParser::loadCurrentObjectFileSymbols( ErrorOr<StringRef> Name = Sym.getName(); if (!Name) continue; - CurrentObjectAddresses[*Name] = Addr; + // Objective-C on i386 uses artificial absolute symbols to + // perform some link time checks. Those symbols have a fixed 0 + // address that might conflict with real symbols in the object + // file. As I cannot see a way for absolute symbols to find + // their way into the debug information, let's just ignore those. + if (Sym.getFlags() & SymbolRef::SF_Absolute) + CurrentObjectAddresses[*Name] = None; + else + CurrentObjectAddresses[*Name] = Addr; } } |