[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