Commit Graph

77 Commits

Author SHA1 Message Date
H.J. Lu
a83ef4d139 ld: Set non_ir_ref_regular on symbols referenced in regular objects
If linker plugin is enabled, set non_ir_ref_regular on symbols referenced
in regular objects so that linker plugin will get the correct symbol
resolution.

bfd/

	PR ld/22502
	* elflink.c (_bfd_elf_merge_symbol): Also skip definition from
	an IR object.
	(elf_link_add_object_symbols): If linker plugin is enabled, set
	non_ir_ref_regular on symbols referenced in regular objects so
	that linker plugin will get the correct symbol resolution.

ld/

	PR ld/22502
	* testsuite/ld-plugin/lto.exp: Run PR ld/22502 test.
	* testsuite/ld-plugin/pr22502a.c: New file.
	* testsuite/ld-plugin/pr22502b.c: Likewise.
2017-11-28 03:48:44 -08:00
Alan Modra
e601d38b7c Allow for __gnu_lto_slim prefixed with extra "_"
Some targets prefix global symbols with "_".

bfd/
	* archive.c (_bfd_compute_and_write_armap): Match "__gnu_lto_slim"
	optionally prefixed with "_".
	* linker.c (_bfd_generic_link_add_one_symbol): Likewise.
binutils/
	* nm.c (filter_symbols): Match "__gnu_lto_slim" optionally prefixed
	with "_".
gold/
	* symtab.cc (Symbol_table::add_from_relobj): Match "__gnu_lto_slim"
	optionally prefixed with "_".
ld/
	* testsuite/ld-plugin/lto-3r.d: Match "__gnu_lto_v" optionally
	prefixed with "_".
	* testsuite/ld-plugin/lto-5r.d: Likewise.
2017-10-25 15:32:52 +10:30
Nick Clifton
231ca75323 Skip the PR 14918 linker test for ARM targets.
I am applying a patch that has been lying around in the Fedora
  binutils sources for a while.  It skips the PR14918 linker test for
  ARM based targets.  This test checks that libgcc is not included in a
  link of an empty executable.  This works for most targets, but on the
  ARM the crt1.o startup code calls __libc_csu_init which is in
  /usr/lib/libc_nonshared.a(elf-init.oS).  This in turn needs
  __aeabi_unwind_cpp_pr0@@GCC_3.5 which is provided by libgcc_s.so.1,
  and so the test fails.
2017-09-28 11:33:20 +01:00
Alan Modra
1a3b5c34fe PR22220, BFD linker wrongly marks symbols as PREVAILING_DEF_IRONLY
non_ir_ref_dynamic wasn't being set in the case where we have a
versioned dynamic symbol definition with a non-versioned matching IR
symbol.

bfd/
	PR 22220
	* elflink.c (_bfd_elf_merge_symbol): Set non_ir_ref_dynamic in
	a case where plugin_notice isn't called.
ld/
	* testsuite/ld-plugin/pr22220.h,
	* testsuite/ld-plugin/pr22220lib.cc,
	* testsuite/ld-plugin/pr22220lib.ver,
	* testsuite/ld-plugin/pr22220main.cc: New test.
	* testsuite/ld-plugin/lto.exp: Run it.
2017-09-28 17:36:36 +09:30
H.J. Lu
59fa66c538 Handle symbol defined in IR and referenced in DSO
We need to make an IR symbol visible if it is defined in an IR object
and referenced in a dynamic object.  When --as-needed is used, since
linker removes the IR symbol reference of the dynamic object if the
dynamic object isn't needed in the first pass, the IR definition isn't
visible to the dynamic object even if the dynamic object becomes needed
in the second pass.  Add dynamic_ref_after_ir_def to bfd_link_hash_entry
to track IR symbol which is defined in an IR object and later referenced
in a dynamic object.  dynamic_ref_after_ir_def is preserved when restoring
the symbol table for unneeded dynamic object.

bfd/

	PR ld/21382
	* elflink.c (elf_link_add_object_symbols): Preserve
	dynamic_ref_after_ir_def when restoring the symbol table for
	unneeded dynamic object.

include/

	PR ld/21382
	* bfdlink.h (bfd_link_hash_entry): Add dynamic_ref_after_ir_def.

ld/

	PR ld/21382
	* plugin.c (is_visible_from_outside): Symbol may be visible
	from outside if dynamic_ref_after_ir_def is set.
	(plugin_notice): Set dynamic_ref_after_ir_def if the symbol is
	defined in an IR object and referenced in a dynamic object.
	* testsuite/ld-plugin/lto.exp: Run PR ld/21382 tests.
	* testsuite/ld-plugin/pr21382a.c: New file.
	* testsuite/ld-plugin/pr21382b.c: Likewise.
2017-04-20 07:48:35 -07:00
Andrew Burgess
2bd7f877af ld: Add additional checking for warnings/errors in testsuite
This commit adds new actions to the run_cc_link_tests mechanism in the
linker testsuite.

Previously this procedure could take a parameter containing a regular
expression that would be matched against warnings from the linker.

After this commit the warnings parameter is removed, instead, the
actions list can contain the actions 'warning', 'error',
'warning_output', or 'error_output'.  The action names are chosen to
match the actions already present in the run_dump_test procedure.

These new actions allow for the current warning checking, but also allow
for checking of errors using a regular expression.  More interestingly,
the *_output actions allow for the warning/error patterns to be placed
in a separate file.

The small number of tests that make use of the warning parameter have
been updated to the new mechanism.  Later commits will make use of the
new features added in this commit.

ld/ChangeLog:

	* testsuite/lib/ld-lib.exp (run_cc_link_tests): Add warning,
	error, warning_output, and error_output actions.  Remove separate
	warnings parameter.
	* testsuite/ld-elf/shared.exp (build_tests): Updated to use
	'warning' action.
	* testsuite/ld-plugin/lto.exp (lto_link_tests): Likewise.
