Index: ELF/OutputSections.cpp =================================================================== --- ELF/OutputSections.cpp +++ ELF/OutputSections.cpp @@ -724,7 +724,7 @@ 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::DynSymTab->getNumSymbols()}); Add({DT_MIPS_LOCAL_GOTNO, Out::Got->getMipsLocalEntriesNum()}); if (const SymbolBody *B = Out::Got->getMipsFirstGlobalEntry()) Index: test/ELF/mips-dynamic.s =================================================================== --- test/ELF/mips-dynamic.s +++ test/ELF/mips-dynamic.s @@ -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 @@ -45,13 +49,15 @@ # 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