[lld] r243228 - COFF: Fix image base address for 32-bit.

Rui Ueyama ruiu at google.com
Sat Jul 25 14:42:33 PDT 2015


Author: ruiu
Date: Sat Jul 25 16:42:33 2015
New Revision: 243228

URL: http://llvm.org/viewvc/llvm-project?rev=243228&view=rev
Log:
COFF: Fix image base address for 32-bit.

0x140000000 or 0x180000000 are not correct image base addresses
for 32-bit. They are actually much smaller.

Modified:
    lld/trunk/COFF/Config.h
    lld/trunk/COFF/Driver.cpp
    lld/trunk/test/COFF/armnt-blx23t.test
    lld/trunk/test/COFF/armnt-branch24t.test
    lld/trunk/test/COFF/armnt-imports.test
    lld/trunk/test/COFF/armnt-mov32t-exec.test
    lld/trunk/test/COFF/armnt-movt32t.test
    lld/trunk/test/COFF/delayimports32.test
    lld/trunk/test/COFF/hello32.test
    lld/trunk/test/COFF/locally-imported32.test

Modified: lld/trunk/COFF/Config.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Config.h?rev=243228&r1=243227&r2=243228&view=diff
==============================================================================
--- lld/trunk/COFF/Config.h (original)
+++ lld/trunk/COFF/Config.h Sat Jul 25 16:42:33 2015
@@ -105,7 +105,7 @@ struct Configuration {
   // Used for /alternatename.
   std::map<StringRef, StringRef> AlternateNames;
 
-  uint64_t ImageBase = 0x140000000U;
+  uint64_t ImageBase = -1;
   uint64_t StackReserve = 1024 * 1024;
   uint64_t StackCommit = 4096;
   uint64_t HeapReserve = 1024 * 1024;

Modified: lld/trunk/COFF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=243228&r1=243227&r2=243228&view=diff
==============================================================================
--- lld/trunk/COFF/Driver.cpp (original)
+++ lld/trunk/COFF/Driver.cpp Sat Jul 25 16:42:33 2015
@@ -244,6 +244,12 @@ WindowsSubsystem LinkerDriver::inferSubs
   return IMAGE_SUBSYSTEM_UNKNOWN;
 }
 
+static uint64_t getDefaultImageBase() {
+  if (Config->is64())
+    return Config->DLL ? 0x180000000 : 0x140000000;
+  return Config->DLL ? 0x10000000 : 0x400000;
+}
+
 bool LinkerDriver::link(llvm::ArrayRef<const char *> ArgsArr) {
   // Needed for LTO.
   llvm::InitializeAllTargetInfos();
@@ -311,7 +317,6 @@ bool LinkerDriver::link(llvm::ArrayRef<c
   // Handle /dll
   if (Args.hasArg(OPT_dll)) {
     Config->DLL = true;
-    Config->ImageBase = 0x180000000U;
     Config->ManifestID = 2;
   }
 
@@ -602,6 +607,10 @@ bool LinkerDriver::link(llvm::ArrayRef<c
     }
   }
 
+  // Set default image base if /base is not given.
+  if (Config->ImageBase == uint64_t(-1))
+    Config->ImageBase = getDefaultImageBase();
+
   Symtab.addRelative(mangle("__ImageBase"), 0);
   if (Config->MachineType == IMAGE_FILE_MACHINE_I386) {
     Config->SEHTable = Symtab.addRelative("___safe_se_handler_table", 0);

Modified: lld/trunk/test/COFF/armnt-blx23t.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-blx23t.test?rev=243228&r1=243227&r2=243228&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-blx23t.test (original)
+++ lld/trunk/test/COFF/armnt-blx23t.test Sat Jul 25 16:42:33 2015
@@ -1,7 +1,6 @@
 # RUN: yaml2obj < %s > %t.obj
 # RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link2 /base:0x400000 /entry:function \
-# RUN:   /subsystem:console /out:%t.exe %t.obj
+# RUN: lld -flavor link2 /entry:function /subsystem:console /out:%t.exe %t.obj
 # RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
 
 # BEFORE: Disassembly of section .text:

Modified: lld/trunk/test/COFF/armnt-branch24t.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-branch24t.test?rev=243228&r1=243227&r2=243228&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-branch24t.test (original)
+++ lld/trunk/test/COFF/armnt-branch24t.test Sat Jul 25 16:42:33 2015
@@ -1,7 +1,6 @@
 # RUN: yaml2obj < %s > %t.obj
 # RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link2 /base:0x400000 /entry:function \
-# RUN:   /subsystem:console /out:%t.exe %t.obj
+# RUN: lld -flavor link2 /entry:function /subsystem:console /out:%t.exe %t.obj
 # RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
 
 # BEFORE: Disassembly of section .text:

Modified: lld/trunk/test/COFF/armnt-imports.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-imports.test?rev=243228&r1=243227&r2=243228&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-imports.test (original)
+++ lld/trunk/test/COFF/armnt-imports.test Sat Jul 25 16:42:33 2015
@@ -1,6 +1,5 @@
 # RUN: yaml2obj < %s > %t.obj
-# RUN: lld -flavor link /out:%t.exe /base:0x400000 /subsystem:console \
-# RUN:   %t.obj %p/Inputs/library.lib
+# RUN: lld -flavor link /out:%t.exe /subsystem:console %t.obj %p/Inputs/library.lib
 # RUN: llvm-readobj -coff-imports %t.exe | FileCheck %s
 
 # CHECK: Import {

Modified: lld/trunk/test/COFF/armnt-mov32t-exec.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-mov32t-exec.test?rev=243228&r1=243227&r2=243228&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-mov32t-exec.test (original)
+++ lld/trunk/test/COFF/armnt-mov32t-exec.test Sat Jul 25 16:42:33 2015
@@ -1,6 +1,6 @@
 # RUN: yaml2obj < %s > %t.obj
 # RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link /base:0x400000 /out:%t.exe /subsystem:console /entry:get_function %t.obj
+# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:get_function %t.obj
 # RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
 
 # BEFORE: Disassembly of section .text:

Modified: lld/trunk/test/COFF/armnt-movt32t.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/armnt-movt32t.test?rev=243228&r1=243227&r2=243228&view=diff
==============================================================================
--- lld/trunk/test/COFF/armnt-movt32t.test (original)
+++ lld/trunk/test/COFF/armnt-movt32t.test Sat Jul 25 16:42:33 2015
@@ -1,6 +1,6 @@
 # RUN: yaml2obj < %s > %t.obj
 # RUN: llvm-objdump -d %t.obj | FileCheck %s -check-prefix BEFORE
-# RUN: lld -flavor link2 /base:0x400000 /entry:get_buffer /subsystem:console /out:%t.exe %t.obj
+# RUN: lld -flavor link2 /entry:get_buffer /subsystem:console /out:%t.exe %t.obj
 # RUN: llvm-objdump -d %t.exe | FileCheck %s -check-prefix AFTER
 
 # BEFORE: Disassembly of section .text:

Modified: lld/trunk/test/COFF/delayimports32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/delayimports32.test?rev=243228&r1=243227&r2=243228&view=diff
==============================================================================
--- lld/trunk/test/COFF/delayimports32.test (original)
+++ lld/trunk/test/COFF/delayimports32.test Sat Jul 25 16:42:33 2015
@@ -19,11 +19,11 @@ IMPORT-NEXT:   BoundDelayImportTable: 0x
 IMPORT-NEXT:   UnloadDelayImportTable: 0x0
 IMPORT-NEXT:   Import {
 IMPORT-NEXT:     Symbol: ExitProcess (0)
-IMPORT-NEXT:     Address: 0x40002029
+IMPORT-NEXT:     Address: 0x402029
 IMPORT-NEXT:   }
 IMPORT-NEXT:   Import {
 IMPORT-NEXT:     Symbol: MessageBoxA (0)
-IMPORT-NEXT:     Address: 0x1
+IMPORT-NEXT:     Address: 0x0
 IMPORT-NEXT:   }
 IMPORT-NEXT: }
 
@@ -70,16 +70,16 @@ BASEREL-NEXT:     Address: 0x2046
 BASEREL-NEXT:   }
 BASEREL-NEXT: ]
 
