diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-05-08 17:13:44 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-05-08 17:13:44 +0000 |
commit | fbe69f787ace06f44b6cb1bd3cd45ac703a16a05 (patch) | |
tree | 71baf2dfe04008283f87b4c0ae75a2268033cd62 /ELF/SyntheticSections.cpp | |
parent | d803cda42997f42649910309ac18170d2d6f2214 (diff) | |
download | src-test2-fbe69f787ace06f44b6cb1bd3cd45ac703a16a05.tar.gz src-test2-fbe69f787ace06f44b6cb1bd3cd45ac703a16a05.zip |
Notes
Diffstat (limited to 'ELF/SyntheticSections.cpp')
-rw-r--r-- | ELF/SyntheticSections.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/ELF/SyntheticSections.cpp b/ELF/SyntheticSections.cpp index a271d31048f5..9c585e41e9f0 100644 --- a/ELF/SyntheticSections.cpp +++ b/ELF/SyntheticSections.cpp @@ -1038,6 +1038,15 @@ template <class ELFT> void DynamicSection<ELFT>::addEntries() { if (!Config->SoName.empty()) add({DT_SONAME, In<ELFT>::DynStrTab->addString(Config->SoName)}); + if (!Config->Shared && !Config->Relocatable) + add({DT_DEBUG, (uint64_t)0}); +} + +// Add remaining entries to complete .dynamic contents. +template <class ELFT> void DynamicSection<ELFT>::finalizeContents() { + if (this->Size) + return; // Already finalized. + // Set DT_FLAGS and DT_FLAGS_1. uint32_t DtFlags = 0; uint32_t DtFlags1 = 0; @@ -1055,21 +1064,14 @@ template <class ELFT> void DynamicSection<ELFT>::addEntries() { DtFlags |= DF_ORIGIN; DtFlags1 |= DF_1_ORIGIN; } + if (Config->HasStaticTlsModel) + DtFlags |= DF_STATIC_TLS; if (DtFlags) add({DT_FLAGS, DtFlags}); if (DtFlags1) add({DT_FLAGS_1, DtFlags1}); - if (!Config->Shared && !Config->Relocatable) - add({DT_DEBUG, (uint64_t)0}); -} - -// Add remaining entries to complete .dynamic contents. -template <class ELFT> void DynamicSection<ELFT>::finalizeContents() { - if (this->Size) - return; // Already finalized. - this->Link = In<ELFT>::DynStrTab->OutSec->SectionIndex; if (In<ELFT>::RelaDyn->OutSec->Size > 0) { bool IsRela = Config->IsRela; |