diff options
Diffstat (limited to 'include/llvm/Object/RelocVisitor.h')
| -rw-r--r-- | include/llvm/Object/RelocVisitor.h | 15 | 
1 files changed, 11 insertions, 4 deletions
| diff --git a/include/llvm/Object/RelocVisitor.h b/include/llvm/Object/RelocVisitor.h index 950e2ed0e338..d5e4258cb0a7 100644 --- a/include/llvm/Object/RelocVisitor.h +++ b/include/llvm/Object/RelocVisitor.h @@ -100,9 +100,9 @@ private:        case Triple::mips64:          switch (RelocType) {          case llvm::ELF::R_MIPS_32: -          return visitELF_MIPS_32(R, Value); +          return visitELF_MIPS64_32(R, Value);          case llvm::ELF::R_MIPS_64: -          return visitELF_MIPS_64(R, Value); +          return visitELF_MIPS64_64(R, Value);          default:            HasError = true;            return RelocToApply(); @@ -313,11 +313,18 @@ private:    /// MIPS ELF    RelocToApply visitELF_MIPS_32(RelocationRef R, uint64_t Value) { -    uint32_t Res = (Value)&0xFFFFFFFF; +    uint32_t Res = Value & 0xFFFFFFFF; +    return RelocToApply(Res, 4); +  } + +  /// MIPS64 ELF +  RelocToApply visitELF_MIPS64_32(RelocationRef R, uint64_t Value) { +    int64_t Addend = getELFAddend(R); +    uint32_t Res = (Value + Addend) & 0xFFFFFFFF;      return RelocToApply(Res, 4);    } -  RelocToApply visitELF_MIPS_64(RelocationRef R, uint64_t Value) { +  RelocToApply visitELF_MIPS64_64(RelocationRef R, uint64_t Value) {      int64_t Addend = getELFAddend(R);      uint64_t Res = (Value + Addend);      return RelocToApply(Res, 8); | 
