1# REQUIRES: x86
2# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
3# RUN: echo "SECTIONS { \
4# RUN:  . = 0x1000; \
5# RUN:  .aaa : AT(0x2000) { *(.aaa) } \
6# RUN:  .bbb : { *(.bbb) } \
7# RUN:  .ccc : AT(0x3000) { *(.ccc) } \
8# RUN:  .ddd : AT(0x4000) { *(.ddd) } \
9# RUN:  .eee 0x5000 : AT(0x5000) { *(.eee) } \
10# RUN: }" > %t.script
11# RUN: ld.lld %t --script %t.script -o %t2
12# RUN: llvm-readobj -program-headers %t2 | FileCheck %s
13
14# CHECK:      ProgramHeaders [
15# CHECK-NEXT:   ProgramHeader {
16# CHECK-NEXT:     Type: PT_PHDR
17# CHECK-NEXT:     Offset: 0x40
18# CHECK-NEXT:     VirtualAddress: 0x40
19# CHECK-NEXT:     PhysicalAddress: 0x40
20# CHECK-NEXT:     FileSize:
21# CHECK-NEXT:     MemSize:
22# CHECK-NEXT:     Flags [
23# CHECK-NEXT:       PF_R
24# CHECK-NEXT:     ]
25# CHECK-NEXT:     Alignment: 8
26# CHECK-NEXT:   }
27# CHECK-NEXT:   ProgramHeader {
28# CHECK-NEXT:     Type: PT_LOAD
29# CHECK-NEXT:     Offset: 0x0
30# CHECK-NEXT:     VirtualAddress: 0x0
31# CHECK-NEXT:     PhysicalAddress: 0x0
32# CHECK-NEXT:     FileSize:
33# CHECK-NEXT:     MemSize:
34# CHECK-NEXT:     Flags [
35# CHECK-NEXT:       PF_R
36# CHECK-NEXT:       PF_X
37# CHECK-NEXT:     ]
38# CHECK-NEXT:     Alignment:
39# CHECK-NEXT:   }
40# CHECK-NEXT:   ProgramHeader {
41# CHECK-NEXT:     Type: PT_LOAD
42# CHECK-NEXT:     Offset: 0x1000
43# CHECK-NEXT:     VirtualAddress: 0x1000
44# CHECK-NEXT:     PhysicalAddress: 0x2000
45# CHECK-NEXT:     FileSize: 16
46# CHECK-NEXT:     MemSize: 16
47# CHECK-NEXT:     Flags [
48# CHECK-NEXT:       PF_R
49# CHECK-NEXT:       PF_X
50# CHECK-NEXT:     ]
51# CHECK-NEXT:     Alignment:
52# CHECK-NEXT:   }
53# CHECK-NEXT:   ProgramHeader {
54# CHECK-NEXT:     Type: PT_LOAD
55# CHECK-NEXT:     Offset: 0x1010
56# CHECK-NEXT:     VirtualAddress: 0x1010
57# CHECK-NEXT:     PhysicalAddress: 0x3000
58# CHECK-NEXT:     FileSize: 8
59# CHECK-NEXT:     MemSize: 8
60# CHECK-NEXT:     Flags [
61# CHECK-NEXT:       PF_R
62# CHECK-NEXT:       PF_X
63# CHECK-NEXT:     ]
64# CHECK-NEXT:     Alignment: 4096
65# CHECK-NEXT:   }
66# CHECK-NEXT:   ProgramHeader {
67# CHECK-NEXT:     Type: PT_LOAD
68# CHECK-NEXT:     Offset: 0x1018
69# CHECK-NEXT:     VirtualAddress: 0x1018
70# CHECK-NEXT:     PhysicalAddress: 0x4000
71# CHECK-NEXT:     FileSize: 8
72# CHECK-NEXT:     MemSize: 8
73# CHECK-NEXT:     Flags [
74# CHECK-NEXT:       PF_R
75# CHECK-NEXT:       PF_X
76# CHECK-NEXT:     ]
77# CHECK-NEXT:     Alignment: 4096
78# CHECK-NEXT:   }
79# CHECK-NEXT:   ProgramHeader {
80# CHECK-NEXT:     Type: PT_LOAD
81# CHECK-NEXT:     Offset: 0x2000
82# CHECK-NEXT:     VirtualAddress: 0x5000
83# CHECK-NEXT:     PhysicalAddress: 0x5000
84# CHECK-NEXT:     FileSize: 9
85# CHECK-NEXT:     MemSize: 9
86# CHECK-NEXT:     Flags [
87# CHECK-NEXT:       PF_R
88# CHECK-NEXT:       PF_X
89# CHECK-NEXT:     ]
90# CHECK-NEXT:     Alignment: 4096
91# CHECK-NEXT:   }
92# CHECK-NEXT:   ProgramHeader {
93# CHECK-NEXT:     Type: PT_GNU_STACK
94# CHECK-NEXT:     Offset:
95# CHECK-NEXT:     VirtualAddress: 0x0
96# CHECK-NEXT:     PhysicalAddress: 0x0
97# CHECK-NEXT:     FileSize:
98# CHECK-NEXT:     MemSize:
99# CHECK-NEXT:     Flags [
100# CHECK-NEXT:       PF_R
101# CHECK-NEXT:       PF_W
102# CHECK-NEXT:     ]
103# CHECK-NEXT:     Alignment: 0
104# CHECK-NEXT:   }
105# CHECK-NEXT: ]
106
107.global _start
108_start:
109 nop
110
111.section .aaa, "a"
112.quad 0
113
114.section .bbb, "a"
115.quad 0
116
117.section .ccc, "a"
118.quad 0
119
120.section .ddd, "a"
121.quad 0
122
123.section .eee, "a"
124.quad 0
125