diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 18a20fe7eb0d..a7bfa61192ad 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -221,15 +221,13 @@ void OutputSection::sortCtorsDtors() { std::stable_sort(Sections.begin(), Sections.end(), compCtors); } -// Fill [Buf, Buf + Size) with Filler. Filler is written in big -// endian order. This is used for linker script "=fillexp" command. +// Fill [Buf, Buf + Size) with Filler. +// This is used for linker script "=fillexp" command. static void fill(uint8_t *Buf, size_t Size, uint32_t Filler) { - uint8_t V[4]; - write32be(V, Filler); size_t I = 0; for (; I + 4 < Size; I += 4) - memcpy(Buf + I, V, 4); - memcpy(Buf + I, V, Size - I); + memcpy(Buf + I, &Filler, 4); + memcpy(Buf + I, &Filler, Size - I); } uint32_t OutputSection::getFiller() { diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index 6c115fb9e519..bdc733d00828 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -36,6 +36,7 @@ using namespace llvm; using namespace llvm::ELF; +using namespace llvm::support::endian; using namespace lld; using namespace lld::elf; @@ -637,11 +638,13 @@ ScriptParser::readOutputSectionDescription(StringRef OutSec) { // as 32-bit big-endian values. We will do the same as ld.gold does // because it's simpler than what ld.bfd does. uint32_t ScriptParser::readOutputSectionFiller(StringRef Tok) { - uint32_t V; - if (!Tok.getAsInteger(0, V)) - return V; - setError("invalid filler expression: " + Tok); - return 0; + uint32_t V = 0; + if (Tok.getAsInteger(0, V)) + setError("invalid filler expression: " + Tok); + + uint32_t Buf; + write32be(&Buf, V); + return Buf; } SymbolAssignment *ScriptParser::readProvideHidden(bool Provide, bool Hidden) {