1# This test tests how ParentSegment is set for Segments. In particular this test 2# tests that if a chain of parents forms, the offsets are chosen for parents 3# first despite the order of the list. It also tests multiple branches of the 4# code that assigns parents. 5 6# RUN: yaml2obj %s -o %t 7# RUN: llvm-objcopy %t %t2 8# RUN: llvm-readobj --program-headers %t2 | FileCheck %s 9 10!ELF 11FileHeader: 12 Class: ELFCLASS64 13 Data: ELFDATA2LSB 14 Type: ET_EXEC 15 Machine: EM_X86_64 16Sections: 17 - Name: .text 18 Type: SHT_PROGBITS 19 Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 20 AddressAlign: 0x1000 21 Size: 4096 22 - Name: .text2 23 Type: SHT_PROGBITS 24 Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 25 AddressAlign: 0x1000 26 Size: 4096 27 - Name: .text3 28 Type: SHT_PROGBITS 29 Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 30 AddressAlign: 0x1000 31 Size: 4096 32 - Name: .text4 33 Type: SHT_PROGBITS 34 Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 35 AddressAlign: 0x1000 36 Size: 4096 37 - Name: .text5 38 Type: SHT_PROGBITS 39 Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 40 AddressAlign: 0x1000 41 Size: 4096 42ProgramHeaders: 43 - Type: PT_LOAD 44 Flags: [ PF_X, PF_R ] 45 FirstSec: .text 46 LastSec: .text2 47 - Type: PT_LOAD 48 Flags: [ PF_X, PF_R ] 49 FirstSec: .text4 50 LastSec: .text5 51 - Type: PT_LOAD 52 Flags: [ PF_X, PF_R ] 53 FirstSec: .text3 54 LastSec: .text4 55 - Type: PT_LOAD 56 Flags: [ PF_X, PF_R ] 57 FirstSec: .text2 58 LastSec: .text3 59 60#CHECK: ProgramHeaders [ 61#CHECK-NEXT: ProgramHeader { 62#CHECK-NEXT: Type: PT_LOAD (0x1) 63#CHECK-NEXT: Offset: 0x1000 64#CHECK-NEXT: VirtualAddress: 0x0 65#CHECK-NEXT: PhysicalAddress: 0x0 66#CHECK-NEXT: FileSize: 8192 67#CHECK-NEXT: MemSize: 8192 68#CHECK-NEXT: Flags [ (0x5) 69#CHECK-NEXT: PF_R (0x4) 70#CHECK-NEXT: PF_X (0x1) 71#CHECK-NEXT: ] 72#CHECK-NEXT: Alignment: 4096 73#CHECK-NEXT: } 74#CHECK-NEXT: ProgramHeader { 75#CHECK-NEXT: Type: PT_LOAD (0x1) 76#CHECK-NEXT: Offset: 0x4000 77#CHECK-NEXT: VirtualAddress: 0x0 78#CHECK-NEXT: PhysicalAddress: 0x0 79#CHECK-NEXT: FileSize: 8192 80#CHECK-NEXT: MemSize: 8192 81#CHECK-NEXT: Flags [ (0x5) 82#CHECK-NEXT: PF_R (0x4) 83#CHECK-NEXT: PF_X (0x1) 84#CHECK-NEXT: ] 85#CHECK-NEXT: Alignment: 4096 86#CHECK-NEXT: } 87#CHECK-NEXT: ProgramHeader { 88#CHECK-NEXT: Type: PT_LOAD (0x1) 89#CHECK-NEXT: Offset: 0x3000 90#CHECK-NEXT: VirtualAddress: 0x0 91#CHECK-NEXT: PhysicalAddress: 0x0 92#CHECK-NEXT: FileSize: 8192 93#CHECK-NEXT: MemSize: 8192 94#CHECK-NEXT: Flags [ (0x5) 95#CHECK-NEXT: PF_R (0x4) 96#CHECK-NEXT: PF_X (0x1) 97#CHECK-NEXT: ] 98#CHECK-NEXT: Alignment: 4096 99#CHECK-NEXT: } 100#CHECK-NEXT: ProgramHeader { 101#CHECK-NEXT: Type: PT_LOAD (0x1) 102#CHECK-NEXT: Offset: 0x2000 103#CHECK-NEXT: VirtualAddress: 0x0 104#CHECK-NEXT: PhysicalAddress: 0x0 105#CHECK-NEXT: FileSize: 8192 106#CHECK-NEXT: MemSize: 8192 107#CHECK-NEXT: Flags [ (0x5) 108#CHECK-NEXT: PF_R (0x4) 109#CHECK-NEXT: PF_X (0x1) 110#CHECK-NEXT: ] 111#CHECK-NEXT: Alignment: 4096 112#CHECK-NEXT: } 113#CHECK-NEXT:] 114