name. For %C, print the function name on a separate line, to keep
the length of error messages under control.
* ldmain.c (multiple_definition): Use %D for ``first defined
here.''
(undefined_symbol): Use %D for ``more undefined references
follow''.
PR 3770.
bfd_check_format_matches, and, if ambiguous, print a list of
matching formats. If file format is not recognized, treat file as
a linker script.
* ldgram.y (yyerror): If assuming an object file is a script,
mention that. Tweak the format of the error messages.
* ldlex.l (lex_warn_invalid): If assuming an object is a script,
guess that this is not actually a script, and just report that the
file format was not recognized.
* ld.texinfo (Options): Admit that -( may be used more than once.
Add note that unrecognized object files are now treated as linker
scripts.
* ldfile.c (ldfile_input_filename): Make const.
(ldfile_assumed_script): New variable.
(try_open): Change arguments types to const.
(ldfile_find_command_file): Likewise.
(ldfile_open_command_file): Likewise. Also, set lineno to 1.
* ldfile.h: Update declarations for ldfile.c changes.
* ldlex.l: Include <ctype.h>.
(file_name_stack): Change to be const char *.
(lineno_stack): New static variable.
(<<EOF>>): Set lineno as well as ldfile_input_filename.
(lex_push_file): Make name argument const. Initialize
lineno_stack entry.
(lex_redirect): Initialize lineno_stack entry.
(lex_warn_invalid): Handle non printable characters nicely.
* ldlex.h (lex_push_file): Declare second argument as const.
* ldgram.y (ifile_p1): Recognize GROUP.
* ldlex.l: Recognize GROUP.
* ld.texinfo (Option Commands): Document GROUP.
(GENERATE_SHLIB_SCRIPT): Define as yes.
(DYNAMIC_LINK): Define as false.
* emultempl/elf32.em (gld${EMULATION_NAME}_before_parse):
Initialize config.dynamic_link to DYNAMIC_LINK if it is defined.
(gld${EMULATION_NAME}_place_orphan): Reset stat_ptr at end.
* Makefile.in (eelf32mipb.c): Depend upon elf32.em rather than
generic.em.
define __start_SECNAME and __stop_SECNAME around sections whose
names can be represented in C, for the benefit of symbol sets in
glibc.
* ldemul.h (ldemul_place_orphan): Declare.
(ld_emulation_xfer_type): Add place_orphan field.
* ldemul.c (ldemul_place_orphan): New function.
* ldlang.h (wild_doit): Declare.
* ldlang.c (wild_doit): Make nonstatic.
(lang_place_orphans): Call ldemul_place_orphan.
* emultempl/elf32.em: Include <ctype.h> and "ldgram.h".
(hold_section, hold_use, hold_text, hold_data, hold_bss): New
static variables.
(gld${EMULATION_NAME}_place_orphan): New static function.
(gld${EMULATION_NAME}_place_section): New static function.
(ld_${EMULATION_NAME}_emulation): Initialize place_orphan field.
* emultempl/linux.em (gld${EMULATION_NAME}_find_address_statement):
New function; add 0x20 to any use of -Ttext.
(gld${EMULATION_NAME}_create_output_section_statements): New
function.
(ld_${EMULATION_NAME}_emulation): Use the new function
gld${EMULATION_NAME}_create_output_section_statements.
Add a new script operator, PROVIDE, to define a symbol only if it
is needed.
* ldgram.y (PROVIDE): New token.
(assignment): Accept PROVIDE.
* ldlex.l (PROVIDE): New token.
* ldexp.h (node_type): Add etree_provide to node_class enum.
(exp_provide): Declare.
* ldexp.c (exp_fold_tree): Handle etree_provide.
(exp_provide): New function.
(exp_print_tree): Handle etree_provide.
* ld.texinfo: Document PROVIDE.
lang_one_common as power of two.
(lang_one_common): Get common symbol alignment from linker hash
table entry. Treat desired alignment as a power of two.
* lexsup.c (S_ISDIR): Define if not already defined.
(parse_args): Add support for -rpath. If -R is used to name a
directory, treat it as -rpath for Solaris compatibility.
* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
Pass command_line.rpath to bfd_elf32_size_dynamic_sections.
* ldmain.c (main): Initialize command_line.rpath to NULL.
* ld.texinfo: Document -rpath option.
synonyms --start-group --end-group.
* ldlang.h (enum statement_enum): Add lang_group_statement_enum.
(lang_group_statement_type): Define new struct.
(lang_statement_union_type): Add group_statement field.
(lang_enter_group, lang_leave_group): Declare.
* ldlang.c (lang_for_each_statement_worker): Handle
lang_group_statement_enum.
(map_input_to_output_sections, print_statement): Likewise.
(lang_size_sections, lang_do_assignments): Likewise.
(open_input_bfds): Completely rewrite. Now does its own looping,
rather than using lang_for_each_statement. Handle groups.
(lang_process): Update call to open_input_bfds.
(print_group): New static function.
(lang_enter_group, lang_leave_group): New static functions.
* ldfile.c (ldfile_open_file): If the file has already been
opened, just return rather than taking an assertion failure.
* ldver.c (help): Mention new options.
* ld.texinfo: Document new options.
* emultempl/linux.em: New file providing support for linking
against Linux shared libraries.
* config/i386-linux.mt (ei386linux.c): Depend upon linux.em.
* emulparams/i386linux.sh (TEMPLATE_NAME): Define as linux.
(ld_emulation_xfer_type): Add new field open_dynamic_archive.
* ldemul.c: Include ldexp.h and ldlang.h.
(ldemul_open_dynamic_archive): New function.
* ldfile.h (ldfile_open_file_search): Declare.
* ldfile.c: Include ldemul.h.
(try_open_bfd): Rename from cache_bfd_openr. Return boolean
argument, not bfd *. Change all callers.
(ldfile_open_file_search): Rename from open_a. Return boolean
argument, not bfd *. Clean up. Change all callers.
(ldfile_open_file): If doing a dynamic link, call
ldemul_open_dynamic_archive rather than assuming the extension of
a dynamic object is ".so".
* emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive):
New function.
(ld_${EMULATION_NAME}_emulation): Initialize open_dynamic_archive
field.
* emultempl/sunos.em (ld_${EMULATION_NAME}_emulation): Likewise.