[llvm] 0bd3da5 - [llvm-objdump][test] Reorganize ELF --syms tests

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 13 08:01:06 PDT 2020


Author: Fangrui Song
Date: 2020-03-13T08:00:59-07:00
New Revision: 0bd3da5bfaeee377d4a009887aa20f0ab81c80ea

URL: https://github.com/llvm/llvm-project/commit/0bd3da5bfaeee377d4a009887aa20f0ab81c80ea
DIFF: https://github.com/llvm/llvm-project/commit/0bd3da5bfaeee377d4a009887aa20f0ab81c80ea.diff

LOG: [llvm-objdump][test] Reorganize ELF --syms tests

Merge symbol-table-elf.test and common-symbol-elf.test, and add some
more tests (invalid st_type, STT_COMMON, STT_GNU_IFUNC, STT_HIOS, STT_LOPROC, SHN_UNDEF, SHN_ABS, SHN_COMMON, STB_GNU_UNIQUE, invalid binding, etc) to test/llvm-objdump/ELF/symbol-table.test

The naming follows test/llvm-{readobj,objcopy}/ELF .

Some discrepancy from GNU objdump:

* STT_COMMON: can be produced with `ld.bfd -r -z common`, but it almost never exists in practice
* STT_GNU_IFUNC: will be fixed by D75793
* STB_GNU_UNIQUE: will be fixed by D75797
* STT_TLS: GNU objdump does not print 'O'
* unknown binding: GNU objdump does not print 'g'. This probably does not matter.
* A reserved symbol index is displayed as *ABS* in GNU objdump. It is not clear what we should print.

Reviewed By: grimar

Differential Revision: https://reviews.llvm.org/D75796

Added: 
    llvm/test/tools/llvm-objdump/ELF/symbol-table.test

Modified: 
    

Removed: 
    llvm/test/tools/llvm-objdump/Inputs/common-symbol-elf
    llvm/test/tools/llvm-objdump/common-symbol-elf.test
    llvm/test/tools/llvm-objdump/symbol-table-elf.test


################################################################################
diff  --git a/llvm/test/tools/llvm-objdump/ELF/symbol-table.test b/llvm/test/tools/llvm-objdump/ELF/symbol-table.test
new file mode 100644
index 000000000000..ef8fe0bb194d
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/ELF/symbol-table.test
@@ -0,0 +1,148 @@
+## Test how --syms/-t prints the static symbol table.
+# RUN: yaml2obj --docnum=1 %s -o %t
+# RUN: llvm-objdump --syms %t > %t.txt
+# RUN: llvm-objdump -t %t | cmp - %t.txt
+# RUN: FileCheck %s --input-file=%t.txt --match-full-lines --strict-whitespace
+
+#      CHECK:SYMBOL TABLE:
+# CHECK-NEXT:0000000000000000 l    df *ABS*	0000000000000000 a.c
+# CHECK-NEXT:0000000000000000 l    d  .text	0000000000000000 .text
+# CHECK-NEXT:0000000000002000 l     O .data	0000000000000000 local_object
+# CHECK-NEXT:0000000000001fff l     F .text	0000000000000000 local_func
+# CHECK-NEXT:0000000000000000 l       *ABS*	0000000000000000 local_abs
+# CHECK-NEXT:0000000000000000 g       .data	0000000000000000 notype
+# CHECK-NEXT:0000000000000000 g     O .data	0000000000000010 object
+# CHECK-NEXT:0000000000000000 g     F .text	000000000000000f func
+# CHECK-NEXT:0000000000000000 g     O *COM*	0000000000000000 common
+# CHECK-NEXT:0000000000000000 g     O .data	0000000000000000 tls
+# CHECK-NEXT:0000000000000000 g       .text	0000000000000000 ifunc
+# CHECK-NEXT:0000000000000000 g       .text	0000000000000000 invalid_type
+# CHECK-NEXT:0000000000000000 g       .text	0000000000000000 STT_HIOS
+# CHECK-NEXT:0000000000000000 g       .text	0000000000000000 STT_LOPROC
+# CHECK-NEXT:0000000000000000         *UND*	0000000000000000 undef
+# CHECK-NEXT:0000000000000000         *UND*	0000000000000000 SHN_LOPROC
+# CHECK-NEXT:0000000000000000         *UND*	0000000000000000 SHN_LOOS
+# CHECK-NEXT:0000000000000000         *UND*	0000000000000000 reserve
+# CHECK-NEXT:0000000000000000 g       *ABS*	0000000000000000 abs
+# CHECK-NEXT:0000000000000000         *COM*	0000000000000000 common2
+# CHECK-NEXT:0000000000000000 g     O .data	0000000000000000 gnu_unique
+# CHECK-NEXT:0000000000000000 g       .data	0000000000000000 invalid_binding
+# CHECK-NEXT:0000000000000000 g       .data	0000000000000000 STB_HIOS
+# CHECK-NEXT:0000000000000000 g       .data	0000000000000000 STB_LOPROC
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name:  .text
+    Type:  SHT_PROGBITS
+  - Name:  .data
+    Type:  SHT_PROGBITS
+Symbols:
+  - Name:    "a.c"
+    Type:    STT_FILE
+    Index:   SHN_ABS
+  - Type:    STT_SECTION
+    Section: .text
+  - Name:    local_object
+    Type:    STT_OBJECT
+    Section: .data
+    Value:   0x2000
+  - Name:    local_func
+    Type:    STT_FUNC
+    Section: .text
+    Value:   0x1fff
+  - Name:    local_abs
+    Index:   SHN_ABS
+  - Name:    notype
+    Binding: STB_GLOBAL
+    Section: .data
+  - Name:    object
+    Type:    STT_OBJECT
+    Size:    0x10
+    Binding: STB_GLOBAL
+    Section: .data
+  - Name:    func
+    Type:    STT_FUNC
+    Size:    0xf
+    Binding: STB_GLOBAL
+    Section: .text
+  - Name:    common
+    Type:    STT_COMMON
+    Binding: STB_GLOBAL
+    Section: .data
+  - Name:    tls
+    Type:    STT_TLS
+    Binding: STB_GLOBAL
+    Section: .data
+  - Name:    ifunc
+    Type:    STT_GNU_IFUNC
+    Binding: STB_GLOBAL
+    Section: .text
+  - Name:    invalid_type
+    Type:    7
+    Binding: STB_GLOBAL
+    Section: .text
+  - Name:    STT_HIOS
+    Type:    12
+    Binding: STB_GLOBAL
+    Section: .text
+  - Name:    STT_LOPROC
+    Type:    13
+    Binding: STB_GLOBAL
+    Section: .text
+  - Name:    undef
+    Binding: STB_GLOBAL
+  - Name:    SHN_LOPROC
+    Binding: STB_GLOBAL
+    Index:   0xff00
+  - Name:    SHN_LOOS
+    Binding: STB_GLOBAL
+    Index:   0xff20
+  - Name:    reserve
+    Binding: STB_GLOBAL
+    Index:   0xff40
+  - Name:    abs
+    Index:   SHN_ABS
+    Binding: STB_GLOBAL
+  - Name:    common2
+    Binding: STB_GLOBAL
+    Index:   SHN_COMMON
+  - Name:    gnu_unique
+    Type:    STT_OBJECT
+    Binding: STB_GNU_UNIQUE
+    Section: .data
+  - Name:    invalid_binding
+    Binding: 3
+    Section: .data
+  - Name:    STB_HIOS
+    Binding: 12
+    Section: .data
+  - Name:    STB_LOPROC
+    Binding: 13
+    Section: .data
+
+## For an ELF32 object, print the address and size fields as 32-bit hexadecimals.
+# RUN: yaml2obj --docnum=2 -D BITS=32 %s -o %t.32
+# RUN: llvm-objdump --syms %t.32 | FileCheck --check-prefix=ELF32 %s --match-full-lines --strict-whitespace
+## For an ELF64 object, print the address and size fields as 64-bit hexadecimals.
+# RUN: yaml2obj --docnum=2 -D BITS=64 %s -o %t.64
+# RUN: llvm-objdump --syms %t.64 | FileCheck --check-prefix=ELF64 %s --match-full-lines --strict-whitespace
+
+#      ELF32:SYMBOL TABLE:
+# ELF32-NEXT:00000000         *UND*	00000000 sym
+
+#      ELF64:SYMBOL TABLE:
+# ELF64-NEXT:0000000000000000         *UND*	0000000000000000 sym
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS[[BITS]]
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Symbols:
+  - Name: sym

diff  --git a/llvm/test/tools/llvm-objdump/Inputs/common-symbol-elf b/llvm/test/tools/llvm-objdump/Inputs/common-symbol-elf
deleted file mode 100644
index 9609edb041fe..000000000000
Binary files a/llvm/test/tools/llvm-objdump/Inputs/common-symbol-elf and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-objdump/common-symbol-elf.test b/llvm/test/tools/llvm-objdump/common-symbol-elf.test
deleted file mode 100644
index 5e4c48e3e9d7..000000000000
--- a/llvm/test/tools/llvm-objdump/common-symbol-elf.test
+++ /dev/null
@@ -1,3 +0,0 @@
-// RUN: llvm-objdump -t %p/Inputs/common-symbol-elf | FileCheck %s
-
-CHECK: 00000400       O *COM*  00000008 common_symbol

diff  --git a/llvm/test/tools/llvm-objdump/symbol-table-elf.test b/llvm/test/tools/llvm-objdump/symbol-table-elf.test
deleted file mode 100644
index b6c27330aef8..000000000000
--- a/llvm/test/tools/llvm-objdump/symbol-table-elf.test
+++ /dev/null
@@ -1,57 +0,0 @@
-# RUN: yaml2obj -D BITS=32 %s -o %t.32
-# RUN: llvm-objdump --syms %t.32 > %t.32.txt
-# RUN: llvm-objdump -t %t.32 | cmp - %t.32.txt
-# RUN: FileCheck --check-prefix=ELF32 %s --input-file=%t.32.txt
-
-# RUN: yaml2obj -D BITS=64 %s -o %t.64
-# RUN: llvm-objdump --syms %t.64 | FileCheck --check-prefix=ELF64 %s
-
-# ELF32:      SYMBOL TABLE:
-# ELF32-NEXT: 00001004 l     F .text     00000000 lfoo
-# ELF32-NEXT: 00001008 l     O .text     00000000 lbar
-# ELF32-NEXT: 00001004 g     F .text     00000000 foo
-# ELF32-NEXT: 00001008 g     O .text     00000000 bar
-
-# ELF64:      SYMBOL TABLE:
-# ELF64-NEXT: 0000000000001004 l     F .text     0000000000000000 lfoo
-# ELF64-NEXT: 0000000000001008 l     O .text     0000000000000000 lbar
-# ELF64-NEXT: 0000000000001004 g     F .text     0000000000000000 foo
-# ELF64-NEXT: 0000000000001008 g     O .text     0000000000000000 bar
-
-!ELF
-FileHeader:
-  Class:           ELFCLASS[[BITS]]
-  Data:            ELFDATA2LSB
-  Type:            ET_EXEC
-  Machine:         EM_X86_64
-Sections:
-  - Name:            .bss
-    Type:            SHT_NOBITS
-    Flags:           [ SHF_ALLOC ]
-    AddressAlign:    0x0000000000000010
-    Size:            64
-  - Name:            .text
-    Type:            SHT_PROGBITS
-    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
-    AddressAlign:    0x0000000000000010
-    Content:         "00000000"
-Symbols:
-  - Name:     lfoo
-    Type:     STT_FUNC
-    Section:  .text
-    Value:    0x1004
-  - Name:     lbar
-    Type:     STT_OBJECT
-    Section:  .text
-    Value:    0x1008
-  - Name:     foo
-    Type:     STT_FUNC
-    Section:  .text
-    Value:    0x1004
-    Binding:  STB_GLOBAL
-  - Name:     bar
-    Type:     STT_OBJECT
-    Section:  .text
-    Value:    0x1008
-    Binding:  STB_GLOBAL
-


        


More information about the llvm-commits mailing list