diff options
| author | Simon Atanasyan <simon@atanasyan.com> | 2014-04-11 04:33:21 +0000 |
|---|---|---|
| committer | Simon Atanasyan <simon@atanasyan.com> | 2014-04-11 04:33:21 +0000 |
| commit | 62377c68750933c5ca0a9e53bd1b0019c5da1df8 (patch) | |
| tree | 691629ba9e580aea62ed54ca6037cfd393b20faa /lld/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp | |
| parent | 42ac0dd3c35c9e2fedcfaeb4814776789bbcdaec (diff) | |
| download | bcm5719-llvm-62377c68750933c5ca0a9e53bd1b0019c5da1df8.tar.gz bcm5719-llvm-62377c68750933c5ca0a9e53bd1b0019c5da1df8.zip | |
[Mips] R_MIPS_PC32 relocation support.
llvm-svn: 206018
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; |

