From: Alan Modra Date: Tue, 1 Jul 2025 13:05:07 +0000 (+0100) Subject: MIPS: Fix addend handling with rela R_MIPS16_GOT16 and R_MICROMIPS_GOT16 X-Git-Tag: binutils-2_45~204 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a17dd69b3370d1c61ca720fe02ddaed04ed84e59;p=thirdparty%2Fbinutils-gdb.git MIPS: Fix addend handling with rela R_MIPS16_GOT16 and R_MICROMIPS_GOT16 In rela howtos these relocations should not be using _bfd_mips_elf_got16_reloc. That special function is for extracting addends from section contents, and only for that (ie. it doesn't subtract gp). Make these rela howtos like the corresponding R_MIPS_GOT16 rela howto. * elf64-mips.c (mips16_elf64_howto_table_rela ): Use _bfd_mips_elf_generic_reloc. (micromips_elf64_howto_table_rela ): Likewise. * elfn32-mips.c (elf_mips16_howto_table_rela ): Likewise. (elf_micromips_howto_table_rela ): Likewise. --- diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c index 8af7190a3e7..30923ef062e 100644 --- a/bfd/elf64-mips.c +++ b/bfd/elf64-mips.c @@ -1931,7 +1931,7 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] = false, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - _bfd_mips_elf_got16_reloc, /* special_function */ + _bfd_mips_elf_generic_reloc, /* special_function */ "R_MIPS16_GOT16", /* name */ false, /* partial_inplace */ 0, /* src_mask */ @@ -2675,7 +2675,7 @@ static reloc_howto_type micromips_elf64_howto_table_rela[] = false, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - _bfd_mips_elf_got16_reloc, /* special_function */ + _bfd_mips_elf_generic_reloc, /* special_function */ "R_MICROMIPS_GOT16", /* name */ false, /* partial_inplace */ 0, /* src_mask */ diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c index 25f989b5b21..9df93e11c18 100644 --- a/bfd/elfn32-mips.c +++ b/bfd/elfn32-mips.c @@ -1911,7 +1911,7 @@ static reloc_howto_type elf_mips16_howto_table_rela[] = false, /* pc_relative */ 0, /* bitpos */ complain_overflow_dont, /* complain_on_overflow */ - _bfd_mips_elf_got16_reloc, /* special_function */ + _bfd_mips_elf_generic_reloc, /* special_function */ "R_MIPS16_GOT16", /* name */ false, /* partial_inplace */ 0, /* src_mask */ @@ -2655,7 +2655,7 @@ static reloc_howto_type elf_micromips_howto_table_rela[] = false, /* pc_relative */ 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ - _bfd_mips_elf_got16_reloc, /* special_function */ + _bfd_mips_elf_generic_reloc, /* special_function */ "R_MICROMIPS_GOT16", /* name */ false, /* partial_inplace */ 0, /* src_mask */