From 4cea4e81d4dd1e5b77e5864bba5bc4f21d3d5be3 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Thu, 25 Feb 2016 19:28:37 +0000 Subject: [PATCH] ELF: Split Writer::writeHeader. NFC. llvm-svn: 261923 --- lld/ELF/Writer.cpp | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index e87ebdf..620be30 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -1423,6 +1423,20 @@ static typename ELFFile::uintX_t getEntryAddr() { return 0; } +template static uint8_t getELFEncoding() { + if (ELFT::TargetEndianness == llvm::support::little) + return ELFDATA2LSB; + return ELFDATA2MSB; +} + +static uint16_t getELFType() { + if (Config->Shared) + return ET_DYN; + if (Config->Relocatable) + return ET_REL; + return ET_EXEC; +} + // This function is called after we have assigned address and size // to each section. This function fixes some predefined absolute // symbol values that depend on section address and size. @@ -1444,24 +1458,15 @@ template void Writer::writeHeader() { uint8_t *Buf = Buffer->getBufferStart(); memcpy(Buf, "\177ELF", 4); + auto &FirstObj = cast>(*Config->FirstElf); + // Write the ELF header. auto *EHdr = reinterpret_cast(Buf); EHdr->e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32; - EHdr->e_ident[EI_DATA] = ELFT::TargetEndianness == llvm::support::little - ? ELFDATA2LSB - : ELFDATA2MSB; + EHdr->e_ident[EI_DATA] = getELFEncoding(); EHdr->e_ident[EI_VERSION] = EV_CURRENT; - - auto &FirstObj = cast>(*Config->FirstElf); EHdr->e_ident[EI_OSABI] = FirstObj.getOSABI(); - - if (Config->Shared) - EHdr->e_type = ET_DYN; - else if (Config->Relocatable) - EHdr->e_type = ET_REL; - else - EHdr->e_type = ET_EXEC; - + EHdr->e_type = getELFType(); EHdr->e_machine = FirstObj.getEMachine(); EHdr->e_version = EV_CURRENT; EHdr->e_entry = getEntryAddr(); -- 2.7.4