|  | # This test tests that each segment is assigned a canonical parent segment. | 
|  | # Importantly if two segments could be the parent segment of a segment this test | 
|  | # should cover the case where a new parent replaces the old parent and the case | 
|  | # where an old parent is not replaced by a new parent. | 
|  |  | 
|  | # RUN: yaml2obj %s -o %t | 
|  | # RUN: llvm-objcopy %t %t2 | 
|  | # RUN: llvm-readobj --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 ] | 
|  | AddressAlign:    0x1000 | 
|  | Size:            4096 | 
|  | - Name:            .text2 | 
|  | Type:            SHT_PROGBITS | 
|  | Flags:           [ SHF_ALLOC, SHF_EXECINSTR ] | 
|  | AddressAlign:    0x1000 | 
|  | Size:            4096 | 
|  | - Name:            .text3 | 
|  | Type:            SHT_PROGBITS | 
|  | Flags:           [ SHF_ALLOC, SHF_EXECINSTR ] | 
|  | AddressAlign:    0x1000 | 
|  | Size:            4096 | 
|  | - Name:            .text4 | 
|  | Type:            SHT_PROGBITS | 
|  | Flags:           [ SHF_ALLOC, SHF_EXECINSTR ] | 
|  | AddressAlign:    0x1000 | 
|  | Size:            4096 | 
|  | - Name:            .text5 | 
|  | Type:            SHT_PROGBITS | 
|  | Flags:           [ SHF_ALLOC, SHF_EXECINSTR ] | 
|  | AddressAlign:    0x1000 | 
|  | Size:            4096 | 
|  | ProgramHeaders: | 
|  | - Type: PT_LOAD | 
|  | Flags: [ PF_X, PF_R ] | 
|  | Sections: | 
|  | - Section: .text4 | 
|  | - Section: .text5 | 
|  | - Type: PT_LOAD | 
|  | Flags: [ PF_X, PF_R ] | 
|  | Sections: | 
|  | - Section: .text3 | 
|  | - Section: .text4 | 
|  | - Section: .text5 | 
|  | - Type: PT_LOAD | 
|  | Flags: [ PF_X, PF_R ] | 
|  | Sections: | 
|  | - Section: .text | 
|  | - Section: .text2 | 
|  | - Section: .text3 | 
|  | - Section: .text4 | 
|  | - Section: .text5 | 
|  | - Type: PT_LOAD | 
|  | Flags: [ PF_X, PF_R ] | 
|  | Sections: | 
|  | - Section: .text2 | 
|  | - Section: .text3 | 
|  | - Section: .text4 | 
|  | - Section: .text5 | 
|  |  | 
|  | #CHECK:     ProgramHeaders [ | 
|  | #CHECK-NEXT:  ProgramHeader { | 
|  | #CHECK-NEXT:    Type: PT_LOAD (0x1) | 
|  | #CHECK-NEXT:    Offset: 0x4000 | 
|  | #CHECK-NEXT:    VirtualAddress: 0x0 | 
|  | #CHECK-NEXT:    PhysicalAddress: 0x0 | 
|  | #CHECK-NEXT:    FileSize: 8192 | 
|  | #CHECK-NEXT:    MemSize: 8192 | 
|  | #CHECK-NEXT:    Flags [ (0x5) | 
|  | #CHECK-NEXT:      PF_R (0x4) | 
|  | #CHECK-NEXT:      PF_X (0x1) | 
|  | #CHECK-NEXT:    ] | 
|  | #CHECK-NEXT:    Alignment: 4096 | 
|  | #CHECK-NEXT:  } | 
|  | #CHECK-NEXT:  ProgramHeader { | 
|  | #CHECK-NEXT:    Type: PT_LOAD (0x1) | 
|  | #CHECK-NEXT:    Offset: 0x3000 | 
|  | #CHECK-NEXT:    VirtualAddress: 0x0 | 
|  | #CHECK-NEXT:    PhysicalAddress: 0x0 | 
|  | #CHECK-NEXT:    FileSize: 12288 | 
|  | #CHECK-NEXT:    MemSize: 12288 | 
|  | #CHECK-NEXT:    Flags [ (0x5) | 
|  | #CHECK-NEXT:      PF_R (0x4) | 
|  | #CHECK-NEXT:      PF_X (0x1) | 
|  | #CHECK-NEXT:    ] | 
|  | #CHECK-NEXT:    Alignment: 4096 | 
|  | #CHECK-NEXT:  } | 
|  | #CHECK-NEXT:  ProgramHeader { | 
|  | #CHECK-NEXT:    Type: PT_LOAD (0x1) | 
|  | #CHECK-NEXT:    Offset: 0x1000 | 
|  | #CHECK-NEXT:    VirtualAddress: 0x0 | 
|  | #CHECK-NEXT:    PhysicalAddress: 0x0 | 
|  | #CHECK-NEXT:    FileSize: 20480 | 
|  | #CHECK-NEXT:    MemSize: 20480 | 
|  | #CHECK-NEXT:    Flags [ (0x5) | 
|  | #CHECK-NEXT:      PF_R (0x4) | 
|  | #CHECK-NEXT:      PF_X (0x1) | 
|  | #CHECK-NEXT:    ] | 
|  | #CHECK-NEXT:    Alignment: 4096 | 
|  | #CHECK-NEXT:  } | 
|  | #CHECK-NEXT:  ProgramHeader { | 
|  | #CHECK-NEXT:    Type: PT_LOAD (0x1) | 
|  | #CHECK-NEXT:    Offset: 0x2000 | 
|  | #CHECK-NEXT:    VirtualAddress: 0x0 | 
|  | #CHECK-NEXT:    PhysicalAddress: 0x0 | 
|  | #CHECK-NEXT:    FileSize: 16384 | 
|  | #CHECK-NEXT:    MemSize: 16384 | 
|  | #CHECK-NEXT:    Flags [ (0x5) | 
|  | #CHECK-NEXT:      PF_R (0x4) | 
|  | #CHECK-NEXT:      PF_X (0x1) | 
|  | #CHECK-NEXT:    ] | 
|  | #CHECK-NEXT:    Alignment: 4096 | 
|  | #CHECK-NEXT:  } | 
|  | #CHECK-NEXT:] |