xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/overlap-chain.test (revision a7a447be0fa934505f0c423fb97b91a68c1cc715)
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