From 76359541825cf36ecd14ab6b5974ee56e1c59eff Mon Sep 17 00:00:00 2001 From: Thomas Preud'homme Date: Fri, 15 Jul 2016 17:49:08 +0100 Subject: Add support for creating ELF import libraries 2016-07-15 Thomas Preud'homme bfd/ * elf-bfd.h (elf_backend_filter_implib_symbols): Declare backend hook. (_bfd_elf_filter_global_symbols): Declare. * elf.c (_bfd_elf_filter_global_symbols): New function. * elflink.c (elf_filter_global_symbols): Likewise. (elf_output_implib): Likewise. (bfd_elf_final_link): Call above function, failing if it does. * elfxx-target.h (elf_backend_filter_implib_symbols): Define macro and default it to NULL. (elf_backend_copy_indirect_symbol): Fix spacing. (elf_backend_hide_symbol): Likewise. (elfNN_bed): Initialize elf_backend_filter_implib_symbols backend hook. include/ * bfdlink.h (struct bfd_link_info): Declare new ldscript_def and out_implib_bfd fields. 2016-07-15 Thomas Preud'homme Nick Clifton ld/ * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Open import library file for writing and initialize implib_bfd field of link_info structure. * emultempl/pe.em (pe_implib_filename): Remove variable declaration. (OPTION_IMPLIB_FILENAME): Remove macro definition. (gld${EMULATION_NAME}_add_options): Remove --out-implib option. (gld_${EMULATION_NAME}_list_options): Likewise. (gld${EMULATION_NAME}_handle_option): Likewise. (gld_${EMULATION_NAME}_finish): Use command_line.out_implib_filename instead of pe_implib_filename. * emultempl/pep.em (pep_implib_filename): Remove variable declaration. (OPTION_IMPLIB_FILENAME): Remove enumerator. (gld${EMULATION_NAME}_add_options): Remove --out-implib option. (gld_${EMULATION_NAME}_list_options): Likewise. (gld${EMULATION_NAME}_handle_option): Likewise. (gld_${EMULATION_NAME}_finish): Use command_line.out_implib_filename instead of pep_implib_filename. * ld.h (args_type): Declare new out_implib_filename field. * ld.texinfo (--out-implib): Move documentation to arch-independent part and rephrase to apply to ELF targets. * ldexp.c (exp_fold_tree_1): Set ldscript_def field to 1 for symbols defined in linker scripts. * ldlex.h (enum option_values): Declare new OPTION_OUT_IMPLIB enumerator. * lexsup.c (ld_options): Add entry for new --out-implib switch. (parse_args): Handle OPTION_OUT_IMPLIB case. * testsuite/ld-elf/elf.exp (Generate empty import library): New test. (Generate import library): Likewise. * testsuite/ld-elf/implib.s: Likewise. * testsuite/ld-elf/implib.rd: New file. * testsuite/ld-elf/empty-implib.out: Likewise --- include/bfdlink.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'include/bfdlink.h') diff --git a/include/bfdlink.h b/include/bfdlink.h index b392d54..9b2194f 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -108,6 +108,9 @@ struct bfd_link_hash_entry in a linker script. */ unsigned int linker_def : 1; + /* Symbol defined in a linker script. */ + unsigned int ldscript_def : 1; + /* A union of information depending upon the type. */ union { @@ -532,6 +535,9 @@ struct bfd_link_info /* The output BFD. */ bfd *output_bfd; + /* The import library generated. */ + bfd *out_implib_bfd; + /* The list of input BFD's involved in the link. These are chained together via the link.next field. */ bfd *input_bfds; -- cgit v1.1