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