Files
clang-p2996/llvm/test/tools/llvm-readobj/ELF/section-flags.test
Georgii Rymar 541daa5e6b [llvm-readelf][llvm-readobj] - Reimplement the logic of section flags dumping.
Our logic that dumped the flags was buggy.

For LLVM style it dumped SHF_MASKPROC/SHF_MASKOS named constants, though
they are not flags, but masks.

For GNU style it was just very inconsistent with GNU which has logic
that is not straightforward. Imagine we have sh_flags == 0x90000000.
SHF_EXCLUDE ("E") has a value of 0x80000000 and SHF_MASKPROC is 0xf0000000.
GNU readelf will not print "E" or "Ep" in this case, but will print just
"p". It only will print "E" when no other processor flag is set.
I had to investigate the GNU source to find the algorithm and now our logic should
match it.

Differential revision: https://reviews.llvm.org/D71462
2019-12-18 10:44:40 +03:00

178 lines
5.3 KiB
Plaintext

## Check how we dump regular ELF section flags.
# RUN: yaml2obj %s -o %t.o
# RUN: llvm-readobj -S %t.o | FileCheck --check-prefix=LLVM %s
# RUN: llvm-readelf -S %t.o | FileCheck --check-prefix=GNU %s
# LLVM: Name: allflags
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x80000FF7)
# LLVM-NEXT: SHF_ALLOC (0x2)
# LLVM-NEXT: SHF_COMPRESSED (0x800)
# LLVM-NEXT: SHF_EXCLUDE (0x80000000)
# LLVM-NEXT: SHF_EXECINSTR (0x4)
# LLVM-NEXT: SHF_GROUP (0x200)
# LLVM-NEXT: SHF_INFO_LINK (0x40)
# LLVM-NEXT: SHF_LINK_ORDER (0x80)
# LLVM-NEXT: SHF_MERGE (0x10)
# LLVM-NEXT: SHF_OS_NONCONFORMING (0x100)
# LLVM-NEXT: SHF_STRINGS (0x20)
# LLVM-NEXT: SHF_TLS (0x400)
# LLVM-NEXT: SHF_WRITE (0x1)
# LLVM-NEXT: ]
# LLVM: Name: noflags
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x0)
# LLVM-NEXT: ]
# LLVM: Name: write
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x1)
# LLVM-NEXT: SHF_WRITE (0x1)
# LLVM-NEXT: ]
# LLVM: Name: alloc
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x2)
# LLVM-NEXT: SHF_ALLOC (0x2)
# LLVM-NEXT: ]
# LLVM: Name: exec
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x4)
# LLVM-NEXT: SHF_EXECINSTR (0x4)
# LLVM-NEXT: ]
# LLVM: Name: merge
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x10)
# LLVM-NEXT: SHF_MERGE (0x10)
# LLVM-NEXT: ]
# LLVM: Name: strings
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x20)
# LLVM-NEXT: SHF_STRINGS (0x20)
# LLVM-NEXT: ]
# LLVM: Name: infolink
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x40)
# LLVM-NEXT: SHF_INFO_LINK (0x40)
# LLVM-NEXT: ]
# LLVM: Name: linkorder
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x80)
# LLVM-NEXT: SHF_LINK_ORDER (0x80)
# LLVM-NEXT: ]
# LLVM: Name: nonconforming
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x100)
# LLVM-NEXT: SHF_OS_NONCONFORMING (0x100)
# LLVM-NEXT: ]
# LLVM: Name: group
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x200)
# LLVM-NEXT: SHF_GROUP (0x200)
# LLVM-NEXT: ]
# LLVM: Name: tls
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x400)
# LLVM-NEXT: SHF_TLS (0x400)
# LLVM-NEXT: ]
# LLVM: Name: compressed
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x800)
# LLVM-NEXT: SHF_COMPRESSED (0x800)
# LLVM-NEXT: ]
# LLVM: Name: exclude
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0x80000000)
# LLVM-NEXT: SHF_EXCLUDE (0x80000000)
# LLVM-NEXT: ]
# LLVM: Name: unknown
# LLVM-NEXT: Type: SHT_PROGBITS
# LLVM-NEXT: Flags [ (0xF0000)
# LLVM-NEXT: ]
# GNU: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
# GNU: [ 1] allflags PROGBITS 0000000000000000 000040 000000 00 WAXMSILOGTCE 0 0 0
# GNU: [ 2] noflags PROGBITS 0000000000000000 000040 000000 00 0 0 0
# GNU: [ 3] write PROGBITS 0000000000000000 000040 000000 00 W 0 0 0
# GNU: [ 4] alloc PROGBITS 0000000000000000 000040 000000 00 A 0 0 0
# GNU: [ 5] exec PROGBITS 0000000000000000 000040 000000 00 X 0 0 0
# GNU: [ 6] merge PROGBITS 0000000000000000 000040 000000 00 M 0 0 0
# GNU: [ 7] strings PROGBITS 0000000000000000 000040 000000 00 S 0 0 0
# GNU: [ 8] infolink PROGBITS 0000000000000000 000040 000000 00 I 0 0 0
# GNU: [ 9] linkorder PROGBITS 0000000000000000 000040 000000 00 L 0 0 0
# GNU: [10] nonconforming PROGBITS 0000000000000000 000040 000000 00 O 0 0 0
# GNU: [11] group PROGBITS 0000000000000000 000040 000000 00 G 0 0 0
# GNU: [12] tls PROGBITS 0000000000000000 000040 000000 00 T 0 0 0
# GNU: [13] compressed PROGBITS 0000000000000000 000040 000000 00 C 0 0 0
# GNU: [14] exclude PROGBITS 0000000000000000 000040 000000 00 E 0 0 0
# GNU: [15] unknown PROGBITS 0000000000000000 000040 000000 00 x 0 0 0
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Flags: []
Sections:
- Name: allflags
Type: SHT_PROGBITS
Flags: [ SHF_WRITE, SHF_ALLOC, SHF_EXECINSTR, SHF_MERGE,
SHF_STRINGS, SHF_INFO_LINK, SHF_LINK_ORDER, SHF_OS_NONCONFORMING,
SHF_GROUP, SHF_TLS, SHF_COMPRESSED, SHF_EXCLUDE ]
- 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: compressed
Type: SHT_PROGBITS
Flags: [ SHF_COMPRESSED ]
- Name: exclude
Type: SHT_PROGBITS
Flags: [ SHF_EXCLUDE ]
- Name: unknown
Type: SHT_PROGBITS
ShFlags: 0x000f0000