aboutsummaryrefslogtreecommitdiff
path: root/ld/plugin.c
AgeCommit message (Collapse)AuthorFilesLines
2015-04-11Remove an extra ';'H.J. Lu1-1/+1
* plugin.c (plugin_load_plugins): Removed an extra ';'.
2015-02-14PR ld/17973 LTO file symsAlan Modra1-4/+12
LTO output objects have an STT_FILE symbol using the name of the file, a temporary file. This results in executables that can't be exactly reproduced, so the file name needs to be dropped. We don't want to lose all file symbols when linking a mix of lto and non-lto objects as a file symbol can be used to figure which source file generated a given local symbol. So lto output objects need to be marked. I chose to mark lto output objects with a new bfd flag. This flag is also used to fix a bug in the link-once handling; An object being loaded after "loading_lto_outputs" is set might be one extracted from an archive to satisfy new references from lto objects, not an lto object itself. The new flag is copied from archive to elements, and the same done for no_export. This fixes a bug in that --exclude-libs doesn't work with thin archives. I'm not completely happy with this part of the patch and may revist this to avoid the hack in _bfd_look_for_bfd_in_cache. PR ld/17973 include/ * bfdlink.h (struct bfd_link_info): Delete loading_lto_outputs. bfd/ * bfd.c (struct bfd): Add lto_output. * linker.c (_bfd_handle_already_linked): Explicitly test for objects added by the lto plugin. * opncls.c (_bfd_new_bfd_contained_in): Copy lto_output and no_export flags from archive. * archive.c (open_nested_file): New function, setting lto_output and no_export, extracted from.. (find_nested_archive): ..here. Flip params. Rename from _bfd_find_nested_archive. (_bfd_get_elt_at_filepos): Correct var typo. Use open_nested_file. (_bfd_look_for_bfd_in_cache): Copy no_export. * elflink.c (elf_link_add_object_symbols): Remove now unnecessary my_archive->no_export test. (elf_link_input_bfd): Drop existing lto_output STT_FILE syms. Don't use the file name when adding lto_output STT_FILE sym. * bfd-in2.h: Regenerate. ld/ * ldlang.h (struct lang_input_statement_flags): Add lto_output. * ldlang.c (lang_process): Don't set loading_lto_outputs. * ldfile.c (ldfile_try_open_bfd): Transfer entry flags.lto_output to bfd. * plugin.c (add_input_file, add_input_library): Set flags.lto_output.
2015-02-11Output "warning:" or "error:" in plugin messagesH.J. Lu1-4/+8
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-11Merge linker plugin handling into BFD plugin supportH.J. Lu1-32/+73
Linker plugin_maybe_claim is the interface of linker plugin support. This patch extracts linker plugin_maybe_claim into plugin_object_p and makes it available to BFD via a new function: void register_ld_plugin_object_p (const bfd_target *(*) (bfd *)); bfd_plugin_object_p calls plugin_object_p registered by linker first. It adds an enum bfd_plugin_format field and a pointer to plugin dummy BFD so that plugin_object_p stores plugin dummy BFD to allow plugin_maybe_claim to retrieve it later. bfd/ PR ld/17878 * bfd.c (bfd_plugin_format): New. (bfd): Add plugin_format and plugin_dummy_bfd. * plugin.c (try_load_plugin): Take a pointer to bfd_boolean argument to return TRUE if any plugin is found. Set plugin_format. (has_plugin): New. (bfd_plugin_target_p): New. (bfd_plugin_specified_p): Likewise. (bfd_plugin_target_p): Likewise. (register_ld_plugin_object_p): Likewise. (bfd_plugin_set_plugin): Set has_plugin. (load_plugin): Cache try_load_plugin result. (bfd_plugin_object_p): Try ld_plugin_object_p first. Check plugin_format. * plugin.h (bfd_plugin_target_p): New. (bfd_plugin_specified_p): Likewise. (register_ld_plugin_object_p): Likewise. * bfd-in2.h: Regenerated. ld/ PR ld/17878 * plugin.c: Include ../bfd/plugin.h. (plugin_get_ir_dummy_bfd): Call bfd_create with link_info.output_bfd instead of srctemplate. Copy BFD info from srctemplate only if it doesn't use BFD plugin target vector. (plugin_load_plugins): Call register_ld_plugin_object_p with (plugin_object_p) (plugin_maybe_claim): Renamed to ... (plugin_object_p): This. Return dummy BFD target vector if input is calimed by plugin library, otherwise return NULL. Update plugin_format and plugin_dummy_bfd. (plugin_maybe_claim): New. Use plugin_object_p. xx
2015-02-10Initialize use_mmapH.J. Lu1-0/+1
* plugin.c (plugin_maybe_claim): Initialize use_mmap.
2015-02-10Unmap the buffer if plugin didn't claim the fileH.J. Lu1-12/+41
If plugin didn't claim the file, unmap the buffer. * plugin.c (plugin_input_file_t): Add use_mmap. (plugin_pagesize): New. (get_view): Use plugin_pagesize. Set use_mmap if mmap is used. (plugin_load_plugins): Initialize plugin_pagesize. (plugin_maybe_claim): Unmap the buffer if plugin didn't claim the file.
2015-02-10Add the missing HAVE_GETPAGESIZE check in get_viewH.J. Lu1-0/+4
2015-02-10Align offset passed to mmapH.J. Lu1-3/+12
Offset passed to mmap must be a multiple of the page size. This patch aligns offset passed to mmap. * plugin.c (get_view): Align offset passed to mmap.
2015-02-08Check format against bfd_object directlyH.J. Lu1-1/+1
There is no need to call bfd_check_format. We should just check format against bfd_object directly. * plugin.c (plugin_maybe_claim): Check format against bfd_object directly.
2015-02-07Replace entry->the_bfd with ibfdH.J. Lu1-1/+1
* plugin.c (plugin_maybe_claim): Replace entry->the_bfd with ibfd.
2015-02-07Update plugin_maybe_claimH.J. Lu1-21/+64
This patch removes the argument of pointer to struct ld_plugin_input_file. This is the first step to extract a plugin_object_p out of plugin_maybe_claim for BFD. * plugin.c: Include "libbfd.h". (plugin_strdup): New. (plugin_maybe_claim): Remove the argument of pointer to struct ld_plugin_input_file. Open and handle input entry. * plugin.h (plugin_maybe_claim): Updated. * ldfile.c (ldfile_try_open_bfd): Call plugin_maybe_claim directly without passing a pointer to struct ld_plugin_input_file. * ldmain.c: Don't include "libbfd.h". (add_archive_element): Call plugin_maybe_claim directly without passing a pointer to struct ld_plugin_input_file.
2015-02-06Use mmap and cache the view buffer for get_viewH.J. Lu1-19/+70
This patch uses mmap if it is available and works. It also caches the view buffer for get_view. * configure.ac: Add AC_FUNC_MMAP. * config.in: Regenerated. * configure: Likewise. * plugin.c: Include <sys/mman.h>. (MAP_FAILED): New. Defined if not defined. (PROT_READ): Likewise. (MAP_PRIVATE): Likewise. (view_buffer_t): New. (plugin_input_file_t): Add view_buffer. (get_view): Try mmap and cache the view buffer. (plugin_maybe_claim): Initialize view_buffer.
2015-02-05Close fd only if fd != -1H.J. Lu1-3/+6
This patch closes fd only if fd != -1. * plugin.c (release_input_file): Set fd to -1 after closing it. (plugin_maybe_claim): Close fd only if fd != -1.
2015-02-05Add plugin_input_file_tH.J. Lu1-16/+105
This patchs adds plugin_input_file_t to implement get_input_file, get_view and release_input_file. The maximum memeory overhead per IR input file are about 40 bytes for plugin_input_file_t plus the memory to store input IR filename. According to http://gcc.gnu.org/wiki/whopr/driver RELEASE_INPUT_FILE: Function pointer to the linker interface that releases a file descriptor for a claimed input file. The plug-in library must call this interface for each file descriptor obtained by the "get input file" interface. It must release all such file descriptors before returning from the WPA phase. However, GCC plug-in library doesn't use the "get input file" interface. It processed the IR input in the claim file handler. Since the the file descriptor opened for the IR input was unused after the claim file handler returns and GCC plug-in library before GCC 5 doesn't call the RELEASE_INPUT_FILE function pointer, ld closed the file descriptor to avoid leaking file descriptor. But this approach doesn't work with other plug-in libraries which uses the "get input file", "get view" and "release input file" interfaces. To avoid file descriptor leak with GCC prior to GCC 5 and support other plug-in libraries at the same time, we close the file descriptor only if the input IR file is a bfd_object file. This scheme doesn't work when a plug-in library needs the file descriptor and its IR is stored in bfd_object file. PR ld/17878 * plugin.c: Include <errno.h>. (errno): New. Declare if needed. (plugin_input_file_t): New. (get_input_file): Implemented. (get_view): Likewise. (release_input_file): Likewise. (add_symbols): Updated. (get_symbols): Likewise. (plugin_maybe_claim): Allocate a plugin_input_file_t. Close fd only for a bfd_object input.
2015-01-29Remove plugin_active_plugins_p()H.J. Lu1-8/+0
Replace plugin_active_plugins_p() with link_info.lto_plugin_active. * ldfile.c (ldfile_try_open_bfd): Replace plugin_active_plugins_p() with link_info.lto_plugin_active. * ldlang.c (lang_process): Likewise. * ldmain.c (add_archive_element): Likewise. * plugin.c (plugin_active_plugins_p): Removed. * plugin.h (plugin_active_plugins_p): Likewise.
2015-01-28Make plugin_get_ir_dummy_bfd staticH.J. Lu1-2/+6
* plugin.h (plugin_get_ir_dummy_bfd): Removed. Move comments to ... * plugin.c (plugin_get_ir_dummy_bfd): Here. Make it static.
2015-01-28The initial support for LDPT_GET_VIEWH.J. Lu1-0/+13
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-02ChangeLog rotatation and copyright year updateAlan Modra1-1/+1
2014-08-14Simplify is_ir_dummy_bfd testAlan Modra1-8/+3
is_ir_dummy_bfd started life before BFD_PLUGIN was invented. * plugin.c (is_ir_dummy_bfd): Test BFD_PLUGIN flag rather than flags.claimed.
2014-08-12Fix build breakage when ld plugins disabledAlan Modra1-9/+0
* ldlang.h (struct lang_input_statement_flags): Don't make "reload" field conditional on ENABLE_PLUGINS. * ldlang.c (open_input_bfds): Expand plugin_should_reload. * plugin.h (plugin_should_reload): Delete. * plugin.c (plugin_should_reload): Delete.
2014-08-12Change ld "notice" interface for better handling of indirect symbolsAlan Modra1-14/+19
The main aim of this change was to have non_ir_ref set correctly on new indirect symbols. I could have added a "copy" param to the "notice" function, so that indirect symbols could be created in plugin_notice, but it seemed cleaner to create indirect syms earlier and pass them rather than "string" to "notice". include/ * bfdlink.h (struct bfd_link_callbacks <notice>): Remove "string" param, add "inh". bfd/ * coff-aux.c (coff_m68k_aux_link_add_one_symbol): Only call "notice" here when not calling the generic add_symbol function. Formatting. Correct handling of indirect symbols. Update notice call. * elflink.c (_bfd_elf_notice_as_needed): Update notice call. * linker.c (_bfd_generic_link_add_one_symbol): Create indirect symbols early. Update notice call. Add comments regarding weak symbols vs. indirect. ld/ * ldmain.c (notice): Update args. * plugin.c (plugin_notice): Likewise. Follow warning sym link. Handle new indirect symbol.
2014-08-12Fix non-plugin warning symbol handlingAlan Modra1-0/+1
PR ld/16746 include/ * bfdlink.h (struct bfd_link_info): Add lto_plugin_active. bfd/ * linker.c (_bfd_generic_link_add_one_symbol <WARN>): Handle !lto_plugin_active. ld/ * plugin.c (plugin_load_plugins): Set link_info.lto_plugin_active.
2014-08-06PR14918, lto always links in libgcc_s.soAlan Modra1-0/+11
PR14918 * plugin.c (plugin_opt_plugin_arg): Drop --pass-through.
2014-07-03Reload --as-needed libraries inside groupsAlan Modra1-4/+2
When a shared library appears within --start-group/--end-group ld may only discover a need for loading the library on the second or subsequent pass over archive libraries, as more objects are extracted. ld/ PR 17068 * ldlang.c (load_symbols): Always check flags.reload. (open_input_bfds): Always reload --as-needed shared libraries, not just when rescanning. * ldlang.h (struct lang_input_statement_flags): Update reload comment. * plugin.c (plugin_should_reload): Assume shared library arg. * plugin.h (plugin_should_reload): Update comment. ld/testsuite * ld-elf/pr17068.s: New. * ld-elf/pr17068a.s: New. * ld-elf/pr17068b.s: New. * ld-elf/pr17068c.s: New. * ld-elf/pr17068d.s: New. * ld-elf/pr17068e.s: New. * ld-elf/pr17068ez.s: New. * ld-elf/elf.exp: Run new test.
2014-03-05Update copyright yearsAlan Modra1-1/+1
2013-10-09ld/Roland McGrath1-6/+4
* emultempl/elf32.em (id_note_section_size): Use ATTRIBUTE_UNUSED rather than a dummy assignment for unused parameter. * plugin.c (get_input_file, release_input_file): Likewise.
2013-02-192013-02-19 Sandra Loosemore <sandra@codesourcery.com>Sandra Loosemore1-1/+2
PR ld/15146 ld/ * plugin.c (plugin_notice): Add null check before dereferencing pointer.
2013-02-16Don't add DT_NEEDED for references from the dummy bfdH.J. Lu1-1/+8
bfd/ PR ld/15146 * elflink.c (elf_link_add_object_symbols): Don't add DT_NEEDED for references from the dummy bfd. ld/ PR ld/15146 * plugin.c (plugin_notice): Replace the undefined dummy bfd with the real one. ld/testsuite/ PR ld/15146 * ld-plugin/pr15146.d: New file. * ld-plugin/pr15146a.c: Likewise. * ld-plugin/pr15146b.c: Likewise. * ld-plugin/pr15146c.c: Likewise. * ld-plugin/pr15146d.c: Likewise. * ld-plugin/lto.exp: Add tests for PR ld/15146.
2013-02-16Also trace symbol from the IR bfdH.J. Lu1-4/+4
PR ld/15141 * plugin.c (plugin_notice): Also trace symbol from the IR bfd.
2012-12-03Improve plugin error handlingH.J. Lu1-13/+17
ld/ PR ld/14904 * ldmain.c (main): Don't check plugin_load_plugins return. * lexsup.c (parse_args): Don't check plugin_opt_plugin return. * plugin.c (dlerror): New. Defined if HAVE_DLFCN_H isn't defined. (plugin_opt_plugin): Change return type to void. Stop on dlopen error and report error with dlerror (). (plugin_load_plugins): Change return type to void. Stop on dlsym error and report error with dlerror (). Don't use set_plugin_error. (plugin_call_cleanup): Issue an error for each plugin. * plugin.h (plugin_opt_plugin): Change return type to void. (plugin_load_plugins): Likewise. ld/testsuite/ PR ld/14904 * ld-plugin/plugin-2.d: Update expected error message. * ld-plugin/plugin-4.d: Likewise.
2012-10-22 * plugin.c (plugin_load_plugins): Warning fix.Alan Modra1-2/+4
2012-06-14Handle link_info.pie in ld pluginH.J. Lu1-1/+3
* plugin.c (set_tv_header): Handle link_info.pie.
2012-03-05 * ldlang.h (struct lang_input_statement_flags): New, extract from..Alan Modra1-4/+4
(lang_input_statement_type): ..here. New field "flags". (input_flags): Declare. (missing_file): Delete. * ldmain.h (whole_archive): Delete. (add_DT_NEEDED_for_regular, add_DT_NEEDED_for_dynamic): Delete. * ld.h (ld_config_type <dynamic_link>): Delete. * ldmain.c (whole_archive): Delete. (add_DT_NEEDED_for_regular, add_DT_NEEDED_for_dynamic): Delete. * ldlang.c (missing_file, ldlang_sysrooted_script): Delete. (input_flags): New variable. Replace all uses of config.dynamic_link, missing_file, ldlang_sysrooted_script, whole_archive, add_DT_NEEDED_for_regular and add_DT_NEEDED_for_dynamic with fields from here. * ldfile.c: Likewise. * ldgram.y: Likewise. * ldmain.c: Likewise. * ldwrite.c: Likewise. * lexsup.c: Likewise. * plugin.c: Likewise. * emultempl/aix.em: Likewise. * emultempl/armelf.em: Likewise. * emultempl/elf32.em: Likewise. * emultempl/hppaelf.em: Likewise. * emultempl/linux.em: Likewise. * emultempl/pe.em: Likewise. * emultempl/pep.em: Likewise. * emultempl/ppc64elf.em: Likewise. * emultempl/scoreelf.em: Likewise. * emultempl/spuelf.em: Likewise. * emultempl/sunos.em: Likewise. * emultempl/vms.em: Likewise. * ldlang.c (new_afile): Use memset to init zero fields. (load_symbols): Simplify save and restore of flags around command file processing. * ldfile.c (is_sysrooted_pathname): Tidy.
2011-10-20 PR ld/13287Alan Modra1-0/+11
* plugin.c (plugin_should_reload): New function. * plugin.h (plugin_should_reload): Declare. * ldlang.c (open_input_bfds): Use above function.
2011-10-10 * ldmain.c (main): Move code twiddling various config and link_infoAlan Modra1-8/+4
bits to.. * lexsup.c (parse_args): ..here. Move plugin_load_plugins call into main. * plugin.c (set_tv_header): Test link_info.executable, not link_info.shared. (is_visible_from_outside): Likewise. Delete redundant is_ir_dummy_bfd check and "section" parameter.
2011-10-06 PR ld/13329Alan Modra1-36/+51
ld/ * plugin.c (tv_header_tags): Add LDPT_GET_SYMBOLS_V2. (set_tv_header): Handle it. Adjust LDPT_GET_SYMBOLS. Return void. (get_symbols): Add def_ironly_exp param. Return that value for syms exported from shared libs. (get_symbols_v1, get_symbols_v2): New wrapper functions. * testplug.c: Update for above changes. ld/testsuite/ * ld-plugin/plugin-1.d, * ld-plugin/plugin-2.d, * ld-plugin/plugin-3.d, * ld-plugin/plugin-4.d, * ld-plugin/plugin-5.d, * ld-plugin/plugin-6.d, * ld-plugin/plugin-7.d, * ld-plugin/plugin-8.d, * ld-plugin/plugin-9.d, * ld-plugin/plugin-10.d, * ld-plugin/plugin-11.d: Update.
2011-09-16Check if a symbol is hidden by linker script.H.J. Lu1-0/+4
bfd/ 2011-09-15 H.J. Lu <hongjiu.lu@intel.com> PR ld/12975 * bfd-in.h (bfd_elf_size_dynamic_sections): Remove pointer to struct bfd_elf_version_tree. * elflink.c (elf_info_failed): Remove verdefs. (_bfd_elf_export_symbol): Updated. _bfd_elf_link_assign_sym_version): Likewise. (bfd_elf_size_dynamic_sections): Remove pointer to struct bfd_elf_version_tree. Updated. (bfd_elf_gc_mark_dynamic_ref_symbol): Check if a symbol is hidden by linker script. * linker.c (bfd_hide_sym_by_version): New. * bfd-in2.h: Regenerated. include/ 2011-09-15 H.J. Lu <hongjiu.lu@intel.com> PR ld/12975 * bfdlink.h (bfd_link_info): Add version_info. ld/ 2011-09-15 H.J. Lu <hongjiu.lu@intel.com> PR ld/12975 * ldlang.c (lang_elf_version_info): Removed. (lang_register_vers_node): Replace lang_elf_version_info with link_info.version_info. (lang_add_vers_depend): Likewise. * pe-dll.c (process_def_file_and_drectve): Likewise. * emultempl/solaris2.em (elf_solaris2_before_allocation): Likewise. * ldlang.h (lang_elf_version_info): Removed. * plugin.c (is_visible_from_outside): Check if symbol is hidden by version script. * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Remove lang_elf_version_info. ld/testsuite/ 2011-09-15 H.J. Lu <hongjiu.lu@intel.com> PR ld/12975 * ld-elf/pr12975.d: New. * ld-elf/pr12975.s: Likewise. * ld-elf/pr12975.t: Likewise.
2011-08-17 PR ld/12762Alan Modra1-10/+22
bfd/ * bfd-in.h (struct bfd_section_already_linked): Forward declare. (_bfd_handle_already_linked): Declare. * coff-alpha.c (_bfd_ecoff_section_already_linked): Define as _bfd_coff_section_already_linked. * coff-mips.c (_bfd_ecoff_section_already_linked): Likewise. * coffcode.h (coff_section_already_linked): Likewise. * cofflink.c (coff_link_add_symbols): Revert 2011-07-09 changes. * elf-bfd.h: Likewise. * libbfd-in.h: Likewise. * targets.c: Likewise. * linker.c (bfd_section_already_linked): Likewise. (bfd_section_already_linked_table_lookup): Likewise. (bfd_section_already_linked_table_insert): Likewise. (_bfd_generic_section_already_linked): Likewise. Call _bfd_handle_already_linked. (_bfd_handle_already_linked): New function, split out from.. * elflink.c (_bfd_elf_section_already_linked): ..here. Revert 2011-07-09 changes. Avoid unnecessary strcmp when matching already_linked_list entries. Match plugin linkonce section. (section_signature): Delete. * coffgen.c (_bfd_coff_section_already_linked): New function. * libcoff-in.h (_bfd_coff_section_already_linked): Declare. * libbfd.h: Regenerate. * libcoff.h: Regenerate. * bfd-in2.h: Regenerate. ld/ * ldlang.c (section_already_linked): Revert 2011-07-09 changes. * plugin.c: Likewise. (asymbol_from_plugin_symbol): Create linkonce section for syms with comdat_key.
2011-08-09 PR ld/13066Alan Modra1-6/+5
PR ld/12762 * plugin.c (add_symbols): Revert 2011-08-05.
2011-08-05 PR ld/12762Alan Modra1-5/+7
bfd/ * elflink.c (_bfd_elf_section_already_linked): Return matched status. Remove COFF comdat section handling. * linker.c (_bfd_generic_section_already_linked): Return matched status. Don't set SEC_GROUP in l_flags for plugin entries. (bfd_section_already_linked): Update prototype. * targets.c (_section_already_linked): Likewise. * elf-bfd.h (_bfd_elf_section_already_linked): Likewise. * libbfd-in.h (_bfd_generic_section_already_linked): Likewise. (_bfd_nolink_section_already_linked): Update. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. ld/ * plugin.c (add_symbols): Exclude comdat_key symbols from symbol table if already seen.
2011-07-09 PR ld/12942Alan Modra1-1/+11
bfd/ * elflink.c (elf_link_add_object_symbols): Use elf_discarded_section rather than kept_section to determine whether a symbol is from a discarded section. * cofflink.c (coff_link_add_symbols): Make symbols from discarded sections appear undefined. * elf-bfd.h (_bfd_elf_section_already_linked): Replace "asection *" with "struct already_linked *". * libbfd-in.h (_bfd_nolink_section_already_linked): Likewise. (_bfd_generic_section_already_linked): Likewise. (bfd_section_already_linked_table_insert): Likewise. (struct already_linked): New. (struct bfd_section_already_linked): Use it. * elflink.c (_bfd_elf_section_already_linked): Replace. "asection *" with "struct already_linked *". Replace the plugin dummy with the LTO output. * linker.c (_bfd_generic_section_already_linked): Likewise. * targets.c (struct already_linked): Add forward declaration. (bfd_target): Replace "struct bfd_section *" with "struct already_linked *" in _section_already_linked. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. include/ * bfdlink.h (bfd_link_info): Add loading_lto_outputs. ld/ * ldlang.c (section_already_linked): Pass "struct already_linked *" to bfd_section_already_linked. (lang_process): Set link_info.loading_lto_outputs before loading LTO outputs. * plugin.c: Include "libbfd.h". (add_symbols): Call bfd_section_already_linked with comdat_key.
2011-05-17 PR ld/12760Alan Modra1-6/+34
include/ * bfdlink.h (struct bfd_link_callbacks <notice>): Add "flags" and "string" param. bfd/ * coff-aux.c (coff_m68k_aux_link_add_one_symbol): Adjust "notice" call. * elflink.c (elf_link_add_object_symbols): Likewise. * linker.c (_bfd_generic_link_add_one_symbol): Likewise. ld/ * ldmain.c (notice): Add "flags" and "string" param. * plugin.c (plugin_notice): Likewise. Handle indirect, warning and constructor syms.
2011-05-16 PR ld/12760Alan Modra1-3/+8
* plugin.c (plugin_notice): Set u.undef.abfd for symbols made undefweak.
2011-04-24 PR ld/12365Alan Modra1-112/+36
PR ld/12696 include/ * bfdlink.h (ENUM_BITFIELD): Define. (struct bfd_link_hash_entry): Make "type" a bitfield. Add "non_ir_ref". (struct bfd_link_callbacks <notice>): Pass bfd_link_hash_entry pointer rather than "name". bfd/ * coff-aux.c (coff_m68k_aux_link_add_one_symbol): Update "notice" call. * linker.c (_bfd_link_hash_newfunc): Clear bitfields. (_bfd_generic_link_add_one_symbol): Update "notice" call. * elflink.c (_bfd_elf_merge_symbol): Don't skip weak redefs when it is a redef of an IR symbol in a real BFD. ld/ * ldmain.c (notice): Delete "name" param, add "h". * plugin.c (plugin_notice): Likewise. Set non_ir_ref. Handle redefinitions of IR symbols in real BFDs. (plugin_multiple_definition, plugin_multiple_common): Delete. (non_ironly_hash, init_non_ironly_hash): Delete. (is_visible_from_outside): Traverse entry_symbol chain. (get_symbols): Use non_ir_ref flag rather than hash lookup.
2011-04-20 PR ld/12365Alan Modra1-2/+66
bfd/ * elfcode.h (elf_slurp_symbol_table): Put common plugin IR symbols in their own common section. * elflink.c (elf_link_add_object_symbols): Likewise. * linker.c (generic_link_check_archive_element): Don't lose flags if common section is pre-existing. (_bfd_generic_link_add_one_symbol): Likewise. ld/ * ldfile.c (ldfile_try_open_bfd): Move code creating and switching to plugin IR BFD.. * ldmain.c (add_archive_element): ..and similar code here.. * plugin.c (plugin_maybe_claim): ..to here. New function. (plugin_call_claim_file): Make static. (asymbol_from_plugin_symbol): Set ELF st_shndx for common syms. (plugin_multiple_common): New function. (plugin_call_all_symbols_read): Hook in plugin_multiple_common. * plugin.h (plugin_call_claim_file): Don't declare. (plugin_maybe_claim): Declare.
2011-04-20 PR ld/12365Alan Modra1-29/+10
include/ * bfdlink.h (struct bfd_link_callbacks): Modify multiple_definition and multiple_common parameters to pass in a bfd_link_hash_entry pointer rather than name,bfd etc. found in the hash entry. bfd/ * elflink.c (_bfd_elf_merge_symbol): Update multiple_common calls. * linker.c (_bfd_generic_link_add_one_symbol): Likewise. Call multiple_definition regardless of allow_multiple_definition. * simple.c (simple_dummy_multiple_definition): Update. * xcofflink.c (xcoff_link_add_symbols): Update multiple_definition calls. ld/ * ldmain.c (multiple_definition): Take a bfd_link_hash_entry pointer arg rather than "name", "obfd", "osec", "oval". Add code removed from linker.c. Hack around xcofflink.c oddity in passing NULL nbfd. (multiple_common): Similarly. * plugin.c (orig_allow_multiple_defs): Delete. (plugin_call_all_symbols_read): Don't twiddle allow_multiple_definition. (plugin_multiple_definition): Update.
2011-04-17 PR ld/12365Alan Modra1-89/+124
PR ld/12672 bfd/ * bfd.c (BFD_PLUGIN): Define. (BFD_FLAGS_SAVED, BFD_FLAGS_FOR_BFD_USE_MASK): Add BFD_PLUGIN. * bfd-in2.h: Regenerate. * elflink.c (elf_link_output_extsym): Strip undefined plugin syms. * opncls.c (bfd_make_readable): Don't lose original bfd flags. ld/ * ldfile.c (ldfile_try_open_bfd): Don't attempt any plugin action when no_more_claiming. * ldmain.c (add_archive_element): Likewise. (multiple_definition): Remove plugin_multiple_definition call. (notice): Remove plugin_notice call. * ldlang.c (lang_list_insert_after, void lang_list_remove_tail): Move. Delete prototype. (plugin_insert): New static var. (open_input_bfds): Only rescan libs after plugin insert point. (lang_gc_sections): Omit plugin claimed files. (lang_process): Set plugin_insert. Only rescan when plugin adds objects. * plugin.h (no_more_claiming): Declare. (plugin_notice, plugin_multiple_definition): Don't declare. * plugin.c: Formatting. (orig_notice_all, orig_allow_multiple_defs, orig_callbacks, plugin_callbacks): New static vars. (no_more_claiming): Make global. (plugin_cached_allow_multiple_defs): Delete. (plugin_get_ir_dummy_bfd): Set SEC_EXCLUDE on dummy .text section, use newer bfd_make_section variant. Make COMMON section too. Error handling. Correct setting of gp size. (asymbol_from_plugin_symbol): Properly cast last arg of concat. (message): Likewise for ACONCAT. (asymbol_from_plugin_symbol): Use our COMMON section. (get_symbols): When report_plugin_symbols, show visibility too. (init_non_ironly_hash): Move. Don't test non_ironly_hash. (plugin_load_plugins): Save state of linker callbacks, set up to call plugin_notice instead. Call init_non_ironly_hash here. (plugin_call_all_symbols_read): Set plugin_multiple_definition in plugin callbacks. (plugin_notice): Rewrite. (plugin_multiple_definition): Make static, call original callback. ld/testsuite/ * ld-plugin/plugin-7.d: Adjust for plugin changes. * ld-plugin/plugin-8.d: Likewise. * ld-plugin/plugin.exp: Pass --verbose=2 for visibility test, and compare ld output to.. * ld-plugin/plugin-12.d: New.
2011-03-28 * configure.in: Check for windows.h, not Windows.h.Joseph Myers1-1/+1
* configure: Regenerate. * plugin.c: Include windows.h, not Windows.h.
2011-03-10[PATCH] Respect symbol wrappers when computing symbol resolutions.Dave Korn1-3/+6
ld/ChangeLog: 2011-03-10 Dave Korn <dave.korn.cygwin@gmail.com> * plugin.c (get_symbols): Use wrapped lookup for undefined symbols.
2011-03-10[PATCH] Do not use dummy bfd suffix for recognition, make it human-readable ↵Dave Korn1-14/+10
instead. ld/ChangeLog: 2011-03-10 Dave Korn <dave.korn.cygwin@gmail.com> * plugin.c (IRONLY_SUFFIX): Revise to nicely human-readable form. (IRONLY_SUFFIX_LEN): Delete. (plugin_get_ir_dummy_bfd): Don't append IRONLY_SUFFIX. (is_ir_dummy_bfd): Don't look for suffix; check claimed flag of enclosing lang input statement instead.