1# REQUIRES: x86
2# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
3# RUN: echo "SECTIONS {                 \
4# RUN:   .aaa 0x2000 :                  \
5# RUN:   {                              \
6# RUN:    *(.aaa)                       \
7# RUN:   }                              \
8# RUN:   .bbb 0x1 ? 0x3000 : 0x4000 :   \
9# RUN:   {                              \
10# RUN:    *(.bbb)                       \
11# RUN:   }                              \
12# RUN:   .ccc ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : \
13# RUN:   {                              \
14# RUN:    *(.ccc)                       \
15# RUN:   }                              \
16# RUN:   .ddd 0x5001 :                  \
17# RUN:   {                              \
18# RUN:    *(.ddd)                       \
19# RUN:   }                              \
20# RUN: }" > %t.script
21# RUN: ld.lld %t --script %t.script -o %tout
22# RUN: llvm-readobj -s %tout | FileCheck %s
23
24## Check:
25## 1) Simple constant as address.
26## 2) That something that contains ":" character, like ternary
27##    operator works as expression.
28## 3) That complex expressions work.
29## 4) That section alignment still applied to explicitly specified address.
30
31#CHECK:Sections [
32#CHECK:  Section {
33#CHECK:    Index: 0
34#CHECK:    Name:
35#CHECK:    Type: SHT_NULL
36#CHECK:    Flags [
37#CHECK:    ]
38#CHECK:    Address: 0x0
39#CHECK:    Offset: 0x0
40#CHECK:    Size: 0
41#CHECK:    Link: 0
42#CHECK:    Info: 0
43#CHECK:    AddressAlignment: 0
44#CHECK:    EntrySize: 0
45#CHECK:  }
46#CHECK:  Section {
47#CHECK:    Index: 1
48#CHECK:    Name: .aaa
49#CHECK:    Type: SHT_PROGBITS
50#CHECK:    Flags [
51#CHECK:      SHF_ALLOC
52#CHECK:    ]
53#CHECK:    Address: 0x2000
54#CHECK:    Offset: 0x1000
55#CHECK:    Size: 8
56#CHECK:    Link: 0
57#CHECK:    Info: 0
58#CHECK:    AddressAlignment: 1
59#CHECK:    EntrySize: 0
60#CHECK:  }
61#CHECK:  Section {
62#CHECK:    Index: 2
63#CHECK:    Name: .bbb
64#CHECK:    Type: SHT_PROGBITS
65#CHECK:    Flags [
66#CHECK:      SHF_ALLOC
67#CHECK:    ]
68#CHECK:    Address: 0x3000
69#CHECK:    Offset: 0x2000
70#CHECK:    Size: 8
71#CHECK:    Link: 0
72#CHECK:    Info: 0
73#CHECK:    AddressAlignment: 1
74#CHECK:    EntrySize: 0
75#CHECK:  }
76#CHECK:  Section {
77#CHECK:    Index: 3
78#CHECK:    Name: .ccc
79#CHECK:    Type: SHT_PROGBITS
80#CHECK:    Flags [
81#CHECK:      SHF_ALLOC
82#CHECK:    ]
83#CHECK:    Address: 0x4008
84#CHECK:    Offset: 0x3008
85#CHECK:    Size: 8
86#CHECK:    Link: 0
87#CHECK:    Info: 0
88#CHECK:    AddressAlignment: 1
89#CHECK:    EntrySize: 0
90#CHECK:  }
91#CHECK:  Section {
92#CHECK:    Index: 4
93#CHECK:    Name: .ddd
94#CHECK:    Type: SHT_PROGBITS
95#CHECK:    Flags [
96#CHECK:      SHF_ALLOC
97#CHECK:    ]
98#CHECK:    Address: 0x5010
99#CHECK:    Offset: 0x4010
100#CHECK:    Size: 8
101#CHECK:    Link: 0
102#CHECK:    Info: 0
103#CHECK:    AddressAlignment: 16
104#CHECK:    EntrySize: 0
105#CHECK:  }
106
107.globl _start
108_start:
109nop
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.align 16
122.quad 0
123