From e473de21aa18bdfd23b738ca147012aad43865f3 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Mon, 6 Jul 2015 18:18:44 +0000 Subject: [PATCH] Fix printing of common symbols. Printing the symbol size matches the behavior or both gnu nm and freebsd nm. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241480 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Object/X86/nm-print-size.s | 3 +++ tools/llvm-nm/llvm-nm.cpp | 13 +++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/test/Object/X86/nm-print-size.s b/test/Object/X86/nm-print-size.s index b833601969c..4aed80257ea 100644 --- a/test/Object/X86/nm-print-size.s +++ b/test/Object/X86/nm-print-size.s @@ -3,6 +3,7 @@ // CHECK: 0000000000000000 ffffffffffffffff n a // CHECK: 0000000000000000 0000000000000000 N b +// CHECK: 0000000000000004 0000000000000004 C c .section foo a: @@ -10,3 +11,5 @@ a: .global b b: + + .comm c,4,8 diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index cf674610995..4edb4efa8d0 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -901,10 +901,15 @@ static void dumpSymbolNamesFromObject(SymbolicFile &Obj, bool printName, S.Size = ELFSymbolRef(Sym).getSize(); } if (PrintAddress && isa(Obj)) { - ErrorOr AddressOrErr = SymbolRef(Sym).getAddress(); - if (error(AddressOrErr.getError())) - break; - S.Address = *AddressOrErr; + SymbolRef SymRef(Sym); + if (SymFlags & SymbolRef::SF_Common) { + S.Address = SymRef.getCommonSize(); + } else { + ErrorOr AddressOrErr = SymRef.getAddress(); + if (error(AddressOrErr.getError())) + break; + S.Address = *AddressOrErr; + } } S.TypeChar = getNMTypeChar(Obj, Sym); if (error(Sym.printName(OS))) -- 2.34.1