xref: /llvm-project/lld/test/MachO/bss.s (revision bb62ef9943008281a2223c942c71e67b3902a07e)
1# REQUIRES: x86
2# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o
3# RUN: %lld -o %t %t.o
4# RUN: llvm-readobj --section-headers --macho-segment %t | FileCheck %s
5
6## Check that __bss takes up zero file size, is at file offset zero, and appears
7## at the end of its segment. Also check that __tbss is placed immediately
8## before it.
9## Zerofill sections in other segments (i.e. not __DATA) should also be placed
10## at the end.
11
12# CHECK:        Index: 1
13# CHECK-NEXT:   Name: __data
14# CHECK-NEXT:   Segment: __DATA
15# CHECK-NEXT:   Address:
16# CHECK-NEXT:   Size: 0x8
17# CHECK-NEXT:   Offset: 4096
18# CHECK-NEXT:   Alignment: 0
19# CHECK-NEXT:   RelocationOffset: 0x0
20# CHECK-NEXT:   RelocationCount: 0
21# CHECK-NEXT:   Type: Regular (0x0)
22# CHECK-NEXT:   Attributes [ (0x0)
23# CHECK-NEXT:   ]
24# CHECK-NEXT:   Reserved1: 0x0
25# CHECK-NEXT:   Reserved2: 0x0
26# CHECK-NEXT:   Reserved3: 0x0
27
28# CHECK:        Index: 2
29# CHECK-NEXT:   Name: __thread_bss
30# CHECK-NEXT:   Segment: __DATA
31# CHECK-NEXT:   Address:
32# CHECK-NEXT:   Size: 0x4
33# CHECK-NEXT:   Offset: 0
34# CHECK-NEXT:   Alignment: 0
35# CHECK-NEXT:   RelocationOffset: 0x0
36# CHECK-NEXT:   RelocationCount: 0
37# CHECK-NEXT:   Type: ThreadLocalZerofill (0x12)
38# CHECK-NEXT:   Attributes [ (0x0)
39# CHECK-NEXT:   ]
40# CHECK-NEXT:   Reserved1: 0x0
41# CHECK-NEXT:   Reserved2: 0x0
42# CHECK-NEXT:   Reserved3: 0x0
43
44# CHECK:        Index: 3
45# CHECK-NEXT:   Name: __bss
46# CHECK-NEXT:   Segment: __DATA
47# CHECK-NEXT:   Address:
48# CHECK-NEXT:   Size: 0x10000
49# CHECK-NEXT:   Offset: 0
50# CHECK-NEXT:   Alignment: 0
51# CHECK-NEXT:   RelocationOffset: 0x0
52# CHECK-NEXT:   RelocationCount: 0
53# CHECK-NEXT:   Type: ZeroFill (0x1)
54# CHECK-NEXT:   Attributes [ (0x0)
55# CHECK-NEXT:   ]
56# CHECK-NEXT:   Reserved1: 0x0
57# CHECK-NEXT:   Reserved2: 0x0
58# CHECK-NEXT:   Reserved3: 0x0
59
60# CHECK:        Index: 4
61# CHECK-NEXT:   Name: foo
62# CHECK-NEXT:   Segment: FOO
63# CHECK-NEXT:   Address:
64# CHECK-NEXT:   Size: 0x8
65# CHECK-NEXT:   Offset: 8192
66# CHECK-NEXT:   Alignment: 0
67# CHECK-NEXT:   RelocationOffset: 0x0
68# CHECK-NEXT:   RelocationCount: 0
69# CHECK-NEXT:   Type: Regular (0x0)
70# CHECK-NEXT:   Attributes [ (0x0)
71# CHECK-NEXT:   ]
72# CHECK-NEXT:   Reserved1: 0x0
73# CHECK-NEXT:   Reserved2: 0x0
74# CHECK-NEXT:   Reserved3: 0x0
75
76# CHECK:        Index: 5
77# CHECK-NEXT:   Name: bss
78# CHECK-NEXT:   Segment: FOO
79# CHECK-NEXT:   Address:
80# CHECK-NEXT:   Size: 0x8
81# CHECK-NEXT:   Offset: 0
82# CHECK-NEXT:   Alignment: 0
83# CHECK-NEXT:   RelocationOffset: 0x0
84# CHECK-NEXT:   RelocationCount: 0
85# CHECK-NEXT:   Type: ZeroFill (0x1)
86# CHECK-NEXT:   Attributes [ (0x0)
87# CHECK-NEXT:   ]
88# CHECK-NEXT:   Reserved1: 0x0
89# CHECK-NEXT:   Reserved2: 0x0
90# CHECK-NEXT:   Reserved3: 0x0
91
92# CHECK:      Name: __DATA
93# CHECK-NEXT: Size:
94# CHECK-NEXT: vmaddr:
95# CHECK-NEXT: vmsize: 0x11000
96# CHECK-NEXT: fileoff:
97# CHECK-NEXT: filesize: 4096
98
99# CHECK:      Name: FOO
100# CHECK-NEXT: Size:
101# CHECK-NEXT: vmaddr:
102# CHECK-NEXT: vmsize: 0x9000
103# CHECK-NEXT: fileoff:
104# CHECK-NEXT: filesize: 4096
105
106.globl _main
107
108.text
109_main:
110  movq $0, %rax
111  retq
112
113.bss
114.zero 0x8000
115
116.tbss _foo, 4
117.zero 0x8000
118
119.data
120.quad 0x1234
121
122.zerofill FOO,bss,_zero_foo,0x8000
123
124.section FOO,foo
125.quad 123
126