diff options
author | Arthur Eubanks <aeubanks@google.com> | 2023-09-29 12:56:53 -0700 |
---|---|---|
committer | Tobias Hieta <tobias@hieta.se> | 2023-10-02 19:23:20 +0200 |
commit | 33e14ecd6aac8c61c055921dd6e564d170fe34d6 (patch) | |
tree | 40a6de6744a20904c3ea66d48425364d06b126ea /llvm | |
parent | 03f797b51df664970322e80da6c4149b11dcad39 (diff) | |
download | llvm-33e14ecd6aac8c61c055921dd6e564d170fe34d6.zip llvm-33e14ecd6aac8c61c055921dd6e564d170fe34d6.tar.gz llvm-33e14ecd6aac8c61c055921dd6e564d170fe34d6.tar.bz2 |
[CodeGen] Don't treat thread local globals as large data (#67764)
Otherwise they may mistakenly get the large section flag.
(cherry picked from commit b915f60678c3033c466611be1119a46ba4b0869c)
(fix was slightly different since cherry-pick didn't apply well)
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/code-model-elf-sections.ll | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 55fb522..4ffffd8 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -855,7 +855,7 @@ static MCSectionELF *selectELFSectionForGlobal( Group = C->getName(); IsComdat = C->getSelectionKind() == Comdat::Any; } - if (isa<GlobalVariable>(GO)) { + if (isa<GlobalVariable>(GO) && !cast<GlobalVariable>(GO)->isThreadLocal()) { if (TM.isLargeData()) { assert(TM.getTargetTriple().getArch() == Triple::x86_64); Flags |= ELF::SHF_X86_64_LARGE; diff --git a/llvm/test/CodeGen/X86/code-model-elf-sections.ll b/llvm/test/CodeGen/X86/code-model-elf-sections.ll index 24c672d..4862f02 100644 --- a/llvm/test/CodeGen/X86/code-model-elf-sections.ll +++ b/llvm/test/CodeGen/X86/code-model-elf-sections.ll @@ -16,21 +16,29 @@ ; SMALL: .bss {{.*}} WA {{.*}} ; SMALL: .rodata {{.*}} A {{.*}} ; SMALL: .data.rel.ro {{.*}} WA {{.*}} +; SMALL: .tbss {{.*}} WAT {{.*}} +; SMALL: .tdata {{.*}} WAT {{.*}} ; SMALL-DS: .data.data {{.*}} WA {{.*}} ; SMALL-DS: .bss.bss {{.*}} WA {{.*}} ; SMALL-DS: .rodata.rodata {{.*}} A {{.*}} ; SMALL-DS: .data.rel.ro.relro {{.*}} WA {{.*}} +; SMALL-DS: .tbss.tbss {{.*}} WAT {{.*}} +; SMALL-DS: .tdata.tdata {{.*}} WAT {{.*}} ; LARGE: .ldata {{.*}} WAl {{.*}} ; LARGE: .lbss {{.*}} WAl {{.*}} ; LARGE: .lrodata {{.*}} Al {{.*}} ; LARGE: .ldata.rel.ro {{.*}} WAl {{.*}} +; LARGE: .tbss {{.*}} WAT {{.*}} +; LARGE: .tdata {{.*}} WAT {{.*}} ; LARGE-DS: .ldata.data {{.*}} WAl {{.*}} ; LARGE-DS: .lbss.bss {{.*}} WAl {{.*}} ; LARGE-DS: .lrodata.rodata {{.*}} Al {{.*}} ; LARGE-DS: .ldata.rel.ro.relro {{.*}} WAl {{.*}} +; LARGE-DS: .tbss.tbss {{.*}} WAT {{.*}} +; LARGE-DS: .tdata.tdata {{.*}} WAT {{.*}} target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64--linux" @@ -39,5 +47,7 @@ target triple = "x86_64--linux" @bss = internal global [10 x i64] zeroinitializer @rodata = internal constant [10 x i64] zeroinitializer @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] +@tbss = internal thread_local global [10 x i64] zeroinitializer +@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] declare void @func() |