1## Check how llvm-readelf prints section details with --section-details. 2 3## Check the output for the 64-bit case. 4# RUN: yaml2obj %s -DBITS=64 -DCHDR=0000000008000000000000000400000000000000 -o %t64.o 5# RUN: llvm-readelf %t64.o --section-details 2>&1 | \ 6# RUN: FileCheck %s -DFILE=%t64.o --strict-whitespace --match-full-lines --check-prefix=GNU64 7 8# GNU64:There are 22 section headers, starting at offset 0x198: 9# GNU64-EMPTY: 10# GNU64-NEXT:Section Headers: 11# GNU64-NEXT: [Nr] Name 12# GNU64-NEXT: Type Address Off Size ES Lk Inf Al 13# GNU64-NEXT: Flags 14# GNU64-NEXT: [ 0] {{$}} 15# GNU64-NEXT: NULL 0000000000000000 000000 000000 00 0 0 0 16# GNU64-NEXT: [0000000000000000]: {{$}} 17# GNU64-NEXT: [ 1] allflags_and_long_fields 18# GNU64-NEXT: PROGBITS 1111111111111111 2222222222222222 4444444444444444 5555555555555555 858993459 1717986918 8608480567731124087 19# GNU64-NEXT: [ffffffffffffffff]: WRITE, ALLOC, EXEC, MERGE, STRINGS, INFO LINK, LINK ORDER, OS NONCONF, GROUP, TLS, COMPRESSED, EXCLUDE, OS (000000000ff00000), PROC (0000000070000000), UNKNOWN (ffffffff000ff008) 20# GNU64-NEXT:{{.*}}: warning: '[[FILE]]': SHF_COMPRESSED section 'allflags_and_long_fields' does not have an Elf_Chdr header 21# GNU64-NEXT: [<corrupt>] 22# GNU64-NEXT: [ 2] noflags 23# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 24# GNU64-NEXT: [0000000000000000]: {{$}} 25# GNU64-NEXT: [ 3] write 26# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 27# GNU64-NEXT: [0000000000000001]: WRITE 28# GNU64-NEXT: [ 4] alloc 29# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 30# GNU64-NEXT: [0000000000000002]: ALLOC 31# GNU64-NEXT: [ 5] exec 32# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 33# GNU64-NEXT: [0000000000000004]: EXEC 34# GNU64-NEXT: [ 6] merge 35# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 36# GNU64-NEXT: [0000000000000010]: MERGE 37# GNU64-NEXT: [ 7] strings 38# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 39# GNU64-NEXT: [0000000000000020]: STRINGS 40# GNU64-NEXT: [ 8] infolink 41# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 42# GNU64-NEXT: [0000000000000040]: INFO LINK 43# GNU64-NEXT: [ 9] linkorder 44# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 45# GNU64-NEXT: [0000000000000080]: LINK ORDER 46# GNU64-NEXT: [10] nonconforming 47# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 48# GNU64-NEXT: [0000000000000100]: OS NONCONF 49# GNU64-NEXT: [11] group 50# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 51# GNU64-NEXT: [0000000000000200]: GROUP 52# GNU64-NEXT: [12] tls 53# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 54# GNU64-NEXT: [0000000000000400]: TLS 55# GNU64-NEXT: [13] exclude 56# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 57# GNU64-NEXT: [0000000080000000]: EXCLUDE 58# GNU64-NEXT: [14] known_and_unknown 59# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 60# GNU64-NEXT: [00000000000f0003]: WRITE, ALLOC, UNKNOWN (00000000000f0000) 61# GNU64-NEXT: [15] only_unknown 62# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 63# GNU64-NEXT: [00000000000f0000]: UNKNOWN (00000000000f0000) 64# GNU64-NEXT: [16] compressed_corrupted 65# GNU64-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 66# GNU64-NEXT: [0000000000000800]: COMPRESSED 67# GNU64-NEXT:{{.*}}: warning: '[[FILE]]': SHF_COMPRESSED section 'compressed_corrupted' does not have an Elf_Chdr header 68# GNU64-NEXT: [<corrupt>] 69# GNU64-NEXT: [17] compressed_zlib 70# GNU64-NEXT: PROGBITS 0000000000000000 000040 000023 00 0 0 0 71# GNU64-NEXT: [0000000000000800]: COMPRESSED 72# GNU64-NEXT: ZLIB, 0000000000000008, 4 73# GNU64-NEXT: [18] compressed_zstd 74# GNU64-NEXT: PROGBITS 0000000000000000 000063 000029 00 0 0 0 75# GNU64-NEXT: [0000000000000800]: COMPRESSED 76# GNU64-NEXT: ZSTD, 0000000000000008, 4 77# GNU64-NEXT: [19] compressed_unknown 78# GNU64-NEXT: PROGBITS 0000000000000000 00008c 000018 00 0 0 0 79# GNU64-NEXT: [0000000000000800]: COMPRESSED 80# GNU64-NEXT: [<unknown>: 0x3], 0000000000000008, 4 81# GNU64-NEXT: [20] .strtab 82# GNU64-NEXT: STRTAB 0000000000000000 0000a4 000001 00 0 0 1 83# GNU64-NEXT: [0000000000000000]: {{$}} 84# GNU64-NEXT: [21] .shstrtab 85# GNU64-NEXT: STRTAB 0000000000000000 0000a5 0000ed 00 0 0 1 86# GNU64-NEXT: [0000000000000000]: {{$}} 87# GNU64-NOT:{{.}} 88 89--- !ELF 90FileHeader: 91 Class: ELFCLASS[[BITS]] 92 Data: ELFDATA2LSB 93 Type: ET_REL 94 Flags: [] 95Sections: 96 - Name: allflags_and_long_fields 97 Type: SHT_PROGBITS 98 ShFlags: 0xffffffffffffffff 99 Address: 0x1111111111111111 100 ShOffset: 0x2222222222222222 101 Link: 0x33333333 102 ShSize: 0x4444444444444444 103 EntSize: 0x5555555555555555 104 Info: 0x66666666 105 ShAddrAlign: 0x7777777777777777 106 - Name: noflags 107 Type: SHT_PROGBITS 108 Flags: [ ] 109 - Name: write 110 Type: SHT_PROGBITS 111 Flags: [ SHF_WRITE ] 112 - Name: alloc 113 Type: SHT_PROGBITS 114 Flags: [ SHF_ALLOC ] 115 - Name: exec 116 Type: SHT_PROGBITS 117 Flags: [ SHF_EXECINSTR ] 118 - Name: merge 119 Type: SHT_PROGBITS 120 Flags: [ SHF_MERGE ] 121 - Name: strings 122 Type: SHT_PROGBITS 123 Flags: [ SHF_STRINGS ] 124 - Name: infolink 125 Type: SHT_PROGBITS 126 Flags: [ SHF_INFO_LINK ] 127 - Name: linkorder 128 Type: SHT_PROGBITS 129 Flags: [ SHF_LINK_ORDER ] 130 - Name: nonconforming 131 Type: SHT_PROGBITS 132 Flags: [ SHF_OS_NONCONFORMING ] 133 - Name: group 134 Type: SHT_PROGBITS 135 Flags: [ SHF_GROUP ] 136 - Name: tls 137 Type: SHT_PROGBITS 138 Flags: [ SHF_TLS ] 139 - Name: exclude 140 Type: SHT_PROGBITS 141 Flags: [ SHF_EXCLUDE ] 142 - Name: known_and_unknown 143 Type: SHT_PROGBITS 144 ShFlags: 0x000f0003 145 - Name: only_unknown 146 Type: SHT_PROGBITS 147 ShFlags: 0x000f0000 148 - Name: compressed_corrupted 149 Type: SHT_PROGBITS 150 Flags: [ SHF_COMPRESSED ] 151 - Name: compressed_zlib 152 Type: SHT_PROGBITS 153 Flags: [ SHF_COMPRESSED ] 154 Content: 01000000[[CHDR]]789c636080000000080001 155 - Name: compressed_zstd 156 Type: SHT_PROGBITS 157 Flags: [ SHF_COMPRESSED ] 158 Content: 02000000[[CHDR]]28b52ffd20084100000000000000000000 159 - Name: compressed_unknown 160 Type: SHT_PROGBITS 161 Flags: [ SHF_COMPRESSED ] 162 Content: 03000000[[CHDR]] 163 164## Check the output for the 32-bit case. 165# RUN: yaml2obj %s -DBITS=32 -DCHDR=0400000002000000 -o %t32.o 166# RUN: llvm-readelf %t32.o --section-details 2>&1 | \ 167# RUN: FileCheck %s -DFILE=%t32.o --strict-whitespace --match-full-lines --check-prefix=GNU32 168 169# GNU32:There are 22 section headers, starting at offset 0x164: 170# GNU32-EMPTY: 171# GNU32-NEXT:Section Headers: 172# GNU32-NEXT: [Nr] Name 173# GNU32-NEXT: Type Addr Off Size ES Lk Inf Al 174# GNU32-NEXT: Flags 175# GNU32-NEXT: [ 0] {{$}} 176# GNU32-NEXT: NULL 00000000 000000 000000 00 0 0 0 177# GNU32-NEXT: [00000000]: {{$}} 178# GNU32-NEXT: [ 1] allflags_and_long_fields 179# GNU32-NEXT: PROGBITS 11111111 22222222 44444444 55555555 858993459 1717986918 2004318071 180# GNU32-NEXT: [ffffffff]: WRITE, ALLOC, EXEC, MERGE, STRINGS, INFO LINK, LINK ORDER, OS NONCONF, GROUP, TLS, COMPRESSED, EXCLUDE, OS (0ff00000), PROC (70000000), UNKNOWN (000ff008) 181# GNU32-NEXT:{{.*}}: warning: '[[FILE]]': SHF_COMPRESSED section 'allflags_and_long_fields' does not have an Elf_Chdr header 182# GNU32-NEXT: [<corrupt>] 183# GNU32-NEXT: [ 2] noflags 184# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 185# GNU32-NEXT: [00000000]: {{$}} 186# GNU32-NEXT: [ 3] write 187# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 188# GNU32-NEXT: [00000001]: WRITE 189# GNU32-NEXT: [ 4] alloc 190# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 191# GNU32-NEXT: [00000002]: ALLOC 192# GNU32-NEXT: [ 5] exec 193# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 194# GNU32-NEXT: [00000004]: EXEC 195# GNU32-NEXT: [ 6] merge 196# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 197# GNU32-NEXT: [00000010]: MERGE 198# GNU32-NEXT: [ 7] strings 199# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 200# GNU32-NEXT: [00000020]: STRINGS 201# GNU32-NEXT: [ 8] infolink 202# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 203# GNU32-NEXT: [00000040]: INFO LINK 204# GNU32-NEXT: [ 9] linkorder 205# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 206# GNU32-NEXT: [00000080]: LINK ORDER 207# GNU32-NEXT: [10] nonconforming 208# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 209# GNU32-NEXT: [00000100]: OS NONCONF 210# GNU32-NEXT: [11] group 211# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 212# GNU32-NEXT: [00000200]: GROUP 213# GNU32-NEXT: [12] tls 214# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 215# GNU32-NEXT: [00000400]: TLS 216# GNU32-NEXT: [13] exclude 217# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 218# GNU32-NEXT: [80000000]: EXCLUDE 219# GNU32-NEXT: [14] known_and_unknown 220# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 221# GNU32-NEXT: [000f0003]: WRITE, ALLOC, UNKNOWN (000f0000) 222# GNU32-NEXT: [15] only_unknown 223# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 224# GNU32-NEXT: [000f0000]: UNKNOWN (000f0000) 225# GNU32-NEXT: [16] compressed_corrupted 226# GNU32-NEXT: PROGBITS 00000000 000034 000000 00 0 0 0 227# GNU32-NEXT: [00000800]: COMPRESSED 228# GNU32-NEXT:{{.*}}: warning: '[[FILE]]': SHF_COMPRESSED section 'compressed_corrupted' does not have an Elf_Chdr header 229# GNU32-NEXT: [<corrupt>] 230# GNU32-NEXT: [17] compressed_zlib 231# GNU32-NEXT: PROGBITS 00000000 000034 000017 00 0 0 0 232# GNU32-NEXT: [00000800]: COMPRESSED 233# GNU32-NEXT: ZLIB, 00000004, 2 234# GNU32-NEXT: [18] compressed_zstd 235# GNU32-NEXT: PROGBITS 00000000 00004b 00001d 00 0 0 0 236# GNU32-NEXT: [00000800]: COMPRESSED 237# GNU32-NEXT: ZSTD, 00000004, 2 238# GNU32-NEXT: [19] compressed_unknown 239# GNU32-NEXT: PROGBITS 00000000 000068 00000c 00 0 0 0 240# GNU32-NEXT: [00000800]: COMPRESSED 241# GNU32-NEXT: [<unknown>: 0x3], 00000004, 2 242# GNU32-NEXT: [20] .strtab 243# GNU32-NEXT: STRTAB 00000000 000074 000001 00 0 0 1 244# GNU32-NEXT: [00000000]: {{$}} 245# GNU32-NEXT: [21] .shstrtab 246# GNU32-NEXT: STRTAB 00000000 000075 0000ed 00 0 0 1 247# GNU32-NEXT: [00000000]: {{$}} 248# GNU32-NOT:{{.}} 249 250## When --section-details and --sections are both specified, --sections is ignored. 251# RUN: llvm-readelf %t64.o --section-details --sections 2>&1 | FileCheck %s -DFILE=%t64.o --check-prefix=GNU64 252# RUN: llvm-readelf %t64.o --sections --section-details 2>&1 | FileCheck %s -DFILE=%t64.o --check-prefix=GNU64 253 254## Check that we produce the same output with -t (alias). 255# RUN: llvm-readelf --section-details %t64.o > %t.readelf.full 256# RUN: llvm-readelf -t %t64.o > %t.readelf.alias 257# RUN: cmp %t.readelf.full %t.readelf.alias 258 259## Check how we dump sections when the section header string table can't be read. 260 261# RUN: yaml2obj --docnum=2 %s -o %tshstrndx.o 262# RUN: llvm-readelf %tshstrndx.o --section-details 2>&1 | \ 263# RUN: FileCheck %s -DFILE=%tshstrndx.o --check-prefix=SHSTRNDX 264 265# SHSTRNDX: Section Headers: 266# SHSTRNDX-NEXT: [Nr] Name 267# SHSTRNDX-NEXT: Type Address Off Size ES Lk Inf Al 268# SHSTRNDX-NEXT: Flags 269# SHSTRNDX-NEXT: warning: '[[FILE]]': section header string table index 65279 does not exist 270# SHSTRNDX-NEXT: [ 0] 271# SHSTRNDX-NEXT: NULL 0000000000000000 000000 000000 00 0 0 0 272# SHSTRNDX-NEXT: [0000000000000000]: 273# 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 274# SHSTRNDX-NEXT: [ 1] <?> 275# SHSTRNDX-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 276# SHSTRNDX-NEXT: [0000000000000000]: 277# 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 278# SHSTRNDX-NEXT: [ 2] <?> 279# SHSTRNDX-NEXT: PROGBITS 0000000000000000 000040 000000 00 0 0 0 280# SHSTRNDX-NEXT: [0000000000000000]: 281# 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 282# SHSTRNDX-NEXT: [ 3] <?> 283# SHSTRNDX-NEXT: STRTAB 0000000000000000 000040 000001 00 0 0 1 284# SHSTRNDX-NEXT: [0000000000000000]: 285# 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 286# SHSTRNDX-NEXT: [ 4] <?> 287# SHSTRNDX-NEXT: STRTAB 0000000000000000 000041 00001b 00 0 0 1 288# SHSTRNDX-NEXT: [0000000000000000]: 289 290--- !ELF 291FileHeader: 292 Class: ELFCLASS64 293 Data: ELFDATA2LSB 294 Type: ET_REL 295 EShStrNdx: 0xfeff 296Sections: 297 - Name: foo 298 Type: SHT_PROGBITS 299 - Name: bar 300 Type: SHT_PROGBITS 301