diff --git a/llvm/test/DebugInfo/symbolize-inlined.test b/llvm/test/DebugInfo/symbolize-inlined.test --- a/llvm/test/DebugInfo/symbolize-inlined.test +++ b/llvm/test/DebugInfo/symbolize-inlined.test @@ -1,4 +1,6 @@ RUN: llvm-symbolizer --inlining --obj=%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x8dc 0xa05 0x987 | FileCheck %s +RUN: llvm-symbolizer -i --obj=%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x8dc 0xa05 0x987 | FileCheck %s +RUN: llvm-symbolizer --inlines --obj=%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x8dc 0xa05 0x987 | FileCheck %s CHECK: inlined_h CHECK-NEXT: dwarfdump-inl-test.h:2 diff --git a/llvm/test/Object/nm-shared-object.test b/llvm/test/Object/nm-shared-object.test --- a/llvm/test/Object/nm-shared-object.test +++ b/llvm/test/Object/nm-shared-object.test @@ -1,5 +1,7 @@ # RUN: llvm-nm -D %p/Inputs/shared-object-test.elf-i386 \ # RUN: | FileCheck %s -check-prefix ELF-32 +# RUN: llvm-nm --dynamic %p/Inputs/shared-object-test.elf-i386 \ +# RUN: | FileCheck %s -check-prefix ELF-32 # ELF-32-NOT: U # ELF-32: 000012c8 A __bss_start @@ -12,6 +14,8 @@ # RUN: llvm-nm -D %p/Inputs/shared-object-test.elf-x86-64 \ # RUN: | FileCheck %s -check-prefix ELF-64 +# RUN: llvm-nm --dynamic %p/Inputs/shared-object-test.elf-x86-64 \ +# RUN: | FileCheck %s -check-prefix ELF-64 # ELF-64-NOT: U # ELF-64: 0000000000200454 A __bss_start diff --git a/llvm/test/tools/llvm-cxxfilt/simple.test b/llvm/test/tools/llvm-cxxfilt/simple.test --- a/llvm/test/tools/llvm-cxxfilt/simple.test +++ b/llvm/test/tools/llvm-cxxfilt/simple.test @@ -1,7 +1,7 @@ -RUN: llvm-cxxfilt -n _Z1fi abc | FileCheck %s -RUN: echo "Mangled _Z1fi and _Z3foov in string." | llvm-cxxfilt -n \ +RUN: llvm-cxxfilt _Z1fi abc | FileCheck %s +RUN: echo "Mangled _Z1fi and _Z3foov in string." | llvm-cxxfilt \ RUN: | FileCheck %s --check-prefix=CHECK-STRING -RUN: llvm-cxxfilt -n "CLI remains mangled _Z1fi" \ +RUN: llvm-cxxfilt "CLI remains mangled _Z1fi" \ RUN: | FileCheck %s --check-prefix=CHECK-MANGLED CHECK: f(int) diff --git a/llvm/test/tools/llvm-cxxfilt/underscore.test b/llvm/test/tools/llvm-cxxfilt/underscore.test --- a/llvm/test/tools/llvm-cxxfilt/underscore.test +++ b/llvm/test/tools/llvm-cxxfilt/underscore.test @@ -1,5 +1,8 @@ RUN: llvm-cxxfilt -_ __ZN2ns1fE _ZSt1f _f | FileCheck %s -check-prefix CHECK-STRIPPED +RUN: llvm-cxxfilt --strip-underscore __ZN2ns1fE _ZSt1f _f | FileCheck %s -check-prefix CHECK-STRIPPED +RUN: llvm-cxxfilt __ZN2ns1fE _ZSt1f _f | FileCheck %s -check-prefix CHECK-UNSTRIPPED RUN: llvm-cxxfilt -n __ZN2ns1fE _ZSt1f _f | FileCheck %s -check-prefix CHECK-UNSTRIPPED +RUN: llvm-cxxfilt --no-strip-underscore __ZN2ns1fE _ZSt1f _f | FileCheck %s -check-prefix CHECK-UNSTRIPPED CHECK-STRIPPED: ns::f CHECK-STRIPPED: _ZSt1f @@ -8,4 +11,3 @@ CHECK-UNSTRIPPED: __ZN2ns1fE CHECK-UNSTRIPPED: std::f CHECK-UNSTRIPPED: _f - diff --git a/llvm/test/tools/llvm-nm/elf-archive.test b/llvm/test/tools/llvm-nm/elf-archive.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-nm/elf-archive.test @@ -0,0 +1,58 @@ +## Show that llvm-nm prints the symbols of all ELF members of an archive. + +# RUN: yaml2obj %s --docnum=1 -o %t1.o +# RUN: yaml2obj %s --docnum=2 -o %t2.o + +# RUN: rm -f %t.symtab +# RUN: llvm-ar rc %t.symtab %t1.o %t2.o +# RUN: llvm-nm %t.symtab | FileCheck %s --match-full-lines + +# RUN: rm -f %t.nosymtab +# RUN: llvm-ar rcS %t.nosymtab %t1.o %t2.o +# RUN: llvm-nm %t.nosymtab | FileCheck %s --match-full-lines + +# CHECK: {{.*}}1.o: +# CHECK-NEXT: 00000002 D global_data_symbol +# CHECK-NEXT: 00000000 T global_function_symbol +# CHECK-EMPTY: +# CHECK-NEXT: {{.*}}2.o: +# CHECK-NEXT: 00000001 D another_data_symbol + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_386 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [SHF_ALLOC, SHF_EXECINSTR] + - Name: .data + Type: SHT_PROGBITS + Flags: [SHF_ALLOC, SHF_WRITE] +Symbols: + - Name: global_function_symbol + Value: 0x0 + Binding: STB_GLOBAL + Section: .text + - Name: global_data_symbol + Binding: STB_GLOBAL + Section: .data + Value: 0x2 + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_386 +Sections: + - Name: .data + Type: SHT_PROGBITS + Flags: [SHF_ALLOC, SHF_WRITE] +Symbols: + - Name: another_data_symbol + Binding: STB_GLOBAL + Section: .data + Value: 0x1 diff --git a/llvm/test/tools/llvm-nm/elf-extern-only.test b/llvm/test/tools/llvm-nm/elf-extern-only.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-nm/elf-extern-only.test @@ -0,0 +1,49 @@ +## Test that the --extern-only switch only shows external ELF symbols. + +# RUN: yaml2obj %s -o %t.o +# RUN: llvm-nm %t.o --extern-only --no-sort | FileCheck %s +# RUN: llvm-nm %t.o -g --no-sort | FileCheck %s + +## Using --no-sort ensures that the symbols appear in the symbol table order +## allowing our CHECK-NOTs to work as expected. +# CHECK-NOT: local +# CHECK: D global_data_symbol +# CHECK-NEXT: T global_function_symbol +# CHECK-NEXT: U undefined +# CHECK-NEXT: W weak_symbol +# CHECK-NOT: local + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_386 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [SHF_ALLOC, SHF_EXECINSTR] + - Name: .data + Type: SHT_PROGBITS + Flags: [SHF_ALLOC, SHF_WRITE] +Symbols: + - Name: local_function_symbol + Binding: STB_LOCAL + Section: .text + - Name: local_data_symbol + Binding: STB_LOCAL + Section: .data + - Name: global_data_symbol + Binding: STB_GLOBAL + Section: .data + - Name: global_function_symbol + Binding: STB_GLOBAL + Section: .text + - Name: undefined + Binding: STB_GLOBAL + - Name: weak_symbol + Binding: STB_WEAK + Section: .data + - Name: local_at_end + Binding: STB_LOCAL + Section: .text diff --git a/llvm/test/tools/llvm-nm/print-filename.test b/llvm/test/tools/llvm-nm/print-filename.test --- a/llvm/test/tools/llvm-nm/print-filename.test +++ b/llvm/test/tools/llvm-nm/print-filename.test @@ -1,7 +1,6 @@ -# RUN: yaml2obj %s > %t.o -# RUN: llvm-nm --print-file-name %t.o | FileCheck %s -DFILE=%t.o -# RUN: yaml2obj %s > %t.o +# RUN: yaml2obj %s -o %t.o # RUN: llvm-nm --print-file-name %t.o | FileCheck %s -DFILE=%t.o +# RUN: llvm-nm -A %t.o | FileCheck %s -DFILE=%t.o !ELF FileHeader: diff --git a/llvm/test/tools/llvm-nm/print-size.test b/llvm/test/tools/llvm-nm/print-size.test --- a/llvm/test/tools/llvm-nm/print-size.test +++ b/llvm/test/tools/llvm-nm/print-size.test @@ -1,5 +1,6 @@ -# RUN: yaml2obj %s > %t.o +# RUN: yaml2obj %s -o %t.o # RUN: llvm-nm --print-size %t.o | FileCheck %s --strict-whitespace +# RUN: llvm-nm -S %t.o | FileCheck %s --strict-whitespace !ELF FileHeader: diff --git a/llvm/test/tools/llvm-objdump/X86/elf-dynamic-relocs.test b/llvm/test/tools/llvm-objdump/X86/elf-dynamic-relocs.test --- a/llvm/test/tools/llvm-objdump/X86/elf-dynamic-relocs.test +++ b/llvm/test/tools/llvm-objdump/X86/elf-dynamic-relocs.test @@ -4,6 +4,7 @@ # RUN: yaml2obj %s -o %t # RUN: llvm-objdump --dynamic-reloc %t | FileCheck --implicit-check-not=R_X86 %s +# RUN: llvm-objdump -R %t | FileCheck --implicit-check-not=R_X86 %s # CHECK: file format ELF64-x86-64 # CHECK: DYNAMIC RELOCATION RECORDS diff --git a/llvm/test/tools/llvm-objdump/all-headers.test b/llvm/test/tools/llvm-objdump/all-headers.test --- a/llvm/test/tools/llvm-objdump/all-headers.test +++ b/llvm/test/tools/llvm-objdump/all-headers.test @@ -1,5 +1,6 @@ -# RUN: yaml2obj %s > %t +# RUN: yaml2obj %s -o %t # RUN: llvm-objdump --all-headers %t | FileCheck %s +# RUN: llvm-objdump -x %t | FileCheck %s ## Note: --all-headers (-x) is an alias for --archive-headers --file-headers ## --section-headers --private-headers --reloc --syms (-afhprt). Test for them diff --git a/llvm/test/tools/llvm-readobj/elf-dynamic-tags.test b/llvm/test/tools/llvm-readobj/elf-dynamic-tags.test --- a/llvm/test/tools/llvm-readobj/elf-dynamic-tags.test +++ b/llvm/test/tools/llvm-readobj/elf-dynamic-tags.test @@ -1,7 +1,11 @@ -# Show that all non-machine specific tags can be read and printed correctly. -# RUN: yaml2obj %s > %t +## Show that all non-machine specific tags can be read and printed correctly. +## Also show that -d is an alias for --dynamic-table. + +# RUN: yaml2obj %s -o %t # RUN: llvm-readobj --dynamic-table %t | FileCheck %s --check-prefix=LLVM +# RUN: llvm-readobj -d %t | FileCheck %s --check-prefix=LLVM # RUN: llvm-readelf --dynamic-table %t | FileCheck %s --check-prefix=GNU +# RUN: llvm-readelf -d %t | FileCheck %s --check-prefix=GNU # LLVM: DynamicSection [ (61 entries) # LLVM-NEXT: Tag Type Name/Value diff --git a/llvm/test/tools/llvm-readobj/elf-file-headers.test b/llvm/test/tools/llvm-readobj/elf-file-headers.test --- a/llvm/test/tools/llvm-readobj/elf-file-headers.test +++ b/llvm/test/tools/llvm-readobj/elf-file-headers.test @@ -1,5 +1,7 @@ # RUN: yaml2obj %s --docnum=1 -o %t.i386 # RUN: llvm-readobj -h %t.i386 | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.i386 --check-prefix I386 +# RUN: llvm-readobj --file-header %t.i386 | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.i386 --check-prefix I386 +# RUN: llvm-readobj --file-headers %t.i386 | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.i386 --check-prefix I386 # I386:File: [[FILE]] # I386-NEXT:Format: ELF32-i386 @@ -44,6 +46,10 @@ # RUN: yaml2obj %s --docnum=2 -o %t.x86-64 # RUN: llvm-readobj -h %t.x86-64 \ # RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.x86-64 --check-prefix X86-64 +# RUN: llvm-readobj --file-header %t.x86-64 \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.x86-64 --check-prefix X86-64 +# RUN: llvm-readobj --file-headers %t.x86-64 \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.x86-64 --check-prefix X86-64 # X86-64:File: [[FILE]] # X86-64-NEXT:Format: ELF64-x86-64 @@ -88,6 +94,10 @@ # RUN: yaml2obj %s --docnum=3 -o %t.lanai # RUN: llvm-readobj -h %t.lanai \ # RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.lanai --check-prefix LANAI +# RUN: llvm-readobj --file-header %t.lanai \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.lanai --check-prefix LANAI +# RUN: llvm-readobj --file-headers %t.lanai \ +# RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.lanai --check-prefix LANAI --- !ELF FileHeader: diff --git a/llvm/test/tools/llvm-readobj/elf-relocations.test b/llvm/test/tools/llvm-readobj/elf-relocations.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/elf-relocations.test @@ -0,0 +1,375 @@ +## Check llvm-readobj and llvm-readelf print relocations as expected. + +## Show that ELF64 is dumped correctly. +# RUN: yaml2obj %s --docnum=1 -o %t64 +# RUN: llvm-readobj -r %t64 \ +# RUN: | FileCheck %s --check-prefix=LLVM-64 --strict-whitespace --match-full-lines +# RUN: llvm-readobj --relocs %t64 \ +# RUN: | FileCheck %s --check-prefix=LLVM-64 --strict-whitespace --match-full-lines +# RUN: llvm-readobj --relocations %t64 \ +# RUN: | FileCheck %s --check-prefix=LLVM-64 --strict-whitespace --match-full-lines + +# LLVM-64:Relocations [ +# LLVM-64-NEXT: Section (2) .rel.text { +# LLVM-64-NEXT: 0x0 R_X86_64_NONE rel_0 0x0 +# LLVM-64-NEXT: 0x1 R_X86_64_PC32 rel_neg 0x0 +# LLVM-64-NEXT: 0x5 R_X86_64_PLT32 rel_pos 0x0 +# LLVM-64-NEXT: 0x9 R_X86_64_64 rel_64 0x0 +# LLVM-64-NEXT: } +# LLVM-64-NEXT: Section (3) .rela.text { +# LLVM-64-NEXT: 0x0 R_X86_64_NONE rela_0 0x0 +# LLVM-64-NEXT: 0x1 R_X86_64_PC32 rela_neg 0xFFFFFFFFFFFFFFFF +# LLVM-64-NEXT: 0x5 R_X86_64_PLT32 rela_pos 0x2 +# LLVM-64-NEXT: 0xFFFFFFFFFFFFFFFF R_X86_64_64 rela_minneg 0x8000000000000000 +# LLVM-64-NEXT: 0x9 R_X86_64_32S rela_maxpos 0x7FFFFFFFFFFFFFFF +# LLVM-64-NEXT: } +# LLVM-64-NEXT:] + +# RUN: llvm-readelf -r %t64 \ +# RUN: | FileCheck %s --check-prefix=GNU-64 --strict-whitespace --match-full-lines +# RUN: llvm-readelf --relocs %t64 \ +# RUN: | FileCheck %s --check-prefix=GNU-64 --strict-whitespace --match-full-lines +# RUN: llvm-readelf --relocations %t64 \ +# RUN: | FileCheck %s --check-prefix=GNU-64 --strict-whitespace --match-full-lines + +# GNU-64:Relocation section '.rel.text' at offset 0x51 contains 4 entries: +# GNU-64-NEXT: Offset Info Type Symbol's Value Symbol's Name +# GNU-64-NEXT:0000000000000000 0000000100000000 R_X86_64_NONE 0000000000000000 rel_0 +# GNU-64-NEXT:0000000000000001 0000000200000002 R_X86_64_PC32 0000000000000001 rel_neg +# GNU-64-NEXT:0000000000000005 0000000300000004 R_X86_64_PLT32 0000000000000002 rel_pos +# GNU-64-NEXT:0000000000000009 0000000400000001 R_X86_64_64 ffffffffffffffff rel_64 +# GNU-64-EMPTY: +# GNU-64-NEXT:Relocation section '.rela.text' at offset 0x91 contains 5 entries: +# GNU-64-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend +# GNU-64-NEXT:0000000000000000 0000000500000000 R_X86_64_NONE 0000000000000000 rela_0 + 0 +# GNU-64-NEXT:0000000000000001 0000000600000002 R_X86_64_PC32 0000000000000001 rela_neg - 1 +# GNU-64-NEXT:0000000000000005 0000000700000004 R_X86_64_PLT32 0000000000000002 rela_pos + 2 +# GNU-64-NEXT:ffffffffffffffff 0000000800000001 R_X86_64_64 0000000000000003 rela_minneg - 8000000000000000 +# GNU-64-NEXT:0000000000000009 000000090000000b R_X86_64_32S ffffffffffffffff rela_maxpos + 7fffffffffffffff + +## Show that --expand-relocs expands the relocation dump for LLVM style only +## (and not GNU). +# RUN: llvm-readobj -r --expand-relocs %t64 \ +# RUN: | FileCheck %s --check-prefix=LLVM-EXPAND-64 --match-full-lines --strict-whitespace +# RUN: llvm-readelf -r --expand-relocs %t64 \ +# RUN: | FileCheck %s --check-prefix=GNU-64 --match-full-lines --strict-whitespace + +# LLVM-EXPAND-64:Relocations [ +# LLVM-EXPAND-64-NEXT: Section (2) .rel.text { +# LLVM-EXPAND-64-NEXT: Relocation { +# LLVM-EXPAND-64-NEXT: Offset: 0x0 +# LLVM-EXPAND-64-NEXT: Type: R_X86_64_NONE (0) +# LLVM-EXPAND-64-NEXT: Symbol: rel_0 (1) +# LLVM-EXPAND-64-NEXT: Addend: 0x0 +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT: Relocation { +# LLVM-EXPAND-64-NEXT: Offset: 0x1 +# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PC32 (2) +# LLVM-EXPAND-64-NEXT: Symbol: rel_neg (2) +# LLVM-EXPAND-64-NEXT: Addend: 0x0 +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT: Relocation { +# LLVM-EXPAND-64-NEXT: Offset: 0x5 +# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PLT32 (4) +# LLVM-EXPAND-64-NEXT: Symbol: rel_pos (3) +# LLVM-EXPAND-64-NEXT: Addend: 0x0 +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT: Relocation { +# LLVM-EXPAND-64-NEXT: Offset: 0x9 +# LLVM-EXPAND-64-NEXT: Type: R_X86_64_64 (1) +# LLVM-EXPAND-64-NEXT: Symbol: rel_64 (4) +# LLVM-EXPAND-64-NEXT: Addend: 0x0 +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT: Section (3) .rela.text { +# LLVM-EXPAND-64-NEXT: Relocation { +# LLVM-EXPAND-64-NEXT: Offset: 0x0 +# LLVM-EXPAND-64-NEXT: Type: R_X86_64_NONE (0) +# LLVM-EXPAND-64-NEXT: Symbol: rela_0 (5) +# LLVM-EXPAND-64-NEXT: Addend: 0x0 +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT: Relocation { +# LLVM-EXPAND-64-NEXT: Offset: 0x1 +# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PC32 (2) +# LLVM-EXPAND-64-NEXT: Symbol: rela_neg (6) +# LLVM-EXPAND-64-NEXT: Addend: 0xFFFFFFFFFFFFFFFF +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT: Relocation { +# LLVM-EXPAND-64-NEXT: Offset: 0x5 +# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PLT32 (4) +# LLVM-EXPAND-64-NEXT: Symbol: rela_pos (7) +# LLVM-EXPAND-64-NEXT: Addend: 0x2 +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT: Relocation { +# LLVM-EXPAND-64-NEXT: Offset: 0xFFFFFFFFFFFFFFFF +# LLVM-EXPAND-64-NEXT: Type: R_X86_64_64 (1) +# LLVM-EXPAND-64-NEXT: Symbol: rela_minneg (8) +# LLVM-EXPAND-64-NEXT: Addend: 0x8000000000000000 +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT: Relocation { +# LLVM-EXPAND-64-NEXT: Offset: 0x9 +# LLVM-EXPAND-64-NEXT: Type: R_X86_64_32S (11) +# LLVM-EXPAND-64-NEXT: Symbol: rela_maxpos (9) +# LLVM-EXPAND-64-NEXT: Addend: 0x7FFFFFFFFFFFFFFF +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT: } +# LLVM-EXPAND-64-NEXT:] + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Content: '00FFFFFFFF020000001234567890ABCDEF' + - Name: .rel.text + Type: SHT_REL + Info: .text + Relocations: + - Offset: 0x0 + Symbol: rel_0 + Type: R_X86_64_NONE + - Offset: 0x1 + Symbol: rel_neg + Type: R_X86_64_PC32 + - Offset: 0x5 + Symbol: rel_pos + Type: R_X86_64_PLT32 + - Offset: 0x9 + Symbol: rel_64 + Type: R_X86_64_64 + - Name: .rela.text + Type: SHT_RELA + Info: .text + Relocations: + - Offset: 0x0 + Symbol: rela_0 + Type: R_X86_64_NONE + Addend: 0 + - Offset: 0x1 + Symbol: rela_neg + Type: R_X86_64_PC32 + Addend: -1 + - Offset: 0x5 + Symbol: rela_pos + Type: R_X86_64_PLT32 + Addend: 2 + - Offset: 0xFFFFFFFFFFFFFFFF + Symbol: rela_minneg + Type: R_X86_64_64 + Addend: -9223372036854775808 ## Min 64-bit signed. + - Offset: 0x9 + Symbol: rela_maxpos + Type: R_X86_64_32S + Addend: 9223372036854775807 ## Max 64-bit signed. +Symbols: + - Name: rel_0 + Section: .text + Value: 0 + - Name: rel_neg + Section: .text + Value: 1 + - Name: rel_pos + Section: .text + Value: 2 + - Name: rel_64 + Section: .text + Value: 0xFFFFFFFFFFFFFFFF + - Name: rela_0 + Section: .text + Value: 0 + - Name: rela_neg + Section: .text + Value: 1 + - Name: rela_pos + Section: .text + Value: 2 + - Name: rela_minneg + Section: .text + Value: 3 + - Name: rela_maxpos + Section: .text + Value: 0xFFFFFFFFFFFFFFFF + +## Show that ELF32 is dumped correctly. +# RUN: yaml2obj %s --docnum=2 -o %t32 +# RUN: llvm-readobj -r %t32 \ +# RUN: | FileCheck %s --check-prefix=LLVM-32 --strict-whitespace --match-full-lines +# RUN: llvm-readobj --relocs %t32 \ +# RUN: | FileCheck %s --check-prefix=LLVM-32 --strict-whitespace --match-full-lines +# RUN: llvm-readobj --relocations %t32 \ +# RUN: | FileCheck %s --check-prefix=LLVM-32 --strict-whitespace --match-full-lines + +# LLVM-32:Relocations [ +# LLVM-32-NEXT: Section (2) .rel.text { +# LLVM-32-NEXT: 0x0 R_386_NONE rel_0 0x0 +# LLVM-32-NEXT: 0x1 R_386_PC32 rel_neg 0x0 +# LLVM-32-NEXT: 0x5 R_386_PLT32 rel_pos 0x0 +# LLVM-32-NEXT: } +# LLVM-32-NEXT: Section (3) .rela.text { +# LLVM-32-NEXT: 0x0 R_386_NONE rela_0 0x0 +# LLVM-32-NEXT: 0x1 R_386_PC32 rela_neg 0xFFFFFFFF +# LLVM-32-NEXT: 0x5 R_386_PLT32 rela_pos 0x2 +# LLVM-32-NEXT: 0xFFFFFFFF R_386_32 rela_minneg 0x80000000 +# LLVM-32-NEXT: 0x9 R_386_GOT32 rela_maxpos 0x7FFFFFFF +# LLVM-32-NEXT: } +# LLVM-32-NEXT:] + +# RUN: llvm-readelf -r %t32 \ +# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines +# RUN: llvm-readelf --relocs %t32 \ +# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines +# RUN: llvm-readelf --relocations %t32 \ +# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines + +# GNU-32:Relocation section '.rel.text' at offset 0x3d contains 3 entries: +# GNU-32-NEXT: Offset Info Type Sym. Value Symbol's Name +# GNU-32-NEXT:00000000 00000100 R_386_NONE 00000000 rel_0 +# GNU-32-NEXT:00000001 00000202 R_386_PC32 00000001 rel_neg +# GNU-32-NEXT:00000005 00000304 R_386_PLT32 ffffffff rel_pos +# GNU-32-EMPTY: +# GNU-32-NEXT:Relocation section '.rela.text' at offset 0x55 contains 5 entries: +# GNU-32-NEXT: Offset Info Type Sym. Value Symbol's Name + Addend +# GNU-32-NEXT:00000000 00000400 R_386_NONE 00000000 rela_0 + 0 +# GNU-32-NEXT:00000001 00000502 R_386_PC32 00000001 rela_neg - 1 +# GNU-32-NEXT:00000005 00000604 R_386_PLT32 00000002 rela_pos + 2 +# GNU-32-NEXT:ffffffff 00000701 R_386_32 00000003 rela_minneg - 80000000 +# GNU-32-NEXT:00000009 00000803 R_386_GOT32 ffffffff rela_maxpos + 7fffffff + +## Show that --expand-relocs expands the relocation dump for LLVM style only +## (and not GNU). +# RUN: llvm-readobj -r --expand-relocs %t32 \ +# RUN: | FileCheck %s --check-prefix=LLVM-EXPAND-32 --strict-whitespace --match-full-lines +# RUN: llvm-readelf -r --expand-relocs %t32 \ +# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines + +# LLVM-EXPAND-32:Relocations [ +# LLVM-EXPAND-32-NEXT: Section (2) .rel.text { +# LLVM-EXPAND-32-NEXT: Relocation { +# LLVM-EXPAND-32-NEXT: Offset: 0x0 +# LLVM-EXPAND-32-NEXT: Type: R_386_NONE (0) +# LLVM-EXPAND-32-NEXT: Symbol: rel_0 (1) +# LLVM-EXPAND-32-NEXT: Addend: 0x0 +# LLVM-EXPAND-32-NEXT: } +# LLVM-EXPAND-32-NEXT: Relocation { +# LLVM-EXPAND-32-NEXT: Offset: 0x1 +# LLVM-EXPAND-32-NEXT: Type: R_386_PC32 (2) +# LLVM-EXPAND-32-NEXT: Symbol: rel_neg (2) +# LLVM-EXPAND-32-NEXT: Addend: 0x0 +# LLVM-EXPAND-32-NEXT: } +# LLVM-EXPAND-32-NEXT: Relocation { +# LLVM-EXPAND-32-NEXT: Offset: 0x5 +# LLVM-EXPAND-32-NEXT: Type: R_386_PLT32 (4) +# LLVM-EXPAND-32-NEXT: Symbol: rel_pos (3) +# LLVM-EXPAND-32-NEXT: Addend: 0x0 +# LLVM-EXPAND-32-NEXT: } +# LLVM-EXPAND-32-NEXT: } +# LLVM-EXPAND-32-NEXT: Section (3) .rela.text { +# LLVM-EXPAND-32-NEXT: Relocation { +# LLVM-EXPAND-32-NEXT: Offset: 0x0 +# LLVM-EXPAND-32-NEXT: Type: R_386_NONE (0) +# LLVM-EXPAND-32-NEXT: Symbol: rela_0 (4) +# LLVM-EXPAND-32-NEXT: Addend: 0x0 +# LLVM-EXPAND-32-NEXT: } +# LLVM-EXPAND-32-NEXT: Relocation { +# LLVM-EXPAND-32-NEXT: Offset: 0x1 +# LLVM-EXPAND-32-NEXT: Type: R_386_PC32 (2) +# LLVM-EXPAND-32-NEXT: Symbol: rela_neg (5) +# LLVM-EXPAND-32-NEXT: Addend: 0xFFFFFFFF +# LLVM-EXPAND-32-NEXT: } +# LLVM-EXPAND-32-NEXT: Relocation { +# LLVM-EXPAND-32-NEXT: Offset: 0x5 +# LLVM-EXPAND-32-NEXT: Type: R_386_PLT32 (4) +# LLVM-EXPAND-32-NEXT: Symbol: rela_pos (6) +# LLVM-EXPAND-32-NEXT: Addend: 0x2 +# LLVM-EXPAND-32-NEXT: } +# LLVM-EXPAND-32-NEXT: Relocation { +# LLVM-EXPAND-32-NEXT: Offset: 0xFFFFFFFF +# LLVM-EXPAND-32-NEXT: Type: R_386_32 (1) +# LLVM-EXPAND-32-NEXT: Symbol: rela_minneg (7) +# LLVM-EXPAND-32-NEXT: Addend: 0x80000000 +# LLVM-EXPAND-32-NEXT: } +# LLVM-EXPAND-32-NEXT: Relocation { +# LLVM-EXPAND-32-NEXT: Offset: 0x9 +# LLVM-EXPAND-32-NEXT: Type: R_386_GOT32 (3) +# LLVM-EXPAND-32-NEXT: Symbol: rela_maxpos (8) +# LLVM-EXPAND-32-NEXT: Addend: 0x7FFFFFFF +# LLVM-EXPAND-32-NEXT: } +# LLVM-EXPAND-32-NEXT: } +# LLVM-EXPAND-32-NEXT:] + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_386 +Sections: + - Name: .text + Type: SHT_PROGBITS + Content: '00FFFFFFFF02000000' + - Name: .rel.text + Type: SHT_REL + Info: .text + Relocations: + - Offset: 0x0 + Symbol: rel_0 + Type: R_386_NONE + - Offset: 0x1 + Symbol: rel_neg + Type: R_386_PC32 + - Offset: 0x5 + Symbol: rel_pos + Type: R_386_PLT32 + - Name: .rela.text + Type: SHT_RELA + Info: .text + Relocations: + - Offset: 0x0 + Symbol: rela_0 + Type: R_386_NONE + Addend: 0 + - Offset: 0x1 + Symbol: rela_neg + Type: R_386_PC32 + Addend: -1 + - Offset: 0x5 + Symbol: rela_pos + Type: R_386_PLT32 + Addend: 2 + - Offset: 0xFFFFFFFF + Symbol: rela_minneg + Type: R_386_32 + Addend: -2147483648 ## Min 32-bit signed. + - Offset: 0x9 + Symbol: rela_maxpos + Type: R_386_GOT32 + Addend: 2147483647 ## Max 32-bit signed. +Symbols: + - Name: rel_0 + Section: .text + Value: 0 + - Name: rel_neg + Section: .text + Value: 1 + - Name: rel_pos + Section: .text + Value: 0xFFFFFFFF + - Name: rela_0 + Section: .text + Value: 0 + - Name: rela_neg + Section: .text + Value: 1 + - Name: rela_pos + Section: .text + Value: 2 + - Name: rela_minneg + Section: .text + Value: 3 + - Name: rela_maxpos + Section: .text + Value: 0xFFFFFFFF diff --git a/llvm/test/tools/llvm-readobj/gnu-file-headers.test b/llvm/test/tools/llvm-readobj/gnu-file-headers.test --- a/llvm/test/tools/llvm-readobj/gnu-file-headers.test +++ b/llvm/test/tools/llvm-readobj/gnu-file-headers.test @@ -1,9 +1,21 @@ RUN: llvm-readelf -h %p/Inputs/trivial.obj.elf-i386 \ RUN: | FileCheck %s -check-prefix ELF32 +RUN: llvm-readelf --file-header %p/Inputs/trivial.obj.elf-i386 \ +RUN: | FileCheck %s -check-prefix ELF32 +RUN: llvm-readelf --file-headers %p/Inputs/trivial.obj.elf-i386 \ +RUN: | FileCheck %s -check-prefix ELF32 RUN: llvm-readelf -h %p/Inputs/trivial.obj.elf-x86-64 \ RUN: | FileCheck %s -check-prefix ELF64 +RUN: llvm-readelf --file-header %p/Inputs/trivial.obj.elf-x86-64 \ +RUN: | FileCheck %s -check-prefix ELF64 +RUN: llvm-readelf --file-headers %p/Inputs/trivial.obj.elf-x86-64 \ +RUN: | FileCheck %s -check-prefix ELF64 RUN: llvm-readelf -h %p/Inputs/trivial.obj.elf-mipsel \ RUN: | FileCheck %s -check-prefix MIPSEL +RUN: llvm-readelf --file-header %p/Inputs/trivial.obj.elf-mipsel \ +RUN: | FileCheck %s -check-prefix MIPSEL +RUN: llvm-readelf --file-headers %p/Inputs/trivial.obj.elf-mipsel \ +RUN: | FileCheck %s -check-prefix MIPSEL ELF32: ELF Header: ELF32-NEXT: Magic: 7f 45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00 diff --git a/llvm/test/tools/llvm-readobj/relocations.test b/llvm/test/tools/llvm-readobj/relocations.test --- a/llvm/test/tools/llvm-readobj/relocations.test +++ b/llvm/test/tools/llvm-readobj/relocations.test @@ -4,8 +4,6 @@ RUN: | FileCheck %s -check-prefix BAD-COFF-RELOCS RUN: llvm-readobj -r %p/Inputs/relocs-no-symtab.obj.coff-i386 \ RUN: | FileCheck %s -check-prefix BAD-COFF-RELOCS -RUN: llvm-readobj -r %p/Inputs/trivial.obj.elf-i386 \ -RUN: | FileCheck %s -check-prefix ELF RUN: llvm-readobj -r %p/Inputs/trivial.obj.macho-i386 \ RUN: | FileCheck %s -check-prefix MACHO-I386 RUN: llvm-readobj -r %p/Inputs/trivial.obj.macho-x86-64 \ @@ -33,15 +31,6 @@ BAD-COFF-RELOCS-NEXT: } BAD-COFF-RELOCS-NEXT: ] -ELF: Relocations [ -ELF-NEXT: Section (2) .rel.text { -ELF-NEXT: 0xC R_386_GOTPC _GLOBAL_OFFSET_TABLE_ 0x0 -ELF-NEXT: 0x12 R_386_GOTOFF .L.str 0x0 -ELF-NEXT: 0x1A R_386_PLT32 puts 0x0 -ELF-NEXT: 0x1F R_386_PLT32 SomeOtherFunction 0x0 -ELF-NEXT: } -ELF-NEXT: ] - MACHO-I386: Relocations [ MACHO-I386-NEXT: Section __text { MACHO-I386-NEXT: 0x18 1 2 1 GENERIC_RELOC_VANILLA 0 _SomeOtherFunction diff --git a/llvm/test/tools/llvm-symbolizer/functions.s b/llvm/test/tools/llvm-symbolizer/functions.s --- a/llvm/test/tools/llvm-symbolizer/functions.s +++ b/llvm/test/tools/llvm-symbolizer/functions.s @@ -3,13 +3,18 @@ # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o # RUN: llvm-symbolizer 0 --obj=%t.o | FileCheck %s --check-prefix=LINKAGE +# RUN: llvm-symbolizer 0 -f --obj=%t.o | FileCheck %s --check-prefix=LINKAGE # RUN: llvm-symbolizer 0 --functions --obj=%t.o | FileCheck %s --check-prefix=LINKAGE +# RUN: llvm-symbolizer 0 -f=linkage --obj=%t.o | FileCheck %s --check-prefix=LINKAGE # RUN: llvm-symbolizer 0 --functions=linkage --obj=%t.o | FileCheck %s --check-prefix=LINKAGE +# RUN: llvm-symbolizer 0 -f=short --obj=%t.o | FileCheck %s --check-prefix=SHORT # RUN: llvm-symbolizer 0 --functions=short --obj=%t.o | FileCheck %s --check-prefix=SHORT +# RUN: llvm-symbolizer 0 -f=none --obj=%t.o | FileCheck %s --check-prefix=NONE # RUN: llvm-symbolizer 0 --functions=none --obj=%t.o | FileCheck %s --check-prefix=NONE ## Characterise behaviour for no '=' sign. llvm-symbolizer treats the next option as an ## input address, and just prints it. +# RUN: llvm-symbolizer 0 -f none --obj=%t.o | FileCheck %s --check-prefixes=LINKAGE,ERR # RUN: llvm-symbolizer 0 --functions none --obj=%t.o | FileCheck %s --check-prefixes=LINKAGE,ERR # LINKAGE: {{^}}foo(int){{$}}