[llvm] r321773 - Do not look up symbol names when n_strx == 0
Michael Trent via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 3 15:28:32 PST 2018
Author: mtrent
Date: Wed Jan 3 15:28:32 2018
New Revision: 321773
URL: http://llvm.org/viewvc/llvm-project?rev=321773&view=rev
Log:
Do not look up symbol names when n_strx == 0
Summary:
Historical tools for working with mach-o binaries verify the nlist field
n_strx has a non-zero value before using that value to retrieve symbol names.
Under some cirumstances, llvm-nm will attempt to display the symbol name at
position 0, even though symbol names at that position are not well defined.
This change addresses this problem by returning an empty string when n_strx
is zero.
rdar://problem/35750548
Reviewers: enderby, davide
Reviewed By: enderby, davide
Subscribers: davide, llvm-commits, JDevlieghere
Differential Revision: https://reviews.llvm.org/D41657
Added:
llvm/trunk/test/tools/llvm-nm/X86/Inputs/macho-dwarf-x86_64 (with props)
llvm/trunk/test/tools/llvm-nm/X86/macho-dwarf.test
Modified:
llvm/trunk/lib/Object/MachOObjectFile.cpp
Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=321773&r1=321772&r2=321773&view=diff
==============================================================================
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Wed Jan 3 15:28:32 2018
@@ -1659,6 +1659,10 @@ void MachOObjectFile::moveSymbolNext(Dat
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) +
Added: llvm/trunk/test/tools/llvm-nm/X86/Inputs/macho-dwarf-x86_64
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-nm/X86/Inputs/macho-dwarf-x86_64?rev=321773&view=auto
==============================================================================
Binary file - no diff available.
Propchange: llvm/trunk/test/tools/llvm-nm/X86/Inputs/macho-dwarf-x86_64
------------------------------------------------------------------------------
svn:executable = *
Propchange: llvm/trunk/test/tools/llvm-nm/X86/Inputs/macho-dwarf-x86_64
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: llvm/trunk/test/tools/llvm-nm/X86/macho-dwarf.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-nm/X86/macho-dwarf.test?rev=321773&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-nm/X86/macho-dwarf.test (added)
+++ llvm/trunk/test/tools/llvm-nm/X86/macho-dwarf.test Wed Jan 3 15:28:32 2018
@@ -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
+
+
More information about the llvm-commits
mailing list