OSDN Git Service

[llvm-nm] Additional lit tests for command line options
authorChris Jackson <snortotter@gmail.com>
Thu, 13 Jun 2019 10:39:36 +0000 (10:39 +0000)
committerChris Jackson <snortotter@gmail.com>
Thu, 13 Jun 2019 10:39:36 +0000 (10:39 +0000)
    Differential Revision: https://reviews.llvm.org/D62955

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363248 91177308-0d34-0410-b5e6-96231b3b80d8

16 files changed:
test/tools/llvm-nm/X86/format-sysv-32-bit.test [moved from test/tools/llvm-nm/X86/sysv-i386.test with 89% similarity]
test/tools/llvm-nm/X86/format-sysv-64-bit.test [new file with mode: 0644]
test/tools/llvm-nm/X86/macho-format-sysv.test [new file with mode: 0644]
test/tools/llvm-nm/X86/portability.test [new file with mode: 0644]
test/tools/llvm-nm/X86/posixELF.test [deleted file]
test/tools/llvm-nm/X86/sysv-x86_64.test [deleted file]
test/tools/llvm-nm/debug-syms.test [new file with mode: 0644]
test/tools/llvm-nm/format-sysv-binding.test [new file with mode: 0644]
test/tools/llvm-nm/format-sysv-layout.test [new file with mode: 0644]
test/tools/llvm-nm/format-sysv-section.test [new file with mode: 0644]
test/tools/llvm-nm/format-sysv-type.test [new file with mode: 0644]
test/tools/llvm-nm/no-sort.test [new file with mode: 0644]
test/tools/llvm-nm/numeric-sort.test [new file with mode: 0644]
test/tools/llvm-nm/print-filename.test [new file with mode: 0644]
test/tools/llvm-nm/print-size.test [new file with mode: 0644]
test/tools/llvm-nm/undefined-only.test [new file with mode: 0644]

similarity index 89%
rename from test/tools/llvm-nm/X86/sysv-i386.test
rename to test/tools/llvm-nm/X86/format-sysv-32-bit.test
index ea0dcab..d3d4324 100644 (file)
@@ -1,4 +1,3 @@
-RUN: llvm-nm -f sysv %p/Inputs/hello.obj.elf-i386 
 RUN: llvm-nm -f sysv %p/Inputs/hello.obj.elf-i386 | FileCheck %s --strict-whitespace
 
 CHECK: Name                  Value   Class        Type         Size     Line  Section
