## In this test case we check how we print section and flag descriptions for different targets.

## EM_NONE is a target that does not have any processor and OS specific flags,
## we use it to show how the default flag key is printed.

# RUN: yaml2obj -DBITS=32 %s -o %t-default.o
# RUN: llvm-readelf -S %t-default.o | FileCheck %s --check-prefix=ELF32 --strict-whitespace --match-full-lines

#       ELF32:There are 9 section headers, starting at offset 0x9c:
# ELF32-EMPTY:
# ELF32-NEXT:Section Headers:
# ELF32-NEXT:  [Nr] Name              Type            Address  Off    Size   ES Flg Lk Inf Al
# ELF32-NEXT:  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
# ELF32-NEXT:  [ 1] .text             PROGBITS        00000000 000034 000001 00  AX  0   0  4
# ELF32-NEXT:  [ 2] .rel.text         REL             00000000 000038 000000 08      6   1  4
# ELF32-NEXT:  [ 3] .rela.text        RELA            00000000 000038 000000 18      6   1  8
# ELF32-NEXT:  [ 4] .data             PROGBITS        00000000 000038 000000 00  WA  0   0  4
# ELF32-NEXT:  [ 5] .bss              NOBITS          00000000 000038 000000 00  WA  0   0  4
# ELF32-NEXT:  [ 6] .symtab           SYMTAB          00000000 000038 000020 10      7   2  8
# ELF32-NEXT:  [ 7] .strtab           STRTAB          00000000 000058 000007 00      0   0  1
# ELF32-NEXT:  [ 8] .shstrtab         STRTAB          00000000 00005f 00003b 00      0   0  1
# ELF32-NEXT:Key to Flags:
# ELF32-NEXT:  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
# ELF32-NEXT:  L (link order), O (extra OS processing required), G (group), T (TLS),
# ELF32-NEXT:  C (compressed), x (unknown), o (OS specific), E (exclude),
# ELF32-NEXT:  R (retain), p (processor specific)

--- !ELF
FileHeader:
  Class:   ELFCLASS[[BITS=64]]
  Data:    ELFDATA2LSB
  OSABI:   ELFOSABI_GNU
  Type:    ET_REL
  Machine: [[MACHINE=EM_NONE]]
Sections:
  - Name:         .text
    Type:         SHT_PROGBITS
    Flags:        [ SHF_ALLOC, SHF_EXECINSTR ]
    AddressAlign: 0x0000000000000004
    Content:      00
  - Name:         .rel.text
    Type:         SHT_REL
    Link:         .symtab
    AddressAlign: 0x0000000000000004
    EntSize:      0x0000000000000008
    Info:         .text
    Relocations:
  - Name:         .rela.text
    Type:         SHT_RELA
    Link:         .symtab
    AddressAlign: 0x0000000000000008
    EntSize:      0x0000000000000018
    Info:         .text
    Relocations:
  - Name:         .data
    Type:         SHT_PROGBITS
    Flags:        [ SHF_WRITE, SHF_ALLOC ]
    AddressAlign: 0x0000000000000004
    Content:      ''
  - Name:         .bss
    Type:         SHT_NOBITS
    Flags:        [ SHF_WRITE, SHF_ALLOC ]
    AddressAlign: 0x0000000000000004
Symbols:
  - Name:         .text
    Type:         STT_SECTION
    Section:      .text

## For an EM_X86_64 target we print "l" for the SHF_X86_64_LARGE section flag.
## Check we mention it in the flag key.

# RUN: yaml2obj -DMACHINE=EM_X86_64 %s -o %t-x64.o
# RUN: llvm-readelf -S %t-x64.o | FileCheck %s --check-prefix=ELF64 --strict-whitespace --match-full-lines

## Check that --wide is the same as -W and ignored and also
## that --section is the same as -S.
# RUN: llvm-readobj --wide --sections %t-x64.o --elf-output-style=GNU \
# RUN:   | FileCheck %s --check-prefix=ELF64
# RUN: llvm-readobj -W --sections %t-x64.o --elf-output-style=GNU \
# RUN:   | FileCheck %s --check-prefix=ELF64
# RUN: llvm-readelf -W -S %t-x64.o | FileCheck %s --check-prefix=ELF64

#       ELF64:There are 9 section headers, starting at offset 0xc0:
# ELF64-EMPTY:
# ELF64-NEXT:Section Headers:
# ELF64-NEXT:  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
# ELF64-NEXT:  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
# ELF64-NEXT:  [ 1] .text             PROGBITS        0000000000000000 000040 000001 00  AX  0   0  4
# ELF64-NEXT:  [ 2] .rel.text         REL             0000000000000000 000044 000000 08      6   1  4
# ELF64-NEXT:  [ 3] .rela.text        RELA            0000000000000000 000048 000000 18      6   1  8
# ELF64-NEXT:  [ 4] .data             PROGBITS        0000000000000000 000048 000000 00  WA  0   0  4
# ELF64-NEXT:  [ 5] .bss              NOBITS          0000000000000000 000048 000000 00  WA  0   0  4
# ELF64-NEXT:  [ 6] .symtab           SYMTAB          0000000000000000 000048 000030 18      7   2  8
# ELF64-NEXT:  [ 7] .strtab           STRTAB          0000000000000000 000078 000007 00      0   0  1
# ELF64-NEXT:  [ 8] .shstrtab         STRTAB          0000000000000000 00007f 00003b 00      0   0  1
# ELF64-NEXT:Key to Flags:
# ELF64-NEXT:  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
# ELF64-NEXT:  L (link order), O (extra OS processing required), G (group), T (TLS),
# ELF64-NEXT:  C (compressed), x (unknown), o (OS specific), E (exclude),
# ELF64-NEXT:  R (retain), l (large), p (processor specific)

## For an EM_ARM target we print "y" for the SHF_ARM_PURECODE section flag.
## Check we mention it in the flag key.

# RUN: yaml2obj -DMACHINE=EM_ARM %s -o %t-arm.o
# RUN: llvm-readelf -S %t-arm.o | FileCheck %s --check-prefix=ARM --strict-whitespace --match-full-lines

#      ARM:Key to Flags:
# ARM-NEXT:  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
# ARM-NEXT:  L (link order), O (extra OS processing required), G (group), T (TLS),
# ARM-NEXT:  C (compressed), x (unknown), o (OS specific), E (exclude),
# ARM-NEXT:  R (retain), y (purecode), p (processor specific)