2017-02-16 13:06:12 +00:00
Jiong Wang
077c11e867 [ld, testsuite] Always assemble those intermeidate .o files used later
ld/
	* testsuite/ld-plugin/lto.exp (lto_link_elf_tests): Move "Compile 7",
	"Compile 8a", "Compile 8b"...
	(lto_compile_elf_tests): ...to here.  Always run these tests.
	(lto_run_elf_tests): Move "LTO 7"...
	(lto_run_elf_shared_tests): ...to here.  Restrict these tests on
	environment where share library is supported.
2017-01-24 09:33:00 +00:00
Alan Modra
47523653a3 Check for shared lib support before running ld tests with -shared
Another fix now that we run these tests non-native.

	* testsuite/ld-elf/audit.exp: Check for shared lib support.
	* testsuite/ld-elf/compress.exp: Likewise.
	* testsuite/ld-elf/dwarf.exp: Likewise.
	* testsuite/ld-elf/shared.exp: Likewise.
	* testsuite/ld-elf/wrap.exp: Likewise.
	* testsuite/ld-ifunc/ifunc.exp: Likewise.
	* testsuite/ld-plugin/lto.exp: Check $CXX exists.
2017-01-04 09:39:12 +10:30
Alan Modra
4ce6ca2c78 Don't run C tests in ld testsuite unless we have a C compiler
Removing the [isnative] check requires that we test for a C compiler.

	* testsuite/ld-elf/elf.exp: Check that $CC exists before C tests.
	* testsuite/ld-pie/pie.exp: Likewise.
	* testsuite/ld-plugin/lto.exp: Likewise.
2017-01-03 11:47:47 +10:30
Alan Modra
d981640286 Run more ld tests when not native
Many of the ld tests are not run for cross builds, in some cases
because the test needs to run a newly linked executable, and in others
simply because it was easier to write the test for native only.  Even
when a test needs to run, it's good to compile and link to exercise
the linker.  So that's what this patch does.  I've also rid us of
the old ld_link procedure with all the HOSTING_CRT0 etc. setup.  It's
much simpler to just link with $CC.

This does mean that a cross build with cross-compiler installed but
no cross C-library will give lots of failures.  If that turns out to
be too annoying, I guess we can write a tcl procedure to detect it and
not run all the extra tests.

	* Makefile.am (bootstrap): Delete rule.
	(ld-partial, ld1, ld1-full, ld2, ld3): Likewise.
	(HOSTING_CRT0, HOSTING_SCRT0): Don't define.
	(HOSTING_LIBS, HOSTING_SLIBS, HOSTING_EMU): Likewise.
	* configure.ac (HOSTING_CRT0, HOSTING_SCRT0): Don't define.
	(HOSTING_LIBS, HOSTING_SLIBS): Likewise.
	* configure.host (HOSTING_CRT0, HOSTING_LIBS): Don't define.
	* Makefile.in: Regenerate.
	* configure: Regenerate.
	* testsuite/config/default.exp (get_link_files): Delete.
	(HOSTING_CRT0, HOSTING_SCRT0, HOSTING_LIBS, HOSTING_SLIBS): Don't
	define.
	(ld_simple_link): Delete.
	* testsuite/lib/ld-lib.exp (default_ld_link): Delete
	(default_ld_simple_link): Rename to default_ld_link.
	(ld_simple_link_defsyms): Rename to ld_link_defsyms.
	(run_ld_link_tests): Use ld_link, not ld_simple_link.
	(run_cc_link_tests): Likewise.
	(run_ld_link_exec_tests): Use $CC or $CXX to link, not $ld.
	Don't run exe when not native, and return unsupported.
	* testsuite/ld-bootstrap/bootstrap.exp: Create gccld1 etc. dirs.
	Link ld1 etc. using $CC.
	* testsuite/ld-cdtest/cdtest.exp: Link cdtest using $CC.
	* testsuite/ld-checks/checks.exp: Use ld_link, not ld_simple_link.
	* testsuite/ld-cygwin/exe-export.exp: Likewise.
	* testsuite/ld-elf/binutils.exp: Likewise.
	* testsuite/ld-elf/eh-group.exp: Likewise.
	* testsuite/ld-elf/exclude.exp: Likewise.
	* testsuite/ld-elf/frame.exp: Likewise.
	* testsuite/ld-elf/sec-to-seg.exp: Likewise.
	* testsuite/ld-elf/tls_common.exp: Likewise.
	* testsuite/ld-elfcomm/elfcomm.exp: Likewise.
	* testsuite/ld-fastcall/fastcall.exp: Likewise.
	* testsuite/ld-gc/gc.exp: Likewise.
	* testsuite/ld-ifunc/binutils.exp: Likewise.
	* testsuite/ld-mep/mep.exp: Likewise.
	* testsuite/ld-mips-elf/mips-elf-flags.exp: Likewise.
	* testsuite/ld-mn10300/mn10300.exp: Likewise.
	* testsuite/ld-nios2/nios2.exp: Likewise.
	* testsuite/ld-pe/pe-compile.exp: Likewise.
	* testsuite/ld-pe/pe-run.exp: Likewise.
	* testsuite/ld-pe/pe-run2.exp: Likewise.
	* testsuite/ld-plugin/plugin.exp: Likewise.
	* testsuite/ld-scripts/align.exp: Likewise.
	* testsuite/ld-scripts/alignof.exp: Likewise.
	* testsuite/ld-scripts/assert.exp: Likewise.
	* testsuite/ld-scripts/defined.exp: Likewise.
	* testsuite/ld-scripts/extern.exp: Likewise.
	* testsuite/ld-scripts/log2.exp: Likewise.
	* testsuite/ld-scripts/map-address.exp: Likewise.
	* testsuite/ld-scripts/phdrs.exp: Likewise.
	* testsuite/ld-scripts/phdrs2.exp: Likewise.
	* testsuite/ld-scripts/script.exp: Likewise.
	* testsuite/ld-scripts/section-flags.exp: Likewise.
	* testsuite/ld-scripts/sizeof.exp: Likewise.
	* testsuite/ld-scripts/sysroot-prefix.exp: Likewise.
	* testsuite/ld-scripts/weak.exp: Likewise.
	* testsuite/ld-selective/selective.exp: Likewise.
	* testsuite/ld-sh/sh.exp: Likewise.
	* testsuite/ld-sh/sh64/relax.exp: Likewise.
	* testsuite/ld-sh/sh64/relfail.exp: Likewise.
	* testsuite/ld-srec/srec.exp: Likewise.
	* testsuite/ld-tic6x/tic6x.exp: Likewise.
	* testsuite/ld-undefined/weak-undef.exp: Likewise.
	* testsuite/ld-versados/versados.exp: Likewise.
	* testsuite/ld-x86-64/dwarfreloc.exp: Likewise.
	* testsuite/ld-xtensa/coalesce.exp: Likewise.
	* testsuite/ld-xtensa/diff_overflow.exp: Likewise.
	* testsuite/ld-xtensa/lcall.exp: Likewise.
	* testsuite/ld-elf/audit.exp: Run non-native too.
	* testsuite/ld-elf/compress.exp: Likewise.  Replace ld options with
	gcc -Wl, options.
	* testsuite/ld-elf/dwarf.exp: Run non-native too.  Use ld_link,
	not ld_simple_link.  Add -Wl,--no-as-needed to some tests.
	* testsuite/ld-elf/elf.exp: Run non-native too.  Formatting.
	* testsuite/ld-elf/indirect.exp: Run non-native too.  Add
	-Wl,--no-as-needed to most tests.
	* testsuite/ld-elf/shared.exp: Run non-native too.  Use braces
	to simplify quoting.  Set run_tests using [list] rather than
	brace assignment to expand $extralibs.  Add -Wl,--no-as-needed
	to many test.  Prefix ld options with -Wl,.
	(mix_pic_and_non_pic): Don't run exe if not native.
	* testsuite/ld-elf/wrap.exp: Run non-native too.  Add
	-Wl,--no-as-needed and prefix ld options with -Wl,.
	* testsuite/ld-elfvers/vers.exp: Run non-native too.  Use ld_link,
	not ld_simple_link.
	* testsuite/ld-elfvsb/elfvsb.exp: Likewise.
	(visibility_test): Don't run exe if not native.
	* testsuite/ld-elfweak/elfweak.exp: Run non-native too.  Use ld_link,
	not ld_simple_link.
	(build_exec): Don't run exe if not native.
	* testsuite/ld-ifunc/ifunc.exp: Run non-native too.  Use ld_link,
	not ld_simple_link.  Link using $CC.  Add -Wl,--no-as-needed
	to some tests and prefix ld options with -Wl,.  Expect GNU
	for hppa-linux even when no ifuncs.  Delete cleanup.
	* testsuite/ld-pie/pie.exp: Run non-native too.
	* testsuite/ld-plugin/lto.exp: Likewise.
	* testsuite/ld-shared/shared.exp: Likewise.  Use ld_link,
	not ld_simple_link.
	(shared_test): Don't run exe if not native.
	* testsuite/ld-size/size.exp: Run non-native too.  Add
	-Wl,--no-as-needed to some tests.  Prefix ld options with -Wl,.
	* testsuite/ld-unique/unique.exp: Run non-native too.  Use ld_link,
	not ld_simple_link.  Link using $CC.  Add -Wl,--no-as-needed
	to some tests and prefix ld options with -Wl,.  Expect GNU
	for hppa-linux even when no unique syms.  Delete cleanup.
	* testsuite/ld-x86-64/tls.exp: Add -Wl,--no-as-needed to some
	tests and prefix ld options with -Wl,.
	* testsuite/ld-x86-64/x86-64.exp: Use ld_link, not ld_simple_link.
	Add -Wl,--no-as-needed to some tests.  Prefix ld options with -Wl,.
