Index: test/tools/llvm-nm/X86/format-sysv-32-bit.test =================================================================== --- test/tools/llvm-nm/X86/format-sysv-32-bit.test +++ test/tools/llvm-nm/X86/format-sysv-32-bit.test @@ -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 Index: test/tools/llvm-nm/X86/format-sysv-64-bit.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/X86/format-sysv-64-bit.test @@ -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* Index: test/tools/llvm-nm/X86/macho-format-sysv.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/X86/macho-format-sysv.test @@ -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 | | | | Index: test/tools/llvm-nm/X86/portability.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/X86/portability.test @@ -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 Index: test/tools/llvm-nm/X86/posixELF.test =================================================================== --- test/tools/llvm-nm/X86/posixELF.test +++ /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 Index: test/tools/llvm-nm/X86/sysv-x86_64.test =================================================================== --- test/tools/llvm-nm/X86/sysv-x86_64.test +++ /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 | | | | Index: test/tools/llvm-nm/debug-syms.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/debug-syms.test @@ -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 Index: test/tools/llvm-nm/format-sysv-binding.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/format-sysv-binding.test @@ -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 | Index: test/tools/llvm-nm/format-sysv-layout.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/format-sysv-layout.test @@ -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 Index: test/tools/llvm-nm/format-sysv-section.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/format-sysv-section.test @@ -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* Index: test/tools/llvm-nm/format-sysv-type.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/format-sysv-type.test @@ -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* Index: test/tools/llvm-nm/no-sort.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/no-sort.test @@ -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 Index: test/tools/llvm-nm/numeric-sort.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/numeric-sort.test @@ -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 Index: test/tools/llvm-nm/print-filename.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/print-filename.test @@ -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 Index: test/tools/llvm-nm/print-size.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/print-size.test @@ -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 Index: test/tools/llvm-nm/undefined-only.test =================================================================== --- /dev/null +++ test/tools/llvm-nm/undefined-only.test @@ -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