Remove big-endianness from =<fillexp> code.
authorRui Ueyama <ruiu@google.com>
Tue, 11 Apr 2017 22:45:57 +0000 (22:45 +0000)
committerRui Ueyama <ruiu@google.com>
Tue, 11 Apr 2017 22:45:57 +0000 (22:45 +0000)
llvm-svn: 300005

lld/ELF/OutputSections.cpp
lld/ELF/ScriptParser.cpp

index 18a20fe..a7bfa61 100644 (file)
@@ -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() {
index 6c115fb..bdc733d 100644 (file)
@@ -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) {