diff options
author | David Majnemer <david.majnemer@gmail.com> | 2016-03-15 06:41:02 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2016-03-15 06:41:02 +0000 |
commit | 22a19a9aceeaa5fa0560d58f701b01e7b753a1b0 (patch) | |
tree | ec55581359193de20f3f8d5355d8bece6fa067e0 | |
parent | 0c2adbc7a081dc554283836f82b6850f19499ed5 (diff) | |
download | llvm-22a19a9aceeaa5fa0560d58f701b01e7b753a1b0.zip llvm-22a19a9aceeaa5fa0560d58f701b01e7b753a1b0.tar.gz llvm-22a19a9aceeaa5fa0560d58f701b01e7b753a1b0.tar.bz2 |
[COFF] Use the correct size of the TLS directory
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
-rw-r--r-- | lld/COFF/Writer.cpp | 4 | ||||
-rw-r--r-- | lld/test/COFF/tls32.test | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index a3e5c20..5f5adaa 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -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")) { diff --git a/lld/test/COFF/tls32.test b/lld/test/COFF/tls32.test index 4fe020e..a16af05 100644 --- a/lld/test/COFF/tls32.test +++ b/lld/test/COFF/tls32.test @@ -3,7 +3,7 @@ # RUN: llvm-readobj -file-headers %t.exe | FileCheck %s # CHECK: TLSTableRVA: 0x1000 -# CHECK: TLSTableSize: 0x28 +# CHECK: TLSTableSize: 0x18 --- header: |