diff options
author | Alan Modra <amodra@gmail.com> | 2025-07-06 19:22:49 +0100 |
---|---|---|
committer | Maciej W. Rozycki <macro@orcam.me.uk> | 2025-07-06 19:22:49 +0100 |
commit | 90dfcb5aa2c904253fdaa90501451973a82030aa (patch) | |
tree | 1bec4aadd25148148aa6159a0858bed04ba844e4 | |
parent | ce08b3bb19b372877128ae9d935c1fe52afc33ae (diff) | |
download | binutils-90dfcb5aa2c904253fdaa90501451973a82030aa.zip binutils-90dfcb5aa2c904253fdaa90501451973a82030aa.tar.gz binutils-90dfcb5aa2c904253fdaa90501451973a82030aa.tar.bz2 |
MIPS: Correct HI/LO rela reloc howto special_function entries
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.
-rw-r--r-- | bfd/elf64-mips.c | 8 | ||||
-rw-r--r-- | bfd/elfn32-mips.c | 8 |
2 files changed, 8 insertions, 8 deletions
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c index 30923ef..5b55210 100644 --- a/bfd/elf64-mips.c +++ b/bfd/elf64-mips.c @@ -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 */ diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c index 9df93e1..e457bfc 100644 --- a/bfd/elfn32-mips.c +++ b/bfd/elfn32-mips.c @@ -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 */ |