Windows TLS: Section name prefix to ensure correct order
authorAnton Korobeynikov <asl@math.spbu.ru>
Mon, 18 Mar 2013 08:10:10 +0000 (08:10 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Mon, 18 Mar 2013 08:10:10 +0000 (08:10 +0000)
The linker sorts the .tls$<xyz> sections by name, and we need
to make sure any extra sections we produce (e.g. for weak globals)
always end up between .tls$AAA and .tls$ZZZ, even if the name
starts with e.g. an underscore.

Patch by David Nadlinger!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177256 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/TargetLoweringObjectFileImpl.cpp

index 9a9ddc9b488b74d855a69b19438b0d52ad9668d0..3bdca4c64078283a91551acad415d7acf01abe6d 100644 (file)
@@ -742,8 +742,11 @@ static const char *getCOFFSectionPrefixForUniqueGlobal(SectionKind Kind) {
     return ".text$";
   if (Kind.isBSS ())
     return ".bss$";
-  if (Kind.isThreadLocal())
-    return ".tls$";
+  if (Kind.isThreadLocal()) {
+    // 'LLVM' is just an arbitary string to ensure that the section name gets
+    // sorted in between '.tls$AAA' and '.tls$ZZZ' by the linker.
+    return ".tls$LLVM";
+  }
   if (Kind.isWriteable())
     return ".data$";
   return ".rdata$";