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:
