diff options
author | Rui Ueyama <ruiu@google.com> | 2015-10-23 22:44:37 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2015-10-23 22:44:37 +0000 |
commit | bcb2d0f94b8cb7e9ac9cc0c695e4258521f19f99 (patch) | |
tree | df1c2165d5be454137bb239b96a524b4091ffd9c | |
parent | dde0029a25bcb203e14a6ec6af6cdd9b30ab15cc (diff) | |
download | bcm5719-llvm-bcb2d0f94b8cb7e9ac9cc0c695e4258521f19f99.tar.gz bcm5719-llvm-bcb2d0f94b8cb7e9ac9cc0c695e4258521f19f99.zip |
ELF2: Factor out getEntryAddr from writeHeader. NFC.
llvm-svn: 251158
-rw-r--r-- | lld/ELF/Writer.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index cc3e6302953..3187799f3e3 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -67,6 +67,7 @@ private: return !Symtab.getSharedFiles().empty() || Config->Shared; } uintX_t getVAStart() const { return Config->Shared ? 0 : Target->getVAStart(); } + uintX_t getEntryAddr() const; int getPhdrsNum() const; std::unique_ptr<llvm::FileOutputBuffer> Buffer; @@ -723,12 +724,7 @@ template <class ELFT> void Writer<ELFT>::writeHeader() { EHdr->e_type = Config->Shared ? ET_DYN : ET_EXEC; EHdr->e_machine = FirstObj.getEMachine(); EHdr->e_version = EV_CURRENT; - if (Config->EntrySym) { - if (auto *E = dyn_cast<ELFSymbolBody<ELFT>>(Config->EntrySym->repl())) - EHdr->e_entry = getSymVA<ELFT>(*E); - } else if (Config->EntryAddr != uint64_t(-1)) { - EHdr->e_entry = Config->EntryAddr; - } + EHdr->e_entry = getEntryAddr(); EHdr->e_phoff = sizeof(Elf_Ehdr); EHdr->e_shoff = SectionHeaderOff; EHdr->e_ehsize = sizeof(Elf_Ehdr); @@ -772,6 +768,18 @@ template <class ELFT> void Writer<ELFT>::writeSections() { } template <class ELFT> +typename ELFFile<ELFT>::uintX_t Writer<ELFT>::getEntryAddr() const { + if (Config->EntrySym) { + if (auto *E = dyn_cast<ELFSymbolBody<ELFT>>(Config->EntrySym->repl())) + return getSymVA<ELFT>(*E); + return 0; + } + if (Config->EntryAddr != uint64_t(-1)) + return Config->EntryAddr; + return 0; +} + +template <class ELFT> void Writer<ELFT>::setPhdr(Elf_Phdr *PH, uint32_t Type, uint32_t Flags, uintX_t FileOff, uintX_t VA, uintX_t Size, uintX_t Align) { |