1
1
# REQUIRES: x86
2
- # RUN: mkdir -p %t
3
- # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t/test.o
2
+ # RUN: rm -rf %t; split-file %s %t
3
+ # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/regular.s -o %t/regular.o
4
+ # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/tbss.s -o %t/tbss.o
4
5
5
- # RUN: %lld -lSystem -o %t/test %t/test.o
6
- # RUN: llvm-readobj --file-headers %t/test | FileCheck %s --check-prefix=HEADER
7
- # RUN: llvm-objdump -D --bind --rebase %t/test | FileCheck %s
6
+ # RUN: %lld -lSystem -no_pie -o %t/regular %t/regular.o
7
+ # RUN: llvm-readobj --file-headers %t/regular | FileCheck %s --check-prefix=HEADER
8
+ # RUN: llvm-objdump -d --bind --rebase %t/regular | FileCheck %s --check-prefixes=REG,LINKEDIT
9
+ # RUN: llvm-objdump --macho --section=__DATA,__thread_vars %t/regular | \
10
+ # RUN: FileCheck %s --check-prefix=REG-TLVP
8
11
9
- # RUN: %lld -lSystem -pie -o %t/test %t/test.o
10
- # RUN: llvm-readobj --file-headers %t/test | FileCheck %s --check-prefix=HEADER
11
- # RUN: llvm-objdump -D --bind --rebase %t/test | FileCheck %s
12
+ # RUN: %lld -lSystem -pie %t/regular.o -o %t/regular-pie
13
+ # RUN: llvm-readobj --file-headers %t/regular-pie | FileCheck %s --check-prefix=HEADER
14
+ # RUN: llvm-objdump -d --bind --rebase %t/regular-pie | FileCheck %s --check-prefixes=REG,LINKEDIT
15
+ # RUN: llvm-objdump --macho --section=__DATA,__thread_vars %t/regular-pie | \
16
+ # RUN: FileCheck %s --check-prefix=REG-TLVP
17
+
18
+ # RUN: %lld -lSystem %t/tbss.o -o %t/tbss -e _f
19
+ # RUN: llvm-objdump -d --bind --rebase %t/tbss | FileCheck %s --check-prefixes=TBSS,LINKEDIT
20
+ # RUN: llvm-objdump --macho --section=__DATA,__thread_vars %t/tbss | \
21
+ # RUN: FileCheck %s --check-prefix=TBSS-TLVP
22
+
23
+ # RUN: %lld -lSystem %t/regular.o %t/tbss.o -o %t/regular-and-tbss
24
+ # RUN: llvm-objdump -d --bind --rebase %t/regular-and-tbss | FileCheck %s --check-prefixes=REG,TBSS,LINKEDIT
25
+ # RUN: llvm-objdump --macho --section=__DATA,__thread_vars %t/regular-and-tbss | \
26
+ # RUN: FileCheck %s --check-prefix=REG-TBSS-TLVP
27
+ # RUN: llvm-objdump --section-headers %t/regular-and-tbss | FileCheck %s --check-prefix=SECTION-ORDER
28
+
29
+ ## Check that we always put __thread_bss immediately after __thread_data,
30
+ ## regardless of the order of the input files.
31
+ # RUN: %lld -lSystem %t/tbss.o %t/regular.o -o %t/regular-and-tbss
32
+ # RUN: llvm-objdump --section-headers %t/regular-and-tbss | FileCheck %s --check-prefix=SECTION-ORDER
12
33
13
34
# HEADER: MH_HAS_TLV_DESCRIPTORS
14
35
15
- # CHECK: Disassembly of section __TEXT,__text:
16
- # CHECK-EMPTY:
17
- # CHECK-NEXT: <_main>:
18
- # CHECK-NEXT: leaq {{.*}}(%rip), %rax # {{.*}} <_foo>
19
- # CHECK-NEXT: leaq {{.*}}(%rip), %rax # {{.*}} <_bar>
20
- # CHECK-NEXT: retq
21
- # CHECK-EMPTY:
22
- # CHECK-NEXT: Disassembly of section __DATA,__thread_data:
23
- # CHECK-EMPTY:
24
- # CHECK-NEXT: <_foo$tlv$init>:
25
- # CHECK-NEXT: 00 00
26
- # CHECK-NEXT: 00 00
27
- # CHECK-EMPTY:
28
- # CHECK-NEXT: <_bar$tlv$init>:
29
- # CHECK-NEXT: 00 00
30
- # CHECK-NEXT: 00 00
31
- # CHECK-EMPTY:
32
- # CHECK-NEXT: Disassembly of section __DATA,__thread_vars:
33
- # CHECK-EMPTY:
34
- # CHECK-NEXT: <_foo>:
35
- # CHECK-NEXT: ...
36
- # CHECK-EMPTY:
37
- # CHECK-NEXT: <_bar>:
38
- # CHECK-NEXT: ...
39
- # CHECK-NEXT: 04 00
40
- # CHECK-NEXT: 00 00
41
- # CHECK-NEXT: 00 00
42
- # CHECK-NEXT: 00 00
36
+ # REG: <_main>:
37
+ # REG-NEXT: leaq {{.*}}(%rip), %rax # {{.*}} <_foo>
38
+ # REG-NEXT: leaq {{.*}}(%rip), %rax # {{.*}} <_bar>
39
+ # REG-NEXT: retq
40
+
41
+ # TBSS: <_f>:
42
+ # TBSS-NEXT: leaq {{.*}}(%rip), %rax # {{.*}} <_baz>
43
+ # TBSS-NEXT: leaq {{.*}}(%rip), %rax # {{.*}} <_qux>
44
+ # TBSS-NEXT: retq
45
+
46
+ # REG-TLVP: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
47
+ # REG-TLVP-NEXT: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
48
+ # REG-TLVP-NEXT: 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
49
+
50
+ # TBSS-TLVP: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
51
+ # TBSS-TLVP-NEXT: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
52
+ # TBSS-TLVP-NEXT: 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
53
+
54
+ # REG-TBSS-TLVP: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
55
+ # REG-TBSS-TLVP-NEXT: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
56
+ # REG-TBSS-TLVP-NEXT: 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
57
+ # REG-TBSS-TLVP-NEXT: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
58
+ # REG-TBSS-TLVP-NEXT: 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
59
+ # REG-TBSS-TLVP-NEXT: 00 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00
43
60
44
61
## Make sure we don't emit rebase opcodes for relocations in __thread_vars.
45
- # CHECK: Rebase table:
46
- # CHECK-NEXT: segment section address type
47
- # CHECK-NEXT: Bind table:
48
- # CHECK: __DATA __thread_vars 0x{{[0-9a-f]*}} pointer 0 libSystem __tlv_bootstrap
49
- # CHECK: __DATA __thread_vars 0x{{[0-9a-f]*}} pointer 0 libSystem __tlv_bootstrap
62
+ # LINKEDIT: Rebase table:
63
+ # LINKEDIT-NEXT: segment section address type
64
+ # LINKEDIT-NEXT: Bind table:
65
+ # LINKEDIT: __DATA __thread_vars 0x{{[0-9a-f]*}} pointer 0 libSystem __tlv_bootstrap
66
+ # LINKEDIT: __DATA __thread_vars 0x{{[0-9a-f]*}} pointer 0 libSystem __tlv_bootstrap
67
+
68
+ # SECTION-ORDER: __thread_data
69
+ # SECTION-ORDER: more_thread_data
70
+ # SECTION-ORDER-NEXT: __thread_bss
50
71
72
+ #--- regular.s
51
73
.globl _main
52
74
_main:
53
75
mov _foo@TLVP(%rip ), %rax
@@ -56,9 +78,11 @@ _main:
56
78
57
79
.section __DATA,__thread_data,thread_local_regular
58
80
_foo$tlv$init:
59
- .space 4
81
+ .quad 123
82
+
83
+ .section __DATA,more_thread_data,thread_local_regular
60
84
_bar$tlv$init:
61
- .space 4
85
+ .quad 123
62
86
63
87
.section __DATA,__thread_vars,thread_local_variables
64
88
.globl _foo, _bar
70
94
.quad __tlv_bootstrap
71
95
.quad 0
72
96
.quad _bar$tlv$init
97
+
98
+ #--- tbss.s
99
+
100
+ .globl _f
101
+ _f:
102
+ mov _baz@TLVP(%rip ), %rax
103
+ mov _qux@TLVP(%rip ), %rax
104
+ ret
105
+
106
+ .tbss _baz$tlv$init, 8 , 3
107
+ .tbss _qux$tlv$init, 8 , 3
108
+
109
+ .section __DATA,__thread_vars,thread_local_variables
110
+ _baz:
111
+ .quad __tlv_bootstrap
112
+ .quad 0
113
+ .quad _baz$tlv$init
114
+ _qux:
115
+ .quad __tlv_bootstrap
116
+ .quad 0
117
+ .quad _qux$tlv$init
0 commit comments