blob: a5b95597518bdfe71b9c592f4753d5ee9591cdf8 [file] [log] [blame]
Michael J. Spencer4633a372015-10-27 21:22:54 +00001// REQUIRES: x86
2// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
Rafael Espindola9c8904f2015-11-18 06:11:01 +00003// RUN: ld.lld %t -o %tout
Michael J. Spencerd77f0d22015-11-03 22:39:09 +00004// RUN: llvm-readobj -symbols -sections -program-headers %tout | FileCheck %s
5// RUN: llvm-objdump -d %tout | FileCheck %s --check-prefix=DIS
Michael J. Spencer4633a372015-10-27 21:22:54 +00006
7.global _start
8_start:
Michael J. Spencerd77f0d22015-11-03 22:39:09 +00009 movl %fs:a@tpoff, %eax
10 movl %fs:b@tpoff, %eax
11 movl %fs:c@tpoff, %eax
12 movl %fs:d@tpoff, %eax
Michael J. Spencer4633a372015-10-27 21:22:54 +000013
Michael J. Spencerd77f0d22015-11-03 22:39:09 +000014 .global a
Michael J. Spencer4633a372015-10-27 21:22:54 +000015 .section .tbss,"awT",@nobits
Michael J. Spencerd77f0d22015-11-03 22:39:09 +000016a:
Michael J. Spencer4633a372015-10-27 21:22:54 +000017 .long 0
18
Michael J. Spencerd77f0d22015-11-03 22:39:09 +000019 .global b
Michael J. Spencer4633a372015-10-27 21:22:54 +000020 .section .tdata,"awT",@progbits
Michael J. Spencerd77f0d22015-11-03 22:39:09 +000021b:
Michael J. Spencer4633a372015-10-27 21:22:54 +000022 .long 1
23
Michael J. Spencerd77f0d22015-11-03 22:39:09 +000024 .global c
Michael J. Spencer4633a372015-10-27 21:22:54 +000025 .section .thread_bss,"awT",@nobits
Michael J. Spencerd77f0d22015-11-03 22:39:09 +000026c:
Michael J. Spencer4633a372015-10-27 21:22:54 +000027 .long 0
28
Michael J. Spencerd77f0d22015-11-03 22:39:09 +000029 .global d
Michael J. Spencer4633a372015-10-27 21:22:54 +000030 .section .thread_data,"awT",@progbits
Michael J. Spencerd77f0d22015-11-03 22:39:09 +000031d:
Michael J. Spencer4633a372015-10-27 21:22:54 +000032 .long 2
33
34// CHECK: Name: .tdata
35// CHECK-NEXT: Type: SHT_PROGBITS
36// CHECK-NEXT: Flags [
37// CHECK-NEXT: SHF_ALLOC
38// CHECK-NEXT: SHF_TLS
39// CHECK-NEXT: SHF_WRITE
40// CHECK-NEXT: ]
Michael J. Spencer78aa1de2015-11-03 00:34:39 +000041// CHECK-NEXT: Address: [[TDATA_ADDR:0x.*]]
Michael J. Spencer4633a372015-10-27 21:22:54 +000042// CHECK-NEXT: Offset:
43// CHECK-NEXT: Size: 4
44// CHECK-NEXT: Link:
45// CHECK-NEXT: Info:
46// CHECK-NEXT: AddressAlignment:
47// CHECK-NEXT: EntrySize:
48// CHECK-NEXT: }
49// CHECK-NEXT: Section {
50// CHECK-NEXT: Index:
51// CHECK-NEXT: Name: .thread_data
52// CHECK-NEXT: Type: SHT_PROGBITS
53// CHECK-NEXT: Flags [
54// CHECK-NEXT: SHF_ALLOC
55// CHECK-NEXT: SHF_TLS
56// CHECK-NEXT: SHF_WRITE
57// CHECK-NEXT: ]
58// CHECK-NEXT: Address:
59// CHECK-NEXT: Offset:
60// CHECK-NEXT: Size: 4
61// CHECK-NEXT: Link:
62// CHECK-NEXT: Info:
63// CHECK-NEXT: AddressAlignment:
64// CHECK-NEXT: EntrySize:
65// CHECK-NEXT: }
66// CHECK-NEXT: Section {
67// CHECK-NEXT: Index:
68// CHECK-NEXT: Name: .tbss
69// CHECK-NEXT: Type: SHT_NOBITS
70// CHECK-NEXT: Flags [
71// CHECK-NEXT: SHF_ALLOC
72// CHECK-NEXT: SHF_TLS
73// CHECK-NEXT: SHF_WRITE
74// CHECK-NEXT: ]
Michael J. Spencer78aa1de2015-11-03 00:34:39 +000075// CHECK-NEXT: Address: [[TBSS_ADDR:0x.*]]
Michael J. Spencer4633a372015-10-27 21:22:54 +000076// CHECK-NEXT: Offset:
77// CHECK-NEXT: Size: 4
78// CHECK-NEXT: Link:
79// CHECK-NEXT: Info:
80// CHECK-NEXT: AddressAlignment:
81// CHECK-NEXT: EntrySize:
82// CHECK-NEXT: }
83// CHECK-NEXT: Section {
84// CHECK-NEXT: Index:
85// CHECK-NEXT: Name: .thread_bss
86// CHECK-NEXT: Type: SHT_NOBITS
87// CHECK-NEXT: Flags [
88// CHECK-NEXT: SHF_ALLOC
89// CHECK-NEXT: SHF_TLS
90// CHECK-NEXT: SHF_WRITE
91// CHECK-NEXT: ]
Michael J. Spencer78aa1de2015-11-03 00:34:39 +000092
Ed Maste8fd01962016-11-23 17:44:02 +000093// 0x20200C = TBSS_ADDR + 4
Michael J. Spencer78aa1de2015-11-03 00:34:39 +000094
Ed Maste8fd01962016-11-23 17:44:02 +000095// CHECK-NEXT: Address: 0x20200C
Michael J. Spencer4633a372015-10-27 21:22:54 +000096// CHECK-NEXT: Offset:
97// CHECK-NEXT: Size: 4
Michael J. Spencer78aa1de2015-11-03 00:34:39 +000098// CHECK-NEXT: Link:
99// CHECK-NEXT: Info:
100// CHECK-NEXT: AddressAlignment:
101// CHECK-NEXT: EntrySize:
102// CHECK-NEXT: }
Michael J. Spencer4633a372015-10-27 21:22:54 +0000103
Michael J. Spencerd77f0d22015-11-03 22:39:09 +0000104// CHECK: Symbols [
105// CHECK: Name: a
106// CHECK-NEXT: Value: 0x8
107// CHECK-NEXT: Size:
108// CHECK-NEXT: Binding: Global
109// CHECK-NEXT: Type: TLS
110// CHECK-NEXT: Other: 0
111// CHECK-NEXT: Section: .tbss
112// CHECK-NEXT: }
113// CHECK-NEXT: Symbol {
114// CHECK-NEXT: Name: b
115// CHECK-NEXT: Value: 0x0
116// CHECK-NEXT: Size:
117// CHECK-NEXT: Binding: Global
118// CHECK-NEXT: Type: TLS
119// CHECK-NEXT: Other: 0
120// CHECK-NEXT: Section: .tdata
121// CHECK-NEXT: }
122// CHECK-NEXT: Symbol {
123// CHECK-NEXT: Name: c
124// CHECK-NEXT: Value: 0xC
125// CHECK-NEXT: Size:
126// CHECK-NEXT: Binding: Global
127// CHECK-NEXT: Type: TLS
128// CHECK-NEXT: Other: 0
129// CHECK-NEXT: Section: .thread_bss
130// CHECK-NEXT: }
131// CHECK-NEXT: Symbol {
132// CHECK-NEXT: Name: d
133// CHECK-NEXT: Value: 0x4
134// CHECK-NEXT: Size:
135// CHECK-NEXT: Binding: Global
136// CHECK-NEXT: Type: TLS
137// CHECK-NEXT: Other: 0
138// CHECK-NEXT: Section: .thread_data
139// CHECK-NEXT: }
140
Michael J. Spencer4633a372015-10-27 21:22:54 +0000141// Check that the TLS NOBITS sections weren't added to the R/W PT_LOAD's size.
142
143// CHECK: ProgramHeaders [
144// CHECK: Type: PT_LOAD
145// CHECK: Type: PT_LOAD
Michael J. Spencerd77f0d22015-11-03 22:39:09 +0000146// CHECK: Type: PT_LOAD
Michael J. Spencer4633a372015-10-27 21:22:54 +0000147// CHECK: FileSize: 8
148// CHECK-NEXT: MemSize: 8
149// CHECK-NEXT: Flags [
150// CHECK-NEXT: PF_R
151// CHECK-NEXT: PF_W
152// CHECK-NEXT: ]
Michael J. Spencer78aa1de2015-11-03 00:34:39 +0000153// CHECK: Type: PT_TLS
154// CHECK-NEXT: Offset:
155// CHECK-NEXT: VirtualAddress: [[TDATA_ADDR]]
156// CHECK-NEXT: PhysicalAddress: [[TDATA_ADDR]]
157// CHECK-NEXT: FileSize: 8
158// CHECK-NEXT: MemSize: 16
159// CHECK-NEXT: Flags [
160// CHECK-NEXT: PF_R
161// CHECK-NEXT: ]
162// CHECK-NEXT: Alignment:
163// CHECK-NEXT: }
Michael J. Spencerd77f0d22015-11-03 22:39:09 +0000164
165// DIS: Disassembly of section .text:
166// DIS-NEXT: _start:
Ed Maste8fd01962016-11-23 17:44:02 +0000167// DIS-NEXT: 201000: {{.+}} movl %fs:-8, %eax
168// DIS-NEXT: 201008: {{.+}} movl %fs:-16, %eax
169// DIS-NEXT: 201010: {{.+}} movl %fs:-4, %eax
170// DIS-NEXT: 201018: {{.+}} movl %fs:-12, %eax