1# This test tests that each segment is assigned a canonical parent segment. 2# Importantly if two segments could be the parent segment of a segment this test 3# should cover the case where a new parent replaces the old parent and the case 4# where an old parent is not replaced by a new parent. 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 Sections: 46 - Section: .text4 47 - Section: .text5 48 - Type: PT_LOAD 49 Flags: [ PF_X, PF_R ] 50 Sections: 51 - Section: .text3 52 - Section: .text4 53 - Section: .text5 54 - Type: PT_LOAD 55 Flags: [ PF_X, PF_R ] 56 Sections: 57 - Section: .text 58 - Section: .text2 59 - Section: .text3 60 - Section: .text4 61 - Section: .text5 62 - Type: PT_LOAD 63 Flags: [ PF_X, PF_R ] 64 Sections: 65 - Section: .text2 66 - Section: .text3 67 - Section: .text4 68 - Section: .text5 69 70#CHECK: ProgramHeaders [ 71#CHECK-NEXT: ProgramHeader { 72#CHECK-NEXT: Type: PT_LOAD (0x1) 73#CHECK-NEXT: Offset: 0x4000 74#CHECK-NEXT: VirtualAddress: 0x0 75#CHECK-NEXT: PhysicalAddress: 0x0 76#CHECK-NEXT: FileSize: 8192 77#CHECK-NEXT: MemSize: 8192 78#CHECK-NEXT: Flags [ (0x5) 79#CHECK-NEXT: PF_R (0x4) 80#CHECK-NEXT: PF_X (0x1) 81#CHECK-NEXT: ] 82#CHECK-NEXT: Alignment: 4096 83#CHECK-NEXT: } 84#CHECK-NEXT: ProgramHeader { 85#CHECK-NEXT: Type: PT_LOAD (0x1) 86#CHECK-NEXT: Offset: 0x3000 87#CHECK-NEXT: VirtualAddress: 0x0 88#CHECK-NEXT: PhysicalAddress: 0x0 89#CHECK-NEXT: FileSize: 12288 90#CHECK-NEXT: MemSize: 12288 91#CHECK-NEXT: Flags [ (0x5) 92#CHECK-NEXT: PF_R (0x4) 93#CHECK-NEXT: PF_X (0x1) 94#CHECK-NEXT: ] 95#CHECK-NEXT: Alignment: 4096 96#CHECK-NEXT: } 97#CHECK-NEXT: ProgramHeader { 98#CHECK-NEXT: Type: PT_LOAD (0x1) 99#CHECK-NEXT: Offset: 0x1000 100#CHECK-NEXT: VirtualAddress: 0x0 101#CHECK-NEXT: PhysicalAddress: 0x0 102#CHECK-NEXT: FileSize: 20480 103#CHECK-NEXT: MemSize: 20480 104#CHECK-NEXT: Flags [ (0x5) 105#CHECK-NEXT: PF_R (0x4) 106#CHECK-NEXT: PF_X (0x1) 107#CHECK-NEXT: ] 108#CHECK-NEXT: Alignment: 4096 109#CHECK-NEXT: } 110#CHECK-NEXT: ProgramHeader { 111#CHECK-NEXT: Type: PT_LOAD (0x1) 112#CHECK-NEXT: Offset: 0x2000 113#CHECK-NEXT: VirtualAddress: 0x0 114#CHECK-NEXT: PhysicalAddress: 0x0 115#CHECK-NEXT: FileSize: 16384 116#CHECK-NEXT: MemSize: 16384 117#CHECK-NEXT: Flags [ (0x5) 118#CHECK-NEXT: PF_R (0x4) 119#CHECK-NEXT: PF_X (0x1) 120#CHECK-NEXT: ] 121#CHECK-NEXT: Alignment: 4096 122#CHECK-NEXT: } 123#CHECK-NEXT:] 124