diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/elfnn-riscv.c | 9 | ||||
-rw-r--r-- | bfd/elfxx-riscv.c | 4 |
2 files changed, 13 insertions, 0 deletions
diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index 0570a97..a2d85db 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -2427,6 +2427,15 @@ riscv_elf_relocate_section (bfd *output_bfd, break; case R_RISCV_SUB6: + { + bfd_vma old_value = bfd_get (howto->bitsize, input_bfd, + contents + rel->r_offset); + relocation = (old_value & ~howto->dst_mask) + | (((old_value & howto->dst_mask) - relocation) + & howto->dst_mask); + } + break; + case R_RISCV_SUB8: case R_RISCV_SUB16: case R_RISCV_SUB32: diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c index afbde56..ff9607e 100644 --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -994,6 +994,10 @@ riscv_elf_add_sub_reloc (bfd *abfd, relocation = old_value + relocation; break; case R_RISCV_SUB6: + relocation = (old_value & ~howto->dst_mask) + | (((old_value & howto->dst_mask) - relocation) + & howto->dst_mask); + break; case R_RISCV_SUB8: case R_RISCV_SUB16: case R_RISCV_SUB32: |