binutils-gdb/ld/testsuite
Maciej W. Rozycki 17c6c9d9f3 MIPS: Fix the encoding of immediates with microMIPS JALX
The microMIPS JALX instruction shares the R_MICROMIPS_26_S1 relocation
with microMIPS J/JAL/JALS instructions, however unlike the latters its
encoded immediate argument is unusually shifted left by 2 rather than 1
in calculating the value used for the operation requested.

We already handle this exception in `mips_elf_calculate_relocation' in
LD, in a scenario where JALX is produced as a result of relaxing JAL for
the purpose of making a cross-mode jump.  We also get it right in the
disassembler in `decode_micromips_operand'.

What we don't correctly do however is processing microMIPS JALX produced
by GAS from an assembly source, where a non-zero constant argument or a
symbol reference with a non-zero in-place addend has been used.  In this
case the same calculation is made as for microMIPS J/JAL/JALS, causing
the wrong encoding to be produced by GAS on making an object file, and
then again by LD in the final link.  The latter in particular causes the
calculation, where the addend fits in the relocatable field, to produce
different final addresses for the same source code depending on whether
REL or RELA relocations are used.

Correct these issues by special-casing microMIPS JALX in the places that
have been previously missed.

	bfd/
	* elfxx-mips.c (mips_elf_read_rel_addend): Adjust the addend for
	microMIPS JALX.

	gas/
	* config/tc-mips.c (append_insn): Correct the encoding of a
	constant argument for microMIPS JALX.
	(tc_gen_reloc): Correct the encoding of an in-place addend for
	microMIPS JALX.
	* testsuite/gas/mips/jalx-addend.d: New test.
	* testsuite/gas/mips/jalx-addend-n32.d: New test.
	* testsuite/gas/mips/jalx-addend-n64.d: New test.
	* testsuite/gas/mips/jalx-imm.d: New test.
	* testsuite/gas/mips/jalx-imm-n32.d: New test.
	* testsuite/gas/mips/jalx-imm-n64.d: New test.
	* testsuite/gas/mips/jalx-addend.s: New test source.
	* testsuite/gas/mips/jalx-imm.s: New test source.
	* testsuite/gas/mips/mips.exp: Run the new tests.

	ld/
	* testsuite/ld-mips-elf/jalx-addend.d: New test.
	* testsuite/ld-mips-elf/jalx-addend-n32.d: New test.
	* testsuite/ld-mips-elf/jalx-addend-n64.d: New test.
	* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
2016-05-20 13:38:48 +01:00
..
config Download source only on remote host 2016-04-29 06:52:55 -07:00
ld-aarch64 [AArch64] Also puts value in place for R_AARCH64_RELATIVE 2016-05-03 11:59:37 +01:00
ld-alpha
ld-arc arc/nps400 : New cmem instructions and associated relocation 2016-04-14 17:16:46 +01:00
ld-arm Set dynamic tag VMA and size from dynamic section when possible 2016-05-13 14:34:45 +09:30
ld-auto-import
ld-avr Fix possible failure in the AVR linker tests. 2016-03-18 09:51:47 +00:00
ld-bootstrap
ld-cdtest
ld-checks
ld-cris ELF/LD: Avoid producing hidden and internal dynamic symbols 2016-04-05 15:14:54 +01:00
ld-crx
ld-cygwin
ld-d10v
ld-discard [ARC] Fix ld testsuite failures. 2016-04-05 13:46:44 +02:00
ld-elf [ARC] Fixed-linker-related-testsuite-for-ARC 2016-05-19 15:06:51 +02:00
ld-elfcomm Skip ELF STT_COMMON linker tests if shared libraries are not supported. 2016-05-03 10:44:35 +01:00
ld-elfvers
ld-elfvsb Skip debug sections when estimating distances 2016-04-27 09:13:10 -07:00
ld-elfweak
ld-fastcall
ld-frv
ld-gc Fix some AVR test failures. 2016-05-04 13:03:52 +01:00
ld-h8300
ld-i386 Don't convert R_386_GOT32 relocation 2016-05-19 12:57:11 -07:00
ld-ia64
ld-ifunc Handle local IFUNC symbols in shared object 2016-03-08 09:42:16 -08:00
ld-libs
ld-linkonce
ld-m68hc11
ld-m68k
ld-mep
ld-metag
ld-mips-elf MIPS: Fix the encoding of immediates with microMIPS JALX 2016-05-20 13:38:48 +01:00
ld-misc
ld-mmix
ld-mn10300
ld-nds32
ld-nios2
ld-pe Improve COFF/PE linker garbage collection by preventing the removal of sections containing exported symbols. 2016-03-22 12:25:08 +00:00
ld-pie
ld-plugin Handle symbols defined/referenced only within IR 2016-05-12 16:50:52 -07:00
ld-powerpc ld --gc-sections fail with __tls_get_addr_opt 2016-05-11 22:40:09 +09:30
ld-s390
ld-scripts Hack crossref tests for powerpc64 2016-05-19 14:07:06 +09:30
ld-selective Fix some AVR test failures. 2016-05-04 13:03:52 +01:00
ld-sh
ld-shared
ld-size
ld-sparc
ld-spu
ld-srec [ARC] Fixed-linker-related-testsuite-for-ARC 2016-05-19 15:06:51 +02:00
ld-tic6x
ld-tilegx
ld-tilepro
ld-undefined
ld-unique LD/ELF: Unify STB_GNU_UNIQUE handling 2016-05-17 12:21:40 +01:00
ld-v850
ld-vax-elf
ld-versados
ld-visium
ld-vxworks
ld-x86-64 Don't convert GOTPCREL relocation against large section 2016-05-13 11:07:02 -07:00
ld-xc16x
ld-xstormy16
ld-xtensa
lib [ARC] Fixed-linker-related-testsuite-for-ARC 2016-05-19 15:06:51 +02:00
ChangeLog-2004
ChangeLog-2005
ChangeLog-2006
ChangeLog-2007
ChangeLog-2008
ChangeLog-2009
ChangeLog-2010
ChangeLog-2011
ChangeLog-2012
ChangeLog-2013
ChangeLog-2014
ChangeLog-2015
ChangeLog-9303