[lld] r255451 - [ELF][MIPS] Fix calculation of the R_MIPS_HI16 relocation
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 14 12:51:24 PST 2015
On Sat, Dec 12, 2015 at 10:49 PM, Simon Atanasyan via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: atanasyan
> Date: Sun Dec 13 00:49:01 2015
> New Revision: 255451
>
> URL: http://llvm.org/viewvc/llvm-project?rev=255451&view=rev
> Log:
> [ELF][MIPS] Fix calculation of the R_MIPS_HI16 relocation
>
> Modified:
> lld/trunk/ELF/Target.cpp
> lld/trunk/test/ELF/mips-hilo.s
>
> Modified: lld/trunk/ELF/Target.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=255451&r1=255450&r2=255451&view=diff
>
> ==============================================================================
> --- lld/trunk/ELF/Target.cpp (original)
> +++ lld/trunk/ELF/Target.cpp Sun Dec 13 00:49:01 2015
> @@ -1287,6 +1287,8 @@ bool MipsTargetInfo<ELFT>::relocNeedsPlt
> return false;
> }
>
> +static uint16_t mipsHigh(uint64_t V) { return ((V + 0x8000) >> 16) &
> 0xffff; }
>
You don't need &0xffff since this function returns a uint16_t value.
+
> template <class ELFT>
> void MipsTargetInfo<ELFT>::relocateOne(uint8_t *Loc, uint8_t *BufEnd,
> uint32_t Type, uint64_t P,
> uint64_t SA,
> @@ -1309,10 +1311,10 @@ void MipsTargetInfo<ELFT>::relocateOne(u
> if (PairedLoc) {
> uint64_t AHL = ((Instr & 0xffff) << 16) +
> SignExtend64<16>(read32<E>(PairedLoc) & 0xffff);
> - write32<E>(Loc, (Instr & 0xffff0000) | (((SA + AHL) >> 16) &
> 0xffff));
> + write32<E>(Loc, (Instr & 0xffff0000) | mipsHigh(SA + AHL));
> } else {
> warning("Can't find matching R_MIPS_LO16 relocation for
> R_MIPS_HI16");
> - write32<E>(Loc, (Instr & 0xffff0000) | ((SA >> 16) & 0xffff));
> + write32<E>(Loc, (Instr & 0xffff0000) | mipsHigh(SA));
> }
> break;
> }
>
> Modified: lld/trunk/test/ELF/mips-hilo.s
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/mips-hilo.s?rev=255451&r1=255450&r2=255451&view=diff
>
> ==============================================================================
> --- lld/trunk/test/ELF/mips-hilo.s (original)
> +++ lld/trunk/test/ELF/mips-hilo.s Sun Dec 13 00:49:01 2015
> @@ -40,9 +40,9 @@ g1:
> # ^-- %lo(__start+4)
> # CHECK-NEXT: 2000c: 21 08 00 0c addi $8, $8, 12
> # ^-- %lo(g1+8)
> -# CHECK-NEXT: 20010: 3c 08 00 03 lui $8, 3
> +# CHECK-NEXT: 20010: 3c 08 00 04 lui $8, 4
> # ^-- %hi(l1+0x10000-4)
> -# CHECK-NEXT: 20014: 3c 09 00 04 lui $9, 4
> +# CHECK-NEXT: 20014: 3c 09 00 05 lui $9, 5
> # ^-- %hi(l1+0x20000-4)
> # CHECK-NEXT: 20018: 21 08 ff fc addi $8, $8, -4
> # ^-- %lo(l1-4)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151214/8206c0d5/attachment.html>
More information about the llvm-commits
mailing list