[lld] r289432 - [ELF][MIPS] Fix .MIPS.options ri_gp_value on MIPS64
Simon Atanasyan via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 12 06:30:18 PST 2016
Author: atanasyan
Date: Mon Dec 12 08:30:18 2016
New Revision: 289432
URL: http://llvm.org/viewvc/llvm-project?rev=289432&view=rev
Log:
[ELF][MIPS] Fix .MIPS.options ri_gp_value on MIPS64
The VA of _gp was being truncated to 32 bits when calling getVa(), but
for 64bit MIPS we need to write a 64 bit value to .MIPS.options.
Patch by Alexander Richardson.
Differential revision: https://reviews.llvm.org/D27672
Modified:
lld/trunk/ELF/SyntheticSections.cpp
lld/trunk/ELF/SyntheticSections.h
lld/trunk/test/ELF/mips-options.s
Modified: lld/trunk/ELF/SyntheticSections.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.cpp?rev=289432&r1=289431&r2=289432&view=diff
==============================================================================
--- lld/trunk/ELF/SyntheticSections.cpp (original)
+++ lld/trunk/ELF/SyntheticSections.cpp Mon Dec 12 08:30:18 2016
@@ -610,7 +610,8 @@ template <class ELFT> bool MipsGotSectio
return Config->Relocatable;
}
-template <class ELFT> unsigned MipsGotSection<ELFT>::getGp() const {
+template <class ELFT>
+typename MipsGotSection<ELFT>::uintX_t MipsGotSection<ELFT>::getGp() const {
return ElfSym<ELFT>::MipsGp->template getVA<ELFT>(0);
}
Modified: lld/trunk/ELF/SyntheticSections.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.h?rev=289432&r1=289431&r2=289432&view=diff
==============================================================================
--- lld/trunk/ELF/SyntheticSections.h (original)
+++ lld/trunk/ELF/SyntheticSections.h Mon Dec 12 08:30:18 2016
@@ -124,7 +124,7 @@ public:
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
Modified: lld/trunk/test/ELF/mips-options.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-options.s?rev=289432&r1=289431&r2=289432&view=diff
==============================================================================
--- lld/trunk/test/ELF/mips-options.s (original)
+++ lld/trunk/test/ELF/mips-options.s Mon Dec 12 08:30:18 2016
@@ -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
More information about the llvm-commits
mailing list