forked from triSYCL/sycl
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[llvm-objdump]Improve testing of some switches triSYCL#1
This is the first in a set of patches I have to improve testing of llvm-objdump. This patch targets --all-headers, --section, and --full-contents. In the --section case, it deletes a pre-canned binary which is only used by the one test and replaces it with yaml. Reviewed by: grimar, MaskRay Differential Revision: https://reviews.llvm.org/D61941 llvm-svn: 360893
- Loading branch information
Showing
4 changed files
with
255 additions
and
34 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,24 +1,224 @@ | ||
// This test checks that --section works correctly. | ||
// RUN: llvm-objdump -h %p/Inputs/section-filter.obj -j=.text \ | ||
// RUN: --section=.bss | FileCheck %s | ||
|
||
// CHECK: .text | ||
// CHECK-NOT: .data | ||
// CHECK: .bss | ||
|
||
// Test that the -j alias can be used flexibly. Create a baseline and ensure | ||
// all other combinations are identical. | ||
// RUN: llvm-objdump %p/Inputs/section-filter.obj -h -s --section .symtab > %t.full | ||
// RUN: llvm-objdump %p/Inputs/section-filter.obj -h -s -j .symtab > %t.1 | ||
// RUN: llvm-objdump %p/Inputs/section-filter.obj -h -s -j=.symtab > %t.2 | ||
// RUN: llvm-objdump %p/Inputs/section-filter.obj -h -s -j.symtab > %t.3 | ||
// RUN: llvm-objdump %p/Inputs/section-filter.obj -hsj .symtab > %t.4 | ||
// RUN: llvm-objdump %p/Inputs/section-filter.obj -hsj=.symtab > %t.5 | ||
// RUN: llvm-objdump %p/Inputs/section-filter.obj -hsj.symtab > %t.6 | ||
|
||
// RUN: cmp %t.full %t.1 | ||
// RUN: cmp %t.full %t.2 | ||
// RUN: cmp %t.full %t.3 | ||
// RUN: cmp %t.full %t.4 | ||
// RUN: cmp %t.full %t.5 | ||
// RUN: cmp %t.full %t.6 | ||
## Test that --section works correctly for -h. | ||
## We test the LMA here too, because the code at the time of writing uses the | ||
## value of --section when looking up section LMAs. | ||
# RUN: yaml2obj %s --docnum=1 -o %t.h.elf | ||
# RUN: llvm-objdump -h %t.h.elf -j=.text --section=.bss \ | ||
# RUN: | FileCheck %s --check-prefix=SHDRS --implicit-check-not=.data --implicit-check-not=.text2 | ||
|
||
# SHDRS: Name Size VMA LMA | ||
# SHDRS: .text 00000001 0000000000000400 0000000000001000 | ||
# SHDRS: .bss 00000001 0000000000000420 0000000000003000 | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_EXEC | ||
Machine: EM_X86_64 | ||
Sections: | ||
- Name: .text | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_ALLOC, SHF_EXECINSTR] | ||
Address: 0x400 | ||
AddressAlign: 0x10 | ||
Content: 'c3' | ||
- Name: .text2 | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_ALLOC, SHF_EXECINSTR] | ||
Address: 0x401 | ||
Content: '90' | ||
- Name: .data | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_ALLOC, SHF_WRITE] | ||
Address: 0x410 | ||
AddressAlign: 0x10 | ||
Content: '42' | ||
- Name: .bss | ||
Type: SHT_NOBITS | ||
Flags: [SHF_ALLOC, SHF_WRITE] | ||
Address: 0x420 | ||
AddressAlign: 0x10 | ||
Size: 1 | ||
ProgramHeaders: | ||
- Type: PT_LOAD | ||
VAddr: 0x400 | ||
PAddr: 0x1000 | ||
Sections: | ||
- Section: .text | ||
- Section: .text2 | ||
- Type: PT_LOAD | ||
VAddr: 0x410 | ||
PAddr: 0x2000 | ||
Sections: | ||
- Section: .data | ||
- Type: PT_LOAD | ||
VAddr: 0x420 | ||
PAddr: 0x3000 | ||
Sections: | ||
- Section: .bss | ||
|
||
## Test that --section works correctly for -d with -r. | ||
## FIXME: Inline relocations are only printed if the relocation section itself is | ||
## specified with --section. This test just characterizes the existing behavior. | ||
## See https://bugs.llvm.org/show_bug.cgi?id=41886 | ||
# RUN: yaml2obj %s --docnum=2 -o %t.o | ||
|
||
## Show non-executable sections are not disassembled even if specified, | ||
## and that only the specified executable sections are disassembled. | ||
## Also show that no relocation sections are dumped because none are | ||
## specified. | ||
## FIXME: This is different behaviour to GNU objdump, which dumps the non- | ||
## executable sections if requested explicitly. | ||
## See https://bugs.llvm.org/show_bug.cgi?id=41897. | ||
# RUN: llvm-objdump -d -r %t.o --section=.text --section=.rodata \ | ||
# RUN: | FileCheck %s --check-prefix=DISASM --implicit-check-not=.text2 \ | ||
# RUN: --implicit-check-not=.rodata --implicit-check-not=R_X86_64 | ||
|
||
## Show that only the specified relocation sections that patch the | ||
## disassembled sections are dumped. | ||
# RUN: llvm-objdump -d -r %t.o --section=.text \ | ||
# RUN: --section=.rela.text --section=.rela.text2 \ | ||
# RUN: | FileCheck %s --check-prefixes=DISASM,RELOC --implicit-check-not=.text2 \ | ||
# RUN: --implicit-check-not=R_X86_64 | ||
|
||
# DISASM: Disassembly of section .text: | ||
# DISASM-EMPTY: | ||
# DISASM-NEXT: 0000000000000400 .text: | ||
# DISASM-NEXT: 400: e8 00 00 00 00 callq 0 <.text+0x5> | ||
# RELOC-NEXT: 00000401: R_X86_64_PC32 foo+1 | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_REL | ||
Machine: EM_X86_64 | ||
Sections: | ||
- Name: .text | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_ALLOC, SHF_EXECINSTR] | ||
Address: 0x400 | ||
AddressAlign: 0x10 | ||
Content: 'e800000000' | ||
- Name: .text2 | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_ALLOC, SHF_EXECINSTR] | ||
Address: 0x401 | ||
Content: '90e800000000' | ||
- Name: .rela.text | ||
Type: SHT_RELA | ||
Info: .text | ||
Relocations: | ||
- Offset: 1 | ||
Symbol: foo | ||
Addend: 1 | ||
Type: R_X86_64_PC32 | ||
- Name: .another.rela.text | ||
Type: SHT_RELA | ||
Info: .text | ||
Relocations: | ||
- Offset: 1 | ||
Symbol: foo | ||
Type: R_X86_64_GOT32 | ||
- Name: .rela.text2 | ||
Type: SHT_RELA | ||
Info: .text2 | ||
Relocations: | ||
- Offset: 1 | ||
Symbol: foo | ||
Addend: 2 | ||
Type: R_X86_64_PLT32 | ||
- Name: .rodata | ||
Type: SHT_PROGBITS | ||
Flags: [SHF_ALLOC] | ||
Size: 4 | ||
- Name: .rela.rodata | ||
Type: SHT_RELA | ||
Info: .rodata | ||
Relocations: | ||
- Offset: 0 | ||
Symbol: foo | ||
Type: R_X86_64_NONE | ||
Symbols: | ||
- Name: foo | ||
|
||
## Test that --section works when dumping relocation sections. | ||
# RUN: llvm-objdump -r %t.o --section=.another.rela.text --section=.rela.rodata \ | ||
# RUN: | FileCheck %s --check-prefix=DUMP-RELOCS --implicit-check-not=R_X86_64 \ | ||
# RUN: --implicit-check-not="RELOCATION RECORDS" | ||
|
||
# DUMP-RELOCS: RELOCATION RECORDS FOR [.text]: | ||
# DUMP-RELOCS: 00000001 R_X86_64_GOT32 foo | ||
# DUMP-RELOCS: RELOCATION RECORDS FOR [.rodata]: | ||
# DUMP-RELOCS: 00000000 R_X86_64_NONE foo | ||
|
||
## Test that --section works with --full-contents. | ||
# RUN: llvm-objdump -s %t.o --section=.text --section=.rela.text2 \ | ||
# RUN: | FileCheck %s --check-prefix=CONTENTS \ | ||
# RUN: --implicit-check-not=.text \ | ||
# RUN: --implicit-check-not=.rodata | ||
|
||
# CONTENTS: Contents of section .text: | ||
# CONTENTS: Contents of section .rela.text2: | ||
|
||
## Test that --section works with --fault-map-section. | ||
# RUN: yaml2obj %s --docnum=3 -o %t2.o | ||
# RUN: llvm-objdump %t2.o --fault-map-section -j __clangast \ | ||
# RUN: | FileCheck %s --check-prefixes=FAULTMAP,NO-FAULTMAP | ||
# RUN: llvm-objdump %t2.o --fault-map-section -j .llvm_faultmaps \ | ||
# RUN: | FileCheck %s --check-prefixes=FAULTMAP,WITH-FAULTMAP | ||
|
||
# FAULTMAP: FaultMap table: | ||
# NO-FAULTMAP-NEXT: <not found> | ||
# WITH-FAULTMAP-NEXT: Version: 0x1 | ||
# WITH-FAULTMAP-NEXT: NumFunctions: 0 | ||
|
||
## Test that --section works with --raw-clang-ast. | ||
# RUN: llvm-objdump %t2.o --raw-clang-ast -j .llvm_faultmaps \ | ||
# RUN: | FileCheck %s --check-prefix=NO-AST --allow-empty | ||
# RUN: llvm-objdump %t2.o --raw-clang-ast -j __clangast \ | ||
# RUN: | FileCheck %s --check-prefix=CLANG-AST | ||
|
||
# NO-AST-NOT: {{.}} | ||
# CLANG-AST: foobar | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_REL | ||
Machine: EM_X86_64 | ||
Sections: | ||
- Name: .llvm_faultmaps | ||
Type: SHT_PROGBITS | ||
Content: '0100000000000000' | ||
- Name: __clangast | ||
Type: SHT_PROGBITS | ||
Content: '666f6f626172' # "foobar" | ||
|
||
## Test that the -j alias can be used flexibly. Create a baseline and ensure | ||
## all other combinations are identical. | ||
# RUN: llvm-objdump %t.h.elf -h -s --section .symtab > %t.full | ||
# RUN: llvm-objdump %t.h.elf -h -s -j .symtab > %t.1 | ||
# RUN: llvm-objdump %t.h.elf -h -s -j=.symtab > %t.2 | ||
# RUN: llvm-objdump %t.h.elf -h -s -j.symtab > %t.3 | ||
# RUN: llvm-objdump %t.h.elf -hsj .symtab > %t.4 | ||
# RUN: llvm-objdump %t.h.elf -hsj=.symtab > %t.5 | ||
# RUN: llvm-objdump %t.h.elf -hsj.symtab > %t.6 | ||
|
||
# RUN: cmp %t.full %t.1 | ||
# RUN: cmp %t.full %t.2 | ||
# RUN: cmp %t.full %t.3 | ||
# RUN: cmp %t.full %t.4 | ||
# RUN: cmp %t.full %t.5 | ||
# RUN: cmp %t.full %t.6 | ||
|
||
## Test that an unknown section name causes all section output to be suppressed. | ||
## TODO: Add a warning for this case. | ||
## See https://bugs.llvm.org/show_bug.cgi?id=41898. | ||
# RUN: llvm-objdump %t.h.elf -h --section foobar \ | ||
# RUN: | FileCheck %s --check-prefix=NO-SECTION | ||
|
||
# NO-SECTION: Sections: | ||
# NO-SECTION-NEXT: Idx Name Size VMA Type | ||
# NO-SECTION-NOT: {{.}} |