Skip to content

Commit 33e14ec

Browse files
aeubankstru
authored andcommitted
[CodeGen] Don't treat thread local globals as large data (llvm#67764)
Otherwise they may mistakenly get the large section flag. (cherry picked from commit b915f60) (fix was slightly different since cherry-pick didn't apply well)
1 parent 03f797b commit 33e14ec

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -855,7 +855,7 @@ static MCSectionELF *selectELFSectionForGlobal(
855855
Group = C->getName();
856856
IsComdat = C->getSelectionKind() == Comdat::Any;
857857
}
858-
if (isa<GlobalVariable>(GO)) {
858+
if (isa<GlobalVariable>(GO) && !cast<GlobalVariable>(GO)->isThreadLocal()) {
859859
if (TM.isLargeData()) {
860860
assert(TM.getTargetTriple().getArch() == Triple::x86_64);
861861
Flags |= ELF::SHF_X86_64_LARGE;

llvm/test/CodeGen/X86/code-model-elf-sections.ll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,29 @@
1616
; SMALL: .bss {{.*}} WA {{.*}}
1717
; SMALL: .rodata {{.*}} A {{.*}}
1818
; SMALL: .data.rel.ro {{.*}} WA {{.*}}
19+
; SMALL: .tbss {{.*}} WAT {{.*}}
20+
; SMALL: .tdata {{.*}} WAT {{.*}}
1921

2022
; SMALL-DS: .data.data {{.*}} WA {{.*}}
2123
; SMALL-DS: .bss.bss {{.*}} WA {{.*}}
2224
; SMALL-DS: .rodata.rodata {{.*}} A {{.*}}
2325
; SMALL-DS: .data.rel.ro.relro {{.*}} WA {{.*}}
26+
; SMALL-DS: .tbss.tbss {{.*}} WAT {{.*}}
27+
; SMALL-DS: .tdata.tdata {{.*}} WAT {{.*}}
2428

2529
; LARGE: .ldata {{.*}} WAl {{.*}}
2630
; LARGE: .lbss {{.*}} WAl {{.*}}
2731
; LARGE: .lrodata {{.*}} Al {{.*}}
2832
; LARGE: .ldata.rel.ro {{.*}} WAl {{.*}}
33+
; LARGE: .tbss {{.*}} WAT {{.*}}
34+
; LARGE: .tdata {{.*}} WAT {{.*}}
2935

3036
; LARGE-DS: .ldata.data {{.*}} WAl {{.*}}
3137
; LARGE-DS: .lbss.bss {{.*}} WAl {{.*}}
3238
; LARGE-DS: .lrodata.rodata {{.*}} Al {{.*}}
3339
; LARGE-DS: .ldata.rel.ro.relro {{.*}} WAl {{.*}}
40+
; LARGE-DS: .tbss.tbss {{.*}} WAT {{.*}}
41+
; LARGE-DS: .tdata.tdata {{.*}} WAT {{.*}}
3442

3543
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
3644
target triple = "x86_64--linux"
@@ -39,5 +47,7 @@ target triple = "x86_64--linux"
3947
@bss = internal global [10 x i64] zeroinitializer
4048
@rodata = internal constant [10 x i64] zeroinitializer
4149
@relro = internal constant [10 x ptr] [ptr @func, ptr @func, ptr @func, ptr @func, ptr @func, ptr @func, ptr @func, ptr @func, ptr @func, ptr @func]
50+
@tbss = internal thread_local global [10 x i64] zeroinitializer
51+
@tdata = internal thread_local global [10 x i64] [i64 1, i64 2, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0]
4252

4353
declare void @func()

0 commit comments

Comments
 (0)