1*ef283790SFangrui Song## When the offset of a non-PT_LOAD segment (e.g. PT_INTERP) equals the offset 2*ef283790SFangrui Song## of a PT_LOAD segment, set the parent of the segment with a smaller alignment 3*ef283790SFangrui Song## to the segment with a larger alignment, ensuring that the offset is correctly 4*ef283790SFangrui Song## aligned. 5*ef283790SFangrui Song 6*ef283790SFangrui Song# RUN: yaml2obj %s -o %t 7*ef283790SFangrui Song# RUN: llvm-objcopy %t %t2 8*ef283790SFangrui Song# RUN: llvm-readelf -Sl %t2 | FileCheck %s 9*ef283790SFangrui Song 10*ef283790SFangrui Song# CHECK: [Nr] Name Type Address Off Size ES Flg Lk Inf Al 11*ef283790SFangrui Song# CHECK-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 12*ef283790SFangrui Song# CHECK-NEXT: [ 1] .text PROGBITS 0000000000201000 001000 000001 00 0 0 4 13*ef283790SFangrui Song# CHECK-NEXT: [ 2] .interp PROGBITS 0000000000202000 002000 00001c 00 0 0 1 14*ef283790SFangrui Song# CHECK-NEXT: [ 3] .rodata PROGBITS 0000000000202020 002020 000001 00 0 0 1 15*ef283790SFangrui Song# CHECK-NEXT: [ 4] .tdata PROGBITS 0000000000203000 003000 000001 00 0 0 4096 16*ef283790SFangrui Song# CHECK-NEXT: [ 5] .relro_padding NOBITS 0000000000203001 003001 000fff 00 0 0 1 17*ef283790SFangrui Song# CHECK-NEXT: [ 6] .strtab STRTAB 0000000000000000 003001 000001 00 0 0 1 18*ef283790SFangrui Song# CHECK-NEXT: [ 7] .shstrtab STRTAB 0000000000000000 003002 00003f 00 0 0 1 19*ef283790SFangrui Song 20*ef283790SFangrui Song# CHECK: Program Headers: 21*ef283790SFangrui Song# CHECK-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 22*ef283790SFangrui Song# CHECK-NEXT: PHDR 0x000040 0x0000000000200040 0x0000000000200040 0x0001c0 0x0001c0 0x8 23*ef283790SFangrui Song# CHECK-NEXT: INTERP 0x002000 0x0000000000202000 0x0000000000202000 0x00001c 0x00001c 0x1 24*ef283790SFangrui Song# CHECK-NEXT: [Requesting program interpreter: ] 25*ef283790SFangrui Song# CHECK-NEXT: LOAD 0x000000 0x0000000000200000 0x0000000000200000 0x000200 0x000200 0x1000 26*ef283790SFangrui Song# CHECK-NEXT: LOAD 0x001000 0x0000000000201000 0x0000000000201000 0x000001 0x000001 0x1000 27*ef283790SFangrui Song# CHECK-NEXT: LOAD 0x002000 0x0000000000202000 0x0000000000202000 0x000021 0x000021 0x1000 28*ef283790SFangrui Song# CHECK-NEXT: TLS 0x003000 0x0000000000203000 0x0000000000203000 0x000001 0x001000 0x1000 29*ef283790SFangrui Song# CHECK-NEXT: GNU_RELRO 0x003000 0x0000000000203000 0x0000000000203000 0x000001 0x001000 0x1000 30*ef283790SFangrui Song# CHECK-NEXT: LOAD 0x003000 0x0000000000203000 0x0000000000203000 0x000001 0x001000 0x1000 31*ef283790SFangrui Song 32*ef283790SFangrui Song--- !ELF 33*ef283790SFangrui SongFileHeader: 34*ef283790SFangrui Song Class: ELFCLASS64 35*ef283790SFangrui Song Data: ELFDATA2LSB 36*ef283790SFangrui Song Type: ET_EXEC 37*ef283790SFangrui Song Machine: EM_X86_64 38*ef283790SFangrui SongProgramHeaders: 39*ef283790SFangrui Song - Type: PT_PHDR 40*ef283790SFangrui Song VAddr: 0x200040 41*ef283790SFangrui Song Align: 0x8 42*ef283790SFangrui Song Offset: 0x40 43*ef283790SFangrui Song FileSize: 0x1c0 44*ef283790SFangrui Song MemSize: 0x1c0 45*ef283790SFangrui Song - Type: PT_INTERP 46*ef283790SFangrui Song FirstSec: .interp 47*ef283790SFangrui Song LastSec: .interp 48*ef283790SFangrui Song ## The address equals the address of its containing PT_LOAD. 49*ef283790SFangrui Song VAddr: 0x202000 50*ef283790SFangrui Song Offset: 0x2000 51*ef283790SFangrui Song - Type: PT_LOAD 52*ef283790SFangrui Song VAddr: 0x200000 53*ef283790SFangrui Song Align: 0x1000 54*ef283790SFangrui Song Offset: 0x0 55*ef283790SFangrui Song FileSize: 0x200 56*ef283790SFangrui Song MemSize: 0x200 57*ef283790SFangrui Song - Type: PT_LOAD 58*ef283790SFangrui Song FirstSec: .text 59*ef283790SFangrui Song LastSec: .text 60*ef283790SFangrui Song VAddr: 0x201000 61*ef283790SFangrui Song Align: 0x1000 62*ef283790SFangrui Song Offset: 0x1000 63*ef283790SFangrui Song - Type: PT_LOAD 64*ef283790SFangrui Song FirstSec: .interp 65*ef283790SFangrui Song LastSec: .rodata 66*ef283790SFangrui Song VAddr: 0x202000 67*ef283790SFangrui Song Align: 0x1000 68*ef283790SFangrui Song Offset: 0x2000 69*ef283790SFangrui Song ## Intentionally place PT_TLS/PT_GNU_RELRO before PT_LOAD to test that we 70*ef283790SFangrui Song ## correctly set parent segments. 71*ef283790SFangrui Song - Type: PT_TLS 72*ef283790SFangrui Song FirstSec: .tdata 73*ef283790SFangrui Song LastSec: .relro_padding 74*ef283790SFangrui Song VAddr: 0x203000 75*ef283790SFangrui Song Align: 0x1000 76*ef283790SFangrui Song Offset: 0x3000 77*ef283790SFangrui Song - Type: PT_GNU_RELRO 78*ef283790SFangrui Song FirstSec: .tdata 79*ef283790SFangrui Song LastSec: .relro_padding 80*ef283790SFangrui Song VAddr: 0x203000 81*ef283790SFangrui Song Align: 0x1000 82*ef283790SFangrui Song Offset: 0x3000 83*ef283790SFangrui Song - Type: PT_LOAD 84*ef283790SFangrui Song FirstSec: .tdata 85*ef283790SFangrui Song LastSec: .relro_padding 86*ef283790SFangrui Song VAddr: 0x203000 87*ef283790SFangrui Song Align: 0x1000 88*ef283790SFangrui Song Offset: 0x3000 89*ef283790SFangrui SongSections: 90*ef283790SFangrui Song - Name: .text 91*ef283790SFangrui Song Type: SHT_PROGBITS 92*ef283790SFangrui Song Address: 0x201000 93*ef283790SFangrui Song AddressAlign: 0x4 94*ef283790SFangrui Song Offset: 0x1000 95*ef283790SFangrui Song Content: C3 96*ef283790SFangrui Song - Name: .interp 97*ef283790SFangrui Song Type: SHT_PROGBITS 98*ef283790SFangrui Song Address: 0x202000 99*ef283790SFangrui Song AddressAlign: 0x1 100*ef283790SFangrui Song Offset: 0x2000 101*ef283790SFangrui Song Size: 0x1C 102*ef283790SFangrui Song - Name: .rodata 103*ef283790SFangrui Song Type: SHT_PROGBITS 104*ef283790SFangrui Song Address: 0x202020 105*ef283790SFangrui Song AddressAlign: 0x1 106*ef283790SFangrui Song Offset: 0x2020 107*ef283790SFangrui Song Size: 1 108*ef283790SFangrui Song - Name: .tdata 109*ef283790SFangrui Song Type: SHT_PROGBITS 110*ef283790SFangrui Song Address: 0x203000 111*ef283790SFangrui Song AddressAlign: 0x1000 112*ef283790SFangrui Song Offset: 0x3000 113*ef283790SFangrui Song Size: 1 114*ef283790SFangrui Song - Name: .relro_padding 115*ef283790SFangrui Song Type: SHT_NOBITS 116*ef283790SFangrui Song Address: 0x203001 117*ef283790SFangrui Song AddressAlign: 0x1 118*ef283790SFangrui Song Size: 0xFFF 119