Index: lld/trunk/ELF/SyntheticSections.h =================================================================== --- lld/trunk/ELF/SyntheticSections.h +++ lld/trunk/ELF/SyntheticSections.h @@ -124,7 +124,7 @@ uint32_t getTlsIndexOff() const { return TlsIndexOff; } - unsigned getGp() const; + uintX_t getGp() const; private: // MIPS GOT consists of three parts: local, global and tls. Each part Index: lld/trunk/ELF/SyntheticSections.cpp =================================================================== --- lld/trunk/ELF/SyntheticSections.cpp +++ lld/trunk/ELF/SyntheticSections.cpp @@ -610,7 +610,8 @@ return Config->Relocatable; } -template unsigned MipsGotSection::getGp() const { +template +typename MipsGotSection::uintX_t MipsGotSection::getGp() const { return ElfSym::MipsGp->template getVA(0); } Index: lld/trunk/test/ELF/mips-options.s =================================================================== --- lld/trunk/test/ELF/mips-options.s +++ lld/trunk/test/ELF/mips-options.s @@ -3,7 +3,10 @@ # RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux %s -o %t1.o # RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux \ # RUN: %S/Inputs/mips-dynamic.s -o %t2.o -# RUN: ld.lld %t1.o %t2.o -shared -o %t.so +# RUN: echo "SECTIONS { \ +# RUN: . = 0x100000000; \ +# RUN: .got : { *(.got) } }" > %t.rel.script +# RUN: ld.lld %t1.o %t2.o --script %t.rel.script -shared -o %t.so # RUN: llvm-readobj -symbols -mips-options %t.so | FileCheck %s # REQUIRES: mips @@ -11,15 +14,15 @@ .text .globl __start __start: - lw $t0,%call16(g1)($gp) + lui $gp, %hi(%neg(%gp_rel(g1))) # CHECK: Name: _gp -# CHECK-NEXT: Value: 0x[[GP:[0-9A-F]+]] +# CHECK-NEXT: Value: 0x100008250 # CHECK: MIPS Options { # CHECK-NEXT: ODK_REGINFO { -# CHECK-NEXT: GP: 0x[[GP]] -# CHECK-NEXT: General Mask: 0x10001001 +# CHECK-NEXT: GP: 0x100008250 +# CHECK-NEXT: General Mask: 0x10000001 # CHECK-NEXT: Co-Proc Mask0: 0x0 # CHECK-NEXT: Co-Proc Mask1: 0x0 # CHECK-NEXT: Co-Proc Mask2: 0x0