From f93ed4de2e6cab40c1cfb16be80006bc7184973c Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Tue, 21 Mar 2017 21:40:08 +0000 Subject: [PATCH] Define Config::Endianness. This is a shorthand for `Config->IsLE ? support::little : support::big`. llvm-svn: 298445 --- lld/ELF/Config.h | 4 ++++ lld/ELF/Driver.cpp | 2 ++ lld/ELF/LinkerScript.cpp | 8 +++----- lld/ELF/SyntheticSections.cpp | 8 +++----- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h index 60e2c0941f42..084d58a32a3d 100644 --- a/lld/ELF/Config.h +++ b/lld/ELF/Config.h @@ -16,6 +16,7 @@ #include "llvm/Support/CachePruning.h" #include "llvm/Support/CodeGen.h" #include "llvm/Support/ELF.h" +#include "llvm/Support/Endian.h" #include @@ -175,6 +176,9 @@ struct Configuration { // True if the target is little-endian. False if the target is big-endian. bool IsLE; + // endianness::little if IsLE is true. endianness::big otherwise. + llvm::support::endianness Endianness; + // True if the target is the little-endian MIPS64. // // The reason why we have this variable only for the MIPS is because diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 1689c8e90027..53e28b37acd8 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -715,6 +715,8 @@ static void setConfigs() { Config->CopyRelocs = (Config->Relocatable || Config->EmitRelocs); Config->IsLE = (Kind == ELF32LEKind || Kind == ELF64LEKind); + Config->Endianness = + Config->IsLE ? support::endianness::little : support::endianness::big; Config->IsMips64EL = (Kind == ELF64LEKind && Machine == EM_MIPS); Config->IsRela = Is64 || IsX32 || Config->MipsN32Abi; Config->Pic = Config->Pie || Config->Shared; diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index c36d55236ff2..b80b81356210 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -945,20 +945,18 @@ uint32_t LinkerScriptBase::getFiller(StringRef Name) { } static void writeInt(uint8_t *Buf, uint64_t Data, uint64_t Size) { - const endianness E = Config->IsLE ? endianness::little : endianness::big; - switch (Size) { case 1: *Buf = (uint8_t)Data; break; case 2: - write16(Buf, Data, E); + write16(Buf, Data, Config->Endianness); break; case 4: - write32(Buf, Data, E); + write32(Buf, Data, Config->Endianness); break; case 8: - write64(Buf, Data, E); + write64(Buf, Data, Config->Endianness); break; default: llvm_unreachable("unsupported Size argument"); diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp index 03e2d99f82d5..08af575a3740 100644 --- a/lld/ELF/SyntheticSections.cpp +++ b/lld/ELF/SyntheticSections.cpp @@ -324,7 +324,7 @@ BuildIdSection::BuildIdSection() HashSize(getHashSize()) {} void BuildIdSection::writeTo(uint8_t *Buf) { - const endianness E = Config->IsLE ? endianness::little : endianness::big; + endianness E = Config->Endianness; write32(Buf, 4, E); // Name size write32(Buf + 4, HashSize, E); // Content size write32(Buf + 8, NT_GNU_BUILD_ID, E); // Type @@ -846,12 +846,10 @@ uint64_t MipsGotSection::getGp() const { } static void writeUint(uint8_t *Buf, uint64_t Val) { - support::endianness E = - Config->IsLE ? support::endianness::little : support::endianness::big; if (Config->Wordsize == 8) - write64(Buf, Val, E); + write64(Buf, Val, Config->Endianness); else - write32(Buf, Val, E); + write32(Buf, Val, Config->Endianness); } void MipsGotSection::writeTo(uint8_t *Buf) { -- GitLab