diff options
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/OutputELFWriter.h')
-rw-r--r-- | lld/lib/ReaderWriter/ELF/OutputELFWriter.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/ELF/OutputELFWriter.h b/lld/lib/ReaderWriter/ELF/OutputELFWriter.h index cc044002c4f..d8319da09df 100644 --- a/lld/lib/ReaderWriter/ELF/OutputELFWriter.h +++ b/lld/lib/ReaderWriter/ELF/OutputELFWriter.h @@ -105,6 +105,7 @@ protected: LLD_UNIQUE_BUMP_PTR(StringTable<ELFT>) _strtab; LLD_UNIQUE_BUMP_PTR(StringTable<ELFT>) _shstrtab; LLD_UNIQUE_BUMP_PTR(SectionHeader<ELFT>) _shdrtab; + LLD_UNIQUE_BUMP_PTR(EHFrameHeader<ELFT>) _ehFrameHeader; /// \name Dynamic sections. /// @{ LLD_UNIQUE_BUMP_PTR(DynamicTable<ELFT>) _dynamicTable; @@ -267,6 +268,15 @@ template <class ELFT> void OutputELFWriter<ELFT>::createDefaultSections() { _symtab->setStringSection(_strtab.get()); _layout->addSection(_shdrtab.get()); + for (auto sec : _layout->sections()) { + if (sec->name() != ".eh_frame") + continue; + _ehFrameHeader.reset(new (_alloc) EHFrameHeader<ELFT>( + _context, ".eh_frame_hdr", DefaultLayout<ELFT>::ORDER_EH_FRAMEHDR)); + _layout->addSection(_ehFrameHeader.get()); + break; + } + if (_context.isDynamic()) { _dynamicTable.reset(new (_alloc) DynamicTable<ELFT>( _context, ".dynamic", DefaultLayout<ELFT>::ORDER_DYNAMIC)); |