From 6cd9586f7f502d9034751df1b88b1ae91a34a8b6 Mon Sep 17 00:00:00 2001 From: QBos07 Date: Fri, 9 May 2025 13:49:44 +0000 Subject: [PATCH] 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. --- bfd/elf32-sh.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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) -- 2.39.5