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}.sh: Rename from d30velf_{o,e}.
	* emulparams/d30velf_{o,e}.sh: 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)

	* scripttempl/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)

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

	* scripttempl/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.

	* scripttempl/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>

	* emultempl/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>

	* emultempl/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.
	* emultempl/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>

	* scripttempl/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.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>

	* scripttempl/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, emultempl/*.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, scripttempl/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.
	* testsuite/ld-cdtest/cdtest-bar.cc,
	testsuite/ld-cdtest/cdtest-foo.cc,
	testsuite/ld-cdtest/cdtest-foo.h,
	testsuite/ld-cdtest/cdtest-main.cc,
	testsuite/ld-cdtest/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.
	* scripttempl/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}.

	* testsuite/ld-cdtest/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
	* emulparams/go32.sh: set to coff-go32 not aout
	* emultempl/generic.em: strength-reduce the structure of
	  this shell script, since the only available shell for
	  DOS can't handle complex syntax.
	* emultempl/stringify.sed: for "sed -f" instead of inline.
	* Makefile.in: depend on stringify.sed as well as genscripts.sh
	* scripttempl/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.

	* testsuite/ld-cdtest/cdtest-foo.cc: Use explicit "#pragma
	implementation".
	* testsuite/ld-cdtest/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.

	* emultempl/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.

	* scripttempl/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)

	* scripttempl/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.sc: 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.

	* emultempl/m88kbcs.em (before_parse): Set lprefix and lprefix_len
	correctly.

	* emultempl/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.
	* emultempl/sh.em, emultempl/st2000.em, emultempl/z8ksim.em,
	emultempl/h8300hms.em, emultempl/h8500hms.em: Files removed,
	replaced with generic.em.
	* emulparams/h8300.sh, emulparams/h8500.sh, scripttempl/h8300.sc,
	scripttempl/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.

	* scripttempl/aout.sc, emulparams/aout.sh: Add SHLIB_PATH like
	STACKZERO.  Make STACKZERO dependent on RELOCATING, not
	RELOCATION.
	* emulparams/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.
	* scripttempl/m68kcoff.sc, emulparams/m68kcoff.sh: Gather
	constructors and destructors and define __CTOR_LIST__ and
	__DTOR_LIST__ appropriately.
	* scripttempl/sa29200.sc, emulparams/sa29200.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.
	* emulparams/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)

	* scripttempl/mips.sc, emulparams/mips.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)

	* scripttempl/mipsbsd.sc, emulparams/mipsbsd.sh: Renamed from
	aout-mipsbsd.sc-sh.
	* emulparams/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)

	* scripttempl/mips.sc, emulparams/mips.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.

	* emultempl/hppaosf.em, scripttempl/hppaosf.sc,
	emulparams/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, config/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.
	* scripttempl/aout.sc: 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.
	* emulparams/hp3hpux.sh, config/hp300hpux.mt: New files.

Tue May  4 12:37:35 1993  Ian Lance Taylor  (ian@cygnus.com)

	* scripttempl/mips.sc: 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.
	* emulparams/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)

	* emultempl/sh.em, emulparams/sh.sh, scripttempl/sh.sc: 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.
	* emulparams/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, emulparams/mipsbsd.sh: New files from Ralph
	Campbell, ralphc@pyramid.com.
	* emulparams/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)

	* emulparams/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.
	* emulparams/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)

	* scripttempl/m68kcoff.sc, emulparams/m68kcoff.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.
	* configure.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)

	* scripttempl/m68kcoff.sc, emulparams/m68kcoff.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)

	* scripttempl/aout.sc, emulparams/aout.sh,
	scripttempl/m68kcoff.sc, emulparams/m68kcoff.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
	* emultempl/z8ksim.em, z8ksim.sc-sh, emulparams/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, emulparams/m68kcoff.sh, scripttempl/m68kcoff.sc,
	emulparmas/m68kcoff.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, emultempl/generic.em, genscripts.sh,
	emultempl/gld960.em, emultempl/h8300hms.em,
	emultempl/h8300xray.em, emultempl/lnk960.em, emultempl/st2000.em,
	emultempl/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)

	* emultempl/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.
	* scripttempl/h8300hms.sc, emulparams/h8300.sh,
	emultempl/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)

	* testsuite/ld-cdtest/cdtest-main.cc,
	testsuite/ld-cdtest/cdtest-func.cc,
	testsuite/ld-cdtest/cdtest-foo.h,
	testsuite/ld-cdtest/cdtest-foo.cc,
	testsuite/ld-cdtest/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)

	* emultempl/h8300hms.em, scripttempl/h8300hms.sc,
	emulparams/h83000.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
	* emulparams/go32.sh: target emulation for go32.

Mon Mar 16 14:53:29 1992  Steve Chamberlain  (sac@rtl.cygnus.com)

	* emultempl/gld960.em, scripttempl/i960.sc,
	emulparamns/i960.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.)
	* scripttempl/news.sc, scripttempl/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
	* scripttempl/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)

	* scripttempl/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 set 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.

	* 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 libraries in a different place than native libraries.
	Also, emulations made from ldtemplate now use $(srcdir).
	* scripttempl/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:
