diff options
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp index 0cc5630bb6f..7407ad58ed9 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp @@ -34,6 +34,12 @@ static void reloc32(uint8_t *location, uint64_t P, uint64_t S, int64_t A) { applyReloc(location, S + A, 0xffffffff); } +/// \brief R_MIPS_PC32 +/// local/external: word32 S + A i- P (truncate) +void relocpc32(uint8_t *location, uint64_t P, uint64_t S, int64_t A) { + applyReloc(location, S + A - P, 0xffffffff); +} + /// \brief R_MIPS_26 /// local : ((A | ((P + 4) & 0x3F000000)) + S) >> 2 static void reloc26loc(uint8_t *location, uint64_t P, uint64_t S, int32_t A) { @@ -154,6 +160,9 @@ error_code MipsTargetRelocationHandler::applyRelocation( case R_MIPS_JUMP_SLOT: // Ignore runtime relocations. break; + case R_MIPS_PC32: + relocpc32(location, relocVAddress, targetVAddress, ref.addend()); + break; case LLD_R_MIPS_GLOBAL_GOT: // Do nothing. break; |

