1999-07-22  Philip Blundell  <pb@nexus.co.uk>

	* emulparams/armelf_linux26.sh (DATA_START_SYMBOLS): Define.
	(OTHER_BSS_SYMBOLS, OTHER_BSS_END_SYMBOLS): Likewise.
	* emulparams/armelf_linux.sh (DATA_START_SYMBOLS): Define.

	* configure.tgt (arm*-*-uclinux*, thumb-*-uclinux*,
	thumb-*-linux-gnu*): New targets.

1999-07-21  Mark Elbrecht  <snowball3@bigfoot.com>

	* scripttempl/i386go32.sc: Add handling of linkonce sections.

	* configure.bat: Remove; obsolete.
	* emulparams/go32.sh: Remove; obsolete.
	* scripttempl/go32coff.sc: Remove; obsolete.

1999-07-21  H.J. Lu  <hjl@gnu.org>

	* configure.tgt (mips*el-*-vxworks*): New target.

1999-07-21  Brad M. Garcia  <bgarcia@fore.com>

	* configure.tgt (i[3456]86-*-vxworks*): New target.

Tue Jul 20 15:18:46 1999  Bob Manson  <manson@charmed.cygnus.com>

	* ldlang.c (lang_gc_sections): Only handle the start symbol
	specially if there is one.

Mon Jul 19 14:19:14 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* emulparams/elf32bmipn32.sh (OTHER_RELOCATING_SECTIONS): Add
	.MIPS.events and .MIPS.content handling.
	* emulparams/elf64bmip.sh (OTHER_RELOCATING_SECTIONS): Likewise.

1999-07-17  Nick Clifton  <nickc@cygnus.com>

	* ldlang.c (get_target): New function: Return true iff the
	given target is the target being sought.
	(stricpy): New function:  Like strcpy but convert to lower
	case as well.
	(strcut): New function:  Like strstr but remove the located
	substring as well.
	(name_compare): New function: Compute a compatability rating
	for two target names.
	(winner): New variable: Best target found by
	closest_target_match() so far.
	(closest_target_match): New function: Find the target which is
	the closest match to the original target.
	(get_first_input_target): New function: Find the target format
	of the first of the linker's input file.
	(open_output): Be more clever about deciding the output target
	format. 

1999-07-16  Jakub Jelinek  <jj@ultra.linux.cz>

	* emulparams/elf64_sparc.sh: Add 64-bit directories to native LIB_PATH.

Thu Jul 15 15:55:15 1999  Mark P. Mitchell  <mark@codesourcery.com>

	* configure.host: Set up HOSTING_CRT0 and HOSTING_LIBS for IRIX6.

1999-07-15  Ian Lance Taylor  <ian@zembu.com>

	* configure.in: Bump version number to 2.9.5.
	* configure: Rebuild.

1999-07-14  Richard Henderson  <rth@cygnus.com>

	* ldlang.c (wild_doit): Copy SEC_SHORT to output section.

	* scripttempl/elf.sc: Re-order .rel[a].foo outputs to the
	same order seen for the main sections.  Add
	OTHER_READONLY_RELOC_SECTIONS and OTHER_GOT_RELOC_SECTIONS.

1999-07-12  Andreas Schwab  <schwab@suse.de>

	* emultempl/linux.em (ld_${EMULATION_NAME}_emulation): Fill in
	structure initializations.

	* emultempl/elf32.em (ld_${EMULATION_NAME}_emulation): Add missing
	comma in initializer.

1999-07-11  Ian Lance Taylor  <ian@zembu.com>

	* Many files: Changes to avoid gcc warnings: Add ATTRIBUTE_UNUSED
	as appropriate.  Fill in structure initializations.

1999-07-10  Ian Lance Taylor  <ian@zembu.com>

	* ldfile.c: Revert patch of 1999-07-08.
	(ldfile_try_open_bfd): If we are searching for the file, skip
	files with an incompatible architecture.

1999-07-09  Nick Clifton  <nickc@cygnus.com>

	* scripttempl/armcoff.sc (OUTPUT_FORMAT): Include big endian and
	little endian formats.

1999-07-08  Felix Lee  <flee@cygnus.com>

	* scripttempl/mcorepe.sc: fix quoting problem, for bash 2.x

1999-07-08  Jakub Jelinek  <jj@ultra.linux.cz>

	* ldfile.c (ldfile_open_file_search): Skip libraries made for
	incompatible architectures in the search path. Let the user know
	about any such skips.

Thu Jul  8 12:32:23 1999  John David Anglin <dave@hiauly1.hia.nrc.ca>

        * configure.tgt (hppa*-linux-gnu*): New target.

1999-07-07  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.am (ALL_64_EMULATIONS): Add eelf64bmip.
	(eelf64bmip): New target.
	* Makefile.in: Regenerated.
	* configure.tgt (mips-sgi-irix6*): Add 64-bit emulation.
	* emulparams/elf64bmip.sh: New file.

1999-07-05  Nick Clifton  <nickc@cygnus.com>

	* emultempl/pe.em (after_open): Abort if input format is ARM and
	output format is not. 
	* emultempl/armcoff.em (after_open): Abort if input format is ARM
	and output format is not. 
	* emultempl/armelf.em (after_open): Abort if input format is ARM
	and output format is not. 

1999-07-02  Ian Lance Taylor  <ian@zembu.com>

	* ldlang.c: Revert change of 1999-06-23.

1999-06-30  Mark Mitchell  <mark@codesourcery.com>

	* Makefile.am (ALL_EMULATIONS): Add eelf32bmipn32.o.
	(eelf32bmipn32.c): New target.
	* Makefile.in: Regenerated.
	* configure.tgt (mips-sgi-irix6*): Make n32 the default
	emulation.
	* emulparams/elf32bmipn32.sh: New file.
	
1999-06-28  Jim Pick <jim@jimpick.com>

	* emultempl/armelf.em: Added code so that .xs linker scripts are
	called so that ARM shared libraries are built correctly.

1999-06-22  Mark Mitchell  <mark@codesourcery.com>

	* ldmain.c (main): Initialize link_info.init_function and
	link_info.fini_function.
	* lexsup.c (OPTION_INIT): New macro.
	(OPTION_FINI): Likewise.
	(ld_options): Add descriptions for them.
	(parse_args): Handle them.

1999-06-23  Ian Lance Taylor  <ian@zembu.com>

	* ldlang.c (section_already_linked): Only discard link once
	sections if we are building constructors.

1999-06-22  Nick Clifton  <nickc@cygnus.com>

	* ld.texinfo (Location Counter): Describe behaviour of
	location counter inside section statements.

1999-06-20  Mark Mitchell  <mark@codesourcery.com>

	* scripttempl/elf.sc (WRITABLE_RODATA): New variable for
	controlling whether or not .rodata is in the data segment or the
	text segment.

1999-06-18  Nick Clifton  <nickc@cygnus.com>

	* emultempl/pe.em: Add new command line switch --thumb-entry.
	* emultempl/armelf.em: Add new command line switch --thumb-entry.
	* emultempl/armcoff.em: Add new command line switch --thumb-entry.
	* ld.texinfo: Document new ARM command line switch: --thumb-entry.	
1999-06-20  H.J. Lu  <hjl@gnu.org>

	* configure.in (all_libpath): Accumulate across all enabled targets.

Sun Jun 20 14:10:33 1999  Richard Henderson  <rth@cygnus.com>

	* emultempl/armelf.em: Watch EMULATION_LIBPATH instead of
	DEFAULT_EMULATION.
	* emultempl/elf32.em: Likewise.
	* emultempl/sunos.em: Likewise.

Fri Jun 18 15:24:48 1999  Richard Henderson  <rth@cygnus.com>

	* Makefile.am (GENSCRIPTS): Pass EMULATION_LIBPATH, not EMUL.
	* configure.in (all_emuls): Add targ_extra_libpath.
	(all_libpath, EMULATION_LIBPATH): Define.
	* configure.tgt (powerpc-*-linux-gnu*): Define targ_extra_libpath.
	* genscripts.sh (LIB_PATH): Define if emulation in EMULATION_LIBPATH.

Mon Jun 14 10:38:36 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* ld.texinfo: Fix use of @item vs. @itemx.

1999-06-13  Ian Lance Taylor  <ian@zembu.com>

	From Thomas Zenker <thz@lennartz-electronic.de>:
	* ldgram.y (attributes_opt): Use attributes_list instead of NAME.
	(attributes_list, attributes_string): New nonterminals.
	* ldlang.c (lang_set_flags): Add invert parameter.  Don't handle
	'!'.
	* ldlang.c (lang_set_flags): Update declaration.

1999-06-12  Ian Lance Taylor  <ian@zembu.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_after_parse): Don't add
	entry_symbol as an undefined symbol when doing a relocateable
	link.  From <jeffdb@goodnet.com>.

1999-06-12  David O'Brien  <obrien@freebsd.org>

	* configure.tgt: (i[3456]86-*-freebsd*): Now defaults to ELF.

1999-06-09  Nick Clifton  <nickc@cygnus.com>

	* lexsup.c (help): Restore previous format of output.

1999-06-04  Nick Clifton  <nickc@cygnus.com>

	* emultempl/pe.em: If compiling for arm_epoc_pe rename
	interworking functions to avoid a name space clash.

1999-06-02  Jason Merrill  <jason@yorick.cygnus.com>

	* scripttempl/v850.sc: Add initp support.

1999-06-02  Nick Clifton  <nickc@cygnus.com>

	* emultempl/pe.em: Rename global arm interworking functions to
	avoid name collision when all targets BFD is built.

1999-05-30  Cort Dougan  <cort@attis.cs.nmt.edu>

	* Makefile.am (ALL_EMULATIONS): Add eelf32ppclinux.o.
	* configure.tgt (powerpc-*-linux-gnu): Use it.
	* emulparams/elf32ppclinux.sh: New file.

1999-05-29  Ian Lance Taylor  <ian@zembu.com>

	* ld.texinfo (Options): Clarify that options which refer to files
	must be properly ordered.

1999-05-29  Nick Clifton  <nickc@cygnus.com>

	* emultempl/armelf.em (..._parse_args): New function: Parse
	command line option.  Accept arm-elf specific command line option
	'-p' or '--no-pipeline-knowledge'.
	(..._list_options): New function: Describe the new command line
	option.
	(..._before_allocation): Pass the value of the new variable
	no_pipeline_knowledge to bfd_elf32_arm_process_before_allocation.
	
	* emultemp/armelf_oabi.em (..._before_allocation): Pass zero as
	the third parameter to bfd_elf32_arm_process_before_allocation.

1999-05-28  Nick Clifton  <nickc@cygnus.com>

	* lexsup.c (help): Minor formatting changes.

1999-05-28  Martin Dorey  <mdorey@madge.com>

	* configure.tgt (i960-*-elf*): New target.
	* emulparams/elf32_i960.sh: New file.
	* Makefile.am (ALL_EMULATIONS): Add eelf32_i960.o.
	(eelf32_i960.c): New target.
	* Makefile.in: Rebuild.

1999-05-26  Nick Clifton  <nickc@cygnus.com>

	* emulparams/armelf_oabi.sh (TEMPLATE_NAME): Set to armelf_oabi. 

1999-05-24  Philip Blundell  <philb@gnu.org>

	* emultempl/armelf.em (before_parse): Set config.dynamic_link and
 	config.has_shared.
	* emulparams/armelf.sh (GENERATE_SHLIB_SCRIPT): Define.
	* emulparams/armelf_linux.sh (GENERATE_SHLIB_SCRIPT): Likewise.

1999-04-13  Philip Blundell  <philb@gnu.org>

	* emultempl/armelf.em: Add definitions related to shared objects
	(copied from elf32.em).

Wed May 19 12:44:26 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* Makefile.am (ALL_EMULATIONS): Remove earmlinux.o and
	earm26linux.o, add earmelf_linux.o and earmelf_linux26.o.
	* Makefile.in: Regenerated.

1999-05-16  Nick Clifton  <nickc@cygnus.com>

	* emulparams/elf32mcore.sh (GENERATE_SHLIB_SCRIPT): Define.
	(TEMPLATE_NAME): Define.

Thu May 13 09:48:09 1999  Joel Sherrill (joel@OARcorp.com)

	* configure.tgt (i386-*-rtemself*, sh-*-rtemself*): New targets.
	(mips*el-*-rtems*, powerpcle-*-rtems*): New targets.

1999-05-10  DJ Delorie  <dj@cygnus.com>

	* scripttempl/pe.sc: Specify the output arch, which Ian says is
	the Right Thing to do.

	* emultempl/pe.em: various changes to parameterize the
	target-specific information.
	(gld_i386pe_after_open): Detect and fix MS import libraries
	by renaming the member objects (which are all named the same).

	* pe-dll.c: various changes to parameterize the target-specific
	information.
	(generate_reloc): support relocs more generically to allow for
	expansion.
	(pe_exe_build_sections): new; used to add .relocs to .exes
	(pe_exe_fill_sections): ditto

1999-05-10  Catherine Moore  <clm@cygnus.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_after_open):
	Check for TARGET_IS_arm_epoc_pe.
	(gld_${EMULATION_NAME}_before_allocation): Likewise.

1999-05-12  Anthony Green  <green@cygnus.com>

	* ldlang.c (walk_wild, walk_wild_file, walk_wild_section,
	output_section_callback, gc_section_callback): New functions for
	generic section walks.
	(wild, lang_gc_wild): Use walk_wild.
	(wild_file, lang_gc_wild_file): Deleted. Common logic moved to
	walk_wild_file.
	(wild_section, lang_gc_wild_section): Deleted. Common logic moved
	to walk_fild_section.  Unique logic moved into callbacks
	output_section_callback and gc_section_callback.

1999-04-26  Tom Tromey  <tromey@cygnus.com>

	* aclocal.m4, configure: Updated for new version of libtool.

1999-04-12  Philip Blundell  <pb@nexus.co.uk>

	* emulparams/armelf_linux.sh: New file.  Support for ARM 
	GNU/Linux ELF ABI.
	* emulparams/armelf_linux26.sh: New file. APCS-26 version of above.
	* configure.tgt: For arm*-*-linux-gnu*, set default emulation to
	`armelf_linux', and also include `armelf_linux26' and `armelf'.
	* Makefile.am: Add rules to make earmlinux.c and earmlinux26.c.
	(ALL_EMULATIONS): Add earmlinux.o and earmlinux26.o.
	* Makefile.in: Regenerate.

1999-04-11  Richard Henderson  <rth@cygnus.com>

	* Makefile.am (ALL_EMULATIONS): Add elf_i386_be.o.
	* configure.tgt (i[3456]86-*-beos*): Use it.
	* emulparams/elf_i386_be.sh: New file.
	* Makefile.in: Rebuild.

	* configure.in (environ): Detect declaration.
	* ldmain.c (main): Don't declare environ.
	* sysdep.h (environ): Declare if needed.
	* configure, config.in: Rebuild.

1999-04-11  Richard Henderson  <rth@cygnus.com>

	* ldgram.y (ldgram_vers_current_lang): New.
	(vers_defns): Accept `extern "lang" { }' syntax.
	* ldlex.l (vers_node_nesting): New.
	(V_IDENTIFIER): Accept . and $ in symbols.
	(VERS_NODE): Accept `extern "lang" { }' tokens.  Nest VERS_NODE states.
	* ldlang.c (lang_new_vers_regex): New `lang' argument.  Update callers.
	(lang_vers_match_lang_c): New function.
	(lang_vers_match_lang_cplusplus): New function.
	(lang_vers_match_lang_java): New function.
	(lang_do_version_exports_section): Fix iteration.  Don't free
	section contents, as it is still in use by the patterns.

1999-04-10  Richard Henderson  <rth@cygnus.com>

	* ldmain.c (main): Init link_info.no_undefined.
	* lexsup.c: Add command-line option --no-undefined.

1999-04-06  Ian Lance Taylor  <ian@zembu.com>

	* ld.h (LC_MESSAGES): Never define.
	* ldmain.c (main): Don't pass LC_MESSAGES to setlocale if the
	system does not define it.

1999-04-06  H.J. Lu  <hjl@gnu.org>

	* ldmain.h (demangling): Declare.
	* ldmain.c (demangling): New global variable.
	(main): Initialize demangling.
	* ldmisc.c (vfinfo): Don't demangle symbol if ! demangling.
	* lexsup.c (ld_options, parse_args): Handle --demangle and
	--no-demangle.
	* ld.texinfo, ld.1: Document --demangle/--no-demangle.

	* ldlex.l (V_IDENTIFIER): Allow '.' in symbol.

1999-04-05  Chris Torek  <torek@BSDI.COM>

	* emultempl/sunos.em (gld${EMULATION_NAME}_search_dir): Check that
	a shared library really exists, avoiding broken symlinks.

	* ldfile.c (ldfile_open_file): Generate a better error message if
	we can't find a -l file.

1999-04-05  DJ Delorie  <dj@cygnus.com>

	* configure.tgt (i386-*-pe): add targ_extra_ofiles for other PE
	targets (i386-pe and i386-winnt)

1999-04-04  Ian Lance Taylor  <ian@zembu.com>

	* deffilep.y: Include "sysdep.h" and "ldmisc.h".
	(def_file_add_directive): Change return type to void.  Remove
	unused locals sh_reserve, sh_commit, and j.
	(def_ungetc): Always return a value.
	(def_lex): Correct parenthesization of || within &&.
	* deffile.h (def_file_add_directive): Update declaration.
	* pe-dll.c: Include <time.h>, <ctype.h>, and "ldemul.h".
	(generate_edata): Remove unused local i.
	(quoteput): Add cast to avoid warning.
	(pe_dll_generate_def_file): Fix type in format string.
	(quick_symbol): Remove unused local blhe.
	(pe_dll_generate_implib): Add cast to avoid warning.
	(pe_process_import_defs): Remove unused locals ar_head, ar_tail,
	and n.
	(pe_as16): Comment out.

1999-04-04  Don Bowman <don@pixsci.com>

	* configure.tgt: Add mips*-*-vxworks* target.

1999-03-31  Nick Clifton  <nickc@cygnus.com>

	* Makefile.in (ALL_EMULATIONS): Add earm_epoc_pe.o
	Add build rule and dependencies for earm_epoc_pe.c.

	* emulparams/arm_epoc_pe.sh: New file.

	* configure.tgt: Add 'targ_extra_ofiles' for ARM based PE
	targets. 

1999-03-31  Philip Blundell  <pb@nexus.co.uk>

	* configure.tgt: Match `arm*-*-linux-gnu*' not
 	`armv*-*-linux-gnu'.

1999-03-26  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* scripttempl/elf.sc: Put the .eh_frame and .gcc_except_table
	sections in the data segment.

Fri Mar 26 12:05:51 1999  Catherine Moore  <clm@cygnus.com>

	* ld.h (wildcard_spec): Add exclude_name.
        * ldgram.y (EXCLUDE_FILE): New token.
	(wildcard_spec): Set exclude_name.
	(file_NAME_list): Recognize EXCLUDE_FILE.
        * ldlang.c (wild_section): Check for excluded files.
	(print_wild_statement): Print excluded files.
	(lang_add_wild): New argument exclude_filename.
	Set exclude_filename.
	* ldlang.h (lang_wild_statement_type):  Add exclude_filename.
	* ldlex.l: New token EXCLUDE_FILE.
	* mri.c (mri_draw_tree):  Add argument to lang_add_wild.
	* scripttempl/elf.sc (CTOR, DTOR):  Exclude crtend.o from ctor wildcard.
	Reorder sorted and unsorted ctors.
	* scripttempl/elfd10v.sc (CTOR, DTOR): Likewise.
	* scripttempl/elfd30v.sc (CTOR, DTOR): Likewise.
	* scripttempl/elfppc.sc (CTOR, DTOR): Likewise.
	
1999-03-26  Nick Clifton  <nickc@cygnus.com>

	* ldlang.c (lang_gc_sections): If entry_symbol is not defined,
	default to "start".

1999-03-03  Nick Clifton  <nickc@cygnus.com>

	* scripttempl/elf.sc: Add explicit placements for the .eh_frame
	and .gcc_except_table sections. 

Wed Mar  3 09:13:34 1999  Catherine Moore  <clm@cygnus.clm>
 
        * scripttempl/elf.sc: Remove .end.ctors and .end.dtors
        sections.  Reorder .ctors section entries.
        * scripttempl/elfd10v.sc: Likewise.
        * scripttempl/elfd30v.sc: Likewise.
        * scripttempl/elfppc.sc: Likewise.

1999-02-26  Jim Lemke  <jlemke@cygnus.com>

	* ldmain.c (main): Wrong error msg for -r and --mpc860c0.

1999-02-25  Nick Clifton  <nickc@cygnus.com>

	* ldlang.c (lang_check_section_addresses): Remove extraneous
	backslash. 

Thu Feb 25 15:07:24 1999  Catherine Moore  <clm@cygnus.com>

	* scripttempl/elf.sc: Don't gather .ctor and .dtor sections
        for relocateable links.
	* scripttempl/elfd10v.sc: Likewise.
	* scripttempl/elfd30v.sc: Likewise.
	* scripttempl/elfppc.sc: Likewise.
        
1999-02-22  Jim Lemke  <jlemke@cygnus.com>

	* ldint.texinfo: remove extraneous right brace.
	* ldmain.c (main): initialize and check option "mpc860c0".
	* lexsup.c (ld_options, parse_args): add option "mpc860c0".

Wed Feb 17 12:10:06 1999  Stan Cox  <scox@cygnus.com>

	* mpw-elfmips.c (gldelf32ebmip_before_allocation): Remove special
	.reginfo section handling. 
	* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Likewise.
	* emulparams/elf32elmip.sh (INITIAL_READONLY_SECTIONS): Removed
	* emulparams/elf32ebmip.sh (INITIAL_READONLY_SECTIONS): Removed

1999-02-17  Nick Clifton  <nickc@cygnus.com>

	Patch from: Scott Bambrough <scottb@corelcomputer.com>
	
	* configure.tgt: Added armv*-*-linux-gnu to $targ_emul
	recognition. 

Wed Feb 17 Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>
 
        * emultempl/armelf_oabi.em
        (bfd_elf32_arm_allocate_interworking_sections,
        bfd_elf32_arm_get_bfd_for_interworking,
        bfd_elf32_arm_process_before_allocation): Define them to use the
        old ABI versions of the functions.

Tue Feb 16 16:48:19 1999  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Change AC_PREREQ to 2.13.  Change AM_PROG_INSTALL
	to AC_PROG_INSTALL.  Change AM_EXEEXT to AC_EXEEXT.
	* Makefile.am (earmelf_oabi.c): Changes spaces to tab.
	* acconfig.h: Remove.
	* aclocal.m4: Rebuild.
	* configure: Rebuild.
	* Makefile.in: Rebuild.

Mon Feb 15 18:21:48 1999  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* ldexp.h (struct etree_value_type): Change valid onto valid_p.

	* ldexp.c (new_abs): Ditto.
	(new_rel, new_rel_from_section, fold_binary, invalid, fold_name,
 	exp_fold_tree, exp_binop, exp_trinop, stat_alloc,
 	exp_get_abs_int): Ditto

	* ldlang.c (print_assignment, lang_size_sections,
	lang_do_assignments): Ditto.
	
1999-02-11  Nick Clifton  <nickc@cygnus.com>

	* ldlang.c (lang_check_section_addresses): New function: Check
	addresses assigned to section for overlaps.
	(lang_process): Call lang_check_section_addresses if suitable.

	* ld.h: Add new boolean field to args_type structure:
	'check_section_addresses'.

	* ldmain.c: Initialise check_section_addresses field to true.

	* lexsup.c: Add new command line options '--no-check-sections' and
	'--check-sections'.

	* ld.texinfo: Document new command line options '--check-sections'
	and '--no-check-sections'.

1999-02-08  Nick Clifton  <nickc@cygnus.com>

	* configure.tgt: Add support for StrongARM target.

Wed Feb  3 19:41:01 1999  Ian Lance Taylor  <ian@cygnus.com>

	* ldctor.c (ldctor_build_sets): Just set SEC_KEEP once.  Check for
	an owner of a section before using it to look up a reloc type.
	Don't set SEC_KEEP for the absolute section.

Mon Feb  1 11:39:46 1999  Catherine Moore  <clm@cygnus.com>

        * Makefile.am (earmelf_oabi.o):  New.
        * Makefile.in:  Regenerate.
        * configure.tgt (arm-*-oabi):  New.
        (thumb-*-oabi):  New.
        * emulparams/armelf_oabi.sh:  New.
        * emultempl/armelf_oabi.em:  New.

1999-01-31 17:57:31 1998  Michael Meissner  <meissner@cygnus.com>

	* scripttempl/elfppc.sc: Add support for -fleading-underscores
	switch in all linker generated symbols.

	* configure.tgt (powerpc{,le}*-*-vxworks): Add as aliases for
	powerpc{,le}-*-eabi.

Wed Jan 20 17:01:48 1999  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (i[3456]86-*-solaris2*): New target.  From Pavel
	Roskin <pavel_roskin@geocities.com>.

1999-01-19  Nick Clifton  <nickc@cygnus.com>

	* ldlang.c (lang_size_sections): Count loadable sections as
          contributing to the size of the current segment.

1999-01-15  Nick Clifton  <nickc@cygnus.com>

	* ldlang.c (lang_size_sections): Only update the current
          address of a region if the section just placed into it is an
          allocated section.

1999-01-12  Nick Clifton  <nickc@cygnus.com>

	* Makefile.am: Replace efr30.o with eelf32fr30.o.
	* Makefile.in: Regenerate.

	* configure.tgt: Replace fr30 with elf32fr30.

	* emulparams/elf32fr30.sh: New file: Replaces fr30.sh, and uses
	generic elf.sc script.  Also replaces the .stack section with a
	user definable symbol __stack.

1999-01-11  Nick Clifton  <nickc@cygnus.com>

	* scripttempl/fr30.sc: Fill .init and .fini sections with NOP
	pattern. 

1999-01-03  Ken Raeburn  <raeburn@cygnus.com>

	* Makefile.am (check-DEJAGNU): No longer provide HOSTING_EMU,
	HOSTING_CRT0, HOSTING_LIBS; the test suite can extract them from
	configure.host and configure.tgt now.
	* Makefile.in: Rebuild.

1998-12-27  Ulrich Drepper  <drepper@cygnus.com>

	* lexsup.c (parse_args, case OPTION_RPATH): Avoid adding duplicate
	elements to rpath.

Thu Dec 10 11:12:28 1998  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* Makefile.am (ALL_EMULATIONS): Remove pe-dll.o and deffilep.o.
	(ALL_EMUL_EXTRA_OFILES): New variable.  Put them here instead.
	* configure.in: Set EMUL_EXTRA_OFILES to $(ALL_EMUL_EXTRA_OFILES)
	if configuring with all targets.
	* configure, Makefile.in, aclocal.m4: Rebuild.

	* emultempl/pe.em (pe_enable_stdcall_fixup): Make static.
	(pe_dll_do_default_excludes): Removed, unused.
	(pe_def_file, pe_dll_export_everything, pe_dll_kill_ats,
	pe_dll_stdcall_aliases): Don't initialize them, this file may be
	compiled more than once.
	* pe-dll.c (pe_def_file, pe_dll_export_everything,
	pe_dll_do_default_excludes, pe_dll_kill_ats,
	pe_dll_stdcall_aliases): Define and initialize them here instead.
	(generate_reloc): Fix allocation of reloc_addresses array to use
	bfd_vma instead of unsigned long.  Fix element size in qsort call.
	(reloc_sort): Compare pointers to bfd_vma instead of unsigned
	long.

Mon Dec  7 21:10:09 1998  J.J. van der Heijden  <j.j.vanderheijden@student.utwente.nl>

	* configure.tgt (i[3456]86-*-mingw32*): Add cygwin target specific
	files.

Sun Dec  6 16:33:33 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (m68*-*-gnu*): New target.  From Aymeric Vincent
	<aymeric.vincent@emi.u-bordeaux.fr>.

1998-12-04  Nick Clifton  <nickc@cygnus.com>

	* emulparams/fr30.sh (TEXT_START_ADDR): Change TEXT_START_ADDR
	from 0x100000 to 0x10000 so that it fits in 20 bits.

Sat Nov 28 22:32:20 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ldemul.h (ldemul_recognized_file): Declare.

Sat Nov 28 22:30:55 1998  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* ldlang.c (lang_add_wild): Don't pretend that there is an input
	file if the filename is a wildcard pattern.

1998-11-25  DJ Delorie  <dj@cygnus.com>

	* ldemul.h (ld_emulation_xfer_struct): new hook "recognized_file"
	* ldemul.c (ldemul_recognized_file): new function, new hook
	* ldint.texinfo: document new hook.
	* ldlang.c (load_symbols): call recognized_hook for all objects we
	do recognize, in case the emulation needs to handle them
	specially.  PE DLLs use this.
	* pe-dll.c (pe_dll_generate_def_file): take out hack and debug
	printfs
	* emultempl/pe.em (gld_i386_recognized_file): new function
	(gld_i486_unrecognized_file): take out hack

1998-11-23  DJ Delorie  <dj@cygnus.com>

	* pe-dll.c (fill_edata): fill in timestamp
	(make_head): name object files sequentially to ensure
	they link in the right order.
	(make_tail): same here
	(pe_process_import_defs): use sequential names for bfds to ensure
	proper link order.
	(pe_implied_import_dll): new function; handles linking directly
	against DLLs by simulating IMPORTS directives.  * emultempl/pe.em
	(gld_i386pe_before_parse): hack bfd to not recognize .dll files
	via bfd_pe_dll_not_recognized_hack

1998-11-23  DJ Delorie  <dj@cygnus.com>

	* emultempl/pe.em (gld_i386pe_parse_args): Conditionalize call to
	pe_dll_add_excludes

Mon Nov 23 14:36:18 1998  Nick Clifton  <nickc@cygnus.com>

	* emultempl/pe.em (after_parse): Only create an undefined entry
	symbol if one has been specified.

1998-11-23  DJ Delorie  <dj@cygnus.com>

	* emultempl/pe.em (gld_i386pe_after_open): call
	pe_process_import_defs
	* pe-dll.c (pe_dll_generate_def_file): calculate BASE from
	pe_data, only print if actually set.  Print version only if
	set.
	(save_relocs): save relocs for both input and output.
	(make_one): support internal/external different names.
	(pe_dll_generate_implib): support new make_one
	(pe_process_import_defs): new function; handles IMPORT
	directives in .def files.

Fri Nov 20 13:06:49 1998  Nick Clifton  <nickc@cygnus.com>

	* ldmisc.c (vfinfo): Cope with empty symbol names.

Thu Nov 19 13:31:15 1998  Nick Clifton  <nickc@cygnus.com>

	* scripttempl/pe.sc: Add provision of '_end' symbol.

Wed Nov 18 18:18:43 1998  Geoffrey Noer  <noer@cygnus.com>

	* configure.tgt: change refs from cygwin32* to cygwin*.
	* aclocal.m4: regenerate
	* configure.in: don't need to call AM_CYGWIN32.
	* configure: regenerate

Mon Nov 16 22:14:07 1998  DJ Delorie  <dj@cygnus.com>

	* emultempl/pe.em (gld_i386_finish): generate import library
	* deffile.h: add hint member.
	* pe-dll.c (pe_dll_generate_implib): New function with helpers;
 	generates the import library directly from the export table.
	(fill_edata): remember the actual hint for the import library.

Sat Nov 14 14:36:24 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ld.1: Some cleanups from NOKUBI Hirotaka <hnokubi@yyy.or.jp>.

Thu Nov 12 19:21:57 1998  Dave Brolley  <brolley@cygnus.com>

	* po/ld.pot: Regenerated.
	* po/POTFILES.in: Regenerated.
	* configure: Regenerated.
	* aclocal.m4: Regenerated.
	* Makefile.in: Regenerated.

Wed Nov 11 18:10:15 1998  DJ Delorie  <dj@cygnus.com>

	* pe-dll.c (generate_reloc): don't output PE relocs for sections
 	that won't be loaded.

Wed Nov 11 13:44:54 1998  DJ Delorie  <dj@cygnus.com>

	* pe-dll.c (fill_edata): don't strip underscores

Tue Nov 10 21:28:19 1998  DJ Delorie  <dj@cygnus.com>

	* ld.texinfo: added i386pe option summary

Tue Nov 10 17:53:17 1998  DJ Delorie  <dj@cygnus.com>

	* pe-dll.c (process_def_file): properly note undefined exported
 	symbols, clean up old code.
	(pe_dll_generate_def_file): don't crash if pe_def_file is NULL
	* emultempl/pe.em (gld_i386_parse_args): add
 	(en/dis)able-stdcall-fixups
	(pe_fixup_stdcalls): warn about stdcall fixups
	(gld_i386_unrecognized_file): make exported symbols undefs so that
 	archive members get pulled in

Tue Nov 10 14:50:51 1998  Catherine Moore  <clm@cygnus.com>

        * scripttempl/elfd10v.sc: Add KEEP attribute to .init,
        .fini, .dtors and .ctors.  Add .data and .text
        wildcards to support section garbage collection.

Mon Nov  9 22:52:50 1998  DJ Delorie  <dj@indy.delorie.com>

	* deffilep.y: properly handle relocs with multiple def_files,
	cache import module names

Mon Nov  9 22:44:58 1998  DJ Delorie  <dj@cygnus.com>

	* pe-dll.c (process_def_file): don't assume exports won't move
	during a realloc

Mon Nov  9 16:41:30 1998  DJ Delorie  <dj@cygnus.com>

	* pe-dll.c: New file; direct support for PE DLLs
	* deffile.h: New file; direct support for PE DLLs
	* deffilep.y: New file; direct support for PE DLLs
	* emultempl/pe.em: add direct support for PE DLLs
	* configure.tgt: allow target-specific extra files
	* configure.in: allow target-specific extra files
	* ldlang.c (lang_add_assignment): return the assignment so that
 	one can change the value later based on the object files (pe-dll
 	DEF files do this)
	* ldint.texinfo: add section for emulation walkthrough
	* Makefile.am: add new files and target-specific extra files
	* emultempl/pe.em (gld_i386_list_options): list dll-specific
	options.
	* pe-dll.c (process_def_file): auto-export everything if
	nothing is otherwise exported.
	
Wed Nov  4 16:39:18 1998  Nick Clifton  <nickc@cygnus.com>

	* Makefile.am: Add support for FR30 target.
	* configure.tgt: Add support for FR30 target.
	* Makefile.in: Regenerate.
	* emulparams/fr30.sh: New file.
	* scripttemp/fr30.sc: New file.
	
Mon Nov  2 14:47:15 1998  Catherine Moore  <clm@cygnus.com>

        * ldmain.c (main):  Don't report error for dynamic links and
        --gc-sections.

1998-10-26 16:05  Ulrich Drepper  <drepper@cygnus.com>

	* lexsup.c (ld_options): Change text of -O to Optimize output file".
	(parse_args): Set link_info.optimize based on -O argument.
	* ldmain.c (main): Initialize link_info.optimze to false.
	* ld.texinfo: Describe -O option.
	* ld.1: Likewise.

Mon Oct 12 14:29:56 1998  Nick Clifton  <nickc@cygnus.com>

	* scripttempl/v850.sc: Move .sbss and .scommon sections into their
	own segment, so that they can be next to the .bss section and so
	initialised by the same piece of code.

Fri Oct  9 15:59:52 1998  Catherine Moore  <clm@cygnus.com>

        * scripttempl/elf.sc:  Merge .sdata.* etc sections.
        * ldctor.c (ldctor_build_sets):  Set SEC_KEEP for
        ctor sections.

Mon Oct  5 09:40:43 1998  Catherine Moore  <clm@cygnus.com>

        * ldmain.c (main):  Error if --gc-sections and
        dyanmic linking.
        * scripttempl/v850.sc:  Add KEEP attribute to .init,
        .fini, .dtors and .ctors.  Add .data and .text
        wildcards to support section garbage collection.

Wed Sep 30 11:19:15 1998  Nick Clifton  <nickc@cygnus.com>

	* scripttempl/v850.sc: Rename .call_table section to
	.call_table_data and create a new section called
	.call_table_text.

Sun Sep 20 00:43:26 1998  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/elf.sc: Add alignment at the end of the .bss
	section, so that it is included in the memsize of the segment.

Fri Sep 18 13:42:42 1998  Catherine Moore  <clm@cygnus.com>

        * emultempl/elf32.em (gld_place_orphan): Don't process for
        sections with SEC_EXCLUDE flag.

Fri Sep  4 09:24:02 1998  Nick Clifton  <nickc@cygnus.com>

	* emulparams/d30velf.sh (TEXT_SIZE): Increased to 2000K.
	(DATA_SIZE): Increased to 2000K.

Thu Sep  3 17:30:58 1998  Richard Henderson  <rth@cygnus.com>

	* emulparams/d10velf.sh (TEMPLATE_NAME): Use elf32.

Mon Aug 31 01:06:00 1998  Catherine Moore  <clm@cygnus.com>

        * Makefile.am:  Change armelf.sc to elf.sc
        * Makefile.in:  Regenerate.

Mon Aug 31 11:12:04 1998  Catherine Moore  <clm@cygnus.com>

        * emulparams/armelf.sh:  Change SCRIPT_NAME to
        elf.  Change TEXT_START_ADDR to 0x8000.  Define
        OTHER_TEXT_SECTIONS, OTHER_BSS_SYMBOLS and
        OTHER_BSS_END_SYMBOLS.
        * scripttempl/elf.sc:  Modify to use
        OTHER_BSS_END_SYMBOLS.
        * scripttempl/elfarm.sc:  Remove file.

Tue Aug 18 12:05:34 1998  Catherine Moore  <clm@cygnus.com>

        * emultempl/armelf.em (gld_armelf_before_allocation):
        Add bfd_ prefix to elf32_arm_process_before_allocation
        and elf32_arm_allocate_interworking_sections.
        (gld_armelf_after_open): Add bfd_ prefix to
        elf32_arm_get_bfd_for_interworking.

Fri Aug 14 15:34:29 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am: Rebuild dependencies.
	* Makefile.in: Rebuild.

	* ldgram.y: Include "ldctor.h".
	(statement): Accept SORT around CONSTRUCTORS.
	* ldctor.c: Include <ctype.h>.
	(constructors_sorted): New global variable.
	(ctor_prio, ctor_cmp): New static functions.
	(ldctor_build_sets): Sort constructors if requested.
	* ldctor.h (constructors_sorted): Declare.
	* ldlang.c (print_statement): Print sorted CONSTRUCTORS
	correctly.
	* scripttempl/elf.sc: Add sort around CONSTRUCTORS.
	* ld.texinfo (Output Section Keywords): Document SORT
 	(CONSTRUCTORS).

Thu Aug 13 12:20:39 1998  Catherine Moore  <clm@cygnus.com>

       * emulparams/armelf.sh:  Define TEMPLATE_NAME to armelf.
       * scripttempl/elfarm.sc:  Include .glue_7t and .glue7
       sections.
       * emultempl/armelf.em: New file.

Thu Aug 13 12:52:45 1998  H.J. Lu  <hjl@gnu.org>

	* Makefile.am (ld.dvi): Use " instead of ' for MAKEINFO.
	* Makefile.in: Rebuild.

Tue Aug 11 16:17:01 1998  Catherine Moore  <clm@cygnus.com>

        * scripttempl/elfarm.sc:  Change text start address
        back to zero.

Tue Aug 11 10:01:12 1998  Jeffrey A Law  (law@cygnus.com)

	* emulparms/mn10200.sh (MAX_PAGESIZE): Define to 1.
	* emulparms/mn10300.sh (MAX_PAGESIZE): Define to 1.

Sun Aug  9 20:31:27 1998  Catherine Moore  <clm@cygnus.com>

        * scripttempl/elfarm.sc:  Set text start address to
        0x8000.  Add __bss_end definition.

Sat Aug  1 11:47:37 1998  Catherine Moore  <clm@cygnus.com>

        * scripttempl/elfarm.sc:  New file.
        * emulparams/armelf.sh: Set SCRIPT_NAME to elfarm.

Fri Jul 31 15:56:16 1998  Catherine Moore  <clm@cygnus.com>

        * emulparams/armelf.sh: New file.
        * configure.tgt:  Recognize thumb-elf and arm-elf.
        * Makefile.am (earmelf.o): New.
        * Makefile.in: Rebuild.

Fri Jul 24 12:00:57 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (install-exec-local): Don't remove the file before
	checking whether $(bindir) == $(tooldir)/bin.  From Maciej
	W. Rozycki <macro@ds2.pg.gda.pl>.
	* Makefile.in: Rebuild.

	* configure.tgt: Recognize h8[35]00*-coff* as well as -hms*.

Thu Jul 23 11:15:12 1998  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/aout.sc: If ALIGNMENT is defined, use it to set
	alignment of end symbol.
	* scripttempl/elf.sc: Likewise.
	* emulparams/sun4.sh (ALIGNMENT): Define.
	* emulparams/elf32_sparc.sh (ALIGNMENT): Define.
	* ldint.texinfo (emulation parameters): Document ALIGNMENT.

	* lexsup.c (parse_args): Add missing break statement.

	* ldlang.c (lang_gc_sections_1): Add default case to switch to
	avoid warnings.

Tue Jul 14 15:42:17 1998  Richard Henderson  <rth@cygnus.com>

	* configure.tgt (i?86-*-beos{pe,elf,}*): Recognize.
	* Makefile.am (ei386beos.o): New.
	* emulparams/i386beos.sh: New file.
	* emultempl/beos.em, scripttempl/i386beos.sc: New file.

Tue Jul 14 15:35:42 1998  Richard Henderson  <rth@cygnus.com>

	* lexsup.c: New option --version-exports-section.
	* ld.h (struct args_type): Add version_exports_section.
	* ldlang.c (lang_do_version_exports_section): New function.
	(lang_process): Call it.

Mon Jul 13 13:20:23 1998  Steve Chamberlain  <sac@transmeta.com>

	* ldlex.l: Accept ASSERT.
	* ldgram.y (exp): Add ASSERT_K case.
	* ldexp.h (node_type): Add etree_assert to node_class enum.
	(etree_type): Add assert_s field.
	(exp_assert): Declare.
	* ldexp.c (exp_fold_tree): Handle etree_assert.
	(exp_assert): New function.
	(exp_print_tree): Handle etree_assert.
	* ld.texinfo (Miscellaneous Commands): Document ASSERT.

Wed Jul  8 14:03:12 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ldgram.y: Change MAX to MAX_K and MIN to MIN_K, to avoid
	conflicts with system header files.  Change all uses.

	* Makefile.am (MAINTAINERCLEANFILES): Define.
	* Makefile.in: Rebuild.

Tue Jul  7 18:03:22 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (ldver.texi): New target.
	(ld.info, ld.dvi): Depend upon ldver.texi.
	* ld.texinfo: Include ldver.texi.  Mention version number on title
	page and in top node.
	* Makefile.in: Rebuild.

Mon Jul  6 14:55:13 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (i[3456]86-*-solaris*): New target.

Fri Jul  3 14:19:06 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (wild_section): Don't get an assertion failure if the
	section is discarded.

	* scripttempl/pe.sc: Use SORT to sort sections appropriately.
	* emultempl/pe.em (sort_by_file_name): Remove.
	(sort_by_section_name): Remove.
	(sort_sections_1, sort_sections): Remove.
	(gld_${EMULATION_NAME}_before_allocation): Don't call
	sort_sections.
	(hold_section, hold_section_name): New static variables.
	(hold_use, hold_text, hold_rdata, hold_data, hold_bss): Likewise.
	(gld_${EMULATION_NAME}_place_orphan): Rewrite.  Look for a good
	place to put the section.  Align the section.  Sort the input
	sections by name.
	(gld_${EMULATION_NAME}_place_section): New static function.

	* ldlang.c (wild_sort): When sorting by file name, sort by archive
	name first.

	* emultempl/pe.em (set_pe_subsystem): Don't call
	ldlang_add_undef.
	(gld_${EMULATION_NAME}_after_parse): New static function.
	(ld_${EMULATION_NAME}_emulation): Use new after_parse function
	rather than after_parse_default.

	* ldgram.y (extern_name_list): Do not require symbols to be
	separated by commas.
	(ifile_p1): Add EXTERN.
	* ldlex.l: Accept EXTERN in BOTH and SCRIPT mode as well as MRI
	mode.
	* ld.texinfo (Options): Mention that EXTERN is equivalent to -u.
	(Miscellaneous Commands): Document EXTERN.

Wed Jul  1 19:40:34 1998  Richard Henderson <rth@cygnus.com>

	* ld.h (args_type): Add gc_sections.
	* ldgram.y (ldgram_had_keep, KEEP): New.
	(input_section_spec_no_keep): Rename from old input_section_spec.
	(input_section_spec): New.  Recognize KEEP.
	* ldlang.c (wild_section): Handle keep sections.
	(lang_gc_wild_section, lang_gc_wild_file, lang_gc_wild): New.
	(lang_gc_sections_1, lang_gc_sections): New.
	(lang_process): Invoke lang_gc_sections.
	(lang_add_wild): Add keep argument.  Update all callers.
	* ldlang.h (lang_wild_statement_struct): Add keep_sections.
	* ldlex.l (KEEP): Match it.
	* ldmain.c (main): Error on -r and --gc-sections.
	* lexsup.c: Add --gc-sections.

	* scripttempl/elf.sc: Merge .text.* etc sections appropriately.
	Mark startup sections with KEEP.
	* scripttempl/elfppc.sc: Likewise.

	* ld.texinfo: Update for --gc-sections and KEEP.

Wed Jul  1 15:21:20 1998  Ian Lance Taylor  <ian@cygnus.com>

	From Peter Jordan <pjordan@chla.usc.edu>:
	* scripttempl/i386go32.sc: Correct constructor handling for -u.

Tue Jun 23 15:17:27 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (install-data-local): Make ldscripts subdirectory.
	* Makefile.in: Rebuild.

Tue Jun 23 15:17:04 1998  Mike Stump  <mrs@wrs.com>

	* Makefile.am (install-exec-local): Don't let EXEEXT interfere
	with the program transform name.
	* Makefile.in: Rebuild.

Sun Jun 21 23:55:16 1998  Jeffrey A Law  (law@cygnus.com)

	* ld.texinfo: Note that -relax may make symbolic debugging
	impossible on some platforms.

Tue Jun 16 12:51:13 1998  Geoff Keating  <geoffk@ozemail.com.au>

	* Makefile.am (Makefile): Remove target.
	(config.status): New target.
	* Makefile.in: Rebuild.

	* configure.host (powerpc*-*-linux-gnu*): New host.

Fri Jun 12 17:38:07 1998  Doug Evans  <devans@seba.cygnus.com>

	* scripttempl/elf.sc (INPUT_FILES): Optional INPUT spec.

	* emulparams/m32relf.sh (OTHER_RELOCATING_SECTIONS): Change top of
	stack to 8MB.

Fri Jun 12 19:33:17 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (HFILES): Remove config.h.
	(EMULATION_OFILES, POTFILES): Move patch of May 14 from
	Makefile.in to Makefile.am.
	(earmcoff.c): Depend upon armcoff.em, not generic.em.
	* po/Make-in (all-yes): Correct misspelling in $(PACKAGE).
	($(srcdir)/$(PACKAGE).pot): Pass -C to $(XGETTEXT).
	* Makefile.in, po/POTFILES.in, po/ld.pot: Rebuild.

Fri Jun 12 13:43:17 1998  Tom Tromey  <tromey@cygnus.com>

	* po/Make-in (all-yes): If maintainer mode, depend on .pot file.
	($(PACKAGE).pot): Unconditionally depend on POTFILES.

Tue Jun  9 09:36:48 1998  Nick Clifton  <nickc@cygnus.com>

	* ldlang.c (lang_finish): Add CONST type modifier to declaration
	of 'send'.

Fri Jun  5 18:19:59 1998  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (gld${EMULATION_NAME}_before_parse): Set
	config.has_shared to true.
	* emultempl/linux.em (gld${EMULATION_NAME}_before_parse):
	Likewise.
	* emultempl/sunos.em (gld${EMULATION_NAME}_before_parse):
	Likewise.

Tue Jun  2 12:55:03 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_finish): If the entry symbol is not found, try
	parsing it as a number.
	* ld.texinfo (Options): Document this.

Mon Jun  1 14:01:20 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo (Input Section Wildcards): Document SORT keyword.

Mon May 18 12:42:53 1998  Doug Evans  <devans@canuck.cygnus.com>

	* ld.h (ld_config_type): New member has_shared.
	* ldmain.c (main): Initialize it.
	* emultempl/elf32.em (gld${EMULATION_NAME}_before_parse): Set it.
	* lexsup.c (parse_args): Treat -shared as error if not supported.

Mon May 18 13:14:43 1998  Ian Lance Taylor  <ian@cygnus.com>

	From Jason Merrill <jason@cygnus.com>:
	* ldlang.c (wild_sort): Correct order of sort.
	* scripttempl/elf.sc: Put *crtbegin.o before other .ctors and
	.dtors.
	* scripttempl/elfd10v.sc: Likewise.
	* scripttempl/elfd30v.sc: Likewise.
	* scripttempl/elfppc.sc: Likewise.

Fri May 15 00:22:35 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ldlex.l: Recognize keyword SORT.
	* ldgram.y (current_file): Change to struct wildcard_spec.
	(%union): Add new fields cname and wildcard.
	(wildcard_name, wildcard_spec): New nonterminals.
	(file_NAME_list): Use wildcard_spec.
	(input_section_spec): Change current_file usage.
	* ld.h (struct wildcard_spec): Define.
	* ldlang.h (lang_wild_statement_struct): Add new fields
	sections_sorted and filenames_sorted.
	(lang_add_wild): Update declaration.
	* ldlang.c (wild_sort): New static function.
	(wild_section): Use wild_sort.
	(print_wild_statement): Print sorting information.
	(lang_add_wild): Add new parameters sections_sorted and
	filenames_sorted.  Change all callers.
	* mri.c (mri_draw_tree): Update calls to lang_add_wild.
	* scripttempl/elf.sc: Sort .ctors.* and .dtors.* by section name.
	* scripttempl/elfd10v.sc: Likewise.
	* scripttempl/elfd30v.sc: Likewise.
	* scripttempl/elfppc.sc: Likewise.

Thu May 14 18:39:16 1998  Richard Henderson  <rth@cygnus.com>

	* emulparams/m32relf.sh (TEMPLATE_NAME): Define.

Thu May 14 14:51:24 1998  Nick Clifton  <nickc@cygnus.com>

	* ldemul.h: Add new prototype: ldemul_list_emulation_options.
	(ld_emulation_xfer_struct): Add new field: list_options.
	* ldemul.c (ldemul_list_options): New function.  Call the
	list_options field of the ld_emulation_xfer_struct for each
	supported emulation, if such a function is present.
	* lexsup.c (help): Call ldemul_list_emulation_options.
	* emultempl/pe.em (gld_<>_list_options): New function.  Describe
	the pe emulation specific command line options.
	* emultempl/armcoff.em (gld<>_list_options): New function.
	Describe  the armcoff emulation specific command line options.

	* emultempl/pe.em: Add a new command line option:
	--support-old-code.
	* emultempl/armcoff.em: Ditto.
	* ld.texinfo: Document the --support-old-code option.

	* Makefile.in: Add emulation files for POTFILES.in target.
	* emultempl/pe.em: Internationalise suitable strings.
	* emultempl/armcoff.em: Internationalise suitable strings.
	* po/POTFILES.in: Rebuilt.

Sun May 10 22:36:30 1998  Jeffrey A Law  (law@cygnus.com)

        * po/Make-in (install-info): New target.

Tue Apr 28 19:18:30 1998  Tom Tromey  <tromey@cygnus.com>

	* ldmain.c (main): Conditionally call setlocale.
	* ld.h: Include <locale.h> if HAVE_LOCALE_H.
	(LC_MESSAGES): Now can be defined even when ENABLE_NLS.

Mon Apr 27 11:56:21 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Change version number to 2.9.4
	* configure: Rebuild.

	* ld.texinfo (Options) [-rpath-link]: Mention ld.so.conf.

	Based on patch from H.J. Lu <hjl@gnu.org>:
	* emultempl/elf32.em (global_vercheck_needed): New file static
	variable.
	(global_vercheck_failed): New file static variable.
	(gld${EMULATION_NAME}_after_open): Check for shared libraries
	twice, once with force set to 0 and once with it set to 1.
 	(gld${EMULATION_NAME}_check_ld_so_conf): Add force parameter.
	Change all callers.
	(gld${EMULATION_NAME}_search_needed): Likewise.
	(gld${EMULATION_NAME}_try_needed): Likewise.  If not force, check
	whether the libraries needs any incompatible versions.
	(gld${EMULATION_NAME}_vercheck): New static function.

Wed Apr 22 16:01:35 1998  Tom Tromey  <tromey@cygnus.com>

	* po/Make-in (MKINSTALLDIRS): Don't look in $(top_srcdir).

Wed Apr 22 12:40:56 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (check-DEJAGNU): Add $(INTLLIBS) to LIBIBERTY when
	invoking runtest.
	* Makefile.in: Rebuild.

	* lexsup.c (parse_args): Change -l options into --library options
	to avoid confusion between -li and -library.

	* ld.texinfo (MEMORY): Clarify use of >REGION.

Tue Apr 21 23:12:40 1998  Tom Tromey  <tromey@scribbles.cygnus.com>

	* Many files: Added gettext invocations around user-visible
	strings.
	* ld.h: Added gettext-related includes and defines.
	* ldmain.c: Call setlocale, bindtextdomain, textdomain.
	* acconfig.h (ENABLE_NLS, HAVE_CATGETS, HAVE_GETTEXT, HAVE_STPCPY,
	HAVE_LC_MESSAGES): Define.
	* configure.in: Call CY_GNU_GETTEXT.  Create po/Makefile.in and
	po/Makefile.  Use AM_PROG_LEX.
	(TDIRS): AC_SUBST early on, to avoid having value split when it
	happens to cross line 90 of the generated sed script.
	* Makefile.am (SUBDIRS): New macro.
	(POTFILES): Likewise.
	(po/POTFILES.in): New target.
	(ld_new_LDADD): Added INTLLIBS.
	(ld_new_DEPENDENCIES): Added INTLDEPS.
	* po/Make-in, po/POTFILES.in, po/gas.pot: New files.

Tue Apr 21 23:07:07 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo (Simple Example): Rewrite a few things as suggested
	by Nick Clifton <nickc@cygnus.com>.
	(PROVIDE): Likewise.

Tue Apr 21 09:55:06 1998  Nick Clifton  <nickc@cygnus.com>

	* emultempl/pe.em: Rename external arm interworking functions
	to conform to BFD naming conventions.  Add code to _after_open()
	function to obtain a bfd for use by the interworking code.

	* emultempl/armcoff.em: Rename external arm interworking functions
	to conform to BFD naming conventions.  Add new _after_open()
	function to obtain a bfd for use by the interworking code.

Sun Apr 19 19:23:09 1998  Richard Henderson  <rth@cygnus.com>

	* ldlang.c (lang_size_sections) [case lang_assignment_statement_enum]:
	Update dot and the default memory section even when relaxing.

Sat Apr 18 18:41:12 1998  Richard Henderson  <rth@cygnus.com>

	* ldlang.c (lang_one_common): Manipulate the section's cooked size
	rather than its raw size.

Tue Apr  7 13:35:29 1998  H.J. Lu  <hjl@gnu.org>

	* configure.in (TESTBFDLIB): New.  Defined and substituted.
	* Makefile.am (TESTBFDLIB): Changed to @TESTBFDLIB@.
	* configure, Makefile.in: Rebuild.

Mon Apr  6 15:33:39 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (ld.info): Invoke makeinfo with -I options directly
	rather than relying on default rule.  Don't depend upon
	bfdsumm.texi.
	(ld.dvi): Likewise.
	(bfdsumm.texi): Remove target.
	(CLEANFILES): Take bfdsumm.texi out of value.
	* Makefile.in: Rebuild.

Sun Apr  5 13:07:57 1998  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/pe.sc: Use shell variables to avoid depending upon
	how $ is handled when expanding a shell substitution.

Fri Apr  3 00:56:50 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (MOSTLYCLEANFILES): Add ld.log and ld.sum.
	(DISTCLEANFILES): Add site.exp and site.bak.
	* Makefile.in: Rebuild.

	* configure.in: Put the tdirs in a file and use AC_SUBST_FILE,
	rather than in a shell variable and using AC_SUBST.
	* Makefile.am (DISTCLEANFILES): Remove ldscripts.  Add tdirs.
 	(distclean-local): New target.
	* configure, Makefile.in: Rebuild.

	* ld.texinfo: Completely rewrite linker script documentation.

Mon Mar 30 12:47:33 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Set version to 2.9.1.
	* configure: Rebuild.

	* Branched binutils 2.9.

Sat Mar 28 16:48:19 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (MOSTLYCLEANFILES): Remove tmpdir.
	(mostlyclean-local): New target to remove tmpdir.
	* Makefile.in: Rebuild.

	Fix some gcc -Wall warnings:
	* ldcref.c (output_cref): Add casts to avoid warnings.
	* ldfile.c (ldfile_add_arch): Likewise.
	* ldlang.c (lang_leave_overlay_section): Likewise.
	* lexsup.c (OPTION_COUNT): Likewise.
	(parse_args): Likewise.
	* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan):
	Likewise.
	* emultempl/sunos.em (gld${EMULATION_NAME}_search_dir): Likewise.
	* ldlang.c (lang_check): Initialize variables to avoid warnings.
	* ldwrite.c (build_link_order): Likewise.
	* emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Likewise.
	* emultempl/armcoff.em (gld${EMULATION_NAME}_before_allocation):
	Remove unused variables.

	* Makefile.am (MOSTLYCLEANFILES): Correct name (was
	MOSTCLEANFILES).
	* Makefile.in: Rebuild.

Fri Mar 27 16:39:25 1998  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation): Put
	ARM code inside ifdef TARGET_IS_armpe.

Wed Mar 25 11:34:13 1998  Ian Lance Taylor  <ian@cygnus.com>

	Based on patch from H.J. Lu  <hjl@gnu.org>:
	* Makefile.am (LDDISTSTUFF): New variable.
	(diststuff): New target.
	* Makefile.in: Rebuild.

	* scripttempl/pe.sc: Only include .idata\$[0-7] in .idata when
	relocating.

Tue Mar 24 15:59:29 1998  Nick Clifton  <nickc@cygnus.com>

	* scripttempl/pe.sc (.text): Add .glue_7 and .glue_7t sections to
	hold Arm/Thumb stubs.

	* emultempl/pe.em (gld_pe_before_allocation): Call
	arm_process_before_allocation (for ARM/Thumb targets) in order to
	gather interworking stb information.

Mon Mar 23 18:54:15 1998  Joel Sherrill  <joel@OARcorp.com>

	* configure.tgt: (sh*-*-rtems*): Switched from ELF to COFF.

Fri Mar 20 19:17:13 1998  Ian Lance Taylor  <ian@cygnus.com>

	* aclocal.m4, configure: Rebuild with libtool 1.2.

Thu Mar 19 14:54:45 1998  Geoffrey Noer  <noer@cygnus.com>

	* scripttempl/pe.sc: The Cygwin32 library uses a .data$nocopy
	section to avoid copying certain data on fork.  The linker used to
	include this between __data_start__ and __data_end__, but that
	breaks building the cygwin32 dll.  The fix is to rename the
	section	".data_cygwin_nocopy" and explictly include it after
	__data_end__.

Wed Mar 18 09:42:24 1998  Nick Clifton  <nickc@cygnus.com>

	* configure.tgt (targ_extra_emuls): Add thumb-pe target.

Sun Mar  8 23:34:14 1998  Stan Cox  <scox@equinox.cygnus.com>

	* configure.tgt (sparclite*-*-elf): Added.

Mon Mar  2 19:24:08 1998  Michael Meissner  <meissner@cygnus.com>

	* ldlang.c (lang_size_sections): If the default memory region is
	*default*, see if there is a memory region that could be used.

Thu Feb 26 17:09:53 1998  Michael Meissner  <meissner@cygnus.com>

	* scripttempl/elfd30v.sc: Add support for .eit_v section and put
	it at 0xfffff020.
	* emulparams/d30v{elf,_o,_e}.sh: Ditto.

Mon Feb 23 17:46:51 1998  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/pe.em (sort_sections): Permit the wildcard to include
	a trailing '*' when sorting grouped sections.
	* scripttempl/pe.sc: Include grouped sections using NAME\$*.  Only
	include them when relocating.

Wed Feb 18 23:39:46 1998  Richard Henderson  <rth@cygnus.com>

	* Makefile.am (install-exec-local): Install properly when ln
	fails or tooldir == prefix.

Fri Feb 13 15:24:06 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (AUTOMAKE_OPTIONS): Define.
	* configure, Makefile.in, aclocal.m4: Rebuild with automake 1.2e.

Thu Feb 12 14:10:44 1998  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/elf.sc: Align the _end symbol according to the ELF
 	format size.  From Gordon W. Ross <gwr@mc.com>.

	NetBSD patches from Gordon W. Ross <gwr@mc.com>:
	* configure.host (alpha*-*-netbsd*): New host.
	* configure.tgt (alpha*-*-netbsd*, powerpc-*-netbsd*): New
	targets.

	* lexsup.c (help): Update bug-gnu-utils address.
	* ld.texinfo (Bug Reporting): Likewise.

Tue Feb 10 18:05:56 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_size_sections): Warn if some memory regions were
	defined, but a loadable section is going into the default memory
	region.

Tue Feb 10 16:17:20 1998  H.J. Lu  <hjl@gnu.org>

	* ldlex.l (V_IDENTIFIER): Allow '.' as symbol prefix.

Tue Feb 10 15:09:45 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (Makefile): Add target, for dependencies on
	configure.host and configure.tgt.
	* configure.host, configure.tgt: Change -linux* to -linux-gnu*.
	* Makefile.in: Rebuild.

Mon Feb  9 13:44:40 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* scripttempl/elfd10v.sc (.stack): Move stack to 0x00..7FFE.

	* emulparams/d10velf.sh (READONLY_START_ADDR): Read only section
 	moved to 0x00.....4.

Sat Feb  7 15:41:26 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure, aclocal.m4: Rebuild with new libtool.

Thu Feb  5 12:16:11 1998  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/pe.sc: Remove ${RELOCATING-0} from all sections.
	From Thomas de Lellis <tdel@wrs.com>.

	* configure, Makefile.in, aclocal.m4: Rebuild with new libtool.

Wed Feb  4 13:02:32 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (ld_new_LDADD): Remove @LEXLIB@.
	* Makefile.in: Rebuild.

Mon Feb  2 19:34:54 1998  Steve Haworth  <steve@pm.cse.rmit.EDU.AU>

	Add tms320c30 support:
	* configure.tgt (tic30-*-*aout*, tic30-*-*coff*): New targets.
	* emulparams/tic30aout.sh: New file.
	* emulparams/tic30coff.sh: New file.
	* scripttempl/tic30aout.sc: New file.
	* scripttempl/tic30coff.sc: New file.
	* Makefile.am (ALL_EMULATIONS): Add etic30aout.o and
	etic30coff.o.
	(etic30aout.c, etic30coff.c): New targets.
	* Makefile.in: Rebuild.

Mon Feb  2 14:10:59 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Correct HOSTING_CRT0 in alpha*-*-linux* case to
	accept either ld.so or ld-linux.so.

Fri Jan 30 19:16:28 1998  Doug Evans  <devans@canuck.cygnus.com>

	* Makefile.am ({CC,CXX}_FOR_TARGET): Change program_transform_name
	to transform.
	* Makefile.in: Regenerate.

Fri Jan 30 19:15:17 1998  Geoff Keating  <geoffk@ozemail.com.au>

	* scripttempl/elfppc.sc: Put .dynsbss in .sbss.

Fri Jan 30 11:43:49 1998  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* Makefile.am (eelf32bsmip.c, eelf32lsmip.c): New targets.
	* Makefile.in: Rebuild.

Thu Jan 29 16:04:21 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* ldfile.c (slash): Set to backslash if _WIN32 but not
	__CYGWIN32__.
	(ldfile_open_file_search): If __MSDOS__ or _WIN32, accept a
	leading backslash or a leading x: as an absolute path.
	(ldfile_find_command_file): Use slash rather than / when
	generating name to try.
	* lexsup.c (PATH_SEPARATOR): Define.
	(set_default_dirlist): Use PATH_SEPARATOR rather than ':'.

Wed Jan 28 14:06:30 1998  Richard Henderson  <rth@cygnus.com>

	* emulparams/elf64_sparc.sh (ELFSIZE): 64
	(TEXT_START_ADDR): Round off, since SIZEOF_HEADERS is added later.
	(DATA_PLT): Needed by v9 abi.

Wed Jan 28 16:37:27 1998  J.J. van der Heijden  <J.J.vanderHeijden@student.utwente.nl>

	* configure.tgt (i[3456]86-*-mingw32*): New entry.

Wed Jan 28 15:51:58 1998  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/elf.sc: Only include linkonce sections in final
	sections when relocating.

Wed Jan 28 14:10:01 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo (Options): Add a brief description of the types of
	information included in a link map.

	* ld.texinfo (Options): Mention LDEMULATION in description of -m.
	(Environment): Mention LDEMULATION.

	* ld.texinfo (Options): Clarify --export-dynamic a bit.

Thu Jan 22 16:07:23 1998  Richard Henderson  <rth@cygnus.com>

	* ldlex.l (<SCRIPT>{WILDCHAR}*): Take care for the comments this
	pattern could match.

Wed Jan 21 22:26:46 1998  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_set_symbols): When doing
	a relocateable link, set the image base to 0, and don't define the
	various symbols.
	* emulparams/i386pe.sh (RELOCATEABLE_OUTPUT_FORMAT): Define.
	* scripttempl/pe.sc: Swap the .data and .bss sections so that
	.data comes first.  If doing a relocateable link, use
	RELOCATEABLE_OUTPUT_FORMAT if it is defined, and start the
	sections at 0, and don't define any symbols.

	* ldlang.c (lang_memory_default): Correct parenthisization of
	expression.

Wed Jan 21 21:20:32 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* emultempl/sunos.em: Don't include sys/types.h and sys/stat.h
	here; they are included already via sysdep.h.

Tue Jan  6 13:40:02 1998  Richard Henderson  <rth@cygnus.com>

	* scripttempl/i960.sc: Don't explicitly set .data and .bss start.

Fri Jan  2 20:15:37 1998  Michael Meissner  <meissner@cygnus.com>

	* ldgram.y (attributes_opt): Pass region pointer to
	lang_set_flags, not &region->flags.

	* ldlang.c (lang_memory_default): New function to figure out a
	default memory region for a section if it was not specified.
	(lang_memory_region_lookup): Zero flags, not_flags field.
	(lang_map{,_flags}): Print attribute flags in memory map.
	(lang_size_sections): Call lang_memory_default to get default
	memory region.
	(lang_set_flags): Implement attribute flags for real.  Take new
	argument to give the flags we are to skip for this region.

	* ldlang.h (memory_region_struct): Add not_flags field, make both
	flags fields flagword type.
	(lang_output_section_state): Make flags field flagword type.
	(lang_set_flags): Update prototype to match new calling sequence.
	(lang_memory_region_default): Add prototype.

	* emulparams/d30v{_e,_o,elf}.sh ({TEXT,DATA,EMEM}_DEF_SECTION):
	Define whether or not the region gets default sections, and if so,
	what sections.

	* scripttempl/elfd30v.sc (MEMORY): Set up which of the regions get
	default sections.

Thu Jan  1 22:58:04 1998  Michael Meissner  <meissner@cygnus.com>

	* scripttempl/elfd30v.sc (.eh_frame): Link into the data section.

Thu Jan  1 18:04:51 1998  Jeffrey A Law  (law@cygnus.com)

	* scripttempl/h8300h.sc: Fix typo.
	* scripttempl/h8300s.sc: Likewise.

Sun Dec 21 12:51:49 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldexp.c (fold_name): Don't crash if the symbol is defined in a
	section with no output section, such as a shared library section.

Wed Dec 17 12:14:11 1997  Ian Lance Taylor  <ian@cygnus.com>

	* lexsup.c (parse_args): Keep track of where we are in the option
	parsing before calling ldemul_parse_args, so that we don't call it
	multiple times on the same argument and confuse the getopt
	internals.

Thu Dec 11 09:00:15 1997  Michael Meissner  <meissner@cygnus.com>

	* configure.tgt (d30v-elf-*): Rename d30velf_e to d30v_e and
	d30velf_o to d30v_o to work in DOS environments.
	* Makefile.{am,in}: Ditto.

	* emulparams/d30v_{o,e}: Rename from d30velf_{o,e}.
	* emulparams/d30velf_{o,e}: Deleted.

Wed Dec 10 17:40:08 1997  Nick Clifton  <nickc@cygnus.com>

	* scripttempl/armcoff.sc: Add glue sections (code taken from Arm
	branch).

	* emulparams/armcoff.sh (TEMPLATE_NAME): Set to armcoff.

	* emultempl/armcoff.em: New file, imported from Arm branch.

Wed Dec 10 14:10:44 1997  Michael Meissner  <meissner@cygnus.com>

	* scripttempl/elfd30v.sc: Add .rel and .rela sections for all
	defined sections.  Set up __{D,C}TOR_{LIST,END}__.  Add onchip and
	external memory sections for rodata.  Delete .string, .rodata1,
	and .data1 sections.

Tue Dec  9 15:28:17 1997  Michael Meissner  <meissner@cygnus.com>

	* Makefile.am: Add Oct 23 changes to Makefile.in here.

	* Makefile.{am,in}: (ALL_EMULATIONS): Add ed10velf.o.

	* Makefile.{am,in}: (ALL_EMULATIONS): Add etic80coff.o.

	* Makefile.{am,in}: (ALL_EMULATIONS): Add ed30velf{,_e,_o}.o.
	(ed30velf_e.c): Like d30velf, except .text/.data/etc always go in
	external memory.
	(ed30velf_o.c): Like d30velf, except .text/.data/etc always go in
	onchip memory.

	* emulparams/d30velf.sh (STACK_START_ADDR): Top of default
	stack.
	({TEXT,DATA,EMEM}_SIZE): Sizes of the 3 memory areas.
	({TEXT,DATA,BSS}_MEMORY): Which memory region .text, .data, and
	.bss should go in.

	* emulparams/d30velf_{e,o}.sh: New files to be explicit whether
	.text, .data, etc go in external memory or onchip memory.

	* configure.tgt (d30v-*-*ext*): New configuration to default
	.text, .data, etc. in external memory.
	(d30v-*-*onchip*): New configuration to default .text, .data,
	etc. in onchip memory.
	(d30v-*-*): Add d30velf_{e,o} emulations.

	* scripttempl/elfd30v.sc: Allow .text, .data, .bss to be put in
	either the onchip text/data areas or the external memory area.
	(MEMORY): Get sizes from d30velf.sh.
	(.e{data,text,bss}): Put sections in the external memory region.
	(.stext): Put section in the onchip text region.
	(.s{data,bss}): Put sections in the onchip data region.
	(__stack): Assign from ${STACK_START_ADDR}.
	(.text): Put in ${TEXT_MEMORY} memory region.
	(.data{,1}/.strings/.rodata{,1}): Put in ${DATA_MEMORY} memory
	region.
	(.bss): Put in ${BSS_MEMORY} memory region.

Tue Dec  2 10:14:47 1997  Nick Clifton  <nickc@cygnus.com>

	* configure.tgt (targ_extra_emuls): Add support for Thumb target.

Sat Nov 22 15:23:19 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldlex.l: Don't define hex_mode.  Correct number regexp to not
	accept hex digits without a leading $ or 0x.  Handle leading $
	correctly.  Pass 0 rather than hex_mode to bfd_scan_vma.
	* ldlex.h (hex_mode): Don't declare.

Sun Nov 16 20:16:45 1997  Michael Meissner  <meissner@cygnus.com>

	* emulparams/d30velf.sh ({DATA,EMEM}_START_ADDR): Define as start
	of internal data area and external memory on chip.

	* scripttempl/elfd30v.sc: Define a MEMORY region that describes
	the 3 regions of memory on the chip.  Put .text/.init/.fini into
	the text memory region, put other segments into the data memory
	region.  Add more of the standard elf sections.  Default __stack
	to be 0x20008000, which is 1 byte beyond end of the internal data
	region.

Thu Nov 13 13:45:00 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure.tgt (targ_extra_emuls): Make FreeBSD a i386bsd
 	variant.

Sun Nov  2 14:51:36 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* configure.host (alpha*-*-linux*): Correct HOSTING_CRT0.  Set
	HOSTING_LIBS.

Thu Oct 30 12:25:55 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ld.h (args_type): Add warn_mismatch field.
	* ldmain.c (main): Initialize warn_mismatch field.
	* lexsup.c (parse_args): Handle --no-warn-mismatch option.
	* ldlang.c (ignore_bfd_error): New static function.
	(lang_check): If warn_mismatch is false, don't warn about
	mismatched input files.
	* ld.texinfo, ld.1: Document new option.

Thu Oct 23 14:38:18 1997  Nick Clifton  <nickc@cygnus.com>

	* scripttempl/v850.sc: Rename linker symbol '_stack' to '__stack'
	to avoid conflicts with C code which is defining a variable called
	'stack'.

Thu Oct 23 00:57:45 1997  Richard Henderson  <rth@dot.cygnus.com>

	* Makefile.in (ALL_EMULATIONS): Move eelf64_sparc.o ...
	(ALL_64_EMULATIONS): ... here.
	(eelf64_sparc.c): Template should be elf32 not generic.
	* emulparams/elf64_sparc.sh (TEMPLATE_NAME): New definition.

Thu Oct 23 00:44:20 1997  Richard Henderson  <rth@dot.cygnus.com>

	* configure.tgt: Add sparc64-*-linux*.
	* emulparams/elf64_sparc.sh (GENERATE_SHLIB_SCRIPT, NOP): New.

Wed Oct 22 11:29:25 1997  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/pe.sc: Put .eh_frame in .rdata.

Fri Oct 17 00:00:13 1997  Richard Henderson  <rth@cygnus.com>

	* ldlang.c (lang_register_vers_node): Only check globals<=>locals,
	since we need to be able to export different versions of the same
	symbol.

Wed Oct 15 14:52:36 1997  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/pe.sc: Put .stab and .stabstr sections at end.

Wed Oct  8 12:37:05 1997  Richard Henderson  <rth@cygnus.com>

	* configure.tgt, configure.host: Change alpha-*-* to alpha*-*-*;
	config.guess now recognizes alphaev5 etc.

Fri Oct  3 14:23:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Don't treat
	-s and -u as -static and -unix.

Thu Oct  2 18:40:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (wild_doit): Rewrite flag handling for clarity.  If we
 	are not adding the first input section, and SEC_READONLY is clear
 	on the output section, then don't copy it from the input section.
  	If SEC_READONLY is not set on the input section, then clear it on
 	the output section.

	* configure.tgt (mips*-sgi-irix[56]*): Use elf32bsmip rather than
	elf32bmip.
	(mips*el-*-linux*): Change elf32lmip to elf32lsmip and elf32bmip
	to elf32bsmip.
	(mips*-*-linux*): Likewise.
	* emulparams/elf32bsmip.sh: New file; just like elf32bmip.sh, but
	setting ENTRY to __start.
	* emulparams/elf32lsmip.sh: New file; just like elf32lmip.sh, but
	setting ENTRY to __start.
	* scripttempl/elf.sc: Always set ENTRY to _start if it was not
	already set.

Wed Oct  1 16:41:00 1997  Nick Clifton  <nickc@cygnus.com>

	* emulparams/v850.sh (ROZDATA_START_ADDR, ROSDATA_START_ADDR): New
	Variables.

	* scripttempl/v850.sc: Move read only areas out of zero and small
	data sections and into their own sections.

Wed Sep 24 16:59:15 1997  Joel Sherrill  <joel@oarcorp.com>

        * configure.tgt (sh*-*-rtems*): New target, like sh-*-elf*.

Wed Sep 24 11:33:14 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo (Section Options): Improve documentation of NOLOAD
	directive.

	* aclocal.m4: Rebuild with new libtool.
	* configure: Rebuild.

Mon Sep 22 17:24:06 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (wild_doit): Revert patch of September 3.

Wed Sep 17 16:45:34 1997  Nick Clifton  <nickc@cygnus.com>

	* Makefile.am, Makefile.in: Add rule for ev850.c
	* configure.tgt (targ_extra_emuls): Add v850 target.

Wed Sep 17 16:43:39 1997  Nick Clifton  <nickc@cygnus.com>

	* emulparams/v850.sh (CALL_TABLE_START_ADDR): New entry.
	* scripttempl/v850.sc: Add call table data area

Mon Sep 15 11:29:13 1997  Ken Raeburn  <raeburn@cygnus.com>

	Merge change from Martin Hunt:

	* scripttempl/elfd30v.sc: Put .rodata in the .text section.

Tue Sep  9 07:49:56 1997  Fred Fish  <fnf@ninemoons.com>

	* ldlang.c (lang_memory_region_lookup): Remove extraneous
	initialization of p.

Thu Sep  4 09:03:33 1997  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (gld${EMULATION_NAME}_parse_args): In
	expression produced for -bpT and -bpD options, align to a 32 byte
	boundary rather than an 8 byte boundary.
	* scripttempl/aix.sc: Put .tocbss at start of .bss section.

	* ldmisc.h, ldmisc.c, ldcref.c: Rename finfo to lfinfo, to avoid
	function name conflict with AIX 4.2 unistd.h header file.

Wed Sep  3 15:12:32 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (wild_doit): Clear SEC_HAS_CONTENTS from a
	noload_section.

Fri Aug 29 00:32:31 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (ld_new_DEPENDENCIES): Remove @LEXLIB@.
	* Makefile.in: Rebuild.

Thu Aug 28 10:12:10 1997  Doug Evans  <dje@canuck.cygnus.com>

	* configure.tgt (arc-*-elf*): Recognize.
	* Makefile.am (ALL_EMULATIONS): Add earcelf.o.
	* Makefile.in: Regenerate.
	* emulparams/arcelf.sh: New file.

Wed Aug 20 11:14:13 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (wildcardp): Don't let a backslash by itself cause a
	pattern to be treated as a wildcard pattern.

	* ldgram.y (atype): Accept parentheses with no type.

	* ld.texinfo (Section Definition): Clarify use of whitespace.
	(Section Placement): Likewise.

Mon Aug 18 11:12:03 1997  Nick Clifton  <nickc@cygnus.com>

	* configure.tgt (targ_extra_emuls): Add support for v850e target.

Mon Aug 18 11:12:03 1997  Nick Clifton  <nickc@cygnus.com>

	* configure.tgt (targ_extra_emuls): Add support for v850e target.

Sat Aug  9 00:42:27 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (ld.info): Change dependency from
	$(BFDDIR)/doc/bfdsumm.texi to bfdsumm.texi.
	(ld.dvi): Likewise.
	(bfdsumm.texi): New target.
	(CLEANFILES): Add bfdsumm.texi.
	* Makefile.in: Rebuild.

	* Makefile.am: New file, based on old Makefile.in.
	* acinclude.m4: New file, from old aclocal.m4.
	* configure.in: Call AM_INIT_AUTOMAKE and AM_PROG_LIBTOOL.  Remove
	shared library handling; now handled by libtool.  Replace
	AC_CONFIG_HEADER with AM_CONFIG_HEADER.  Call AC_PROG_YACC,
	AC_PROG_LEX, and AC_DECL_YYTEXT.  Call AM_MAINTAINER_MODE,
	AM_CYGWIN32, and AM_EXEEXT.  Don't call CY_CYGWIN32 or CY_EXEEXT.
	* configure.host: Don't set HLDFLAGS, HLDENV, or RPATH_ENVVAR.
	* acconfig.h: Mention PACKAGE and VERSION.
	* stamp-h.in: New file.
	* ldver.c (ld_program_version): Set ld_program_version from
	VERSION.
	* ldgram.y, ldlex.l: Replace VERSION with VERSIONK.
	* Makefile.in: Now built with automake.
	* aclocal.m4: Now built with aclocal.
	* configure, config.in: Rebuild.

Mon Jul 28 19:04:50 1997  Rob Savoye  <rob@chinadoll.cygnus.com>

        * configure.in: Use CYGWIN and EXEEXT autoconf macro to look for
        win32 dependencies.
        * configure: Regenerated with autoconf 2.12.
        * Makefile.in: Add $(EXEEXT) to executable.

Tue Jul 22 18:50:38 1997  Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>

	* emulparams/i386go32.sh (OUTPUT_FORMAT): Set to "coff-go32".
	(SEGMENT_SIZE): Set to 0x200.
	* scripttempl/i386go32.sc: Rewrite.
	* configure.tgt (i[3456]86-*-msdosdjgpp*): New target.

Mon Jul  7 12:39:42 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Manfred Hollstein <manfred@s-direktnet.de>:
	* configure.host (i[3456]86-*-linux*libc1*): Renamed from
	i[3456]86-*-linux*.
	(i[3456]86-*-linux*): New host.

Thu Jun 26 13:54:03 1997  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/pe.sc: Put .rsrc after .reloc.  Put input .rsrc
	sections in the output .rsrc section.

Wed Jun 25 12:48:41 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.host (m68*-*-linux*libc1*): Renamed from
	`m68*-*-linux*'.
	(m68*-*-linux*): New configuration for use with GNU libc 2.

Mon Jun 16 19:18:21 1997  Geoff Keating  <geoffk@ozemail.com.au>

	* scripttempl/elfppc.sc: Correct .rela.sdata entries.

	* scripttempl/elfppc.sc: Put the PLT between the small and large
	BSS segments.
	* emulparams/elf32ppc.sh (TEXT_START_ADDR): The ABI says `A
	program base of 0x02000000 is recommended...' because otherwise
	shared libraries are less efficient.  We use 0x01800000 because
	otherwise it's impossible to branch to location 0, for instance if
	you have an undefined weak symbol.

Mon Jun 16 12:49:36 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* ldlang.c (lang_place_undefineds): Add \n in einfo call.
	(lang_size_sections): Likewise.
	* ldlex.l: Likewise.
	* emultempl/aix.em (gld${EMULATION_NAME}_read_file): Likewise.
	* emultempl/mipsecoff.em (gld${EMULATION_NAME}_after_open):
	Likewise.
	(check_sections): Likewise.
	(gld${EMULATION_NAME}_after_allocation): Likewise.
	* emultempl/pe.em (gld_$${EMULATION_NAME}_before_allocation):
	Likewise.
	* mpw-eppcmac.c (gldppcmacos_read_file): Likewise.
	* mpw-idtmips.c (gldmipsidt_after_open): Likewise.
	(check_sections): Likewise.
	(gldmipsidt_after_allocation): Likewise.

	* ldemul.c (ldemul_choose_mode): Remove unused einfo argument.

Fri Jun  6 23:47:42 1997  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/pe.sc: Add zeroes after .idata$3 to mark the end of
	the import list.

Thu May 29 13:13:22 1997  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (gld${EMULATION_NAME}_place_section): Don't
	crash if an output section has no BFD section.

Fri May 23 15:23:25 1997  Fred Fish  <fnf@cygnus.com>

	* lexsup.c (ld_options): Add entry for the new "task-link" option.
	(parse_args): Handle the "task-link" option.
	(OPTION_TASK_LINK): Add define.

Wed May 21 17:44:15 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (main): Correct check of fclose return value when
	handling --force-exe-suffix.

Thu May 15 11:35:29 1997  Nick Clifton  <nickc@cygnus.com>

	* ldlang.c (lang_check): Add test of the return value from the
	call to bfd_merge_private_bfd_data().

Mon May 12 23:22:58 1997  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/elfmips.sc: Remove.
	* scripttempl/elf.sc: Set ENTRY based on target.  Permit
	TEXT_DYNAMIC to control .dynamic segment.  Permit
	SHLIB_TEXT_START_ADDR to set start of shared object.  Support
	INITIAL_READONLY_SECTIONS.  Put .stub in .text.  Only put
	.gnu.linkonce.t* in .text when relocating.  Support
	OTHER_TEXT_SECTIONS.  Support SHLIB_DATA_ADDR as well as
	DATA_ADDR.  Support OTHER_GOT_SYMBOLS and OTHER_GOT_SECTIONS.
	* emulparams/elf32b4300.sh (SCRIPT_NAME): Set to elf.
	(DATA_ADDR): Don't set.
	(INITIAL_READONLY_SECTIONS): Rename from OTHER_READONLY_SECTIONS.
	(OTHER_TEXT_SECTIONS): Set.
	(OTHER_GOT_SECTIONS): Rename from OTHER_READWRITE_SECTIONS.
	(MACHINE): Set to empty string.
	* emulparams/elf32l4300.sh: Likewise.
	* emulparams/elf32ebmip.sh: Likewise.
	* emulparams/elf32elmip.sh: Likewise.
	* emulparams/elf32bmip.sh: Likewise.  Also:
	(TEXT_DYNAMIC): Set.
	* emulparams/elf32lmips.sh: Likewise.
	* Makefile.in (eelf32bmips.c): Depend upon elf.sc rather than
	elfmips.sc.
	(eelf32ebmips.c, eelf32elmips.c, eelf32lmip.c): Likewise.

Mon May 12 11:11:06 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* scripttempl/elf.sc: Don't align the data segment on the next 8
	byte boundary, instead let the linker use whatever the individual
	sections require.

Fri May  9 17:45:46 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (i[3456]86-*-gnu*): Don't include Mach support.

Tue May  6 13:21:19 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Sean McNeil <sean@mcneil.com>:
	* emultempl/pe.em (sort_by_file_name): Sort by archive name
	first.
	(sort_sections): Sort all sections, not just sections in the same
	archive.

Mon May  5 18:19:55 1997  Philip Blundell  <pjb27@cam.ac.uk>

	* configure.tgt, configure.host: cope with '*-*-linux-gnuaout'
	targets.

Fri May  2 15:54:28 1997  Mike Meissner  <meissner@cygnus.com>

	* scripttempl/tic80coff.sc (.text): Add a leading underscore to
	__{D,C}TOR_{LIST,END}__ definations.  Rearrange the order of items
	in the .text section.  Move .const, .ctors, .dtors into separate
	sections.

Wed Apr 30 12:23:21 1997  Manfred Hollstein  <manfred@s-direktnet.de>

	* scripttempl/m88kbcs.sc (__.initp.end, _etext): Added whitespace
	around assignment of current location pointer.

Thu Apr 17 13:07:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldctor.c (ldctor_build_sets): Make sure the set is aligned
	appropriately.

Tue Apr 15 13:19:26 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (INSTALL): Set to @INSTALL@.
	(INSTALL_XFORM, INSTALL_XFORM1): Remove.
	(install): Depend upon ld.new and installdirs.  Use
	$(program_transform_name) directly, rather than using
	$(INSTALL_XFORM) and $(INSTALL_XFORM1).
	(installdirs): New target.
	(install-info): Run mkinstalldirs.

Mon Apr 14 12:06:15 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (INSTALL): Change install.sh to install-sh.

	From Thomas Graichen <graichen@rzpd.de>:
	* configure.in: Use ${CONFIG_SHELL} when running $ac_config_sub.
	* configure: Rebuild.

Fri Apr  4 11:42:41 1997  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/pe.em: Include "libiberty.h".
	(sort_sections_1): Use xmalloc rather than alloca.

	* ldlex.l: Recognize SQUAD.
	* ldgram.y (length): Add SQUAD.
	* ldctor.c (ldctor_build_sets): Use SQUAD for a signed 8 byte
	reloc.
	* ldlang.c (print_data_statement): Handle SQUAD.
	(lang_size_sections, lang_do_assignments): Likewise.
	* ldexp.c (exp_print_token): Add SQUAD to table.
	* ldwrite.c (build_link_order): Handle SQUAD.
	* ld.texinfo (Section Data Expressions): Document SQUAD.

Thu Apr  3 13:19:40 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldver.c (ld_program_version): Set to 2.8.1.

	* Branched binutils 2.8.

Wed Apr  2 11:55:27 1997  Ian Lance Taylor  <ian@cygnus.com>

	* mpw-idtmips.c: Rename from mpw-emipsidt.c.
	* mpw-elfmips.c: Rename from mpw-emipself.c.
	* mpw-config.in: Update accordingly.

	* ldlang.c (lang_process): Call lang_check immediately after
	opening the input files, rather than at the end of the link.

Mon Mar 31 23:44:00 1997  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/pe.em (init): Fully bracket initializer.
	(set_pe_stack_heap): Remove locals begin_commit and end.
	(gld_${EMULATION_NAME}_after_open): Remove unused local i.
	(gld${EMULATION_NAME}_place_orphan): Remove unused local ptr.

Mon Mar 31 16:35:51 1997  Joel Sherrill  <joel@oarcorp.com>

        * configure.tgt (hppa*-*-rtems*): New target, like hppa-*-*elf*.

Fri Mar 28 15:29:23 1997  H.J. Lu <hjl@gnu.ai.mit.edu>

	Contributed by David S. Miller <davem@caip.rutgers.edu>:
	* configure.tgt (sparc*-*-linuxaout*): New target.
	(sparc*-*-linux*): New target.
	* emulparams/sparclinux.sh: New file.
	* Makefile.in (ALL_EMULATIONS): Add esparclinux.o.
	(esparclinux.c): New target.

Fri Mar 28 14:30:12 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Ralf Baechle <ralf@gnu.ai.mit.edu>:
	* configure.tgt: Set targ_extra_emuls for mips*el-*-linux* and
	mips*-*-linux*.  Use elf32bmip and elf32lmip, not elf32ebmip and
	elf32elmip.

Thu Mar 27 17:14:32 1997  Ian Lance Taylor  <ian@cygnus.com>

	* lexsup.c (parse_args): Update copyright date in version
	message.

Fri Mar 21 12:28:41 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* emulparams/delta68.sh (OUTPUT_FORMAT): Set to "coff-m68k-sysv".

Tue Mar 18 11:16:23 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in: Rebuild dependencies.

	* emultempl/aix.em: Include "obstack.h".

Mon Mar 17 19:26:06 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c: Include "obstack.h".

Sat Mar 15 23:23:46 1997  Fred Fish  <fnf@cygnus.com>

	* configure.tgt (powerpc-*-beos*): Use aixppc for targ_emul.

Sat Mar 15 18:10:38 1997  H.J. Lu  <hjl@lucon.org>

	* ldemul.h (ldemul_list_emulations): Use full prototype.
	* ldlang.c (print_one_symbol): Add declaration.
	* ldlang.h (dprint_statements): Declare.
	* ldmain.c (remove_output): Declare.
	* ldmisc.c (vfinfo): Declare.
	* ldwrite.c (clone_section): Declare.
	(split_sections): Make static.  Declare.
	* mri.c: Include libiberty.h.
	(strdup): Don't declare.
	(mri_alias): Use xstrdup rather than strdup.

Fri Mar 14 21:30:06 1997  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/elfmips.sc: Change handling of data area when
	generating a shared library to not skip a large block of memory.
	From Per Fogelstrom <pefo@cvs.openbsd.org>.

Wed Mar 12 21:33:09 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (multiple_definition): Only skip the warning if the
	output section is absolute when the input section is not
	absolute.

	* ldlex.l: Accept whitespace in VERS_START state.  Warn about
	invalid characters in VERS_* states.

Tue Mar 11 13:51:31 1997  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (gld${EMULATION_NAME}_read_file): Don't let a
	trailing space lead us to think that there is a zero address.

Sun Mar  9 23:06:35 1997  Eric Youngdale  <eric@andante.jic.com>

	* ldgram.y (vers_node): Correct typo of '('  for '{'.

Fri Mar  7 18:40:12 1997  Fred Fish  <fnf@cygnus.com>

	* scripttempl/tic80coff.sc (ENTRY): Entry symbol is __start
	rather than _start.
	(__edata): Define this rather than "edata".
	(__end): Define this rather than "end".

Tue Mar  4 17:18:35 1997  Michael Meissner  <meissner@cygnus.com>

	* configure.tgt (tic80-*-*): Allow dropping of -coff.

Sun Mar  2 22:59:49 1997  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (ld.dvi): Set MAKEINFO environment variable as well
	as TEXINPUTS.  Needed for building in separate build dir.
	* ldint.texinfo (SCRIPT_NAME): Fix typo.
	* emulparams/tic80coff.sh: Rewrite to include internal documentation
	about each shell variable that is set (or not set).
	* scripttempl/tic80coff.sc: Complete rewrite.

Fri Feb 28 17:42:27 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (main): Call bfd_set_default_target.
	* Makefile.in (ldmain.o): Define TARGET when compiling.

Thu Feb 27 11:41:03 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (main): Don't initialize link_info.lprefix or
	link_info.lprefix_len.
	* emultempl/hppaelf.em (hppaelf_before_parse): Likewise.

	* emultempl/m88kbcs.em: Remove.
	* emulparams/m88kbcs.sh (TEMPLATE_NAME): Don't set.
	* Makefile.in (em88kbcs.c): Depend upon generic.em rather than
	m88kbcs.em.

	* mri.c (mri_draw_tree): Pass noload_section, not SEC_NEVER_LOAD,
	to lang_enter_output_section_statement.  From Mark Rasin
	<mark.rasin@telrad.co.il>.

Wed Feb 26 11:51:44 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_one_common): Clear SEC_IS_COMMON from common
	section.

Tue Feb 25 20:38:11 1997  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.tgt (mips*-*-lnews*): New target.
	* Makefile.in (emipslnews.c): New target.
	* emulparams/mipslnews.sh: New file.

Tue Feb 25 16:04:09 1997  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (hold_interp): New static variable.
	(gld${EMULATION_NAME}_place_orphan): Put loadable .note sections
	after hold_interp.  Choose a unique output section name.
	(gld${EMULATION_NAME}_place_section): Don't set hold_use if the
	SEC_LOAD or SEC_ALLOC flags differ.  Set hold_interp.

Mon Feb 24 18:16:09 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Eric Youngdale <eric@andante.jic.com>:
	* ldlex.l (V_TAG, V_IDENTIFIER): New macros.
	(VERS_START, VERS_SCRIPT, VERS_NODE): New states to parse version
	information.
	(ldlex_version_script, ldlex_version_file): New functions.
	* ldlex.h (enum input_enum): Add input_version_script.
	(ldlex_version_script): Declare.
	(ldlex_version_file): Declare.
	* ldgram.y (%union): Add deflist, versyms, and versnode.
	(VERS_TAG, VERS_IDENTIFIER): New terminals.
	(GLOBAL, LOCAL, VERSION, INPUT_VERSION_SCRIPT): New terminals.
	(file): Accept INPUT_VERSION_SCRIPT.
	(ifile_p1): Accept version.
	(version_script_file): New nonterminal.
	(version, vers_nodes, vers_node): Likewise.
	(verdep, vers_tag, ver_defns): Likewise.
	* ldlang.c (lang_elf_version_info): New global variable.
	(lang_new_vers_regex): New function.
	(lang_new_vers_node): New function.
	(version_index): New static variable.
	(lang_register_vers_node): New function.
	(lang_add_vers_depend): New function.
	* ldlang.h (lang_elf_version_info): Declare.
	(lang_new_vers_regex, lang_new_vers_node): Declare.
	(lang_add_vers_depend, lang_register_vers_node): Declare.
	* lexsup.c (OPTION_VERSION_SCRIPT): Define.
	(ld_options): Add "version-script".
	(parse_args): Handle OPTION_VERSION_SCRIPT.
	* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
	Pass lang_elf_version_info to size_dynamic_sections.
	* scripttempl/elf.sc: Add .gnu.version sections.
	* ld.texinfo: Document symbol versioning.

Fri Feb 21 17:37:51 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* Makefile.in (ed30velf.c): New target.
	* configure.tgt (d30v-*-*): New target.
	* emulparams/d30velf.sh: New file.
	* scripttempl/elfd30v.sc: New file.

Fri Feb 14 18:28:31 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo (Option Commands): Document the INCLUDE command.

Thu Feb 13 20:31:37 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* configure.in: Call BFD_NEED_DECLARATION on getenv.
	* acconfig.h (NEED_DECLARATION_GETENV): New macro.
	* sysdep.h (getenv): Declare if NEED_DECLARATION_GETENV.
	* ldemul.c (ld_emul_default_target): Do not cast getenv return
	value.
	* ldmain.c (get_emulation): Likewise.
	* configure, config.in: Rebuild.

Tue Feb 11 15:34:26 1997  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/elfmips.sc: When relocating, put .mips16.fn.* and
	.mips16.call.* in .text.

Sun Feb  9 18:09:13 1997  Fred Fish  <fnf@cygnus.com>

	* emulparams/tic80coff.sh: New (dummy) file for TIc80.
	* scripttempl/tic80coff.sc: New (dummy) file for TIc80.
	* Makefile.in (etic80coff.c): Add target and rule to build it.
	* configure.tgt (tic80-*-coff): Set targ_emul to tic80coff.

Fri Jan 31 13:16:53 1997  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Search for
	".so" in the name, not ".so.".
	(gld${EMULATION_NAME}_search_dir): Accept a plain .so file.

	* Makefile.in (ld.info): Add -I$(srcdir).  From Alan Modra
	<alan@spri.levels.unisa.edu.au>.

Thu Jan 30 11:31:52 1997  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/sunos.em: Include <ctype.h>.
	(gld${EMULATION_NAME}_find_so): Skip the directory name when
	searching for ".so.".
	(gld${EMULATION_NAME}_search_dir): Make sure that the library name
	has a version number, and that only version numbers follow .so.

Wed Jan 29 18:15:00 1997  Geoffrey Noer  <noer@cygnus.com>

	* scripttempl/pe.sc:
	* scripttempl/ppcpe.sc: add *(.gcc_except_table) to the text
	section so Win32 executables are valid.

Mon Jan 27 12:28:43 1997  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/elf.sc: Put linkonce reloc section in other
 	appropriate reloc sections.
	* scripttempl/elfmips.sc: Add linkonce support.
	* scripttempl/elfppc.sc: Likewise.

Fri Jan 24 10:44:09 1997  Jeffrey A Law  (law@cygnus.com)

	* emulparms/mn10200.sh (OTHER_RELOCATING_SECTIONS): Move the
	stack up to 0x80000.
	* emulparms/mn10300.sh (OTHER_RELOCATING_SECTIONS): Likewise.

Tue Jan 21 12:11:10 1997  Doug Evans  <dje@seba.cygnus.com>

	* emulparams/m32relf.sh (OTHER_RELOCATING_SECTIONS): Use PROVIDE
	to define `_stack'.

Thu Jan 16 17:07:52 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ld.h (args_type): Rename auxiliary_filter_shlib to
	auxiliary_filters, and make it char **.
	* lexsup.c (parse_args): Handle -f by setting up an array.
	* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Use
	new name of auxiliary_filters.

	* ld.texinfo (Options): Improve documentation of --filter and
	--auxiliary.

Tue Jan 14 15:44:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo (Options): Clarify that the normal usage is -T.
	(Commands): Likewise.

Thu Jan  9 11:26:27 1997  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/armcoff.sc: Correct mask used for .data address.

Wed Jan  8 15:14:59 1997  Geoffrey Noer  <noer@cygnus.com>

	* emultempl/pe.em: make default executable a.exe instead of
	a.out

Fri Jan  3 17:33:34 1997  Richard Henderson  <rth@tamu.edu>

	* scripttempl/elf.sc: Move .got closer to .sdata and .sbss by
	shifting .plt back.  Rumour has it that the NetBSD ld.so depends
	on .dynamic being after .got, so we leave that.

Fri Jan  3 14:04:40 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (clean): Don't remove configdoc.texi.
 	(maintainer-clean): Do remove configdoc.texi.

	* ld.texinfo (Operators): Remove '@' from @smallexmple in comment
	to avoid confusing texi2roff.

Fri Jan  3 11:27:02 1997  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/v850.sc (.zdata): Add .zcommon section.
	(.tdata): Add .tcommon and .tcommon_byte sections.

Thu Jan  2 18:14:32 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (mips*el-*-linux*, mips*-*-linux*): New targets.
	* scripttempl/elfmips.sc: Use __start as the entry address for
	mips*-*-linux*.

Tue Dec 31 14:48:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (ALL_CFLAGS): Add -D_GNU_SOURCE.

	* ld.h (args_type): Add filter_shlib and auxiliary_filter_shlib
	fields.
	* lexsup.c (parse_args): Recognize --auxiliary/-f and
	--filter/-F.
	* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
	Pass filter_shlib and auxiliary_filter_shlib to
	size_dynamic_sections.
	* ld.texinfo, ld.1: Document --filter/-F and --auxiliary/-f.

Mon Dec 30 13:55:57 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/v850.sc (.tdata) Add .tbss and .tbyte sections.

Wed Dec 18 22:57:35 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Use NewFolderRecursive for installation.

Fri Dec 13 14:08:50 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/v850.sc: Make sure __{e,g}p start relative to the
	{s,t}data sections.  Do not emit any linker generated symbols if
	-r.  Use {TEXT,{Z,S,T}DATA}_START_ADDR variables to initialize
	where the different sections go.  Change some whitespace.

	* emulparams/v850.sh ({TEXT,{Z,S,T}DATA}_START_ADDR): Define
	appropriately.  Remove crud not used anymore.

Fri Dec 13 10:19:57 1996  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (emn10200.c): Add dependencies.
	* configure.tgt: Handle mn10200.
	* emulparms/mn10200.sh: New file.

Thu Dec 12 17:04:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/gld960c.em: Include <ctype.h>.
 	(gld960_set_output_arch): Get the machine type from the -A option
	if there is one, rather than always using core.

Sat Dec  7 10:07:51 1996  Jeffrey A Law  (law@cygnus.com)

	* emulparms/mn10300.sh: Handle leading underscores.

Thu Dec  5 13:45:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (gld${EMULATION_NAME}_place_section): Only
	set hold_rel if SEC_ALLOC is set.

Tue Dec  3 11:29:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (section_already_linked): Set the output_offset as well
	as the output_section when only reading symbols from a file.

Mon Dec  2 11:43:50 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emulparams/*.sh: Make sure that each set of parameters which
	uses the elf.sc script sets MACHINE.

Wed Nov 27 03:22:05 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* scripttempl/elf{,mips,ppc}.sc: Add the remaining DWARF sections.
	* scripttempl/elfd10v.sc: Likewise.
	* scripttempl/v850.sc: Likewise.

Tue Nov 26 16:58:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Rebuild with autoconf 2.12.

Mon Nov 25 12:17:55 1996  Jim Wilson  <wilson@cygnus.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_set_symbols): Add case
	for bfd_vma to init loop.

Mon Nov 25 09:55:07 1996  Jeffrey A Law  (law@cygnus.com)

	* emulparms/mn10300.sh: Remove bogus '_' prefix for
	entry symbol and ctor/dtor stuff.

Fri Nov 15 13:00:18 1996  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (emn10300.c): Add dependencies.
	* configure.tgt: Handle mn10300.
	* emulparms/mn10300.sh: New file.

Tue Nov  5 10:57:50 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* emulparams/d10velf.sh (READONLY_START_ADDR): Changed to 0x2000004.
	(EMBEDDED): Define.

Fri Nov  1 10:01:27 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo: Add section on reporting bugs.

	* scripttempl/m68kcoff.sc: Make sure the etext and __CTOR_LIST__
	symbols are correctly aligned.

Thu Oct 31 09:28:59 1996  Jeffrey A Law  (law@cygnus.com)

	* scriptempl/v850.sc (zdata): Handle reszdata, romzdata and
	romzbss too.

Tue Oct 29 12:33:05 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* emulparams/d10velf.sh: Changes needed for D10V-EVA board.
	Set TEXT_START_ADDR to 0x1000000. Set READONLY_START_ADDR to
	0x2000000.

	* scripttempl/elfd10v.sc:  Fix calculation of .text.  Change
	.stack to start at 0x2007ffe.

Mon Oct 28 15:37:00 1996  Doug Evans  <dje@canuck.cygnus.com>

	* configure.tgt (sparclet*-*-aout*): Delete, use sparc*-*-aout*.

Wed Oct 23 16:17:22 1996  Jeffrey A Law  (law@cygnus.com)

	* scriptempl/v850.sc (zdata): Fix typo "zrodata" -> "rozdata".

	* scriptempl/v850.sc (zdata): Make sure this stays
	in lo-memory.

Tue Oct 22 11:36:47 1996  Jeffrey A Law  (law@cygnus.com)

	* scripttempl/v850.sc (__ep): Put it at the start
	of the tda section.

	* scriptempl/v850.sc: Move all "normal" sections into
	the external memory region (0x100000 - 0x200000).

Mon Oct 21 17:16:59 1996  Michael Meissner  <meissner@wogglebug.tiac.net>

	* scripttempl/elfd10v.sc: Clone from elf.sc, move .text to
	0x10000, so that is more room for data.

	* emulparams/d10velf.sh (TEXT_START_ADDR): Now 0x100000.
	(READONLY_START_ADDR): Now 0x0.
	(SCRIPT_NAME): Now elfd10v.

	* Makefile.in (ed10velf.c): Depend on elfd10v.sc, not elf.sc.

Fri Oct 18 22:12:49 1996  Doug Evans  <dje@canuck.cygnus.com>

	* emulparams/m32relf.sh	(TEXT_START_ADDR): Change from 0 to 0x100.

Fri Oct 18 15:43:38 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (ALL_EMULATIONS): Remove eelf64alpha.o.
	(ALL_64_EMULATIONS): New variable.
	* configure.in: Accept --enable-64-bit-bfd option.  If it is set
	with --enable-targets=all, include ALL_64_EMULATIONS in
	EMULATION_OFILES.
	* configure: Rebuild.

Fri Oct 18 12:58:35 1996  Jeffrey A Law  (law@cygnus.com)

	* scripttempl/v850.sc (__gp, __ep): Define.

Thu Oct 17 18:14:07 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo: Try to consistently use a single or a double dash
	for each option.

Thu Oct 17 10:17:20 1996  Doug Evans  <dje@canuck.cygnus.com>

	* emulparams/m32relf.sh (EMBEDDED): Define.

Thu Oct 17 10:56:49 1996  Jeffrey A Law  (law@cygnus.com)

	* scripttempl/v850.sc (.zdata): Add this before .text.
	(.sdata): Also include .rosdata as part of the .sdata.
	(.tdata): Include this just before .sdata.

	* emulparms/v850.sh (SCRIPT_NAME): Use "v850" not "elf".
	* scripttempl/v850.sc: Wrap script with a "cat << EOF".

Wed Oct 16 23:10:01 1996  Jeffrey A Law  (law@cygnus.com)

	* scripttempl/v850.sc: New linker script for the V850.
	* Makefile.in: Use it.

Thu Oct 10 17:57:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emulparams/elf32b4300.sh: Define _gp in OTHER_GOT_SYMBOLS, not
	OTHER_READWRITE_SECTIONS.
	* emulparams/elf32l4300.sh: Likewise.

Wed Oct  9 14:36:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ld.h (ld_config_type): Add warn_section_align field.
	* lexsup.c (OPTION_WARN_SECTION_ALIGN): Define.
	(ld_options): Add --warn-section-align.
	(parse_args): Handle --warn-section-align.
	* ldlang.c (lang_size_sections): If warn_section_align, warn if
	the start of a section changes due to alignment.
	* ld.texinfo, ld.1: Document --warn-section-align.
	* ld.texinfo: Change some single dashes to double dashes.

	* emultempl/pe.em (set_pe_subsystem): Record entry symbol for each
	subsystem type.  Ifdef out os2 type.  Recognize a version number.

Tue Oct  8 12:07:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/pe.em (set_pe_subsystem): When setting the subsystem
	to windows, set the entry point.

	* Makefile.in (ldlex.c): Don't pass any options to $(LEX).

Mon Oct  7 17:29:05 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo (Options): Mention .so extensions for shared
	libraries.

Sun Oct  6 22:35:36 1996  Jason Merrill  <jason@yorick.cygnus.com>

	* scripttempl/elf{,mips,ppc}.sc: Add DWARF 2 sections.

Fri Oct  4 18:49:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/m68kcoff.sc: Only set the address of .text if
	RELOCATING.

Fri Oct  4 10:59:52 1996  Doug Evans  <dje@canuck.cygnus.com>

	* emulparams/sparcaout.sh ({BIG,LITTLE}_OUTPUT_FORMAT): Define.
	* scripttempl/aout.sc ({BIG,LITTLE}_OUTPUT_FORMAT): Provide default.
	(OUTPUT_FORMAT): Support bi-endian targets.

Thu Oct  3 13:52:03 1996  Ian Lance Taylor  <ian@cygnus.com>

	* fnmatch.h, fnmatch.c: Remove (now in libiberty).
	* Makefile.in: Rebuild dependencies.
	(CFILES): Remove fnmatch.c.
	(HFILES): Remove fnmatch.h.
	(OFILES): Remove fnmatch.o.

Thu Oct  3 15:41:24 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (mostlyclean): Move config.log to distclean.

Wed Oct  2 23:45:25 1996  Geoffrey Noer  <noer@cygnus.com>

        * emultmpl/pe.em: increase size of stack reserve to 0x2000000
        (necessary in order to compile parse.c in gcc sources under NT)

Wed Oct  2 14:49:10 1996  Ian Lance Taylor  <ian@cygnus.com>

	* lexsup.c (ld_options): Fix typo in --rpath-link description.
	* emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Suggest
	--rpath if a needed library is not found.

Tue Oct  1 16:17:33 1996  Joel Sherrill  <joel@oarcorp.com>

	* configure.tgt (mips*-*-rtems*): New target, like mips*-*-elf*.

Tue Oct  1 15:50:34 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo (Options): Give more detail on -l option.

	* scripttempl/elfmips.sc: Handle CREATE_SHLIB the same way that
	elf.sc does, so that glibc works better.

	* ldver.c (ld_program_version): New variable.
	(ldversion): Use it.
	* ldver.h (ld_program_version): Declare.
	* lexsup.c (ld_options): Handle --dll-verbose like --verbose, not
	--version.  Change --version handling to match current GNU
	standards.
	(help): Print bug report address.

Mon Sep 30 12:14:43 1996  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (em32relf.c): Add rule for.
	* configure.tgt (m32r-*-*): Recognize.
	* emulparams/m32relf.sh: New file.

Thu Sep 26 13:58:47 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Add symbolic doublequoting to ldmain compile edit.
	* mpw-config.in: Add mips-*-* case as mips-elf, and use more
	wildcards in matching.
	* mpw-emipself.c: New file, pregenerated mips elf emulation.

Tue Sep 17 12:18:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldint.texinfo: Rewrote.

	* configure.tgt: Add cases for MIPS 5000 like MIPS 4300.

Mon Sep 16 17:55:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/armcoff.sc: Only define symbols if RELOCATING.  Fix
	syntax error on __end__ line.

	* scripttempl/armcoff.sc: For -N or -n, don't align .data.  From
 	Chris Hadley <Christopher.Hadley@cl.cam.ac.uk>

Sun Sep 15 22:09:56 1996  Jeffrey A Law  (law@cygnus.com)

	* emulparms/v850.sh: Fix OTHER_RELOCATING_SECTIONS.

Sun Sep 15 10:38:16 1996  Mark Alexander  <marka@cygnus.com>

	* emulparms/d10v.sh: Set OTHER_RELOCATING_SECTIONS to put
	stack at top of simulator memory.

Fri Sep 13 15:49:45 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlex.l (SYMBOLCHARN): Add $, _, and ~.

Wed Sep 11 23:30:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (get_emulation): Check for -mips4 like -mips1, et. al.

Thu Sep  5 15:24:12 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (section_already_linked): Accept a lang_input_statement
	as the PTR argument.  If the file is symbols only, discard all
	input sections.
	(ldlang_add_file): Pass entry to bfd_map_over_sections.

Wed Sep  4 15:53:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (alpha-*-gnu*): New target.  From Fila Kolodny
	<fila@ibi.com>.

Tue Sep  3 00:52:54 1996  Jeffrey A Law  (law@cygnus.com)

	* emulparms/v850.sh: Set OTHER_RELOCATING_SECTIONS

Sun Sep  1 21:48:58 1996  Jeffrey A Law  (law@cygnus.com)

	* emulparms/v850.sh: Set EMBEDDED.

Fri Aug 30 22:30:30 1996  Jeffrey A Law  (law@cygnus.com)

	* emulparms/v850.sh: Entry symbol is "_start", tweak
	ctor/dtor support.

Fri Aug 30 18:32:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (sh-*-elf*): New target.
	* emulparams/shelf.sh: New file.
	* emulparams/shlelf.sh: New file.
	* Makefile.in (ALL_EMULATIONS): Add eshelf.o and eshlelf.o.
	(eshelf.c, eshlelf.c): New targets.
	* scripttempl/elf.sc: If EMBEDDED is defined, then don't add
	SIZEOF_HEADERS to TEXT_START_ADDR.  Expand CTOR_START and CTOR_END
	around .ctors, and DTOR_START and DTOR_END around .dtors.  Expand
	OTHER_RELOCATING_SECTIONS if RELOCATING.

Thu Aug 29 16:57:46 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.{host,tgt} (i[345]86-*-*): Recognize i686 for pentium
	pro.

Mon Aug 26 12:58:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldgram.y (section): Add opt_nocrossrefs; pass value to
	lang_enter_overlay.
	(opt_nocrossrefs): New nonterminal.
	* ldlex.l: Recognize NOCROSSREFS keyword in EXPRESSION mode.
	* ldlang.c (overlay_nocrossrefs): New static variable.
	(lang_enter_overlay): Add nocrossrefs parameter.
	(lang_leave_overlay): Only add nocrossrefs if overlay_nocrossrefs
	is set.  Initialize overlay_nocrossrefs.
	* ldlang.h (lang_enter_overlay): Update declaration.
	* ld.texinfo (Overlays): Update documentation.

	* ldver.c (ldversion): Print GNU ld in the version message.

Thu Aug 22 17:10:40 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Set HLDENV.
	* configure.in: Substitute HLDENV.
	* configure: Rebuild.
	* Makefile.in (HLDENV): New variable.
	($(LD_PROG)): Use $(HLDENV).

Thu Aug 22 16:29:28 1996  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (ev850.c): New target.
	* configure.tgt (v850-*-*): New target.
	* emulparams/v850.sh: New file.

Thu Aug 22 11:16:02 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Add @DASH_C_FLAG@ to compiler edit.

Wed Aug 21 11:26:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/elf.sc: Put .gnu.linkonce* sections in appropriate
	containing sections.

Mon Aug 19 13:01:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* fnmatch.c: Include sysdep.h.

Mon Aug 19 11:28:29 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* genscripts.sh: Undo 8/16 change.

	* emulparams/d10velf.sh (MACHINE): Explicitly set to nothing.

Fri Aug 16 19:18:08 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* genscripts.sh: Explicitly reset any shell variables set or used
	by the various .sc scripts to allow inadvertant use of these
	names as normal environment variables by the person running
	configure.

	* Makefile.in (ed10velf.c): Use tdir_d10v, not tdir_arcelf.

Fri Aug 16 14:15:41 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* scripttempl/armcoff.sc (__bss_start__, __bss_end__,
 	__data_start__, __data_end__): Added to keep in sync. with the
 	default ARM crt0.s. Added __CTOR_LIST__ and __DTOR_LIST__ support.

Thu Aug  8 14:24:56 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldcref.c (check_reloc_refs): If info->same, look for any symbol
	defined in info->defsec, not just the section symbol.

Wed Aug  7 14:40:48 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* configure.in: Call BFD_NEED_DECLARATION on strstr and sbrk.
	* acconfig.h (NEED_DECLARATION_STRSTR): New macro.
	(NEED_DECLARATION_SBRK): New macro.
	* configure, config.in: Rebuild.
	* sysdep.h (strstr): Declare if NEED_DECLARATION_STRSTR.
	* ldmain.c (sbrk): Declare if HAVE_SBRK and
	NEED_DECLARATION_SBRK.

	* ldlang.c (lang_record_phdrs): Cast xmalloc and xrealloc return.

Mon Aug  5 16:26:14 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlex.l: Recognize OVERLAY.
	* ldgram.y: Add section_phdr field to %union.
	(section): Handle phdr_opt result.  Add OVERLAY case.
	(opt_exp_without_type): New nonterminal.
	(phdr_opt): Return list of phdrs.
	(overlay_section): New nonterminal.
	* ldlang.c: Include <ctype.h>.
	(lang_leave_output_section_statement): Add phdrs parameter.
	Change all callers.
	(lang_section_in_phdr): Remove.
	(overlay_vma, overlay_lmn, overlay_max): New static variables.
	(struct overlay_list): Define.
	(overlay_list): New static variable.
	(lang_enter_overlay, lang_enter_overlay_section): New functions.
	(lang_leave_overlay_section, lang_leave_overlay): New functions.
	* ldlang.h (lang_leave_output_section_statement): Update
	declaration for new parameter.
	(lang_section_in_phdr): Don't declare.
	(lang_enter_overlay, lang_enter_overlay_section): Declare.
	(lang_leave_overlay_section, lang_leave_overlay): Declare.
	* ld.texinfo (Overlays): New node under SECTIONS, documenting
	overlays.

	* ldlex.l: Recognize MAX and MIN.
	* ldgram.y (MAX, MIN): New terminals.
	(exp): Recognize MAX and MIN.
	* ldexp.c (fold_binary): Handle MAX and MIN.
	* ld.texinfo (Arithmetic Functions): Document MAX and MIN.

	* ld.texinfo (PHDRS): Use @cindex, not @kindex, for program header
	index entries.

	* ldgram.y (SIZEOF, ADDR): Do not specify type.

	* ldcref.c (check_nocrossref): Skip symbols with no output
	sections.

Fri Aug  2 14:57:49 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldgram.y (LOADADDR): New terminal.
	(exp): Handle LOADADDR.
	* ldlex.l: Recognize LOADADDR.
	* ldexp.c (exp_print_token): Add LOADADDR.
	(fold_name): Implement LOADADDR.
	* ldlang.c (exp_init_os): Treat LOADADDR like ADDR.
	* ld.texinfo (Arithmetic Functions): Document LOADADDR.

Thu Aug  1 12:52:19 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ld.h (check_nocrossrefs): Declare.
	* ldlang.h (struct lang_nocrossref): Define.
	(struct lang_nocrossrefs): Define.
	(nocrossref_list): Declare.
	(lang_add_nocrossref): Declare.
	* ldlex.l: Recognize NOCROSSREFS keyword.
	* ldgram.y (%union): Add nocrossref field.
	(NOCROSSREFS): New terminal.
	(ifile_p1): Recognize NOCROSSREFS.
	(nocrossref_list): New nonterminal.
	* ldlang.c (nocrossref_list): Define.
	(lang_add_nocrossref): New function.
	* ldmain.c (main): If nocrossref_list is not NULL, call
	check_nocrossrefs.
	(warning_callback): Free symbols if there is no place to store
	them.
	(notice): Call add_cref if nocrossref_list is not NULL.
	* ldcref.c: Include "ldexp.h" and "ldlang.h".
	(check_nocrossrefs): New function.
	(check_nocrossref): New static function.
	(struct check_refs_info): Define.
	(check_refs, check_reloc_refs): New static functions.
	* Makefile.in: Rebuild dependencies.
	* ld.texinfo (Option Commands): Document NOCROSSREFS.

	* ld.texinfo (Section Placement): Improve the wording of the
	wildcard documentation.  Mention that wildcards are only searched
	for on the command line, not in the file system.

	* emultempl/sunos.em (gld${EMULATION_NAME}_after_open): Move
	definition of lib_path inside condition where it is used.

Wed Jul 31 13:17:10 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

 	* emulparams/d10velf.sh: Now works with elf.sc.

Wed Jul 31 11:52:03 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* emulparams/d10velf.sh (SCRIPT_NAME): Change to vanilla.

Tue Jul 30 14:46:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_size_sections): Add the section VMA to the result
	value when computing the address of a section.

	* ld.h (args_type): Add cref field.
	* lexsup.c (parse_args): Set command_line.cref.
	* ldmain.c (main): Check command_line.cref rather than
	link_info.notice_all.
	(notice): Likewise.

	* ldcref.c (output_one_cref): Don't crash if a symbol is defined
	in a section without an owner.

Mon Jul 29 17:23:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* fnmatch.h, fnmatch.c: New files.
	* ldlex.l: Remove unused definition of FILENAME.  Add definition
	of WILDCHAR.  In SCRIPT mode, accept any sequence of WILDCHAR as a
	NAME.
	* ldgram.y (file_NAME_list): Accept '*' and '?' specially.
	(input_section_spec): Accept '?' specially.
	(statement): Change exp to mustbe_exp in length and FILL cases.
	(section): Call ldlex_script before section statements, and call
	ldlex_popstate after them.
	* ldlang.c: Include "fnmatch.h".
	(wildcardp): New static function.
	(wild_section): Permit the section name to be a wildcard.
	(wild_file): New static function, broken out of wild.
	(wild): Call wild_file.  Permit the file name to be a wildcard.
	(open_input_bfds): Don't call lookup_name for a wildcard pattern.
	* Makefile.in: Rebuild dependencies.
 	(CFILES): Add fnmatch.c.
	(HFILES): Add fnmatch.h.
	(OFILES): Add fnmatch.o.
	* ld.texinfo: Document that file and section names can now be
	wildcard patterns.

	* ldlang.c (lang_place_orphans): Correct condition: place a common
	section if not relocateable or if common definitions are forced.

Wed Jul 24 12:16:38 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* emulparams/d10velf.sh (SCRIPT_NAME): Change to elf.

Wed Jul 24 13:38:22 1996  Michael Meissner  <meissner@wogglebug.tiac.net>

	* configure.tgt (d10v-*-*): Don't require the -elf, allow plain d10v.

Tue Jul 23 10:36:19 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* Makefile.in (ed10velf.c): New target.
	* configure.tgt (d10v-*-elf*): New target.
	* emulparams/d10velf.sh: New file.

Thu Jul 18 16:25:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (sparc*-*-sysv4*): New target.  From Andrew Gierth
	<ANDREWG@microlise.co.uk>.

	* configure.host: Change irix5 to irix[56]*.
	* configure.tgt: Likewise.

Wed Jul 17 10:52:46 1996  Kim Knuttila  <krk@cygnus.com>

	* emultempl/pe.em (sort_sections): Pay attention to return code.

	* ldmisc.c (demangle): Remove all prefix '.'s from a name.

Mon Jul 15 11:49:49 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Round
 	the value of __start_SECNAME to the alignment required by the
 	section to be placed.

Tue Jul  9 12:09:02 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (mips*el-*-elf*): Use elf32elmip.
	(mips*-*-elf*): Use elf32ebmip.
	* emulparams/elf32bmip.sh (EMBEDDED): Don't define.
	* emulparams/elf32lmip.sh (EMBEDDED): Don't define.
	* emulparams/elf32elmip.sh: New file; copy of elf32lmip.sh with
	EMBEDDED defined.
	* emulparams/elf32ebmip.sh: New file; copy of elf32bmip.sh with
	EMBEDDED defined.
	* emulparams/elf32b4300.sh (EMBEDDED): Define.
	* emulparams/elf32l4300.sh (EMBEDDED): Define.
	* Makefile.in (ALL_EMULATIONS): Add eelf32ebmip.o eelf32elmip.o.
	(eelf32ebmip.c, eelf32elmip.c): New targets.

Thu Jul  4 12:01:03 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldver.c (ldversion): Set version to cygnus-2.7.1.

	* Released binutils 2.7.

	* emulparams/pc532macha.sh: Rename from pc532machaout.sh to avoid
	System V file name limitations.
	* configure.tgt (nc32k-pc532-mach*, ns32k-pc532-ux*): Use
	pc532macha rather than pc532machaout.
	* Makefile.in (ALL_EMULATIONS): Change epc532machaout.o to
	epc532macha.o.
	(epc532macha.c): Rename target from epc532machaout.c.

Wed Jul  3 11:40:10 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (print_padding_statement): Use %u, not %x, to print
	fill value.

Sun Jun 30 11:16:43 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-eppcmac.c: Update to reflect May 23 change to aix.em.

Thu Jun 27 14:03:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Put the .sa
	file just before the .so file, rather than just after.

	* configure.host: Use -print-file-name=FILE rather than piping
	-print-libgcc-file-name through sed.
	(i[345]86*-*-sco*, i[345]86-*-isc*): Create crtbegin.o and
	crtend.o files, in case gcc doesn't use them.
	* Makefile.in (mostlyclean): Remove crtbegin.o and crtend.o.

Wed Jun 26 15:57:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (mips*-dec-osf*): New target.

Tue Jun 25 22:15:29 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (bindir, libdir, datadir, mandir, infodir, includedir,
	INSTALL_PROGRAM, INSTALL_DATA): Use autoconf-set values.
	(docdir): Removed.
	* configure.in (AC_PREREQ): autoconf 2.5 or higher.
	(AC_PROG_INSTALL): Added.
	* configure: Rebuilt.

Mon Jun 24 18:48:16 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/elfppc.sc (_GLOBAL_OFFSET_TABLE_): Don't do a
	PROVIDE of _GLOBAL_OFFSET_TABLE_, since it needs to be at a
	non-fixed location.

Mon Jun 24 17:55:31 1996  Jouke Numan  <jnuman@bazis.nl>

	* ldlang.h (enum section_type): Define.
	(lang_output_section_statement_type): Remove loadable field.  Add
	sectype field.
	(lang_enter_output_section_statement): Change flags parameter in
	prototype to sectype.
	* ldgram.y (typebits): Remove.
	(sectype): New static variable.
	(opt_at): Use sectype rather than typebits.
	(type): Set sectype rather than typebits.
	(atype): Likewise.
	* ldlex.l: Recognize DSECT, COPY, INFO, and OVERLAY in
	EXPRESSION mode.
	* ldlang.c (lang_output_section_statement_lookup): Set sectype
	field rather than loadable field.
	(wild_doit): Check sectype rather than loadable.
	(lang_record_phdrs): Likewise.
	(lang_enter_output_section_statement): Rename flags parameter to
	sectype.  Set sectype field rather than loadable field.  Set flags
	field based on sectype.

Mon Jun 24 12:00:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/elf.sc: Force .stab* and .comment sections to start
	at 0.

	* configure.in: On alpha*-*-osf*, link against libbfd.a if not
	using shared libraries.
	* configure: Rebuild with autoconf 2.10.

Fri Jun 21 17:40:56 1996  Joel Sherrill  <joel@merlin.gcs.redstone.army.mil>

	* configure.tgt: Add support for *-*-rtems* configurations.

Fri Jun 21 13:05:51 1996  Richard Henderson  <rth@tamu.edu>

	* configure.tgt (alpha-*-linuxecoff*): New target.
	(alpha-*-linux*): Use elf64alpha.
	* emulparams/elf64alpha.sh: New file.
	* emultempl/elf32.em: If ELFSIZE is not set, set it to 32.  Use
	${ELFSIZE} rather than 32 when calling BFD routines.
	(hold_rodata): New static variable.
	(gld${EMULATION_NAME}_place_orphan): Use hold_rodata for a
	readonly section that is not code.
	(gld${EMULATION_NAME}_place_section): Set hold_rodata.  Don't use
	a .rel section unless its bfd_section field is not NULL.
	* Makefile.in (ALL_EMULATIONS): Add eelf64alpha.o.
	(eelf64alpha.c): New target.

Fri Jun 21 12:45:46 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldmisc.c (vfinfo): Correct handling of 0 in %W case.

Thu Jun 20 13:55:28 1996  Ian Lance Taylor  <ian@cygnus.com>

	Add enough support to understand the gcc svr3.ifile script:
	* ldlex.l: Recognize BLOCK and GROUP in EXPRESSION context.  Add
	BIND keyword.
	* ldgram.y: Add BIND token.
	(section): Recognize GROUP.
	(opt_ext_with_type): Recognize a couple of cases of BIND.
	* ldlang.c (init_os): Don't do anything if section is already
	initialized.  Call exp_init_os on addr_tree field.
	(exp_init_os): New static function.
	(map_input_to_output_sections): Call exp_init_os on assignment
	expression.
	(lang_place_orphans): Check for common sections by name COMMON
	rather than by common_section field.  Don't warn about absence of
	[COMMON] command.

	* ldlang.h (lang_input_statement_type): Remove useless fields
	common_section, common_output_section, and complained, as well as
	all references to them.

	* ldexp.c: Reindent a lot of code.
	(exp_fold_tree): Call FAIL rather than einfo in default case.

Wed Jun 19 11:40:14 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host (m88*-*-dgux*): Quote HOSTING_CRT0.  From
	<randall.hron@medaphis.com>.

Tue Jun 18 15:53:09 1996  Jeffrey A. Law  <law@rtl.cygnus.com>

	* scripttempl/h8300s.sc: New file for H8/S.
	* emulpararms/h8300s.sh: New file for H8/S.
	* Makefile.in (ALL_EMULATIONS): Add H8/S.
	(e_h8300s.c): Add dependencies.
	* configure.tgt: Add H8/S to targ_extra_emuls.

Tue Jun 18 17:55:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (i[345]86*-*-isc*): New target.  From
	<uddeborg@carmen.se>.

Wed Jun 12 12:46:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* lexsup.c: Include "libiberty.h".
 	(parse_args): Copy the -Y argument into memory.
 	(set_default_dirlist): Don't put the ':' back into the directory
	list.

Fri Jun  7 11:27:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/sunos.em: Include libiberty.h.
	(gld${EMULATION_NAME}_set_symbols): New static function to add
	LD_LIBRARY_PATH to the list of search directories.
	(ld_${EMULATION_NAME}_emulation): Add new set_symbols routine.

Thu Jun  6 11:50:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emulparams/elf32bmip.sh (OTHER_GOT_SYMBOLS): Use ALIGN(16)
	rather than . when computing _gp value.  From Per Fogelstrom.
	* emulparams/elf32lmip.sh (OTHER_GOT_SYMBOLS): Likewise.

	* ldmain.c (main): Don't close and unlink the file on error, since
	remove_output will do it anyhow.
	* ldlang.c (open_output): Set boolean variable to true, not 1.

Wed Jun  5 18:34:14 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* emulparams/{elf32b4300.sh,elf32l4300.sh} (SCRIPT_NAME): Use
	elfmips instead of elf.

Tue Jun  4 18:43:07 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldcref.c: New file.
	* ld.h (add_cref, output_cref): Declare.
	* ldmain.c (main): Initialize notice_all field.  If it is set at
	end of link, call output_cref.
	(notice): Rename from notice_ysym.  Check notice_all.
	* ldmisc.c (finfo): Make globally visible.
	* ldmisc.h (finfo): Declare.
	* lexsup.c (OPTION_CREF): Define.
	(ld_options): Add "cref".
	(parse_args): Handle OPTION_CREF.
	* Makefile.in: Rebuild dependencies.
	(CFILES): Add ldcref.c.
	(OFILES): Add ldcref.o.
	* ld.texinfo, ld.1: Document --cref.

Tue Jun  4 12:12:25 1996  Tom Tromey  <tromey@csk3.cygnus.com>

	* Makefile.in (install): Make $(tooldir) and $(tooldir)/bin.

Fri May 31 12:40:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/pe.em (sort_sections): Don't assume that a
	wild_statement has a section name.

Wed May 29 13:13:35 1996  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/elfmips.sc: Quote test -z argument.

	* ld.texinfo: Clarify the CONSTRUCTORS command.

Thu May 23 16:07:44 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (gld${EMULATION_NAME}_read_file): Initialize
	file, not impfile.

Wed May 22 11:31:30 1996  Doug Evans  <dje@seba.cygnus.com>

	* ldlang.c (wild_doit): Don't copy over SEC_LINK_{ONCE,DUPLICATES}
	if final link.
	* emultempl/pe.em (sfunc): Renamed to sort_by_file_name.
	(sort_by_section_name, sort_sections_1): New functions.
	(sort_sections): Only sort by file name sections in .idata.
	Add "Grouped Sections" support.
	(gld${EMULATION_NAME}_place_orphan): Rewrite to support Grouped
	Sections.
	(gld${EMULATION_NAME}_place_section): Delete.
	* scripttempl/pe.sc (.text,.data,.rdata): Add *(.foo\$).
	(.CRT,.rsrc): Rewrite to use Grouped Section support.

Tue May 21 14:31:48 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-eppcmac.c: Update to reflect changes to aix.em.

Sun May 19 16:59:44 1996  Doug Evans  <dje@seba.cygnus.com>

	* ldlang.c (dprint_statement): Stop printing at end of list.

Sat May 18 13:12:05 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	Support for --force-exe-suffix
	* ld.h (args_type): Add force_exe_suffix.
	* ld.texinfo: Add documentation.
	* ldmain.c (main):  Add support for option.
	* lexsup.c (OPTION_FORCE_EXE_SUFFIX): New.
	(ld_options, parse_args):  Add support for option.

Wed May 15 12:50:25 1996  Jim Wilson  <wilson@chestnut.cygnus.com>

	* emultempl/pe.em (set_pe_value): Pass 0 not 16 to strtoul call.

Fri May 10 16:28:44 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/elfppc.sc (__stack): Make __stack 0 if it was
	referenced but not defined.

Thu May  9 08:52:23 1996  Rob Savoye  <rob@chinadoll.cygnus.com>

	* emulparams/{elf32bmip.sh,elf32lmip.sh,mipsidt.sh,mipsidtl.sh}:
	Set a new variable to signify if the final target is an embedded
	system.
	* scripttempl/{mips.sc,elfmips.sc}: Don't add SIZEOF_HEADERS to
	.text for an embedded system.

Tue May  7 10:56:11 1996  Doug Evans  <dje@canuck.cygnus.com>

	* scripttempl/pe.em (gld${EMULATION_NAME}_place_orphan): New function.
	(gld${EMULATION_NAME}_place_section): New function.
	(hold_{section,use,text,rdata,data}): New static locals.
	(ld_${EMULATION_NAME}_emulation): Update orphan field.
	* scripttempl/pe.sc: Whitespace cleanup.  Semicolon usage cleanup.
	(INIT,FINI): Delete, unused.
	(.text): Document orphan .text.foo sections.
	(.rdata): Document orphan .rdata.foo sections.
	(.data): Document orphan .data.foo sections.

Tue May  7 11:35:46 1996  Jeffrey A Law  (law@cygnus.com)

	* scripttempl/h8300.sc: Place ".tiny" sections right
	after ".data" sections.
	* scripttempl/h8300h.sc: Place ".tiny" sections into
	the "tiny" memory region, 0xff8000 through 0xffff00.

	* scripttempl/h8300.sc: Set the entry point to the value of
	"_start" rather than the start of the text segment.
	* scripttempl/h8300h.sc: Likewise.

	* scripttempl/h8300.sc: Place .rodata sections before .text
	sections in main ram.
	* scripttempl/h8300h.sc: Likewise.

Mon May  6 23:32:30 1996  Jeffrey A Law  (law@cygnus.com)

	* scripttempl/h8300h.sc: Use "eight", not "eightbit" for the
	8-bit region and 8-bit sections.

Wed May  1 17:50:06 1996  Doug Evans  <dje@canuck.cygnus.com>

	* ldlang.c (section_already_linked): Fix typos.

Mon Apr 29 20:31:06 1996  Doug Evans  <dje@canuck.cygnus.com>

	* scripttempl/pe.sc (.endjunk): Define __end__.

Mon Apr 29 17:05:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (longest_section_name): Remove.
	(SECTION_NAME_MAP_LENGTH): Define.
	(print_size, print_alignment, print_fill, print_section): Remove.
	(print_flags): Remove.
	(lang_map): Rewrite.
	(print_output_section_statement): Rewrite.
	(print_assignment): Rewrite.
	(print_one_symbol): Rewrite.
	(print_input_section): Rewrite.
	(print_fill_statement): Rewrite.
	(print_data_statement): Rewrite.
	(print_address_statement): New static function.
	(print_reloc_statement): Rewrite.
	(print_padding_statement): Rewrite.
	(print_wild_statement): Rewrite.
	(print_statement_list): Clean up.
	(print_statement): Clean up.  Some minor output changes.
	(print_statements): Clean up.
	(load_symbols): Put another - before -whole-archive.
	* ldexp.c (exp_print_tree): Change etree_value and etree_rel to
	print 0x and to omit leading zeroes.  For etree_rel, use %B to
	print the BFD.  For etree_assign, remove the space after the
	destination name.
	* ldwrite.c: Include "libiberty.h".
	(clone_section): Call xstrdup, not strdup.
	(ldwrite): Don't print any map information.
	(print_symbol_table, print_file_stuff, print_symbol): Remove.
	* ldmain.c (main): Call lang_map when appropriate.
	* ldmisc.c (vfinfo): Add support for %W.
	(print_address): Remove.
	* ldmisc.h (print_address): Don't declare.
	* Makefile.in: Rebuild dependencies.

Mon Apr 29 10:29:07 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.host (m68*-*-linux*): Add -dynamic-linker to
 	HOSTING_CRT0.  Search -lgcc both before and after -lc in
 	HOSTING_LIBS.  Look for crt{begin,end}.o in the compiler directory
 	at first.
	(i[345]86-*-linux*): Look for crt{begin,end}.o in the compiler
	directory at first.

Fri Apr 26 14:42:27 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldmisc.h (demangle): Declare.
	* ldmisc.c: Include "libiberty.h".  Include demangle.h with "",
 	not <>.
	(demangle): Make non-static.  Remove remove_underscore paramter.
	Always return an allocated string.
	(vfinfo): Free result of demangle.  Add case 'G'.  Use %T to print
	functionname, rather than calling demangle.  Print a colon between
	the BFD(section+offset) and the line number.
	* ldmain.c (add_archive_element): Improve format of archive
	information in map file.
	(constructor_callback): Don't print anything to the map file.
	* ldlang.c (lang_one_common): Improve format of common symbol
	information in map file.
	* ldctor.c (ldctor_build_sets): If producing a map file, print set
	information.
	* ldwrite.c (print_symbol_table): Print a newline before the
	header in the map file.
	* Makefile.in: Rebuild dependencies.

	* ldmisc.c (vfinfo): Reindent.

Mon Apr 22 12:07:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_size_sections): If _cooked_size is not 0, then
	don't clobber it when not relaxing.

	* ld.h (ld_config_type): Remove traditional_format field.
	* ldmain.c (main): Use link_info.traditional_format rather than
	config.traditional_format.
	* ldlang.c (ldlang_open_output): Likewise.
	* lexsup.c (parse_args): Likewise.
	* emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Likewise.
	* mpw-eppcmac.c (gldppcmacos_parse_args): Likewise.

	* ldlang.c (wild_doit): Discard debugging sections if we are
	stripping debugging information.

	* emulparams/z8002.sh (ARCH): Set to z8002, not z8k.

Tue Apr 16 16:38:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldexp.c (fold_binary): Correct handling of subtraction with
	absolute values.
	(fold_name): Permit symbols in lang_allocating_phase_enum.

	* scripttempl/aout.sc: Only PROVIDE __stack when RELOCATING.  Undo
	accidental changes in last patch.

Tue Apr 16 10:25:42 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.tgt (powerpc*-*-{sysv,linux}): Add aliases.
	(powerpcle*-*-{sysv,solaris}): Ditto.

Mon Apr 15 14:50:56 1996  Rob Savoye  <rob@chinadoll.cygnus.com>

	* scripttempl/aout.sc: Add PROVIDE (__stack = 0) so I can use it
	in m68k/crt0.S without things blowing up.

Fri Apr 12 16:40:56 1996  Rob Savoye  <rob@chinadoll.cygnus.com>

	* scripttempl/m68kcoff.sc: Remove default address for .data so
	.text, .data, and .bss are all sequential.

Thu Apr 11 12:05:35 1996  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/m68kcoff.sc: Remove regions and simplify.

Wed Apr 10 14:41:53 1996  Jeffrey A Law  (law@cygnus.com)

	* scripttempl/h8300.sc: Add the "8-bit area" in the upper 256
	bytes of the address space.  Put data from the ".eight" sections
	into the 8-bit area.
	* scripttempl/h8300h.sc: Likewise.

Tue Apr  9 14:10:42 1996  Doug Evans  <dje@canuck.cygnus.com>

	* emultempl/generic.em (gld${EMULATION_NAME}_before_parse):
	Pass $ARCH to ldfile_set_output_arch instead of setting
	ldfile_output_architecture directly.

Tue Apr  9 14:22:15 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/elfppc.sc (.init,.fini): Put .init, .fini section
	next to .text.  Put _etext after .text, .init, .fini, and
	.rodata{,2} sections.

Tue Apr  9 12:18:57 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo: Rearrange option documentation.

	* lexsup.c (ld_options): New static array.
	(parse_args): Build shortopts and longopts from ld_options array.
	(help): New static function.
	* ldver.h (help): Don't declare.
	* ldver.c (ldversion): Reindent.
	(help): Remove.

	* ld.texinfo, ld.1: Mention -E as a synonym for -export-dynamic.

Mon Apr  8 11:56:23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em: When checking for a native emulation, check
	that the current emulation is the default emulation.
	* emultempl/sunos.em: Likewise.

	* configure.in: Permit --enable-shared to specify a list of
	directories.
	* configure: Rebuild.

	* lexsup.c (parse_args): Add -E as a synonym for -export-dynamic,
	for HP/UX compatibility.

Fri Apr  5 14:30:14 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (gld${EMULATION_NAME}_check_ld_so_conf): New
	static function, if ${host} = ${target}.
	(gld${EMULATION_NAME}_after_open): Call check_ld_so_conf to find a
	needed shared library if ${host} = $[target}.

	* configure.host (i[345]86-*-linux*): Add -dynamic-linker to
	HOSTING_CRT0.  Search -lgcc both before and after -lc in
	HOSTING_LIBS.

	* configure.tgt: Add i[345]86-*-freebsdelf* target; from John
	Polstra <jdp@polstra.com>.

Fri Apr  5 18:11:25 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* emulparams/elf32{b,l}4300.sh (MACHINE): Add explicit
 	architecture number.
	* scripttempl/elf.sc: Use $MACHINE definition if present.
	* configure.tgt (targ_extra_emuls): Force 4100 build to use same
 	template as 4300.

Mon Apr  1 17:35:40 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_size_sections): Change region check to handle
	regions which end at the highest possible address correctly.
	From Roland Weber <roweber@ira.uka.de>.

	* ldlang.c (section_already_linked): New static function.
	(wild_doit): Discard sections with SEC_EXCLUDE set if not doing a
	relocateable link.  Don't worry about section being NULL, since it
	never should be.  Don't call init_os unless the section is going
	to be added.
	(ldlang_add_file): Call section_already_linked for each section.
	* ldmain.c (multiple_definition): Don't warn about multiple
	definitions in sections which are being discarded.

Sun Mar 31 00:30:47 1996  steve chamberlain  <sac@slash.cygnus.com>

	* scripttempl/{ppcpe.sc, pe.sc} (.junk): Remove and use /DISCARD/.
	* emultempl/pe.em (init): Remove special case PPC code.

Fri Mar 29 00:01:29 1996  Jeffrey A Law  (law@cygnus.com)

	* scripttempl/h8300.sc: Make vectors section 0xc4 bytes long
	so as not to overwrite the magic syscall entry at 0xc4.
	* scripttempl/h8300h.sc: Likewise.

Thu Mar 28 11:05:47 1996  Doug Evans  <dje@canuck.cygnus.com>

	* configure.tgt (sparc64-*-solaris2*): Delete.
	Stick with sparc-*-solaris2*.

Wed Mar 27 12:33:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ld.h (DISCARD_SECTION_NAME): Define to "/DISCARD/".
	* ldlang.c (init_os): Fail on an attempt to initialize any section
	named DISCARD_SECTION_NAME.
	(wild_doit): Discard input sections assigned to an output section
	named DISCARD_SECTION_NAME.
	* ld.texinfo: Document use of /DISCARD/.

	* ldlang.c: Fix some indentation and comments.

Tue Mar 26 18:14:49 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (main): Call bfd_set_error_program_name.

Thu Mar 21 13:17:34 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo: Fix a couple of indexing entries.  Mention that
	--verbose displays builtin linker scripts.

	* ldmisc.c (vfinfo): case 'I': If the file is not in an archive,
	and the local symbol name does not match the filename, print the
	filename as well.

	Patches from John Polstra <jdp@polstra.com> for FreeBSD ELF:
	* lexsup.c (parse_args): -Bshareable is a synonym for -shared.
	* emulparams/elf_i386.sh (NONPAGED_TEXT_START_ADDR): Make the same
	as TEXT_START_ADDR.

Wed Mar 20 18:18:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* ld.texinfo: Fix typos.  Use @pxref only inside parentheses.

Wed Mar 20 16:56:15 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (add_wrap): New function.
	* ldmain.h (add_wrap): Declare.
	* lexsup.c (parse_args): Call add_wrap.

Tue Mar 19 16:44:20 1996  Doug Evans  <dje@canuck.cygnus.com>

	* configure.host (sparc*-*-solaris2* host): Accept any sparc variant.

Wed Mar 13 17:47:31 1996  Jeffrey A Law  (law@cygnus.com)

	* scripttempl/h8300.sc: Change name of page zero memory
	from "null" to "vectors".  Create an output section for
	vectors.  Add comments on how to explicitly place items
	in the vector table.
	* scripttempl/h8300h.sc: Likewise.

Wed Mar 13 12:40:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/lnk960.em (machine_table): Add jx and hx.

	* genscripts.sh: Don't use ${9:-xx}, since Ultrix /bin/sh doesn't
	support it.

Tue Mar 12 12:43:59 1996  David Mosberger-Tang  <davidm@koala.azstarnet.com>

	* ld.h (ld_config_type): Add warn_multiple_gp field.
	* lexsup.c (parse_args): Handle --warn-multiple-gp.
	* ldmain.c (warning_callback): Suppress multiple gp values warning
	if --warn_multiple_gp was not used.
	* ld.texinfo, ld.1: Document --warn-multiple-gp.

Tue Mar 12 12:02:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* lexsup.c (parse_args): Handle --wrap.
	* ldmain.c (main): Initialize link_info.wrap_hash.
	* ldexp.c (fold_name): Use bfd_wrapped_link_hash_lookup in DEFINED
	and NAME cases.
	* ld.texinfo, ld.1: Document --wrap.

	* configure: Rebuild with autoconf 2.8.

	Don't do SunOS style dynamic linking for sparc-aout:
	* configure.tgt (sparc64-*-aout*): Use sparcaout, not sun4.
	(sparclite*-fujitsu-*, sparc*-*-aout): Likewise.
	(sparc*-wrs-vxworks*): Likewise.
	* emulparams/sparcaout.sh: New file.
	* Makefile.in (ALL_EMULATIONS): Add esparcaout.o.
	(esparcaout.c): New target.

Wed Mar  6 16:06:52 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* scripttempl/elfppc.sc (.sdata2, .sbss2): Implement Feb 2 change
 	in a different manner to work around differences in shell variable
 	expansion.

Wed Mar  6 18:08:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldemul.h (ldemul_unrecognized_file): Declare.
	(ldemulation_xfer_type): Add unrecognized_file field.
	* ldemul.c (ldemul_unrecognized_file): New function.
	* ldlang.c (load_symbols): If a file can not be recognized, call
	ldemul_unrecognized_file before trying it as a linker script.
	* aix.em (gld${EMULATION_NAME}_unrecognized_file): New static
	function.
	(gld${EMULATION_NAME}_read_file): Use FOPEN_RT, not "r".
	(ld_${EMULATION_NAME}_emulation): Initialize unrecognized_file.

Mon Mar  4 14:11:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (wild): Handle foo.a(.text) by mapping each included
	member of foo.a separately.  From Jouke Numan <jnuman@bazis.nl>.

Fri Mar  1 10:24:59 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment):
	Search trinary.cond rather than searching trinary.lhs twice.

Tue Feb 27 15:08:43 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Edit out shared library support.
	(@TDIRS@): Edit out, can't use genscripts.

Tue Feb 27 15:09:21 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* configure.tgt (m68k-*-linuxaout*, m68k-*-linux*): New targets.
	* emulparams/m68klinux.sh: New file.
	* emultempl/linux.em (gld${EMULATION_NAME}_before_allocation):
	Call bfd_${EMULATION_NAME}_size_dynamic_sections instead of
	bfd_linux_size_dynamic_sections.
	* Makefile.in (ALL_EMULATIONS): Add em68klinux.o.
	(em68klinux.c): New target.
	* configure.host (m68*-*-linuxaout*, m68*-*-linux*): New hosts.

Tue Feb 27 12:55:46 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (ALL_EMULATIONS): Sort into alphabetical order.
	Fill in missing entries.

	* lexsup.c (parse_args): Recognize --no-whole-archive.
	* ldlang.h (lang_input_statement_type): Add whole_archive field.
	* ldlang.c (new_afile): Set whole_archive field.
	(load_symbols): Check input file specific whole_archive field
	rather than global variable.
	* ld.texinfo, ld.1: Document --no-whole-archive.

Tue Feb 20 16:07:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt: Correct gldi960 to gld960.

Mon Feb 19 11:16:44 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (gld${EMULATION_NAME}_check_needed): Check
	the SONAME if it is available.
	(gld${EMULATION_NAME}_stat_needed): Use the SONAME, not the
	filename, when checking for conflicting library versions.  Don't
	assume that the suffix is only numbers and dots.

	* ld.texinfo: Mention that -R can be used for -rpath.

Sun Feb 18 15:05:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Check for 'do not mix' from native linker before
	trying to use -rpath.

Thu Feb 15 13:58:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Remove explicit substitution of CFLAGS; autoconf
	does it anyhow.
	* configure: Rebuild.
	* Makefile.in (LDFLAGS): Set to @LDFLAGS@.

	* configure.in: Call AC_PROG_CC before configure.host.
	* configure: Rebuild.
	* configure.host: Remove go32 host, since it should no longer be
	necessary.  Don't set CC for romp host.

	* scripttempl/elf.sc: Don't skip a page in virtual memory space if
	the text segment ends exactly on a page boundary.

	* configure.in: Substitute RPATH_ENVVAR.
	* configure: Rebuild.
	* configure.host: Set RPATH_ENVVAR.
	* Makefile.in (RPATH_ENVVAR): New variable.
	(check): Use $(RPATH_ENVVAR) rather than LD_LIBRARY_PATH.

Wed Feb 14 18:49:01 1996  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* configure.in: Redo emulation handling so that each emulation
	searches the correct tool directory, based on the target alias.
	For example, "configure --enable-targets=m68k-coff i386-linux"
	will search /usr/local/i386-linux/lib for linux and
	/usr/local/m68k-coff/lib for m68k-coff.
	* configure: Rebuild.
	* configure.tgt: Add special tdir settings for Linux.
	* Makefile.in: Add @TDIRS@.  Pass "$(tdir_EMUL)" to ${GENSCRIPTS}
	for each eEMUL.c target.
	* genscripts.sh: Accept specific alias as 9th argument, and use it
	in LIB_PATH.

Wed Feb 14 16:38:36 1996  Martin Anantharaman  <martin@mail.imech.uni-duisburg.de>

	* ldlang.c (lang_set_startof): Don't do anything for a
	relocateable link.

	* ldgram.y (mri_script_file): Call mri_draw_tree.
	* mri.c (mri_draw_tree): Make globally visible.  Don't bother to
	create memory regions.
	(mri_load): Don't call mri_draw_tree.
	* mri.h (mri_draw_tree): Declare.

	* configure.tgt (m68*-*-psos): New target.
	* emulparams/m68kpsos.sh: New file.
	* scripttempl/psos.sc: New file.
	* Makefile.in (ALL_EMULATIONS): Add em68kpsos.o.
	(em68kpsos.c): New target.

Wed Feb 14 11:09:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.tgt (*-*-ieee*): New target; use vanilla.

	* emultempl/elf32.em (gld${EMULATION_NAME}_before_parse): Strip
	`:foo' from ${ARCH}.

Tue Feb 13 15:58:58 1996  Bryan Ford  <baford@snake.cs.utah.edu>

	* scripttempl/i386msdos.sc: Don't pad the .text section.  Put
	.rodata in .data.

Tue Feb 13 14:04:19 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Set HDLFLAGS for *-*-hpux with --enable-shared.

	* emultempl/elf32.em (gld${EMULATION_NAME}_stat_needed): Warn if
	it looks like we might be linking in two different versions of the
	same shared library.  Based on a patch from H J Lu <hjl@zoom.com>.

Thu Feb  8 19:25:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_size_sections): Increment the section size when a
	padding statement is encountered.

Wed Feb  7 14:01:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Look for --enable-shared.  Change the value of
	BFDLIB when linking against a shared library on SunOS.
	* configure: Rebuild.
	* configure.host: If using a shared BFD library, try to pass a
	reasonable -rpath option when linking.
	* Makefile.in (BFDLIB): Set to @BFDLIB@.

Tue Feb  6 12:29:14 1996  Doug Evans  <dje@charmed.cygnus.com>

	* emulparams/elf64_sparc.sh (ARCH): Change to `sparc:v9'.
	* emultempl/generic.em: Strip `:foo' from ${ARCH}.

Mon Feb  5 16:25:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	Support for building bfd and opcodes as shared libraries, based on
	patches from Alan Modra <alan@spri.levels.unisa.edu.au>:
	* configure.in (HLDFLAGS): New substitution.
	* configure: Rebuild.
	* configure.host: Set HLDFLAGS on SunOS.
	* Makefile.in (HLDFLAGS): New variable.
	(BFDDEP): New variable.
	(BFDLIB): Change to -L../bfd -lbfd.
	($(LD_PROG)): Depend upon $(BFDDEP) rathern than $(BFDLIB).  Use
	$(HLDFLAGS) in link.
	(check): Set LD_LIBRARY_PATH in the environment.

Fri Feb  2 19:26:25 1996  Michael Meissner  <meissner@wogglebug.tiac.net>

	* scripttempl/elfppc.sc (.sdata2, .sbss2): Put .sdata2 and .sbss
	in the read-only section, not read/write unless we are making a
	shared library.
	(.debug*): Add dwarf debug sections.
	(.rela.{sdata*,sbss*}): Add sections.

Fri Feb  2 16:50:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Regenerate.

Thu Feb  1 10:50:46 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emulparams/elf_i386.sh (TEXT_START_ADDR): Change to 0x8048000,
	for SVR4 compatibility.

	* ldexp.c (exp_fold_tree): Correct handling of ABSOLUTE.

Wed Jan 31 17:30:19 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* configure.tgt (i[345]86-*-cygwin32, powerpcle-*-cygwin32): New.
	* emultempl/pe.em (definfo init): Make the default stack reserve
	of a PPC larger.

Wed Jan 31 14:34:23 1996  Richard Henderson  <rth@tamu.edu>

	* configure.tgt (m68*-apple-aux*): New target.
	* emulparams/m68kaux.sh: New file.
	* scripttempl/m68kaux.sc: New file.
	* Makefile.in (ALL_EMULATIONS): Add em68kaux.o.
	(em68kaux.c): New target.

Tue Jan 30 13:18:56 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Ignore
	-bnoentry, since the right thing tends to happen anyhow.

Mon Jan 29 12:29:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo, ld.1: Document -export-dynamic.

Fri Jan 26 11:11:55 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* emultempl/sunos.em: Check for native compile by comparing
	${target} and ${host}.

Thu Jan 25 16:46:58 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* emulparams/{elf32b4300.sh, elf32l4300.sh}: Changed
 	TEXT_START_ADDR to allow use on IDT and PMON systems.

Wed Jan 24 20:59:40 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_parse_args):
	correct spelling.

Wed Jan 24 16:59:19 1996  Doug Evans  <dje@charmed.cygnus.com>

	* configure.tgt (sparc64-*-solaris2*): New configuration.
	(sparc64-*-aout*): Renamed from sparc64*.

Mon Jan 22 13:01:35 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makefile.in (GENSCRIPTS): Pass @host@ @target@ @target_alias@.
	* genscripts.sh: Set host, target and target_alias variables.
	Check for native compile by comparing ${target} and ${host}.
	* emultempl/elf32.em: Likewise.
	* scripttempl/elfmips.sc: Test ${target}, not ${target_alias}.

Mon Jan 22 11:03:23 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/elfppc.sc: Refine eabi support to better support
	.sdata, .sdata2, .sbss, etc. sections.

Tue Jan 16 15:16:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ldgram.y (%union): Add phdr field.
	(phdr): Use phdr_qualifiers rather than opt_hdrs and opt_at.
	(phdr_qualifiers): New nonterminal.  Add support for FLAGS.
	(opt_hdrs, hdr): Remove.
	(phdr_val): New nonterminal.
	* ldlang.c (lang_new_phdr): Replace hdrs parameter with filehdr
	and phdrs parameters.  Add flags parameter.
	(lang_record_phdrs): Update for changes to lang_phdr.  Pass flags
	to bfd_record_phdr.
	* ldlang.h (struct lang_phdr): Replace hdrs field with filehdr and
	phdrs fields.  Add flags field.
	(LANG_PHDR_FILEHDR, LANG_PHDR_PHDRS): Remove.
	(lang_new_phdr): Update declaration.
	* ld.texinfo: Document FLAGS.

Mon Jan 15 15:07:19 1996  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation):
	Don't make a shared library because of an undefined reference to
	__GLOBAL_OFFSET_TABLE_.

	Add some Irix 5 support, mostly from Kazumoto Kojima
        <kkojima@info.kanagawa-u.ac.jp>:
	* emulparams/elf32bmip.sh (SCRIPT_NAME): Change to elfmips.
	(SHLIB_TEXT_START_ADDR): Define.
	(OTHER_GOT_SYMBOLS): Define.
	(OTHER_READWRITE_SECTIONS): Remove initialization of _gp.
	(EXECUTABLE_SYMBOLS): Don't define.
	(DYNAMIC_LINK): Don't define.
	* emulparams/elf32lmip.sh: Same changes as elf32bmip.sh.
	* scripttempl/elfmips.sc: New file.
	* configure.host (mips*-dec-bsd*): Change mips to mips*.
	(mips*-sgi-irix4*): Likewise.
	(mips*-sgi-irix5*): New entry.
	* Makefile.in (eelf32bmip.c): Depend upon elfmips.sc rather than
	elf.sc.
	(eelf32lmip.c): Likewise.

Sat Jan 13 09:41:43 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/elfppc.sc: Remove support for .rel.* sections.  Add
	.rela.got.neg section.

Fri Jan 12 14:56:19 1996  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/sh.sc: Only build constructors when CONSTRUCTING.

	* ldmisc.c: Include <stdarg.h> rather than <varargs.h> if
	ANSI_PROTOTYPES is defined.  Remove special handling of
	WINDOWS_NT.  Various indendation fixes.
	(vfinfo): Change fmt parameter to const char *.
	(info_msg): Write <stdarg.h> version.
	(einfo, minfo, finfo): Likewise.
	(info_assert): Change file parameter to const char *.
	* ldmisc.h (einfo, minfo, info_msg): If ANSI_PROTOTYPES is
	defined, use a real prototype.
	(info_assert): Change first parameter to be const char *.

Fri Jan 12 13:29:55 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/elfppc.sc: Add support for .sdata2/.sbss2, etc.  Add
	in old support that 2.7.2 needs, but the current compiler does
	not.

	* Makefile.in (eelf32{,l}ppc.c): Fix up dependencies to use the
	correct Linker script template.

	* emulparams/elf32{,l}ppc.sh (TEXT_START_ADDR): Set to 0x40000,
	not 0x400000.
	(DATA_ADDR,NONPAGED_TEXT_START_ADDR): Delete.

Tue Jan  9 15:53:02 1996  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/alpha.sc: Put .rconst right after .rdata.

Fri Jan  5 14:07:45 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation):
	sort using right pointer.

Fri Jan  5 12:25:47 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/elfppc.sc: Remove support for creating special
	labels for eabi section begin/end here.  The compiler now uses
	crt{i,n}.o to create these symbols.

Thu Jan  4 17:08:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Change existing Linux HOSTING_CRT0 to be used
	for a.out only, and put in appropriate HOSTING_CRT0 and
	HOSTING_LIBS values for Linux ELF.

Thu Jan  4 12:02:05 1996  Doug Evans  <dje@canuck.cygnus.com>

	* scripttempl/h8300.sc: Use all 64K for ram.
	* scripttempl/h8300h.sc: Define 256K ram size.

Thu Dec 21 15:57:18 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (gld${EMULATION_NAME}_before_allocation): Pass
	export_defines as true to bfd_xcoff_size_dynamic_sections if -unix
	was used, regardless of whether -bE was used.

Tue Dec 19 17:35:38 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (gld${EMULATION_NAME}_after_open): Only set
	relocateable before calling ldctor_build_sets if the output file
	is in an XCOFF format.

Fri Dec 15 16:34:36 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldwrite.c (build_link_order): When handling a data statement, if
	the endianness of the output file is unknown, use the endianness
	of the input file.

Tue Dec 12 13:55:41 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: Recognize mips-*-* as equivalent to
	mips-idt-ecoff.
	* mpw-eppcmacos.c: Rename to shorter mpw-eppcmac.c.
	* mpw-ld.r: Add version resources.
	(cfrg): Use symbolic instead of literal name for executable.

Mon Dec 11 15:13:41 1995  Kim Knuttila  <krk@cygnus.com>

	* scripttempl/ppcpe.sc (FINI): Moved the .reloc section.

Wed Dec  6 14:33:50 1995  Doug Evans  <dje@canuck.cygnus.com>

	* ldlang.c (print_statement{,s}): Delete duplicate prototype.
	(print_statement_list): Renamed from print_statement.  All callers
	updated.
	(print_statement): New function to print just one statement.
	(print_{data,reloc,padding}_statement): Don't crash if
	output_section == NULL.
	(dprint_statement): New function.

	* emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation): Fix
	call to sort_sections.

Wed Dec  6 14:59:06 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (unix_ld): New static variable.
	(gld${EMULATION_NAME}_parse_args): Handle -unix.
	(gld${EMULATION_NAME}_before_allocation): If unix_ld, pass
	gc as false and export_defineds as true to size_dynamic_sections.

	* ldexp.c (exp_fold_tree): Permit assignments to dot in the final
	phase if the current section is abs_output_section.


Tue Dec  5 09:49:39 1995  Doug Evans  <dje@canuck.cygnus.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_before_allocation): Fix call
	to sort_sections.

Fri Dec  1 16:48:36 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldgram.y (PHDRS): New token.
	(ifile_p1): Accept phdrs.
	(section): Accept phdr_opt at the end of the section definition.
	(phdr_op): New nonterminal.
	(phdrs, phdr_list, phdr, phdr_type, opt_hdrs, hdr): Likewise.
	* ldlex.l: Accept PHDRS.
	* ldlang.h (struct lang_output_section_phdr_list): Define.
	(lang_output_section_statement_type): Add phdrs field.
	(struct lang_phdr): Define.
	(LANG_PHDR_FILEHDR, LANG_PHDR_PHDRS): Define.
	(lang_new_phdr): Declare.
	* ldlang.c (lang_phdr_list): New static variable.
	(lang_output_section_statement_lookup): Initialize phdrs field.
	(lang_process): Call lang_record_phdrs.
	(lang_new_phdr): New function.
	(lang_section_in_phdr): New function.
	(lang_record_phdrs): New static function.
	* ld.texinfo: Document PHDRS.

Thu Nov 30 13:14:30 1995  Kim Knuttila  <krk@cygnus.com>

	* scripttempl/ppcpe.sc: Moved .edata into its own section to
	expose it.

Thu Nov 30 11:32:34 1995  Manfred Hollstein KS/EF4A 60/1F/110 #40283  <manfred@lts.sel.alcatel.de>

	* configure.host (m68*-motorola-sysv): Define HOSTING_CRT0 and
	HOSTING_LIBS for testing.
	(m88*-motorola-sysv3): Define HOSTING_CRT0 and HOSTING_LIBS for
	testing.

Tue Nov 28 12:14:53 1995  Ian Lance Taylor  <ian@cygnus.com>

	* lexsup.c (parse_args): Set config.dynamic_link to false for -N
	and -n.

Mon Nov 27 13:12:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Rebuild with autoconf 2.7.

Fri Nov 24 18:35:35 1995  Doug Evans  <dje@canuck.cygnus.com>

	* scripttempl/pe.sc: Two .junk's is too much junk.

Tue Nov 21 16:14:32 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Use BFD_NEED_DECLARATION.
	* acconfig.h: Put NEED_DECLARATION_FREE in @TOP@ section.
	* configure, config.in: Rebuild with autoconf 2.6.

	* ldmain.c (constructor_callback): Don't warn about BFD_RELOC_CTOR
	being unsupported if this is not a relocateable link and the input
	BFD supports it, since ldctor_build_sets can cope with that case.

Fri Nov 17 16:23:15 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.tgt (powerpc-*-macos*): New target.
	* emulparams/ppcmacos.sh: New file, PowerMac emulation.
	* Makefile.in (ALL_EMULATIONS): Add eppcmacos.o.
	(eppcmacos.c): New target.
	* mpw-eppcmacos.c: Update.
	* mpw-make.sed: Edit out attempts to use {GENSCRIPTS}.

Fri Nov 17 10:37:27 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (CC_FOR_TARGET): Use @host@ and @target@, not
	$(host_canonical) and $(target_canonical).
	(CXX_FOR_TARGET): Likewise.

Thu Nov 16 11:23:42 1995  Doug Evans  <dje@canuck.cygnus.com>

	* scripttempl/pe.sc (.endjunk): Move definition of `end' to here
	so the malloc heap begins at a sane place.

Thu Nov 16 03:09:32 1995  Ken Raeburn  <raeburn@cygnus.com>

	Version 2.6 released.
	* ldver.c (ldversion): Update to 2.6.

	* Makefile.in (mostlyclean): Delete ldemul-list.h here, but not
	$(GENERATED_*FILES), since they need to be retained by distclean.
	(maintainer-clean, realclean): Delete them here.

Tue Nov 14 17:08:06 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_parse_args): Open the
	base file with FOPEN_WB, not "w".

	* emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Use the
	environment variable LD_RUN_PATH if neither -rpath nor -rpath-link
	were used.
	(gld${EMULATION_NAME}_before_allocation): Use the environment
	variable LD_RUN_PATH if -rpath was not used.
	* ld.texinfo, ld.1: Document LD_RUN_PATH.

Thu Nov  9 13:09:29 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Recognize
	-bl and -bloadmap options.

	* ldfile.c (ldfile_try_open_bfd): If bfd_error_invalid_target,
	report a better error.

	* emultempl/aix.em (gld${EMULATION_NAME}_before_allocation): Add
	new local variable special_sections, and pass it to
	size_dynamic_sections.  Look through the results, and move the
	sections around in the mapping so that they are defined correctly.

Wed Nov  8 11:40:59 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldemul.c (ldemul_default_target): Cast getenv return value.

Tue Nov  7 11:15:36 1995  Kim Knuttila  <krk@cygnus.com>

	* emulparams/ppcpe.sh (ARCH): New file for PowerPC Portable
	Executable support.
	* scripttempl/ppcpe.sc: New file for PowerPC Portable Executable
	support.

	* configure.tgt (targ_extra_emuls): Added powerpcle-pe target.
	* Makefile.in (ALL_EMULATIONS): Added eppcpe.o target.

	* emultempl/pe.em (TARGET_IS_ppcpe): file tailoring macro
	(gld_$_before_allocation): added hooks for toc construction based
	on the above macro.

Tue Nov  7 11:47:23 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ld.texinfo: The linker does not use _main as an entry point.

Tue Nov  7 11:46:11 1995  Manfred Hollstein KS/EF4A 60/1F/110 #40283  <manfred@lts.sel.alcatel.de>

	* scripttempl/m88kbcs.sc (.data): Calculate next boundary modulo
	0x2000 not 0x200.

Mon Nov  6 10:59:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add test for whether free must be declared.
	* sysdep.h: Declare free if necessary.  Include "ansidecl.h".
	* acconfig.h: Explain NEED_DECLARATION_FREE.
	* configure, config.in: Rebuild.

	* lexsup.c (parse_args): Take B:: out of shortopts.

Sun Nov  5 03:08:28 1995  Ken Raeburn  <raeburn@cygnus.com>

	* emulparams/i386nbsd.sh (EXECUTABLE_SYMBOLS): Set __DYNAMIC to 0
	for now, as with m68k4kbsd, until shared library support gets
	done.

	* configure.host: For i386 BSD variants, crt0.o lives in
	/usr/lib.  (True for NetBSD at least, unconfirmed for others.)

Wed Nov  1 15:42:45 1995  Manfred Hollstein KS/EF4A 60/1F/110 #40283  <manfred@lts.sel.alcatel.de>

	* Makefile.in (ALL_EMULATIONS): Add edelta68.o.
	(edelta68.c): New target.
	* configure.tgt (m68*-motorola-sysv*): New target.
	* emulparams/delta68.sh: New file.
	* scripttempl/delta68.sc: New file.

	* scripttempl/m88kbcs.sc: Handle .init and .fini.  Change section
	addresses.

Wed Nov  1 11:41:56 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldgram.y (mri_script_command): Accept ',' as well as '=' in
	ALIGN and ALIGNMOD statements.

	* emultempl/aix.em: Include ldgram.h.
	(gld${EMULATION_NAME}_parse_args): Handle -pD and -pT, as used on
	AIX 4.1.
	* Makefile.in ($(EMULATION_OFILES)): Depend upon ldgram.h.

Tue Oct 31 18:22:24 1995  David Mosberger-Tang  <davidm@azstarnet.com>

	* configure.host (alpha-*-linux*): New host.
	* configure.tgt (alpha-*-linux*): New target.

Tue Oct 31 12:36:52 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (export_files): Remove.
	(import_files): Make static.
	(struct export_symbol_list): Define.
	(export_symbols): New static variable.
	(gld${EMULATION_NAME}_parse_args): Handle an initial -b option
	correctly.  Call read_file for an export file.
	(gld${EMULATION_NAME}_before_allocation): Call
	bfd_xcoff_export_symbol for each export symbol, rather than
	calling read_file for each export file.
	(gld${EMULATION_NAME}_read_file): For an export file, make the
	exported symbols undefined, and store them on the export_symbols
	list.

Sat Oct 28 00:10:03 1995  steve chamberlain  <sac@slash.cygnus.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_parse_args):
	Don't hang if last option is unrecognised.
	(gld_${EMULATION_NAME}_set_symbols): Insert created
	symbols into ABS output section.

Fri Oct 27 18:03:17 1995  Niklas Hallqvist  <niklas@appli.se>

	*  Makefile.in (ALL_EMULATIONS): Added support for the NetBSD
	m68k4k arch.
	(em68k4knbsd.c): New rule.

	* configure.tgt: Added support for the NetBSD m68k4k arch.

	* genscripts.sh, ldint.texinfo,
	emulparams/{a29k,armaoutb,armaoutl,coff_sparc,ebmon29k,gld960,
	gld960coff,go32,h8300,h8300h,h8500,h8500b,h8500c,h8500m,h8500s,
	hp300bsd,hp3hpux,hppaelf.sh,i386aout,i386bsd,i386coff,i386go32,
	i386linux,i386lynx,i386nbsd,lnk960,m68kaout,m68kcoff,m68klynx,
	m88kbcs,mipsbig,mipsbsd,mipsidt,mipsidtl,mipslit,news,ns32knbsd,
	pc532machaout,riscix,sa29200,sh,shl,sparclynx,sparcnbsd,
	st2000,sun3,sun4,vanilla,vax,vsta,w65,z8001,z8002}.sh: Changed
	PAGE_SIZE to TARGET_PAGE_SIZE.

	* emulparams/m68knbsd.h: Ditto.
	(TEXT_START_ADDR, NONPAGED_TEXT_START_ADDR): We have 8K pagesize.
	(EXECUTABLE_SYMBOLS): Hardcode __DYNAMIC to zero for the time
	being.

	* emulparams/m68k4knbsd.sh: New file.

	* scripttempl/aout.sc: Expand EXECUTABLE_SYMBOLS if relocating.

Fri Oct 27 17:59:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em: Include ldctor.h.
	(gld${EMULATION_NAME}_after_open): New static function.
	(gld${EMULATION_NAME}_before_allocation): Call find_relocs.
	(gld${EMULATION_NAME}_find_relocs): New static function.
	(gld${EMULATION_NAME}_find_exp_assignment): New static function.
	(ld_${EMULATION_NAME}_emulation): Use new after_open function.
	* scripttempl/aix.sc: Use CONSTRUCTORS in .data.
	* ldctor.c (struct set_info): Move definition into ldctor.h.
	(struct set_element): Likewise.
	(sets): Make non-static.
	(ldctor_add_set_entry): Add name parameter.  Save it in the new
	set element.
	(ldctor_build_sets): Avoid being called twice.  Pass set element
	name to lang_add_reloc.
	* ldctor.h (struct set_info): Move definition here from ldctor.c.
	(struct set_element): Likewise.  Add new field name.
	(sets): Declare.
	(ldctor_add_set_entry): Declare new name parameter.
	* ldwrite.c (build_link_order): Don't insist that either name or
	section be NULL in a lang_reloc_statement.
	* ldmain.c (add_to_set): Pass NULL to ldctor_add_new_set_entry for
	new name parameter.
	(constructor_callback): Pass name to ldctor_add_new_set_entry for
	new name parameter.

	* ldmisc.c (demangle): Fix indentation.  Remove a leading period.

Thu Oct 26 22:22:49 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: Add PowerMac target support, generate config.h.
	* mac-ld.r: New file, Mac resources.
	* mpw-make.sed: New file, edits Makefile.in into MPW syntax.
	* mpw-make.in: Remove.
	* mpw-eppcmacos.c: Prebuilt version of PowerMac linking script.

Thu Oct 26 14:11:26 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em (gld${EMULATION_NAME}_parse_args): Treat
	-static as a synonym for -bnso.

	* scripttempl/aix.sc: Move special symbols inside sections.
	Always start .data at 0.

Wed Oct 25 11:52:12 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* Makefile.in (diststuff):  Also make info.
	(maintainer-clean realclean):  Also delete *.info*.

Wed Oct 25 11:27:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/aix.em: Add support for various AIX linker options,
	for AIX import and export files, and for AIX shared objects.
	* scripttempl/aix.sc: Add .pad.  Put .ds just before the TOC.

	* ldmain.c (main): Initialize new field link_info.static_link.

	* ldmain.c (add_keepsyms_file): Add \n at end of einfo calls.
	(constructor_callback): Likewise.
	* ldmisc.c (vfinfo): Likewise.
	* ldwrite.c (build_link_order): Likewise.

	* ld.texinfo: The MRI ALIGN directive is supported.

Mon Oct 23 11:46:43 1995  James G. Smith  <jsmith@pasanda.cygnus.co.uk>

	* emulparams/elf32vr4300.sh: Deleted.
	* emulparams/elf32vr4300el.sh: Deleted.
	* emulparams/elf32b4300.sh: Added.
	* emulparams/elf32l4300.sh: Added.
	* configure.tgt, Makefile.in: Updated the build to use the
 	new 8.3 unique names.

Thu Oct 19 17:41:46 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (entry_symbol): Make non-static.
	* ldlang.h (entry_symbol): Declare.

	* ldlex.l: Treat PROVIDE as a keyword in expression state.

Wed Oct 18 17:34:06 1995  steve chamberlain  <sac@slash.cygnus.com>

	* scripttempl/pe.sc (.bss): Move to be after .text

Tue Oct 17 12:22:05 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/sunos.em (gld${EMULATION_NAME}_find_exp_assignment):
	Search trinary.cond rather than searching trinary.lhs twice.  From
	linli@ihp.PHys.ethz.CH.

	* emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Move
	directory searching code into gld${EMULATION_NAME}_search_dir.
	(gld${EMULATION_NAME}_search_dir): New static function, extracted
	from gld${EMULATION_NAME}_find_so.
	(global_needed, global_found): New static variables.
	(gld${EMULATION_NAME}_after_open): New static function.
	(gld${EMULATION_NAME}_search_needed): New static function.
	(gld${EMULATION_NAME}_try_needed): New static function.
	(gld${EMULATION_NAME}_check_needed): New static function.
	(ld_${EMULATION_NAME}_emulation): Use new after_open function.
	* ld.texinfo, ld.1: Mention -rpath-link on SunOS.

	* Makefile.in (eelf32ppc.c): Depend upon elf32.em, not generic.em.
	(eelf32lppc.c): Likewise.
	* emulparams/elf32lppc.sh (TEMPLATE_NAME): Define as elf32.
	(GENERATE_SHLIB_SCRIPT): Define as yes.

Mon Oct 16 19:11:13 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em: Struct bfd_elf_link_needed_list is now named
	bfd_link_needed-list; make appropriate changes.

	* configure.tgt (powerpc-*-aix*): New target; use aixppc.
	(rs6000-*-aix*): New target; use aixrs6.
	* emulparams/aixppc.sh, emulparams/aixrs6.sh: New files.
	* emultempl/aix.em: New file.
	* scripttempl/aix.sc: New file.
	* Makefile.in (ALL_EMULATIONS): Add eaixppc.o and eaixrs6.o.
	(eaixppc.c, eaixrs6.c): New targets.

Fri Oct 13 14:00:37 1995  steve chamberlain  <sac@slash.cygnus.com>

	* scripttemp/pe.sc (.reloc): Move to the end.

Tue Oct 10 17:53:22 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_finish): Don't try to use an entry_symbol from a
	section which was not linked into the final output.

Tue Oct 10 10:17:22 1995  steve chamberlain  <sac@slash.cygnus.com>

	* emultempl/pe.em (gld_${EMULATION_NAME}_parse_args): Fix
	fatal typos.

Tue Oct 10 01:01:51 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ld.h (args_type): Add rpath_link field.
	* emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Search for
	required dependencies in rpath_link path.  Only search
	LD_LIBRARY_PATH when configured native.
	* lexsup.c (parse_args): Recognize -rpath-link.
	* ld.1, ld.texinfo: Document -rpath-link.

Sat Oct  7 17:07:17 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Don't
	bother searching for needed libraries unless doing a final link.

Fri Oct  6 16:26:16 1995  Ken Raeburn  <raeburn@cygnus.com>

	Mon Sep 25 22:49:32 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* ld/ld.1: Fix formatting bugs.

Wed Oct  4 17:37:46 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldexp.c (exp_get_abs_int): Return bfd_vma, not int.
	* ldexp.h (exp_get_abs_int): Update declaration.
	* ldlang.c (print_output_section_statement): Use fprintf_vma to
	print return value of exp_get_abs_int.

Mon Oct  2 13:56:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (global_stat): New file static variable.
	(gld${EMULATION_NAME}_try_needed): Call stat_needed to make sure
	that the file has not already been included under another name.
	(gld${EMULATION_NAME}_stat_needed): New static function.

Fri Sep 29 12:00:18 1995  Doug Evans  <dje@deneb.cygnus.com>

	* scripttempl/armcoff.sc: Start .text at 0x8000.
	Start .data at 0x40000.

Fri Sep 29 11:09:46 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): If
	command_line.rpath is set, use it, rather than the -L options, to
	build the rules section.
	* ld.texinfo: Document this use of -rpath.

	* lexsup.c (parse_args): Don't set link_info.shared for -assert
	pure-text.  Pass true, not 1, to lang_add_entry.
	* emultempl/sunos.em (find_assign): New static variable.
	(found_assign): New static variable.
	(gld${EMULATION_NAME}_before_allocation): Rename local h to hdyn.
	If not a relocateable link, and no start symbol was specified on
	the command line, and there are any undefined symbols, set
	link_info.shared.  If link_info.shared is set, set the address of
	the .text section to 0x20.
	(gld${EMULATION_NAME}_find_assignment): Rename from
	gld${EMULATION_NAME}_find_statement_assignment.  If find_assign is
	set, then just set found_assign based on whether an assignment is
	found to find_assign.
	(gld${EMULATION_NAME}_get_script): Don't use a special script when
	producing a shared library.
	* emulparams/sun4.sh (GENERATE_SHLIB_SCRIPT): Remove.
	* scripttempl/aout.sc: Remove CREATE_SHLIB tests.
	* ldlang.c (entry_from_cmdline): New global variable.
	(lang_add_entry): Change cmdline parameter from int to boolean.
	Use global entry_from_cmdline rather than function static
	from_cmdline.
	* ldlang.h (entry_from_cmdline): Declare.
	(lang_add_entry): Change declaration of second parameter from int
	to boolean.
	* ldgram.y: Pass false, not 0, to lang_add_entry.

Thu Sep 28 12:34:13 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ld.h (parsing_defsym): Declare.
	* ldlex.h (lex_string): Declare.
	* ldlex.l (lex_string): Define.
	* lexsup.c (parsing_defsym): Define.
	(parse_args): In OPTION_DEFSYM case, set lex_string before calling
	lex_redirect, and clear it after calling yyparse.  Set
	parsing_defsym around call to yyparse.
	* ldmain.c (main): Set lex_string before calling lex_redirect, and
	clear it after calling yyparse.
	* ldmisc.c (vfinfo): For %S, handle --defsym arguments and built
	in linker scripts correctly.

	* scripttempl/sparccoff.sc: Add .ctors/.dtors handling like other
	COFF targets, allowing for the leading underscore used on SPARC
	COFF.

	* lexsup.c (parse_args): Handle -assert.
	* emulparams/sun4.sh (GENERATE_SHLIB_SCRIPT): Define.
	* emultempl/sunos.em (gld${EMULATION_NAME}_get_script): Use the
	shared library script when appropriate.
	* scripttempl/aout.sc: If CREATE_SHLIB is set, start the .text
	section at SIZEOF_HEADERS.

Thu Sep 28 01:40:37 1995  Doug Evans  <dje@deneb.cygnus.com>

	* Makefile.in (earmcoff.c): Build.
	* configure.tgt (arm-*-coff): New target
	* emulparms/armcoff.sh: New file.
	* scripttempl/armcoff.sc: New file.

Tue Sep 26 10:59:32 1995  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/i386coff.sc: Remove .data2; no longer needed.

Fri Sep 22 18:09:02 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldfile.c (ldfile_set_output_arch): Make arch const.

Thu Sep 21 17:55:24 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/elfppc.sc: Correctly locate __bss_start at the
	beginning of the .bss area, not at the end of data.  Add
	__sbss_{start,end} symbols.

Wed Sep 20 12:29:36 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (CC_FOR_TARGET): Quote $(program_transform_name).
	(CXX_FOR_TARGET, install): Likewise.

Mon Sep 18 14:53:22 1995  Ian Lance Taylor  <ian@cygnus.com>

	Based on patches by Alan Modra <alan@spri.levels.unisa.edu.au>:
	* Makefile.in (CC_FOR_TARGET): Remove brokensed stuff.
	(CXX_FOR_TARGET): Likewise.
	(install): Likewise.
	(GENERATED_HFILES): Remove config.h.
	(.dep): Depend upon config.h.

Mon Sep 18 14:39:38 1995  Arne H. Juul  <arnej@pvv.unit.no>

	* configure.tgt (mips*-dec-netbsd*): New target.

Fri Sep 15 20:01:52 1995  Ken Raeburn  <raeburn@cygnus.com>

	* configure.host (m88*-*-dgux*): Fix another shell syntax error.

Fri Sep 15 23:28:05 1995  Andrew Cagney  <cagney@highland.com.au>

	* configure.host (i[345]86-*-bsd*): Fix shell syntax error.

Thu Sep 12 12:50:49 1995  steve chamberlain  <sac@slash.cygnus.com>

	* scripttemp/pe.sc:  Allow both spellings of .ctors/.dtors.
	Start .text section on the right boundary. Always align
	stabs.

Tue Sep 12 12:24:17 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (maintainer-clean): New target.

	* ldmain.c (struct warning_callback_info): Define.
	(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.

	* ld.texinfo: Clarify -L option.

	* ldlang.c (lang_one_common): Add cast to avoid warning.
	(topower): Likewise.  Also, reindent.
	* ldwrite.c (clone_section): Change i to unsigned int.
	* emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): Add
	cast to avoid warning.

Fri Sep  8 16:32:43 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (config.status): Depend upon configure.tgt.

	* ldemul.h (ldemul_set_symbols): Declare.
	(ldemul_parse_args): Declare.
	* ldemul.c (ldemul_parse_args): Fix indentation.

	* configure.in: Call AC_HEADER_DIRENT.
	* configure, config.in: Rebuild.
	* emultempl/sunos.em: Use autoconf recommend mechanism to define
	DIR and struct dirent.

	* configure.tgt (mips*-*-bsd*): New case.

	* configure.host (i[345]86-sequent-ptx* | i[345]86-sequent-sysv*)
	New case.
	* configure.tgt (i[345]86-*-ptx*): New case.

Thu Sep  7 10:48:26 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config.in: Rename from config.h.in.
	* 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.

	* Makefile.in (distclean): Remove config.h and stamp-h.

	* configure.host (sparc-*-sunos64*): Remove.
	* ldlang.c (lang_map): Check BFD64, not HOST_64_BIT.

	* ldexp.c (exp_fold_tree): Don't warn about moving the location
	counter backward in the absolute section.

Wed Sep  6 14:42:11 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Rewrite to use autoconf.
	* configure.host: New file.
	* configure.tgt: New file.
	* aclocal.m4: New file.
	* configure: New file, built by autoconf.
	* acconfig.h: New file.
	* config.h.in: New file, built by autoheader.
	* sysdep.h: New file.
	* ld.h: Incorporate old contents of config.h.
	* config.h: Remove.
	* Makefile.in: Various changes for new configure script.  Also:
	(CC_FOR_BUILD): Remove.
	(ldmain.o): Don't bother to ensure that EMUL is non-empty.
	(dep.sed): Use @SRCDIR@, not @srcdir@.
	* dep-in.sed: Use @SRCDIR@, not @srcdir@.
	* genscripts.sh: Create ldscripts if it does not exist.
	* ldemul.c, lexsup.c, mpw-emipsidt.c: Don't include "config.h".
	* mpw-esh.c, emultemp/*.em: Likewise.
	* ldmain.c: Likewise.  Include <ctype.h>.  Don't try to set
	HAVE_SBRK here.
	* config/*.mt, config/*.mh: Remove.

Tue Sep  5 14:55:24 1995  Ken Raeburn  <raeburn@cygnus.com>

	* configure.in: Treat ns32k-pc532-ux* like ns32k-pc532-mach*, and
	ns32k-pc532-lites* like ns32k-pc532-netbsd*.  From Ian Dall.

Fri Sep  1 22:29:52 1995  Doug Evans  <dje@canuck.cygnus.com>

	* scripttempl/pe.sc: Fix typo in spelling of .ctors/.dtors.

Fri Sep  1 13:13:29 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (warning_callback): Add abfd, section, and address
	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.

Fri Sep  1 08:35:16 1995  James G. Smith  <jsmith@beauty.cygnus.com>

	* configure.in: Added mips*vr4300-idt-elf* and
        mips*vr4300el-idt-elf* targets.
	* Makefile.in: Added eelf32vr4300* targets.
	* emulparams/{elf32vr4300.sh, elf32vr4300el.sh}: Added.
	* config/{mips-vr4300.mt, mips-vr4300el.mt}: Added.

Fri Sep  1 10:51:45 1995  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/a29k.sc: Fix to be reasonable.  From Brendan Kehoe
	<brendan@cygnus.com>.

Thu Aug 31 16:37:07 1995  steve chamberlain  <sac@slash.cygnus.com>

	* ldemul.c (ldemul_parse_args): New.
	* ldemul.h (ld_emulation_xfer_struct): Add parse_args.
	* lexsup.c (all pe stuff): Moved into pe.em
	(parse_args): Call emulation arg parser.
	* emultempl/pe.em (parse_args): handle PE specfic args.

Thu Aug 31 17:01:37 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_memory_region_lookup): Don't use the first region
	as the default region.  Create a new region instead.

Tue Aug 29 14:21:41 1995  steve chamberlain  <sac@slash.cygnus.com>

	* ldemul.c (ldemul_set_symbols): New function.
	* ldemul.h (ld_emulation_xfer_struct): Add set_symbols.
	* ldmain.c (main): Add call to ldemul_set_symbols.
	* lexsup.c (set_pe_value): New args.
	(set_pe_name): New.
	(parse_args): Cope with new set_pe_value args.
	* emultempl/pe.em (set_symbols): New function.
	(ld_emulation_xfer_struct): Add set_symbols.
	* scripttempl/pe.sc: Use new symbols.

Thu Aug 24 18:12:18 1995  Ian Lance Taylor  (ian@cygnus.com)

	* lexsup.c (parse_args): Don't call set_default_dirlist for -O.
	For -Y, ignore a leading `P,', and only call set_default_dirlist
	after processing all the other arguments.

Tue Aug 22 07:36:58 1995  steve chamberlain  <sac@slash.cygnus.com>

	* scripttempl/pe.sc: Keep .edata, don't base stabs at 0.
	* emulparams/armpe.sh: Run PE script.

Mon Aug 21 18:30:42 1995  steve chamberlain  <sac@slash.cygnus.com>

	* ldmain.c (main): Remove PE stuff.
	* lexsup.c (options): Load more PE options.
	(set_pe_value): New function.

Thu Aug 17 13:35:49 1995  steve chamberlain  <sac@slash.cygnus.com>


	* 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.

Thu Aug 17 14:46:34 1995  Doug Evans  <dje@canuck.cygnus.com>

	* scripttempl/h8500s.sc (.rdata): All data must go in data segment.
	(.strings,.ctors,.dtors): Likewise.

Wed Aug 16 11:38:59 1995  steve chamberlain  <sac@slash.cygnus.com>

	* 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.

Wed Aug 16 11:45:11 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_set_startof): New static function.
	(lang_process): Call it.

	* ldgram.y: Tweak casesymlist to avoid bison errors.

	* lexsup.c (parse_args): Accept -h as a synonym for --soname, for
	Solaris compatibility.

Tue Aug 15 17:31:16 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldgram.y (YYDEBUG): If not defined, define as 1.
	(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.

Tue Aug  8 19:14:58 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	* emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Use xmalloc
	instead of alloca.

Tue Aug  8 15:24:05 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* Makefile.in (CC_FOR_TARGET, CXX_FOR_TARGET): Don't use
	$r/../gcc/xgcc unless it is present.

Thu Aug  3 11:56:22 1995  Ian Lance Taylor  <ian@cygnus.com>

	* scripttempl/m68kcoff.sc: Only put .ctors and .dtors in .text
	when CONSTRUCTING.
	* scripttempl/m68klynx.sc: Likewise.
	* scripttempl/nw.sc: Likewise.
	* scripttempl/sa29200.sc: Likewise.
	* scripttempl/sparclynx.sc: Likewise.

Fri Jul 28 12:02:23 1995  steve chamberlain  <sac@slash.cygnus.com>

	* emulparams/{z8001.sh, z8002.sh}: Fix typo.

Thu Jul 27 21:06:21 1995  Ken Raeburn  <raeburn@cygnus.com>

	* configure.in (i[345]86-*-linuxoldld): Treat like linuxaout*.

Thu Jul 27 15:26:28 1995  steve chamberlain  <sac@slash.cygnus.com>

	* scripttempl/i386pe.sc: Cope with constructors.
	* scripttempl/z8ksim.sc: Deleted.
	* scripttempl/z8000.sc: Resurrected as this, but
	can handle z8001 and z8002 formats.
	* emulparams/z8ksim.sh: Deleted.
	* emulparams/{z8001.sh, z8002.sh}: New files.
	* config/z8ksim.mt: Deleted
	* config/z8k-coff.mt: New, generates both emulations.

Tue Jul 25 14:53:02 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldmisc.c (vfinfo): In %C and %D case, always print the BFD using
	%B, in case it is in an archive.

Mon Jul 24 15:23:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_process): Call reset_memory_regions for each
	relaxation pass.

Fri Jul 21 22:49:44 1995  Michael Meissner  <meissner@cygnus.com>

	* scripttempl/elfppc.sc: Add support for .sdata, .sbss, and
	_SDA_BASE.

Thu Jul 20 16:26:55 1995  Ken Raeburn  <raeburn@cygnus.com>

	* ldmain.c (constructor_callback): Allocate set_name in stack
	frame, rather than always calling alloca with a fixed size.

Wed Jul 19 16:21:43 1995  Doug Evans  <dje@canuck.cygnus.com>

	* emulparams/armpe.sh (OUTPUT_FORMAT): Change to pei-arm-little.
	(LITTLE_OUTPUT_FORMAT, BIG_OUTPUT_FORMAT): Define.

Mon Jul 17 13:57:00 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldwrite.c (clone_section): Set the alignment of the clone
	section to that of the section being cloned.

	* ldwrite.c (split_sections): Don't split the first input section
	into a new output section.

Sat Jul 15 00:26:35 1995  Michael Meissner  <meissner@cygnus.com>

	* emulparams/elf32ppc.sh (TEMPLATE_NAME): Define as elf32.
	(GENERATE_SHLIB_SCRIPT): Define as yes.

Fri Jul 14 12:11:46 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/mipsecoff.em (check_sections): Use %P, not %F.

	* ldver.c (help): Update list of options to match currently
	supported list.

Thu Jul 13 13:52:10 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/lnk960.em (ld_lnk960_emulation): Initialize
	after_open field.

	* ldexp.c (exp_intop): Don't cast stat_alloc arg to bfd_size_type;
	it takes a size_t anyhow.
	(exp_binop): Likewise.
	(exp_trinop): Likewise.
	(exp_unop): Likewise.
	(exp_nameop): Likewise.
	(exp_assop): Likewise.
	* ldlang.c (lang_memory_region_lookup): Likewise.
	(init_os): Likewise.
	(ldlang_add_undef): Likewise.
	(insert_pad): Likewise.
	* ldfile.c (ldfile_add_arch): Don't cast xmalloc arg to
	bfd_size_type.

	* Makefile.in (ALL_EMULATIONS): It's earmaoutb.o, not earmoutb.o.

Wed Jul 12 11:32:22 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldemul.h (ldemul_open_dynamic_archive): Add search parameter to
	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.

Tue Jul 11 16:44:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (set_scripts_dir): Don't base script directory on
	current directory.

Tue Jul 11 12:29:02 1995  Rick Sladkey  <jrs@world.std.com>

	* ldmisc.c (vfinfo): Don't print the line number if it isn't
	meaningful.

Mon Jul 10 13:38:28 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ld.h (ld_config_type): Add field warn_constructors.
	* ldmain.c (add_to_set): Warn if config.warn_constructors.
	(constructor_callback): Likewise.
	* lexsup.c (parse_args): Handle -warn-constructors.
	* ld.texinfo, ld.1: Document -warn-constructors.

	* emultempl/elf32.em (gld${EMULATION_NAME}_check_needed): Don't
	get confused by directory names if we searched for the file.

	Based on patches from H.J. Lu <hjl@nynexst.com>:
	* 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.

	* ld.texinfo, ld.1: Document -Bstatic, -Bdynamic, -Bshared, and
	-shared.

Mon Jul 10 13:29:43 1995  Eric Youngdale  <eric@aib.com>

	* ldmain.c (main): Set link_info.symbolic to false.
	* lexsup.c (parse_args): Handle -Bsymbolic.

Wed Jul  5 00:12:11 1995  Fred Fish  (fnf@cygnus.com)

	* ldmain.c (HAVE_SBRK):  Define for everything except
	specific systems that are known to not support sbrk.
	(main):  Use HAVE_SBRK to decide whether or not to use sbrk.

Tue Jul  4 12:55:48 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment):
	Handle etree_provide.

	* emultempl/elf32.em (global_needed): New static variable.
	(global_found): Likewise.
	(gld${EMULATION_NAME}_after_open): New static function.
	(gld${EMULATION_NAME}_search_needed): Likewise.
	(gld${EMULATION_NAME}_try_needed): Likewise.
	(gld${EMULATION_NAME}_check_needed): Likewise.
	(ld_${EMULATION_NAME}_emulation): Replace after_open_default with
	gld${EMULATION_NAME}_after_open.

Mon Jul  3 14:26:37 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* configure.in (i386-*-win32): New target.

Mon Jul  3 14:39:22 1995  Ian Lance Taylor  <ian@cygnus.com>

	* lexsup.c (parse_args): Let -G either set the small data size or
	be equivalent to --shared, depending on the next argument.  Accept
	and ignore -z for Solaris compatibility.

Sun Jul  2 17:52:34 1995  Ian Lance Taylor  <ian@cygnus.com>

	* lexsup.c (parse_args): Cast fopen result to PTR before storing
	it in link_info.base_file.  Fix indentation.

Wed Jun 28 17:11:25 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* 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.

Thu Jun 22 19:55:41 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Sun May  7 11:53:41 MDT 1995  Bryan Ford  <baford@cs.utah.edu>

	* configure.in (i386-*-msdos*, i386-*-moss*): New targets.
	* Makefile.in (ALL_EMULATIONS): Added i386msdos.o.
	(i386msdos.o): New target.
	* config/i386-msdos.mt: Created.
	* emulparams/i386msdos.sh: Created.
	* scripttempl/i386msdos.sc: Created.

Thu Jun 22 15:06:35 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* scripttempl/elfppc.sc (.fixup): Add support for a .fixup section
	that contains pointers to be relocated.

Tue Jun 20 17:47:20 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-esh.c: New file, modified for MPW from esh.c.
	* scripttempl/sh.sc: Reformatted to simplify MPWification,
	use *() to concat stab sections instead of [].

Thu Jun 15 08:48:16 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* scripttempl/armpe.sc: Add constructor support.

Tue Jun 13 09:11:20 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* ldlang.c (lang_size_sections):  Any section with a DATA
	statement has contents.

Sun Jun 11 15:20:46 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* emulparams/m68kelf.sh (NOP): Define.
	(DYNAMIC_LINK): Don't define.
	(TEXT_START_ADDR): Set to 0x80000000; the extra 0x100 for headers
	will come from the linker script.

Thu Jun  8 14:17:33 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* emulparams/armpe.sh, scriptempl/armpe.sc: Add end and stack.

Mon Jun  5 02:16:24 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	* configure.in (i[345]86-*-gnu*): Use GNU elf config.

Thu May 25 11:49:28 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	From Andrew Cagney <cagney@highland.com.au>
	* Makefile.in: Fixup more gotchas from renaming elf32ppcle to
	elf32lppc.

Wed May 24 11:23:21 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	Add support for ARM-PE.
	* Makefile.in (ALL_EMULATIONS): Add armpe.o
	* configure.in: Recognize armpe.
	* config/arm-pe.mt: New file.
	* emulparams/armpe.sh: New file.
	* scripttempl/armpe.sc: New file.


Mon May 22 15:19:26 1995  Doug Evans  <dje@chestnut.cygnus.com>

	* configure.in (h8300h-*-hms): Deleted
	* config/cf-h8300h.mt: Deleted.

Thu May 18 04:26:10 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk)

	From David Taylor (dtaylor@armltd.co.uk)
	* Makefile.in (ALL_EMULATIONS): Add earmout[lb].o
	* configure.in: Recognize arm{,e[lb]-*-aout.
	* config/arm[lb]-aout.mt: New files.
	* emulparams/armaout[lb].sh: New files.
	* scripttempl/armaout.sc: New file.

Tue May 16 18:27:11 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/ppcle-elf32.mt (EMUL): Use elf32lppc, not elf32ppcle, to
	be unique in 8 characters for DOS.

	* emulparams/elf32lppc.sh: New file, renamed from elf32ppcle.sh.
	* emulparams/elf32ppcle.sh: Deleted.

Fri May 12 11:03:55 1995  Steve Chamberlain  <sac@slash.cygnus.com>
			  Tom Griest <griest@cs.yale.edu>

	Initial support for PE executables (eg NT, win32)

	* Makefile.in (configure.in, ei386pe): Add support.
	* ldmain.c (main): Initialize PE argument info.
	* ldwrite.c (print_file_stuff): Don't print out .drectve
	and .debug section info.
	* lexsup.c (set_subsystem, set_stack_heap, OPTION_HEAP,
	 OPTION_SUBSYSTEM, parse_argsm set_subsystem, set_stack_heap):
	 Handle new arguments.
	* config/i386-pe.mt, emultempl/i386pe.em, scripttempl/i386pe.sc:
	New files

Wed May 10 18:37:59 1995  Stu Grossman  (grossman@andros.cygnus.com)

	* scripttempl/hppaelf.sc:  Remove .PARISC.unwind section from text
	segment.  This allows ld -r to preserve unwind sections.

Tue May  9 17:19:57 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in: Add little endian PowerPC support.

	* Makefile.in (ALL_EMULATIONS): Add eelf32ppcle.o.
	(eelf32ppcle.c): Support for little endian PowerPC.

	* config/ppcle-elf32.mt: New file for little endian PowerPC.
	* emulparams/elf32ppcle.sh: Ditto.

Wed May  3 12:56:32 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* ldlang.c (print_output_section_statement): Check
	subsection_alignment, instead of checking section_alignment twice.
	Noticed by Alan Modra <alan@spri.levels.unisa.edu.au>.

Tue May  2 16:36:07 1995  Jeff Law  (law@snake.cs.utah.edu)

	* configure.in (hppa*-*-lites*): Handle like hppa*-*-*elf*.

Mon Apr 24 19:21:02 1995  Michael Meissner  <meissner@cygnus.com>

	* ldwrite.c (ldwrite): Before doing anything, reset the error
	code.  If bfd_final_link returns an error, but the error code is
	unset, don't issue an extra message.  Assume a correct error
	message was already set.

Fri Apr 14 16:31:24 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (ALL_EMULATIONS): Added em68kelf.o.
	(em68kelf.o): New target.
	* config/m68k-elf.mt, emulparams/m68kelf.sh: New files.
	* configure.in: Use them for m68*-*-elf.

Tue Apr 11 12:02:03 1995  Stan Shebs  <shebs@andros.cygnus.com>

	Merge in support for Mac MPW as a host.
	(Old change descriptions retained for informational value.)

	* mpw-config.in (i386-unknown-aout): Change to i386-unknown-go32.
	(i386-unknown-coff): Remove.
	(sh-hitachi-hms): New target.
	(emulation_ofiles): Set correctly for each target.
	(version, TDEFINES): Add to makefile fragment.
	* mpw-make.in (BISON): Use byacc instead of bison.
	(em_*.c): Replace with e*.c everywhere.
	(ldgram.h): Separate action from ldgram.c generation.
	(LD_PROG): Depend on Version.r.
	(Version.r): generate from version info.
	* mpw-emipsidt.c: New file, modified for MPW from emipsidt.c.

	* mpw-config.in (m68k-apple-macos, ppc-apple-macos,
        i386-unknown-aout, i386-unknown-coff): New targets.
	(m68k-aout, m68k-coff): Remove targets.
	(mk.tmp): Add definition of EMUL.

	* mpw-config.in (emulname): Set based on target.
	(ldemul-list.h): Construct.
	* mpw-make.in (install-only): New target.
	(install): Depend on install-only.

	* mpw-make.in (bindir): Fix pathname.
	(install): Move here from mpw-build.in.

	* mpw-config.in: New file, MPW configuration fragment.
	* mpw-make.in: New file, MPW makefile fragment.
	(This file is semi-automatically generated from Makefile.in.)
	* ldfile.c (slash): If MPW, set to `:'.
	* ldlex.l (TRUE_FALSE_ALREADY_DEFINED): If MPW, set this to
	prevent redefinition errors.

Tue Apr  4 17:55:18 1995  Steve Chamberlain  <sac@bang.hack.com>

	* ldwrite.c (clone_section): Align clone sections on even
	boundaries.

Thu Mar 30 14:32:26 1995  H.J. Lu (hjl@nynexst.com)

	* 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.

Thu Mar 30 13:09:46 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (main): If opening the map file fails, call
        bfd_set_error before calling einfo.

	* ld.texinfo, ld.1: Document the -no-keep-memory option.

Mon Mar 27 11:10:08 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (main): Revert patch of March 10, since the SVR4 linker
	does mark shared libraries as executable.

Tue Mar 21 15:15:38 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_common): Change power to int.  Pass larger values
	before smaller values.
	(lang_one_common): Treat info as int *.  Don't bother to check for
	last value, since it is now zero.

Sat Mar 18 01:49:14 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (load_symbols): An empty archive is OK.

Fri Mar 17 16:15:31 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* ldmain.c (progress.h): Include.
	(main): Call START_PROGRESS and END_PROGRESS.

Thu Mar 16 17:17:33 1995  Michael Meissner  <meissner@cygnus.com>

	* scripttempl/elfppc.sc: Move _GOT2_END_ after the .ctors and
	.dtors sections, so that these pointers get relocated also.
	Define the symbols __{C,D}TOR_{LIST,END}__ to mark the beginning
	and end of the constructors/destructors.

Thu Mar 16 13:59:14 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* ldlang.c (load_symbols): If whole_archive is true and ENTRY
	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.
	* ld.texinfo, ld.1: Document --whole-archive.

Thu Mar 16 11:38:48 1995  Ian Lance Taylor  <ian@cygnus.com>

	* genscripts.sh (EMULATION_NAME): Set LIB_PATH to empty when not
	using the default emulation.

	* config/dgux.mh (HOSTING_EMU): Use -m rather than trying to set
	LDEMULATION.
	* config/hppaelf.mh (HOSTING_EMU): Likewise.

Tue Mar 14 12:28:03 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/sunos.em (gld${EMULATION_NAME}_find_so): Set force_maj
	for -lc.N.  From H.J. Lu <hjl@nynexst.com>.

Fri Mar 10 14:43:48 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (main): Don't set EXEC_P if link_info.shared is set.

	* ldlex.l: Return -lFILENAME as the token LNAME.
	* 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.

Thu Mar  9 12:21:51 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ldlang.c (lang_check): If the architectures are compatible call
	bfd_merge_private_bfd_data to let the backend do additional
	checks.

Tue Mar  7 00:53:08 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldemul.c (ldemul_choose_mode): If emulation not recognized, list
	all supported emulations.

Mon Mar  6 14:03:50 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldemul.c (ldemul_list_emulations): New function.
	* ldemul.h (ldemul_list_emulations): Declare.
	* ldver.c (help): List supported targets and emulations.

Fri Mar  3 15:40:36 1995  Doug Evans  <dje@canuck.cygnus.com>

	* scripttempl/elf.sc (.debug): Relocate to address 0.
	(.debug_srcinfo, .debug_aranges, .debug_pubnames,
	.debug_sfnames, .line): Likewise.

Fri Mar  3 17:07:14 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (hold_rel): New static variable.
	(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".

Thu Mar  2 14:34:43 1995  Ian Lance Taylor  <ian@cygnus.com>

	Doc note from pierre@phi.la.tce.com (Pierre Willard):
	* ld.texinfo: -X and -x work even if -s or -S are not specified.
	* ld.1: Similar change.

Wed Mar  1 13:51:16 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emulparams/gld960coff.sh (COFF_CTORS): Define.
	* scripttempl/i960.sc: Use COFF_CTORS if CONSTRUCTING.

Tue Feb 28 12:42:56 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in (i[345]86-*-linuxelf*): New target.  Use i386-lelf.
	(i[345]86-*-gnuelf*): New target.  Use i386-gelf.
	* config/i386-lelf.mt: New file.
	* config/i386-gelf.mt: New file.

Tue Feb 28 10:27:54 1995  Rob Savoye  <rob@darkstar.cygnus.com>

	* configure.in: Match on mips-ecoff, and default to the IDT
	configuration.

Fri Feb 17 13:06:47 1995  Michael Meissner  <meissner@cygnus.com>

	* scripttempl/elfppc.sc: Add support for .got1 and .got2 sections.
	Offset _GLOBAL_OFFSET_TABLE_ 32768 from the start of the GOT area
	to double the size of the table.

Thu Feb  9 18:29:43 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (distclean): Do recursive deletion, since ldscripts
	is a directory.

Thu Feb  9 11:38:22 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (main): If trace_file_tries is true, and we are using
	an internal linker script, print out the script.
	* ldfile.c (try_open): Reindent function.  Make the messages about
	opening script files more informative.

	* lexsup.c (parse_args): For -V, call ldversion with 1, not 0.
	* ld.texinfo, ld.1: Update accordingly.

Wed Feb  8 17:34:45 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldlang.c (lang_one_common): Adjust references to common symbol
	information for new structure.

Mon Feb  6 12:17:24 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldmain.c (undefined_symbol): Handle section being NULL.

	* ldctor.c (ldctor_build_sets): Handle bfd_link_hash_defweak.
	* ldexp.c (fold_name): Likewise.
	* ldlang.c (print_one_symbol): Likewise.
	(lang_finish): Likewise.
	* ldmain.c (multiple_common): Likewise.
	* ldwrite.c (print_symbol): Likewise.  Also, bfd_link_hash_weak
	renamed to bfd_link_hash_undefweak.

	* scripttempl/alpha.sc: Set address of .data section correctly
	when -n or -N is used.  Patch from Chris G Demetriou
	<Chris_G_Demetriou@LAGAVULIN.PDL.CS.CMU.EDU>.
	* scripttempl/mips.sc: Similar change.

Tue Jan 31 16:20:52 1995  Doug Evans  <dje@canuck.cygnus.com>

	* ldlang.c (lang_size_sections): Clarify error message when user
	specified start addr conflicts with region.  Fix resetting of
	region pointer.

Tue Jan 31 12:37:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ldexp.c (fold_name): In case NAME, permit an absolute symbol
	in lang_allocating_phase_enum.

Mon Jan 30 11:33:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (distclean): Depend upon clean.  Don't bother to
	remove files which will be removed by clean.  From patch by
	alan@SPRI.Levels.UniSA.Edu.Au (Alan Modra).

Fri Jan 27 16:27:34 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): For
	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.

Thu Jan 26 19:53:37 1995  Ian Lance Taylor  <ian@cygnus.com>

	* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
	Remove unused variable is.

Thu Jan 26 12:33:05 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in: Add support for powerpc-*-eabi.

	* scripttempl/elfppc.sc: New file for PowerPC embedded ABI
	support.

	* emulparams/elf32ppc.sh (SCRIPT_NAME): Use elfppc.sc instead of
	elf.sc, which defines some new symbols PowerPC elf needs.

Tue Jan 24 10:32:15 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ldctor.c (ldctor_add_set_entry): Don't dump core if a
	constructor entry is in the absolute section.

Mon Jan 23 13:58:13 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* configure.in (i[345]86-*-gnu*): Set ld_target to i386-gnu.
	* config/i386-gnu.mt: New file.  Include ELF support.

Thu Jan 19 16:22:11 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): If
	there are any input sections named .gnu.warning, treat them as
	containing a warning message to be printed by the linker, and
	clobber the size so that the message is not copied into the output
	file.
	* scripttempl/elf.sc: Put .gnu.warning sections into the .text
	section.

Sun Jan 15 16:45:00 1995  Steve Chamberlain  <sac@splat>

	* configure.in (w65-*-*): New target.
	* Makefile.in: Update.
	* scripttempl/w65.sc: New.
	* config/coff-w65.mt: New.

Thu Jan 12 01:32:25 1995  Ian Lance Taylor  <ian@tweedledumb.cygnus.com>

	* ldlang.c (lang_place_orphans): Don't ignore files with
	just_syms_flag set.  Instead, put all their sections in
	bfd_abs_section_ptr, using the section VMA as the output_offset.

Wed Jan 11 22:59:09 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* ldctor.c (ldctor_build_sets): Don't use `const' with typedef
	name `reloc_howto_type', since it's now defined to be const.
	* ldlang.c (lang_add_reloc): Ditto.
	* ldlang.h (lang_reloc_statement_type, lang_add_reloc): Ditto.

Wed Jan 11 11:24:45 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ldexp.c (fold_binary): Adding or subtracting an absolute value
	to a relative value does not require forcing the relative value to
	be absolute.  Also, reindent function.

Wed Dec 28 22:05:52 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* ldwrite.c (clone_section): Create a symbol with the
	same name as the section.

Mon Dec 19 14:02:13 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* ld.h (split_by_reloc, split_by_file): New flags.
	* ldwrite.c  (clone_section, split_sections): New functions.
	* lexsup.c (parse_args): Understand new split options.

Fri Dec  9 17:22:55 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* scripttempl/elf.sc: Move .ctors and .dtors from .text segment to
	.data segment.  They must be writable when creating a shared
	library.  From H.J. Lu <hjl@nynexst.com>.

Fri Dec  2 14:09:00 1994  Ian Lance Taylor  <ian@rtl.cygnus.com>

	* emultempl/miposecoff.em: New file.
	* emulparams/mipsidt.sh (TEMPLATE_NAME): Set to mipsecoff.
	* emulparams/mipsidtl.sh (TEMPLATE_NAME): Likewise.
	* scripttempl/mips.sc: Put .rel.sdata sections in .text, and
	provide __runtime_reloc_start and __runtime_reloc_stop if they are
	used.   Align _fdata to a 16 byte boundary.
	* Makefile.in (emipsidt.c): Depend upon mipsecoff.em rather than
	generic.em.
	(emipsidtl.c): Likewise.
	(check): Pass CC_FOR_HOST and CFLAGS_FOR_HOST to runtest.

	* ld.h (args_type): Add new field embedded_relocs.
	* ldemul.h (ldemul_after_open, after_open_default): Declare.
	(ld_emulation_xfer_struct): Add new field after_open.
	* ldemul.c (ldemul_after_open): New function.
	(after_open_default): New function.
	* ldlang.c (lang_process): Call ldemul_after_open.
	* lexsup.c (parse_args): Handle --embedded-relocs.
	* emultempl/elf32.em (ld_${EMULATION_NAME}_emulation): Initialize
	new after_open field to after_open_default.
	* emultempl/generic.em, emultempl/gld960.em: Likewise.
	* emultempl/gld960c.em, emultempl/hppaelf.em: Likewise.
	* emultempl/linux.em, emultempl/m88kbcs.em: Likewise.
	* emultempl/sunos.em, emultempl/vanilla.em: Likewise.
	* ld.texinfo, ld.1: Mention -embedded-relocs.

Wed Nov 23 22:04:47 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* Makefile.in: Add eshl.o.
	* config/coff-sh.mt: Add shl emulation.

Tue Nov 22 11:55:37 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* scripttempl/elf.sc: Fill .text section with NOPS.  From Eric
	Youngdale <eric@aib.com>.

Thu Nov 17 14:39:48 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	Patches from pirker@eiunix.tuwien.ac.at (Martin Pirker).
	* 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.

Wed Nov 16 10:03:03 1994  Jeff Law  (law@snake.cs.utah.edu)

	* scripttempl/hppaelf.sc (.text): Handle a use rdefined text start
	address.
	(.data, .bss): If "-N", then place the data/bss just after the end
	of the .text section rather than at the default 0x40000000.

	* scripttempl/hppaelf.sc (.text): Place unwind descriptors in the
	text segment.

Sat Nov 12 15:55:56 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Patches from Eric Youngdale <eric@aib.com>:
	* ldlang.c (lang_finish): Don't warn if entry symbol not found
	when generating a shared library.
	* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Warn if
	attempting to place an orphaned relocation section when generating
	a dynamically linked object.

	* scripttempl/elf.sc: Add ENTRY(${ENTRY}), and default ${ENTRY} to
	_start.

Fri Nov 11 14:27:23 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ld.h (args_type): Add field export_dynamic.
	* lexsup.c (parse_args): Recognize --export-dynamic.
	* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
	Pass export_dynamic argument to bfd_elf32_size_dynamic_sections.

Wed Nov  9 12:47:11 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ldlang.c (lang_one_common): Set SEC_ALLOC in any section where
	we allocate common symbols.

Tue Nov  8 17:50:43 1994  Eric Youngdale  (eric@aib.com)

	* scripttempl/elf.sc: Add .rel.init, .rela.init, .rel.fini, and
	.rela.fini to the list of .rel* sections.

Tue Nov  8 17:47:45 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ldlang.c (load_symbols): Add new argument place.  Only accept
	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.

Mon Nov  7 15:53:02 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* ldver.c (ldversion): Bump to 2.5.3.

Fri Nov  4 15:11:26 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (e*nbsd.c): Fix typo in dependencies.

Thu Nov  3 19:35:44 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (check): Add missing "else true" clause.

	* 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.

Wed Nov  2 12:17:49 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ldctor.c (ldctor_add_set_entry): Don't permit a set to be
	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.

Tue Nov  1 10:30:19 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* Makefile.in (ALL_EMULATIONS): Added em68knbsd.o.
	  (em68knbsd.c): New target.

	* config/m68k-nbsd.mt: New file.
	* emulparams/m68knbsd.sh: New file.
	* configure.in (m68*-*-netbsd*): Use above configs.

Mon Oct 31 19:35:17 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* emultempl/sunos.em (gld${EMULATION_NAME}_find_so): If we find an
	appropriately named static library, stop the search at that
	directory.

Wed Oct 26 13:59:12 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* Makefile.in (ALL_EMULATIONS): Added ei386nbsd.o, ens32knbsd.o
	  and esparcnbsd.o; sorted entries.
          (ei386nbsd.c,ens32knbsd.c,esparcnbsd.c): New targets.

	* config/netbsd532.mt: Removed.
	* emulparams/netbsd532.sh: Removed.

	* config/{i386-nbsd.mt,ns32k-nbsd.mt,sparc-nbsd.mt}: New files.
	* emulparams/{i386nbsd.sh,ns32knbsd.sh,sparcnbsd.sh}: New files.
	* configure.in (i[345]86-*-netbsd*, ns32k-pc532-netbsd*,
	  sparc*-*-netbsd*): Use above configs.

Tue Oct 25 11:47:10 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ldmain.c (multiple_common): One of the types may now be
	bfd_link_hash_indirect.  The old BFD argument may be NULL.

Thu Oct 20 22:01:39 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in: Add * at the end of m68k-hp-hpux.

Tue Oct 18 15:58:39 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ldlex.l: Cast assignment to yy_ch_buf field to char *, not to
	YY_CHAR *.

Mon Oct 17 14:53:16 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* scripttempl/nw.sc: Gather constructors and destructors and
	  define __CTOR__LIST__ and __DTOR_LIST__ appropriately.

Fri Oct 14 14:35:38 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* Makefile.in (ALL_EMULATIONS): Add ei386nw.o and eppcnw.o.
	  (ei386nw.c, eppcnw.c): New targets.

	* config/{i386,ppc}-nw.mt, emulparams/{i386,ppc}nw.sh,
	  scripttempl/nw.sc: New files, for i386 and powerpc netware.

	* configure.in: Changed netware ld_target name to be {i386,ppc}-nw
	  instead of {i386,ppc}-elf.

 	* configure.in (sparc*-*-netware): Removed.  There is no such
	  thing anymore.

	* ldint.texinfo: Move misplaced `@end iftex'.

Fri Oct 14 12:02:18 1994  Eric Youngdale  (eric@aib.com)

	* scripttempl/elf.sc: Add .rel.ctors, .rela.ctors, .rel.dtors, and
	.rela.dtors to the list of .rel* sections.

Thu Oct 13 14:16:27 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* ldver.c (ldversion): Update to version 2.5.
	* Version 2.5 released.

	* configure.in (all_targets): Handle i386-linux*.

Thu Oct 13 11:24:33 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* scripttempl/aout.sc: Set _etext and __etext to ., not
	${DATA_ALIGNMENT}.  This is compatible with SunOS, and, with luck,
	will not break any other system.  From Eric Valette
	<ev@chorus.fr>.

Wed Oct 12 16:22:58 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* lexsup.c (parse_args): Change -V to be a synonym for -v.  Add
	--verbose to get the old -V behaviour.
	* ld.1, ld.texinfo: Document this change.

Tue Sep 27 14:56:20 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Remove
	assertion, since it could fail with a user defined linker script.

	* ldexp.c (fold_name): For DEFINED case, don't try to look up the
	name in the hash table during the first phase--the hash table does
	not even exist at that point, much less have the right value.

	* Makefile.in (CC): Define.
	(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.

Mon Sep 26 11:40:30 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* emulparams/elf32bmip.sh: Rename from elf32mipb.sh to avoid DOS
	file naming problems.
	* emulparams/elf32lmip.sh: Rename from elf32mipl.sh.
	* Makefile.in (ALL_EMULATIONS): Rename eelf32mipb.o to
	eelf32bmip.o and eelf32mipl.o to eelf32lmip.o.
	(eelf32bmip.c): Rename from eelf32mipb.c.  Use elf32bmip.sh.
	(eelf32lmip.c): Rename from eelf32mipl.c.  Use elf32lmip.sh.
	* config/mipsb-elf32.mt (EMUL): Use elf32bmip, not elf32mipb.
	* config/mipsl-elf32.mt (EMUL): Use elf32lmip, not elf32mipl.

	* genscripts.sh: Always search /usr/local/TARGET/lib.

	* scripttempl/elf.sc: If -N is set, force DATA_ADDR to be ".".

Fri Sep 23 15:05:49 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* configure.in: Handle i386-bsdi* targets like i386-bsd.

Fri Sep 23 00:06:59 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* lexsup.c (parse_args): Add support for -a for HP/UX
	compatibility.

	* lexsup.c (parse_args): -c takes an argument.

Tue Sep 20 14:35:27 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ld.h (args_type): Add new field endian.
	* 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.

	* Makefile.in (ldgram.h): Make separate target from ldgram.c,
	depending upon ldgram.c, so that a parallel make does not try to
	build both at once.

	* configure.in (mips*el-elf*): New target.
	* Makefile.in (ALL_EMULATIONS): Add eelf32mipb.o and eelf32mipl.o.
	(eelf32mipl.c): New target.

	* config/mipsl-elf32.mt: New file.
	* emulparams/elf32mipl.sh: New file.

Fri Sep 16 12:16:20 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ldmain.c (main): Rather than prohibiting ld -r -s, treat it as
	ld -r -S -x.

Thu Sep 15 13:05:44 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ldmisc.c (vfinfo): Print BFD file name as well as file name
	returned by find_nearest_line, in case the file name is something
	unhelpful such as a .h file.  Handle %u.

Wed Sep 14 12:49:12 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* ldlang.c (lang_do_assignments): Make sure output statement
	has an attached bfd_section before trying to dereference it.

Wed Sep 14 12:48:09 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ld.h (ld_config_type): Add new field warn_once.
	* ldmain.c (undefined_symbol): Handle -warn-once.
	* lexsup.c (parse_args): Recognize -warn-once.
	* ld.texinfo (Options): Document -warn-once.
	* ld.1: Likewise.

	* ldmisc.c (vfinfo): Handle %D as %C, but never print the function
	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''.

	* ldmisc.c (multiple_warn): Remove; no longer used.
	* ldmisc.h (multiple_warn): Don't declare.

Tue Sep 13 20:47:58 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* ldlang.c (print_output_section_statement): Print all lines
	to the map file.

Tue Sep 13 16:30:11 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ldlang.c (load_symbols): Check for archive before object.  Use
	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.

Mon Sep 12 17:04:27 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/m68klynx.mh: New file.

Mon Sep 12 01:50:03 1994  Jeff Law  (law@snake.cs.utah.edu)

	* emultempl/hppaelf.em: Add newlines to the error messages.

Sat Sep 10 16:05:38 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/i386lynx.mh: New file.
	* scripttempl/i386lynx.sc: Don't put .ctors and .dtors in .text
	unless CONSTRUCTING.

Thu Sep  8 13:25:24 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* emulparams/elf32mipb.sh (TEMPLATE_NAME): Define as elf32.
	(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.

Thu Sep  8 16:30:37 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

        * scripttempl/h8500b.sc: Put rdata stuff into own segment.

Thu Sep  8 13:25:24 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* emulparams/elf32ppc.sh (OTHER_READWRITE_SECTIONS): Don't define;
	.got section is now explicitly handled in elf.sc.

Wed Sep  7 13:08:34 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* scripttempl/alpha.sc: Redo script to set . outside of sections
	and not bother to explicitly specify section addresses.
	Explicitly place .sdata section.

Tue Sep  6 23:51:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* scripttempl/m68kcoff.sc: Put .bss in data segment.

	* scripttempl/h8300.sc: Change .stab and .stabstr to use a VMA of
	0, and to only be marked as NOLOAD if relocating.
	* scripttempl/h8500.sc, scripttempl/h8500b.sc: Likewise.
	* scripttempl/h8500c.sc, scripttempl/h8500m.sc: Likewise.
	* scripttempl/h8500s.sc, scripttempl/i386coff.sc: Likewise.
	* scripttempl/i386go32.sc, scripttempl/i386lynx.sc: Likewise.
	* scripttempl/m68kcoff.sc, scripttempl/m68klynx.sc: Likewise.
	* scripttempl/sh.sc, scripttempl/sparccoff.sc: Likewise.
	* scripttempl/sparclynx.sc: Likewise.

Sun Sep 04 17:58:10 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* Makefile.in, configure.in: Add support (disabled) the ARM/RISCiX.
	* config/riscix.mt, emulparams/riscix.sh, scripttempl/riscix.sc:
	New files.

Tue Aug 30 11:48:08 1994  Eric Youngdale  (ericy@cais.cais.com)

	* ld.h (args_type): Add field soname.
	* lexsup.c (parse_args): Handle -soname argument.
	* emultempl/elf32.em: In call to bfd_elf32_size_dynamic_sections,
	pass soname.
	* ld.texinfo: Document -soname.

Mon Aug 29 15:21:50 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ldlang.c (lang_check): Don't try to set the architecture if the
	input and output files are incompatible.  Just warn.

Wed Aug 24 12:52:30 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* configure.in: Change i[34]86 to i[345]86.

Sun Aug 21 16:17:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* emulparams/hp3hpux.sh: Define __DYNAMIC to be 0.

Thu Aug 18 15:37:45 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	Make the ELF linker handle orphaned sections reasonably.  Also,
	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.

Tue Aug 16 00:17:20 1994  Eric Youngdale  (ericy@cais.cais.com)

	* scripttempl/aout.sc: Add .linux-dynamic after .data.

Tue Aug 16 00:08:22 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* lexsup.c (parse_args) Treat --dll-verbose as --version, for
	Linux compatibility.  From hjl@nynexst.com (H.J. Lu).

Mon Aug 15 17:17:33 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ldexp.h (exp_get_abs_int): Declare.

Sat Aug  6 01:45:39 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* ldlang.c (lang_do_assignments):  Handle complex AT's better.
	* ldexp.c (exp_get_abs_int):  New function.

Fri Aug  5 20:55:55 1994  Jason Molenda (crash@phydeaux.cygnus.com)

	* configure.in: add i960-nindy-coff support.

Thu Aug  4 14:45:50 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ldlex.l (yy_create_string_buffer): Handle change to internal
	interface in flex 2.4.7.

Tue Aug  2 11:52:06 1994  Eric Youngdale  (ericy@cais.cais.com)

	* 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.

Mon Aug  1 15:50:44 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* scripttempl/mips.sc: Redo script to set . outside of sections
	and not bother to explicitly specify section addresses.

Tue Jul 26 11:02:35 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* scripttempl/elf.sc: Copy several more relocation sections into
	the output.  Put .got.plt sections into .got.

Fri Jul 22 12:15:36 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* scripttempl/elf.sc: Use PROVIDE to define etext, edata, and end.

	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.

	* ldlang.c (lang_common): Pass desired alignment to
        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.

	* ldlang.c (wild_section): Attach all section with the given name,
	not just the first one.  If there is no name, attach all sections
	even if the SEC_IS_COMMON flag is set.

Wed Jul 20 15:49:27 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ld.h (args_type): Add field rpath.
	* 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.

Sun Jul 10 00:33:24 1994  Ian Dall  (dall@hfrd.dsto.gov.au)

	* emulparams/pc532machaout.sh: New file. Pc532 mach script
	parameters.

	* emulparams/netbsd532.sh: New file. Netbsd 532 script parameters.

	* config/pc532mach.mt: New file. Pc532 mach target support.

	* config/pc532mach.mh: New file. Pc532 mach host support.

	* config/netbsd532.mt: New file. Netbsd 532 target support.

	* configure.in: Add ns32k-pc532-mach and ns32k-pc532-netbsd support.

	* Makefile.in: Add epcmachaout.c dependency and enetbsd532.c
	dependency.

Fri Jul  8 10:57:02 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* emultempl/sunos.em (gld${EMULATION_NAME}_before_allocation): Use
	bfd_abs_section_ptr, not &bfd_abs_section.

	* lexsup.c (parse_args): Changed "retain-symbols-file" from
	no_argument to required_argument.  From djm.

Thu Jul  7 12:29:53 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* scripttempl/elf.sc: Explicitly mention .stab and .stabstr
	sections to force a VMA of 0; needed for ELF backends which have
	not been converted to the new linker style.

Mon Jul  4 19:35:45 1994  Jeff Law  (law@snake.cs.utah.edu)

	* scripttempl/hppaelf.sc (__stack_zero): Don't define this name,
	it was for the HPUX dynamic loader's use and it creates problems
	with ELF GDB.

Fri Jul  1 12:53:47 1994  Jeff Law  (law@snake.cs.utah.edu)

	* ldlang.c (lang_do_assignments): No longer static.  Delete decl.
	* ldlang.h (lang_do_assignments): Put external decl here.
	* emultempl/hppaelf.em: Minor cleanups throughout file.
	(hppa_elf_create_output_section_statements): Rewrite.
	(hppaelf_finish): Rewrite.

Wed Jun 29 16:50:00 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/solaris2.mh (NATIVE_LIB_DIRS): Define as /usr/ccs/lib.

	* lexsup.c (parse_args): Accept -Bstatic and -Bdynamic.  Do not
	accept plain -B.
	* ld.texinfo: -Bstatic is not ignored.

Tue Jun 28 12:13:34 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* ldlex.l: Recognize \r the same as \n.

Thu Jun 23 17:53:04 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	Preliminary support for generating shared libraries, from Eric
	Youngdale <ericy@cais.cais.com>.
	* genscripts.sh: If the emulation parameter file sets
        GENERATE_SHLIB_SCRIPT, generate a .xs script file with
	CREATE_SHLIB defined.
	* emultempl/elf32.em (gld${EMULATION_NAME}_get_script): If
	link_info.shared is set, use the .xs script file.
	* scripttempl/elf.sc: If CREATE_SHLIB is set, don't create a
	.interp section, and don't include TEXT_START_ADDR in the starting
	address of the first section.
	* emulparams/elf_i386.sh (GENERATE_SHLIB_SCRIPT): Likewise.
	* emulparams/elf32_sparc.sh (GENERATE_SHLIB_SCRIPT): Define.

Thu Jun 23 12:52:22 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* configure.in: Change --with-targets to --enable-targets.

Wed Jun 22 13:42:14 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* lexsup.c (parse_args): Add support for new options -( -) with
	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.

	* ldlang.c (end_of_data_section_statement_list): Don't define.
	(lang_leave_output_section_statement): Don't set obsolete variable
	end_of_data_section_statement_list.

	* scripttempl/go32coff.sc: Don't put ${DATA_ALIGNMENT} inside an
	ALIGN.

	* ldlang.c (lang_size_sections): Adjust current region address
	even for sections with an explicit address.  From
	ralphc@pyramid.com (Ralph Campbell).

	* emulparams/i386linux.sh (NONPAGED_TEXT_START_ADDR): Set to 0.
	From jrs@world.std.com (Rick Sladkey).

	* scripttempl/mipsbsd.sc: Let sections align to their natural
	boundaries.

Tue Jun 21 11:27:04 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ldlang.c (lang_init): Use new bfd_abs_section_ptr, not
	&bfd_abs_section.
	(lang_abs_symbol_at_beginning_of): Likewise.
	(lang_abs_symbol_at_end_of): Likewise.
	(lang_size_sections): Use bfd_is_abs_section to check for the
	absolute section.  Don't try to set the VMA or output_offset or
	size of the absolute section.
	* ldmain.c (notice_ysym): Use bfd_is_und_section to check for the
	undefined section.

Thu Jun 16 22:48:41 1994  Jeff Law  (law@snake.cs.utah.edu)

	* scripttempl/hppaelf.sc: Place .data and .bss at 0x40000000
	when generating relocatable objects.

Thu Jun 16 14:25:22 1994  Eric Youngdale  (ericy@cais.cais.com)

	* 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.

Thu Jun 16 12:22:01 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* lexsup.c (parse_args): Add -shared to longopts, and handle it.
	* ldmain.c (main): Initialize link_info.shared to false.  Give
	error if link_info.relocateable and link_info.shared are both set.

	* configure.in: If EMUL_EXTRA* is defined in a config file, treat
	it as naming an emulation to be added to EMULATION_OFILES.
	* config/i386-linux.mt (EMUL_EXTRA1): Define as elf_i386.

	* Makefile.in: Rebuilt dependencies.
	(ALL_EMULATIONS): Add ei386linux.o, eelf32_sparc.o,
	eelf64_sparc.o.  Remove $(OTHER_EMULATIONS).
	(ei386linux.c, eelf32_sparc.c, eelf64_sparc.c): New targets.
	* config/i386-linux.mt (OTHER_EMULATIONS): Don't define.
	(ei386linux.c): Remove; now in Makefile.in.
	* config/i386-lynx.mt (OTHER_EMULATIONS): Don't define.
	* config/m68k-lynx.mt (OTHER_EMULATIONS): Don't define.
	* config/sparc-lynx.mt (OTHER_EMULATIONS): Don't define.
	* config/sparc64-elf.mt (OTHER_EMULATIONS): Don't define.
	(eelf64_sparc.c): Remove; now in Makefile.in.
	* config/sun4sol2.mt (OTHER_EMULATIONS): Don't define.
	(eelf32_sparc.c): Remove; now in Makefile.in.

	* ldexp.c (exp_print_tree): Don't crash if etree_rel section has
	no owner--it might be bfd_abs_section.  From Eric Youngdale
	<ericy@cais.cais.com>.

	* scripttempl/aout.sc: Let sections align to their natural
	boundaries.

Wed Jun 15 01:54:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldemul.h (ldemul_open_dynamic_archive): Declare.
	(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.

	* ldmain.c (get_emulation): Ignore -m486 for Linux compatibility.
	* lexsup.c (parse_args): Ignore -qmagic for Linux compatibility.
	Accept -static as a synonym for -non_shared.

	Let the user change the dynamic linker used by ELF code.
	* 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.

	* config/sun4sol2.mt (eelf32_sparc.c): Depend upon elf32.em, not
	generic.em.

	* lexsup.c (parse_args): Sort out the option macros and change the
	definitions to make it easier to add a new option.

	* scripttempl/aout.sc: Define __etext and __edata to go along with
	_etext and _edata.

	* ld.h (ld_config_type): Add new field traditional_format.
	* 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.
	* ldver.c (help): Mention -traditional-format.
	* ld.texinfo: Document -traditional-format.

Tue Jun 14 23:10:07 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldctor.c (ldctor_add_entry): Add entries to a set in the order
	they are encountered.

Tue Jun 14 18:05:09 1994  Eric Youngdale  (ericy@cais.cais.com)

	* emulparams/i386linux.sh (TEXT_START_ADDR): Define as 0x1000.
	(NONPAGED_TEXT_START_ADDR): Define as 0x20.

Mon Jun 13 15:46:09 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* scripttempl/alpha.sc: Define _ftext, _etext and _fdata insted of
	_FTEXT, _ETEXT and _FDATA.  Dont define _END.

	* ldfile.c (open_a): If this is not an archive, try to open it in
	the current directory before searching for it.

	* lexsup.c (parse_args): Treat -i as a synonym for -r.

	* ldgram.y (exp): Treat BLOCK as a synonym for ALIGN, so that
	BLOCK works in a section address as documented.

	* ldgram.y (YYDEBUG): Don't define.

Fri Jun 10 16:45:39 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* emultempl/gld960.em: Pass false for new argument to
	ldfile_add_library_path.
	* emultempl/gld960c.em, emultempl/lnk960.em: Likewise.

	* emultempl/sunos.em: Only look for .so files if doing a dynamic
	link.

Thu Jun  9 08:35:17 1994  Ian Lance Taylor  (ian@cygnus.com)

	* scripttempl/i960.sc: Add CONSTRUCTORS to .data.

Thu Jun  9 06:52:29 1994  Bill Cox  (bill@rtl.cygnus.com)

	* Makefile.in (check): Delete ld.new dependency so that a regression
	  test doesn't trigger a rebuild of the linker.

Thu Jun  9 00:17:20 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (map_input_to_output_sections): For lang_address, call
	init_os if it hasn't already been called.

Thu Jun  2 17:24:08 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Add support for SunOS shared libraries.
	* 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.
	* emulparams/sun3.sh (TEMPLATE_NAME): Likewise.
	* Makefile.in (esun4.c): Depend upon sunos.em, not generic.em.
	(esun3.c): Likewise.

	* ldlang.c: Minor formatting cleanups.
	(lang_for_each_input_file): New function.
	* ldlang.h (lang_for_each_input_file): Declare.

	* ldfile.h (search_dirs_type): Move from ldfile.c, and add cmdline
	field.
	(search_head): Declare.
	(ldfile_add_library_path): Add new cmdline argument in prototype.
	* ldfile.c (search_head): Make non-static.
	(search_dirs_type): Move to ldfile.h.
	(ldfile_add_library_path): Accept cmdline argument, and save it.
	* lexsup.c (parse_args): Pass true for new cmdline argument of
	ldfile_add_library_path.
	(set_default_dirlist): Likewise.
	* ldmain.c (check_for_scripts_dir): Pass false for new cmdline
	argument of ldfile_add_library_path.
	* ldgram.y (ifile_p1): Likewise.

Wed Jun  1 14:24:08 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.h (lang_input_statement_type): Remove fields subfiles,
	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.

Fri May 27 12:25:33 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* ldver.c (ldversion): Changed version to "cygnus-2.4.1".

	Changes from binutils-2.4 release:

	* genscripts.sh (RELOCATING, CONSTRUCTING): When setting
	variables, use whitespace, so scripts don't break.

	* config/alphaosf.mh (HDEFINES, CFLAGS): Deleted.

	* emultempl/generic.em: Find emultempl/stringify.sed in ${srcdir}.

	* cdtest-bar.cc: Renamed from cdtest-func.cc.
	* Makefile.in: Noted change.

	* scripttempl/a29k.sc: Don't include /lab3/u3/..../segments.o; I
	don't know where that's supposed to come from, or why it's
	necessary.

	Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)

	* configure.bat: update to latest makefile.in
	* emulpara/go32.sh: set to coff-go32 not aout
	* emultemp/generic.em: strength-reduce the structure of
	  this shell script, since the only available shell for
	  DOS can't handle complex syntax.
	* emultemp/stringify.sed: for "sed -f" instead of inline.
	* makefile.in: depend on stringify.sed as well as genscripts.sh
	* scripttemp/go32coff.sc: correct for djgpp 1.11's COFF format
	* genscripts.sh: empty variables aren't always considered "set",
	  so set them to "y" instead.

Fri May 27 01:08:14 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (entry_symbol): Make static.
	(lang_add_entry): Add cmdline argument.
	* ldlang.h (lang_add_entry): Change prototype.
	* ldgram.y (statement_anywhere): Change lang_add_entry call.
	* lexsup.c (parse_args): Likewise.

Tue May 24 16:13:43 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* emulparams/elf32mipb.sh (OTHER_READONLY_SECTIONS): Don't give
	.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.

Thu May 19 13:31:33 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Add support for ELF shared libraries.
	* 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.

Wed May 18 10:15:39 1994  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (install): Redirect output of ln to /dev/null.

Mon May 16 13:35:08 1994  Jeff Law  (law@snake.cs.utah.edu)

	* emultempl/hppaelf.em: Change all references of
	.hppa_linker_stubs to .PARISC.stubs.
	* scripttempl/hppaelf.sc: Likewise.

Fri May 13 13:00:38 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (print_output_section_statement): Change ``no attached
	output section'' message slightly.
	(lang_do_assignments): Don't recurse down if there is no real
	section.

	* config/i386-linux.mt (OTHER_EMULATIONS): Change em_ to e to
	match corresponding change in emulation templates.
	* config/i386-lynx.mt, config/m68k-lynx.mt: Likewise.
	* config/sparc-lynx.mt, config/sun4sol2.mt: Likewise.

Wed May 11 18:16:46 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* ldver.c (ldversion): Updated version number.

	* 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.

Wed May 11 16:24:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Don't create unnecessary output sections.
	* 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.

Tue May 10 14:31:16 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (wild_doit): Don't bother initializing the vma and
	section size.  Don't special case SEC_SHARED_LIBRARY.
	(lang_size_sections): Handle SEC_COFF_SHARED_LIBRARY sections
	specially.

Fri May  6 12:24:27 1994  Steve Chamberlain  (sac@cygnus.com)

	* config/go32.mh : New file for Xgo32X.

Fri May  6 15:15:35 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldfile.c (ldfile_open_command_file): Set bfd_error_system_call
	before calling einfo, since we are reporting an fopen failure.
	From jrs@world.std.com (Rick Sladkey).

	* configure.in: Use "e" rather than "em_" as prefix for
	emulations.

Fri May  6 01:08:14 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* emultempl/generic.em: Use "e" rather than "em_" as prefix for
	filename.
	* emultempl/gld960.em, emultempl/gld960c.em, emultempl/lnk960.em,
	emultempl/hppaelf.em, emultempl/m88kbcs.em, emultempl/vanilla.em:
	Ditto.
	* Makefile.in: Changed all generated file names.
	(ldemul-list.h): Depend on Makefile, not config.status.  Changed
	sed patterns to handle new filenames.

	* config/mipsl-idt.mt: Renamed from mips-idtl.mt.
	* configure.in: Adjusted.

Thu May  5 15:07:32 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* Makefile.in (install-info): Don't use "$<*", it doesn't always
	work.  Instead, check build dir and $srcdir explicitly, and use
	`echo' to get all the filenames.

	* configure.in (h8300h-*-hms): Changed ld_target name to
	cf-h8300h.
	* config/cf-h8300h.mt: Renamed from coff-h8300h.mt, to make it
	unique in 8.3.

	* config/i960coff.mt: New file.
	* emulparams/gld960coff.sh: New file.
	* emultempl/gld960c.em: New file.
	* configure.in (i960-*-vxworks5* except -vxworks5.0*): Use
	i960coff configuration.
	* Makefile.in (em_gld960coff.c): Added dependencies, build rule.

	* Makefile.in (ALL_EMULATIONS): Remove em_delta68.o, since the
	code isn't included in FSF releases, and it can still be
	explicitly selected.
	(distclean): Remove site.bak and tmpdir.
	(STAGESTUFF): Removed $(GENERATED_CFILES) $(GENERATED_HFILES).
	(mostlyclean): Delete them explicitly here.  Also remove tmpdir.

	Patches from Ralph Campbell:
	* config/mipsbsd.mh: New file.
	* Makefile.in (em_mipsbsd.c): Use mipsbsd.sc, not aout.sc.
	* scripttempl/mipsbsd.sc: Don't define __DYNAMIC.
	* emulparams/mipsbsd.sh (OUTPUT_FORMAT): Fix name to have `a.out'
	instead of `aout'.

	* configure.in (i386-*-gnu*): Treat like i386-*-mach*.

Wed May  4 11:59:40 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/m68k.mt (EMUL): Set to m68kaout.
	* emulparams/m68kaout.sh: New file.
	* Makefile.in (ALL_EMULATIONS): Add em_m68kaout.o.
	(em_m68kaout.c): New target.

	* 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 (mostlyclean): Remove cdtest.tmp, cdtest-ur,
	cdtest-ur.out, and cdtest-ur.tmp.

Wed Apr 27 16:03:37 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* scripttempl/sa29200.sc: Align all sections to four byte
	boundaries.

Wed Apr 27 10:48:03 1994  Steve Chamberlain  (sac@cygnus.com)

	* Makefile.in, configure.in: Support for go32 coff.
	* config/i386-go32.mt: New file
	* emulparams/i386go32.sh: New file
	* scripttempl/i386go32.sc: New file

Tue Apr 26 17:20:03 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* 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.

Tue Apr 26 12:41:03 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* scripttempl/mips.sc: Force _gp and .lit8 to be aligned to a 16
	byte boundary, in case the global constructors do not take up an
	even 16 bytes.

	* config/i386v4.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.

Mon Apr 25 15:27:52 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (lang_size_sections): When no address is given for a
	section, align it according to its requirements.

Thu Apr 21 17:24:24 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (clean, distclean): Remove configdoc.texi.

Tue Apr 19 12:12:15 1994  Bill Cox  (bill@rtl.cygnus.com)

	* configure.in: Add i[34]86-*-bsd386 to the patterns recognized.

Fri Apr 15 14:35:42 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (lang_size_sections): When relaxing, adjust the
	position of a padding statement, and adjust dot accordingly.

Mon Apr 11 17:37:09 1994  Bill Cox  (bill@rtl.cygnus.com)

	* Makefile.in (EXPECT, RUNTEST): Set these for the check goal.

Mon Apr 11 12:32:57 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* scripttempl/i386coff.sc: If relocating, don't put .init and
	.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.

Mon Apr 11 10:31:00 1994  Bill Cox  (bill@rtl.cygnus.com)

	* Makefile.in (check): Set TCL_LIBRARY for runtest.

Wed Apr  6 00:09:37 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* configure.in (hppa*-*-*elf*): Don't require "-hp-" for the
	manufacturer.

	* emultempl/hppaelf.em (hppaelf_finish): Only resize sections
	if building a final executable.

Tue Apr  5 12:17:30 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldmain.c (main): Check the return value of bfd_close.

Thu Mar 31 18:07:06 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* scripttempl/alpha.sc: Clean up section alignment to ensure that
	sections never overlap when using -r.

Wed Mar 30 15:51:15 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldmisc.c (vfinfo): Change symbol reading slightly for recent BFD
	changes: get_symtab_upper_bound renamed and returns long,
	bfd_canonicalize_symtab returns long, check for error indications.

Fri Mar 25 17:20:01 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (print_input_section): For section size, use
	_cooked_size if it is non-zero, size otherwise.
	(size_input_section): Likewise.
	(lang_do_assignments): Likewise (case lang_input_section_enum).

Thu Mar 24 15:20:47 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (new_afile): Add new argument add_to_list.  Don't set
	real to true for lang_input_file_is_marker_enum.  Clear the_bfd.
	(lang_add_input_file): Pass true to new_afile for add_to_list.
	(lookup_name): Remove force_load argument.  Changed all callers.
	Pass false to new_afile for add_to_list.  Split loading of symbols
	out into separate function.
	(load_symbols): New function split out of lookup_name.  Don't load
	the symbols if they are already loaded.
	(open_input_bfds): For lang_input_statement_enum call load_symbols
	rather than lookup_name.
	(lang_process): Pass abs_output_section rather than NULL to
	lang_size_sections.
	(lang_startup): Set real field of first_file to true.

Wed Mar 23 14:15:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (had_relax): Removed.
	(relax_again): New static variable.
	(lang_size_sections): Change call to bfd_relax_section to
	correspond to BFD changes.  Set relax_again appropriately.
	(lang_process): Remove #if 0 code.  When relaxing, keep calling
	lang_do_assignments and lang_size_sections until relax_again
	becomes false.

	* emultemp/gld960.em: Include libiberty.h
	(gld960_before_parse): Pass NULL as final argument to concat.

Tue Mar 22 13:08:28 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* scripttempl/aout.sc: Force _end and __end to be aligned to a
	four byte boundary.

	* ldwrite.c (build_link_order): Handle lang_data_statement_enum by
	building a bfd_data_link_order, rather than by setting the section
	contents immediately.

Mon Mar 21 18:28:37 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Changes to make -Ur work again.
	* ldmain.c (add_to_set): Now takes reloc argument rather than
	bitsize.  Check config.build_constructors here.  If an new hash
	table entry is created, mark it as undefined.
	(constructor_callback): No longer takes bitsize argument.  Pass
	BFD_RELOC_CTOR to ldctor_add_set_entry, but first make sure the
	BFD backend supports it.
	(reloc_overflow): Handle a NULL abfd argument.
	(reloc_dangerous, unattached_reloc): Likewise.
	* ldctor.c: Include ldmain.h.
	(struct set_info): Change bitsize field to reloc.
	(ldctor_add_set_entry): Now takes reloc argument rather than
	bitsize.  Don't bother to check config.build_constructors here.
	(ldctor_build_sets): Get the size from the reloc howto.  If
	generating relocateable output, call lang_add_reloc rather than
	lang_add_data.
	* ldctor.h (ldctor_add_set_entry): Change declaration to use reloc
	instead of bitsize.
	* ldlang.h (statement_enum): Add lang_reloc_statement_enum.
	(lang_reloc_statement_type): New structure.
	(lang_statement_union_type): Add reloc_statement field.
	(lang_add_reloc): Declare new function.
	* ldlang.c (lang_for_each_statement_worker): Handle
	lang_reloc_statement_enum.
	(map_input_to_output_sections, print_statement): Likewise.
	(lang_size_sections, lang_do_assignments): Likewise.
	(print_reloc_statement): New function.
	(lang_add_reloc): New function.
	* ldwrite.c (build_link_order): Handle lang_reloc_statement_enum.

	* Makefile.in (cdtest.out, cdtest-ur.o): New targets.
	(cdtest-ur, cdtest-ur.out): New targets.
	(check-cdtest): Now also check that -Ur works correctly.

	* scripttemp/alpha.sc: Align all sections to 16 byte boundaries.

Thu Mar 17 12:45:41 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (lang_process): Move lang_common call before
	map_input_to_output_sections, to ensure that any alignment
	constraints set by common symbols are copied over to the output
	sections.

Fri Mar 11 22:17:34 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* emulparams/elf32ppc.sh (TEMPLATE_NAME): Don't define.
	(OTHER_READWRITE_SECTIONS): Rename .toc to .got.
	* Makefile.in (em_elf32ppc.c): Depend upon generic.em, not ppc.em.
	* emultempl/ppc.em: Remove ugly stub code; turns out not to be
	needed for ELF.

Tue Mar  8 04:22:27 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* config/i386bsd.mh: New file.

Mon Mar  7 15:23:24 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elf.sc: Permit TEXT_START_SYMBOLS and DATA_START_SYMBOLS to be
	defined.
	* emulparams/elf32mipb.s (TEXT_START_SYMBOLS): Define _ftext.
	(DATA_START_SYMBOLS): Define _fdata.

Mon Feb 28 10:59:14 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* ldlang.c (cat): Define using ANSI style if ALMOST_STDC defined.

Sun Feb 27 16:29:38 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* emultempl/hppaelf.em (hppaelf_finish): Update comments.  This
	works again.  Attach some output symbols to the stub file bfd.

	* emultempl/hppaelf.em: Include elf32-hppa.h.
	(file_chain): Add decl.
	(hppa_look_for_stubs_in_section): Delete decl.
	(hppaelf_finish): Reenable code.  Do not pass symbols
	down to hppa_look_for_stubs_in_section.

Sat Feb 26 10:58:25 1994  Ian Lance Taylor  (ian@cygnus.com)

	* ldmain.c (write_map): Don't define.  Removed all references.
	Just use map_file or map_filename instead.
	(add_archive_element): Use minfo to write map information, not
	info_msg.
	(constructor_callback): Use fprintf to write map information, not
	info_msg.
	* ldmain.h (write_map): Don't declare.
	* ldgram.y (mri_script_command): Removed reference to write_map.
	* ldlang.c (lang_one_common): Likewise.
	* lexsup.c (parse_args): Likewise.

Fri Feb 25 19:12:03 1994  Ian Lance Taylor  (ian@cygnus.com)

	* scripttempl/elf.sc: Force all sections to be aligned.

	* ldgram.y (section): Reverse the order of memspec_opt and
	fill_opt to avoid an ambiguity when both are used.
	* ld.texinfo: Changed accordingly.

	* ldgram.y: Move include of ldlex.h back with other includes.
	* ldlex.h (input_type): Don't initialize enum constants to
	particular values.
	* ldlex.l: Use a switch to return the right token based on
	input_type, rather than knowing that input_type has a value based
	on a token type.

	* ldgram.y (dirlist_ptr): Removed; not used.
	* lexsup.c: Include ldver.h.
	* Makefile.in: Rebuilt dependencies.

Fri Feb 25 18:55:54 1994  Ted Lemon  (mellon@pepper.ncd.com)

	* ldlang.c (lookup_name): don't call bfd_set_gp_size.
	(ldlang_add_file): call it here instead.

Fri Feb 25 18:13:46 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* ldgram.y: Include ldlex.h after %token decls, for byacc.

Fri Feb 25 10:47:25 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

        * emultempl/hppaelf.em: First attempt to clean this file up.
	Add comments in several functions as to their purpose and
	how they function (or my current best guess).  Clean up horrible
	spacing and indention that never should have been accepted in the
	first place.  Add FIXMEs for issues which need to be resolved.
	Disable linker-stub generation until it gets fixed.  This allows
	the linker to at least work on simple code for testing purposes.

	* ldlang.c (lang_size_sections): No longer static (PA ELF calls
	it via hppaelf_finish).  Prototype moved into ldlang.h.
	(lang_process): Move problematic extra call to lang_size_sections
	into the PA ELF specific code.
	* emultempl/hppaelf.em (hppaelf_finish): Extra call to
	lang_size_sections moved here.

Thu Feb 24 16:47:33 1994  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in (powerpc-*-elf*): New target; use ppc-elf32.
	* config/ppc-elf32.mt: New file.
	* emulparams/elf32ppc.sh: New file.
	* emultempl/ppc.em: New file.
	* Makefile.in (ALL_EMULATIONS): Added em_elf32ppc.o.
	(em_elf32ppc.c): New target; uses elf32ppc.sh, ppc.em and elf.sc.
	(EMULATION_OFILES): Added dependencies on ldexp.h and ldlang.h.

Thu Feb 24 12:27:07 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* lexsup.c (parse_args): Use symbolic numbers for long options.
	Fix misunderstanding in -Y and -call_shared et al.

	Use getopt instead of lex and yacc to parse the command line.

	* ld.texinfo (Options): Document changes to option syntax.
	* Makefile.in: Update dependencies.
	* ldver.c (help): Tweak dashes in usage message.
	* ldgram.y (%union): Remove unused members.
	Remove %tokens for command line options; add ones for input types.
	(command_line): Rules removed.
	(file): Instead of command line, recognize an
	input type indicator, then use the nonterminal for that type.
	(defsym_expr): New nonterminal from code formerly in command_line.
	* ldlex.h: Declare parser input type enum and variable.
	Don't declare parse_line.
	* ldlex.l: Remove unused variables.  Make some used ones static
	and comment them.
	(COMMAND): Start state and its rules removed.
	At start of yylex, return input state token if at start of input.
	(lex_redirect): Don't need to set yyout.
	(ldlex_command): Function removed.
	* ldmain.c (main): Instead of calling parse_line, set up the
	redirections and call yyparse directly.
	* ldmisc.c (vfinfo): If there's no input filename, print nothing, not
	"command line".
	* lexsup.c: Remove #if 0'd code.
	(parse_line): Function removed.
	(parse_args): Rewrite to use getopt_long_only.
	(set_default_dirlist): New function from code formerly in
	ldgram.y:command_line.
	(set_section_start): New function.
	* emultempl/generic.em, emultempl/gld960.em, emultempl/hppaelf.em,
	emultempl/lnk960.em, emultempl/m88kbcs.em: Don't enclose
	compiled-in link scripts in "{" and "}", as the grammar no longer
	wants them to be.

Thu Feb 24 08:43:26 1994  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* Makefile.in (ld.dvi): Depend on configdoc.texi, but don't
	require that it be in $(srcdir).

Tue Feb 22 09:21:18 1994  Ian Lance Taylor  (ian@cygnus.com)

	* ldlang.c (lang_size_sections): Only align section to alignment
	required by linker script, not to maximum alignment of input
	sections.

	* ldlang.h (largest_section): Don't declare.
	* ldlang.c (largest_section): Don't define.
	(size_input_section): Don't set largest_section; not used.

Mon Feb 21 15:15:29 1994  Ian Lance Taylor  (ian@cygnus.com)

	* ldlang.c (new_afile): Pass NULL as last argument to concat.

Thu Feb 17 15:51:23 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c, ldmain.c: Include libiberty.h.

	* ldmisc.h (concat): Don't declare.
	* ldmisc.c (concat): Don't define; just use the one in libiberty.

	* ld.h (as_output_section_statement): Removed; not used.

Thu Feb 17 09:32:14 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldlang.c, ldmain.c, ldmisc.c: Use bfd_get_error and
	bfd_set_error and new error names.

Tue Feb 15 20:14:53 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* ldwrite.c (build_link_order): If the cooked size of the section
	has been set, use it, for determining link_order size.
	(ldwrite): In the error message displayed if bfd_final_link fails,
	indicate that it was in fact the final link step that failed.

	* ldlang.c (lang_size_sections): Clear bfd_error before calling
	bfd_relax_section, in case it returns false but doesn't flag an
	error.  If an error is returned, indicate which one it is in the
	error message.

	* Makefile.in (install-info): Depend on ld.info, and use "$<*" so
	it'll get picked up from $(srcdir) if appropriate.

Tue Feb 15 16:32:04 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* scripttempl/aout.sc: Only pad .text if PAD_TEXT is set.
	* emulparams/i386mach.sh (PAD_TEXT): Set PAD_TEXT.

Fri Feb 11 17:02:49 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldlex.l (comment): Increment line number when newline is read.

Fri Feb 11 17:36:20 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (lookup_name): Take new argument, force_load.  If true,
	reload the file even if it is already loaded.
	(wild): Call lookup_name with force_load argument of 0.
	(open_input_bfds): Call lookup_name with force_load argument of 1.
	(print_symbol): Remove declaration of non-existent function.
	(print_one_symbol): Return true rather than falling off end.

Thu Feb 10 11:52:38 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldmain.c (main): Use %ld when printing long values.

	* scripttempl/elf.sc: Move _edata after the .sdata section.
	Permit OTHER_BSS_SYMBOLS to be defined.
	* emulparams/elf32mipb.s (OTHER_BSS_SYMBOLS): Define _fbss.

Mon Feb  7 16:31:15 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Rename all "hppaosf" files to "hppaelf".
	* Change all "osf" references to "elf" in hppaelf files.
	* Makefile.in: Likewise.
	* configure.in: Likewise.

Sun Feb  6 20:31:56 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldmain.c (main): Call xatexit, not atexit.
	Call xmalloc_set_program_name.

	* ldlang.c (lang_size_sections): Check if bfd_relax_section set
	bfd_errno.

Sat Feb  5 03:54:34 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* emultempl/lnk960.em (append), emultempl/hppaosf.em
	(hppaosf_finish): Call xmalloc, not ldmalloc.
	* ldmain.c (preserve_output): Function removed.
	(main): Do it here instead.

Fri Feb  4 23:02:19 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* ldlang.h (LANG_FOR_EACH_{INPUT,OUTPUT}_SECTION): Delete (unused)
	GNU C specific macros.

	* emultempl/hppaosf.em (hppaosf_finish): Expand the only remaining
	call to LANG_FOR_EACH_INPUT_SECTION.

Fri Feb  4 16:26:08 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldmisc.c (ldmalloc, xmalloc, ldrealloc, xrealloc): Functions
	deleted; will use libiberty versions instead.
	* ldctor.c ldfile.c ldlang.c ldmain.c ldmisc.c ldmisc.h lexsup.c
	mri.c Makefile.in: Change callers.

	* ldmisc.c (vfinfo): Remove cleanup code.
	* ldmain.c (remove_output): Put it here (new function).
	(preserve_output): New function.
	(main): Register remove_output and preserve_output with atexit.
	* ldmain.c ldgram.y: Call xexit instead of exit.
	* ldmisc.h: Declare xexit.

Fri Feb  4 15:19:01 1994  Steve Chamberlain  (sac@cygnus.com)

	* Makefile.in: Lots of new H8/500 memory models.

Sun Jan 30 14:33:40 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* ldlex.l: Removed duplicate rules.
	(yywrap): Provide default definition, needed with some versions of
	flex.

Fri Jan 28 09:12:56 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldmisc.c (vfinfo): For `%I', if the file is in an archive, print
	the archive filename too.

	* ldlex.l: Add rule to catch invalid input characters instead of
	printing them.  Include "ldmain.h" for program_name decl.
	(lex_warn_invalid): New function.
	* Makefile.in: Add dependency.

Fri Jan 28 12:58:45 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* Makefile.in (check): Don't bother running any tests of
	cross-linker until the test suite no longer assumes native mode.

Thu Jan 27 17:19:54 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* ldlang.c (print_one_symbol, print_input_section):  Print
	global symbols in symbol table again.

Thu Jan 27 12:35:01 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldmain.c ldmain.h ldgram.y: If -v -V or --version was given,
	exit successfully instead of complaining if no input files are
	given.

Tue Jan 25 13:19:41 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* Makefile.in: Format variable definitions consistently.
	(LD_PROG): Remove unnecessary variables from link command,
	change variable LOADLIBES to EXTRALIBS.

	* ldmain.c (main): Compute and display total execution time.
	* ld.texinfo (-stats): Document the option.

Mon Jan 24 12:56:37 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldmain.c (reloc_overflow): Added name, reloc_name and addend
	arguments.

	* ldlang.c (lookup_name): Set BFD GP size to -G argument value
	after opening BFD.

	* ldlang.c (relaxing): Removed global variable.
	(lang_size_sections): If the canonical symbols have not already
	been read in, read them in before relaxing.
	* ldlang.h (relaxing): Removed declaration.

Fri Jan 21 00:44:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (new_afile): Initialize loaded field to false.
	(lookup_name): If file was already loaded, don't call the
	add_symbols entry point again.

Wed Jan 19 13:57:00 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ld.texinfo: Clarify what -T option does.

Tue Jan 18 16:18:15 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* scripttempl/m88kbcs.sc: Don't use CREATE_OBJECT_SYMBOLS, that's
	for a.out.

Tue Jan 11 13:22:04 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldmain.c (add_archive_element): If trace_files or
	trace_file_tries, print file name.
	* ldlang.c (lookup_name): Likewise.
	(ldlang_add_file): Don't put files on input_bfds list in reverse
	order.

	* scripttempl/elf.sc: Correct typo.

Mon Jan 10 19:49:05 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldgram.y, ldlex.l: Make the space between -e, -u, and -y and
	their arguments optional, for compatibility with the old GNU ld.

Fri Jan  7 20:00:24 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* scripttempl/elf.c: Define __bss_start before the .sbss section.

Thu Jan  6 00:13:10 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldmain.c (add_to_set): Add bitsize argument.
	(constructor_callback): New function.
	(link_callbacks): Add constructor_callback.
	* ldctor.c (struct set_info): Add bitsize field.
	(ldctor_add_set_entry): Add bitsize argument.
	(ldctor_build_sets): Base the size of the elements of the set on
	the bitsize, rather than always using LONG.
	* ldctor.h (ldctor_add_set_entry): Add bitsize to declaration.

	* ld.h (QUAD_SIZE): Define.
	* ldgram.y (QUAD): New token.
	(length): Handle it.
	* ldlex.l: Return QUAD.
	* lexsup.c (keywords): Add QUAD.
	* ldwrite.c (build_link_order): Handle QUAD.
	* ldlang.c (print_data_statement): Handle QUAD.
	(lang_size_sections): Likewise.
	(lang_do_assignments): Likewise.
	* ldexp.c (exp_print_token): Add QUAD to table.
	* ld.texinfo: Describe QUAD.

	* scripttempl/alpha.sc: Don't create .lit4 or .sdata sections,
	since the Alpha doesn't use them.

Wed Jan  5 17:42:16 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldemul.h (ld_emulation_xfer_struct): Comment the members.

Sat Jan  1 13:39:31 1994  Rob Savoye  (rob@darkstar.cygnus.com)

	* Makefile.in, configure.in: Add support for VSTa micro-kernel.
	* config/vsta.mt, emulparams/vsta.sh: New files for VSTa.

Sat Jan  1 10:53:35 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* scripttempl/aout.sc: Pad .text to DATA_ALIGNMENT if relocating;
	needed for i386mach.  (Should be a no-op on other systems.)

	* emulparams/i386mach.sh (SEGMENT_SIZE): Fix again.
	(PAGE_SIZE): Don't define; not used.

Fri Dec 31 16:12:06 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldgram.y (yyerror): Make argument const char *, and actually
	print it out rather than assuming it is a syntax error.
	* ldmisc.h: Change declaration of yyerror.
	* ldemul.c, ldwrite.c: Add /*ARGSUSED*/ as appropriate.

Fri Dec 31 11:37:28 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* emulparams/i386mach.sh (NONPAGED_TEXT_START_ADDR): Don't include
	exec header offset, since the exec header isn't loaded.
	(PAGE_SIZE, SEGMENT_SIZE): Agree with bfd/i386mach3.c.

Thu Dec 30 13:01:43 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	A major rewrite to move the bulk of the linker into BFD so that
	more efficient backend code can be written for specific object
	files.
	* lderror.c, lderror.h, ldindr.c, ldindr.h, ldsym.c, ldsym.h,
	ldwarn.c, ldwarn.h, relax.c, relax.h: Removed.
	* ldctor.c, ldctor.h: Complete rewrite.
	* ldwrite.c, ldwrite.h: Complete rewrite.
	* ld.h (strip_symbols_type, strip_symbols): Removed.  Use
	link_info.strip instead.  Changed all uses.
	(discard_locals_type, discard_locals): Removed.  Use
	link_info.discard instead.  Changed all uses.
	(ld_config_type): Removed relocateable_output field; use
	link_info.relocateable instead; changed all uses.  Added stats
	field.
	(set_asymbol_chain, get_asymbol_chain, get_loader_symbol,
	set_loader_symbol): Removed.
	* ldexp.h (node_class): Added etree_rel.
	(etree_type): Added rel field.
	* ldexp.c (exp_print_token): Bracketed table initialization.
	(exp_relop): New function.
	(fold_name): Use linker hash table rather than ldsym functions.
	(exp_fold_tree): Likewise.  Also, handle etree_rel case.
	(exp_print_tree): Handle etree_rel.
	* ldgram.y (strip_symbols, discard_locals): Removed.
	(OPTION_stats, OPTION_no_keep_memory): New tokens.  Handle them.
	(REL): New token.  Does not appear in grammar, but needed for
	expression code.
	(file): Don't call lang_final; it's called by main anyhow.
	* ldlex.l: Accept -stats and -no-keep-memory options.
	* ldlang.h (fill_type): Make unsigned int, not unsigned short.
	* ldlang.c: Consistently use fill_type for fill argument.
	(lang_init_script_file, script_file): Removed.
	(create_object_symbols): Removed.  Use
	link_info.create_object_symbols_section instead.  Changed all
	uses.
	(lang_add_keepsyms_file): Removed.
	(lookup_name): Call bfd_link_add_symbols instead of
	ldmain_open_file_read_symbol.
	(wild): Don't iterate over script_file.
	(open_output): Create link hash table.
	(lang_place_undefineds): Rewrote.
	(lang_size_sections): Handle relaxing (doesn't work yet).
	(lang_relocate_globals): Removed.
	(lang_finish): Use link hash table rather than ldsym functions.
	(lang_common): Rewrote.
	(lang_one_common): New function.
	(ldlang_add_file): Add file to link_info.input_bfds list.  Set
	usrdata.
	(create_symbol): Removed.
	(lang_process): Don't call lang_init_script_file.  Call
	ldctor_build_sets rather than find_constructors.  Don't call
	lang_relocate_globals.
	(lang_abs_symbol_at_beginning_of): Rewrote.
	(lang_abs_symbol_at_end_of): Rewrote.
	* ldmain.c (had_y): Removed.
	(lprefix, lprefix_len): Removed; use link_info fields instead.
	Changed all uses.
	(multiple_def_count, commons_pending, undefined_global_sym_count,
	total_symbols_seen, total_files_seen): Removed.
	(link_callbacks, link_info): New variables.
	(main): Initialize link_info.  Don't call init_bfd_error_vector or
	ldsym_init.  Don't set now unused variables.  Handle -stats.
	(get_emulation): Removed obsolete and nonfunctional GNU960 code.
	(add_ysym): Rewrote.
	(read_entry_symbols, refize, enter_global_ref, enter_file_symbols,
	search_library, gnu960_check_format, decode_library_subfile,
	linear_library, symdef_library, clear_syms, subfile_wanted_p):
	Removed.
	(add_keepsyms_file, add_archive_element, multiple_definition,
	multiple_common, add_to_set, warning_callback, undefined_symbol,
	reloc_overflow, reloc_dangerous, unattached_reloc, notice_ysym):
	New functions.
	* ldmisc.c (vfinfo): Accept a string for %T, not a symbol.  Don't
	require symbols for %C; look them up instead.
	* emultempl/hppaosf.em: Pass link_info to
	hppa_look_for_stubs_in_section.
	* Makefile.in: Rebuilt dependencies.
	(CFILES): Removed lderror.c, ldindr.c, ldsym.c, ldwarn.c, and
	relax.c.
	(HFILES): Removed lderror.h, ldindr.h, ldsym.h, ldwarn.h, and
	relax.h.
	(EMULATION_OFILES): Depend on bfdlink.h, ldmain.h, ldexp.h,
	ldlang.h and ldctor.h.

	* Makefile.in (ldlex.c): Don't depend on ldgram.h.  Remove
	declarations of free and malloc from flex output.  Change malloc
	to ldmalloc in flex output.

Thu Dec 16 21:19:57 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* ldmain.c (lprefix): Change default from a char to a string
	with only one character.
	(lprefix_len): Set default to one.

	* ldmain.h (lprefix_len): Declare.

	* ldsym.c (write_file_locals): Use strncmp rather than a character
	comparison for lprefix.

	* emultmpl/m88kbcs.em (before_parse): Set lprefix and lprefix_len
	correctly.

	* emultmpl/hppaosf.em: Include ldexp.h.
	(before_parse): Set lprefix and lprefix_len correctly.

Tue Dec 14 17:19:03 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlex.h: Don't declare yywrap if it is a macro.
	* ldlex.l: Include sysdep.h.
	* ldlang.c (lang_for_each_statement_worker,
	lang_for_each_statement): Forgot to use PARAMS.

Mon Dec 13 14:30:03 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in: Added .PHONY targets where appropriate.  Added some
	comments.  Also:
	(gcclibdir, version): Removed unused variables.
	(DEP): New variable, set to mkdep.
	(ALL_CFLAGS): New variable.  Used in .c.o target.
	(CFILES, HFILES, GENERATED_CFILES, GENERATED_HFILES): New
	variables.
	(HEADERS, MANSOURCES, LDCSOURCES, GENERATED_SOURCES,
	GENERATED_HEADERS, LDSOURCES, BFD_SOURCES, SOURCES): Removed
	mostly obsolete variables.  Adjusted remaining uses.
	(DEF_EMUL): Removed variable.
	(ldmain.o): Handle undefined EMUL error correctly.
	(ldemul-list.h): Depend on config.status rather than Makefile.
	Create via temporary file.
	(ver960.c, roll, make): Removed obsolete targets.
	(.dep, .dep1, dep.sed, dep, dep-in): New targets.  Used to rebuild
	dependencies.
	* dep-in.sed: New file, used when rebuilding dependencies.

Sat Dec 11 14:43:44 1993  Ian Lance Taylor  (ian@deneb.cygnus.com)

	Made many changes to eliminate gcc warnings.  Made various
	cosmetic changes, declared various things in header files, removed
	various extern declarations from .c files.  No substantive
	changes.

	* ldlang.c (lang_process): Ifdef out final call to
	lang_size_sections again (reverting change of Nove 2), since it
	breaks the Sun4 linker.

Thu Dec  2 16:31:47 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in (alpha-*-netware*): New target; use alpha.

Wed Dec  1 14:04:20 1993  Ken Raeburn  (raeburn@cygnus.com)

	* configure.in: Group targets by CPU.  Merge some m68k target
	entries with different CPU specs that use the same ld_target
	values.

	* configure.in: Add sparc*-*-coff.
	* config/coff-sparc.mt, emulparams/coff_sparc.sh: New files.
	* Makefile.in (ALL_EMULATIONS): Add em_coff_sparc.o.
	(em_coff_sparc.c): Add dependencies and build rules.

	* ldmisc.c (errno, sys_nerr, sys_errlist): Don't declare.

Wed Dec  1 12:19:55 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldgram.y (OPTION_call_shared, OPTION_non_shared, OPTION_Oval):
	New tokens.
	(command_line_option): Accept and ignore them (for now).
	* ldlex.l (<COMMAND>): Handle -non_shared, -call_shared, and -On
	where n is a number.

Mon Nov 22 14:14:29 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldmain.c (subfile_wanted_p): If merging a common symbol which is
	not in bfd_com_section, create the section in the BFD so that it
	can be placed in the right output section.

Fri Nov 19 14:12:39 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in (mips*-sgi-irix5*): New target.  Use mipsb-elf32.
	* emulparams/elf32mipsb.sh (DATA_ADDR): Define.
	(OTHER_READONLY_SECTIONS): Define for .reginfo.
	(EXECUTABLE_SYMBOLS): Define for _DYNAMIC_LINK.
	* scripttempl/elf.sc: Use EXECUTABLE_SYMBOLS when not relocating.
	Move OTHER_READONLY_SECTIONS after all the other readonly
	sections.  Don't use DATA_ADDR twice.

	* ldmain.c (enter_file_symbols): Removed duplicate tests of p.  If
	p is in a common section, make sure the BFD has a section of that
	name.

	* ldlang.c (lang_common): Add newline to error message.

Thu Nov 11 15:54:41 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* emulparams/m68klynx.sh (SCRIPT_NAME): Define to use a
	Lynx-specific script instead of m68kcoff.
	(OUTPUT_FORMAT): Define as "coff-m68k-lynx".
	(ENTRY): Define as __main.
	(TEXT_START_ADDR): Define as 0.
	(PAGE_SIZE): Define as 0x1000.
	* emulparams/i386lynx.sh, emulparams/sparclynx.sh: Fix comment.
	* scripttempl/m68klynx.sc: New file.

Mon Nov  8 12:00:16 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldmain.c (get_emulation): Ignore -mips1, -mips2 and -mips3
	arguments rather than treating them as emulation names.

Fri Nov  5 09:02:52 1993  D. V. Henkel-Wallace  (gumby@blues.cygnus.com)

	* configure.in: Support x86 unixware and netware plus generic netware.

Fri Nov  5 21:47:55 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* emulparams/i386mach.sh (TEXT_START_ADDR, NONPAGED_TEXT_START_ADDR):
	Correct values (?).

Wed Nov  3 15:10:15 1993  Ken Raeburn  (raeburn@rover.cygnus.com)

	* Makefile.in (distclean): Don't delete dvi or info files.
	(ld.info): Update dependency list.
	(ld.dvi): Ditto.  Extend TEXINPUTS to get bfdsumm.texi.

Wed Nov  3 12:07:39 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldlang.c (lang_add_output): Take new arg, FROM_SCRIPT.
	Set output_filename instead of creating a new node.
	(open_output): Don't set output_filename.
	(lang_final): Create the new node here.
	* ldlang.c, ldlang.h, ldgram.y, mri.c: pass FROM_SCRIPT.

Tue Nov  2 15:45:51 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

 	From Pete Hoogenboom (hoogen@cs.utah.edu):

	* scripttempl/hppaosf.sc: (___stack_zero, etext, _etext,
	edata, _edata, end): Add definitions of these symbols.
	(__end):  Remove definition of this symbol.
	(__data_start): Move definition of this symbol.

	* emultempl/hppaosf.em:  Various fixes and support for linker stub
	generation.
	(hppaosf_finish, hppaosf_search_for_padding_statements,
	hppaosf_create_output_section_statements): New functions in
	support of linker stub generation.
	(ld_hppaosf_emulation):  Redefine to include new
	emulation-specific routines.

	* ldlang.c (lang_process): Re-enable last call lang_size_sections.
	Pass abs_output_section rather than NULL to avoid invalidating
	absolute symbols.

Thu Oct 28 21:16:42 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* Makefile.in (ALL_EMULATIONS): Add em_i386mach.o.
	(em_i386mach.c): New rule.
	* configure.in (i[34]86-*-mach*): New case.
	* config/i386-mach.mt: New file.
	* emulparams/i386mach.sh: New file.

Fri Oct 29 14:55:05 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ld.h (flag_is_*): Removed macros.
	* ldmain.c (enter_global_ref), ldsym.c (write_file_locals):
	Consistently check the BFD symbol flags directly, rather than
	using file_is_* macros.

Thu Oct 28 19:08:42 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* configure.in (sparc*-*-lynxos*): New target.
	* Makefile.in: Add rule for em_sparclynx.c.
	(ALL_EMULATIONS): Add Lynx emulations.
	* config/sparc-lynx.mt: New file.
	* emulparams/sparclynx.sh: New file.
	* scripttempl/sparccoff.sc: New file.

Thu Oct 28 13:50:25 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in: Add dependency for $(EMULATION_OFILES).

Mon Oct 25 16:09:24 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* relax.c (write_relax): Check return value of bfd_seclet_link.

Mon Oct 25 09:31:21 1993  Ken Raeburn  (raeburn@cygnus.com)

	* ldlang.c (delete_output_file_on_failure): New variable.
	(open_output): Set it after bfd open succeeds.
	* ldmisc.c (vfinfo): Test it.

	Changes from Peter Hoogenboom, hoogen@cs.utah.edu:

	* ldsym.c (write_file_locals): Set the BSF_FILE flag for object
	symbols.

	* ldemul.c: Support was added to allow emulation-specific
	processing to occur.  This support was added primarily for linker
	stub generation in the elf32-hppa gld.
	(ldemul_finish, ldemul_create_output_section_statements):  New
	functions.
	* ldemul.h: Support was added to allow emulation-specific
	processing to occur. (As described above.)  Added finish and
	create_output_section_statements fields to
	ld_emulation_xfer_struct structure.
	* ldlang.c: Add calls to emulation-specific routines.
	(lang_process):  Add call to
	ldemul_create_output_section_statements function.
	(lang_process):  Add call to a emulation-specific routine (and
	some processing after the call).

Fri Oct 22 20:54:13 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* configure.in: mips*- instead of mips-, mips*el changes

Tue Oct 19 15:46:28 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in (alpha-*-osf*): New target; use alpha.mt.
	* Makefile.in (ALL_EMULATIONS): Added em_alpha.o.
	(em_alpha.c): New target; use alpha.sh and alpha.sc.
	* config/alphaosf.mh (NATIVE_LIB_DIRS, HOSTING_CRT0): Define.
	* config/alpha.mt: New file.
	* emulparams/alpha.sh: New file.
	* scripttempl/alpha.sc: New file.

Fri Oct 15 02:20:04 1993  Doug Evans  (dje@canuck.cygnus.com)

	* ldlang.c (lang_size_sections, lang_common): ALIGN_N can't handle
	types of different sizes (eg: 64 and 32 bits), so coerce.
	* ld.h (ALIGN_N): Add warning about usage.

Wed Oct 13 16:02:39 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldmain.c (enter_global_ref): Just ignore any weak symbol for
	which we already have a definition, rather than checking in
	several different places whether the symbol is weak.

Tue Oct 12 17:30:51 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in (mips-*-elf*): New target; use mipsb-elf32.
	* scripttempl/elf.sc: Only use OTHER_READONLY_SECTIONS and
	OTHER_READWRITE_SECTIONS if relocating.  Shell variables are not
	expanded within them.
	* config/mipsb-elf32.mt: New file.
	* emulparams/elf32mipb.sh: New file.
	* Makefile.in (em_elf32mipb.c): New target.

Thu Sep 30 17:00:36 1993  Rob Savoye  (rob@darkstar.cygnus.com)

	* ldgram.y: In input_list, change lang_input_file_is_file_enum to
	lang_input_file_is_search_file_enum so objects brought in using
	INPUT() do a path lookup.

Tue Sep 28 13:31:23 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* configure.in: Change Lynx ld_target to be {i386,m68k}-lynx
	instead of {i386,m68k}-coff.
	* Makefile.in (em_i386lynx.c, em_m68klynx.c): New targets.
	* config/i386-lynx.mt: New file.
	* config/m68k-lynx.mt: New file.
	* emulparams/i386lynx.sh: New file.
	* emulparams/m68klynx.sh: New file.

	* scripttempl/i386coff.sc: Make ENTRY get its value from ${ENTRY},
	but defaulting to _start.

	* ldemul.c, ldfile.c, ldlang.c, ldmain.c, ldmisc.c, ldmisc.h,
	ldsym.c, ldwarn.c: Rename info to info_msg, to avoid conflict with
	LynxOS libc.

Thu Sep 23 14:51:03 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/solaris2.mh: New file.  Define HOSTING_CRT0 and
	HOSTING_LIBS for testing.

Fri Sep 17 17:52:24 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Finish up support for i386-sysv4 (without shared libraries):
	* ld.h (flag_is_weak): Define.
	* ldlang.c (print_symbol): Mention whether symbol is weak.
	(print_input_section): Print weak symbols as globals.
	* ldmain.c (refize): Do not zero out BSF_WEAK flag.
	(enter_global_ref): Do not warn if a weak symbol redefines a
	global symbol.  Do not let a weak symbol redefine a common symbol.
	(enter_file_symbols): Treat weak symbols as global symbols.
	(subfile_wanted_p): Do not pull in an object file from a archive
	just to resolve an undefined weak symbol.
	* ldmisc.c (vfinfo): Don't needlessly malloc space after a fatal
	error; the error might be that malloc has run out of space.
	* ldsym.c (write_file_locals): Treat weak symbols as global.
	* configure.in (i[34]86-*-sysv4*, i[34]86-*-elf*): New targets;
	use i386-elf.
	* config/i386v4.mh: New file; set NATIVE_LIB_DIRS to /usr/ccs/lib.
	* config/i386-elf.mt: New file; set EMUL to elf_i386.
	* emulparams/elf_i386.sh: New file.
	* scripttempl/elf.sc: Use ${NOP} as filler (defaults to 0).
	* Makefile.in (NATIVE_LIB_DIRS): Define to be empty.
	(ALL_EMULATIONS): Add em_elf_i386.o.
	(GENSCRIPTS): Pass NATIVE_LIB_DIRS as sixth argument.
	(em_elf_i386.c): New target, like other em_*.c targets.
	($(LD_PROG)): Pass $(CFLAGS) to $(CC).
	* genscripts.sh: Accept NATIVE_LIB_DIRS as sixth argument.  If
	nonempty, and configured for native, add it to LIB_PATH.

Fri Sep 17 13:07:39 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* scripttempl/{h8300.sc,h8500.sc,i386coff.sc,m68kcoff.sc,sh.sc}:
	Added statements to pass stab and stabstr sections through and
	mark them as NOLOAD, which makes GDB happier.

Wed Sep 15 16:02:29 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* configure.in: Accept m68k-lynx-lynxos config.

	* Makefile.in: Use $(SHELL) to run genscripts.sh.

Sun Sep 12 16:04:40 1993  Doug Evans  (dje@cygnus.com)

	* config/coff-h8300.mt: Add EMUL=h8300h.

	* ldmain.c (main): Call set_scripts_dir after argv has been processed.

Fri Sep 10 09:36:29 1993  Jeffrey Wheat  (cassidy@cygnus.com)

	* Makefile.in: Changed CXX back to g++.

Fri Sep 10 09:34:29 1993  Jeffrey Wheat  (cassidy@cygnus.com)

	* Makefile.in: Fixed RUNTEST* CXX CXXFLAGS macros and check rule.

Fri Sep 10 07:26:57 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* Makefile.in (TAGS): Use shell wildcards.

Tue Sep  7 18:04:54 1993  Jeffrey Osier  (jeffrey@cygnus.com)

	* Makefile.in:  add TEXINPUTS variable and use it in ld.dvi target

Fri Sep  3 16:46:41 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* ld.texinfo: re-enable included config file; conditionalize doc
	for -oformat to interact properly with SingleFormat doc config
	var; rename @up/@down to @raisesections/@lowersections.

Wed Aug 25 16:29:56 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* configure.in: recognize m88110.

Tue Aug 24 18:49:40 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	From Peter Hoogenboom <hoogen@shafer.cs.utah.edu>:
	* emultempl/hppaosf.em (ld_hppaosf_emulation): Correct name for PA
	ELF emulation is "elf32-hppa" not "elf-big".
	(hppaosf_before_parse): Remove unneeded processing of environment
	variables.
	* scripttempl/hppaosf.sc: Include .hppa_linker_stubs sections in
	.text segment of output file.
	* emulparams/hppaosf.sh (OUTPUT_FORMAT): Use elf32-hppa.

Tue Aug 24 16:17:00 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* ld.h: define BYTE_SIZE, SHORT_SIZE, and LONG_SIZE which are no
	  longer in bfd.h.

	* ldlang.c, ld.h: updated copyright.

Tue Aug 17 15:22:03 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldlang.c (open_output, lang_check): Check return value of
	bfd_set_arch_mach.

Tue Aug 17 07:02:19 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* scripttempl/h8500.sc: Start all sections in a different segment.
	* scripttempl/z8ksim.sc: Handle constructors

Thu Aug 12 16:05:37 1993  Jeffrey Wheat  (cassidy@cygnus.com)

        * Makefile.in: revert earlier changes back to execute runtest
          with make check. cdtest and bootstrap now function as they
	  did within the Makefile.

Thu Aug 12 10:20:05 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* Makefile.in: 	Update dependencies.

	* configure.in: Set EMULATION_OFILES in Makefile based on
	--with-targets option.

Thu Aug 12 08:52:29 1993  Jeffrey Wheat  (cassidy@cygnus.com)

	* Makefile.in: check targets reimplemented to old way.

Wed Aug 11 08:26:11 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/i386v.mh, config/irix4.mh: Use gcc
	-print-libgcc-file-name rather than $(libdir)/libgcc.a.
	* config/i386sco.mh: New file; copy of i386v.mh to correspond to
	bfd/configure.host change.

Mon Aug  9 14:25:35 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* scripttempl/elf.sc: Handle .line and .debug* sections.

	* ldlex.l: Use bfd_scan_vma, not strtoul.

Fri Aug  6 08:57:39 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldexp.c, ldfile.c, ldlang.c, lexsup.c, ldmain.c, ldemul.c:
	Remove inital caps in some error messages, change "can't" to
	"cannot", add missing colons.
	* ldmisc.c (vfinfo): Print "%%" as a single %.
	For '%' followed by unrecognized character, print them both
	verbatim instead of expecting a char * arg.
	For '%C', don't put the function name in parens.

	* ldexp.c (invalid): Pass "%%", not "% ".

Fri Aug  6 14:31:22 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* scripttempl/mips.sc: Always define _ftext, _fdata, _fbss.
	(BSS_VAR): Removed; now always define _fbss.
	* emulparams/mipsidt.sh, emulparams/mipsidtl.sh (BSS_VAR):
	Removed.

Thu Aug  5 15:55:19 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* configure.in: z8k-coff is the same as z8k-sim

Wed Aug  4 21:00:18 1993  Jeffrey Wheat  (cassidy@cygnus.com)

	* testsuite/lib/ld.exp: new file
	* testsuite/config/unix-ld.exp: new file
	* testsuite/ld.bootstrap/bootstrap.exp: new file
	* Makefile.in: add dejagnu support for make check

Wed Aug  4 17:52:32 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldlex.l (comment): Add missing newline in message.
	* ldindr.c (add_indirect): Ditto.
	* ldexp.c (exp_fold_tree): Ditto.

Tue Aug  3 10:57:41 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldgram.y, ldlex.l, mri.c, ldwrite.c: Change multiple commons
	into externs.

	* ldmisc.c (multiple_warn): New function.
	* ldmisc.h: Declare it.
	* ldmain.c (enter_global_ref): Call it.
	* ld.h (ld_config_type): Add warn_common.
	* ldlex.l, ldgram.y: Set it with -warn-common option.
	* ldver.c (help): Document it.

Mon Aug  2 12:04:36 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* scripttempl/elf.sc: Add hooks for .sdata, .sbss, and
	target-specific sections, and for changing data section vma.

Mon Jul 26 14:00:02 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)

	* ldgram.y (OPTION_Qy, OPTION_Y, OPTION_dn, OPTION_YP): New
	terminals, for Solaris.
	(dirlist_ptr): New static variable.
	(command_line_option): Accept new options.

	* ldlex.l: Accept command-line options "-Qy", "-dn", "-Y", and
	"-YP,...".

	* config/sun4sol2.mt: Pass emulation name without ".sh".

	* emulparams/elf32_sparc.c: Renamed from elf32-sparc.c.
	* config/sun4sol2.mt (em_elf32_sparc.c): Adjusted accordingly.

Fri Jul 23 13:51:09 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* scripttempl/elf.sc: Add support for .init, .fini, .ctors,
	.dtors, .data1, .rodata1 sections, instead of combining them into
	other sections.  For `-r', set all section start addresses to
	zero.

	* emulparams/elf32-sparc.sh (TEXT_START_ADDR,
	NONPAGED_TEXT_START_ADDR): Value should be 0x10100.
	(MAXPAGESIZE): Renamed from PAGE_SIZE.

Wed Jul 21 14:28:42 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* genscripts.sh: If this is the default emulation, set
	COMPILE_IN.
	* emultempl/*.em: Use it to determine whether to compile in the
	scripts.

	* Makefile.in (GENSCRIPTS): Pass the default emulation name to
	genscripts.sh.  Pass the current emulation name without ".sh" on
	the end.
	* genscripts.sh: Take an default emulation arg.
	Use the current emulation name as EMULATION_NAME.
	Make default lib path for cross-compiling ':', not null.
	* emulparams/*.sh: Don't set EMULATION_NAME.
	* ldemul.c (ldemul_get_script): Take isfile arg.
	Pass it to emulation's get_script function.
	* ldemul.h: Adjust get_script prototypes.
	* ldfile.c (ldfile_find_command_file): Renamed from find_a_name.
	No longer static.
	* ldfile.h: Declare it.
	* ldgram.y: Accept a script on the command line again,
	for parsing compiled-in scripts.
	* ldmain.c (main): If ld script is a file, parse it as a -T
	option, otherwise parse it directly.
	* emultempl/*.em (*get_script): Return the scripts themselves if
	this is the default emulation; otherwise return their file names.
	* emultempl/m88kbcs.em: New file, to take m88kbcs #ifdef out of
	generic.em.
	* emulparams/m88kbcs.sh: Use it.

	* ld.h (ld_config_type::unix_relocate): Remove unused element.

Tue Jul 20 12:01:49 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* Makefile.in (ALL_EMULATIONS): Delete em_i386linux.o (for which
	there's no change log entry yet, tsk tsk) from the list of
	emulations compiled in until Mark gets around to checking in
	emulparams/i386linux.sh.
	(ldemul-list.h): Depend on Makefile, so if EMULATION_OFILES is
	changed, this file gets updated.

Fri Jul 16 14:14:32 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ldgram.y (OPTION_Lfile): New token.
	(command_line_option): Accept OPTION_L NAME (whitespace after -L).
	* ldlex.l (<COMMAND>): Accept -L without FILENAME.

Fri Jul 16 13:44:26 1993  Doug Evans  (dje@canuck.cygnus.com)

	* configure.in: h8/300h support needs own .mt file.
	config/coff-h8300h.mt: New file.

Thu Jul 15 12:44:35 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldmain.c: Don't include sys/stat.h; it already got included
	somewhere along the way.

Thu Jul 15 14:43:34 1993  Doug Evans  (dje@canuck.cygnus.com)

	* Makefile.in: Add h8300h support.
	emulparams/h8300h.sh: New file.
	scripttempl/h8300h.sc: New file.

Thu Jul 15 12:44:35 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldfile.c (ldfile_open_file): In error message, use the name the
	user gave (e.g., "-lc"), rather than the base file name.

	* ldexp.c (exp_fold_tree): Don't assign an int to an enum.

	* ldmain.[ch]: Remove initial Q_ from function names.
	* ldexp.c, ldindr.c, ldlang.c: Change callers.

	* ldfile.c, ldmain.c, ldgram.y: Rename option_v to trace_file_tries.

	* ldlang.c (lang_process): Move loading of default script from
	here to main.  Add a "/" to start of script name to prevent
	finding it in "." first.

	* ldmain.c (set_scripts_dir): Don't look in "." first.

	* ldgram.y, ldlang.c, ldsym.c: Remove traces of unused var
	option_longmap.

Thu Jul 15 10:55:59 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (em_m88kbcs.c): Correct dependency.
	* scripttempl/m88kbcs.sc: It's ARCH, not arch.  Removed TARGET
	statement.  Changed OUTPUT_FORMAT to use ${OUTPUT_FORMAT}.
	* emulparams/m88kbcs.sh: It's coff-m88kbcs, not m88kbcs.

Wed Jul 14 21:42:53 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldfile.c (ldlang_open_file, ldfile_open_command_file),
	main.c (main): Print the errno string in the error message.

Tue Jul 13 20:00:30 1993  Doug Evans  (dje@canuck.cygnus.com)

	* configure.in: Accept h8300h for target cpu.

	* ldmisc.c (vfinfo): Have demangle remove leading underscore if
	present (demangle is smart enough to know whether to do it or not).

Mon Jul 12 11:45:48 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldmain.c (set_scripts_dir): Check . and <ld bin dir>/../lib for
	ldscripts, as well as <ld bin dir> and SCRIPTDIR.

	* ldlang.c (lang_process): Use sizeof instead of magic constant.

	* ldmain.c (get_emulation, check_for_scripts_dir,
	set_scripts_dir):  New functions.
	(main): Call them.

Mon Jul 12 10:57:03 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)

	* scripttempl/elf.sc: Include .init, .fini, .rodata sections.
	Create symbol "end" instead of "__end".  Comment out some parts
	that may not be needed (yet) for elf.

	* configure.in: Accept sparc-elf and sparc-solaris2 configs.

Thu Jul  8 15:33:32 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* Makefile.in (ALL_EMULATIONS): Include $(OTHER_EMULATIONS).

	* ldmisc.h (einfo, minfo, info): Don't bother with PARAMS macro
	when no prototype is being supplied.
	(ldmalloc, ldrealloc): Size argument is now size_t.

	* ldmisc.c (finfo): New function, accepts FILE* argument.
	(vfinfo, case 'v'): New format character; displays bfd_vma in hex
	without leading zeros.
	(vfinfo, cases 'R' and 'C'): Use finfo(%v) when displaying a
	bfd_vma value, instead of fprintf(%x) which won't hold a long long
	value.
	(concat, buystring): String lengths are size_t.
	(ldmalloc, ldrealloc, xrealloc): Size argument is now size_t.

	* ldlang.c (new_statement): Size argument is now size_t.  Added
	forward declaration with prototype.

Thu Jul  8 10:53:47 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldgram.y (OPTION_v): Don't turn on verbose output.

Wed Jul  7 17:10:45 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* ldlex.l: Get rid of local typedef for bfd_vma!  Get it from
	bfd.h instead.

Wed Jul  7 11:33:12 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (install): Don't install as $(tooldir)/bin/gld;
	collect2 doesn't look for gld any more anyhow.

Mon Jul  5 14:29:48 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ldlang.c (lang_relocate_globals): Skip indirect symbols, which
	now have a non NULL srefs_chain.

	* config/hp300hpux.mt: Use emulation hp3hpux rather than
	hp300hpux, since the latter does not exist.

Fri Jul  2 18:06:05 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* genscripts.sh: Put the scripts in the ldscripts directory, not
	emulations.
	* configure.in (ldscripts): Make, instead of emulations.
	* Makefile.in (scriptdir): Take off the "ld" part.
	(install, clean, distclean): Use ldscripts, not emulations.
	In tests, don't pass -Lemulations.
	Don't pass tooldir/lib to genscripts.sh.
	* genscripts.sh: Don't take tooldir/lib arg.
	* ldlang.c (lang_process): Add "ldscripts/" to the name of the
	default script file.

Fri Jul  2 17:13:35 1993  Doug Evans  (dje@canuck.cygnus.com)

	* scripttempl/h8300.sc: Add .tors section for constructor/destructors.

Thu Jul  1 16:38:45 1993  Doug Evans  (dje@canuck.cygnus.com)

	* config/coff-h8300.mt: EMUL=h8300hms -> h8300.

Wed Jun 30 15:45:55 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* Makefile.in (.y.c): skip default .y.c rules. gnu make can now
	  run in parallel without colliding on yacc's static file names.
	  Without the stub rule, make will try to start two yacc's
	  concurrently which fails because of yacc's static file names.

Tue Jun 29 12:20:36 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ldmain.c (subfile_wanted_p): Don't dump core if there are no
	symbols.

Mon Jun 28 12:22:11 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* genscripts.sh (LIB_PATH): Only add /usr/local/lib if it's
	different from libdir.

	* Makefile.in (scriptdir): Base on tooldir, not datadir.

Sat Jun 26 12:03:57 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldver.c (help): New function.
	* ldver.h: Declare it.
	* ldlex.l, ldgram.y: Recognize new options --help and --version.

Mon Jun 21 20:39:48 1993  Ken Raeburn  (raeburn@poseidon.cygnus.com)

	* Makefile.in (INCLUDES): Don't need ../include any more.

Mon Jun 21 16:38:35 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldlex.l, ldgram.y: Support new -oformat option.
	Remove attempt at supporting script fragments on the command line.
	* ldlang.c (lang_add_output_format): Take new arg, FROM_SCRIPT.
	* mri.c (mri_format), ldgram.y: Change callers.
	* ldlang.h: Change prototype.

Thu Jun 17 16:53:56 1993  david d `zoo' zuhn (zoo@cygnus.com)

	* Makefile.in: canonicalize install.sh; for use within
	this directory (and subdirs)

Thu Jun 17 14:33:09 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldgram.y: Tweak grammar to make reporting of invalid options work.

	* Makefile.in (.cc.o): Restore .SUFFIXES entry for .cc
	and .cc.o rule.

Wed Jun 16 11:45:32 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldfile.c (ldfile_open_command): Don't try .ld extension.
	It wasn't documented (or likely used) and wastes time.
	(try_open): If EXTEN is empty, don't try it.

	* ldctor.c, lderror.c, ldexp.c, ldfile.c, ldindr.c, ldlang.c,
	ldlex.l, ldmain.c, ldmisc.c, ldsym.c, ldver.c, ldwarn.c,
	ldwrite.c, lexsup.c, mri.c, relax.c: Replace DEFUN macro calls
	with normal function declarations.

	* Move *.em to emultempl/*.em.  Move *.sh to emulparams/*.sh.
	Move *.sc-sh to scripttempl/*.sc.
	* {emultempl,emulparams,scripttempl}/README: New files.
	* sh.em, st2000.em, z8ksim.em, h8300hms.em, h8500hms.em: Files
	removed, replaced with generic.em.
	* h8300.sh, h8500.sh, h8300.sc, h8500.sc: Renamed from
	 h8[35]00hms.s[ch].  Change their contents to omit the "hms".

	* *.em (*_get_script): Return script name instead of script contents.
	* ldlang.c (lang_process): Change caller.

	* ldlex.l, ldgram.y: Recognize -m option.
	Check for input files after *all* options in grammar.
	* ldmain.c (main): Check for -m options.  Add default directory
	for -m.

	* mkscript.c: File removed.
	* genscripts.sh: Take two more parameters, tooldirlib and libdir,
	to add to the default LIB_PATH.
	Look for input files in the new subdirectories.
	Create the scripts in emulations subdirectory and don't filter
	them through mkscript.
	* configure.in: Make the emulations subdirectory.

	* Makefile.in: Account for all of the above changes.
	Remove unused .SUFFIXES.  Get libgcc.a path with gcc
	-print-libgcc-file-name instead of $(libdir)/libgcc.a.
	Put CFLAGS last in the compilation rules.
	Add -I../bfd to INCLUDES so sysdep.h is found.

Tue Jun 15 23:04:46 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* Makefile.in (INCLUDES): Look in ../include, not ../bfd.

	* aout.sc-sh: Add SHLIB_PATH like STACKZERO.  Make STACKZERO
	dependent on RELOCATING, not RELOCATION.
	* hp3hpux.sh (SHLIB_PATH): Define it.

Mon Jun 14 19:06:15 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ldfile.c (try_open): If opening without the extension fails,
	try with the extension even if -v or -V was given.
	had_script is imported (from ldgram.y), not exported.

Mon Jun 14 16:26:10 1993  david d `zoo' zuhn  (zoo at rtl.cygnus.com)

	* Makefile.in: remove parentdir support, use INSTALL_XFORM

Thu Jun 10 14:00:06 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ldexp.c (exp_fold_tree): Don't lose the old flag bits.
	* ldgram.y (statement_list_opt): New nonterminal, either empty or
	statement_list.
	(section): Use statement_list_opt, not statement_list.
	* m68kcoff.sc-sh: Gather constructors and destructors and define
	__CTOR_LIST__ and __DTOR_LIST__ appropriately.
	* sa29200.sc-sh: Gather constructors and destructors and define
	___CTOR_LIST__ and ___DTOR_LIST__ appropriately.

Mon Jun  7 12:53:28 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in (INCLUDES):  Add -I../bfd for sysdep.h and bfd.h.
	* configure.in:  No longer need to configure to get sysdep.h.

Fri Jun  4 16:18:24 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: remove install:all and install-info:info
	dependencies (these cause some spurious rebuilds at 'make install'
        time)

Fri Jun  4 08:50:14 1993  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in (mips-idt-ecoffl*): New target; use mips-idtl.
	(mips-idt-ecoff*): Added trailing '*'.
	* config/mips-idtl.mt: New file; use EMUL of mipsidtl.
	* mipsidtl.sh: New file; like mipsidt.sh, but little endian.
	* Makefile.in (ALL_EMULATIONS): Added em_mipsidtl.o.

	* config/sun3.mh (HOSTING_LIBS, HOSTING_EMU): Removed obsolete and
	incorrect definitions.

Tue Jun  1 14:56:10 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* ldsym.c (write_file_locals):  Write BSF_CONSTRUCTOR
	symbols, unless stripping.

Tue May 25 15:34:25 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: configure looks for ####, so remove lines with many
	'#' characters.
	* config/irix4.mh, config/i386v.mh: New files; set HOSTING_CRT0
	and HOSTING_LIBS correctly so that ``make check'' will work.

Thu May 20 13:56:16 1993  Per Bothner  (bothner@deneb.cygnus.com)

	* mips.sc-sh:  Define _etext, _edata, and _end, in addition
	to etext, edata, and end.  Needed for IRIX 4.0.5F.
	Patch from mwp@iconix.oz.au (Michael Paddon).

	* Version 2.2.1 released.

Thu May 20 11:42:06 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* mipsbsd.sc-sh: Renamed from aout-mipsbsd.sc-sh.
	* mipsbsd.sh (EMULATION_NAME): Use new file name.

Tue May 18 17:10:24 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* Makefile.in (LDDISTSTUFF): Remove ld.mm since we can't build it
	properly right now.

	* Version 2.2 released.

Mon May 17 15:37:28 1993  Ken Raeburn  (raeburn@deneb.cygnus.com)

	* ldver.c (ldversion): Bump version number to 2.2.

Mon May 17 12:44:31 1993  Per Bothner  (bothner@cygnus.com)

	* NEWS:  New file.

Fri May 14 11:26:24 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips.sc-sh: Don't define BSS_VAR unless relocating.

Wed May 12 13:33:29 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (mkscript.o, mkscript): Build mkscript via
	mkscript.o, rather than directly from mkscript.c.

Tue May  4 21:58:56 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* configure.in: Look for ${target_makefile_frag} relative to
	${srcdir}, not relative to build directory.

	* hppaosf.em, hppaosf.sc-sh, hppaosf.sh: New files.
	* configure.in: Recognize hppa*-hp-osf.
	* Makefile.in (ALL_EMULATIONS): Include hppaosf emulation.
	(em_hppaosf.c): Build it.
	* config/hppaosf.mh, hppaosf.mt: New files.

	* ld.h (ALIGN_N): Renamed from ALIGN, because that conflicted with
	some system header files.  All uses changed.

	* configure.in: Recognize i386-aix configurations as i386-coff
	targets.

	* configure.in: Recognize m68*-*-hpux.
	* aout.sc-sh: If STACKZERO and RELOCATING are both defined, output
	the value of STACKZERO.
	* Makefile.in (ALL_EMULATIONS): Include hp300-hpux emulation.
	(em_hp3hpux.c): Build it.
	* hp3hpux.sh, config/hp300hpux.mt: New files.

Tue May  4 12:37:35 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips.sc-sh: Put constructors in the .data section.
	* Makefile.in (cdtest): Added dependency on ld.new.

Mon May  3 19:43:39 1993  Per Bothner  (bothner@cygnus.com)

	* Makefile.in:  Change definition of $(tooldir) to match FSF.
	* vax.sh, config/vax.mt, configure.in, Makefile.in:
	Support VAX Ultrix and BSD.

Mon Apr 26 18:35:47 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* sh.em, sh.sh, sh.sc-sh: New files supporting Hitachi SH.

Wed Apr 14 21:01:51 1993  John Gilmore  (gnu@cygnus.com)

	* ldlang.h (struct memory_region):  Change `length' and
	`old_length' fields to bfd_size_type.  Eliminate use of bfd_offset.
	* ldlang.c, mri.c:  Corresponding changes, plus lint.

Thu Apr  8 22:08:18 1993  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in: For all i386 targets, accept i486 as well.

Mon Apr  5 17:33:39 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ldlang.c (wild_doit): Preserve all flags for a
	SEC_SHARED_LIBRARY section.
	(size_input_section): Consider any SEC_HAS_CONTENTS section when
	computing largest_section.

Fri Apr  2 14:33:52 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ldlang.c (lang_output_section_statement_lookup): Initialize all
	fields of newly created structure.

Wed Mar 31 18:19:15 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ldmain.c (g_switch_value): New variable.
	* ldgram.y (OPTION_G, OPTION_Gval): New tokens.
	(command_line_option): Accept -G and set g_switch_value.
	* ldlex.l (COMMAND): Accept -G.
	* ldlang.c (open_output): Call bfd_set_gp_size on new BFD.

Tue Mar 30 09:40:25 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	Support for linking and loading at different places:

	* ldlex.l: Add "AT" keyword.
	* ldgram.y: Cleanup, and parse AT.
	* ldlang.c (print_output_section_statement): Print output address
	of section in map. (lang_size_sections): Fill sections' lma with
	load address.
	* ldlang.h (lang_output_section_statement_type): Add load_base
	information.

	* ldindr.c (add_indirect): Keep more information in the alias
	symbol chain.
	* ldlang.c (wild_doit):  Don't inherit NEVER_LOAD section
	attribute from an input section.
	* ldmain.c (Q_enter_file_symbols): Common section is NEVER_LOAD by
	default. (Q_enter_file_symbos): Indirect symbols now are known by
	their section, not a special symbol flag.
	* ldsym.c (write_file_locals): Indirect symbols aren't local.
	(write_file_globals): Write the mapping for an indirect symbol.
	* relax.c (build_it): When forced to write a NEVER_LOAD section,
	fill it with zeros.

Tue Mar 23 13:24:10 1993  Jeffrey Osier  (jeffrey@fowanton.cygnus.com)

	* ld.texinfo:  changes for q1

Tue Mar 23 00:13:29 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: add dvi target, define & use TEXI2DVI, add installcheck

Mon Mar  8 20:30:35 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: rename HOST_CC to CC_FOR_BUILD

Thu Mar  4 12:44:33 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips.sc-sh: Added variables which may be overridden by a
	specific emulation.
	* mipsidt.sh: New file; emulation for IDT MIPS board.
	* Makefile.in (ALL_EMULATIONS): Added em_mipsidt.o.
	(em_mipsidt.c): New target.  Uses mipsidt.sh and mips.sc-sh.
	* config/mips-idt.mt: New file; sets EMUL to mipsidt.
	* configure.in (mips-idt-ecoff): New target; uses mips-idt.

Sat Feb 27 00:00:14 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* aout-mipsbsd.sc-sh, mipsbsd.sh: New files from Ralph Campbell,
	ralphc@pyramid.com.
	* i386bsd.sh, config/i386bsd.mt: New files.
	* configure.in, Makefile.in: Added support for mipsbsd and 386bsd.

Thu Feb 25 15:33:10 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* mri.c:  Add extern declaration of strdup.
	* ldsym.c (KEEP macro):  Add spaces around '=' for the
	sake of old (e.g. PCC) compilers.

Wed Feb 24 19:49:31 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* ldver.c:  Bump to version 2.1.

Fri Feb 12 08:09:11 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldgram.y: allow section types without address  expressions.
	* ldlang.c (lang_relocate_globals): avoid possible hang with
	undefined but unreferenced symbols.
	* relax.c (relax_section): don't complain if the script file isn't
	relaxable but -relax is set

Thu Feb 18 17:58:45 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: go32 is the 3rd part of the triple, not the 2nd

Wed Feb  3 09:05:56 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mipsbig.sh: New file.  Big endian MIPS emulation.
	* config/mips-big.mt: New file.  Use mipsbig emulation.
	* configure.in (mips-sgi-irix*): Use target mips-big.
	* Makefile.in (ALL_EMULATIONS): Added em_mipsbig.o.
	(em_mipsbig.c): New target.  Uses mipsbig.sh.

Tue Feb  2 11:32:27 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips.sc-sh: Put .scommon sections into .sbss section.

	* ldmain.c (subfile_wanted_p): Preserve section of common symbols,
	rather than always putting them in bfd_com_section.
	* ldlang.c (lang_common): If a common symbol is not in
	bfd_com_section, put in a section of the same name, rather than
	always putting it in section COMMON.

Fri Jan 29 09:57:58 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ldmain.c (subfile_wanted_p): If we already have a common
	definition of a symbol, don't necessarily pull in an object file
	that provides a non-common definition.

	* ldlex.l (COMMAND): Accept -EB and -EL command line arguments,
	returning OPTION_EB and OPTION_EL.  gcc passes these to a MIPS
	linker.
	* ldgram.y (OPTION_EB, OPTION_EL): New tokens.
	(command_line_option): Accept and ignore OPTION_EB and OPTION_EL.

Thu Jan 28 15:12:04 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (install): Remove $(tooldir)/bin/gld before creating
	the link to it.

Tue Jan 26 11:49:50 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ldmain.c, ldsym.c: Use new bfd_is_com_section macro rather than
	checking for equality to bfd_com_section.

Fri Jan 22 14:22:44 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips.sc-sh: New file.  Ultrix, and hopefully other MIPS ECOFF
	targets, linker script.
	* mipslit.sh: New file.  Little endian MIPS emulation.
	* config/mips-lit.mt: New file.  Use mipslit emulation.
	* configure.in (mips-dec-ultrix*): Use target mips-lit.
	* Makefile.in (ALL_EMULATIONS): Added em_mipslit.o.
	(em_mipslit.c): New target.  Uses mipslit.sh.

Thu Jan 14 15:30:27 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (install): Install ld as both $(tooldir)/bin/ld and
	$(tooldir)/bin/gld, so that gcc can find it with or without
	collect2.

Mon Jan 11 18:50:07 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ldwrite.c: Removed perform_relocation, copy_and_relocate, and
	write_norel.  All linking is now done via write_relax.  Call
	ldsym_write before calling write_relax.
	* relax.c: Added copyright.
	(write_relax): Renamed from write_relaxnorel.  Added relocateable
	argument.  seclet_dump renamed to bfd_seclet_link.
	* relax.h: Added copyright.

Mon Jan 11 15:41:56 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldmain.c (decode_library_subfile): Patch from
	hoogen@shafer.cs.utah.edu, don't reread library symbol tables.

Fri Jan  8 18:04:33 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* config/vxworks960.mt renamed to config/i960.mt

	* configure.in: sparc-aout emulates a sun4, as does
	sparc*-vxworks, i960-nindy uses gld960 emulation

Fri Jan  8 14:39:07 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	 Fix support for NOLOAD, add INCLUDE
	* ldfile.c (ldfile_open_command_file): pass file name to
	lex_push_file.
	* ldlex.l, ldgram.y: tidy up, parse INCLUDE and NOLOAD
	* ldlang.c (wild_doit): make output sections inherit NEVER_LOAD
	attribute.

Thu Jan  7 10:22:19 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in, config.h: no more default emulation.  Make the lack
	of emulation a compile time error

Wed Jan  6 01:08:37 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: recognise all sparclite variants, not just 'sparclite'

Mon Dec 28 11:15:35 1992  Ian Lance Taylor  (ian@cygnus.com)

	* m68kcoff.sc-sh: define _end as well as end, for consistency with
	aout.sc-sh.

	* configure.in: accept *-ericsson-ose for any m68k CPU.

	* ldwrite.c (write_rel): don't always set SEC_HAS_CONTENTS flag
	for each output section.

Mon Dec 21 16:06:59 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* ldexp.c, ldlang.c, ldmain.c, ldsym.c, ldwarn.c:  Use new
	macro bfd_asymbol_bfd as appropriate.
	* Makefile.in:  Un-duplicate ldlex.c dependency.
	* condigure.in:  Replace my_host case table by sourcing
	../bfd/configure.host.  Allow std-host as the default.
	* ldmisc.c:  Change logic for C++ name demangling:  There is
	no initial '_' to remove from stab-derived function names.

Sun Dec 13 16:31:26 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldlang.c (lang_init_script_file): don't attach the output file
	sections to the script file.

Wed Dec  9 08:38:05 1992  Steve Chamberlain  (sac@thepub.cygnus.com)
	* ldlang.c (wild): run expansion loop over command line bfd too.
	(lang_ini_script_file): initialize more parts of the command line
	bfd.
	* ldlex.l: fix DEFINED start states.

Mon Dec  7 08:43:41 1992  Steve Chamberlain  (sac@thepub.cygnus.com)
	 -y support
	* ld.texinfo: new doc.
	* ldgram.y, ldlex.l: understand -y<symbol>
	* ldmain.c (Q_enter_file_symbols): if had -y, lookup symbol and
	print info. (add_ysym): new function.
	* ldsym.h: (ldsym_type): new define SYM_Y.

Sat Nov 21 03:15:27 1992  John Gilmore  (gnu@cygnus.com)

	* ldctor.h, lderror.h, ldexp.h, ldfile.h, ldindr.h, ldlang.c,
	ldlang.h, ldlex.h, ldmain.h, ldmisc.h, ldsym.h, ldver.h, ldwarn.h,
	ldwrite.h, relax.h:  Replace all uses of EXFUN and PROTO ansi-glue
	macros with PARAMS.  Recreational cleanup.  Update copyrights.

Tue Nov 10 00:23:37 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: pass down the bfd source directory for includes

Thu Nov  5 15:41:55 1992  Ian Lance Taylor  (ian@cygnus.com)

	* ldlang.c (lang_size_sections): don't change size and address for
	SEC_SHARED_LIBRARY sections rather than for SEC_NEVER_LOAD
	sections.

Thu Nov  5 11:33:57 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* relax.c (build_it): re-enable the processing of data_statements
	in scripts, makes counted contructor lists work again.

Thu Nov  5 05:43:01 1992  John Gilmore  (gnu@cygnus.com)

	* ldemul.h:  Remove uses of SDEF and PROTO macros (use PARAMS).

Tue Oct 20 10:56:06 1992  Ian Lance Taylor  (ian@cygnus.com)

	* m68kcoff.sc-sh: don't use initial underscores for etext, edata
	and end.

Mon Oct 19 09:45:38 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Support for i386-sysv.
	configure.in: check for i386-*-sysv* and i386-*-sco*.
	i386coff.sc-sh: rewrote to support SVR3 by default.
	ldctor.c (find_constructors): preserve stat_ptr.
	ldlang.c (wild_doit): initialize vma and size of new output
	section to corresponding input section.  This is required for
	shared library support.
	(lang_size_sections): don't modify vma and size of sections which
	are never loaded (for shared libraries).
	ldwrite.c (copy_and_relocate): copy the contents of any section
	which has contents, not just sections which are loaded (for shared
	libraries).

Thu Oct 15 15:20:26 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldlang.c (size_input_section): count the sizes of all sections
        we allocate.

Thu Oct  8 09:05:25 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldmisc.c (demangle,vfinfo): use the new underscore in bfd to
	to demangle symbols better

Tue Oct  6 13:08:54 1992  Ian Lance Taylor  (ian@cygnus.com)

	* ldlang.c (lang_finish): don't warn if -e start symbol does not
	exist when linking with -r.

Mon Oct  5 14:07:37 1992  Ian Lance Taylor  (ian@cygnus.com)

	* aout.sc-sh, m68kcoff.sc-sh: set __bss_start to the start of the
	.bss segment.

Mon Oct  5 08:55:14 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldmain.c (linear_library): don't even think about processing
	an object file if it's already been done

Thu Oct  1 23:14:59 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: the hp9000/300 config file is now hp300

Wed Sep 30 07:34:09 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/z8ksim.mt: new file

Fri Sep 25 13:49:52 1992  Ken Raeburn  (raeburn@kyriath.cygnus.com)

	* Makefile.in (ldexp.o, ldctor.o, ldlang.o, ldmain.o, ldwrite.o,
	lexsup.o, mri.o, relax.o): Indicate dependence on ldgram.h.

	* ld.h (strip_symbols_type): Add value STRIP_SOME.
	* ldgram.y (OPTION_RETAIN_SYMBOLS_FILE): New terminal token.
	* ldlang.c (lang_add_keepsyms_file): New function.
	* ldlex.l: Handle "-retain-symbols-file".
	* ldsym.c (keepsyms_file, kept_syms): New vars.
	(process_keepsyms): New functihon; reads file, marks symbols for
	saving.
	(write_file_locals): File symbols should always be kept.
	(ldsym_write): Warn about "-retain-symbols-file" overriding "-S"
	and "-s".  Process retain-symbols file before setting symtab.
	* ldsym.h (SYM_KEEP): New flag for ldsym_type flags.
	(keepsyms_file, kept_syms): Declare them.

	* ldmain.c (main): Non-fatal errors should still cause non-zero
	exit status even with -r.

Fri Sep 25 11:08:01 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	Added initial support for the z8k
	* z8ksim.em, z8ksim.sc-sh, z8ksim.sh: new files
	* configure.in, Makefile.in: modified to reflect above

	* ldlang.c (lang_check): when linking conflicting architectures,
	make the output file reflect at least one of the bad inputs.

Tue Sep 15 15:35:38 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (install): if $(tooldir) exists, install ld in
	$(tooldir)/bin.

Fri Sep 11 10:24:22 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* Makefile.in, configure.in: modified to support i386-coff
	* i386coff.sh: new file

Wed Sep  9 11:52:58 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in, m68kcoff.sh, m68kcoff.sc-sh, config/m68k-coff.mt:
	added m68k-coff emulation mode, stolen from a29k emulation.
	Almost certainly wrong, but perhaps better than sun3.

Thu Sep  3 14:19:30 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in, Makefile.dos, generic.em, genscripts.sh,
	gld960.em, h8300hms.em, h8300xray.em, lnk960.em, st2000.em,
	vanilla.em:  Rename all (generated) ld__*.c files to em_.c.
	This is one character shorter, and lets people build on
	SVR3 system. (ld__h8300xray.[co] was the killer there;
	h8300xray.sc-sh is also overlong, but seems harmless.)
	Based on a patch from Jonathan Ryshpan <hitachi!amito!jon>.
	* Makefile.in (clean):  Fix typo mostclean -> mostlyclean.
	* configure.in:  Add host isc.

	* ldver.c:  Call it version 2.0.

Wed Sep  2 00:21:33 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* ldver.c:  Bump to version 0.98.
	* TODO:  New file.

	* Makefile.in:  Added mostlyclean, distclean, realclean rules.

Tue Sep  1 23:42:16 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* ldmisc.c (xrealloc):  New (needed by ../libiberty/cplus.dem.c).
	* ldlex.l: Moved comment() to end, since some compilers
	otherwise have problems with input() used before it is defined.

Tue Sep  1 17:45:51 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: added Solaris 2 and Irix 4 host support.

Mon Aug 31 19:27:11 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: remove -S flag from the FLEX definition

	* configure.in: rewrote, using new style case statement.  use
	m68k.mt for m68k-aout systems

Sun Aug 30 21:38:53 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: map "ld" through program_transform_name when
	installing.

Sun Aug 30 18:12:13 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* cplus-dem.c:  Removed.  Use the version in libiberty now.
	* ldmisc.c:  Use new libiberty version of cplus_demangle().

Thu Aug 27 16:38:42 1992  Ian Lance Taylor  (ian@cygnus.com)

	* gld960.em (gld960_choose_target): default to little endian, not
	big endian.

Wed Aug 26 17:28:51 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldlang.c (lang_process): don't pass null pointers when
	abs_output_section is what is required.
	* ldwrite.c (ldwrite): use malloc to allocate the largest space
	used, and pass that down.
	* relax.c,relax.h (write_relaxnorel): use the passed malloc area rather
	than alloca.

Mon Aug 24 14:42:06 1992  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in, config/ose68.mt: renamed OSE to ose.

Thu Aug 20 19:55:22 1992  Ken Raeburn  (raeburn@cygnus.com)

	* ldsym.c (write_file_locals): Reorder check for common or
	undefined symbols so that it works.

Tue Aug 18 13:41:36 1992  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in: accept all m68K family members.

	* Makefile.in: always create installation directories.

Thu Aug 13 11:49:34 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldlex.l: now parses comment correctly, added ~ to acceptable
	chars in filenames

	* ldexp.c (exp_unop): pass down abs_output_section - now can have
	unary -ve constants.

	* ldlang.c (lang_finish): warn when an entry symbol supplied on
	the command line can't be found.

Fri Aug  7 12:31:10 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldlang.h: add new field "loadable" to output_section_statement.
	* ldlang.c (lang_output_section_statement_lookup): initilize new
	field. (wild_doit): if new field is not set, then stop output
	section from being loadable.
	(lang_enter_output_section_statement): set the field from the
	NOLOAD keyword
	* ldgram.y: new synax for NOLOAD. Removes a shift/reduce too.
	* h8300hms.sc-sh, h8300hms.em: get -r right.

Thu Aug  6 18:35:21 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* ldint.texinfo:  New internals manual (beginnings thereof).
	* PORTING:  Removed, merged into ldint.texinfo.

Tue Aug  4 21:12:29 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* cdtest-main.cc, cdtest-func.cc, cdtest-foo.h, cdtest-foo.cc,
	cdtest.exp:  A test program (copied from libg++/test-install)
	that tests that constructor and destructors are handled
	corrrectly.

Mon Aug  3 14:58:19 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in (install): install from ld.new, renaming during the
	copy, or else the next 'make install' needs to re-link ld.

Mon Jul 20 03:37:06 1992  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* configure.in: generalise hp recognition (from sef).

Sat Jul 18 14:46:04 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: recognize bsd and hpux hppa configurations.
	error messages echo to stderr, not stdout

Fri Jul 17 22:06:11 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.dos, gld.1, ld.texinfo, ldemul.c, ldfile.c, ldlang.c,
	  ldmisc.c: removed rcsid's.

Tue Jul 14 08:34:34 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldlang.c (lang_map): print changes in sizes due to relaxing
	(size_input_section): maintain the delta information.
	* ldlang.h: add new field to struct to contain delta info.
	* relax.c  (relax_section): complain if input not relaxable.
	* ldlex.l : add '_', ',' and '$' to chars which can appear at the
	start of a filename

Mon Jul 13 17:33:00 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldmain.c(main): prevent -r and -relax from being on at the same
	time.

Wed Jul  1 17:51:19 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldmain.c (Q_enter_global_ref), ldindr.c (add_indirect): fix for
	aliasing problems


Thu Jun 18 09:38:56 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* h8300hms.em, h8300hms.sc-sh:  do the right thing for -r
	* ldexp.c:  lint
	* ldlang.c(open_output): set the target arch and machine as soon
	as we can. (lang_size_sections): use new macros for setting vma
	* ldwrite.c: lint

Mon Jun 15 08:47:43 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* configure.in (my_target): Accept m680?0 for wrs as vxworks68.
	Also deleted an unreachable path to wrs.

Wed May 27 23:24:19 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* Makefile.in (install): use -d test for $tooldir before
	installing ld there so that $tooldir can be inherited from
	top-level Makefile.

Wed May 27 16:56:48 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* ldlang.c:  Two non-substantial changes for the sake of
	the old Portable C Compiler.

Wed May 27 15:15:58 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

        * ldgram.y, ldlex.l: parse ABSOLUTE
	* ldexp.c: add support for ABSOLUTE

Wed May 27 13:07:20 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in:  Added default definitions for HOSTING_CRT0,
	HOSTING_LIBS, and HOSTING_EMU, based on those in config/*.mh.
	* config/*.mh:  Miscellaneous clean-up:  Removed definitions
	of YACC (since it is not longer used in the Makefile).
	Remove HOSTING_* definitions that are subsumed by the
	ones added to Makefile.in.  Removed most definitions of CC.
	* config/{sparc,news,hp300bsd,decstation}.mh:  Removed;
	These are no longer needed.

Fri May 22 13:47:19 1992  Per Bothner  (bothner@cygnus.com)

	* Makefile.in:  Use srcdir instead of VPATH in ldgram/ldlex
	rules, since these are used when building a distribution.
	* Makefile.in (ldlex.c):  Don't re-direct output, since that
	leaves a bogus output files if it fails.

	* config/sparc.mh:  Fix HOSTING_LIBS so it has a chance of working.
	* ldlex.c:  Fix some unnecessary flex-specific-isms.

Fri May  8 11:49:43 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldgram.y: move spurious semicolon
	* ldexp.h: fix prototype

Thu May  7 17:01:12 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* ld.texinfo: references to linker now say "ld" not "gld".

Wed May  6 13:26:19 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	changed calling convention for Q_enter_global_ref
	* ldexp.c, ldlang.c, ldmain.c: reflect this
	* ldver.c: bump version to 1.97.1
	* ldindr.c (add_indirect): when an edict declaring an indirect
	symbol is found, make sure that any ideas about the symbol being
	common are changed if it now known to be defined.
	* ldmain.c (linear_library): complain once if archive isn't
	ranlibbed.
	* ldlang.h, ldlang.c: make room for and initialize the complain
	once field.

Wed May  6 11:07:35 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: use flex & bison from ../ if they exist.

Tue May  5 17:47:33 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* relax.c (build_it): don't allocate space in the output file for
	stuff if -R flag applys to it.
	* ldfile.c: merge in VMS filename support
	* ldmain.c (main): take out ./ from library path, and close file
	before unlinking. Make multiple defs of a symbol create an
	unexecable file.
	* ldmisc.c: fatal errosrs delete output file

Tue May  5 14:05:05 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* ldver.c:  Increase version number to 1.97, for consistency
	with ../binutils.

Tue May  5 12:12:24 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: FLEX -> LEX.

	* ld.texinfo: {} -> @{@}.

Mon May  4 17:52:41 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* ld.texinfo: describe alternate, MRI-compatible linker scripts
	(and associated change in -c option, now used for these scripts)

Mon May  4 16:10:10 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldver.c: Bumped version to 1.96 - new release, resync with the
	bfd too #.
	* ldexp.c, ldlang.c: now build memory shape tree in obstacks
	rather than with raw malloc, makes it easier to track where memory
	is going.
	* ldsym.h, ldsym.c: create obstack for all global symbols too.
	* ldwrite.c (ldwrite): moved malloc so only used when needed.
	* sa29200-sc.sh: added support for .lit, data1 and data2 sections.


Fri May  1 18:17:52 1992  K. Richard Pixley  (rich@cygnus.com)

	* config/sparc.mh: use ../gcc/libgcc.a on check if it exists.

	* Makefile.in: use bootstrap for check.

Fri May  1 13:03:41 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldgram.y, ldlex.c, mri.c: added more compatible words; BASE, ALIAS and
	PUBLIC.
	* Makefile.in: now use flex, not lex
	* ldlex.l, ldlang.c, ldctor.c: lint

Wed Apr 22 12:48:42 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldlex.l: added CMDFILENAMECHAR state so that you can lex
	different sorts of filenames on the command line than in a script.

Mon Apr 20 22:37:04 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: rework CFLAGS so that they can be passed on the
	  make command line.  Remove MINUS_G.  Default CFLAGS to -g.

Fri Apr 17 08:57:17 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* relax.c: added handling for new "padding" seclet type, used to
	fill out gaps between section.
	* ldgram.y, ldlex.l: now -defsym on the command line is done
	properly.

Wed Apr 15 21:20:07 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: the tooldir copy of ld goes directly in tooldir.

Wed Apr 15 16:09:33 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* mri.c, ldgram.y, ldlex.l: added support for minimal strange link
	scripts.

Thu Apr  9 05:52:02 1992  Ken Raeburn  (Raeburn@Cygnus.COM)

	* Makefile.in (install): Install second copy in $(tooldir)/bin
	without $(program_prefix), since that's what gcc expects.

Sat Apr  4 17:44:06 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldlex.l, ldgram.y, ldlex.h: Rewrote lexer. Now it's much nicer.
	* h8300*: fix bit rot and add support for h8300xray target
	* go32.sh: target emulation for go32.

Mon Mar 16 14:53:29 1992  Steve Chamberlain  (sac@rtl.cygnus.com)

	* gld960.em, i960.sc-sh. Fix i960 bit rot

Fri Mar 13 19:47:22 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: install man page.

Fri Mar 13 08:23:59 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/mt-<foo> renamed to <foo>.mt
	* config/mh-<foo> renamed to <foo>.mt
	* configure.in changed to reflect this
	* genscripts.sh now make .xbn files rather than .xN files

Sat Mar  7 03:40:40 1992  K. Richard Pixley  (rich@cygnus.com)

	* ldver.h: fix decl of ldversion.

Fri Mar  6 22:00:35 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: added check target.

Fri Mar  6 06:59:04 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldmain.c (Q_enter_file_symbols): now aliases work again

Thu Mar  5 21:39:29 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: added clean-info target.

Thu Mar  5 16:55:56 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ldexp.c (exp_print_tree): don't try and follow null pointers
	around.
	* ldgram.y: remove 11 shift reduce errors

Tue Mar  3 15:46:39 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: added tooldir and program_prefix.

Fri Feb 28 08:17:45 1992  Steve Chamberlain  (sac at thepub.cygnus.com)

	* ldlang.c (size_input_section): don't move absolute sections
	around!


Thu Feb 27 09:20:41 1992  Steve Chamberlain  (sac at thepub.cygnus.com)

	* cplus-dem.c: yet another copy of this - maybe it should go into
	libiberty ?
	* ldgram.y: now -V and -v have different actions
	* ldver.c: if -V, prints list of emulations compiled in
	* ldmisc.c: support for cplus demangling


Wed Feb 26 18:04:40 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in, configure.in: removed traces of namesubdir,
	  -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
	  copyrights to '92, changed some from Cygnus to FSF.

Thu Feb 20 17:43:46 1992  Per Bothner  (bothner at cygnus.com)

	* Makefile.in:  Change mkscript rule into one for ./mkscript
	(for the sake of makes that don't realize they're the same).
	* PORTING:  Add more details.
	* genscripts.sh:  Add more tailorability of DATA_ALIGNMENT.

Mon Feb 17 12:04:36 1992  Per Bothner  (bothner at cygnus.com)

	* Makefile.in, and new files hp300bsd.sh, config/mh-hp300bsd,
	config/mt-hp300bsd:  New port to hp300 running BSD.

Sat Feb 15 13:59:54 1992  Per Bothner  (bothner at cygnus.com)

	Major rewrite of how ld is configured.  The major idea
	is to use shell scripts to generate everything.
	* generic.em replaces ldtemplate.
	* Other *.em files replace various *.c files.
	A *.em file is a shell script that generates the corresponding
	ld__*.c file that implements an emulation.  This is usually
	a straight 'cat' of a here-document, possibly with substitutions.
	* Script files (*.sc) are places by *.sc-sh scripts.
	Again, these are simple shell scripts that 'cat'
	here-documents, usually with some substitutions.
	The output a *.sc-sh is a script file.
	* Each emulation is defined by a short shell script with
	extension *.sh that specifies the emulation-specific
	parameters (such as the name of the *.sh-sc and *.em
	files to use).
	* genscript.sh is the master shell script used to generate
	an emulation.  It is passed various argument, including
	the name a the emulation-speciic *.sh file that it
	"sources" to set variables to emulation-specifc parameters.
	* config/mt-foo:  Changed EMUL=GLDFOO_EMULATION_NAME
	to EMUL=foo. (The GLDFOO_EMULATION_NAMEs have bee removed.)
	* config/mh-foo:  Rename LDEMULATION names as appropriate
	(usually 'gldfoo' -> plain 'foo').
	* ldwrite.c:  Fixed a typo in a comment.
	* Makefile.in:  Major changes.  Removed some the sed
	magic to converts scripts, since that is now handled
	by genscripts.sh and the *.sc-sh scipt generators.
	* config.h:  Remove a bunch of macros defining emulations
	and targets.  This becomes one less file to edit when
	adding emulations or targets.
	* ldemul.h (struct ld_emulation_xfer_struct):  Add
	emulation_name and target_name fields.
	* ldemul.c, ldemul.h:  Define some default functions used
	by most emulations (and remove from the *.em scripts).
	* ldemul.c (ldemul_choose_target):  Search the new
	ld_emulations array using a loop (instead of a hardwired
	nested if statement).
	Define the ld_emulation from the automatically-geenrated
	ldemul-list.h.  This means you no longer have to edit ldemul.c
	to add a new emulation.
	* ldmain.c:  Replace {GLD,LNK}960_EMULATION_NAME by
	their expansions, since the former no longer exist.
	* PORTING:  A very rough first draft of a porting guide.

	* ldgram.y, ldlex.l, lexsup.c: Changes to allow an assignment
	to be terminated by a new-line (instead of requiring a semicolon).

Mon Feb 10 16:21:02 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* ldexp.c, ldlang.c: added new idea "abs_output_section", removes
	tests for NULL pointers all over the place.
	* ldlang.c (lang_process): remember to relocate global symbols
	*after* relaxing has done it stuff.

Thu Feb  6 11:40:15 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* config/mt-coff-h8300: use EMUL like everything else
	* ldlang.c: (print_padding_statement): print the right address.
	* Makefile.in, config.h, ldemul.c: renamed  h8300hds to h8300hms


Tue Feb  4 15:28:01 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* ldlex.l: Put pack -noinhibit-exec and -sort-common
	* ldlang.c (print_data_statement): print the right address.

Thu Jan 30 17:51:53 1992  Per Bothner  (bothner at cygnus.com)

	* Makefile.in:  The rule for testing ld by re-linking itself
	via an intermediate -r link was moved to the ld1 rule
	instead of the ld2 rule.  This allows ld2 and ld3 to be identical,
	which allows the bootstrap rule to work.
	* ldctor.c (find_constructors):  Don't create a constructor
	list if it is already defined (as would happen if ld is
	invoked by collect).

Wed Jan 29 08:35:39 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* config/mh-sparc.h: now uses libgcc.a
	* ldmain.c: quit using exit
	* *sc: use *(COMMON) rather than [COMMON]
	* ldlex.l, lexsup.c: much thinking moved from .l and put into .c,
	to allow preprocessing of .l file.
	* Makefile.in: New ldlex.l mangling
	* ldexp.c (fold_binary): perform expressions with % and / in
	integer.
	* ldfile.c (open_a): open archives on VMS in a special way


Tue Jan 28 10:18:16 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* ldgram.y: map -M behave in the same way as -Map (sets file name
	to be "-".
	* ldsym.c, ldlang.c: remember that size of a section is dependent on
	whether or not relaxing has been done.
	* ldmain.c: don't open a map file if it doesn't have a name
	* relax.c: all the brains have moved into bfd.
	* ldwrite.c: ammend comment

Fri Jan 24 14:23:46 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* Makefile.in: added relax, also made three stage go through a
	partial link stage.
	* relax.c : added
	* config.h: if GNU960 defined, then default emulation mode is
	GLD960
	* ldexp.h, ldexp.c: map to file hooks
	* ldlang.c: map to file hooks
	* ldgram.y: added -Map -relax
	* ldlex.l: added -relax, -Map
	* ldmain.c: open map file
	* ldmisc.c: support for map file
	* ldwrite.c: new relax magic

Thu Dec 19 18:49:51 1991  John Gilmore  (gnu at cygnus.com)

	* Makefile.in, config/tm-*.h:  Clean up make output, only
	pass DEFAULT_EMULATION to ldmain.c.

Wed Dec 18 15:02:47 1991  Per Bothner  (bothner at cygnus.com)

	* ldver.c:  Bump to version 1.94.

Tue Dec 10 04:07:23 1991  K. Richard Pixley  (rich at rtl.cygnus.com)

	* Makefile.in: infodir belongs in datadir.

Mon Dec  9 16:26:43 1991  Per Bothner  (bothner at cygnus.com)

	* Makefile.in:  Pass -y to bison.  (Again;
	accidentally deleted by Rich.)
	* news.sc, ldgld68k.sc:  Define __end as well as _end.

Sat Dec  7 17:19:26 1991  Steve Chamberlain  (sac at rtl.cygnus.com)

	* ldindr.h: added to contain prototypes of ldindr.c
	* ldfile.c: include ctype.h
	* ldmain.c: include the requried prototype headers
	* ldwrite.c: get_reloc_upper_bound has been renamed
	bfd_get_reloc_upper_bound

Fri Dec  6 23:29:26 1991  K. Richard Pixley  (rich at rtl.cygnus.com)

	* Makefile.in: punt "fundamental" mode because it breaks my emacs
	  macros.  install using INSTALL_PROGRAM and INSTALL_DATA.  remove
	  spaces following hyphens, bsd make can't cope.  added
	  standards.text support and made it look like all the other
	  makefiles.

	* configure.in: configure now runs entirely in objdir so make file
	  existence checks against ${srcdir}.  Mark this directory as
	  target dependent.

Thu Dec  5 22:46:16 1991  K. Richard Pixley  (rich at rtl.cygnus.com)

	* Makefile.in: idestdir and ddestdir go away.  Added copyrights
	  and shift gpl to v2.  Added ChangeLog if it didn't exist. docdir
	  and mandir now keyed off datadir by default.

Wed Dec  4 23:36:55 1991  Per Bothner  (bothner at cygnus.com)

	* ldver.c:  Bumped version to 1.93.
	* Makefile.in:  Pass -y to bison.

Mon Nov 25 18:28:40 1991  Steve Chamberlain  (sac at cygnus.com)

	* config.h: h8 is now coff, not ieee
	* h8300hds.sc: reflect the same

Thu Nov 14 19:55:09 1991  Per Bothner  (bothner at cygnus.com)

	* ldver.c (ldversion()):  Update to 1.92.
	* ldctor.c: There are two places constructor sets
	can be defined.  One of them checked for an existing
	duplicate, the other didn't.  Unfortunately, the latter
	was called after the former ...
	So, factor out code for inserting a new element into
	constructor_name_list (after checking for a duplicate)
	into a new function add_constructor_name, and call
	it from both aforementioned places (ldlang_add_constructor
	and ldlang_check_for_constructors).

Wed Nov 13 15:17:43 1991  Per Bothner  (bothner at cygnus.com)

	* Makefile.in:  Rename .c files generated from ldtemplate
	to have names starting with ld__.  This helps 'make clean'.

Tue Nov 12 18:36:50 1991  Steve Chamberlain  (sac at cygnus.com)

	* Makefile.in: Take out the version number for install
	* m88kbcs.sc: put in contructor blocks.

Mon Nov 11 18:47:33 1991  Per Bothner  (bothner at cygnus.com)

	* ldmisc.c, ldmisc.h:  Re-write info() to take a filename
	parameter, a format, and an arg pointer, and rename it to
	vfinfo().  Write info() in terms of new vfinfo().
	New einfo() is the same as info(), except it writes to stderr.
	* ldemul.c, ldexp.c, ldlang.c, ldlnk960.c, ldmain.c, ldwrite.c,
	ldmisc.c:  Replace "error" calls to info() by new einfo().

Mon Nov 11 09:57:32 1991  Steve Chamberlain  (steve at cygnus.com)

	* ldlex.l ldgram.y: made -V option do same as -v
	* Makefile.in: Added $(MINUS_G) flag so debugging can be
	turned off

Sun Nov  3 16:37:37 1991  Steve Chamberlain  (steve at cygnus.com)
	 i386 aout changes from Bob Kukura
	* Makefile.in, config.h: added i386aout support
	* configure.in: fixed /h-{myhost} typo
	* ldgram.y: -MM now gives more boring map.
	* ldlang.c: now does D_PAGED flag the right way.
	* ldsym.c: -MM flags does the right thing.

Sun Nov  3 15:00:03 1991  Per Bothner  (bothner at cygnus.com)

	* configure.in:  Fixed typo.  Also, a fix for hp300bsd.
	* ldlang.c (init_os):  Compensate for BFD change,
	where bfd_make_section now returns NULL for a duplicate
	section request, instead of the old section.

Thu Oct 17 15:27:13 1991  Per Bothner  (bothner at cygnus.com)

	* ldver.c: Bump to version 1.91 (consistent with binutils).

Wed Oct 16 12:27:08 1991  Per Bothner  (bothner at cygnus.com)

	* Makefile.in, config.h, ld.h, ldemul.c, ldexp.c, ldexp.h,
	ldgram.y, ldlex.l, ldlnk960.c, ldmain.c, ldmisc.c, ldmisc.h,
	ldsym.c, ldsym.h, ldtemplate, ldvanilla.c, ldver.c, ldver.h,
	ldwarn.c, ldwarn.h, ldwrite.c, ldwrite.h, mkscript.c:
	Add or update copyright notices.

Mon Oct 14 23:55:27 1991  Per Bothner  (bothner at cygnus.com)

	* README: New file.
	* Makefile.in:  Changed installation directory name scheme
	to be consistent with gcc.  Also changed 'install'.

Mon Oct 14 17:30:02 1991  Roland H. Pesch  (pesch at cygnus.com)

	* Makefile.in: new targets ld.mm, ld.me

Mon Oct 14 17:27:24 1991  Per Bothner  (bothner at cygnus.com)

	* Makefile.in, ldtemplate:  Need to use separate scripts
	for -n and -N options.  Yet more complication.

Fri Oct 11 22:40:46 1991  John Gilmore  (gnu at cygnus.com)

	* Makefile.in:  Avoid using $< in explicit Make rules (it doesn't
	work).  Add some lines to avoid Sun Make VPATH bugs.

Fri Oct 11 16:42:22 1991  Per Bothner  (bothner at cygnus.com)

	* news.sc: Add alignment for data segment.
	* ldtemplate: Add (yet another) script to get for -n or -N
	options.  (These need different alignment than ZMAGIC files.)
	* Makefile.in:  Add stuff for new foo.xn scripts.
	These are generated by replacing "ALIGN(0x...00)" by ".".

Fri Oct 11 15:43:04 1991  Roland H. Pesch  (pesch at cygnus.com)

	* Makefile.in: new targets ld.ms, ld-index.ms
	ld.texinfo: remove tabs, other cleanups for texi2roff

Fri Oct 11 13:51:54 1991  Per Bothner  (bothner at cygnus.com)

	* ldmain.c (main): Make config.magic_demand_paged be true
	by default.  Don't the WP_TEXT and D_PAGED flags of
	output_bfd here; it's too late, so set it when output_bfd
	is created (in ldlang.c).  Also fix setting of EXEC_P flag
	* ldlang.c (ldlang_open_output):  Set output_bfd->flags here.
	* ldlang.c: Remove some duplicate extern declarations.
	* ldgram.y: Fixes to -N and -n options.
	* Makefile.in:  Recognize upper case letters in sed script
	to remove assignments from script files.
	* ldtemplate:  Don't assukme that -N or -n options
	imply use of -r script.
	* mkscript.c:  Tweaking to correctly handle \n and \\ in input.

Fri Oct 11 10:29:27 1991  Steve Chamberlain  (steve at cygnus.com)

	* ldtemplate: include bfd.h before sysdep.h.

Fri Oct 11 04:24:45 1991  John Gilmore  (gnu at cygnus.com)

	Restructure configuration scheme for bfd, binutils, ld.

	* include/sys/h-*.h:  Move to bfd/hosts/h-*.h.
	* configure.in:  Revise to symlink sysdep.h to ../bfd/hosts/h-xxx.h.
	Change some config names to match other dirs.
	* *.c:  Include bfd.h before sysdep.h, so ansidecl and PROTO()
	get defined first.
	* config/:  Rename some config files to match up h-*.h names.
	Remove all the HOST_SYS definitions from the config files.

Tue Oct  8 16:00:57 1991  Per Bothner  (bothner at cygnus.com)

	* ldexp.h, ldlang.h: Change enum boolean -> enum bfd_boolean.
	* ldtemplate: Remove ldfile_add_library_path calls;
	just use the SEARCH_DIR commands in the script files.
	* Makefile.in: Add LIB_PATH macro, which if set is used to replace
	the SEARCH_DIR commands in the scripts (using ugly sed magic).
	This is primarily intended for cross-linking, where you would
	place libaries in a different place than native libraries.
	Also, emulations made from ldtemplate now use $(srcdir).
	* ldglda29k.sc:  Change SEARCH_DIR commands to a conventional
	form; people can use the Makefile's LIB_PATH to override.

Tue Oct  8 14:51:21 1991  Roland H. Pesch  (pesch at cygnus.com)

	* Makefile.in: fix target ld.dvi, add target ld.info
	ld.texinfo: make info filename ld.info

Fri Oct  4 21:51:58 1991  John Gilmore  (gnu at cygnus.com)

	* Makefile.in:  Avoid using $< in non-suffix rules (breaks on Sun
	Make).
	* ldfile.c, ldlang.c, ldmain.c, ldwrite.c:  Cope with renames of a
	few BFD types & enums.


Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
