summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Enderby <enderby@apple.com>2014-05-20 20:32:18 +0000
committerKevin Enderby <enderby@apple.com>2014-05-20 20:32:18 +0000
commite3f74564ffaab3d7f9aad010a38a8a044599a540 (patch)
tree8b90fd00ac547bd81fbeebdabcf88389050933dc
parent50d4008b471858a5dace11cc046e997bb0cf95eb (diff)
downloadllvm-e3f74564ffaab3d7f9aad010a38a8a044599a540.tar.gz
llvm-e3f74564ffaab3d7f9aad010a38a8a044599a540.tar.bz2
llvm-e3f74564ffaab3d7f9aad010a38a8a044599a540.tar.xz
Update MachOObjectFile::getSymbolAddress so it returns UnknownAddressOrSize
for undefined symbols. Allowing llvm-nm to print spaces instead of 0’s for the value of undefined symbols in Mach-O files. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209235 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Object/MachOObjectFile.cpp12
-rw-r--r--test/Object/nm-trivial-object.test8
-rw-r--r--test/Object/nm-universal-binary.test2
3 files changed, 15 insertions, 7 deletions
diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp
index 0951460ccb..9c581d3784 100644
--- a/lib/Object/MachOObjectFile.cpp
+++ b/lib/Object/MachOObjectFile.cpp
@@ -472,10 +472,18 @@ error_code MachOObjectFile::getSymbolAddress(DataRefImpl Symb,
uint64_t &Res) const {
if (is64Bit()) {
MachO::nlist_64 Entry = getSymbol64TableEntry(Symb);
- Res = Entry.n_value;
+ if ((Entry.n_type & MachO::N_TYPE) == MachO::N_UNDF &&
+ Entry.n_value == 0)
+ Res = UnknownAddressOrSize;
+ else
+ Res = Entry.n_value;
} else {
MachO::nlist Entry = getSymbolTableEntry(Symb);
- Res = Entry.n_value;
+ if ((Entry.n_type & MachO::N_TYPE) == MachO::N_UNDF &&
+ Entry.n_value == 0)
+ Res = UnknownAddressOrSize;
+ else
+ Res = Entry.n_value;
}
return object_error::success;
}
diff --git a/test/Object/nm-trivial-object.test b/test/Object/nm-trivial-object.test
index 1117492898..20ac6621e7 100644
--- a/test/Object/nm-trivial-object.test
+++ b/test/Object/nm-trivial-object.test
@@ -55,14 +55,14 @@ WEAK-ELF64: 0000000000000000 V x2
ABSOLUTE-ELF64: 0000000000000123 a a1
ABSOLUTE-ELF64: 0000000000000123 A a2
-macho: 00000000 U _SomeOtherFunction
+macho: U _SomeOtherFunction
macho: 00000000 T _main
-macho: 00000000 U _puts
+macho: U _puts
macho64: 0000000000000028 s L_.str
-macho64: 0000000000000000 U _SomeOtherFunction
+macho64: U _SomeOtherFunction
macho64: 0000000000000000 T _main
-macho64: 0000000000000000 U _puts
+macho64: U _puts
Test that nm uses addresses even with ELF .o files.
diff --git a/test/Object/nm-universal-binary.test b/test/Object/nm-universal-binary.test
index faf4812e53..c20c733dcd 100644
--- a/test/Object/nm-universal-binary.test
+++ b/test/Object/nm-universal-binary.test
@@ -13,7 +13,7 @@ CHECK-AR: 0000000000000068 s EH_frame0
CHECK-AR: 000000000000003b s L_.str
CHECK-AR: 0000000000000000 T _main
CHECK-AR: 0000000000000080 S _main.eh
-CHECK-AR: 0000000000000000 U _printf
+CHECK-AR: U _printf
CHECK-AR: macho-universal-archive.x86_64.i386:i386:foo.o:
CHECK-AR: 00000008 S _bar
CHECK-AR: 00000000 T _foo