## This is a test case for --section-symbols, --section-relocations and
## --section-data command line flags and their aliases.
# RUN: yaml2obj %s -o %t
## Test --section-symbols (--st) displays symbols for each section.
# RUN: llvm-readobj --sections --st %t > %t.readobj-st
# RUN: llvm-readobj --sections --section-symbols %t > %t.readobj-st-no-alias
# RUN: diff %t.readobj-st %t.readobj-st-no-alias
# RUN: FileCheck %s --input-file=%t.readobj-st --check-prefixes=ALL,ST
## Test --section-relocations (--sr) displays relocations for each section.
# RUN: llvm-readobj --sections --sr %t > %t.readobj-sr
# RUN: llvm-readobj --sections --section-relocations %t > %t.readobj-sr-no-alias
# RUN: diff %t.readobj-sr %t.readobj-sr-no-alias
# RUN: FileCheck %s --input-file=%t.readobj-sr --check-prefixes=ALL,SR
## Test --section-data (--sd) displays section data for each section except SHT_NOBITS sections.
# RUN: llvm-readobj --sections --sd %t > %t.readobj-sd
# RUN: llvm-readobj --sections --section-data %t > %t.readobj-sd-no-alias
# RUN: diff %t.readobj-sd %t.readobj-sd-no-alias
# RUN: FileCheck %s --input-file=%t.readobj-sd --check-prefixes=ALL,SD
## Test all options together.
# RUN: llvm-readobj --sections --section-symbols --section-relocations --section-data %t | \
# RUN: FileCheck %s --check-prefixes=ALL,ST,SR,SD
# ALL: Sections [
# ALL-NEXT: Section {
# ALL-NEXT: Index: 0
# ALL-NEXT: Name: (0)
# ALL-NEXT: Type: SHT_NULL (0x0)
# ALL-NEXT: Flags [ (0x0)
# ALL-NEXT: ]
# ALL-NEXT: Address: 0x0
# ALL-NEXT: Offset: 0x0
# ALL-NEXT: Size: 0
# ALL-NEXT: Link: 0
# ALL-NEXT: Info: 0
# ALL-NEXT: AddressAlignment: 0
# ALL-NEXT: EntrySize: 0
# SR-NEXT: Relocations [
# SR-NEXT: ]
# ST-NEXT: Symbols [
# ST-NEXT: ]
# SD-NEXT: SectionData (
# SD-NEXT: )
# ALL-NEXT: }
# ALL-NEXT: Section {
# ALL-NEXT: Index: 1
# ALL-NEXT: Name: .text (6)
# ALL-NEXT: Type: SHT_PROGBITS (0x1)
# ALL-NEXT: Flags [ (0x0)
# ALL-NEXT: ]
# ALL-NEXT: Address: 0x0
# ALL-NEXT: Offset: 0x40
# ALL-NEXT: Size: 0
# ALL-NEXT: Link: 0
# ALL-NEXT: Info: 0
# ALL-NEXT: AddressAlignment: 0
# ALL-NEXT: EntrySize: 0
# SR-NEXT: Relocations [
# SR-NEXT: ]
# ST-NEXT: Symbols [
# ST-NEXT: Symbol {
# ST-NEXT: Name: foo (1)
# ST-NEXT: Value: 0x0
# ST-NEXT: Size: 0
# ST-NEXT: Binding: Local (0x0)
# ST-NEXT: Type: None (0x0)
# ST-NEXT: Other: 0
# ST-NEXT: Section: .text (0x1)
# ST-NEXT: }
# ST-NEXT: ]
# SD-NEXT: SectionData (
# SD-NEXT: )
# ALL-NEXT: }
# ALL-NEXT: Section {
# ALL-NEXT: Index: 2
# ALL-NEXT: Name: .rela.text (1)
# ALL-NEXT: Type: SHT_RELA (0x4)
# ALL-NEXT: Flags [ (0x0)
# ALL-NEXT: ]
# ALL-NEXT: Address: 0x0
# ALL-NEXT: Offset: 0x40
# ALL-NEXT: Size: 24
# ALL-NEXT: Link: 4
# ALL-NEXT: Info: 1
# ALL-NEXT: AddressAlignment: 0
# ALL-NEXT: EntrySize: 24
# SR-NEXT: Relocations [
# SR-NEXT: 0x0 R_X86_64_NONE - 0x0
# SR-NEXT: ]
# ST-NEXT: Symbols [
# ST-NEXT: ]
# SD-NEXT: SectionData (
# SD-NEXT: 0000: 00000000 00000000 00000000 00000000 |................|
# SD-NEXT: 0010: 00000000 00000000 |........|
# SD-NEXT: )
# ALL-NEXT: }
# ALL-NEXT: Section {
# ALL-NEXT: Index: 3
# ALL-NEXT: Name: .bss (12)
# ALL-NEXT: Type: SHT_NOBITS (0x8)
# ALL-NEXT: Flags [ (0x0)
# ALL-NEXT: ]
# ALL-NEXT: Address: 0x0
# ALL-NEXT: Offset: 0x58
# ALL-NEXT: Size: 4096
# ALL-NEXT: Link: 0
# ALL-NEXT: Info: 0
# ALL-NEXT: AddressAlignment: 0
# ALL-NEXT: EntrySize: 0
# SR-NEXT: Relocations [
# SR-NEXT: ]
# ST-NEXT: Symbols [
# ST-NEXT: ]
# ALL-NEXT: }
# ALL-NEXT: Section {
# ALL-NEXT: Index: 4
# ALL-NEXT: Name: .symtab (35)
# ALL-NEXT: Type: SHT_SYMTAB (0x2)
# ALL-NEXT: Flags [ (0x0)
# ALL-NEXT: ]
# ALL-NEXT: Address: 0x0
# ALL-NEXT: Offset: 0x58
# ALL-NEXT: Size: 48
# ALL-NEXT: Link: 5
# ALL-NEXT: Info: 2
# ALL-NEXT: AddressAlignment: 8
# ALL-NEXT: EntrySize: 24
# SR-NEXT: Relocations [
# SR-NEXT: ]
# ST-NEXT: Symbols [
# ST-NEXT: ]
# SD-NEXT: SectionData (
# SD-NEXT: 0000: 00000000 00000000 00000000 00000000 |................|
# SD-NEXT: 0010: 00000000 00000000 01000000 00000100 |................|
# SD-NEXT: 0020: 00000000 00000000 00000000 00000000 |................|
# SD-NEXT: )
# ALL-NEXT: }
# ALL-NEXT: Section {
# ALL-NEXT: Index: 5
# ALL-NEXT: Name: .strtab (27)
# ALL-NEXT: Type: SHT_STRTAB (0x3)
# ALL-NEXT: Flags [ (0x0)
# ALL-NEXT: ]
# ALL-NEXT: Address: 0x0
# ALL-NEXT: Offset: 0x88
# ALL-NEXT: Size: 5
# ALL-NEXT: Link: 0
# ALL-NEXT: Info: 0
# ALL-NEXT: AddressAlignment: 1
# ALL-NEXT: EntrySize: 0
# SR-NEXT: Relocations [
# SR-NEXT: ]
# ST-NEXT: Symbols [
# ST-NEXT: ]
# SD-NEXT: SectionData (
# SD-NEXT: 0000: 00666F6F 00 |.foo.|
# SD-NEXT: )
# ALL-NEXT: }
# ALL-NEXT: Section {
# ALL-NEXT: Index: 6
# ALL-NEXT: Name: .shstrtab (17)
# ALL-NEXT: Type: SHT_STRTAB (0x3)
# ALL-NEXT: Flags [ (0x0)
# ALL-NEXT: ]
# ALL-NEXT: Address: 0x0
# ALL-NEXT: Offset: 0x8D
# ALL-NEXT: Size: 43
# ALL-NEXT: Link: 0
# ALL-NEXT: Info: 0
# ALL-NEXT: AddressAlignment: 1
# ALL-NEXT: EntrySize: 0
# SR-NEXT: Relocations [
# SR-NEXT: ]
# ST-NEXT: Symbols [
# ST-NEXT: ]
# SD-NEXT: SectionData (
# SD-NEXT: 0000: 002E7265 6C612E74 65787400 2E627373 |..rela.text..bss|
# SD-NEXT: 0010: 002E7368 73747274 6162002E 73747274 |..shstrtab..strt|
# SD-NEXT: 0020: 6162002E 73796D74 616200 |ab..symtab.|
# SD-NEXT: )
# ALL-NEXT: }
# ALL-NEXT: ]
## Check that --section-symbols, --section-relocations and --section-data
## options produce no output without --sections.
# RUN: llvm-readobj --section-symbols --section-relocations --section-data %t | \
# RUN: FileCheck %s -DFILE=%t --check-prefix=NO-SECTIONS
# NO-SECTIONS: File: [[FILE]]
# NO-SECTIONS-NEXT: Format: elf64-x86-64
# NO-SECTIONS-NEXT: Arch: x86_64
# NO-SECTIONS-NEXT: AddressSize: 64bit
# NO-SECTIONS-NEXT: LoadName: <Not found>
# NO-SECTIONS-NOT: {{.}}
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
- Name: .rela.text
Type: SHT_RELA
Info: .text
Relocations:
- Type: R_X86_64_NONE
- Name: .bss
Type: SHT_NOBITS
Size: 0x1000
Symbols:
- Name: foo
Section: .text
## Check the output for an arbitrary section when --section-symbols is requested,
## but there is no symbol table in the object.
# RUN: yaml2obj --docnum=2 %s -o %t2
# RUN: llvm-readobj -S --section-symbols %t2 2>&1 | \
# RUN: FileCheck %s --implicit-check-not=warning: --check-prefix=NOSYMTAB
# NOSYMTAB: Section {
# NOSYMTAB: Index: 1
# NOSYMTAB-NEXT: Name: .foo
# NOSYMTAB: Symbols [
# NOSYMTAB-NEXT: ]
# NOSYMTAB-NEXT: }
# NOSYMTAB-NEXT: Section {
# NOSYMTAB-NEXT: Index: 2
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .foo
Type: SHT_PROGBITS