2017-01-02 23:48:08 +10:30
Alan Modra
2571583aed Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
Alan Modra
4e95fbcd79 PowerPC64 dot-sym testsuite fixes
This illustrates quite well why dot-symbols had to go.  PowerPC64 gcc
for Linux stopped producing them 12 years ago, but the Linux kernel
still persists in using them so it's necessary to keep and
regression test ld support.

	* testsuite/ld-elf/indirect1b.c: Give dot-symbol a version too.
	* testsuite/ld-elf/indirect2.c: Likewise.
	* testsuite/ld-elf/indirect3b.c: Likewise.
	* testsuite/ld-elf/indirect4b.c: Likewise.
	* testsuite/ld-elf/pr18718.c: Likewise.
	* testsuite/ld-elf/pr18720b.c: Likewise.
	* testsuite/ld-elf/pr19553c.c: Likewise.
	* testsuite/ld-elfvers/vers.h (FUNC_SYMVER): Define.
	* testsuite/ld-elfvers/vers1.c: Use FUNC_SYMVER for functions.
	* testsuite/ld-elfvers/vers4.c: Likewise.
	* testsuite/ld-elfvers/vers5.c: Likewise.
	* testsuite/ld-elfvers/vers6.c: Likewise.
	* testsuite/ld-elfvers/vers7a.c: Likewise.
	* testsuite/ld-elfvers/vers9.c: Likewise.
	* testsuite/ld-elfvers/vers15.c: Likewise.
	* testsuite/ld-elfvers/vers18.c: Likewise.
	* testsuite/ld-elfvers/vers22a.c: Likewise.
	* testsuite/ld-elfvers/vers23a.c: Likewise.
	* testsuite/ld-elfvers/vers27d1.c: Likewise.
	* testsuite/ld-elfvers/vers21.c: Likewise.
	(_old_bar): Use attribute weak rather than asm weak.
	* testsuite/ld-ifunc/pr16467b.c: Give dot-symbol a version.
	* testsuite/ld-plugin/pr12760b.c: Define warning on .bar rather than
	bar for ppc64 -mcall-aixdesc.
	* testsuite/ld-plugin/pr16746a.c: Similarly for foobar.
	* testsuite/ld-plugin/pr16746b.c: Likewise.
	* testsuite/ld-elf/shared.exp: Allow dot-symbol in warnings and errors.
	* testsuite/ld-plugin/lto.exp: Likewise.
	* testsuite/ld-plugin/plugin-6.d: Likewise.
	* testsuite/ld-plugin/plugin-7.d: Likewise.
	* testsuite/ld-plugin/plugin-8.d: Likewise.
	* testsuite/ld-plugin/plugin-13.d: Likewise.
	* testsuite/ld-plugin/plugin-14.d: Likewise.
	* testsuite/ld-plugin/plugin-15.d: Likewise.
	* testsuite/ld-plugin/plugin-16.d: Likewise.
	* testsuite/ld-plugin/plugin-20.d: Likewise.
	* testsuite/ld-plugin/plugin-21.d: Likewise.
	* testsuite/ld-plugin/plugin-22.d: Likewise.
	* testsuite/ld-plugin/plugin-23.d: Likewise.
	* testsuite/ld-plugin/plugin.exp: Define .main and .puts for ppc64
	-mcall-aixdesc.
	* testsuite/ld-elfvers/vers.exp (test_ar): Trim dot-symbols.
	(objdump_dynsymstuff): Likewise.
	(objdump_symstuff): Likewise.  Pack flags to keep column count
	consistent.
	* testsuite/ld-elfweak/elfweak.exp (objdump_dynsymstuff,
	objdump_symstuff): As for vers.exp.
	* testsuite/ld-elfvers/vers6.sym: Allow dot-symbols.
	* testsuite/ld-elfvers/vers1.sym: Allow missing F flag for
	-mcall-aixdesc .opd syms and adjust for flag packing.
	* testsuite/ld-elfvers/vers4.sym: Likewise.
	* testsuite/ld-elfvers/vers4a.sym: Likewise.
	* testsuite/ld-elfvers/vers7a.sym: Likewise.
	* testsuite/ld-elfvers/vers9.sym: Likewise.
	* testsuite/ld-elfvers/vers15.sym: Likewise.
	* testsuite/ld-elfvers/vers18.sym: Likewise.
	* testsuite/ld-elfvers/vers21.sym: Likewise.
	* testsuite/ld-elfvers/vers22a.sym: Likewise.
	* testsuite/ld-elfvers/vers23a.sym: Likewise.
	* testsuite/ld-elfvers/vers27d.sym: Likewise.
	* testsuite/ld-elfweak/strong.sym: Likewise.
	* testsuite/ld-elfweak/strongcomm.sym: Likewise.
	* testsuite/ld-elfweak/strongdata.sym: Likewise.
2016-12-03 20:59:43 +10:30
Alan Modra
982c6f2665 Use variable args in run_ld_link_exec_tests
If the last parameter of a tcl function is "args" then it can take
zero or more arguments.  Make use of this language feature in
run_ld_link_exec_tests.

	* testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Replace
	"targets_to_xfail" parameter with "args".
	* testsuite/ld-elf/compress.exp: Remove empty list of xfails on
	all calls to run_ld_link_exec_tests.
	* testsuite/ld-elf/dwarf.exp: Likewise.
	* testsuite/ld-elf/indirect.exp: Likewise.
	* testsuite/ld-elf/wrap.exp: Likewise.
	* testsuite/ld-i386/i386.exp: Likewise.
	* testsuite/ld-i386/no-plt.exp: Likewise.
	* testsuite/ld-i386/tls.exp: Likewise.
	* testsuite/ld-ifunc/ifunc.exp: Likewise.
	* testsuite/ld-pie/pie.exp: Likewise.
	* testsuite/ld-plugin/lto.exp: Likewise.
	* testsuite/ld-size/size.exp: Likewise.
	* testsuite/ld-x86-64/mpx.exp: Likewise.
	* testsuite/ld-x86-64/no-plt.exp: Likewise.
	* testsuite/ld-x86-64/tls.exp: Likewise.
	* testsuite/ld-x86-64/x86-64.exp: Likewise.
	* testsuite/ld-elf/elf.exp: Likewise.  Reorder args when providing
	xfails and simplify lists.
	* testsuite/ld-elf/shared.exp: Likewise.
2016-07-21 11:34:45 +09:30
Andrew Burgess
ace667e59a ld: Restore file offset after a plugin fails to claim a file
When using the plugin interface to claim an input file the claim method
from (possible) many plugins can be called on an input file.  If these
claim methods read content from the input file then the file offset
stored in the underlying file descriptor will change.

As we share a file descriptor between the plugin interface (created with
dup in ld/plugin.c:plugin_object_p) and the input bfd object, then any
changes to the file offset in the file descriptor will effect the bfd
object.  Also, as the changes to the file offset did not originate from
calls through the bfd interface, but instead came from the plugin
directly, then the bfd will not be aware that the file offset has
changed.  This is a problem as the bfd library caches the file offset.
If the plugin decides not to claim an input file then, currently, we
leave the bfd in a state where the actual file offset is out of sync
with the cached file offset.

This problem came to light after a recent commit
7d0b9ebc1e (Don't include libbfd.h outside
of bfd, part 6) however, I don't believe that commit actual introduces
the bug, it just exposed the existing issue.

This commit solves the problem by backing up and restoring the file
offset for the file descriptor of the input file.  The restore is only
done if the plugin does not claim the input file, as it is in this case
that the bfd library might be used again to try and identify the
unclaimed file.

ld/ChangeLog:

	* plugin.c (plugin_call_claim_file): Restore the file offset after
	an unsuccessful attempt to claim a file.
	* testplug.c (bytes_to_read_before_claim): New global.
	(record_read_length): New function, sets new global
	bytes_to_read_before_claim.
	(parse_option): Handle 'read:<NUMBER>' option.
	(onclaim_file): Read file content before checking for claim.
	* testsuite/ld-plugin/plugin-30.d: New file.
	* testsuite/ld-plugin/plugin.exp: Add new test.
2016-07-19 09:58:01 +01:00
H.J. Lu
29d7478bc6 Add -flto to PR ld/20321 test
Before GCC 4.9, -flto is required for final LTO link.  Add -flto to PR
ld/20321 test to support older versions of GCC.

	* testsuite/ld-plugin/lto.exp: Add -flto to PR ld/20321 test.
2016-07-05 07:35:52 -07:00
H.J. Lu
c3e1c28ebf Warn and return for duplicated plugin
If a plugin has been loaded already, we should warn and return, instead
of adding it on the plugin list.

	PR ld/20321
	* plugin.c (plugin_opt_plugin): Warn and return if plugin has
	been loaded already.
	* testsuite/ld-plugin/lto.exp: Run PR ld/20321 test.
	* testsuite/ld-plugin/pr20321.c: New file.
2016-07-04 08:55:20 -07:00
H.J. Lu
7dc3990e40 Use the IR symbol table for the IR input object
ELF linker shouldn't skip the IR object when searching the symbol table
of an archive element.  If linker doesn't know if the object file is an
IR object, it should give LTO plugin a chance to get the correct symbol
table and use the IR symbol table if the input is an IR object.

bfd/

	PR ld/18250
	PR ld/20267
	* elflink.c: Include plugin.h if BFD_SUPPORTS_PLUGINS is
	defined.
	(elf_link_is_defined_archive_symbol): Call
	bfd_link_plugin_object_p on unknown plugin object and use the
	IR symbol table if the input is an IR object.
	* plugin.c (bfd_link_plugin_object_p): New function.
	* plugin.h (bfd_link_plugin_object_p): New prototype.

ld/

	PR ld/20267
	* testsuite/ld-plugin/lto.exp (lto_link_tests): Add test for
	PR ld/20267.
	(lto_run_tests): Likewise.
	* testsuite/ld-plugin/pr20267a.c: New file.
	* testsuite/ld-plugin/pr20267b.c: Likewise.
2016-06-20 05:10:46 -07:00
Alan Modra
0616a28038 PR ld/20276: Set non_ir_ref on common symbol
Also, don't check alignment on symbol from plugin dummy input.

bfd/
	PR ld/20276
	* elflink.c (elf_link_add_object_symbols): Don't check alignment
	on symbol from plugin dummy input.
ld/
	PR ld/20276
	* plugin.c (plugin_notice): Set non_ir_ref on common symbols.
	* testsuite/ld-plugin/lto.exp (lto_link_tests): Add test for
	PR ld/20276.
	(lto_run_tests): Likewise.
	* testsuite/ld-plugin/pass.out: New file.
	* testsuite/ld-plugin/pr20276a.c: Likewise.
	* testsuite/ld-plugin/pr20276b.c: Likewise.
2016-06-20 11:26:13 +09:30
H.J. Lu
b95a0a3177 Skip an archive element if not added by linker
During archive rescan to resolve symbol references for files added by
LTO, linker add_archive_element callback is called to check if an
archive element should added.  After all IR symbols have been claimed,
linker won't claim new IR symbols and shouldn't add the LTO archive
element.  This patch updates linker add_archive_element callback to
return FALSE when seeing an LTO archive element during rescan and
changes ELF linker to skip such archive element.

bfd/

	PR ld/20103
	* cofflink.c (coff_link_check_archive_element): Return TRUE if
	linker add_archive_element callback returns FALSE.
	* ecoff.c (ecoff_link_check_archive_element): Likewise.
	* elf64-ia64-vms.c (elf64_vms_link_add_archive_symbols): Skip
	archive element if linker add_archive_element callback returns
	FALSE.
	* elflink.c (elf_link_add_archive_symbols): Likewise.
	* pdp11.c (aout_link_check_ar_symbols): Likewise.
	* vms-alpha.c (alpha_vms_link_add_archive_symbols): Likewise.
	* xcofflink.c (xcoff_link_check_dynamic_ar_symbols): Likewise.
	(xcoff_link_check_ar_symbols): Likewise.

ld/

	PR ld/20103
	* ldmain.c (add_archive_element): Don't claim new IR symbols
	after all IR symbols have been claimed.
	* plugin.c (plugin_call_claim_file): Remove no_more_claiming
	check.
	* testsuite/ld-plugin/lto.exp (pr20103): New proc.
	Run PR ld/20103 tests.
	* testsuite/ld-plugin/pr20103a.c: New file.
	* testsuite/ld-plugin/pr20103b.c: Likewise.
	* testsuite/ld-plugin/pr20103c.c: Likewise.
2016-05-25 08:41:05 -07:00
H.J. Lu
3355cb3b64 Handle symbols defined/referenced only within IR
The plugin is called to claim symbols in an archive element from
plugin_object_p.  But those symbols aren't needed to create output.
They are defined and referenced only within IR.  get_symbols should
return resolution based on IR symbol kinds.

	PR ld/20070
	* Makefile.am (noinst_LTLIBRARIES): Add libldtestplug4.la.
	(libldtestplug4_la_SOURCES): New.
	(libldtestplug4_la_CFLAGS): Likewise.
	(libldtestplug4_la_LDFLAGS): Likewise.
	* Makefile.in: Regenerated.
	* plugin.c (get_symbols): Return resolution based on IR symbol
	kinds for symbols defined/referenced only within IR.
	* testplug4.c: New file.
	* ld/testsuite/ld-plugin/pr20070.d: Likewise.
	* ld/testsuite/ld-plugin/pr20070a.c: Likewise.
	* ld/testsuite/ld-plugin/pr20070b.c: Likewise.
	* testsuite/ld-plugin/plugin.exp (plugin4_name): New.
	(plugin4_path): Likewise.
	Add a test for ld/20070.
2016-05-12 16:50:52 -07:00
Senthil Kumar Selvaraj
4a85cc0925 Fix some AVR test failures.
binutils* testsuite/lib/binutils-common.exp (is_elf_format): Add avr-*-*.

ld	* testsuite/ld-elf/pr18735.d: Allow other symbols.
	* testsuite/ld-elf/sec64k.exp: Skip 64ksec for avr.
	* testsuite/ld-gc/pr14265.d: Allow other symbols.
	* testsuite/ld-plugin/plugin.exp: Add PR ld/17973 to
	plugin_tests only if check_shared_lib_support is true.
	* testsuite/ld-selective/selective.exp: Add --section-start
	flag for avr.
2016-05-04 13:03:52 +01:00
H.J. Lu
ef621b15e0 Update PR ld/12365 test for GCC 6
PR ld/12365 test is to verify that linker catches the reference to
undefined symbol error caused by a GCC bug.  Since the GCC bug has
been fixed in GCC 6, update the test to verify that there is no
reference to undefined symbol in executable

	* testsuite/ld-plugin/lto.exp: Update PR ld/12365 test for GCC 6.
2016-03-01 12:45:18 -08:00
Nick Clifton
760f6ee894 Skip linker plugin tests if the linker has not been configured to support plugins.
* ld-plugin/plugin.exp: Skip plugin tests if the linker is not
	configured to support plugins.
2016-01-18 11:23:44 +00:00
Alan Modra
6f2750feaf Copyright update for binutils 2016-01-01 23:00:01 +10:30
H.J. Lu
c5847ba726 ld -r doesn't need plugin for slim lto object
Plugin isn't required on slim lto object for relocatable link.

bfd/

	PR ld/19317
	* linker.c (_bfd_generic_link_add_one_symbol): Don't complain
	plugin needed to handle slim lto object for relocatable link.

ld/testsuite/

	PR ld/19317
	* ld-plugin/lto.exp (lto_no_fat): New.
	(lto_link_tests): Add a test for PR ld/19317.
	(lto_run_tests): Likewise.
	(run_ld_link_tests): Likewise.
2015-12-10 12:35:50 -08:00
H.J. Lu
6d636d8c77 Add "ld -r" tests for PR ld/15323
Weak defined function is turned into non-weak defined function by
"ld -r -flto" with GCC 5 due to a GCC 5 regression:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67548

Add "ld -r" tests for PR ld/15323 to make sure that any linker change
won't introduce linker regression for PR ld/15323.

	* ld-plugin/lto.exp (lto_link_tests): Add a "ld -r" test for
	PR ld/15323.
	(lto_run_tests): Add a "ld -r" test for PR ld/15323.
2015-09-11 10:02:57 -07:00
H.J. Lu
f58926a652 Add a testcase for PR ld/17973
ld/

	PR ld/17973
	* testplug2.c (allsymbolsread_silent): New.
	(set_register_hook): Handle allsymbolsreadsilent.
	(onall_symbols_read): Skip a message if allsymbolsread_silent is
	TRUE.

ld/testsuite/

	PR ld/17973
	* ld-plugin/plugin.exp (regassilent): New.
	Compile tmpdir/dummy.s and ld-plugin/pr17973.s.
	(plugin_tests): Add a test for PR ld/17973.
	* ld-plugin/pr17973.d: New file.
	* ld-plugin/pr17973.s: Likewise.
2015-02-14 06:26:20 -08:00
H.J. Lu
45e813544e Output "warning:" or "error:" in plugin messages
When plugin generates LDPL_WARNING, LDPL_FATAL and LDPL_ERROR messages,
linker should display "warning:" or "error:" in plugin messages like
regular linker messages.

ld/

	* plugin.c (message): Output "warning:" for LDPL_WARNING. Output
	"error:" for LDPL_FATAL and LDPL_ERROR.
	* testplug2.c (parse_option): Handle fatal, error and warning.

ld/testsuite/

	* ld-plugin/plugin-27.d: New.
	* ld-plugin/plugin-28.d: Likewise.
	* ld-plugin/plugin-29.d: Likewise.
	* plugin.exp (plugin_tests): Add tests for LDPL_FATAL, LDPL_ERROR
	and LDPL_WARNING.
2015-02-11 14:00:51 -08:00
H.J. Lu
439b7f41b5 Add tests for non-object IR file
This patch adds linker, nm and ar tests for non-object IR file, including
archive with non-object IR member.

ld/

	PR ld/17878
	* Makefile.am (noinst_LTLIBRARIES): Add libldtestplug2.la and
	libldtestplug3.la.
	(libldtestplug2_la_SOURCES): New.
	(libldtestplug2_la_CFLAGS): Likewise.
	(libldtestplug2_la_LDFLAGS): Likewise.
	(libldtestplug3_la_SOURCES): New.
	(libldtestplug3_la_CFLAGS): Likewise.
	(libldtestplug3_la_LDFLAGS): Likewise.
	* Makefile.in: Regenerated.
	* testplug2.c: New file.
	* testplug3.c: Likewise.

ld/testsuite/

	PR ld/17878
	* ld-plugin/func.c: Add some comments.
	* ld-plugin/plugin-13.d: New file.
	* ld-plugin/plugin-14.d: Likewise.
	* ld-plugin/plugin-15.d: Likewise.
	* ld-plugin/plugin-16.d: Likewise.
	* ld-plugin/plugin-17.d: Likewise.
	* ld-plugin/plugin-18.d: Likewise.
	* ld-plugin/plugin-19.d: Likewise.
	* ld-plugin/plugin-20.d: Likewise.
	* ld-plugin/plugin-21.d: Likewise.
	* ld-plugin/plugin-22.d: Likewise.
	* ld-plugin/plugin-23.d: Likewise.
	* ld-plugin/plugin-24.d: Likewise.
	* ld-plugin/plugin-25.d: Likewise.
	* ld-plugin/plugin-26.d: Likewise.
	* ld-plugin/plugin.exp (plugin2_name): New.
	(plugin3_name): Likewise.
	(plugin2_path): Likewise.
	(plugin3_path): Likewise.
	(testsrcfiles): Likewise.
	(testsrcfiles_notext): Likewise.
	(plugin_tests): Add tests for non-object IR file.
	(plugin_lib_tests): Likewise.
	(plugin_extra_elf_tests): Likewise.
	(plugin_src_tests): New tests for non-object IR file.
	Run nm --plugin test.
	Run ar --plugin test.
	Run plugin_src_tests.
2015-02-11 05:02:12 -08:00
H.J. Lu
9e2dec4710 Properly mark the plugin symbol undefined
Mark the unused plugin defined symbol in elf_link_input_bfd instead of
_bfd_elf_fix_symbol_flags.  Limit the PR ld/12365 test to x86 targets.

bfd/

	PR ld/12365
	PR ld/14272
	* elflink.c (_bfd_elf_fix_symbol_flags): Revert the last change.
	(elf_link_input_bfd): Mark the plugin symbol undefined if it is
	referenced from a non-IR file.

ld/testsuite/

	PR ld/12365
	PR ld/14272
	* ld-plugin/lto.exp: Run the PR ld/12365 test only for x86 targets.
	* ld-plugin/plugin-7.d: Updated.
	* ld-plugin/plugin-8.d: Likewise.
2015-02-06 04:29:35 -08:00
H.J. Lu
8962a307ae Pass -flto-partition=none to the PR ld/12365 test
*  ld-plugin/lto.exp: Pass -flto-partition=none to the PR
	ld/12365 test.
2015-02-04 04:34:11 -08:00
H.J. Lu
60f7927512 Mark the plugin symbol undefined
LTO may optimize out a plugin symbol, which is also referenced by a
non-IR file.  When that happens, we should mark the plugin symbol
undefined.  It isn't the problem since LTO already determined the
symbols in the non-IR file aren't used.

bfd/

	PR ld/12365
	PR ld/14272
	* elflink.c (_bfd_elf_fix_symbol_flags): Mark the plugin symbol
	undefined if it is referenced from a non-IR file.

ld/testsuite/

	PR ld/12365
	* ld-plugin/pr12365a.c: New file.
	* ld-plugin/pr12365b.c: Likewise.
	* ld-plugin/pr12365c.c: Likewise.

	* ld-plugin/lto.exp (lto_link_tests): Prepare for the PR ld/12365
	test.
	Run the PR ld/12365 test.
2015-02-03 09:03:23 -08:00
H.J. Lu
9910b1c8f3 Add a testcase for PR ld/14918
PR ld/14918
	* ld-plugin/lto.exp (lto_link_elf_tests): Add PR ld/14918 test.

	* ld-plugin/pr14918.c: New file.
	* ld-plugin/pr14918.d: Likewise.
2015-02-03 08:24:50 -08:00
H.J. Lu
15f7a26b0f The initial support for LDPT_GET_VIEW
This patch adds the initial support for LDPT_GET_VIEW.

ld/

	PR ld/17878
	* plugin.c (tv_header_tags(): Add LDPT_GET_VIEW.
	(get_view): New function.
	(set_tv_header): Handle LDPT_GET_VIEW.
	* testplug.c (tag_names): Add LDPT_GET_VIEW.
	(tv_get_view): New.
	(dump_tv_tag): Handle LDPT_GET_VIEW.
	(parse_tv_tag): Likewise.

ld/testsuite/

	PR ld/17878
	* ld-plugin/plugin-1.d: Add LDPT_GET_VIEW.
	* ld-plugin/plugin-10.d: Likewise.
	* ld-plugin/plugin-11.d: Likewise.
	* ld-plugin/plugin-2.d: Likewise.
	* ld-plugin/plugin-3.d: Likewise.
	* ld-plugin/plugin-4.d: Likewise.
	* ld-plugin/plugin-5.d: Likewise.
	* ld-plugin/plugin-6.d: Likewise.
	* ld-plugin/plugin-7.d: Likewise.
	* ld-plugin/plugin-8.d: Likewise.
	* ld-plugin/plugin-9.d: Likewise.
2015-01-28 10:27:31 -08:00
Alan Modra
b90efa5b79 ChangeLog rotatation and copyright year update 2015-01-02 00:53:45 +10:30
Alan Modra
4dea914eb1 Find lto plugin when using gcc-5.0
I originally had this as --print-prog-name and changed back to
--print-file-name to suit older gcc, neglecting to check whether
gcc-5.0 --print-file-name finds the lto plugin.  It doesn't.

	* ld-plugin/lto.exp: Use both --print-file-name and --print-prog-name
	when looking for lto plugin.
2014-09-22 19:04:48 +09:30
Alan Modra
cb8e01c6bb LTO plugin with older gcc
* ld-plugin/lto.exp: Use gcc -print-file-name to find lto plugin.
2014-08-18 21:01:26 +09:30
H.J. Lu
db7129469b Don't issue a warning for references in LTO IR to warning symbols
bfd/
	PR ld/16746
	* linker.c (_bfd_generic_link_add_one_symbol): Don't issue a
	warning for references in LTO IR to warning symbols.

ld/testsuite/
	PR ld/16746
	* ld-plugin/lto.exp: Add 4 tests for PR ld/16746.
	* ld-plugin/pr16746a.c: New file.
	* ld-plugin/pr16746b.c: Likewise.
	* ld-plugin/pr16746c.c: Likewise.
	* ld-plugin/pr16746d.c: Likewise.
2014-08-07 10:28:48 +09:30
Alan Modra
c3e11cbe51 Allow lto tests to run with older compilers
* lib/ld-lib.exp (check_lto_fat_available): New.
	(check_lto_available): Remove -ffat-lto-objects test.
	* ld-plugin/lto.exp: Use [list ] rather than { } to set up list
	variables, allowing substition of vars.  Set lto_fat and plug_opt
	and add to various tests.
2014-08-06 13:26:18 +09:30
Alan Modra
37a6ac445d Run ar with --plugin for LTO 11 test
Objects built with -fno-fat-lto-objects (the default for gcc-4.9) have
no normal symbols, except things like __gnu_lto_slim.  These useless
symbols are the ones put into the archive index, and of course nothing
references them so no objects are extracted by the linker.  Running
ar with --plugin changes ar behaviour to put the lto symbols into the
archive index.

	PR 17112
	* ld-plugin/lto.exp: When building liblti-11.a, pass
	--plugin path_to_gcc/liblto_plugin.so to ar.
2014-07-08 10:01:47 +09:30
Alan Modra
f1d7f4a64c Ensure ld testsuite gcc -B options precede $CC -B options
Various ld-elf/shared.exp and ld-plugin/lto.exp tests simply appended
the testsuite -B options intended to force gcc use the linker under test.
This fails if $CC itself has -B options, as when setting CC to run gcc
out of a build directory.  Net result is that tests were run using
the gcc build dir collect-ld.

	* config/default.exp: Don't make tmpdir/gas.  Put as symlink into
	tmpdir/ld.
	(gcc_gas_flag, gcc_ld_flag): Delete.
	(gcc_B_opt, ld_L_opt): New globals.
	ld-elf/shared.exp: Remove all refs to gcc_gas_flag and gcc_ld_flag.
	ld-plugin/lto.exp: Likewise.
	lib/ld-lib.exp (run_host_cmd): Add gcc_B_opt and ld_L_opt here.
	(ld_simple_link): Remove -B handling now that this is done in
	run_host_cmd.  Simplify.
	(default_ld_compile): Simplify.
	(check_lto_available): Use run_host_cmd_yesno.
	(check_lto_shared_available): Likewise.
2014-07-07 13:37:16 +09:30
Alan Modra
abc868c609 Rid libdummy.a from lto.exp
libdummy.a is used to make run_cc_link_tests compile objects and
archive them.  libdummy.a isn't used.  What we're really doing is
preventing a final link.  So do that directly.

	* lib/ld-lib.exp (run_ld_link_tests): Stop after assembling objects
	if binfile is empty.
	(run_ld_link_exec_tests, run_cc_link_tests): Likewise.  Tidy
	status checks.
	* ld-plugin/lto.exp: Don't use libdummy.a trick to compile objects.
	Instead use an empty output file.
2014-07-05 12:54:40 +09:30
H.J. Lu
43c001c7d6 Add tests for PR ld/16846
PR ld/16846
	* ld-plugin/lto.exp (lto_link_tests): Add tests for PR ld/16846.
	* ld-plugin/pr16846a.c: New file.
	* ld-plugin/pr16846b.c: Likewise.
	* ld-plugin/pr16846c.c: Likewise.
2014-04-22 10:22:39 -07:00
Andreas Schwab
17c34b8f3d Fix spurious failures in ld-plugin/lto.exp
* ld-plugin/lto.exp: Make "-Wp," prefix optional when filtering
out _FORTIFY_SOURCE.
("Build libdummy.a 9", "PR ld/12696"): Mark as c++.
2014-04-07 19:07:03 +02:00
H.J. Lu
4c6d802e59 Scan all input files for symbol reference warning
This patch scans all input files for symbol reference warning if the
symbol reference doesn't exist in the current input file.

ld/

	PR ld/16756
	* ldmain.c (symbol_warning): New function.
	(warning_callback): Use it.  Scan all input files for a reference
	to SYMBOL.

ld/testsuite/

	PR ld/16756
	* ld-plugin/lto.exp: Expect filename and line number for PR
	ld/12760 test.
2014-03-27 08:12:17 -07:00
Alan Modra
4b95cf5c0c Update copyright years 2014-03-05 22:16:15 +10:30
H.J. Lu
92c09111f3 Add and use check_lto_shared_available
2014-01-09  Vidya Praveen  <vidyapraveen@arm.com>

	* lib/ld-lib.exp (check_lto_shared_available): New check.
	* ld-plugin/lto.exp: Use check_lto_shared_available.
2014-01-09 09:01:53 -08:00
Kyrylo Tkachov
b35d44f1af [ld/testsuite/]
2013-11-27  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

	* ld-plugin/lto.exp: Add -ffat-lto-objects.
	* lib/ld-lib.exp (check_lto_available): Likewise.
2013-11-27 13:43:39 +00:00
Alan Modra
c22554775b PR ld/12982
* ld-plugin/pr12982.d: Fail if RWE GNU_STACK present.
2013-05-21 07:15:22 +00:00
Will Newton
2810e26c6a ld-plugin/lto.exp: Disable ld/12942 test for gcc < 4.7.0.
The test for ld/12942 fails with gcc versions before 4.7.0. This patch
disables this test with these versions of gcc.

ld/testsuite/ChangeLog:

2013-04-29  Will Newton  <will.newton@linaro.org>

	* ld-plugin/lto.exp: Disable ld/12942 test for gcc < 4.7.0.
2013-04-29 08:57:48 +00:00