diff options
author | Maciej W. Rozycki <macro@imgtec.com> | 2016-05-24 13:54:31 +0100 |
---|---|---|
committer | Maciej W. Rozycki <macro@imgtec.com> | 2016-05-24 14:11:50 +0100 |
commit | 44d3da2338157ad7acfd6facbcfb38ed6ec94fa1 (patch) | |
tree | 58d2bfee6de323bf7aa36f75d3906119d18ade52 /gas/config | |
parent | 4512dafa508c4b148996f2d67222a82dd018cdd3 (diff) | |
download | gdb-44d3da2338157ad7acfd6facbcfb38ed6ec94fa1.zip gdb-44d3da2338157ad7acfd6facbcfb38ed6ec94fa1.tar.gz gdb-44d3da2338157ad7acfd6facbcfb38ed6ec94fa1.tar.bz2 |
MIPS/GAS: Treat local jump relocs the same no matter if REL or RELA
Do not convert jump relocs against local MIPS16 or microMIPS symbols to
refer to a section symbol instead even on RELA targets, as it makes it
impossible for the linker to make a JAL to JALX conversion based on ISA
symbol annotation, breaking regular and compressed MIPS interlinking.
gas/
* config/tc-mips.c (mips_fix_adjustable): Also return 0 for
jump relocations against MIPS16 or microMIPS symbols on RELA
targets.
* testsuite/gas/mips/jalx-local.d: New test.
* testsuite/gas/mips/jalx-local-n32.d: New test.
* testsuite/gas/mips/jalx-local-n64.d: New test.
* testsuite/gas/mips/jalx-local.s: New test source.
* testsuite/gas/mips/mips.exp: Run the new tests.
ld/
* testsuite/ld-mips-elf/jalx-local.d: New test.
* testsuite/ld-mips-elf/jalx-local-n32.d: New test.
* testsuite/ld-mips-elf/jalx-local-n64.d: New test.
* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-mips.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 82bd830..2e8be58 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -17165,9 +17165,9 @@ mips_fix_adjustable (fixS *fixp) There is a further restriction: 5. We cannot reduce jump relocations (R_MIPS_26, R_MIPS16_26 or - R_MICROMIPS_26_S1) against MIPS16 or microMIPS symbols on - targets with in-place addends; the relocation field cannot - encode the low bit. + R_MICROMIPS_26_S1) against MIPS16 or microMIPS symbols because + we need to keep the MIPS16 or microMIPS symbol for the purpose + of converting JAL to JALX instructions in the linker. For simplicity, we deal with (3)-(4) by not reducing _any_ relocation against a MIPS16 symbol. We deal with (5) by by not reducing any @@ -17182,10 +17182,9 @@ mips_fix_adjustable (fixS *fixp) that we have for MIPS16 symbols. */ if (fixp->fx_subsy == NULL && (ELF_ST_IS_MIPS16 (S_GET_OTHER (fixp->fx_addsy)) - || *symbol_get_tc (fixp->fx_addsy) - || (HAVE_IN_PLACE_ADDENDS - && ELF_ST_IS_MICROMIPS (S_GET_OTHER (fixp->fx_addsy)) - && jmp_reloc_p (fixp->fx_r_type)))) + || (ELF_ST_IS_MICROMIPS (S_GET_OTHER (fixp->fx_addsy)) + && jmp_reloc_p (fixp->fx_r_type)) + || *symbol_get_tc (fixp->fx_addsy))) return 0; return 1; |