(warning_callback): Add new parameter symbol. Call
warning_find_reloc to try to find the section and VMA.
(warning_find_reloc): New static function.
* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
Pass NULL as symbol parameter to warning callback.
* configure.tgt: Add i386lelf to targ_extra_emuls for
i[345]86-*-linuxaout* and i[345]86-*-linuxoldld. For
i[345]86-*-linux*, set targ_emul to i386lelf, and add elf_i386 to
targ_extra_emuls.
* emulparams/i386lelf.sh: New file, a copy of elf_i386.sh.
* emultempl/elf32.em: If TARGET_IS_i386lelf, use autoconf
recommended mechanism to define DIR and struct dirent.
(libcmp): New static function use only when TARGET_IS_i386lelf.
(gld${EMULATION_NAME}_open_dynamic_archive): Likewise.
* Makefile.in (ALL_EMULATIONS): Add ei386lelf.o
(ei386lelf.c): New target.
* configure.in: Call AC_CONFIG_HEADER with config.h:config.in.
Check for config.h:config.in when creating stamp-h.
* configure: Rebuild.
* Makefile.in (stamp-h): Depend upon config.in rather than
config.h.in. Set CONFIG_HEADERS to config.h:config.in when
calling config.status.
parameters.
* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
Change call to warning accordingly.
* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): If not
relocateable and not shared, put .gnu.warning.SYMBOL sections into
the .text section.
* emultempl/{armpe.sc, i386pe.sc}: Deleted.
* emultempl/pe.sc: New file performs generic PE support and sorts
archive members.
* emulparams/{armpe.sh,i386pe.sh}: Use new file.
* scripttempl/{armpe.sc, i386pe.sc}: Deleted
* scripttempl/pe.sc: New.
* Makefile.in: Use new files.
b
* scripttempl/armpe.sc: Always start code at 0x401000, even
if -r.
* ldwrite.c (strdup): New extern declaration.
* ldgram.y (atype): New rule to clarify type parsing.
* ldlang.c (init_os): Remove commented out code.
(lang_size_sections): Set SEC_ALLOC and SEC_LOAD bits
unless told not to by the link script.
(CASE, EXTERN, START): New tokens.
(mri_script_command): Handle CASE, EXTERN, INCLUDE, START.
(casesymlist): New nonterminal.
(extern_name_list): New nonterminal.
* ldlex.l: Accept lower case trailing base specifiers. Don't
ignore the first digit when the base is a suffix. Accept many
EXPRESSION state tokens in MRI state. Support MRI continuation
lines and MRI semicolon comments. Accept all MRI keywords in
lower case. Add CASE, EXTERN, and START MRI keywords.
declaration.
(ld_emulation_xfer_type): Add search parameter to
open_dynamic_archive entry point.
* ldemul.c (ldemul_open_dynamic_archive): Add search parameter.
* ldfile.c (ldfile_try_open_bfd): Rename from try_open_bfd, and
make non-static. Change all callers to use new name.
(ldfile_open_file_search): Make static. If entry is dynamic, call
ldemul_open_dynamic_archive.
(ldfile_open_file): Don't call ldemul_open_dynamic_archive.
* ldfile.h (ldfile_open_file_search): Don't declare.
(ldfile_try_open_bfd): Declare.
* emultempl/elf32.em (gld${EMULATION_NAME}_open_dynamic_archive):
Accept search parameter. Don't search for a library, just look in
a single place.
* emultempl/linux.em (gld${EMULATION_NAME}_open_dynamic_archive):
Likewise.
* ldlang.h (lang_input_statement_type): Add new field dynamic.
* ldlang.c (new_afile): Set dynamic from config.dynamic_link.
* ldfile.c: Include bfdlink.h.
(ldfile_open_file): Check dynamic field of entry, not global
dynamic_link field. Don't do a dynamic search when doing a
relocateable link.
* ldmain.c (main): Don't warn about dynamic_link for a
relocateable link.
* emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Skip file if
dynamic is false.
(gld${EMULATION_NAME}_create_output_section_statements): Always
loop over input files.
* Makefile.in: Rebuild dependencies.
* ldmain.c (main): Always initialize PE info in link_info.
* lexsup.c (OPTION_BASE_FILE): New option.
(parse_args): Handle new option.
* emulparams/armpe.sh: Output pei.
* emultempl/i386pe.em: Add newline to end.
* scripttempl/armpe.sc: Change output and quote the $s.
* scripttempl/i386pe.sc: Change output and quote the $s.
* configure.in: Change linux to default to elf. Using
i[345]86-*-linuxaout will build a linker which defaults to a.out.
* config/i386-laout.mt: Rename from old config/i386-linux.mt.
* config/i386-linux.mt: Rename from old config/i386-lelf.mt.
* config/i386-lelf.mt: Remove.
describes an archive, call bfd_link_add_symbols on each member.
* ldmain.c (whole_archive): New variable.
(main): Initialize it to false.
* ldmain.h: Declare whole_archive.
* lexsup.c (parse_args): Grok --whole-archive switch.
* ldgram.y: Add token LNAME.
(input_list): Treat LNAME like NAME, but pass it to
lang_add_input_file as lang_input_file_is_l_enum.
* ld.texinfo: Document using -lFILENAME in INPUT.
(gld${EMULATION_NAME}_place_orphan): Place readonly sections with
contents whose names begin with ".rel" after hold_rel. Remove the
assertion which checked for unplaced .rel sections. Don't try to
sort the section into place if place->bfd_section is NULL.
(gld${EMULATION_NAME}_place_section): Set hold_rel to the first
section beginning with ".rel".
an internal linker script, print out the script.
* ldfile.c (try_open): Reindent function. Make the messages about
opening script files more informative.
PR 6309.
a MIPS target, clobber the size of all but the first input
.reginfo section to be 0, so that lang_size_sections sets the
correct size for the output .reginfo section.
* config/i386linux.mh: New file; set HOSTING_CRT0.
* genscripts.sh: Don't put ${libdir} in LIB_PATH if it is
/usr/lib, since that is already in LIB_PATH.
linker scripts if place is not NULL. Put commands found in an
assumed linker script into place.
(lookup_name): Pass NULL as place argument to load_symbols.
(open_input_bfds): In lang_input_statement_enum case, pass a place
argument to load_symbols, and store any new statements after the
current one.
PR 5917.
* emulparams/vax.sh (OUTPUT_FORMAT): Use "a.out".
* scripttempl/go32coff.sc: Changes from DJ Delorie: Change default entry point
to "start". Align at end of each section to 0x200. Start .text section 0x1000
later. Add _etext, _edata, _end symbols.
composed of different object file formats.
(ldctor_build_sets): If the output format does not support the
reloc, and we are not generating a relocateable link, try getting
the reloc from the input format.
(CXX): Move definition, change from g++ to gcc.
(EXPECT, RUNTEST): Copy definitions from top level Makefile.in.
(RUNTEST_CC, RUNTEST_CFLAGS): Remove.
(RUNTEST_CXX, RUNTEST_CXXFLAGS): Remove.
(CC_FOR_TARGET, CXX_FOR_TARGET): Copy from top level Makefile.in.
(.cc.o): Comment out.
(testdir): Remove.
(site.exp): Don't create testdir or set tmpdir.
(check): Run checks even if not running native. Use CC_FOR_TARGET
instead of RUNTEST_CC, and likewise for CXX.
(cdtest targets): Comment out.
* config/solaris2.mh (HOSTING_LIBS): Only mention crtend.o once.
* cdtest-bar.cc, cdtest-foo.cc, cdtest-foo.h: Remove.
* cdtest-main.cc, cdtest.exp: Remove.
* lexsup.c (parse_args): Handle -EB and -EL by setting
command_line.endian.
* ldgram.y (ifile_p1): Accept OUTPUT_FORMAT with three arguments.
* ldlang.c (lang_add_output_format): Add arguments big and little.
If command_line.endian is set, use it to select big or little
rather than the default. Changed all callers.
* ldlang.h (lang_add_output_format): Update declaration.
* emulparams/elf32mipb.sh: Define BIG_OUTPUT_FORMAT and
LITTLE_OUTPUT_FORMAT.
* emulparams/elf32mipl.sh: Likewise.
* emulparams/mipsbig.sh: Likewise.
* emulparams/mipsbsd.sh: Likewise.
* emulparams/mipsidt.sh: Likewise.
* emulparams/mipsidtl.sh: Likewise.
* emulparams/mipslit.sh: Likewise.
* scripttempl/elf.sc: Define BIG_OUTPUT_FORMAT and
LITTLE_OUTPUT_FORMAT if not already defined. Pass them to
OUTPUT_FORMAT.
* scripttempl/mips.sc: Pass BIG_OUTPUT_FORMAT and
LITTLE_OUTPUT_FORMAT to OUTPUT_FORMAT.
* scripttempl/mipsbsd.sc: Likewise.
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.
* ld.h (args_type): Add new field interpreter.
* lexsup.c (parse_args): Add dynamic-linker to longopts, and
handle it.
* ldmain.c (main): Initialize command_line.interpreter to NULL.
* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Get
the ELF backend to return the .interp section. If
command_line.interpreter is not NULL, set the contents of .interp
to it.
* ld.texinfo: Mention -dynamic-linker.
* lexsup.c (parse_args): Add traditional_format to longopts, and
handle it.
* ldmain.c (main): Initialize config.traditional_format to false.
* ldlang.c (ldlang_open_output): Set BFD_TRADITIONAL_FORMAT in BFD
flags of output_bfd according to config.traditional_format.
* ld.texinfo: Document -traditional-format.
* aout.sc: Don't define __DYNAMIC here. Add new sections used by
shared library support code.
* emultempl/sunos.em: New file.
* emulparams/sun4.sh (TEMPLATE_NAME): Define as sunos.
* Makefile.in (esun4.c): Depend upon sunos.em, not generic.em.
total_size, superfile and chain.
* ldfile.c (open_a): Don't clear search_dirs_flag.
(ldfile_open_file): Don't try to open superfile. Assert that file
has not already been opened.
* ldlang.c (new_afile): Don't initialize superfile.
* ldmain.c (add_archive_element): Don't initialize subfiles or
chain or superfile. Initialize search_dirs_flag to false.
.reginfo an address.
(OTHER_READWRITE_SECTIONS): Don't give .lit4 or .lit8 an address.
(OTHER_SECTIONS): Define for .gptab.sdata and .gptab.sbss.
* scripttempl/elf.sc: Use OTHER_SECTIONS at end of script.
* ld.h (ld_config_type): Add field dynamic_link.
* ldmain.c (main): Initialize config.dynamic_link to false. Warn
on attempts to use -r with -relax, -call_shared or -s.
* lexsup.c (longopts): Separate OPTION_CALL_SHARED from
OPTION_NON_SHARED. Add OPTION_IGNORE. Adjust macro values
accordingly. Add "dy" and "non_shared" options. Change "Qy" to
OPTION_IGNORE for now. Handle OPTION_CALL_SHARED and
OPTION_NON_SHARED by setting dynamic_link field accordingly.
Handle OPTION_IGNORE by ignoring it. Clear dynamic_link field for
-r and -Ur.
* ldfile.c (ldfile_open_file): If config.dynamic_link is true, try
opening a file with a .so extension first.
* emultempl/elf32.em: New file.
* emulparams/elf32_sparc.sh (TEXT_START_ADDR): Change to 0x10000.
(NONPAGED_TEXT_START_ADDR): Likewise.
(TEMPLATE_NAME): Define as elf32.
(DATA_PLT): Define.
* emulparams/elf_i386.sh (TEMPLATE_NAME): Define as elf32.
* scripttempl/elf.sc: Add placement for new dynamic sections.
Don't use CREATE_OBJECT_SYMBOLS. Define _etext, _edata and _end
outside of any section. Don't use ALIGN(8); just let one section
VMA follow another. Put .dynbss in .bss. Don't mention debugging
sections; they'll be handled correctly anyhow.
* Makefile.in (eelf_i386.c): Depend upon elf32.em, not generic.em.
* cdtest-foo.cc: Use explicit "#pragma implementation".
* cdtest-bar.cc: Renamed from cdtest-func.cc.
* Makefile.in: References to cdtest-func.o changed to cdtest-bar.o.
* ldlang.c (out_bfd_get_section_by_name): Remove.
(wild_section): Call bfd_get_section_by_name rather than
our_bfd_get_section_by_name. Don't call wild_doit if there is no
section.
(lang_create_output_section_statements): Remove.
(map_input_to_output_sections): For several cases, call init_os if
it has not already been called.
(lang_size_sections): If output section was not created, skip it.
(lang_process): Don't call lan_create_output_section_statements.
(lang_place_orphans): Skip files with just_syms_flags set to true.
* ld.texinfo: Document change.
* ldlang.c (lang_size_sections): If dot moves because of an
assignment, don't try to insert a pad into the absolute output
section, just change the address of the default memory region
instead.
* Makefile.in (em_m68klynx.c, em_i386lynx.c, em_sparclynx.c): Use
Lynx-specific script templates.
* configure.in (sparclite*-*-coff): Use coff-sparc.
* emulparams/i386lynx.sh (SCRIPT_NAME): Set to i386lynx.
* emulparams/sparclynx.sh (SCRIPT_NAME): Set to sparclynx.
(ENTRY): Set to __main.
* scripttempl/i386lynx.sc: New file, script for I386 Lynx.
* scripttempl/m68klynx.sc: Add insertion of ctor/dtor sections.
* scripttempl/sparclynx.sc: New file, script for uSparc Lynx.
.fini sections into .text; keep them separate.
* config/i386sco.mh (HOSTING_CRT0): If ../gcc/crtbegin.o does not
exist, get crtbegin based on gcc -print-libgcc-file-name.
(HOSTING_LIBS): Similar change for ../gcc/crtend.o.