diff --git a/test/tools/llvm-nm/X86/format-sysv-64-bit.test b/test/tools/llvm-nm/X86/format-sysv-64-bit.test
new file mode 100644 (file)
index 0000000..8169bb5
--- /dev/null
@@ -0,0 +1,5 @@
+RUN: llvm-nm -f sysv %p/Inputs/hello.obj.elf-x86_64 | FileCheck %s --strict-whitespace
+
+CHECK: Name                  Value           Class        Type         Size             Line  Section
+CHECK: main                |0000000000000000|   T  |              FUNC|0000000000000015|     |.text
+CHECK: puts                |                |   U  |            NOTYPE|                |     |*UND*
diff --git a/test/tools/llvm-nm/X86/macho-format-sysv.test b/test/tools/llvm-nm/X86/macho-format-sysv.test
new file mode 100644 (file)
index 0000000..e298623
--- /dev/null
@@ -0,0 +1,8 @@
+RUN: llvm-nm -f sysv %p/Inputs/hello.obj.macho-x86_64 2>&1 | FileCheck %s --strict-whitespace
+
+CHECK: Name                  Value           Class        Type         Size             Line  Section
+CHECK: EH_frame0           |0000000000000068|   s  |                  |0000000000000000|     |
+CHECK: L_.str              |000000000000003b|   s  |                  |0000000000000000|     |
+CHECK: _main               |0000000000000000|   T  |                  |0000000000000000|     |
+CHECK: _main.eh            |0000000000000080|   S  |                  |0000000000000000|     |
+CHECK: _printf             |                |   U  |                  |                |     |
diff --git a/test/tools/llvm-nm/X86/portability.test b/test/tools/llvm-nm/X86/portability.test
new file mode 100644 (file)
index 0000000..ca8c478
--- /dev/null
@@ -0,0 +1,25 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm %t.o --portability | FileCheck %s --strict-whitespace --match-full-lines
+# RUN: llvm-nm %t.o -P | FileCheck %s --strict-whitespace --match-full-lines
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name: .text
+    Type: SHT_PROGBITS
+Symbols:
+  - Name:    symbol_a
+    Section: .text
+    Size:    16
+    Value:   0xff
+  - Name:    symbol_wider_name
+    Section: .text
+    Size:    256
+    Value:   0xffeedd
+
+# CHECK:symbol_a n ff 10
+# CHECK-NEXT:symbol_wider_name n ffeedd 100
diff --git a/test/tools/llvm-nm/X86/posixELF.test b/test/tools/llvm-nm/X86/posixELF.test
deleted file mode 100644 (file)
index 810bc97..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# RUN: llvm-nm -P %p/Inputs/hello.obj.elf-x86_64 | FileCheck %s
-
-CHECK: main T 0 15
-CHECK: puts U 0 0
diff --git a/test/tools/llvm-nm/X86/sysv-x86_64.test b/test/tools/llvm-nm/X86/sysv-x86_64.test
deleted file mode 100644 (file)
index c517af9..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-RUN: llvm-nm -f sysv %p/Inputs/hello.obj.elf-x86_64 | FileCheck %s --check-prefix=ELF --strict-whitespace
-RUN: llvm-nm -f sysv %p/Inputs/hello.obj.macho-x86_64 2>&1 | FileCheck %s --check-prefix=MACHO --strict-whitespace
-
-ELF: Name                  Value           Class        Type         Size             Line  Section
-ELF: main                |0000000000000000|   T  |              FUNC|0000000000000015|     |.text
-ELF: puts                |                |   U  |            NOTYPE|                |     |*UND*
-
-MACHO: Name                  Value           Class        Type         Size             Line  Section
-MACHO: EH_frame0           |0000000000000068|   s  |                  |0000000000000000|     |
-MACHO: L_.str              |000000000000003b|   s  |                  |0000000000000000|     |
-MACHO: _main               |0000000000000000|   T  |                  |0000000000000000|     |
-MACHO: _main.eh            |0000000000000080|   S  |                  |0000000000000000|     |
-MACHO: _printf             |                |   U  |                  |                |     |
diff --git a/test/tools/llvm-nm/debug-syms.test b/test/tools/llvm-nm/debug-syms.test
new file mode 100644 (file)
index 0000000..d103080
--- /dev/null
@@ -0,0 +1,32 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm --debug-syms %t.o | FileCheck %s --implicit-check-not U
+# RUN: llvm-nm -a %t.o | FileCheck %s --implicit-check-not U
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_ARM
+Sections:
+  - Name: section
+    Type: SHT_PROGBITS
+Symbols:
+  - Name:    ""
+    Type:    STT_SECTION
+    Section: section
+  - Name:    file_sym
+    Type:    STT_FILE
+    Index:   SHN_ABS
+  - Name:    $d
+    Section: section
+  - Name:    $t
+    Section: section
+  - Name:    $a
+    Section: section
+
+# CHECK:      $a
+# CHECK-NEXT: $d
+# CHECK-NEXT: $t
+# CHECK-NEXT: file_sym
+# CHECK-NEXT: section
diff --git a/test/tools/llvm-nm/format-sysv-binding.test b/test/tools/llvm-nm/format-sysv-binding.test
new file mode 100644 (file)
index 0000000..557df3d
--- /dev/null
@@ -0,0 +1,44 @@
+# XFAIL: *
+# For a symbol in a text section the class character for an unrecognised binding
+# value is '?' in gnu-nm but llvm-nm prints 'T'. Filed as:
+# https://bugs.llvm.org/show_bug.cgi?id=41711
+
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm %t.o --format=sysv | FileCheck %s
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name:  .text
+    Type:  SHT_PROGBITS
+    Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+Symbols:
+  - Name:    symbol_local
+    Binding: STB_LOCAL
+    Section: .text
+    Value:   0x101
+    Size:    8
+  - Name:    symbol_weak
+    Binding: STB_WEAK
+    Section: .text
+    Value:   0x102
+    Size:    4
+  - Name:    symbol_undefined_binding
+    Binding: 5
+    Section: .text
+    Value:   0x1004
+    Size:    32
+  - Name:    symbol_global
+    Binding: STB_GLOBAL
+    Section: .text
+    Value:   0x103
+    Size:    16
+
+# CHECK:      symbol_global {{.*}}|   T  |
+# CHECK-NEXT: symbol_local  {{.*}}|   t  |
+# CHECK-NEXT: symbol_unrecognised_binding {{.*}}| ? |
+# CHECK-NEXT: symbol_weak {{.*}}|   W  |
diff --git a/test/tools/llvm-nm/format-sysv-layout.test b/test/tools/llvm-nm/format-sysv-layout.test
new file mode 100644 (file)
index 0000000..085e838
--- /dev/null
@@ -0,0 +1,28 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm %t.o --debug-syms --format=sysv | FileCheck %s -DFILE=%t.o --strict-whitespace
+# RUN: llvm-nm %t.o --debug-syms -f=sysv | FileCheck %s -DFILE=%t.o --strict-whitespace
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name:  .text
+    Type:  SHT_PROGBITS
+    Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+Symbols:
+  - Name:    symbol_with_a_significantly_longer_name
+    Section: .text
+  - Name:    symbol
+    Section: .text
+  - Name:    symbol_2
+    Type:    STT_FUNC
+
+# CHECK:       Symbols from [[FILE]]:
+# CHECK-EMPTY:
+# CHECK-NEXT: Name                  Value           Class        Type         Size             Line  Section
+# CHECK-NEXT: symbol              |0000000000000000|   t  |            NOTYPE|0000000000000000|     |.text
+# CHECK-NEXT: symbol_2            |                |   U  |              FUNC|                |     |*UND*
+# CHECK-NEXT: symbol_with_a_significantly_longer_name|0000000000000000|   t  |            NOTYPE|0000000000000000|     |.text
diff --git a/test/tools/llvm-nm/format-sysv-section.test b/test/tools/llvm-nm/format-sysv-section.test
new file mode 100644 (file)
index 0000000..1ebfa93
--- /dev/null
@@ -0,0 +1,35 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm %t.o --format=sysv | FileCheck %s
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name:  .text
+    Type:  SHT_PROGBITS
+    Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+Symbols:
+  - Name:    symbol_undefined
+  - Name:    symbol
+    Section: .text
+  - Name:    symbol_common
+    Index:   SHN_COMMON
+  - Name:    symbol_absolute
+    Index:   SHN_ABS
+  - Name:    proc
+    Index:   0xff01
+  - Name:    os
+    Index:   0xff21
+  - Name:    reserved
+    Index:   0xfffe
+
+# CHECK:      os               {{.*}}|
+# CHECK-NEXT: proc             {{.*}}|
+# CHECK-NEXT: reserved         {{.*}}|
+# CHECK-NEXT: symbol           {{.*}}|     |.text
+# CHECK-NEXT: symbol_absolute  {{.*}}|     |*ABS*
+# CHECK-NEXT: symbol_common    {{.*}}|     |*COM*
+# CHECK-NEXT: symbol_undefined {{.*}}|     |*UND*
diff --git a/test/tools/llvm-nm/format-sysv-type.test b/test/tools/llvm-nm/format-sysv-type.test
new file mode 100644 (file)
index 0000000..a8bf1b5
--- /dev/null
@@ -0,0 +1,44 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm %t.o --debug-syms --format=sysv | FileCheck %s
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Symbols:
+  - Name: symbol_notype
+    Type: STT_NOTYPE
+  - Name: symbol_common
+    Type: STT_COMMON
+  - Name: symbol_tls
+    Type: STT_TLS
+  - Name: symbol_file
+    Type: STT_FILE
+  - Name: symbol_obj
+    Type: STT_OBJECT
+  - Name: symbol_func
+    Type: STT_FUNC
+  - Name: symbol_ifunc
+    Type: STT_GNU_IFUNC
+  - Name: os_specific
+    Type: 11
+  - Name: proc_specific
+    Type: 13
+  - Name: unknown
+    Type: 7
+
+## FIXME: Should not print blank types for unknown, OS-specific and processor-
+##        specific types. See https://bugs.llvm.org/show_bug.cgi?id=41713.
+
+# CHECK:      os_specific   {{.*}}|                  |                |     |*UND*
+# CHECK-NEXT: proc_specific {{.*}}|                  |                |     |*UND*
+# CHECK-NEXT: symbol_common {{.*}}|            COMMON|                |     |*COM*
+# CHECK-NEXT: symbol_file   {{.*}}|              FILE|                |     |*UND*
+# CHECK-NEXT: symbol_func   {{.*}}|              FUNC|                |     |*UND*
+# CHECK-NEXT: symbol_ifunc  {{.*}}|             IFUNC|                |     |*UND*
+# CHECK-NEXT: symbol_notype {{.*}}|            NOTYPE|                |     |*UND*
+# CHECK-NEXT: symbol_obj    {{.*}}|            OBJECT|                |     |*UND*
+# CHECK-NEXT: symbol_tls    {{.*}}|               TLS|                |     |*UND*
+# CHECK-NEXT: unknown       {{.*}}|                  |                |     |*UND*
diff --git a/test/tools/llvm-nm/no-sort.test b/test/tools/llvm-nm/no-sort.test
new file mode 100644 (file)
index 0000000..d740558
--- /dev/null
@@ -0,0 +1,40 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm %t.o | FileCheck %s --check-prefix=DEFAULT
+# RUN: llvm-nm --no-sort %t.o | FileCheck %s --check-prefix=NOSORT
+# RUN: llvm-nm -p %t.o | FileCheck %s --check-prefix=NOSORT
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name: .text
+    Type: SHT_PROGBITS
+Symbols:
+  - Name:    symbol_a
+    Section: .text
+    Value:   0x100
+  - Name:    symbol_b
+    Section: .text
+    Value:   0x25
+  - Name:    symbol_d
+    Section: .text
+    Value:   0x25
+  - Name:    symbol_c
+    Section: .text
+    Value:   0x50
+
+# The default is to sort by symbol name.
+# DEFAULT:      0000000000000100 n symbol_a
+# DEFAULT-NEXT: 0000000000000025 n symbol_b
+# DEFAULT-NEXT: 0000000000000050 n symbol_c
+# DEFAULT-NEXT: 0000000000000025 n symbol_d
+
+# When --no-sort is specified then the symbols are output in
+# symbol table order.
+# NOSORT:      0000000000000100 n symbol_a
+# NOSORT-NEXT: 0000000000000025 n symbol_b
+# NOSORT-NEXT: 0000000000000025 n symbol_d
+# NOSORT-NEXT: 0000000000000050 n symbol_c
diff --git a/test/tools/llvm-nm/numeric-sort.test b/test/tools/llvm-nm/numeric-sort.test
new file mode 100644 (file)
index 0000000..26a6bcb
--- /dev/null
@@ -0,0 +1,44 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm %t.o | FileCheck %s --check-prefix=DEFAULT
+# RUN: llvm-nm --numeric-sort %t.o | FileCheck %s --check-prefix=NUMERIC
+# RUN: llvm-nm -n %t.o | FileCheck %s --check-prefix=NUMERIC
+# RUN: llvm-nm -v %t.o | FileCheck %s --check-prefix=NUMERIC
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name: .text
+    Type: SHT_PROGBITS
+Symbols:
+  - Name:    symbol_a
+    Section: .text
+    Binding: STB_LOCAL
+    Value:   0x100
+  - Name:    symbol_b
+    Section: .text
+    Binding: STB_LOCAL
+    Value:   0x25
+  - Name:    symbol_d
+    Section: .text
+    Binding: STB_LOCAL
+    Value:   0x25
+  - Name:    symbol_c
+    Section: .text
+    Binding: STB_LOCAL
+    Value:   0x50
+
+# The default is to sort by symbol name.
+# DEFAULT:      0000000000000100 n symbol_a
+# DEFAULT-NEXT: 0000000000000025 n symbol_b
+# DEFAULT-NEXT: 0000000000000050 n symbol_c
+# DEFAULT-NEXT: 0000000000000025 n symbol_d
+
+# --numeric-sort sorts the symbols by value.
+# NUMERIC:      0000000000000025 n symbol_b
+# NUMERIC-NEXT: 0000000000000025 n symbol_d
+# NUMERIC-NEXT: 0000000000000050 n symbol_c
+# NUMERIC-NEXT: 0000000000000100 n symbol_a
diff --git a/test/tools/llvm-nm/print-filename.test b/test/tools/llvm-nm/print-filename.test
new file mode 100644 (file)
index 0000000..6c47240
--- /dev/null
@@ -0,0 +1,19 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm --print-file-name %t.o | FileCheck %s -DFILE=%t.o
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm --print-file-name %t.o | FileCheck %s -DFILE=%t.o
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name: .text
+    Type: SHT_PROGBITS
+Symbols:
+  - Name:    symbol_a
+    Section: .text
+
+# CHECK: [[FILE]]: 0000000000000000 n symbol_a
diff --git a/test/tools/llvm-nm/print-size.test b/test/tools/llvm-nm/print-size.test
new file mode 100644 (file)
index 0000000..4614fd1
--- /dev/null
@@ -0,0 +1,19 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm --print-size %t.o | FileCheck %s --strict-whitespace
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name: .text
+    Type: SHT_PROGBITS
+Symbols:
+  - Name:    a_symbol
+    Size:    0x123456789abcdef0
+    Section: .text
+    Binding: STB_GLOBAL
+
+# CHECK: 0000000000000000 123456789abcdef0 N a_symbol
diff --git a/test/tools/llvm-nm/undefined-only.test b/test/tools/llvm-nm/undefined-only.test
new file mode 100644 (file)
index 0000000..99fa519
--- /dev/null
@@ -0,0 +1,20 @@
+# RUN: yaml2obj %s > %t.o
+# RUN: llvm-nm --undefined-only %t.o | FileCheck %s --implicit-check-not=symbol_defined
+
+!ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name: .text
+    Type: SHT_PROGBITS
+Symbols:
+  - Name:    symbol_undefined_a
+  - Name:    symbol_defined
+    Section: .text
+  - Name:    symbol_undefined_b
+
+# CHECK:      U symbol_undefined_a
+# CHECK-NEXT: U symbol_undefined_b