llvm/llvm/test/tools/llvm-objcopy/ELF/non-load-at-load-start.test

## When the offset of a non-PT_LOAD segment (e.g. PT_INTERP) equals the offset
## of a PT_LOAD segment, set the parent of the segment with a smaller alignment
## to the segment with a larger alignment, ensuring that the offset is correctly
## aligned.

# RUN: yaml2obj %s -o %t
# RUN: llvm-objcopy %t %t2
# RUN: llvm-readelf -Sl %t2 | FileCheck %s

# CHECK:       [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
# CHECK-NEXT:  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
# CHECK-NEXT:  [ 1] .text             PROGBITS        0000000000201000 001000 000001 00      0   0  4
# CHECK-NEXT:  [ 2] .interp           PROGBITS        0000000000202000 002000 00001c 00      0   0  1
# CHECK-NEXT:  [ 3] .rodata           PROGBITS        0000000000202020 002020 000001 00      0   0  1
# CHECK-NEXT:  [ 4] .tdata            PROGBITS        0000000000203000 003000 000001 00      0   0 4096
# CHECK-NEXT:  [ 5] .relro_padding    NOBITS          0000000000203001 003001 000fff 00      0   0  1
# CHECK-NEXT:  [ 6] .strtab           STRTAB          0000000000000000 003001 000001 00      0   0  1
# CHECK-NEXT:  [ 7] .shstrtab         STRTAB          0000000000000000 003002 00003f 00      0   0  1

# CHECK:     Program Headers:
# CHECK-NEXT:  Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
# CHECK-NEXT:  PHDR           0x000040 0x0000000000200040 0x0000000000200040 0x0001c0 0x0001c0     0x8
# CHECK-NEXT:  INTERP         0x002000 0x0000000000202000 0x0000000000202000 0x00001c 0x00001c     0x1
# CHECK-NEXT:      [Requesting program interpreter: ]
# CHECK-NEXT:  LOAD           0x000000 0x0000000000200000 0x0000000000200000 0x000200 0x000200     0x1000
# CHECK-NEXT:  LOAD           0x001000 0x0000000000201000 0x0000000000201000 0x000001 0x000001     0x1000
# CHECK-NEXT:  LOAD           0x002000 0x0000000000202000 0x0000000000202000 0x000021 0x000021     0x1000
# CHECK-NEXT:  TLS            0x003000 0x0000000000203000 0x0000000000203000 0x000001 0x001000     0x1000
# CHECK-NEXT:  GNU_RELRO      0x003000 0x0000000000203000 0x0000000000203000 0x000001 0x001000     0x1000
# CHECK-NEXT:  LOAD           0x003000 0x0000000000203000 0x0000000000203000 0x000001 0x001000     0x1000

--- !ELF
FileHeader:
  Class:           ELFCLASS64
  Data:            ELFDATA2LSB
  Type:            ET_EXEC
  Machine:         EM_X86_64
ProgramHeaders:
  - Type:            PT_PHDR
    VAddr:           0x200040
    Align:           0x8
    Offset:          0x40
    FileSize:        0x1c0
    MemSize:         0x1c0
  - Type:            PT_INTERP
    FirstSec:        .interp
    LastSec:         .interp
    ## The address equals the address of its containing PT_LOAD.
    VAddr:           0x202000
    Offset:          0x2000
  - Type:            PT_LOAD
    VAddr:           0x200000
    Align:           0x1000
    Offset:          0x0
    FileSize:        0x200
    MemSize:         0x200
  - Type:            PT_LOAD
    FirstSec:        .text
    LastSec:         .text
    VAddr:           0x201000
    Align:           0x1000
    Offset:          0x1000
  - Type:            PT_LOAD
    FirstSec:        .interp
    LastSec:         .rodata
    VAddr:           0x202000
    Align:           0x1000
    Offset:          0x2000
  ## Intentionally place PT_TLS/PT_GNU_RELRO before PT_LOAD to test that we
  ## correctly set parent segments.
  - Type:            PT_TLS
    FirstSec:        .tdata
    LastSec:         .relro_padding
    VAddr:           0x203000
    Align:           0x1000
    Offset:          0x3000
  - Type:            PT_GNU_RELRO
    FirstSec:        .tdata
    LastSec:         .relro_padding
    VAddr:           0x203000
    Align:           0x1000
    Offset:          0x3000
  - Type:            PT_LOAD
    FirstSec:        .tdata
    LastSec:         .relro_padding
    VAddr:           0x203000
    Align:           0x1000
    Offset:          0x3000
Sections:
  - Name:            .text
    Type:            SHT_PROGBITS
    Address:         0x201000
    AddressAlign:    0x4
    Offset:          0x1000
    Content:         C3
  - Name:            .interp
    Type:            SHT_PROGBITS
    Address:         0x202000
    AddressAlign:    0x1
    Offset:          0x2000
    Size:            0x1C
  - Name:            .rodata
    Type:            SHT_PROGBITS
    Address:         0x202020
    AddressAlign:    0x1
    Offset:          0x2020
    Size:            1
  - Name:            .tdata
    Type:            SHT_PROGBITS
    Address:         0x203000
    AddressAlign:    0x1000
    Offset:          0x3000
    Size:            1
  - Name:            .relro_padding
    Type:            SHT_NOBITS
    Address:         0x203001
    AddressAlign:    0x1
    Size:            0xFFF