Compiler projects using llvm
# RUN: yaml2obj %s -o %t
# RUN: llvm-objcopy -R .text2 %t %t2
# RUN: llvm-readobj --file-headers --sections --program-headers %t2 | FileCheck %s

!ELF
FileHeader:
  Class:           ELFCLASS64
  Data:            ELFDATA2LSB
  Type:            ET_EXEC
  Machine:         EM_X86_64
Sections:
  - Name:            .text
    Type:            SHT_PROGBITS
    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
    Address:         0x1000
    AddressAlign:    0x1000
    Size:            0x1000
  - Name:            .text2
    Type:            SHT_PROGBITS
    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
    Address:         0x2000
    AddressAlign:    0x1000
    Size:            0x1000
  - Name:            .text3
    Type:            SHT_PROGBITS
    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
    Address:         0x3000
    AddressAlign:    0x1000
    Size:            0x1000
ProgramHeaders:
  - Type:     PT_LOAD
    Flags:    [ PF_R ]
    VAddr:    0x1000
    FirstSec: .text
    LastSec:  .text
  - Type:     PT_LOAD
    Flags:    [ PF_X, PF_R ]
    VAddr:    0x3000
    FirstSec: .text3
    LastSec:  .text3
## TODO (grimar): without the following line (i.e. without an empty symbol table),
## llvm-objcopy adds an empty .strtab section. It doesn't look correct.
Symbols: []

#CHECK: SectionHeaderCount: 4

# CHECK:           Sections [
# CHECK-NEXT:        Section {
# CHECK-NEXT:          Index: 0
# CHECK-NEXT:          Name:  (0)
# CHECK-NEXT:          Type: SHT_NULL (0x0)
# CHECK-NEXT:          Flags [ (0x0)
# CHECK-NEXT:          ]
# CHECK-NEXT:          Address: 0x0
# CHECK-NEXT:          Offset: 0x0
# CHECK-NEXT:          Size: 0
# CHECK-NEXT:          Link: 0
# CHECK-NEXT:          Info: 0
# CHECK-NEXT:          AddressAlignment: 0
# CHECK-NEXT:          EntrySize: 0
# CHECK-NEXT:        }
# CHECK-NEXT:        Section {
# CHECK-NEXT:          Index: 1
# CHECK-NEXT:          Name: .text
# CHECK-NEXT:          Type: SHT_PROGBITS (0x1)
# CHECK-NEXT:          Flags [ (0x6)
# CHECK-NEXT:            SHF_ALLOC (0x2)
# CHECK-NEXT:            SHF_EXECINSTR (0x4)
# CHECK-NEXT:          ]
# CHECK-NEXT:          Address: 0x1000
# CHECK-NEXT:          Offset: 0x1000
# CHECK-NEXT:          Size: 4096
# CHECK-NEXT:          Link: 0
# CHECK-NEXT:          Info: 0
# CHECK-NEXT:          AddressAlignment: 4096
# CHECK-NEXT:          EntrySize: 0
# CHECK-NEXT:        }
# CHECK-NEXT:        Section {
# CHECK-NEXT:          Index: 2
# CHECK-NEXT:          Name: .text3
# CHECK-NEXT:          Type: SHT_PROGBITS (0x1)
# CHECK-NEXT:          Flags [ (0x6)
# CHECK-NEXT:            SHF_ALLOC (0x2)
# CHECK-NEXT:            SHF_EXECINSTR (0x4)
# CHECK-NEXT:          ]
# CHECK-NEXT:          Address: 0x3000
# CHECK-NEXT:          Offset: 0x2000
# CHECK-NEXT:          Size: 4096
# CHECK-NEXT:          Link: 0
# CHECK-NEXT:          Info: 0
# CHECK-NEXT:          AddressAlignment: 4096
# CHECK-NEXT:          EntrySize: 0
# CHECK-NEXT:        }
# CHECK-NEXT:        Section {
# CHECK-NEXT:          Index: 3
# CHECK-NEXT:          Name: .shstrtab
# CHECK-NEXT:          Type: SHT_STRTAB (0x3)
# CHECK-NEXT:          Flags [ (0x0)
# CHECK-NEXT:          ]
# CHECK-NEXT:          Address: 0x0
# CHECK-NEXT:          Offset:
# CHECK-NEXT:          Size:
# CHECK-NEXT:          Link: 0
# CHECK-NEXT:          Info: 0
# CHECK-NEXT:          AddressAlignment: 1
# CHECK-NEXT:          EntrySize: 0
# CHECK-NEXT:        }
# CHECK-NEXT:      ]


# CHECK:     ProgramHeaders [
# CHECK-NEXT:  ProgramHeader {
# CHECK-NEXT:    Type: PT_LOAD (0x1)
# CHECK-NEXT:    Offset: 0x1000
# CHECK-NEXT:    VirtualAddress: 0x1000
# CHECK-NEXT:    PhysicalAddress: 0x1000
# CHECK-NEXT:    FileSize: 4096
# CHECK-NEXT:    MemSize: 4096
# CHECK-NEXT:    Flags [ (0x4)
# CHECK-NEXT:      PF_R (0x4)
# CHECK-NEXT:    ]
# CHECK-NEXT:    Alignment: 4096
# CHECK-NEXT:  }
# CHECK-NEXT:  ProgramHeader {
# CHECK-NEXT:    Type: PT_LOAD (0x1)
# CHECK-NEXT:    Offset: 0x2000
# CHECK-NEXT:    VirtualAddress: 0x3000
# CHECK-NEXT:    PhysicalAddress: 0x3000
# CHECK-NEXT:    FileSize: 4096
# CHECK-NEXT:    MemSize: 4096
# CHECK-NEXT:    Flags [ (0x5)
# CHECK-NEXT:      PF_R (0x4)
# CHECK-NEXT:      PF_X (0x1)
# CHECK-NEXT:    ]
# CHECK-NEXT:    Alignment: 4096
# CHECK-NEXT:  }
# CHECK-NEXT:]