Use the correct MaxPageSize.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 7 Dec 2016 20:29:46 +0000 (20:29 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 7 Dec 2016 20:29:46 +0000 (20:29 +0000)
Now Target->MaxPageSize is only used as the default value of
Config->MaxPageSize.

llvm-svn: 288974

lld/ELF/Driver.cpp
lld/test/ELF/image-base.s

index dfb0c66..4a97ea5 100644 (file)
@@ -738,7 +738,7 @@ static uint64_t getImageBase(opt::InputArgList &Args) {
     error("-image-base: number expected, but got " + S);
     return 0;
   }
-  if ((V % Target->MaxPageSize) != 0)
+  if ((V % Config->MaxPageSize) != 0)
     warn("-image-base: address isn't multiple of page size: " + S);
   return V;
 }
@@ -758,6 +758,14 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
       ELFT::Is64Bits || Config->EMachine == EM_X86_64 || Config->MipsN32Abi;
   Config->Mips64EL =
       (Config->EMachine == EM_MIPS && Config->EKind == ELF64LEKind);
+
+  // Initialize Config->MaxPageSize. The default value is defined by
+  // each target.
+  Config->MaxPageSize =
+      getZOptionValue(Args, "max-page-size", Target->MaxPageSize);
+  if (!isPowerOf2_64(Config->MaxPageSize))
+    error("max-page-size: value isn't a power of 2");
+
   Config->ImageBase = getImageBase(Args);
 
   // Default output filename is "a.out" by the Unix tradition.
@@ -775,13 +783,6 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
   for (auto *Arg : Args.filtered(OPT_trace_symbol))
     Symtab.trace(Arg->getValue());
 
-  // Initialize Config->MaxPageSize. The default value is defined by
-  // each target.
-  Config->MaxPageSize =
-      getZOptionValue(Args, "max-page-size", Target->MaxPageSize);
-  if (!isPowerOf2_64(Config->MaxPageSize))
-    error("max-page-size: value isn't a power of 2");
-
   // Add all files to the symbol table. This will add almost all
   // symbols that we need to the symbol table.
   for (InputFile *F : Files)
index 0be5059..a6d1607 100644 (file)
@@ -3,6 +3,10 @@
 # RUN: ld.lld -image-base=0x1000000 %t -o %t1
 # RUN: llvm-readobj -program-headers %t1 | FileCheck %s
 
+# RUN: ld.lld -image-base=0x1000 -z max-page-size=0x2000 %t -o %t1 2>&1 | FileCheck --check-prefix=WARN %s
+# WARN: warning: -image-base: address isn't multiple of page size: 0x1000
+
+
 .global _start
 _start:
   nop