## Here we test how OS and processor specific flags are dumped.
# RUN: yaml2obj %s -o %t.o
# RUN: llvm-readobj -S %t.o | FileCheck --check-prefix=OS-PROC-LLVM %s
# RUN: llvm-readelf -S %t.o | FileCheck --check-prefix=OS-PROC-GNU %s
# OS-PROC-LLVM: Name: .os.flags.low
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0x100000)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-LLVM: Name: .os.flags.high
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0xFE00000)
# OS-PROC-LLVM-NEXT: SHF_GNU_RETAIN (0x200000)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-LLVM: Name: .os.flags.mask
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0xFF00000)
# OS-PROC-LLVM-NEXT: SHF_GNU_RETAIN (0x200000)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-LLVM: Name: .proc.flags.low
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0x10000000)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-LLVM: Name: .proc.flags.high
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0xE0000000)
# OS-PROC-LLVM-NEXT: SHF_EXCLUDE (0x80000000)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-LLVM: Name: .proc.flags.mask
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0xF0000000)
# OS-PROC-LLVM-NEXT: SHF_EXCLUDE (0x80000000)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-LLVM: Name: .both.flags.low
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0x10100000)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-LLVM: Name: .both.flags.high
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0xEFE00000)
# OS-PROC-LLVM-NEXT: SHF_EXCLUDE (0x80000000)
# OS-PROC-LLVM-NEXT: SHF_GNU_RETAIN (0x200000)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-LLVM: Name: .both.flags.mask
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0xFFF00000)
# OS-PROC-LLVM-NEXT: SHF_EXCLUDE (0x80000000)
# OS-PROC-LLVM-NEXT: SHF_GNU_RETAIN (0x200000)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-LLVM: Name: .exclude
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0x80000000)
# OS-PROC-LLVM-NEXT: SHF_EXCLUDE (0x80000000)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-LLVM: Name: .all.possible
# OS-PROC-LLVM-NEXT: Type: SHT_PROGBITS
# OS-PROC-LLVM-NEXT: Flags [ (0xFFFFFFFF)
# OS-PROC-LLVM-NEXT: SHF_ALLOC (0x2)
# OS-PROC-LLVM-NEXT: SHF_COMPRESSED (0x800)
# OS-PROC-LLVM-NEXT: SHF_EXCLUDE (0x80000000)
# OS-PROC-LLVM-NEXT: SHF_EXECINSTR (0x4)
# OS-PROC-LLVM-NEXT: SHF_GNU_RETAIN (0x200000)
# OS-PROC-LLVM-NEXT: SHF_GROUP (0x200)
# OS-PROC-LLVM-NEXT: SHF_INFO_LINK (0x40)
# OS-PROC-LLVM-NEXT: SHF_LINK_ORDER (0x80)
# OS-PROC-LLVM-NEXT: SHF_MERGE (0x10)
# OS-PROC-LLVM-NEXT: SHF_OS_NONCONFORMING (0x100)
# OS-PROC-LLVM-NEXT: SHF_STRINGS (0x20)
# OS-PROC-LLVM-NEXT: SHF_TLS (0x400)
# OS-PROC-LLVM-NEXT: SHF_WRITE (0x1)
# OS-PROC-LLVM-NEXT: ]
# OS-PROC-GNU: Section Headers:
# OS-PROC-GNU-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
# OS-PROC-GNU-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0
# OS-PROC-GNU-NEXT: [ 1] .os.flags.low PROGBITS 0000000000000000 000040 000000 00 o 0 0 0
# OS-PROC-GNU-NEXT: [ 2] .os.flags.high PROGBITS 0000000000000000 000040 000000 00 Ro 0 0 0
# OS-PROC-GNU-NEXT: [ 3] .os.flags.mask PROGBITS 0000000000000000 000040 000000 00 o 0 0 0
# OS-PROC-GNU-NEXT: [ 4] .proc.flags.low PROGBITS 0000000000000000 000040 000000 00 p 0 0 0
# OS-PROC-GNU-NEXT: [ 5] .proc.flags.high PROGBITS 0000000000000000 000040 000000 00 p 0 0 0
# OS-PROC-GNU-NEXT: [ 6] .proc.flags.mask PROGBITS 0000000000000000 000040 000000 00 p 0 0 0
# OS-PROC-GNU-NEXT: [ 7] .both.flags.low PROGBITS 0000000000000000 000040 000000 00 op 0 0 0
# OS-PROC-GNU-NEXT: [ 8] .both.flags.high PROGBITS 0000000000000000 000040 000000 00 Rop 0 0 0
# OS-PROC-GNU-NEXT: [ 9] .both.flags.mask PROGBITS 0000000000000000 000040 000000 00 op 0 0 0
# OS-PROC-GNU-NEXT: [10] .exclude PROGBITS 0000000000000000 000040 000000 00 E 0 0 0
# OS-PROC-GNU-NEXT: [11] .all.possible PROGBITS 0000000000000000 000040 000000 00 WAXMSILOGTCopx 0 0 0
## Use an arbitrary EM_* machine type that does not have specific SHF_* OS/Processor
## flags to test what we dump when bits in the OS and processor specific ranges are set.
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Sections:
- Name: .os.flags.low
Type: SHT_PROGBITS
ShFlags: 0x00100000
- Name: .os.flags.high
Type: SHT_PROGBITS
ShFlags: 0x0FE00000
- Name: .os.flags.mask
Type: SHT_PROGBITS
ShFlags: 0x0FF00000
- Name: .proc.flags.low
Type: SHT_PROGBITS
ShFlags: 0x10000000
- Name: .proc.flags.high
Type: SHT_PROGBITS
ShFlags: 0xE0000000
- Name: .proc.flags.mask
Type: SHT_PROGBITS
ShFlags: 0xF0000000
- Name: .both.flags.low
Type: SHT_PROGBITS
ShFlags: 0x10100000
- Name: .both.flags.high
Type: SHT_PROGBITS
ShFlags: 0xEFE00000
- Name: .both.flags.mask
Type: SHT_PROGBITS
ShFlags: 0xFFF00000
## SHF_MASKPROC has a value of 0xf0000000, SHF_EXCLUDE has a value of
## 0x80000000. When SHF_EXCLUDE is mixed with other processor specific
## flags, GNU readelf does not necessarily print "E", because it handles
## the SHF_MASKPROC mask first. It only prints "E" when there are no other
## processor flags set. Check llvm-readelf output matches GNU.
- Name: .exclude
Type: SHT_PROGBITS
ShFlags: 0x80000000
## Set all possible flags to test where we print 'o' and 'p' letters.
- Name: .all.possible
Type: SHT_PROGBITS
ShFlags: 0xFFFFFFFF