Add -mrelax-relocations= to x86 assembler
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 3 Feb 2016 16:25:15 +0000 (08:25 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 3 Feb 2016 16:25:15 +0000 (08:25 -0800)
commit0cb4071ef9e10f703220f5e731141bf438aca16e
tree273468cc997e953c37aff7edc3179a716ff3e372
parent3d8efabf21cfeb2f6244fadcf915da4c7f51ed6f
Add -mrelax-relocations= to x86 assembler

The x86 relax relocations introduced in binutils 2.26 aren't supported
by linker on Solaris older than Solaris 12.  To use x86 assembler with
older Solaris linker, this patch adds

1. A command line option -mrelax-relocations= to x86 assembler to
control whether to generate relax relocations.
2. A configure option --enable-x86-relax-relocations to decide whether
x86 assembler should generate relax relocations by default.  It is
defaulted to yes, except for x86 Solaris targets older than Solaris 12.

gas/

PR gas/19520
* NEWS: Mention new command line option -mrelax-relocations and
new configure option --enable-x86-relax-relocations for x86
target.
* config.in: Regenerated.
* configure.ac: Add --enable-x86-relax-relocations.
(ac_default_x86_relax_relocations): New.  Default to 1 except
for x86 Solaris targets older than Solaris 12.
(DEFAULT_GENERATE_X86_RELAX_RELOCATIONS): Define.
* configure: Likewise.
* config/tc-i386.c (generate_relax_relocations): New.
(OPTION_MRELAX_RELOCATIONS): Likewise.
(output_disp): Don't generate relax relocations if
generate_relax_relocations is 0.
(md_longopts): Add -mrelax-relocations.
(md_show_usage): Likewise.
(md_parse_option): Handle OPTION_MRELAX_RELOCATIONS.
* doc/c-i386.texi: Document -mrelax-relocations=.
* testsuite/gas/i386/got-no-relax.d: New file.
* testsuite/gas/i386/x86-64-gotpcrel-no-relax.d: Likewise.
* testsuite/gas/i386/got.d: Pass -mrelax-relocations=yes to as.
* testsuite/gas/i386/localpic.d: Likewise.
* testsuite/gas/i386/mixed-mode-reloc32.d: Likewise.
* testsuite/gas/i386/reloc32.d: Likewise.
* testsuite/gas/i386/x86-64-gotpcrel.d: Likewise.
* testsuite/gas/i386/x86-64-localpic.d: Likewise.
* testsuite/gas/i386/ilp32/x86-64-gotpcrel.d: Likewise.
* testsuite/gas/i386/ilp32/x86-64-localpic.d: Likewise.
* testsuite/gas/i386/i386.exp: Run got-no-relax and
x86-64-gotpcrel-no-relax.

ld/

PR gas/19520
* testsuite/ld-i386/branch1.d: Pass -mrelax-relocations=yes to as.
* testsuite/ld-i386/call1.d: Likewise.
* testsuite/ld-i386/call2.d: Likewise.
* testsuite/ld-i386/call3a.d: Likewise.
* testsuite/ld-i386/call3b.d: Likewise.
* testsuite/ld-i386/call3c.d: Likewise.
* testsuite/ld-i386/call3d.d: Likewise.
* testsuite/ld-i386/call3e.d: Likewise.
* testsuite/ld-i386/call3f.d: Likewise.
* testsuite/ld-i386/call3g.d: Likewise.
* testsuite/ld-i386/call3h.d: Likewise.
* testsuite/ld-i386/jmp1.d: Likewise.
* testsuite/ld-i386/jmp2.d: Likewise.
* testsuite/ld-i386/lea1c.d: Likewise.
* testsuite/ld-i386/load1.d: Likewise.
* testsuite/ld-i386/load2.d: Likewise.
* testsuite/ld-i386/load3.d: Likewise.
* testsuite/ld-i386/load4a.d: Likewise.
* testsuite/ld-i386/load5a.d: Likewise.
* testsuite/ld-i386/mov2b.d: Likewise.
* testsuite/ld-i386/mov3.d: Likewise.
* testsuite/ld-ifunc/ifunc-21-x86-64.d: Likewise.
* testsuite/ld-ifunc/ifunc-22-x86-64.d: Likewise.
* testsuite/ld-ifunc/ifunc-5r-local-x86-64.d: Likewise.
* testsuite/ld-x86-64/call1a.d: Likewise.
* testsuite/ld-x86-64/call1b.d: Likewise.
* testsuite/ld-x86-64/call1c.d: Likewise.
* testsuite/ld-x86-64/call1d.d: Likewise.
* testsuite/ld-x86-64/call1e.d: Likewise.
* testsuite/ld-x86-64/call1f.d: Likewise.
* testsuite/ld-x86-64/call1h.d: Likewise.
* testsuite/ld-x86-64/call1i.d: Likewise.
* testsuite/ld-x86-64/load1a.d: Likewise.
* testsuite/ld-x86-64/load1b.d: Likewise.
* testsuite/ld-i386/got1a.S: Load GOT into %ecx and use it.
* testsuite/ld-i386/got1.dd: Updated.
* testsuite/ld-i386/got1d.S (1): Removed.
* testsuite/ld-i386/i386.exp: Add -Wa,-mrelax-relocations=yes.
* testsuite/ld-x86-64/x86-64.exp: Likewise.
59 files changed:
gas/ChangeLog
gas/NEWS
gas/config.in
gas/config/tc-i386.c
gas/configure
gas/configure.ac
gas/doc/c-i386.texi
gas/testsuite/gas/i386/got-no-relax.d [new file with mode: 0644]
gas/testsuite/gas/i386/got.d
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/ilp32/x86-64-gotpcrel.d
gas/testsuite/gas/i386/ilp32/x86-64-localpic.d
gas/testsuite/gas/i386/localpic.d
gas/testsuite/gas/i386/mixed-mode-reloc32.d
gas/testsuite/gas/i386/reloc32.d
gas/testsuite/gas/i386/x86-64-gotpcrel-no-relax.d [new file with mode: 0644]
gas/testsuite/gas/i386/x86-64-gotpcrel.d
gas/testsuite/gas/i386/x86-64-localpic.d
ld/ChangeLog
ld/testsuite/ld-i386/branch1.d
ld/testsuite/ld-i386/call1.d
ld/testsuite/ld-i386/call2.d
ld/testsuite/ld-i386/call3a.d
ld/testsuite/ld-i386/call3b.d
ld/testsuite/ld-i386/call3c.d
ld/testsuite/ld-i386/call3d.d
ld/testsuite/ld-i386/call3e.d
ld/testsuite/ld-i386/call3f.d
ld/testsuite/ld-i386/call3g.d
ld/testsuite/ld-i386/call3h.d
ld/testsuite/ld-i386/got1.dd
ld/testsuite/ld-i386/got1a.S
ld/testsuite/ld-i386/got1d.S
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-i386/jmp1.d
ld/testsuite/ld-i386/jmp2.d
ld/testsuite/ld-i386/lea1c.d
ld/testsuite/ld-i386/load1.d
ld/testsuite/ld-i386/load2.d
ld/testsuite/ld-i386/load3.d
ld/testsuite/ld-i386/load4a.d
ld/testsuite/ld-i386/load5a.d
ld/testsuite/ld-i386/mov2b.d
ld/testsuite/ld-i386/mov3.d
ld/testsuite/ld-ifunc/ifunc-21-x86-64.d
ld/testsuite/ld-ifunc/ifunc-22-x86-64.d
ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d
ld/testsuite/ld-x86-64/call1a.d
ld/testsuite/ld-x86-64/call1b.d
ld/testsuite/ld-x86-64/call1c.d
ld/testsuite/ld-x86-64/call1d.d
ld/testsuite/ld-x86-64/call1e.d
ld/testsuite/ld-x86-64/call1f.d
ld/testsuite/ld-x86-64/call1g.d
ld/testsuite/ld-x86-64/call1h.d
ld/testsuite/ld-x86-64/call1i.d
ld/testsuite/ld-x86-64/load1a.d
ld/testsuite/ld-x86-64/load1b.d
ld/testsuite/ld-x86-64/x86-64.exp