[llvm] 4372e62 - [AIX] add the xcoff symbol size for the llvm-nm.

via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 11 13:24:56 PST 2022


Author: zhijian
Date: 2022-01-11T16:24:43-05:00
New Revision: 4372e629a9a98577a6a2d130109c3dc7da84dc62

URL: https://github.com/llvm/llvm-project/commit/4372e629a9a98577a6a2d130109c3dc7da84dc62
DIFF: https://github.com/llvm/llvm-project/commit/4372e629a9a98577a6a2d130109c3dc7da84dc62.diff

LOG: [AIX] add the xcoff symbol size for the llvm-nm.

Summary:

add the xcoff symbol size for the llvm-nm.

Reviewers: James Henderson
Differential Revision: https://reviews.llvm.org/D113104

Added: 
    llvm/test/tools/llvm-nm/XCOFF/size.test

Modified: 
    llvm/tools/llvm-nm/llvm-nm.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-nm/XCOFF/size.test b/llvm/test/tools/llvm-nm/XCOFF/size.test
new file mode 100644
index 000000000000..182f04868c92
--- /dev/null
+++ b/llvm/test/tools/llvm-nm/XCOFF/size.test
@@ -0,0 +1,51 @@
+## Test llvm-nm for XCOFF object files with --print-size option.
+
+# RUN: yaml2obj %s -o %t.o
+# RUN: llvm-nm  --print-size %t.o | FileCheck --match-full-lines %s
+
+--- !XCOFF
+FileHeader:
+  MagicNumber:    0x1DF
+Sections:
+  - Name:         .text
+    Flags:        [ STYP_TEXT ]
+  - Name:         .data
+    Flags:        [ STYP_DATA ]
+  - Name:         .bss
+    Flags:        [ STYP_BSS ]
+Symbols:
+  - Name:            ._ZL5func0v
+    Section:         .text
+    StorageClass:    C_EXT
+    Type:            0x20
+    AuxEntries:
+     - Type:                   AUX_CSECT
+       SymbolAlignmentAndType: 0x02
+       StorageMappingClass:    XMC_PR
+  - Name:            val
+    Value:           0x200
+    Section:         .data
+    StorageClass:    C_EXT
+    Type:            0x20
+    AuxEntries:
+     - Type:                   AUX_CSECT
+       SymbolAlignmentAndType: 0x01
+       StorageMappingClass:    XMC_RW
+       SectionOrLength:        0x8
+  - Name:            comval
+    Section:         .bss
+    Value:           0x13C
+    StorageClass:    C_EXT
+    Type:            0x00
+    AuxEntries:
+     - Type:                   AUX_CSECT
+       SymbolAlignmentAndType: 0x03
+       StorageMappingClass:    XMC_RW
+       SectionOrLength:        0x4
+
+## Label symbol.
+# CHECK:      00000000 00000000 T ._ZL5func0v
+## Common symbol.
+# CHECK-NEXT: 0000013c 00000004 C comval
+## SD symbol.
+# CHECK-NEXT: 00000200 00000008 D val

diff  --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp
index 82ae31b17ca2..68df643a04ae 100644
--- a/llvm/tools/llvm-nm/llvm-nm.cpp
+++ b/llvm/tools/llvm-nm/llvm-nm.cpp
@@ -1687,6 +1687,11 @@ static void dumpSymbolNamesFromObject(SymbolicFile &Obj, bool printName,
       S.Address = 0;
       if (isa<ELFObjectFileBase>(&Obj))
         S.Size = ELFSymbolRef(Sym).getSize();
+
+      if (const XCOFFObjectFile *XCOFFObj =
+              dyn_cast<const XCOFFObjectFile>(&Obj))
+        S.Size = XCOFFObj->getSymbolSize(Sym.getRawDataRefImpl());
+
       if (PrintAddress && isa<ObjectFile>(Obj)) {
         SymbolRef SymRef(Sym);
         Expected<uint64_t> AddressOrErr = SymRef.getAddress();


        


More information about the llvm-commits mailing list