[llvm-commits] [lld] r173527 - [ELF][X86-64] Use the correct base address.

Michael J. Spencer bigcheesegs at gmail.com
Fri Jan 25 15:23:24 PST 2013


Author: mspencer
Date: Fri Jan 25 17:23:24 2013
New Revision: 173527

URL: http://llvm.org/viewvc/llvm-project?rev=173527&view=rev
Log:
[ELF][X86-64] Use the correct base address.

Modified:
    lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h
    lld/trunk/lib/ReaderWriter/ELF/DefaultELFLayout.h
    lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.h
    lld/trunk/test/elf/phdr.objtxt

Modified: lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h?rev=173527&r1=173526&r2=173527&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h (original)
+++ lld/trunk/include/lld/ReaderWriter/ELFTargetInfo.h Fri Jan 25 17:23:24 2013
@@ -10,6 +10,7 @@
 #ifndef LLD_READER_WRITER_ELF_TARGET_INFO_H
 #define LLD_READER_WRITER_ELF_TARGET_INFO_H
 
+#include "lld/Core/LinkerOptions.h"
 #include "lld/Core/TargetInfo.h"
 #include "llvm/Object/ELF.h"
 #include "llvm/Support/ELF.h"
@@ -33,6 +34,8 @@ public:
   uint16_t getOutputType() const;
   uint16_t getOutputMachine() const;
 
+  virtual uint64_t getBaseAddress() const { return _options._baseAddress; }
+
   static std::unique_ptr<ELFTargetInfo> create(const LinkerOptions &lo);
 
   template <typename ELFT>

Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultELFLayout.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultELFLayout.h?rev=173527&r1=173526&r2=173527&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DefaultELFLayout.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DefaultELFLayout.h Fri Jan 25 17:23:24 2013
@@ -518,7 +518,7 @@ DefaultELFLayout<ELFT>::assignVirtualAdd
   if (_segments.empty())
     return;
   
-  uint64_t virtualAddress = _targetInfo.getLinkerOptions()._baseAddress;
+  uint64_t virtualAddress = _targetInfo.getBaseAddress();
   
   // HACK: This is a super dirty hack. The elf header and program header are
   // not part of a section, but we need them to be loaded at the base address

Modified: lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.h?rev=173527&r1=173526&r2=173527&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/X86_64/X86_64ELFTargetInfo.h Fri Jan 25 17:23:24 2013
@@ -30,6 +30,12 @@ public:
 
   virtual uint64_t getPageSize() const { return 0x1000; }
 
+  virtual uint64_t getBaseAddress() const {
+    if (_options._baseAddress == 0)
+      return 0x400000;
+    return _options._baseAddress;
+  }
+
 };
 } // elf
 } // lld

Modified: lld/trunk/test/elf/phdr.objtxt
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/phdr.objtxt?rev=173527&r1=173526&r2=173527&view=diff
==============================================================================
--- lld/trunk/test/elf/phdr.objtxt (original)
+++ lld/trunk/test/elf/phdr.objtxt Fri Jan 25 17:23:24 2013
@@ -1,4 +1,7 @@
-RUN: lld-core -reader ELF -writer ELF -o %t1 %p/Inputs/phdr.i386 | elf-dump %t1 |  FileCheck -check-prefix=ED %s 
+RUN: lld-core -reader ELF -writer ELF -o %t1 %p/Inputs/phdr.i386 | elf-dump %t1 |  FileCheck -check-prefix=ED %s
+
+RUN: lld -core -target x86_64-linux -output=%t1 %p/Inputs/relocs.x86-64 \
+RUN: && llvm-objdump -p %t1 | FileCheck %s -check-prefix=X86_64
 
 ED:  # Program Header 0
 ED:  (('p_type', 0x00000001)
@@ -40,3 +43,5 @@ ED:   ('p_filesz', 0x0000008c)
 ED:   ('p_memsz', 0x0000008c)
 ED:   ('p_align', 0x00001000)
 ED:  ),
+
+X86_64: vaddr 0x0000000000400000





More information about the llvm-commits mailing list