aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2025-07-01 14:05:07 +0100
committerMaciej W. Rozycki <macro@orcam.me.uk>2025-07-01 14:05:07 +0100
commita17dd69b3370d1c61ca720fe02ddaed04ed84e59 (patch)
tree6e4bd2d43a5b6963c3c0d080c877c892f1bee62d
parente65d831ce1aff700e8ec3a0e784fd0e195676649 (diff)
downloadbinutils-a17dd69b3370d1c61ca720fe02ddaed04ed84e59.zip
binutils-a17dd69b3370d1c61ca720fe02ddaed04ed84e59.tar.gz
binutils-a17dd69b3370d1c61ca720fe02ddaed04ed84e59.tar.bz2
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 <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.
-rw-r--r--bfd/elf64-mips.c4
-rw-r--r--bfd/elfn32-mips.c4
2 files changed, 4 insertions, 4 deletions
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
index 8af7190..30923ef 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 25f989b..9df93e1 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 */