]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
MIPS: Fix addend handling with rela R_MIPS16_GOT16 and R_MICROMIPS_GOT16
authorAlan Modra <amodra@gmail.com>
Tue, 1 Jul 2025 13:05:07 +0000 (14:05 +0100)
committerMaciej W. Rozycki <macro@orcam.me.uk>
Tue, 1 Jul 2025 13:05:07 +0000 (14:05 +0100)
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 <R_MIPS16_GOT16>):
Use _bfd_mips_elf_generic_reloc.
(micromips_elf64_howto_table_rela <R_MICROMIPS_GOT16>): Likewise.
* elfn32-mips.c (elf_mips16_howto_table_rela <R_MIPS16_GOT16>):
Likewise.
(elf_micromips_howto_table_rela <R_MICROMIPS_GOT16>): Likewise.

bfd/elf64-mips.c
bfd/elfn32-mips.c

index 8af7190a3e7447769f7a12df24103becfda093f6..30923ef062e1266ba6a6ed23fede4f82b0b8b996 100644 (file)
@@ -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 */
index 25f989b5b211d371f8a574597aa9483a7c985fb1..9df93e11c18162897810cf02f00a2d6d5888d86d 100644 (file)
@@ -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 */