[Object][RISCV] Fix R_RISCV_SET6 and R_RISCV_SUB6 relocations resolution

Summary: These relocations had a suspicious resolution logic, given their name.
This patch makes the resolution match the LLD one, which makes more sense.

Reviewers: asb, lenary, HsiangKai, jrtc27
Reviewed By: HsiangKai
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D70396
This commit is contained in:
Luís Marques 2019-11-21 22:52:51 +00:00
parent 639311db31
commit 51e57e895e

View File

@ -363,9 +363,9 @@ static uint64_t resolveRISCV(RelocationRef R, uint64_t S, uint64_t A) {
case ELF::R_RISCV_64:
return S + RA;
case ELF::R_RISCV_SET6:
return (A + (S + RA)) & 0xFF;
return (A & 0xC0) | ((S + RA) & 0x3F);
case ELF::R_RISCV_SUB6:
return (A - (S + RA)) & 0xFF;
return (A & 0xC0) | (((A & 0x3F) - (S + RA)) & 0x3F);
case ELF::R_RISCV_ADD8:
return (A + (S + RA)) & 0xFF;
case ELF::R_RISCV_SUB8: