Commit Graph

3768 Commits

Author SHA1 Message Date
Alan Modra
36b8fda5d6 Make __start/__stop symbols dynamic and add testcase
bfd/
	* elflink.c (bfd_elf_define_start_stop): Make __start and __stop
	symbols dynamic.
ld/
	* testsuite/ld-elf/pr21964-3a.c: New file.
	* testsuite/ld-elf/pr21964-3c.c: New file.
	* testsuite/ld-elf/shared.exp: Run new __start/__stop testcase.
2018-01-30 10:09:07 +10:30
Eric Botcazou
185cdb8cc7 Adjust test for PR ld/22269.
On the SPARC architecture, you need to pass a special flag to GNU as
 when you're assembling PIC/PIE code or else you get a wrong relocation
 for the GOT symbol.

ld/
	* testsuite/ld-elf/shared.exp (AFLAGS_PIC): Define on SPARC.
	(pr22269-1): Pass AFLAGS_PIC to the assembler.
2018-01-30 00:21:57 +01:00
Eric Botcazou
d85815e2d1 Fix PR gas/22738 (.dc.a directive has wrong size on SPARC 64-bit).
The .dc.a directive has wrong size (32 bits) on SPARC 64-bit because
the assembler sets the correct BFD architecture only at the very end
of the processing and it's too late for the directive.  It's fixed by
defining TARGET_MACH and making it return a sensible default value.

gas/
	* config/tc-sparc.h (sparc_mach): Declare.
	(TARGET_MACH): Define to above.
	* config/tc-sparc.c (sparc_mach): New function.
	(sparc_md_end): Minor tweak.
ld/
	* testsuite/ld-elf/pr22450.d: Remove reference to SPARC64.
2018-01-30 00:13:51 +01:00
Maciej W. Rozycki
86b24e15c4 MIPS/LD/testsuite: Correct comm-data.exp test ABI/emul/endian arrangement
Update the ld-mips-elf/comm-data.exp test script to correctly select
emulations for targets using non-traditional MIPS emulation and also
correctly select ABIs for targets that do not support all of them, and
finally use the default endianness selection to benefit targets which
support only one, complementing commit 05a5feafdd ("Rewrite
check_shared_lib_support") and removing numerous test failures such as:

FAIL: MIPS o32/copyreloc common symbol override test (auxiliary shared object build)
FAIL: MIPS o32/copyreloc common symbol override test
FAIL: MIPS o32/nocopyreloc common symbol override test (auxiliary shared objectbuild)
FAIL: MIPS o32/nocopyreloc common symbol override test
FAIL: MIPS n32/copyreloc common symbol override test (auxiliary shared object build)
FAIL: MIPS n32/copyreloc common symbol override test
FAIL: MIPS n32/nocopyreloc common symbol override test (auxiliary shared objectbuild)
FAIL: MIPS n32/nocopyreloc common symbol override test

due to:

.../ld/ld-new: unrecognised emulation mode: elf32btsmip
Supported emulations: elf64btsmip elf64ltsmip

or:

.../ld/ld-new: unrecognised emulation mode: elf32btsmip
Supported emulations: elf32ebmip

or:

.../ld/ld-new: unrecognised emulation mode: elf32btsmip
Supported emulations: elf32l4300

etc., and:

ERROR: -n32 -march=mips3 -EB -call_shared .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data1.s: assembly failed
UNRESOLVED: MIPS n32/copyreloc common symbol override test (auxiliary shared object build)
ERROR: -n32 -march=mips3 -EB -call_nonpic .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data2.s: assembly failed
UNRESOLVED: MIPS n32/copyreloc common symbol override test
ERROR: -n32 -march=mips3 -EB -call_shared .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data1.s: assembly failed
UNRESOLVED: MIPS n32/nocopyreloc common symbol override test (auxiliary shared object build)
ERROR: -n32 -march=mips3 -EB -call_nonpic .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data2.s: assembly failed
UNRESOLVED: MIPS n32/nocopyreloc common symbol override test

due to:

Assembler messages:
Fatal error: selected target format 'elf32-nbigmips' unknown

and:

ERROR: -64 -march=mips3 -EB -call_shared .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data1.s: assembly failed
UNRESOLVED: MIPS n64/copyreloc common symbol override test (auxiliary shared object build)
ERROR: -64 -march=mips3 -EB --defsym ELF64=1 -call_nonpic .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data2.s:assembly failed
UNRESOLVED: MIPS n64/copyreloc common symbol override test
ERROR: -64 -march=mips3 -EB -call_shared .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data1.s: assembly failed
UNRESOLVED: MIPS n64/nocopyreloc common symbol override test (auxiliary shared object build)
ERROR: -64 -march=mips3 -EB --defsym ELF64=1 -call_nonpic .../ld/testsuite/ld-mips-elf/../ld-elf/comm-data2.s:assembly failed
UNRESOLVED: MIPS n64/nocopyreloc common symbol override test

due to:

Assembler messages:
Fatal error: no compiled in support for 64 bit object file format

	ld/
	* testsuite/ld-mips-elf/comm-data.exp: Correct support for
	targets using non-traditional MIPS emulation or having a limited
	selection of ABIs available.  Don't force big endianness, use
	defaults.
2018-01-29 20:15:45 +00:00
H.J. Lu
98d72909f8 ld: Skip unsupported static executable tests
Skip static executable tests if static executable is unsupported.
Tested on Linux/x86 without libc.a.

	PR ld/22732
	* testsuite/config/default.exp (STATIC_LDFLAGS): New.  Set to
	"-static" if target compiler supports it.
	* testsuite/ld-bootstrap/bootstrap.exp: Skip static executable
	tests if target compiler doesn't support it.
	* testsuite/ld-ifunc/ifunc.exp: Likewise.
	* testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Likewise.
	(run_cc_link_tests): Likewise.
2018-01-29 04:55:23 -08:00
H.J. Lu
fef75122c0 Add a testcase for PR ld/22751
Since dummy.o must be placed before

-Wl,--whole-archive tmpdir/pr22751.a -Wl,--no-whole-archive

to trigger the bug, this patch adds an optional trailing ld options to
run_ld_link_exec_tests.

	PR ld/22751
	* testsuite/config/default.exp (INT128_CFLAGS): New.
	* testsuite/ld-plugin/lto.exp (INT128_CFLAGS): New.
	Run ld/22751 tests.
	* testsuite/ld-plugin/pr22751.c: New file.
	* testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Add
	ld trailing options.
2018-01-27 16:04:34 -08:00
Alan Modra
d580dcc7aa PR22751, LTO broken for libgcc libcalls
So what was happening was that the file added from libgcc.a during the
rescan was not put on file_chain.  map_input_to_output_sections then
doesn't see the file and its sections are treated as discarded.

The file_chain list pointer bug was caused by that fact that an
archive element claimed by the plugin does not have my_archive set.
Or more correctly, the actual archive element does have my_archive
set, but this bfd is replaced with a dummy bfd that doesn't have
my_archive set.

	PR 22751
	* ldlang.c (find_rescan_insertion): Look past bfds with claim_archive
	set.
2018-01-28 08:29:55 +10:30
Maciej W. Rozycki
2ebd05b80b MIPS/LD: Correct `mips-*-windiss' target emulation configuration
Fix an issue with commit 73934d319d ("Disable .gnu.hash on MIPS
targets"), <https://sourceware.org/ml/binutils/2006-07/msg00341.html>,
which in turn caused a regression with commit 861fb55ab5 ("Defer
allocation of R_MIPS_REL32 GOT slots"),
<https://sourceware.org/ml/binutils/2008-08/msg00096.html>, and use
`mipself.em' as the extra emulation file for `mips-*-windiss' targets,
removing a segmentation fault triggered as `_bfd_mips_elf_final_link'
calls `htab_traverse' to process LA25 stubs with `htab->la25_stubs'
being NULL.  This is in turn due to `_bfd_mips_elf_init_stubs' not
having been called, which is only done by `mipself.em'.  No LA25 stubs
are supposed to be produced for `mips-*-windiss' targets, however the
internal data structures have to be initialized.

	ld/
	* emulparams/elf32mipswindiss.sh (EXTRA_EM_FILE): Set to
	`mipself'.
2018-01-26 23:05:06 +00:00
Eric Botcazou
bb363086e7 Fix PR ld/22727 (TLS breakage in PIC/PIE mode on SPARC).
There are actually 2 different bugs:
 1. TLS transition is broken in PIE mode.
 2. TLS is broken in PIC/PIE mode when the __tls_get_addr symbol
    is versioned  (as is the case on Linux and Solaris at least).

The 1st bug is fixed by reverting the problematic change for now
(note that the associated test doesn't pass on SPARC because of another
issue so there is  no formal regression in the testsuite). The 2nd bug
is fixed by changing the  call to _bfd_generic_link_add_one_symbol
on __tls_get_addr into a mere lookup in _bfd_sparc_elf_check_relocs.

bfd/
	* elfxx-sparc.c (_bfd_sparc_elf_check_relocs) <R_SPARC_TLS_GD_CALL>:
	Do a mere lookup of the __tls_get_addr symbol instead of adding it.

	Revert
	2017-10-19  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/22263
	* elfxx-sparc.c (sparc_elf_tls_transition): Replace
	bfd_link_pic with !bfd_link_executable, !bfd_link_pic with
	bfd_link_executable for TLS check.
	(_bfd_sparc_elf_check_relocs): Likewise.
	(allocate_dynrelocs): Likewise.
	(_bfd_sparc_elf_relocate_section): Likewise.
ld/
	* testsuite/ld-sparc/sparc.exp (32-bit: Helper shared library):
	Link with a version script.
	(32-bit: TLS -fpie): New test.
	(64-bit: Helper shared library): Link with a version script.
	(64-bit: TLS -fpie): New test.
	(64-bit: GOTDATA relocations): Pass -Av9 to the assembler.
	* testsuite/ld-sparc/tlslib.ver: New file.
	* testsuite/ld-sparc/tlspie32.dd: Likewise.
	* testsuite/ld-sparc/tlspie32.s: Likewise.
	* testsuite/ld-sparc/tlspie64.dd: Likewise.
	* testsuite/ld-sparc/tlspie64.s: Likewise.
	* testsuite/ld-sparc/tlssunbin32.dd: Adjust for versioned symbol.
	* testsuite/ld-sparc/tlssunbin32.rd: Likewise.
	* testsuite/ld-sparc/tlssunbin32.sd: Likewise.
	* testsuite/ld-sparc/tlssunbin64.dd: Likewise.
	* testsuite/ld-sparc/tlssunbin64.rd: Likewise.
	* testsuite/ld-sparc/tlssunbin64.sd: Likewise.
2018-01-25 12:16:06 +01:00
Renlin Li
1daf502a16 [LD][AARCH64]Add group relocations to create PC-relative offset.
This is a patch to add linker support for group relocations to create a
16, 32, 48, or 64 bit PC-relative offset inline.

The following relocations are added along with the test cases:
BFD_RELOC_AARCH64_MOVW_PREL_G0, BFD_RELOC_AARCH64_MOVW_PREL_G0_NC,
BFD_RELOC_AARCH64_MOVW_PREL_G1, BFD_RELOC_AARCH64_MOVW_PREL_G1_NC,
BFD_RELOC_AARCH64_MOVW_PREL_G2, BFD_RELOC_AARCH64_MOVW_PREL_G2_NC,
BFD_RELOC_AARCH64_MOVW_PREL_G3.

bfd/

2018-01-24  Renlin Li  <renlin.li@arm.com>

	* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Add support for
	BFD_RELOC_AARCH64_MOVW_PREL_G0, BFD_RELOC_AARCH64_MOVW_PREL_G0_NC,
	BFD_RELOC_AARCH64_MOVW_PREL_G1, BFD_RELOC_AARCH64_MOVW_PREL_G1_NC,
	BFD_RELOC_AARCH64_MOVW_PREL_G2, BFD_RELOC_AARCH64_MOVW_PREL_G2_NC,
	BFD_RELOC_AARCH64_MOVW_PREL_G3.
	* elfxx-aarch64.c (_bfd_aarch64_elf_put_addend): Likewise.
	(_bfd_aarch64_elf_resolve_relocation): Likewise.

ld/

2018-01-24  Renlin Li  <renlin.li@arm.com>

	* testsuite/ld-aarch64/aarch64-elf.exp: Run new testes.
	* testsuite/ld-aarch64/emit-relocs-287.s: Fix test case.
	* testsuite/ld-aarch64/emit-relocs-287.d: Fix expected output.
	* testsuite/ld-aarch64/emit-relocs-287-overflow.s: New.
	* testsuite/ld-aarch64/emit-relocs-287-overflow.d: New.
	* testsuite/ld-aarch64/emit-relocs-288.d: New.
	* testsuite/ld-aarch64/emit-relocs-288.s: New.
	* testsuite/ld-aarch64/emit-relocs-289.d: New.
	* testsuite/ld-aarch64/emit-relocs-289.s: New.
	* testsuite/ld-aarch64/emit-relocs-289-overflow.s: New.
	* testsuite/ld-aarch64/emit-relocs-289-overflow.d: New.
	* testsuite/ld-aarch64/emit-relocs-290.d: New.
	* testsuite/ld-aarch64/emit-relocs-290.s: New.
	* testsuite/ld-aarch64/emit-relocs-291.d: New.
	* testsuite/ld-aarch64/emit-relocs-291.s: New.
	* testsuite/ld-aarch64/emit-relocs-291-overflow.s: New.
	* testsuite/ld-aarch64/emit-relocs-291-overflow.d: New.
	* testsuite/ld-aarch64/emit-relocs-292.d: New.
	* testsuite/ld-aarch64/emit-relocs-292.s: New.
	* testsuite/ld-aarch64/emit-relocs-293.d: New.
	* testsuite/ld-aarch64/emit-relocs-293.s: New.
2018-01-24 16:20:05 +00:00
H.J. Lu
8a1b824af7 x86: Check the versioned __tls_get_addr symbol
We need to check the versioned __tls_get_addr symbol when looking up
"__tls_get_addr".

bfd/

	PR ld/22721
	* elfxx-x86.c (_bfd_x86_elf_link_check_relocs): Check the
	versioned __tls_get_addr symbol.

ld/

	PR ld/22721
	* testsuite/ld-plugin/lto.exp: Run PR ld/22721 tests.
	* testsuite/ld-plugin/pr22721.t: New file.
	* testsuite/ld-plugin/pr22721a.s: Likewise.
	* testsuite/ld-plugin/pr22721b.c: Likewise.
2018-01-20 14:29:36 -08:00
H.J. Lu
1ebfa86a3c Also xfail ld-elf/group1.d for Solaris
Also xfail ld-elf/group1.d for Solaris since _GLOBAL_OFFSET_TABLE_ is
always generated for Solaris as a global symbol after

.*: 0+1000 +0 +(NOTYPE|OBJECT) +WEAK +DEFAULT +. foo

instead of appending "#..." which will weaken the test.

	* testsuite/ld-elf/group1.d: Also xfail Solaris.
2018-01-18 17:21:24 -08:00
H.J. Lu
f7968f08b7 x86: Update ld-elf/linkinfo1[ab].d for Solaris/x86
Update ld-elf/linkinfo1[ab].d to accommodate slightly different PLT/GOT
order/layout for Solaris/x86 targets.

	* testsuite/ld-elf/linkinfo1a.d: Updated for slightly different
	PLT/GOT order/layout for Solaris/x86 targets.
	* testsuite/ld-elf/linkinfo1b.d: Likewise.
2018-01-18 16:23:51 -08:00
H.J. Lu
c5bdb02260 solaris2.em: Fold after_allocation into before_allocation
Since all ELF linkers call check_relocs after opening all inputs, we
can fold after_allocation into before_allocation so that local dynamic
symbols will be placed before global dynamic symbols in .dynsym section.
This fixed:

FAIL: Common symbol override test (auxiliary shared object build)
FAIL: ld-elf/pr19617a
FAIL: ld-elf/pr19698

for i386-solaris2.12 and x86_64-solaris2.12 targets.

	PR ld/22728
	* emultempl/solaris2.em (elf_solaris2_after_allocation): Fold
	into ...
	(elf_solaris2_before_allocation): This.
	(LDEMUL_AFTER_ALLOCATION): Removed.
2018-01-18 16:22:13 -08:00
Alan Modra
691d2e9af2 PowerPC PLT stub alignment fixes
Asking for ppc32 plt call stubs to be aligned at 32 byte boundaries
didn't quite work.  For ld.bfd they were spaced 32 bytes apart, but
only started on a 16 byte boundary.  ld.gold also didn't get it right.

Finding that bug made me check over the ppc64 plt stub alignment,
where I found that negative values for alignment (meaning align to
minimize boundary crossing) were not accepted.  Since no one has
complained about that, I guess I could have removed the feature from
ld.bfd documentation, but I've opted instead to correct the code.

I've also added an optional alignment paramenter for ppc32
--plt-align, for some consistency with gold and ppc64 ld.bfd.

bfd/
	* elf32-ppc.c (ppc_elf_create_glink): Correct alignment of .glink.
	* elf64-ppc.c (ppc64_elf_size_stubs): Handle negative plt_stub_align.
	(ppc64_elf_build_stubs): Likewise.
gold/
	* powerpc.cc (param_plt_align): New function supplying default
	--plt-align values.  Use it..
	(Stub_table::plt_call_align): ..here, and..
	(Output_data_glink::global_entry_align): ..here.
	(Stub_table::stub_align): Correct 32-bit minimum alignment.
ld/
	* emultempl/ppc32elf.em: Support optional --plt-align arg.
	* emultempl/ppc64elf.em: Support negative --plt-align arg.
2018-01-18 22:25:21 +10:30
Alan Modra
1be5d8d3bb PowerPC PLT speculative execution barriers
Spectre variant 2 mitigation for PowerPC and PowerPC64.

bfd/
	* elf32-ppc.c (GLINK_ENTRY_SIZE): Handle speculation barrier.
	(CRSETEQ, BEQCTRM): Define.
	(is_nonpic_glink_stub): Don't check bctr.
	(ppc_elf_link_hash_table_create): Init new ppc_elf_params field.
	(ppc_elf_relax_section): Size speculation barrier.
	(output_bctr): New function.
	(write_glink_stub): Use output_bctr.
	(ppc_elf_relocate_section): Use output_bctr for long branch stub.
	(ppc_elf_finish_dynamic_symbol): Likewise.
	(ppc_elf_finish_dynamic_sections): Use output_bctr.
	* elf32-ppc.h (struct ppc_elf_params): Add speculate_indirect_jumps.
	* elf64-ppc.c (CRSETEQ, BEQCTRM, BEQCTRLM): Define.
	(GLINK_PLTRESOLVE_SIZE): Size speculation barrier.
	(size_global_entry_stubs): Handle speculation barrier sizing.
	(plt_stub_size): Likewise.
	(output_bctr): New function.
	(build_plt_stub, build_tls_get_addr_stub): Output speculation
	barrier.
	(ppc_build_one_stub): Likewise for ppc_stub_plt_branch.
	(ppc_size_one_stub): Size speculation barrier in ppc_stub_plt_branch.
	(build_global_entry_stubs): Output speculation barrier.
	(ppc64_elf_build_stubs): Likewise in __glink_PLTresolve stub.
	* elf64-ppc.h (struct ppc64_elf_params): Add speculate_indirect_jumps.
gold/
	* options.h (speculate_indirect_jumps): New option.
	* powerpc.cc (beqctrm, beqctrlm, crseteq): New insn constants.
	(output_bctr): New function.
	(Stub_table::plt_call_size): Add space for speculation barrier.
	(Stub_table::branch_stub_size): Likewise.
	(Output_data_glink::pltresolve_size): Likewise.
	(Stub_table::do_write): Output speculation barriers.
ld/
	* emultempl/ppc32elf.em (params): Init new field.
	(OPTION_SPECULATE_INDIRECT_JUMPS): Define.
	(OPTION_NO_SPECULATE_INDIRECT_JUMPS): Define.
	(PARSE_AND_LIST_LONGOPTS): Handle new options.
	(PARSE_AND_LIST_ARGS_CASES): Likewise.
	(PARSE_AND_LIST_OPTIONS): Likewise.
	* emultempl/ppc64elf.em (params): Init new field.
	(OPTION_SPECULATE_INDIRECT_JUMPS): Define.
	(OPTION_NO_SPECULATE_INDIRECT_JUMPS): Define.
	(PARSE_AND_LIST_LONGOPTS): Handle --speculate-indirect-jumps.
	(PARSE_AND_LIST_OPTIONS): Likewise.
	(PARSE_AND_LIST_ARGS_CASES): Likewise.
	* ld.texinfo (--no-plt-thread-safe): Correct itemx.
	(--speculate-indirect-jumps): Document.
	* testsuite/ld-powerpc/elfv2exe.d,
	* testsuite/ld-powerpc/elfv2so.d,
	* testsuite/ld-powerpc/relbrlt.d,
	* testsuite/ld-powerpc/powerpc.exp: Disable plt alignment and
	speculation barriers on various tests.
2018-01-17 18:52:57 +10:30
Alan Modra
9e390558ce PowerPC PLT stub tidy
This is in preparation for the next patch adding Spectre variant 2
mitigation for PowerPC and PowerPC64.  Besides tidying code involved
in stub output (to reduce the number of places where bctr is output),
the patch adds some user visible features:

1) PowerPC64 ELFv2 global entry stubs now are aligned under the
   control of --plt-align, with a default alignment of 32 bytes.
2) PowerPC64 __glink_PLTresolve is no longer padded out with nops.
3) PowerPC32 PLT stubs are aligned under the control of --plt-align,
   with the default alignment being 16 bytes as before.
4) The PowerPC32 branch/nop table emitted before __glink_PLTresolve
   is now smaller in many cases.  It was sized incorrectly when the
   __tls_get_addr_opt stub was used, and unnecessarily included space
   for local ifuncs.

bfd/
	* elf32-ppc.c (GLINK_ENTRY_SIZE): Add parameters, handle
	__tls_get_addr_opt, and alignment sizing.
	(TLS_GET_ADDR_GLINK_SIZE): Delete.
	(is_nonpic_glink_stub): Don't use GLINK_ENTRY_SIZE.
	(ppc_elf_get_synthetic_symtab): Recognize stubs spaced at 4, 6,
	or 8 insns.
	(ppc_elf_link_hash_table_create): Init new ppc_elf_params field.
	(allocate_dynrelocs): Use new GLINK_ENTRY_SIZE.
	(ppc_elf_size_dynamic_sections): Likewise.  Size branch table
	by PLT reloc count.
	(write_glink_stub): Handle __tls_get_addr_opt stub.
	Pad out to size given by GLINK_ENTRY_SIZE.
	(ppc_elf_relocate_section): Adjust write_glink_stub call.
	(ppc_elf_finish_dynamic_symbol): Likewise.
	(ppc_elf_finish_dynamic_sections): Write PLTresolve without using
	insn array since so many need rewriting.
	* elf32-ppc.h (struct ppc_elf_params): Add plt_stub_align.
	* elf64-ppc.c (GLINK_PLTRESOLVE_SIZE): Rename from
	GLINK_CALL_STUB_SIZE.  Add htab param and evaluate to size without
	nops.  Adjust all uses.
	(ppc64_elf_get_synthetic_symtab): Don't use GLINK_CALL_STUB_SIZE
	in glink_vma calculation.
	(struct ppc_link_hash_table): Add global_entry section pointer.
	(create_linkage_sections): Create separate section for global
	entry stubs.
	(PPC_LO, PPC_HI, PPC_HA): Move earlier.
	(size_global_entry_stubs): Handle sizing for aligned stubs.
	(ppc64_elf_size_dynamic_sections): Handle global_entry alloc,
	and don't stash end of glink branch table in rawsize.
	(ppc_build_one_stub): Rewrite stub size calculations.
	(build_global_entry_stubs): Use new section.
	(ppc64_elf_build_stubs): Don't pad __glink_PLTresolve with nops.
	Build lazy link stubs out to end of section.  Build global entry
	stubs in new section.
gold/
	* options.h (plt_align): Support for PowerPC32 too.
	* powerpc.cc (Stub_table::stub_align): Heed --plt-align for 32-bit.
	(Stub_table::plt_call_size, branch_stub_size): Tidy.
	(Stub_table::plt_call_align): Implement using stub_align.
	(Output_data_glink::global_entry_align): New function.
	(Output_data_glink::global_entry_off): New function.
	(Output_data_glink::global_entry_address): Use global_entry_off.
	(Output_data_glink::pltresolve_size): New function, replacing
	pltresolve_size_ constant.  Update all uses.
	(Output_data_glink::add_global_entry): Align offset.
	(Output_data_glink::set_final_data_size): Use global_entry_align.
	(Stub_table::do_write): Don't pad __glink_PLTrelsolve with nops.
	Tidy stub output.  Use global_entry_off.
ld/
	* emultempl/ppc32elf.em (params): Init new field.
	(enum ppc32_opt): New enum to define OPTION_* values.  Add
	OPTION_PLT_ALIGN and OPTION_NO_PLT_ALIGN.
	(PARSE_AND_LIST_LONGOPTS): Handle new options.
	(PARSE_AND_LIST_ARGS_CASES): Likewise.
	(PARSE_AND_LIST_OPTIONS): Likewise.  Break up help output.
	* emultempl/ppc64elf.em (ppc_add_stub_section): Init alignment
	correctly for negative --plt-stub-align.
	* testsuite/ld-powerpc/elfv2exe.d,
	* testsuite/ld-powerpc/elfv2so.d,
	* testsuite/ld-powerpc/relbrlt.d,
	* testsuite/ld-powerpc/relbrlt.s,
	* testsuite/ld-powerpc/tlsexe.d,
	* testsuite/ld-powerpc/tlsexe.r,
	* testsuite/ld-powerpc/tlsexe32.d,
	* testsuite/ld-powerpc/tlsexe32.g,
	* testsuite/ld-powerpc/tlsexe32.r,
	* testsuite/ld-powerpc/tlsexetoc.d,
	* testsuite/ld-powerpc/tlsexetoc.r,
	* testsuite/ld-powerpc/tlsopt5_32.d,
	* testsuite/ld-powerpc/tlsso.d,
	* testsuite/ld-powerpc/tlstocso.d: Update for changed stub order.
2018-01-17 18:51:04 +10:30
Nick Clifton
f6efed019b Update translations for various binutils components.
ld      * po/pt_BR.po: Updated Brazilian Portugese translation.

opcodes * po/pt_BR.po: Updated Brazilian Portugese translation.
        * po/de.po: Updated German translation.

gas     * po/fr.po: Updated French translation.

binutils* po/fr.po: Updated French translation.
2018-01-16 12:45:44 +00:00
Nick Clifton
616dcb87ab Update Ukranian translations for bfd, binutils, gas, gold, ld and opcodes 2018-01-15 12:09:11 +00:00
Nick Clifton
3957a4963f Update pot files 2018-01-13 13:56:48 +00:00
Nick Clifton
769c7ea507 Bump version number to 2.30.51
bfd/
	* version.m4: Bump version to 2.30.51
	* configure: Regenerate.

binutils/
	* configure: Regenerate.

gas/
	* configure: Regenerate.

gprof/
	* configure: Regenerate.

ld/
	* configure: Regenerate.

opcodes/
	* configure: Regenerate.
2018-01-13 13:31:12 +00:00
Nick Clifton
faf766e317 Add note about 2.30 branch creation to changelogs 2018-01-13 13:26:38 +00:00
Nick Clifton
9176ac5bfc Add 2.30 markers to NEWS files.
binutils/
	* NEWS: Add marker for 2.30.

gas/
	* NEWS: Add marker for 2.30.

ld/
	* NEWS: Add marker for 2.30.
2018-01-13 13:20:55 +00:00
Alan Modra
5ae5d3fd10 pr22374 function pointer initialization
When I added this test I said I'd look at fixing more targets.
That hasn't happened yet, so xfail to tidy results.

	* testsuite/ld-elf/elf.exp: xfail "pr22374 function pointer
	initialization" for currently failing targets.
2018-01-12 21:13:11 +10:30
Alan Modra
87e79a6515 Fixes for "Ignore dynamic references on forced local symbols"
PowerPC64 has its own mark_dynamic_ref, which needs the same change as
made by d664fd41e1 to the generic ELF version.  Some other targets
discard more than just .data, so allow for that too in expected ld
messages.

bfd/
	PR ld/22649
	* elf64-ppc.c (ppc64_elf_gc_mark_dynamic_ref): Ignore dynamic
	references on forced local symbols.
ld/
	PR ld/22649
	* testsuite/ld-elf/pr22649.msg: Allow other messages.
	* testsuite/ld-elf/shared.exp: Check that --gc-sections is
	supported before running ld/22649 tests.
2018-01-12 21:13:11 +10:30
Nick Clifton
97a232d733 Add -z undefs option to the ELF linker.
Currently we have no obvious way to revert the action of the "-z defs"
  command line option.  The "--unresolved-symbols=ignore-in-object-files"
  does pretty much what is needed, but it is non-obvious and it also
  touches the setting for reporting unresolved symbol references from
  shared libraries.  So I am proposing adding a "-z undefs" option to be
  the inverse of "-z defs".  (I thought that "-z nodefs" might be
  confusing since it implies banning all definitions, rather than
  allowing them).

  In addition the description of the "-z defs" option in the linker
  documentation is misleading in one place, where it says:

    'defs'
       Disallows undefined symbols in object files.  Undefined
       symbols in shared libraries are still allowed.

  whereas later on it gets it right:

    '-z defs'
       Report unresolved symbol references from regular object files.
       This is done even if the linker is creating a non-symbolic shared
       library.  The switch '--[no-]allow-shlib-undefined' controls the
       behaviour for reporting unresolved references found in shared
       libraries being linked in.

	* emultempl/elf32.em (_handle_option): Add support for "-z undefs"
	as the opposite of "-z defs".
	* ld.texinfo: Document the new option.  Update the description of
	the -z defs option to make it clear that it does generate an error
	if an undefined symbol reference is found in an object file whilst
	creating a shared library.
	* NEWS: Document this new feature.
2018-01-12 08:15:55 +00:00
H.J. Lu
33eff4ce18 ld: Replace "-z textonly" with "-z separate-code"
Although they aren't passed to linker, we should get it right.

	* testsuite/ld-elf/pr22393-2a.rd: Replace "-z textonly" with
	"-z separate-code".
	* testsuite/ld-elf/pr22393-2b.rd: Likewise.
	* testsuite/ld-x86-64/pr22393-3a.rd: Likewise.
	* testsuite/ld-x86-64/pr22393-3b.rd: Likewise.
2018-01-11 20:46:01 -08:00
H.J. Lu
cf9e7f1f07 x86-64: Add tests for -z separate-code -z max-page-size=0x1000
PR ld/22393
	* testsuite/ld-x86-64/pr22393-3a.c: New file.
	* testsuite/ld-x86-64/pr22393-3a.rd: Likewise.
	* testsuite/ld-x86-64/pr22393-3b.c: Likewise.
	* testsuite/ld-x86-64/pr22393-3b.rd: Likewise.
	* testsuite/ld-x86-64/x86-64.exp: Run tests for -z separate-code
	-z max-page-size=0x1000.
2018-01-11 19:19:31 -08:00
H.J. Lu
d346bb277c ld: Add tests for -z separate-code and -z noseparate-code
Verify that -z separate-code works and -z noseparate-code doesn't disable
-z relro.

	PR ld/22393
	* testsuite/ld-elf/pr16322.d: Add -z noseparate-code.
	* testsuite/ld-elf/pr22393-1.s: New file.
	* testsuite/ld-elf/pr22393-1a.d: Likewise.
	* testsuite/ld-elf/pr22393-1b.d: Likewise.
	* testsuite/ld-elf/pr22393-1c.d: Likewise.
	* testsuite/ld-elf/pr22393-1d.d: Likewise.
	* testsuite/ld-elf/pr22393-1e.d: Likewise.
	* testsuite/ld-elf/pr22393-1f.d: Likewise.
	* testsuite/ld-elf/pr22393-2a.c: Likewise.
	* testsuite/ld-elf/pr22393-2a.rd: Likewise.
	* testsuite/ld-elf/pr22393-2b.c: Likewise.
	* testsuite/ld-elf/pr22393-2b.rd: Likewise.
	* testsuite/ld-elf/shared.exp: Run tests for -z separate-code.
2018-01-11 19:18:37 -08:00
H.J. Lu
47acac12c8 ld: Add "-z separate-code" option to ELF linker
The new "-z separate-code" option will generate separate code LOAD
segment which must be in wholly disjoint pages from any other data.

include/

	PR ld/22393
	* bfdlink.h (bfd_link_info): Add separate_code.

ld/

	PR ld/22393
	* NEWS: Mention "-z separate-code".
	* emultempl/elf32.em (gld${EMULATION_NAME}_get_script): Get
	builtin linker scripts and return linker scripts from disk for
	"-z separate-code".
	(gld${EMULATION_NAME}_handle_option): Handle "-z separate-code"
	and "-z noseparate-code".
	* genscripts.sh: Generate linker scripts for "-z separate-code".
	(LD_FLAG): Set to *textonly for "-z separate-code".
	* ld.texinfo: Document "-z separate-code".
	* lexsup.c (elf_shlib_list_options): Add linker help messsages
	for "-z separate-code" and "-z noseparate-code".
	* scripttempl/elf.sc (SEPARATE_TEXT): New
	(TEXT_SEGMENT_ALIGN): Likewise.
	Use ${TEXT_SEGMENT_ALIGN} to align and pad text segment to
	${MAXPAGESIZE}.
2018-01-11 19:01:52 -08:00
H.J. Lu
d664fd41e1 Ignore dynamic references on forced local symbols
We should ignore dynamic references on forced local symbols during
garbage collection since they can never be referenced dynamically.

bfd/

	PR ld/22649
	* elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Ignore dynamic
	references on forced local symbols.

ld/

	PR ld/22649
	* testsuite/ld-elf/pr22649-1.s: New file.
	* testsuite/ld-elf/pr22649-2a.s: Likewise.
	* testsuite/ld-elf/pr22649-2b.s: Likewise.
	* testsuite/ld-elf/pr22649.msg: Likewise.
	* testsuite/ld-elf/shared.exp: Run ld/22649 tests.
2018-01-11 15:36:54 -08:00
H.J. Lu
8b6f4cd34f ld: Keep PREINIT_ARRAY/INIT_ARRAY/FINI_ARRAY sections for -r --gc-sections
We must keep all PREINIT_ARRAY, INIT_ARRAY as well as FINI_ARRAY sections
for ld -r --gc-sections.

bfd/

	PR ld/22677
	* elflink.c (bfd_elf_gc_sections): Keep all PREINIT_ARRAY,
	INIT_ARRAY as well as FINI_ARRAY sections for ld -r --gc-sections.

ld/

	PR ld/22677
	* scripttempl/elf.sc (PREINIT_ARRAY): New.
	Don't add .preinit_array for ld -r.
	* testsuite/ld-elf/pr22677.d: New file.
	* testsuite/ld-elf/pr22677.s: Likewise.
2018-01-11 09:42:12 -08:00
Andrew Burgess
65f14869fd ld: Remove unused expression state
Previous commit removed all uses of the defsym field within the linker
expression union.  This commit cleans up the now redundant state.

ld/ChangeLog:

	* ldexp.h (union etree_union): Remove defsym field.
	* ldexp.c (exp_assop): Remove defsym parameter, and use of defsym
	parameter.
	(exp_assign): Remove passing of defsym parameter.
	(exp_defsym): Likewise.
	(exp_provide): Likewise.
2018-01-11 17:35:35 +00:00
Andrew Burgess
eab62f2f01 ld: Fix issue where PROVIDE overrides defined symbol
In a linker script, a sequence like this:

  foo = ADDR (.some_section);
  bar = foo;
  PROVIDE (foo = 0);

will result in 'bar = ADDR (.some_section)' and 'foo = 0', which seems
like incorrect behaviour, foo is clearly defined elsewhere, and so the
PROVIDE should not trigger.

The problem is that an expression like this:

    foo = ADDR (.some_section);

can't be evaluated until a late phase of the linker, due to the need
for the section '.some_section' to have been placed, then the PROVIDE
was being marked as being used during an earlier phase.  At the end of
the link, both lines:

    foo = ADDR (.some_section);
    PROVIDE (foo = 0);

are active, and this causes the final value of 'foo' to be 0.

The solution proposed in this commit is that, during earlier phases of
the linker, when we see the expression 'foo = ADDR (.some_section);',
instead of ignoring the expression, we create a "fake" definition of
'foo'.  The existence of this "fake" definition prevents the PROVIDE
from being marked used, and during the final phase the real definition
of 'foo' will replace the "fake" definition.

The new test provide-6 covers the exact case described above.  The
provide-7 test is similar to the above, but using constant
expressions, this was never broken, but is added here to increase
coverage.

The provide-8 case also didn't fail before this commit, but I did
manage to break this case during development of this patch.  This case
was only covered by a mmix test before, so I've added this here to
increase coverage.

ld/ChangeLog:

	* ldexp.c (exp_fold_tree_1): Rework condition underwhich provide
	nodes are ignored in the tree walk, and move the location at which
	we change provide nodes into provided nodes.
	(exp_init_os): Add etree_provided.
	* testsuite/ld-scripts/provide-6.d: New file.
	* testsuite/ld-scripts/provide-6.t: New file.
	* testsuite/ld-scripts/provide-7.d: New file.
	* testsuite/ld-scripts/provide-7.t: New file.
	* testsuite/ld-scripts/provide-8.d: New file.
	* testsuite/ld-scripts/provide-8.t: New file.
2018-01-11 17:35:35 +00:00
Andrew Burgess
8be965c5f0 ld: Find and run some tests using a wildcard pattern
Find the ld-script/provide-*.d tests using a wildcard, then run them in
a loop.  This will make it easier to add more tests in the future.  Some
associated clean up is required.

ld/ChangeLog:

	* testsuite/ld-scripts/provide-3.d: Add xfail directive.
	* testsuite/ld-scripts/provide-4.d: Use new map file name.
	* testsuite/ld-scripts/provide-5.d: Use new map file name.
	* testsuite/ld-scripts/provide-4-map.d: Renamed to...
	* testsuite/ld-scripts/provide-4.map: ...this.
	* testsuite/ld-scripts/provide-5-map.d: Renamed to...
	* testsuite/ld-scripts/provide-5.map: ...this.
	* testsuite/ld-scripts/provide.exp: Move xfail into provide-3.d
	file, and run tests in a loop.
2018-01-11 17:35:34 +00:00
Andrew Burgess
b3b9f8d3e9 ld: In map file use '=' in PROVIDE statements
Currently when recording a PROVIDE statement in a linker map file we
display something like:

    PROVIDE (SYMBOL, VALUE)

However, in a linker script we write these statements like this:

    PROVIDE (SYMBOL = VALUE);

This commit changes the output in the map file to be closer to linker
script format, the map file now contains:

    PROVIDE (SYMBOL = VALUE)

The ';' is still missing from the end, but map files are not intended
to be valid linker script input, so adding the ';' just seems like
clutter.

ld/ChangeLog:

	* ldexp.c (exp_print_tree): Use '=' instead of ',' when printing
	PROVIDE statements.
	* testsuite/ld-scripts/provide-4.map: Update expected output.
	* testsuite/ld-scripts/provide-5.map: Likewise.
2018-01-11 17:33:20 +00:00
H.J. Lu
6bd0a312a4 Fix the order of SHLIB_RODATA_ADDR in elf.sc
elf.sc has

  if test -n "${RODATA_ADDR}"; then
    RODATA_ADDR="\
SEGMENT_START(\"rodata-segment\", ${RODATA_ADDR}) + SIZEOF_HEADERS"
  else
    RODATA_ADDR="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
    ^^^^^^^^^^ Set RODATA_ADDR
    RODATA_ADDR="SEGMENT_START(\"rodata-segment\", ${RODATA_ADDR})"
    ^^^^^^^^^^ Set RODATA_ADDR with ${RODATA_ADDR}
  fi
  if test -n "${SHLIB_RODATA_ADDR}"; then
    SHLIB_RODATA_ADDR="\
SEGMENT_START(\"rodata-segment\", ${SHLIB_RODATA_ADDR}) + SIZEOF_HEADERS"
  else
    SHLIB_RODATA_ADDR="SEGMENT_START(\"rodata-segment\", ${SHLIB_RODATA_ADDR})"
    ^^^^^^^^^^ Set SHLIB_RODATA_ADDR
    SHLIB_RODATA_ADDR="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
    ^^^^^^^^^^ Override SHLIB_RODATA_ADDR
  fi

The order should be:

  if test -n "${SHLIB_RODATA_ADDR}"; then
    SHLIB_RODATA_ADDR="\
SEGMENT_START(\"rodata-segment\", ${SHLIB_RODATA_ADDR}) + SIZEOF_HEADERS"
  else
    SHLIB_RODATA_ADDR="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
    SHLIB_RODATA_ADDR="SEGMENT_START(\"rodata-segment\", ${SHLIB_RODATA_ADDR})"
  fi

	PR ld/22696
	* scripttempl/elf.sc: Fix the order of SHLIB_RODATA_ADDR.
2018-01-11 05:05:25 -08:00
Jim Wilson
74ccf6db11 Add explicit shared check to eh-frame-hdr test.
ld/
	* testsuite/ld-elf/eh-frame-hdr.d (#xfail): Delete
	(#alltargets): Renamed from #target.  Add shared.
	* testsuite/lib/ld-lib.exp (run_dump_test): Document shared target.
	Document alltargets option.  Add support for alltargets option.
	(istarget): Add support for shared target.
2018-01-09 10:08:47 -08:00
Jim Wilson
7615ca1dc9 RISC-V: Fix accidental embedded -shared regressions.
ld/
	* testsuite/ld-riscv-elf/c-lui.d: Don't use -shared.  Check for _start
	instead of .text.
	* testsuite/ld-riscv-elf/c-lui.s: Add _start label.
	* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Before __global_pointer$
	tests, add call to check_shared_lib_support.
2018-01-08 17:55:29 -08:00
Jim Wilson
35eeb78fa9 RISC-V: Print symbol address for jalr w/ zero offset.
ld/
	* testsuite/ld-riscv-elf/disas-jalr.d: New.
	* testsuite/ld-riscv-elf/disas-jalr.s: New.
	* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Run new testcase.

	opcodes/
	* riscv-dis.c (print_insn_args) <'s'>: Call maybe_print_address for a
	jalr.
2018-01-05 17:51:23 -08:00
Jim Wilson
be1dce2625 RISC-V: Disable shared library support for embedded elf.
ld/
	* emulparams/elf32lriscv-defs.sh (GENERATE_SHLIB_SCRIPT): Move inside
	case on $target, and don't set for riscv*-elf targets.
	(GENERATE_PIE_SCRIPT): Likewise.
2018-01-05 14:29:49 -08:00
Alan Modra
219d1afa89 Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
Alan Modra
1e56386871 ChangeLog rotation 2018-01-03 17:49:42 +10:30
Nick Clifton
863f7a5f48 Update the address of the FSF in the copyright notice of files which were using the old address.
top	* COPYING.LIBGLOSS: Update address of FSF in copyright notice.

bfd	* cpu-mt.c: Update address of FSF in copyright notice.
	* elf32-m32c.c: Likewise.
	* elf32-mt.c: Likewise.
	* elf32-rl78.c: Likewise.
	* elf32-rx.c: Likewise.
	* elf32-rx.h: Likewise.
	* elf32-spu.h: Likewise.
	* hosts/x86-64linux.h: Likewise.

etc	* add-log.el: Update address of FSF in copyright notice.

gas	* config/tc-m32c.c: Update address of FSF in copyright notice.
	* config/tc-m32c.h: Likewise.
	* config/tc-mt.c: Likewise.
	* config/tc-mt.h: Likewise.
	* config/tc-visium.c: Likewise.
	* config/tc-visium.h: Likewise.
	* testsuite/gas/rx/explode: Likewise.

ld	* testsuite/ld-mn10300/mn10300.exp: Update address of FSF in
	copyright notice.
2017-12-14 12:48:55 +00:00
Renlin Li
79e7419204 [BFD][AARCH64]Disallow R_AARCH64_ABS32(LP64) & R_AARCH64_ABS16 in const section of shared object.
R_AARCH64_ABS64, R_AARCH64_ABS32 and R_AARCH64_ABS16 are data relocations
supported in AArch64 elf ABI.

R_AARCH64_ABS64 under LP64 is allowed in shared object and a dynamic relocation entry
will be generated. This allows the dynamic linker to do further symbol resolution.
R_AARCH64_ABS32 likewise is allowed in shared object, however under ILP32 abi.

The original behavior for R_AARCH64_ABS32 under LP64 is that, it's allowed
in shared object and silently resolved at static linking time.
No dynamic relocation entry is generate for it.

R_AARCH64_ABS16 is allowed in shared object under both L64 and ILP32.
It's resolved at static linking time as well.

Under LP64, the address should be 64-bit. R_AARCH64_ABS32 relocation indicates
an address that is only sized 32 bits which is meaningless in LP64 shared object.
It's useful to error out.

I have checked glibc dynamic linker code, R_AARCH64_ABS16 is not supported at all. So
R_AARCH64_ABS16 should be reject in shared object completely.

In this patch, R_AARCH64_ABS32 is rejected under LP64 in constant section of shared object.
R_AARCH64_ABS16 is rejected in constant section of shared object in both ABI.

This will sometimes provide useful information for buggy code.
2017-12-13 15:15:50 +00:00
Alan Modra
7d6de425da Objcopy interleave test
PR 22465
	* testsuite/ld-elf/interleave.s: Use .data sections and provide
	section attrs.
	* testsuite/ld-elf/interleave.ld: Discard other sections.  Adjust
	for changed section names.
2017-12-07 23:04:15 +10:30
Alan Modra
931c97c81a mcore-elf lacks shared lib support
elf32-mcore.c has no backend create_dynamic_sections function so can't
support shared libs.

	* emulparams/elf32mcore.sh (GENERATE_SHLIB_SCRIPT): Don't define.
2017-12-07 21:07:19 +10:30
Alan Modra
05a5feafdd Rewrite check_shared_lib_support
* testsuite/lib/ld-lib.exp (check_shared_lib_support): Ask ld
	under test whether -shared is supported.
2017-12-07 17:52:49 +10:30
Jim Wilson
1c9c7ce078 Objcopy interleave fails if section address not multiple of interleave.
PR 22465
	binutils/
	* objcopy.c (copy_section): New local extra.  If isection->lma not
	exactly divisible by interleave, then bias from.  Also adjust
	osection->lma if necessary.

	ld/
	* testsuite/ld-elf/interleave-0.d, testsuite/ld-elf/interleave-4.d,
	* testsuite/ld-elf/interleave.ld, testsuite/ld-elf/interleave.s: New.
2017-12-06 10:34:36 -08:00
Nick Clifton
846fefbdb2 Tell the linker testsuite that lm32-rtems toolchains do not support the generation of shared libraries.
* testsuite/lib/ld-lib.exp (check_shared_lib_support): Return
	false for lm32-rtems targets.
2017-12-06 10:04:51 +00:00