]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
MIPS: Correct HI/LO rela reloc howto special_function entries
authorAlan Modra <amodra@gmail.com>
Sun, 6 Jul 2025 18:22:49 +0000 (19:22 +0100)
committerMaciej W. Rozycki <macro@orcam.me.uk>
Sun, 6 Jul 2025 18:22:49 +0000 (19:22 +0100)
The patch corrects the mips16 and micromips rela tables to *not*
use _bfd_mips_elf_{hi,lo}16_reloc.  These special functions are
inappropriate for RELA relocs where addends are in the reloc rather
than in the section contents.  See corresponding rela R_MIPS howtos.

bfd/
* elf64-mips.c (mips16_elf64_howto_table_rela)
<R_MIPS16_HI16, R_MIPS16_LO16>: Use _bfd_mips_elf_generic_reloc
special_function.
(micromips_elf64_howto_table_rela)
<R_MICROMIPS_HI16, R_MICROMIPS_LO16>: Similarly.
* elfn32-mips.c: As for elf64-mips.c.

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

index 30923ef062e1266ba6a6ed23fede4f82b0b8b996..5b5521079e1b51d0b0f3a90bc706f4596e8f1f63 100644 (file)
@@ -1961,7 +1961,7 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] =
         false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        _bfd_mips_elf_hi16_reloc, /* special_function */
+        _bfd_mips_elf_generic_reloc, /* special_function */
         "R_MIPS16_HI16",       /* name */
         false,                 /* partial_inplace */
         0,                     /* src_mask */
@@ -1976,7 +1976,7 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] =
         false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        _bfd_mips_elf_lo16_reloc, /* special_function */
+        _bfd_mips_elf_generic_reloc, /* special_function */
         "R_MIPS16_LO16",       /* name */
         false,                 /* partial_inplace */
         0,                     /* src_mask */
@@ -2615,7 +2615,7 @@ static reloc_howto_type micromips_elf64_howto_table_rela[] =
         false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        _bfd_mips_elf_hi16_reloc, /* special_function */
+        _bfd_mips_elf_generic_reloc, /* special_function */
         "R_MICROMIPS_HI16",    /* name */
         false,                 /* partial_inplace */
         0,                     /* src_mask */
@@ -2630,7 +2630,7 @@ static reloc_howto_type micromips_elf64_howto_table_rela[] =
         false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        _bfd_mips_elf_lo16_reloc, /* special_function */
+        _bfd_mips_elf_generic_reloc, /* special_function */
         "R_MICROMIPS_LO16",    /* name */
         false,                 /* partial_inplace */
         0,                     /* src_mask */
index 9df93e11c18162897810cf02f00a2d6d5888d86d..e457bfc984913dcdcb43f8affef54f63bb01b42d 100644 (file)
@@ -1941,7 +1941,7 @@ static reloc_howto_type elf_mips16_howto_table_rela[] =
         false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        _bfd_mips_elf_hi16_reloc, /* special_function */
+        _bfd_mips_elf_generic_reloc, /* special_function */
         "R_MIPS16_HI16",       /* name */
         false,                 /* partial_inplace */
         0,                     /* src_mask */
@@ -1956,7 +1956,7 @@ static reloc_howto_type elf_mips16_howto_table_rela[] =
         false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        _bfd_mips_elf_lo16_reloc, /* special_function */
+        _bfd_mips_elf_generic_reloc, /* special_function */
         "R_MIPS16_LO16",       /* name */
         false,                 /* partial_inplace */
         0,                     /* src_mask */
@@ -2595,7 +2595,7 @@ static reloc_howto_type elf_micromips_howto_table_rela[] =
         false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        _bfd_mips_elf_hi16_reloc, /* special_function */
+        _bfd_mips_elf_generic_reloc, /* special_function */
         "R_MICROMIPS_HI16",    /* name */
         false,                 /* partial_inplace */
         0,                     /* src_mask */
@@ -2610,7 +2610,7 @@ static reloc_howto_type elf_micromips_howto_table_rela[] =
         false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        _bfd_mips_elf_lo16_reloc, /* special_function */
+        _bfd_mips_elf_generic_reloc, /* special_function */
         "R_MICROMIPS_LO16",    /* name */
         false,                 /* partial_inplace */
         0,                     /* src_mask */