diff options
-rw-r--r-- | lld/ELF/Target.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index 32b604e9655..088ba5c35bc 100644 --- a/lld/ELF/Target.cpp +++ b/lld/ELF/Target.cpp @@ -1099,6 +1099,14 @@ void MipsTargetInfo<ELFT>::relocateOne(uint8_t *Loc, uint8_t *BufEnd, case R_MIPS_32: add32<E>(Loc, SA); break; + case R_MIPS_CALL16: + case R_MIPS_GOT16: { + int64_t V = SA - getMipsGpAddr<ELFT>(); + if (Type == R_MIPS_GOT16) + checkInt<16>(V, Type); + write32<E>(Loc, (read32<E>(Loc) & 0xffff0000) | (V & 0xffff)); + break; + } case R_MIPS_HI16: { uint32_t Instr = read32<E>(Loc); if (PairedLoc) { @@ -1117,14 +1125,6 @@ void MipsTargetInfo<ELFT>::relocateOne(uint8_t *Loc, uint8_t *BufEnd, write32<E>(Loc, (Instr & 0xffff0000) | ((SA + AHL) & 0xffff)); break; } - case R_MIPS_CALL16: - case R_MIPS_GOT16: { - int64_t V = SA - getMipsGpAddr<ELFT>(); - if (Type == R_MIPS_GOT16) - checkInt<16>(V, Type); - write32<E>(Loc, (read32<E>(Loc) & 0xffff0000) | (V & 0xffff)); - break; - } default: error("unrecognized reloc " + Twine(Type)); } |