summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Object/MachOObjectFile.cpp4
-rwxr-xr-xllvm/test/tools/llvm-nm/X86/Inputs/macho-dwarf-x86_64bin0 -> 9048 bytes
-rw-r--r--llvm/test/tools/llvm-nm/X86/macho-dwarf.test15
3 files changed, 19 insertions, 0 deletions
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index 2e3415618e5..3140316b50e 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -1659,6 +1659,10 @@ void MachOObjectFile::moveSymbolNext(DataRefImpl &Symb) const {
Expected<StringRef> MachOObjectFile::getSymbolName(DataRefImpl Symb) const {
StringRef StringTable = getStringTableData();
MachO::nlist_base Entry = getSymbolTableEntryBase(*this, Symb);
+ if (Entry.n_strx == 0)
+ // A n_strx value of 0 indicates that no name is associated with a
+ // particular symbol table entry.
+ return StringRef();
const char *Start = &StringTable.data()[Entry.n_strx];
if (Start < getData().begin() || Start >= getData().end()) {
return malformedError("bad string index: " + Twine(Entry.n_strx) +
diff --git a/llvm/test/tools/llvm-nm/X86/Inputs/macho-dwarf-x86_64 b/llvm/test/tools/llvm-nm/X86/Inputs/macho-dwarf-x86_64
new file mode 100755
index 00000000000..eab668db668
--- /dev/null
+++ b/llvm/test/tools/llvm-nm/X86/Inputs/macho-dwarf-x86_64
Binary files differ
diff --git a/llvm/test/tools/llvm-nm/X86/macho-dwarf.test b/llvm/test/tools/llvm-nm/X86/macho-dwarf.test
new file mode 100644
index 00000000000..41210f8ec55
--- /dev/null
+++ b/llvm/test/tools/llvm-nm/X86/macho-dwarf.test
@@ -0,0 +1,15 @@
+# This file was constructed from 3 trivial source files and linked with macOS's
+# ld64 linker.
+#
+# cc -gdwarf-2 -o foo.o -c foo.c
+# cc -gdwarf-2 -o bar.o -c bar.c
+# ld -r foo.o bar.o -o foobar.o
+# cc -gdwarf-2 -o baz foobar.o baz.c
+
+# RUN: llvm-nm -ap %p/Inputs/macho-dwarf-x86_64 | FileCheck -match-full-lines -strict-whitespace %s
+
+# CHECK:000000000000002a - 01 0000 ENSYM
+# CHECK:0000000000000010 - 01 0000 ENSYM
+# CHECK:000000000000000b - 01 0000 ENSYM
+
+
OpenPOWER on IntegriCloud