-DISASM:      202b:      68 20 10 00 40  pushl   $1073745952
-DISASM-NEXT: 2030:      68 00 30 00 40  pushl   $1073754112
+DISASM:      202b:      68 20 10 40 00  pushl   $4198432
+DISASM-NEXT: 2030:      68 00 30 40 00  pushl   $4206592
 DISASM-NEXT: 2035:      e8 c6 ff ff ff  calll   -58 <_main at 0>
 DISASM-NEXT: 203a:      5a      popl    %edx
 DISASM-NEXT: 203b:      59      popl    %ecx
 DISASM-NEXT: 203c:      ff e0   jmpl    *%eax
 DISASM-NEXT: 203e:      51      pushl   %ecx
 DISASM-NEXT: 203f:      52      pushl   %edx
-DISASM-NEXT: 2040:      68 28 10 00 40  pushl   $1073745960
-DISASM-NEXT: 2045:      68 00 30 00 40  pushl   $1073754112
+DISASM-NEXT: 2040:      68 28 10 40 00  pushl   $4198440
+DISASM-NEXT: 2045:      68 00 30 40 00  pushl   $4206592
 DISASM-NEXT: 204a:      e8 b1 ff ff ff  calll   -79 <_main at 0>
 DISASM-NEXT: 204f:      5a      popl    %edx
 DISASM-NEXT: 2050:      59      popl    %ecx

Modified: lld/trunk/test/COFF/hello32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/hello32.test?rev=243228&r1=243227&r2=243228&view=diff
==============================================================================
--- lld/trunk/test/COFF/hello32.test (original)
+++ lld/trunk/test/COFF/hello32.test Sat Jul 25 16:42:33 2015
@@ -29,7 +29,7 @@ HEADER-NEXT:   SizeOfUninitializedData:
 HEADER-NEXT:   AddressOfEntryPoint: 0x2000
 HEADER-NEXT:   BaseOfCode: 0x2000
 HEADER-NEXT:   BaseOfData: 0x0
-HEADER-NEXT:   ImageBase: 0x40000000
+HEADER-NEXT:   ImageBase: 0x400000
 HEADER-NEXT:   SectionAlignment: 4096
 HEADER-NEXT:   FileAlignment: 512
 HEADER-NEXT:   MajorOperatingSystemVersion: 6

Modified: lld/trunk/test/COFF/locally-imported32.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/locally-imported32.test?rev=243228&r1=243227&r2=243228&view=diff
==============================================================================
--- lld/trunk/test/COFF/locally-imported32.test (original)
+++ lld/trunk/test/COFF/locally-imported32.test Sat Jul 25 16:42:33 2015
@@ -6,7 +6,7 @@
 # CHECK-NEXT: 1000 00200000
 
 # CHECK:      Contents of section .rdata:
-# CHECK-NEXT: 2000 04100040
+# CHECK-NEXT: 2000 04104000
 
 ---
 header:





More information about the llvm-commits mailing list