summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorFrederic Riss <friss@apple.com>2015-12-11 17:50:37 +0000
committerFrederic Riss <friss@apple.com>2015-12-11 17:50:37 +0000
commitba16151251acbfd2aec59343aca6c1e6c6a0c97c (patch)
tree949003c63cc710fed3708d0fbb51c57c4b8d4aca /tools
parent47be3618f189879a22ceb060548a6a47d124f3f7 (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.cpp17
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;
}
}