[test][tools] Add missing and improve testing

Mostly this adds testing for certain aliases in more explicit ways.
There are also a few tidy-ups, and additions of missing testing, where
the feature was either not tested at all, or not tested explicitly and
sufficiently.

Reviewed by: MaskRay, rupprecht, grimar

Differential Revision: https://reviews.llvm.org/D71116
This commit is contained in:
James Henderson 2019-12-09 11:43:47 +00:00
parent 0d1490bf6a
commit dba420bc05
16 changed files with 534 additions and 22 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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-STRIPPED: _f
CHECK-UNSTRIPPED: __ZN2ns1fE
CHECK-UNSTRIPPED: std::f
CHECK-UNSTRIPPED: _f

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 @@ FileHeader:
# 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 @@ FileHeader:
# 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:

View File

@ -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

View File

@ -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

View File

@ -4,8 +4,6 @@ RUN: llvm-readobj -r %p/Inputs/bad-relocs.obj.coff-i386 \
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: 0xDEADBEEF IMAGE_REL_I386_ABSOLUTE -
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

View File

@ -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){{$}}