[COFF] Use the correct size of the TLS directory
authorDavid Majnemer <david.majnemer@gmail.com>
Tue, 15 Mar 2016 06:41:02 +0000 (06:41 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Tue, 15 Mar 2016 06:41:02 +0000 (06:41 +0000)
The TLS directory has a different layout depending on the bitness of the
machine the image will run on.  LLD would always use the 64-bit TLS
directory for the data directory entry instead of an appropriately sized
TLS directory.

llvm-svn: 263539

lld/COFF/Writer.cpp
lld/test/COFF/tls32.test

index a3e5c20..5f5adaa 100644 (file)
@@ -596,7 +596,9 @@ template <typename PEHeaderTy> void Writer::writeHeader() {
   if (Symbol *Sym = Symtab->findUnderscore("_tls_used")) {
     if (Defined *B = dyn_cast<Defined>(Sym->Body)) {
       Dir[TLS_TABLE].RelativeVirtualAddress = B->getRVA();
-      Dir[TLS_TABLE].Size = 40;
+      Dir[TLS_TABLE].Size = Config->is64()
+                                ? sizeof(object::coff_tls_directory64)
+                                : sizeof(object::coff_tls_directory32);
     }
   }
   if (Symbol *Sym = Symtab->findUnderscore("_load_config_used")) {
index 4fe020e..a16af05 100644 (file)
@@ -3,7 +3,7 @@
 # RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
 
 # CHECK: TLSTableRVA: 0x1000
-# CHECK: TLSTableSize: 0x28
+# CHECK: TLSTableSize: 0x18
 
 ---
 header: