## Check how llvm-readelf prints section details with --section-details.
## Check the output for the 64-bit case.
# RUN: yaml2obj %s -DBITS=64 -DCHDR=0000000008000000000000000400000000000000 -o %t64.o
# RUN: llvm-readelf %t64.o --section-details 2>&1 | \
# RUN: FileCheck %s -DFILE=%t64.o --strict-whitespace --match-full-lines --check-prefix=GNU64
# GNU64:There are 22 section headers, starting at offset 0x198:
# GNU64-EMPTY:
# GNU64-NEXT:Section Headers:
# GNU64-NEXT: [Nr] Name
# GNU64-NEXT: Type Address Off Size ES Lk Inf Al
# GNU64-NEXT: Flags
# GNU64-NEXT: [ 0] {{$}}
# GNU64-NEXT: NULL 0000000000000000 000000 000000 00 0 0 0
# GNU64-NEXT: [0000000000000000]: {{$}}
# GNU64-NEXT: [ 1] allflags_and_long_fields
# GNU64-NEXT: PROGBITS 1111111111111111 2222222222222222 4444444444444444 5555555555555555 858993459 1717986918 8608480567731124087
# GNU64-NEXT: [ffffffffffffffff]: WRITE, ALLOC, EXEC, MERGE, STRINGS, INFO LINK, LINK ORDER, OS NONCONF, GROUP, TLS, COMPRESSED, EXCLUDE, OS (000000000ff00000), PROC (0000000070000000), UNKNOWN (ffffffff000ff008)
# GNU64-NEXT:{{.*}}: warning: '[[FILE]]': SHF_COMPRESSED section 'allflags_and_long_fields' does not have an Elf_Chdr header
# GNU64-NEXT: [<corrupt>]
# GNU64-NEXT: [ 2] noflags
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000000]: {{$}}
# GNU64-NEXT: [ 3] write
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000001]: WRITE
# GNU64-NEXT: [ 4] alloc
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000002]: ALLOC
# GNU64-NEXT: [ 5] exec
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000004]: EXEC
# GNU64-NEXT: [ 6] merge
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000010]: MERGE
# GNU64-NEXT: [ 7] strings
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000020]: STRINGS
# GNU64-NEXT: [ 8] infolink
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000040]: INFO LINK
# GNU64-NEXT: [ 9] linkorder
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000080]: LINK ORDER
# GNU64-NEXT: [10] nonconforming
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000100]: OS NONCONF
# GNU64-NEXT: [11] group
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000200]: GROUP
# GNU64-NEXT: [12] tls
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000400]: TLS
# GNU64-NEXT: [13] exclude
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000080000000]: EXCLUDE
# GNU64-NEXT: [14] known_and_unknown
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [00000000000f0003]: WRITE, ALLOC, UNKNOWN (00000000000f0000)
# GNU64-NEXT: [15] only_unknown
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [00000000000f0000]: UNKNOWN (00000000000f0000)
# GNU64-NEXT: [16] compressed_corrupted
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU64-NEXT: [0000000000000800]: COMPRESSED
# GNU64-NEXT:{{.*}}: warning: '[[FILE]]': SHF_COMPRESSED section 'compressed_corrupted' does not have an Elf_Chdr header
# GNU64-NEXT: [<corrupt>]
# GNU64-NEXT: [17] compressed_zlib
# GNU64-NEXT: PROGBITS 0000000000000000 000040 000023 00 0 0 0
# GNU64-NEXT: [0000000000000800]: COMPRESSED
# GNU64-NEXT: ZLIB, 0000000000000008, 4
# GNU64-NEXT: [18] compressed_zstd
# GNU64-NEXT: PROGBITS 0000000000000000 000063 000029 00 0 0 0
# GNU64-NEXT: [0000000000000800]: COMPRESSED
# GNU64-NEXT: ZSTD, 0000000000000008, 4
# GNU64-NEXT: [19] compressed_unknown
# GNU64-NEXT: PROGBITS 0000000000000000 00008c 000018 00 0 0 0
# GNU64-NEXT: [0000000000000800]: COMPRESSED
# GNU64-NEXT: [<unknown>: 0x3], 0000000000000008, 4
# GNU64-NEXT: [20] .strtab
# GNU64-NEXT: STRTAB 0000000000000000 0000a4 000001 00 0 0 1
# GNU64-NEXT: [0000000000000000]: {{$}}
# GNU64-NEXT: [21] .shstrtab
# GNU64-NEXT: STRTAB 0000000000000000 0000a5 0000ed 00 0 0 1
# GNU64-NEXT: [0000000000000000]: {{$}}
# GNU64-NOT:{{.}}
--- !ELF
FileHeader:
Class: ELFCLASS[[BITS]]
Data: ELFDATA2LSB
Type: ET_REL
Flags: []
Sections:
- Name: allflags_and_long_fields
Type: SHT_PROGBITS
ShFlags: 0xffffffffffffffff
Address: 0x1111111111111111
ShOffset: 0x2222222222222222
Link: 0x33333333
ShSize: 0x4444444444444444
EntSize: 0x5555555555555555
Info: 0x66666666
ShAddrAlign: 0x7777777777777777
- Name: noflags
Type: SHT_PROGBITS
Flags: [ ]
- Name: write
Type: SHT_PROGBITS
Flags: [ SHF_WRITE ]
- Name: alloc
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC ]
- Name: exec
Type: SHT_PROGBITS
Flags: [ SHF_EXECINSTR ]
- Name: merge
Type: SHT_PROGBITS
Flags: [ SHF_MERGE ]
- Name: strings
Type: SHT_PROGBITS
Flags: [ SHF_STRINGS ]
- Name: infolink
Type: SHT_PROGBITS
Flags: [ SHF_INFO_LINK ]
- Name: linkorder
Type: SHT_PROGBITS
Flags: [ SHF_LINK_ORDER ]
- Name: nonconforming
Type: SHT_PROGBITS
Flags: [ SHF_OS_NONCONFORMING ]
- Name: group
Type: SHT_PROGBITS
Flags: [ SHF_GROUP ]
- Name: tls
Type: SHT_PROGBITS
Flags: [ SHF_TLS ]
- Name: exclude
Type: SHT_PROGBITS
Flags: [ SHF_EXCLUDE ]
- Name: known_and_unknown
Type: SHT_PROGBITS
ShFlags: 0x000f0003
- Name: only_unknown
Type: SHT_PROGBITS
ShFlags: 0x000f0000
- Name: compressed_corrupted
Type: SHT_PROGBITS
Flags: [ SHF_COMPRESSED ]
- Name: compressed_zlib
Type: SHT_PROGBITS
Flags: [ SHF_COMPRESSED ]
Content: 01000000[[CHDR]]789c636080000000080001
- Name: compressed_zstd
Type: SHT_PROGBITS
Flags: [ SHF_COMPRESSED ]
Content: 02000000[[CHDR]]28b52ffd20084100000000000000000000
- Name: compressed_unknown
Type: SHT_PROGBITS
Flags: [ SHF_COMPRESSED ]
Content: 03000000[[CHDR]]
## Check the output for the 32-bit case.
# RUN: yaml2obj %s -DBITS=32 -DCHDR=0400000002000000 -o %t32.o
# RUN: llvm-readelf %t32.o --section-details 2>&1 | \
# RUN: FileCheck %s -DFILE=%t32.o --strict-whitespace --match-full-lines --check-prefix=GNU32
# GNU32:There are 22 section headers, starting at offset 0x164:
# GNU32-EMPTY:
# GNU32-NEXT:Section Headers:
# GNU32-NEXT: [Nr] Name
# GNU32-NEXT: Type Addr Off Size ES Lk Inf Al
# GNU32-NEXT: Flags
# GNU32-NEXT: [ 0] {{$}}
# GNU32-NEXT: NULL 00000000 000000 000000 00 0 0 0
# GNU32-NEXT: [00000000]: {{$}}
# GNU32-NEXT: [ 1] allflags_and_long_fields
# GNU32-NEXT: PROGBITS 11111111 22222222 44444444 55555555 858993459 1717986918 2004318071
# GNU32-NEXT: [ffffffff]: WRITE, ALLOC, EXEC, MERGE, STRINGS, INFO LINK, LINK ORDER, OS NONCONF, GROUP, TLS, COMPRESSED, EXCLUDE, OS (0ff00000), PROC (70000000), UNKNOWN (000ff008)
# GNU32-NEXT:{{.*}}: warning: '[[FILE]]': SHF_COMPRESSED section 'allflags_and_long_fields' does not have an Elf_Chdr header
# GNU32-NEXT: [<corrupt>]
# GNU32-NEXT: [ 2] noflags
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000000]: {{$}}
# GNU32-NEXT: [ 3] write
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000001]: WRITE
# GNU32-NEXT: [ 4] alloc
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000002]: ALLOC
# GNU32-NEXT: [ 5] exec
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000004]: EXEC
# GNU32-NEXT: [ 6] merge
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000010]: MERGE
# GNU32-NEXT: [ 7] strings
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000020]: STRINGS
# GNU32-NEXT: [ 8] infolink
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000040]: INFO LINK
# GNU32-NEXT: [ 9] linkorder
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000080]: LINK ORDER
# GNU32-NEXT: [10] nonconforming
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000100]: OS NONCONF
# GNU32-NEXT: [11] group
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000200]: GROUP
# GNU32-NEXT: [12] tls
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000400]: TLS
# GNU32-NEXT: [13] exclude
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [80000000]: EXCLUDE
# GNU32-NEXT: [14] known_and_unknown
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [000f0003]: WRITE, ALLOC, UNKNOWN (000f0000)
# GNU32-NEXT: [15] only_unknown
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [000f0000]: UNKNOWN (000f0000)
# GNU32-NEXT: [16] compressed_corrupted
# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0
# GNU32-NEXT: [00000800]: COMPRESSED
# GNU32-NEXT:{{.*}}: warning: '[[FILE]]': SHF_COMPRESSED section 'compressed_corrupted' does not have an Elf_Chdr header
# GNU32-NEXT: [<corrupt>]
# GNU32-NEXT: [17] compressed_zlib
# GNU32-NEXT: PROGBITS 00000000 000034 000017 00 0 0 0
# GNU32-NEXT: [00000800]: COMPRESSED
# GNU32-NEXT: ZLIB, 00000004, 2
# GNU32-NEXT: [18] compressed_zstd
# GNU32-NEXT: PROGBITS 00000000 00004b 00001d 00 0 0 0
# GNU32-NEXT: [00000800]: COMPRESSED
# GNU32-NEXT: ZSTD, 00000004, 2
# GNU32-NEXT: [19] compressed_unknown
# GNU32-NEXT: PROGBITS 00000000 000068 00000c 00 0 0 0
# GNU32-NEXT: [00000800]: COMPRESSED
# GNU32-NEXT: [<unknown>: 0x3], 00000004, 2
# GNU32-NEXT: [20] .strtab
# GNU32-NEXT: STRTAB 00000000 000074 000001 00 0 0 1
# GNU32-NEXT: [00000000]: {{$}}
# GNU32-NEXT: [21] .shstrtab
# GNU32-NEXT: STRTAB 00000000 000075 0000ed 00 0 0 1
# GNU32-NEXT: [00000000]: {{$}}
# GNU32-NOT:{{.}}
## When --section-details and --sections are both specified, --sections is ignored.
# RUN: llvm-readelf %t64.o --section-details --sections 2>&1 | FileCheck %s -DFILE=%t64.o --check-prefix=GNU64
# RUN: llvm-readelf %t64.o --sections --section-details 2>&1 | FileCheck %s -DFILE=%t64.o --check-prefix=GNU64
## Check that we produce the same output with -t (alias).
# RUN: llvm-readelf --section-details %t64.o > %t.readelf.full
# RUN: llvm-readelf -t %t64.o > %t.readelf.alias
# RUN: cmp %t.readelf.full %t.readelf.alias
## Check how we dump sections when the section header string table can't be read.
# RUN: yaml2obj --docnum=2 %s -o %tshstrndx.o
# RUN: llvm-readelf %tshstrndx.o --section-details 2>&1 | \
# RUN: FileCheck %s -DFILE=%tshstrndx.o --check-prefix=SHSTRNDX
# SHSTRNDX: Section Headers:
# SHSTRNDX-NEXT: [Nr] Name
# SHSTRNDX-NEXT: Type Address Off Size ES Lk Inf Al
# SHSTRNDX-NEXT: Flags
# SHSTRNDX-NEXT: warning: '[[FILE]]': section header string table index 65279 does not exist
# SHSTRNDX-NEXT: [ 0]
# SHSTRNDX-NEXT: NULL 0000000000000000 000000 000000 00 0 0 0
# SHSTRNDX-NEXT: [0000000000000000]:
# SHSTRNDX-NEXT: warning: '[[FILE]]': a section [index 1] has an invalid sh_name (0x5) offset which goes past the end of the section name string table
# SHSTRNDX-NEXT: [ 1] <?>
# SHSTRNDX-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# SHSTRNDX-NEXT: [0000000000000000]:
# SHSTRNDX-NEXT: warning: '[[FILE]]': a section [index 2] has an invalid sh_name (0x1) offset which goes past the end of the section name string table
# SHSTRNDX-NEXT: [ 2] <?>
# SHSTRNDX-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0
# SHSTRNDX-NEXT: [0000000000000000]:
# SHSTRNDX-NEXT: warning: '[[FILE]]': a section [index 3] has an invalid sh_name (0x13) offset which goes past the end of the section name string table
# SHSTRNDX-NEXT: [ 3] <?>
# SHSTRNDX-NEXT: STRTAB 0000000000000000 000040 000001 00 0 0 1
# SHSTRNDX-NEXT: [0000000000000000]:
# SHSTRNDX-NEXT: warning: '[[FILE]]': a section [index 4] has an invalid sh_name (0x9) offset which goes past the end of the section name string table
# SHSTRNDX-NEXT: [ 4] <?>
# SHSTRNDX-NEXT: STRTAB 0000000000000000 000041 00001b 00 0 0 1
# SHSTRNDX-NEXT: [0000000000000000]:
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
EShStrNdx: 0xfeff
Sections:
- Name: foo
Type: SHT_PROGBITS
- Name: bar
Type: SHT_PROGBITS