Set DT_MIPS_BASE_ADDRESS correctly if -image-base is given.
authorRui Ueyama <ruiu@google.com>
Thu, 14 Jul 2016 17:40:18 +0000 (17:40 +0000)
committerRui Ueyama <ruiu@google.com>
Thu, 14 Jul 2016 17:40:18 +0000 (17:40 +0000)
Differential Revision: http://reviews.llvm.org/D22323

llvm-svn: 275446

lld/ELF/OutputSections.cpp
lld/test/ELF/mips-dynamic.s

index 56131d5..7c94e84 100644 (file)
@@ -724,7 +724,7 @@ template <class ELFT> void DynamicSection<ELFT>::finalize() {
   if (Config->EMachine == EM_MIPS) {
     Add({DT_MIPS_RLD_VERSION, 1});
     Add({DT_MIPS_FLAGS, RHF_NOTPOT});
-    Add({DT_MIPS_BASE_ADDRESS, (uintX_t)Target->getImageBase()});
+    Add({DT_MIPS_BASE_ADDRESS, Config->ImageBase});
     Add({DT_MIPS_SYMTABNO, Out<ELFT>::DynSymTab->getNumSymbols()});
     Add({DT_MIPS_LOCAL_GOTNO, Out<ELFT>::Got->getMipsLocalEntriesNum()});
     if (const SymbolBody *B = Out<ELFT>::Got->getMipsFirstGlobalEntry())
index cceaf6d..3cb5c63 100644 (file)
@@ -8,6 +8,10 @@
 # RUN: llvm-readobj -sections -dynamic-table %t.exe \
 # RUN:   | FileCheck -check-prefix=EXE %s
 
+# RUN: ld.lld %t.o --image-base=0x123000 %td.so -o %t.exe
+# RUN: llvm-readobj -sections -dynamic-table %t.exe \
+# RUN:   | FileCheck -check-prefix=IMAGE_BASE %s
+
 # RUN: ld.lld -shared %t.o %td.so -o %t.so
 # RUN: llvm-readobj -sections -dyn-symbols -dynamic-table %t.so \
 # RUN:   | FileCheck -check-prefix=DSO %s
 # EXE-DAG:    0x00000003 PLTGOT               [[GOTADDR]]
 # EXE-DAG:    0x70000001 MIPS_RLD_VERSION     1
 # EXE-DAG:    0x70000005 MIPS_FLAGS           NOTPOT
-# EXE-DAG:    0x70000006 MIPS_BASE_ADDRESS
+# EXE-DAG:    0x70000006 MIPS_BASE_ADDRESS    0x10000
 # EXE-DAG:    0x7000000A MIPS_LOCAL_GOTNO     2
 # EXE-DAG:    0x70000011 MIPS_SYMTABNO        2
 # EXE-DAG:    0x70000013 MIPS_GOTSYM          0x2
 # EXE-DAG:    0x70000016 MIPS_RLD_MAP         [[RLDMAPADDR]]
 # EXE:      ]
 
+# IMAGE_BASE: 0x70000006 MIPS_BASE_ADDRESS    0x123000
+
 # DSO:      Sections [
 # DSO:          Name: .dynamic
 # DSO-NEXT:     Type: SHT_DYNAMIC