xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/identical-segments.test (revision a7a447be0fa934505f0c423fb97b91a68c1cc715)
1# This test tests that if two possible parent segments have the same offset that
2# they're disambiguated based on their original index. This ensures that cycles
3# do not occur.
4
5# RUN: yaml2obj %s -o %t
6# RUN: llvm-objcopy %t %t2
7# RUN: llvm-readobj --program-headers %t2 | FileCheck %s
8
9!ELF
10FileHeader:
11  Class:           ELFCLASS64
12  Data:            ELFDATA2LSB
13  Type:            ET_EXEC
14  Machine:         EM_X86_64
15Sections:
16  - Name:            .text
17    Type:            SHT_PROGBITS
18    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
19    AddressAlign:    0x1000
20    Size:            4096
21  - Name:            .text2
22    Type:            SHT_PROGBITS
23    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
24    AddressAlign:    0x1000
25    Size:            4096
26ProgramHeaders:
27  - Type:     PT_LOAD
28    Flags:    [ PF_X, PF_R ]
29    FirstSec: .text2
30    LastSec:  .text2
31  - Type:     PT_LOAD
32    Flags:    [ PF_X, PF_R ]
33    FirstSec: .text
34    LastSec:  .text2
35  - Type:     PT_LOAD
36    Flags:    [ PF_X, PF_R ]
37    FirstSec: .text
38    LastSec:  .text2
39
40#CHECK:     ProgramHeaders [
41#CHECK-NEXT:  ProgramHeader {
42#CHECK-NEXT:    Type: PT_LOAD (0x1)
43#CHECK-NEXT:    Offset: 0x2000
44#CHECK-NEXT:    VirtualAddress: 0x0
45#CHECK-NEXT:    PhysicalAddress: 0x0
46#CHECK-NEXT:    FileSize: 4096
47#CHECK-NEXT:    MemSize: 4096
48#CHECK-NEXT:    Flags [ (0x5)
49#CHECK-NEXT:      PF_R (0x4)
50#CHECK-NEXT:      PF_X (0x1)
51#CHECK-NEXT:    ]
52#CHECK-NEXT:    Alignment: 4096
53#CHECK-NEXT:  }
54#CHECK-NEXT:  ProgramHeader {
55#CHECK-NEXT:    Type: PT_LOAD (0x1)
56#CHECK-NEXT:    Offset: 0x1000
57#CHECK-NEXT:    VirtualAddress: 0x0
58#CHECK-NEXT:    PhysicalAddress: 0x0
59#CHECK-NEXT:    FileSize: 8192
60#CHECK-NEXT:    MemSize: 8192
61#CHECK-NEXT:    Flags [ (0x5)
62#CHECK-NEXT:      PF_R (0x4)
63#CHECK-NEXT:      PF_X (0x1)
64#CHECK-NEXT:    ]
65#CHECK-NEXT:    Alignment: 4096
66#CHECK-NEXT:  }
67#CHECK-NEXT:  ProgramHeader {
68#CHECK-NEXT:    Type: PT_LOAD (0x1)
69#CHECK-NEXT:    Offset: 0x1000
70#CHECK-NEXT:    VirtualAddress: 0x0
71#CHECK-NEXT:    PhysicalAddress: 0x0
72#CHECK-NEXT:    FileSize: 8192
73#CHECK-NEXT:    MemSize: 8192
74#CHECK-NEXT:    Flags [ (0x5)
75#CHECK-NEXT:      PF_R (0x4)
76#CHECK-NEXT:      PF_X (0x1)
77#CHECK-NEXT:    ]
78#CHECK-NEXT:    Alignment: 4096
79#CHECK-NEXT:  }
80#CHECK-NEXT:]
81