From: QBos07 Date: Fri, 9 May 2025 13:49:44 +0000 (+0000) Subject: PR 3298 Fix SuperH relaxation overriding wrong intruction X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6cd9586f7f502d9034751df1b88b1ae91a34a8b6;p=thirdparty%2Fbinutils-gdb.git PR 3298 Fix SuperH relaxation overriding wrong intruction when doing load store switching it wrongly adjusts the address of the R_SH_USES reloc and not the actual offset from that instruction. This is an issue if the pc-relative function call relaxation gets done in a later pass wich will result in overriding the wrong instruction. --- diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index 39a837ce3d8..abb7f5eb8ab 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -1429,9 +1429,9 @@ sh_elf_swap_insns (bfd *abfd, asection *sec, void *relocs, off = irel->r_offset + 4 + irel->r_addend; if (off == addr) - irel->r_offset += 2; + irel->r_addend += 2; else if (off == addr + 2) - irel->r_offset -= 2; + irel->r_addend -= 2; } if (irel->r_offset == addr)