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