old-cross-binutils/ld/testsuite
Maciej W. Rozycki b416ba9b50 MIPS/GAS: Don't convert PC-relative REL relocs against absolute symbols
Don't convert PC-relative REL relocations against absolute symbols to
section-relative references and retain the original symbol reference
instead.  Offsets into the absolute section may overflow the limited
range of their in-place addend field, causing an assembly error, e.g.:

$ cat test.s
	.text
	.globl	foo
	.ent	foo
foo:
	b	bar
	.end	foo

	.set	bar, 0x12345678
$ as -EB -32 -o test.o test.s
test.s: Assembler messages:
test.s:3: Error: relocation overflow
$

With the original reference retained the source can now be assembled and
linked successfully:

$ as -EB -32 -o test.o test.s
$ objdump -dr test.o

test.o:     file format elf32-tradbigmips

Disassembly of section .text:

00000000 <foo>:
   0:	1000ffff 	b	0 <foo>
			0: R_MIPS_PC16	bar
   4:	00000000 	nop
	...
$ ld -melf32btsmip -Ttext 0x12340000 -e foo -o test test.o
$ objdump -dr test

test:     file format elf32-tradbigmips

Disassembly of section .text:

12340000 <foo>:
12340000:	1000159d 	b	12345678 <bar>
12340004:	00000000 	nop
	...
$

For simplicity always retain the original symbol reference, even if it
would indeed fit.

Making TC_FORCE_RELOCATION_ABS separate from TC_FORCE_RELOCATION causes
R_MICROMIPS_PC7_S1, R_MICROMIPS_PC10_S1 and R_MICROMIPS_PC16_S1 branch
relocations against absolute symbols to be converted on RELA targets to
section-relative references.  This is an intended effect of this change.
Absolute symbols carry no ISA annotation in their `st_other' field and
their value is not going to change with linker relaxation, so it is safe
to discard the original reference and keep the calculated final symbol
value only in the relocation's addend.

Similarly R6 R_MIPS_PCHI16 and R_MIPS_PCLO16 relocations referring
absolute symbols can be safely converted even on REL targets, as there
the in-place addend of these relocations covers the entire 32-bit
address space so it can hold the calculated final symbol value, and
likewise the value referred won't be affected by any linker relaxation.

Add a set of suitable test cases and enable REL linker tests which now
work and were previously used as dump patterns for RELA tests only.

	gas/
	* config/tc-mips.h (TC_FORCE_RELOCATION_ABS): New macro.
	(mips_force_relocation_abs): New prototype.
	* config/tc-mips.c (mips_force_relocation_abs): New function.
	* testsuite/gas/mips/branch-absolute.d: Adjust dump patterns.
	* testsuite/gas/mips/mips16-branch-absolute.d: Likewise.
	* testsuite/gas/mips/micromips-branch-absolute-n32.d: Likewise.
	* testsuite/gas/mips/micromips-branch-absolute-n64.d: Likewise.
	* testsuite/gas/mips/micromips-branch-absolute-addend-n32.d:
	Likewise.
	* testsuite/gas/mips/micromips-branch-absolute-addend-n64.d:
	Likewise.
	* testsuite/gas/mips/branch-absolute-addend.d: New test.
	* testsuite/gas/mips/mips16-branch-absolute-addend.d: New test.
	* testsuite/gas/mips/micromips-branch-absolute-addend.d: New
	test.
	* testsuite/gas/mips/mips.exp: Run the new tests.

	ld/
	* testsuite/ld-mips-elf/mips-elf.exp: Run
	`branch-absolute-addend', `mips16-branch-absolute',
	`mips16-branch-absolute-addend' and
	`micromips-branch-absolute-addend'.
2016-07-14 20:11:03 +01:00
..
config ld: Add a linker configure option --enable-relro 2016-06-22 05:37:38 -07:00
ld-aarch64 aarch64 ld testsuite 2016-06-24 23:05:48 +09:30
ld-alpha
ld-arc [ARC] Fix/improve small data support. 2016-07-14 10:08:57 +02:00
ld-arm [ARM] Purecode compatible long branch veneer for M-profile targets with MOVW. 2016-07-05 11:39:06 +01:00
ld-auto-import
ld-avr Fix PR ld/20254 2016-06-15 12:47:46 +05:30
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 Fix more linker testsuite failures. 2016-06-28 15:55:22 +01: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 Make linker assigned symbol dynamic only for shared object 2016-02-23 05:19:03 -08:00
ld-gc Skip version check for unreferenced and undefined symbol 2016-06-28 08:08:30 -07:00
ld-h8300
ld-i386 Don't generate PLT for IFUNC GOT/pointer reference 2016-06-18 09:17:25 -07:00
ld-ia64
ld-ifunc Don't generate PLT for IFUNC GOT/pointer reference 2016-06-18 09:17:25 -07:00
ld-libs
ld-linkonce
ld-m68hc11
ld-m68k
ld-mep
ld-metag
ld-mips-elf MIPS/GAS: Don't convert PC-relative REL relocs against absolute symbols 2016-07-14 20:11:03 +01:00
ld-misc
ld-mmix
ld-mn10300
ld-nds32
ld-nios2
ld-pe Fix more linker testsuite failures. 2016-06-28 15:55:22 +01:00
ld-pie
ld-plugin Add -flto to PR ld/20321 test 2016-07-05 07:35:52 -07:00
ld-powerpc PR20337, Objdump makes poor choice of symbols 2016-07-09 16:53:33 +09:30
ld-s390 Fix PLT first entry GOT operand calculation. 2016-06-07 16:47:10 +02:00
ld-scripts Fix RX and M68HC11 linker testsuite failures. 2016-06-28 12:43:14 +01:00
ld-selective Fix some AVR test failures. 2016-05-04 13:03:52 +01:00
ld-sh Enhance GAS's .section directive so that it can take numeric values for the flags and type fields. (ELF only) 2016-02-15 11:11:46 +00:00
ld-shared
ld-size
ld-sparc
ld-spu
ld-srec [ARC] XFAIL S-Records tests for both little and big endian ARC target. 2016-06-13 16:15:58 +02:00
ld-tic6x Enhance GAS's .section directive so that it can take numeric values for the flags and type fields. (ELF only) 2016-02-15 11:11:46 +00:00
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 generate PLT for IFUNC GOT/pointer reference 2016-06-18 09:17:25 -07:00
ld-xc16x
ld-xstormy16
ld-xtensa Enhance GAS's .section directive so that it can take numeric values for the flags and type fields. (ELF only) 2016-02-15 11:11:46 +00:00
ld-z8k ld/testsuite/ld-z8k/test-ld.sh: Remove. Checked in by mistake. 2016-06-04 22:39:46 +02:00
lib ld: Add a linker configure option --enable-relro 2016-06-22 05:37:38 -07: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