From 0de6255877753001ce845e4d0bc574a24286329d Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 27 Nov 2013 15:52:11 +0000 Subject: Use the same tls section name as msvc. We currently error in clang with: "error: thread-local storage is unsupported for the current target", but we can start to get the llvm level ready. When compiling template struct foo { static __declspec(thread) int bar; }; template __declspec(therad) int foo::bar; template struct foo; msvc produces SECTION HEADER #3 .tls$ name 0 physical address 0 virtual address 4 size of raw data 12F file pointer to raw data (0000012F to 00000132) 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers C0301040 flags Initialized Data COMDAT; sym= "public: static int foo::bar" (?bar@?$foo@H@@2HA) 4 byte align Read Write gcc produces a ".data$__emutls_v." for the testcase with __declspec(thread) replaced with thread_local. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195849 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/TargetLoweringObjectFileImpl.cpp | 2 +- test/MC/COFF/weak-symbol.ll | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 229ccfae28..25d8cdc439 100644 --- a/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -744,7 +744,7 @@ static const char *getCOFFSectionNameForUniqueGlobal(SectionKind Kind) { if (Kind.isBSS ()) return ".bss"; if (Kind.isThreadLocal()) - return ".tls"; + return ".tls$"; if (Kind.isWriteable()) return ".data"; return ".rdata"; diff --git a/test/MC/COFF/weak-symbol.ll b/test/MC/COFF/weak-symbol.ll index f23063e59c..c06692ed90 100644 --- a/test/MC/COFF/weak-symbol.ll +++ b/test/MC/COFF/weak-symbol.ll @@ -36,3 +36,13 @@ define weak void @f() section ".sect" { ; X64: .globl a ; X64: .zero 12 @a = weak unnamed_addr constant { i32, i32, i32 } { i32 0, i32 0, i32 0}, section ".data" + +; X86: .section .tls$,"w",discard,_b +; X86: .globl _b +; X86: .long 0 +; +; X64: .section .tls$,"w",discard,b +; X64: .globl b +; X64: .long 0 + +@b = weak_odr thread_local global i32 0, align 4 -- cgit v1.2.3