[PATCH] D26936: llvm-nm: Don't print value or size for undefined or weak symbols
Meador Inge via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 23 12:27:15 PST 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL287802: llvm-nm: Don't print value or size for undefined or weak symbols (authored by meadori).
Changed prior to commit:
https://reviews.llvm.org/D26936?vs=78781&id=79136#toc
Repository:
rL LLVM
https://reviews.llvm.org/D26936
Files:
llvm/trunk/test/Object/nm-trivial-object.test
llvm/trunk/test/tools/llvm-nm/X86/Inputs/weak.obj.elf-x86_64
llvm/trunk/test/tools/llvm-nm/X86/weak.test
llvm/trunk/tools/llvm-nm/llvm-nm.cpp
Index: llvm/trunk/tools/llvm-nm/llvm-nm.cpp
===================================================================
--- llvm/trunk/tools/llvm-nm/llvm-nm.cpp
+++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp
@@ -597,6 +597,10 @@
outs() << Str;
}
+static bool symbolIsDefined(const NMSymbol &Sym) {
+ return Sym.TypeChar != 'U' && Sym.TypeChar != 'w' && Sym.TypeChar != 'v';
+}
+
static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
const std::string &ArchiveName,
const std::string &ArchitectureName) {
@@ -683,24 +687,28 @@
char SymbolAddrStr[18] = "";
char SymbolSizeStr[18] = "";
- if (OutputFormat == sysv || I->TypeChar == 'U') {
- if (OutputFormat == posix)
+ // If the format is SysV or the symbol isn't defined, then print spaces.
+ if (OutputFormat == sysv || !symbolIsDefined(*I)) {
+ if (OutputFormat == posix) {
format(printFormat, I->Address)
.print(SymbolAddrStr, sizeof(SymbolAddrStr));
- else
+ format(printFormat, I->Size)
+ .print(SymbolSizeStr, sizeof(SymbolSizeStr));
+ } else {
strcpy(SymbolAddrStr, printBlanks);
+ strcpy(SymbolSizeStr, printBlanks);
+ }
}
- if (OutputFormat == sysv)
- strcpy(SymbolSizeStr, printBlanks);
- if (I->TypeChar != 'U') {
+ // Otherwise, print the symbol address and size.
+ if (symbolIsDefined(*I)) {
if (Obj.isIR())
strcpy(SymbolAddrStr, printDashes);
else
format(printFormat, I->Address)
.print(SymbolAddrStr, sizeof(SymbolAddrStr));
+ format(printFormat, I->Size).print(SymbolSizeStr, sizeof(SymbolSizeStr));
}
- format(printFormat, I->Size).print(SymbolSizeStr, sizeof(SymbolSizeStr));
// If OutputFormat is darwin or we are printing Mach-O symbols in hex and
// we have a MachOObjectFile, call darwinPrintSymbol to print as darwin's
Index: llvm/trunk/test/Object/nm-trivial-object.test
===================================================================
--- llvm/trunk/test/Object/nm-trivial-object.test
+++ llvm/trunk/test/Object/nm-trivial-object.test
@@ -79,10 +79,9 @@
ELF: 00000000 T main
ELF: U puts
-FIXME: we should not print the size of undefined symbols.
-ELF-SIZE: 00000000 U SomeOtherFunction
+ELF-SIZE: U SomeOtherFunction
ELF-SIZE-NEXT: 00000000 00000024 T main
-ELF-SIZE-NEXT: 00000000 U puts
+ELF-SIZE-NEXT: U puts
ELF-o: {{.*}}/trivial-object-test.elf-i386: U SomeOtherFunction
ELF-o: {{.*}}/trivial-object-test.elf-i386: 00000000 T main
Index: llvm/trunk/test/tools/llvm-nm/X86/weak.test
===================================================================
--- llvm/trunk/test/tools/llvm-nm/X86/weak.test
+++ llvm/trunk/test/tools/llvm-nm/X86/weak.test
@@ -0,0 +1,6 @@
+# RUN: llvm-nm -B -S %p/Inputs/weak.obj.elf-x86_64 | FileCheck --match-full-lines %s
+
+CHECK: w weak_extern_func
+CHECK: w weak_extern_var
+CHECK: 0000000000000000 0000000000000011 W weak_func
+CHECK: 0000000000000000 0000000000000004 V weak_var
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D26936.79136.patch
Type: text/x-patch
Size: 3191 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161123/6ec408dd/attachment.bin>
More information about the llvm-commits
mailing list