Thu Dec 21 12:43:49 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_howto_raw): Add a phony reloc to handle the
	old style TOC16 references without using R_PPC_GOT.
	(ppc_reloc_type): Ditto.
	(ppc_elf_reloc_type_lookup): Add support for TOC16.
	(ppc_elf_toc16_inner): Renamed from ppc_elf_got16_inner.
	(ppc_elf_toc16_reloc): Renamed from ppc_elf_toc16_reloc.
	(ppc_elf_got16_{inner,reloc}): Stubs for real GOT support.
	(ppc_elf_check_relocs): New function for GOT/PLT support that is
	work in progress.
	(ppc_elf_adjust_dynamic_symbol): Ditto.
	(ppc_elf_adjust_dynindx): Ditto.
	(ppc_elf_size_dynamic_sections): Ditto.
	(ppc_elf_finish_dynamic_symbol): Ditto.
	(ppc_elf_finish_dynamic_sections): Ditto.
	(ELF_DYNAMIC_INTERPRETER): Define.

Wed Dec 20 19:14:18 1995  Ken Raeburn  <raeburn@cygnus.com>

	* elf.c (copy_private_bfd_data): When attaching sections to
	segments ignore sections that won't be allocated.  Patch from
	Andreas Schwab.

Tue Dec 19 20:01:43 1995  Ken Raeburn  <raeburn@cygnus.com>

	* config.bfd: Match on m68k-cbm-* only if OS doesn't match
	anything else.

Tue Dec 19 16:38:59 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coff-i960.c (CALC_ADDEND): Define.
	(coff_i960_relocate_section): Add the input section VMA to the
	addend for PC relative relocs.

Sun Dec 17 20:11:55 1995  Kim Knuttila  <krk@cygnus.com>

	* peicode.h (pe_print_pdata): Must test the entire entry for zero
	to correctly terminate.

Fri Dec 15 12:05:57 1995  Ian Lance Taylor  <ian@cygnus.com>

	* targets.c (enum bfd_endian): Define.
	(bfd_target): Rename byteorder_big_p to byteorder, and change it
	from boolean to enum bfd_endian.  Change header_byteorder_big_p
	correspondingly.
	* bfd-in.h (bfd_big_endian, bfd_little_endian): New macros.
	(bfd_header_big_endian, bfd_header_little_endian): New macros.
	* bfd-in2.h: Rebuild.
	* All targets: Change initialization of byteorder and
	header_byteorder to use enum bfd_endian values rather than
	booleans.
	* All files: Change all references to byteorder_big_p and
	header_byteorder_big_p to use new bfd_*_endian macros.

	* coffgen.c (make_a_section_from_file): Set lma to s_paddr, not
	s_vaddr.
	* coffcode.h (coff_write_object_contents): Set s_paddr to lma, not
	vma.
	* ecoff.c (_bfd_ecoff_write_object_contents): Likewise.

Fri Dec 15 07:32:09 1995  steve chamberlain  <sac@slash.cygnus.com>

	* pe[i]-i386.c (TARGET_UNDERSCORE): Define to '_'.

Thu Dec 14 13:45:37 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c: Lots of minor cleanups.  Make many functions return
	errors rather than calling abort.  Also:
	(ieee_write_twobyte): Remove; change callers to call existing
	ieee_write_2bytes function.
	(ieee_write_expression): Don't output the section twice when
	outputting a local symbol.  Don't emit an extraneous zero if there
	is only one term.
	(ieee_slurp_sections): Set the lma as well as the vma.
	(ieee_archive_p): Use bfd_alloc_grow rather than an obstack.

	* ihex.c (ihex_set_arch_mach): Don't accept any architecture, just
	a recognized one or bfd_arch_unknown.
	(ihex_get_symtab_upper_bound): Define as bfd_0l, to permit objcopy
	to succeed.
	(ihex_get_symtab): Likewise.

Wed Dec 13 15:44:06 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h: Include <ctype.h>.
	(struct aout_link_includes_table): Define.
	(struct aout_link_includes_totals): Define.
	(struct aout_link_includes_entry): Define.
	(aout_link_includes_lookup): Define macro.
	(struct aout_final_link_info): Add includes field.
	(aout_link_includes_newfunc): New static function.
	(NAME(aout,final_link)): Initialize includes hash table.
	(aout_link_write_symbols): Eliminate duplicate N_BINCL entries.

Wed Dec 13 10:52:14 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: Match on mips-*-* instead of mips-idt-ecoff.

Wed Dec 13 11:07:45 1995  Kim Knuttila  <krk@cygnus.com>

	* coff-ppc.c (coff_ppc_relocate_section): removed debugging code.

Tue Dec 12 17:42:06 1995  Kim Knuttila  <krk@cygnus.com>

	* peicode.h (pe_print_reloc): New function to dump the .reloc section.
	(pe_print_private_bfd_data): call pe_print_reloc.
	* coffcode.h (coff_set_alignment_hook): .reloc section alignment.
	* coff-ppc.c (in_reloc_p): Added missing non-eligible relocs. Spiffed
	up some debugging as well.

Tue Dec 12 11:34:23 1995  Ian Lance Taylor  <ian@cygnus.com>

	* config.bfd: Handle sparc-*-elf*.  From Ronald F. Guilmette
	<rfg@monkeys.com>.

Fri Dec  8 17:47:07 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Set section_count to 0
	when setting sections to NULL.

Wed Dec  6 17:05:37 1995  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (struct xcoff_loader_info): Add export_defineds
	field.
	(bfd_xcoff_size_dynamic_sections): Add export_defineds parameter.
	(xcoff_build_ldsyms): If export_defineds is set, set XCOFF_EXPORT
	for all symbols.
	* bfd-in.h (bfd_xcoff_size_dynamic_sections): Update declaration.
	* bfd-in2.h: Rebuild.

Mon Dec  4 16:40:47 1995  Kim Knuttila  <krk@cygnus.com>

	* coffcode.h (coff_set_alignment_hook): Removed some debugging printf's

Mon Dec  4 11:25:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ihex.c (ihex_scan): Handle record types 4 and 5.
	(ihex_object_p): Permit types 4 and 5.
	(ihex_set_section_contents): Remove check for out of range
	addresses.
	(ihex_write_object_contents): Generate types 4 and 5.

	* elflink.h (elf_link_output_extsym): Just ignore warning and
	indirect references to symbols which don't really exist.

Sun Dec  3 19:00:27 1995  Kim Knuttila  <krk@cygnus.com>

	* peicode.h (pe_print_idata): Minor format fixes
	(pe_print_edata): New function. Under private printing, this formats
	the edata section of a PE file.
	(pe_print_private_bfd_data): Added call to pe_print_edata.

Sun Dec  3 16:46:54 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* aout-arm.c (MY_swap_std_reloc_out): Use KEEPIT to get the symbol
	index, don't call stoi.

Fri Dec  1 14:46:51 1995  Ian Lance Taylor  <ian@cygnus.com>

	* srec.c (srec_scan): Set lma as well as vma.

	* ihex.c: New file; support for Intel Hex format.
	* targets.c (enum bfd_flavour): Add bfd_target_ihex_flavour.
	(ihex_vec): Declare.
	(bfd_target_vector): Always include ihex_vec.
	* bfd.c (struct _bfd): Add ihex_data field to tdata union.
	* Makefile.in: Rebuild dependencies.
	(BFD_LIBS): Add ihex.o
	(BFD_LIBS_CFILES): Add ihex.c.
	* bfd-in2.h: Rebuild.

	* elf.c (assign_file_positions_for_segments): Sort the sections in
	each segment.
	(get_program_header_size): Return the right size if segment_map is
	not NULL.
	(copy_private_bfd_data): Don't bother to sort the sections.

	* bfd.c (bfd_record_phdr): New function.
	* bfd-in.h (bfd_record_phdr): Declare.
	* bfd-in2.h: Rebuild.

	* elf32-sparc.c (elf32_sparc_relocate_section): Remove bogus
	BFD_ASSERT.

	* libbfd.c (bfd_malloc, bfd_realloc): New functions.
	(bfd_zmalloc): Return PTR, not char *.  Take size_t, not
	bfd_size_type.
	* libbfd-in.h (bfd_malloc, bfd_realloc): Declare.
	(bfd_zmalloc): Change declaration.
	* libbfd.h: Rebuild.
	* Many files: Use bfd_malloc and bfd_realloc rather than malloc
	and realloc.  Don't set bfd_error_no_memory if they fail.

Thu Nov 30 19:32:26 1995  Kim Knuttila  <krk@cygnus.com>

	* coff-ppc.c: Added macros to tidy up toc cell treatment. Numerous
	uses as well. Added a new howto to deal with TOCREL16 relocs that
	are TOCDEFN as well.
	(coff_ppc_relocate_section): Expanded treatment of ADDR32NB relocs
	to handle RVA relocs from dlltool.
	(ppc_coff_rtype2howto): TOCDEFN reloc addition.
	(coff_ppc_rtype_to_howto): TOCDEFN reloc addition.
	(ppc_coff_reloc_type_lookup): TOCDEFN reloc addition.

	* coffcode.h (coff_set_alignment_hook): check idata$X sections
	to get the right section alignment.

Thu Nov 30 16:48:18 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (_bfd_elf_make_section_from_shdr): Don't set lma based on
	p_paddr if p_paddr is zero.
	(make_mapping): Set includes_filehdr and includes_phdrs for first
	PT_LOAD segment.
	(map_sections_to_segments): Set includes_phdrs for PT_PHDR
	segment.
	(assign_file_positions_for_segments): Handle includes_filehdr and
	includes_phdrs.  Remove special handling of PT_PHDR and first
	PT_LOAD segments.
	(copy_private_bfd_data): Set includes_filehdr and includes_phdr
	when appropriate.  Remove special handling of PT_PHDR segment.
	Use a more complex condition for when a section is included in a
	segment to handle Solaris linker oddities.

Thu Nov 30 11:17:33 1995  Manfred Hollstein KS/EF4A 60/1F/110 #40283  <manfred@lts.sel.alcatel.de>

	* coff-m88k.c (howto_table): Reformatted for easier reading;
	special_function now points to new function m88k_special_reloc.
	(howto_hvrt16): Function previously used for handling HVRT16 relocs
	removed.
	(rtype2howto): Do not add reloc's r_offset to the addend, this will
	be done correctly by m88k_special_reloc.
	(reloc_processing): New function to be used by RELOC_PROCESSING.
	(RELOC_PROCESSING): Define to call reloc_processing.

Wed Nov 29 12:42:36 1995  Ian Lance Taylor  <ian@cygnus.com>

	* peicode.h (pe_print_idata): Call malloc rather than xmalloc.
	(pe_print_pdata): Likewise.

	* opncls.c (bfd_alloc_by_size_t): Set bfd_error_no_memory if
	obstack_alloc fails.
	(bfd_alloc_finish): Set bfd_error_no_memory if obstack_finish
	fails.
	* libbfd.c (bfd_zmalloc): Set bfd_error_no_memory if malloc fails.
	* Many files: don't set bfd_error_no_memory if one of the above
	routines fails.

	* elf.c (assign_file_positions_for_segments): Don't adjust p_paddr
	if p_paddr_valid is set.
	(copy_private_bfd_data): New static function.
	(_bfd_elf_copy_private_section_data): Call copy_private_bfd_data.

	* elf.c (assign_file_positions_for_segments): Fix case where extra
	program headers were allocated.

	* elf.c (_bfd_elf_print_private_bfd_data): New function.
	* elf-bfd.h (_bfd_elf_print_private_bfd_data): Declare.
	* elfxx-target.h (bfd_elfNN_bfd_print_private_bfd_data): Define to
	_bfd_elf_print_private_bfd_data.

	* coff-alpha.c (alpha_ecoff_swap_reloc_in): Don't abort if
	r_symndx is RELOC_SECTION_NONE for an ALPHA_R_IGNORE reloc.
	Change a RELOC_SECTION_LITA symndx to RELOC_SECTION_ABS.
	(alpha_ecoff_swap_reloc_out): Change RELOC_SECTION_ABS to
	RELOC_SECTION_LITA for ALPHA_R_IGNORE.
	(alpha_adjust_reloc_out): For ALPHA_R_IGNORE, don't change
	RELOC_SECTION_ABS to RELOC_SECTION_NONE.

Tue Nov 28 16:59:50 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf-bfd.h (struct elf_obj_tdata): Add segment_map field.
	* elf.c (make_mapping): New static function.
	(map_sections_to_segments): New static function.
	(elf_sort_sections): New static function.
	(assign_file_positions_for_segments): New static function.
	(map_program_segments): Remove.
	(get_program_header_size): Remove sorted_hdrs, count, and
	maxpagesize parameters.  Simplify.
	(assign_file_positions_except_relocs): When generating an
	executable, use assign_file_positions_for_segments.
	(elf_sort_hdrs): Remove.
	(_bfd_elf_sizeof_headers): Remove eliminated parameters from call
	to get_program_header_size.

Mon Nov 27 12:27:46 1995  Ian Lance Taylor  <ian@cygnus.com>

	* hp300hpux.c (MY(callback)): Set lma as well as vma.

	* configure, config.in: Regenerate with autoconf 2.7.

	* elf32-i386.c (elf_backend_plt_readonly): Set correctly, to 1.
	* elf32-sparc.c (elf_backend_plt_readonly): Set correctly, to 0.

Wed Nov 22 12:02:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (_bfd_ecoff_new_section_hook): Handle .rconst section.
	(ecoff_sec_to_styp_flags): Likewise.
	(_bfd_ecoff_styp_to_sec_flags): Handle STYP_RCONST.
	(ecoff_set_symbol_info): Handle scRConst.
	(ecoff_slurp_reloc_table): Handle RELOC_SECTION_RCONST.
	(ecoff_compute_section_file_positions): Handle .rconst section.
	(_bfd_ecoff_write_object_contents): Likewise.
	(ecoff_link_check_archive_element): Handle scRConst.
	(ecoff_link_add_externals): Likewise.
	(ecoff_link_write_external): Handle .rconst section.
	(ecoff_reloc_link_order): Likewise.
	* ecofflink.c (bfd_ecoff_debug_accumulate): Handle scRConst.
	* coff-alpha.c (alpha_convert_external_reloc): Handle .rconst
	section.
	(alpha_relocate_section): Handle RELOC_SECTION_RCONST.

	* sunos.c (sunos_scan_dynamic_symbol): Only set written if the
	DEF_DYNAMIC flag is set.

Tue Nov 21 13:25:29 1995  Ken Raeburn  <raeburn@cygnus.com>

	* host-aout.c: If TRAD_HEADER is defined, include it.

Tue Nov 21 13:03:57 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aclocal.m4 (AC_PROG_CC): Remove local definition.
	(BFD_BINARY_FOPEN): Require AC_CANONICAL_SYSTEM.
	(BFD_NEED_DECLARATION): New function.
	* configure.in: Use BFD_NEED_DECLARATION.
	* acconfig.h: Put NEED_DECLARATION_* in @TOP@ section.
	* configure, config.in: Rebuild with autoconf 2.6.

	* xcofflink.c (bfd_xcoff_size_dynamic_sections): Clear
	special_sections before returning when called with a non XCOFF
	BFD.

	* coffgen.c (coff_renumber_symbols): Sort common symbols with
	global symbols.

	* coffcode.h (coff_compute_section_file_positions): Only pad the
	previous section to force file alignment when creating an
	executable.

Mon Nov 20 14:54:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_compute_section_file_positions): If
	RS6000COFF_C, set up the .debug section.

	* xcofflink.c (xcoff_link_input_bfd): Adjust the TOC anchor value
	if it is not large enough to accomodate the entire TOC area with
	signed 16 bit offsets.
	(xcoff_write_global_symbol): Handle negative TOC offsets in global
	linkage code.
	(_bfd_ppc_xcoff_relocate_section): Adjust relocations against a
	TOC anchor to use the TOC value used in the output file.

Sat Nov 18 18:01:41 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffgen.c (_bfd_coff_get_external_symbols): Cast malloc return.
	(_bfd_coff_read_string_table): Likewise.

Sat Nov 18 19:43:04 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* pe-arm.c: Fix typos.
	* coff-arm.c: Likewise.

Fri Nov 17 16:22:04 1995  Kim Knuttila  <krk@cygnus.com>

	* coff-ppc.c (list_ele): Added "cat"egory member.
	(record_toc): New category parameter (priv or pub).
	(ppc_record_toc_entry): Check to see if toc bounds exceeded.
	(ppc_process_before_allocation): Removed embrionic data-in-toc from
	the mainline. It addes extra toc cells in error.
	(ppc_coff_swap_sym_in_hook): Added some documentation.
	(dump_toc): Can now diagnose "virtual toc" chicanery.

Fri Nov 17 10:41:25 1995  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* elf-bfd.h (struct elf_link_hash_table): Change type of
	dynsymcount and bucketcount fields from size_t to bfd_size_type.

Fri Nov 17 10:02:58 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_pointerize_aux_hook): I960 version: don't
	pointerize C_LEAFSTAT or C_LEAFEXT entries.

	* elflink.h (NAME(bfd_elf,size_dynamic_sections)): Only create
	DT_INIT and DT_FINI entries if the _init or _fini symbol is
	defined or mentioned in a regular file.

Thu Nov 16 15:16:42 1995  Kim Knuttila  <krk@cygnus.com>

	* coff-ppc.c (ppc_record_data_in_toc_entry): new function
	(coff_ppc_relocate_section): Handle TOCDEFN attribute
	(coff_ppc_relocate_section): Correct REL24 handling
	(ppc_process_before_allocation): Correct TOCDEFN handling

	* peicode.h (dir_names): Added name descriptions

Thu Nov 16 03:38:03 1995  Ken Raeburn  <raeburn@cygnus.com>

	* VERSION: Updated to cygnus-2.6.

Wed Nov 15 19:30:07 1995  Ken Raeburn  <raeburn@cygnus.com>

	* targets.c (m68k4knetbsd_vec): Declare.

Wed Nov 15 18:05:52 1995  Ian Lance Taylor  <ian@cygnus.com>

	* targets.c (bfd_target): Change type of second argument to
	_bfd_print_private_bfd_data from void * to PTR.
	* libbfd-in.h (_bfd_generic_bfd_print_private_bfd_data): Cast
	using PTR rather than void *.
	* bfd-in2.h, libbfd.h: Rebuild.
	* peicode.h (pe_print_private_bfd_data): Change vfile from void *
	to PTR.
	* elfxx-target.h (bfd_elfNN_bfd_print_private_bfd_data): Define as
	_bfd_generic_bfd_print_private_bfd_data rather than casting
	bfd_true.

Wed Nov 15 04:09:14 1995  Ken Raeburn  <raeburn@cygnus.com>

	* Makefile.in (.dep1): Fix stupid typo in last change.  Remove any
	"DO NOT DELETE" lines or blank lines that mkdep writes on some
	systems.
	(BFD_LIBS_CFILES, ALL_MACHINES_CFILES, BFD32_BACKENDS_CFILES,
	BFD64_BACKENDS_CFILES): New variables.
	(CFILES): Use them.

Tue Nov 14 11:52:23 1995  Ian Lance Taylor  <ian@cygnus.com>

	* peicode.h (coff_swap_aouthdr_out): For PPC PE, start isize at 0,
	not at the file position of the first section.
	* coffcode.h (coff_compute_section_file_positions): Avoid using
	unportable #elif.
	(coff_write_object_contents): When generating a PPC PE executable
	with no symbols, round up the file size to a COFF_PAGE_SIZE
	boundary.
	* cofflink.c (_bfd_coff_final_link): If there are no symbols,
	don't write out a string table.

	* elf.c (bfd_section_from_shdr): When using a different section
	header, pass the new one to _bfd_elf_make_section_from_shdr.
	(elf_fake_sections): Don't set sh_info and sh_entsize fields.
	(elf_map_symbols): Add section VMA to symbol value when comparing
	against 0.
	(_bfd_elf_compute_section_file_positions): Only build symbol table
	if there are some symbols.  Set file offset of symtab and strtab
	sections.
	(assign_file_positions_except_relocs): Remove dosyms parameter.
	Change all callers.  Never set file offset of symtab and strtab
	sections.
	(_bfd_elf_copy_private_section_data): New function.
	(MAP_ONESYMTAB, MAP_DYNSYMTAB, MAP_STRTAB, MAP_SHSTRTAB): Define.
	(_bfd_elf_copy_private_symbol_data): New function.
	(swap_out_syms): Check for special mapping of st_shndx created by
	copy_private_symbol_data.
	* elfxx-target.h: Use new copy routines.
	* elf-bfd.h (_bfd_elf_copy_private_symbol_data): Declare.
	(_bfd_elf_copy_private_section_data): Declare.

	* config.bfd (sh-*-*): Set targ_defvec to shcoff_vec.

	* coffcode.h (coff_slurp_symbol_table): If COFF_WITH_PE, handle
	C_NT_WEAK.

	* coff-sh.c (shlcoff_vec): Use _bfd_generic_archive_p, not
	_bfd_dummy_target, matching the recent change to archive
	recognition.

Mon Nov 13 13:24:38 1995  Ian Lance Taylor  <ian@cygnus.com>

	* libbfd.c (bfd_get_file_window): Use casts to avoid doing
	arithmetic on PTR types.

	* aout-target.h (MY(callback)): Set the lma of the sections.

	* ecoff.c (ecoff_reloc_link_order): Turn a reloc against a defined
	symbol into a reloc against the section.

Mon Nov 13 07:31:35 1995  Kim Knuttila  <krk@cygnus.com>

	* coff-ppc.c (ppc_coff_link_hash_entry): added support for inline
	glue for the relocs: IMGLUE and IFGLUE.
	(record_toc): new function - tracks toc contents
	(ppc_mark_symbol_as_glue): new function - supports the IMGLUE reloc
	(coff_ppc_relocate_section): Added support and fixes for IMGLUE/IFGLUE
	(ppc_coff_rtype2howto): removed invalid IMGLUE hack
	(coff_ppc_rtype_to_howto): removed invalid IMGLUE hack
	(ppc_record_toc_entry): Removed a debug define (duh)

	* peicode.h (coff_swap_scnhdr_out): Fixed invalid strcmp for ".reldata"
	(pe_print_idata): New function - formats the idata section data
	(pe_print_pdata): New function - formats the pdata section data
	(pe_print_private_bfd_data): calls to above

Sun Nov 12 12:23:24 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* Makefile.in (bfd_libs_here, etc): Provide empty definitions.
	* coff-rs6000.c (rs6000coff_vec): Add conditional defines
	TARGET_SYM and TARGET_NAME for vector and BFD name.
	* coff-pmac.c (pmac_xcoff_vec): Remove.
	(TARGET_SYM, TARGET_NAME): Define.
	* coffcode.h (coff_set_arch_mach_hook) [POWERMAC]: Set the
	machine to 0, not all PowerMacs are 601s.

Fri Nov 10 12:10:14 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (elf_object_p): Read in any program headers.
	* elf.c (_bfd_elf_make_section_from_shdr): Adjust section lma
	based on the program headers, if any.
	(elf_fake_sections): Set sh_addr from the vma, not the lma.
	(map_program_segments): Set p_paddr of program headers based on
	the lma.

Thu Nov  9 13:01:31 1995  Ian Lance Taylor  <ian@cygnus.com>

	* archive.c (bfd_generic_archive_p): Preserve tdata in case of
	failure.

	* aoutx.h (NAME(aout,final_link)): Report a reasonable error when
	trying to do a relocateable link with a non-a.out object file.

	* archive.c (bfd_generic_archive_p): Check the first object file
	in an archive even if target_defaulted is set.  If the object file
	has the wrong xvec, reject it.

	* aoutx.h (NAME(aout,set_section_contents)): If a section can not
	be represented, report the name via _bfd_error_handler.
	(translate_to_native_sym_flags): Likewise.
	* elf32-mips.c (mips_elf_final_link): Likewise.
	* oasys.c (oasys_write_sections): Likewise.

	* coffcode.h (coff_set_alignment_hook): Write RS6000COFF_C version
	which checks for STYP_OVRFLO sections.
	(coff_compute_section_file_positions): If RS6000COFF_C, handle
	reloc and lineno count overflows.
	(coff_write_object_contents): Call coff_count_linenumbers before
	coff_compute_section_file_positions.  If RS6000COFF_C, handle
	reloc and lineno count overflows.
	* xcofflink.c (_bfd_xcoff_bfd_final_link): Count line numbers and
	relocs before dealing with .pad sections.  Count overflow section
	headers when handling .pad sections.

	* coffcode.h (coff_write_object_contents): Set a.out vstamp to 1
	if RS6000COFF_C.

	* xcofflink.c (XCOFF_DESCRIPTOR): Define.
	(struct xcoff_link_hash_table): Add descriptor_section and
	special_sections fields.
	(_bfd_xcoff_bfd_link_hash_table_create): Initialize new fields.
	(xcoff_link_add_symbols): Set linkage section alignment.  Create
	descriptor section.  Check for magic symbol names (_text, etc.),
	and record them in special_sections if found.  Set
	XCOFF_DESCRIPTOR flag for a function descriptor, and set its
	descriptor field to point back to the function code symbol.
	(xcoff_sweep): Always mark the special descriptor_section.
	(bfd_xcoff_export_symbol): Check whether the symbol might be a
	function descriptor, and mark it if it is.
	(bfd_xcoff_size_dynamic_sections): Add new special_sections
	parameter, and fill it in.  Allocate space for the descriptor
	section.
	(xcoff_build_ldsyms): Set XCOFF_DEF_REGULAR flag when defining
	global linkage code.  If an undefined function descriptor is
	exported, arrange to define it.  Warn about any other undefined
	exported symbol.
	(_bfd_xcoff_bfd_final_link): Write out the descriptor section.
	(xcoff_write_global_symbol): Create a function descriptor when
	necessary.
	* bfd-in.h (bfd_xcoff_size_dynamic_sections): Update declaration.
	* bfd-in2.h: Rebuild.

Thu Nov  9 08:40:23 1995  Kim Knuttila  <krk@cygnus.com>

	* coff-ppc.c (ppc_coff_link_hash_entry): new types for hashing
	(ppc_coff_link_hash_table): new types for hashing
	(ppc_coff_link_hash_newfunc): hash entry constructor
	(ppc_coff_link_hash_table_init): hash table initializer
	(ppc_coff_link_hash_table_create): hash table constructor
	(ppc_record_toc_entry): changed references to hash table
	(coff_ppc_relocate_section): changed references to hash table

	* libcoff-in.h (coff_link_hash_entry): removed toc_offset
	* libcoff.h: Rebuild

	* cofflink.c (_bfd_coff_link_hash_newfunc): removed toc_offset init
	(coff_link_add_symbols): removed toc_offset init

Thu Nov  9 04:00:38 1995  Ken Raeburn  <raeburn@cygnus.com>

	* Makefile.in (.dep1): Make sure the file mkdep is to write exists
	first.

	* configure.in: Added new option --with[out]-mmap.  Set USE_MMAP
	if it is given and mmep is available.
	* acconfig.h: Undef USE_MMAP.
	* configure, config.in: Regenerated.
	* aoutx.h: If USE_MMAP is not defined, do all symbol and string
	table handling the old way.
	(aout_get_external_symbols): Don't complain if last byte of string
	table is nonzero.
	* libbfd.c [HAVE_MADVISE]: Include sys/types.h and sys/mman.h.
	(bfd_free_window) [! USE_MMAP]: Don't define.
	(bfd_get_file_window,
	_bfd_generic_get_section_contents_in_window) [! USE_MMAP]: Abort.

Wed Nov  8 20:03:44 1995  Eric Freudenthal <freudenthal@nyu.edu>

	* coff-a29k.c (SIGN_EXTEND_HWORD): Use ~0xffff rather than
	0xffff0000.

Wed Nov  8 11:31:11 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coff-a29k.c (a29k_reloc): Change handling of R_IREL reloc to be
	compatible with AMD generated COFF files.  Try to support both AMD
	and GNU formats simultaneously.
	(coff_a29k_relocate_section): Likewise.

	* libbfd.c (bfd_get_file_window): Change writable parameter from
	int to boolean; update all callers.  Pass MAP_SHARED if not
	writable--it's required on Solaris.  Cast fprintf argument to
	avoid warning.
	* bfd-in.h (bfd_get_file_window): Update declaration.
	* bfd-in2.h: Rebuild.
	* aoutx.h: Update calls to bfd_get_file_window.

	* xcofflink.c (XCOFF_DEF_DYNAMIC): Rename from XCOFF_REF_DYNAMIC.
	Change all uses.
	(xcoff_swap_ldhdr_in): New static function.
	(xcoff_swap_ldsym_in): New static function.
	(xcoff_find_reloc): Handle the case of a single reloc correctly.
	(xcoff_link_add_symbols): If we just created a descriptor, pass it
	to _bfd_generic_link_add_one_symbol, to save a hash lookup.
	Handle XTY_ER/XMC_XO symbols correctly.
	(xcoff_link_add_dynamic_symbols): Rewrite to read .loader symbols
	rather than normal symbol table.
	(bfd_xcoff_import_symbol): It's not an error if the symbol is
	already defined with the same absolute value.
	(xcoff_mark): When considering called symbols, check whether the
	descriptor is from a dynamic object, rather than the symbol
	itself.
	(xcoff_build_ldsyms): Likewise.

	* libbfd.c (bfd_get_file_window): Change return type to boolean.
	Cast realloc and malloc return values.  If malloc or realloc fail,
	set bfd_error_no_memory.
	* bfd-in.h (bfd_get_file_window): Change type to boolean.
	* bfd-in2.h: Rebuild.

Tue Nov  7 11:53:48 1995  Kim Knuttila  <krk@cygnus.com>

	* coff-ppc.c (ppc_record_toc_entry): new function.
	(in_reloc_p): changed return value.
	(coff_ppc_relocate_section): much rework.
	(ppc_allocate_toc_section): new function.
	(ppc_process_before_allocation): new function.
	(ppc_coff_swap_sym_in_hook): new function.

	* cofflink.c (_bfd_coff_link_hash_newfunc): initialize toc_offset.
	(coff_link_add_symbols): initialize toc_offset.

	* peicode.h (coff_swap_sym_in): Added coff_swap_sym_in_hook
	(coff_swap_aouthdr_out): Added more sections to the data
	dictionary for the pe file header. Also changed linker version
	number on the ppc side.
	(dir_names): small improvements to the dictionary printing.
	(pe_mkobject_hook): save the file level flags.

	* libcoff-in.h (coff_link_hash_entry): added toc_offset field
	(pe_tdata): added real_flags field
	(coff_tdata): added local_toc_sym_map and access macro

	* libcoff.h (coff_link_hash_entry): added toc_offset field
	(pe_tdata): added real_flags field
	(coff_tdata): added local_toc_sym_map and access macro

	* coffcode.h (coff_set_alignment_hook): added hook for PE.
	(coff_mkobject): init for local_toc_sym_map
	(coff_write_object_contents): set the internal_a.magic to
        IMAGE_NT_OPTIONAL_HDR_MAGIC which appears to be what other
	ppc compilers use.

Tue Nov  7 13:48:58 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecofflink.c (_bfd_ecoff_locate_line): Keep looking through stabs
	entries until both the line number address and the function name
	address are too large.

	* configure.in: Call AC_CHECK_PROG to find and cache AR.
	* configure: Rebuilt.

	* aclocal.m4 (BFD_CC_FOR_BUILD): Don't define CC_FOR_BUILD if it
	is defined in the environment.

Tue Nov  7 10:57:24 1995  Jeffrey A Law  (law@cygnus.com)

	* som.c (som_get_section_contents_in_window): Define to use
	generic version.

Mon Nov  6 17:13:15 1995  Harry Dolan  <dolan@ssd.intel.com>

	* coff-i860.c: New file, based on coff-i386.c.
	* cpu-i860.c: New file, based on cpu-i386.c.
	* hosts/i860mach3.h: New file, based on hosts/i386mach3.h.
	* config.bfd (i860-*-mach3*, i860-*-osf1*, i860-*-coff*): New
	targets, using i860coff_vec.
	* configure.in (i860-*-mach3*, i860-*-osf1*): New hosts, using
	trad-core.o and hosts/i860mach3.h.
	(i860coff_vec): Use coff-i860.o and cofflink.o.
	* configure: Rebuild.
	* Makefile.in: Rebuild dependencies.
	(ALL_MACHINES): Add cpu-i860.o.
	(BFD32_BACKENDS): Add coff-i860.o.
	(CFILES): Add cpu-i860.c and coff-i860.c.
	* targets.c (i860coff_vec): Declare.
	(bfd_target_vector): Add &i860coff_vec.
	* archures.c (bfd_i860_arch): Declare.
	(bfd_archures_list): Add &bfd_i860_arch.
	* coffcode.h (coff_set_arch_mach_hook): Handle I860 magic number.
	(coff_set_flags): Handle bfd_arch_i860.
	(coff_write_object_contents): Handle I860 a.out magic number.

Mon Nov  6 14:34:07 1995  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_add_symbols): Set the alignment power of
	the created .tc section to 2.
	(xcoff_mark): Don't keep a .loader reloc for a call to an
	undefined symbol when creating a shared library.
	(xcoff_build_ldsyms): When creating a shared library, generate
	global linkage code for a call to an undefined symbol.

Sun Nov  5 21:44:13 1995  Ken Raeburn  <raeburn@cygnus.com>

	* Makefile.in (CFILES): Rebuild list from BFD_LIBS, ALL_MACHINES,
	BFD32_BACKENDS, BFD64_BACKENDS.
	(.dep1): Put mkdep output in a separate file.
	Rebuilt dependencies.

	* ecoff.c (_bfd_ecoff_slurp_armap): Cast _bfd_read_ar_hdr return
	value.

	Permit use of mmap when available:

	* configure.in: Check for mmap, madvise, mprotect.
	* config.in, configure: Regenerated.

	* libbfd.c (struct _bfd_window_internal): Define type.
	(bfd_init_window, bfd_free_window, bfd_get_file_window): New
	functions.
	(ok_to_map): New static variable for debugging.
	(_bfd_generic_get_section_contents_in_window): New function.
	* bfd-in.h (bfd_window_internal): Declare type.
	(bfd_window): Define type.
	(bfd_init_window, bfd_free_window, bfd_get_file_window): Declare.
	* libbfd-in.h (_bfd_generic_get_section_contents_in_window):
	Declare.

	* libaout.h (struct aoutdata): Add two window fields.
	(obj_aout_sym_window, obj_aout_string_window): New macros.
	* aoutx.h (some_aout_object_p): Initialize windows.
	(aout_get_external_symbols): Get symbol data and strings in
	windows instead of explicitly allocated buffers.
	(slurp_symbol_table): Free window instead of memory.
	(bfd_free_cached_info): Release windows instead of freeing storage
	directly.
	(aout_link_free_symbols): Ditto.

	* targets.c (bfd_target): Add new field for
	get_section_contents_in_window.
	(BFD_JUMP_TABLE_GENERIC): Updated.
	* aout-adobe.c, aout-target.h, binary.c, bout.c, coff-alpha.c,
	coff-mips.c, elfxx-target.h, i386msdos.c, i386os9k.c, ieee.c,
	libcoff-in.h, oasys.c, srec.c, tekhex.c, versados.c: Added new
	macros for get_section_contents_in_window field.

Sat Nov  4 12:23:26 1995  Fred Fish  <fnf@cygnus.com>

	* core.c: Renamed to corefile.c
	* makefile.dos (OBJS): Change core.o to corefile.o
	* Makefile.in (CFILES, BFD_LIBS): Use corefile.c instead of core.c

Fri Nov  3 15:54:59 1995  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_add_symbols): Rename local variable sub
	to o.  Clobber and restore the list of new csects around the call
	to _bfd_generic_link_add_one_symbol, in case it wants to report a
	linker error and the linker wants to read the symbol table.  Reset
	the line number count of a real section even if it has no relocs.
	(_bfd_xcoff_bfd_final_link): If shared, set the DYNAMIC flag.

	* coffgen.c (_bfd_coff_read_string_table): Warn if the string size
	is too small.

Thu Nov  2 23:16:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (_bfd_ppc_xcoff_relocate_section): Don't warn about
	an undefined symbol in a shared link.

	* linker.c (_bfd_generic_link_add_one_symbol): Correct type of
	oldtype from bfd_link_order_type to bfd_link_hash_type.  From
	phdm@info.ucl.ac.be (Philippe De Muyter).

Wed Nov  1 14:26:02 1995  Manfred Hollstein KS/EF4A 60/1F/110 #40283  <manfred@lts.sel.alcatel.de>

	* coff-m88k.c (rtype2howto): New static function.
	(RTYPE2HOWTO): Use it rather than a macro definition.

	* coffcode.h (coff_write_object_contents): set internal_a.magic
	to PAGEMAGICPEXECPAGED #if defined (M68) && !defined (LYNXOS).

	* configure.in: m68*-motorola-sysv* does not use ptrace-core.o;
	define TRAD_HEADER to new file hosts/delta68.h.
	m88*-motorola-sysv*, however, does use ptrace-core.o.
	* hosts/delta68.h: New file.

	* ptrace-core.c (ptrace_unix_core_file_p): change bfd_zmalloc to
	bfd_zalloc; provide proper parm abfd to calls to bfd_zalloc.

Wed Nov  1 13:51:54 1995  Ken Raeburn  <raeburn@cygnus.com>

	* i386linux.c (MY(vec)): Declare before use.

Wed Nov  1 11:45:07 1995  Ian Lance Taylor  <ian@cygnus.com>

	* reloc16.c (bfd_coff_reloc16_get_relocated_section_contents):
	Pass input_bfd, not in_bfd, to bfd_coff_reloc16_extra_cases.

	* elf.c (bfd_elf_set_dt_needed_name): Don't do anything if the
	BFD is not of the right type.
	(bfd_elf_get_needed_list): Likewise.
	* i386linux.c (bfd_linux_size_dynamic_sections): Likewise.
	* sunos.c (bfd_sunos_get_needed_list): Likewise.
	* xcofflink.c (XCOFF_XVECP): Define.
	(bfd_xcoff_link_record_set): Don't do anything if the BFD is not
	of the right type.
	(bfd_xcoff_import_symbol): Likewise.
	(bfd_xcoff_export_symbol): Likewise.
	(bfd_xcoff_link_count_reloc): Likewise.
	(bfd_xcoff_record_link_assignment): Likewise.
	(bfd_xcoff_size_dynamic_sections): Likewise.

	* sunos.c (sunos_scan_ext_relocs): Only check the reloc symbol
	table index against the number of symbols for a base relative
	reloc.

	* coff-rs6000.c (_bfd_xcoff_sizeof_headers): Change from macro to
	static function.
	* xcofflink.c (_bfd_xcoff_bfd_link_hash_table_create): Set
	full_aouthdr flag here...
	(_bfd_xcoff_bfd_final_link): ...not here.

Tue Oct 31 12:52:02 1995  Fred Fish  <fnf@cygnus.com>

	* libelf.h:  Rename to elf-bfd.h to avoid conflict with
	systems that have a system <libelf.h>.
	* Makefile.in: Globally replace libelf.h with elf-bfd.h.
	* bfd.c, elf.c, elf32-arc.c, elf32-gen.c, elf32-hppa.c,
	elf32-hppa.h, elf32-i386.c, elf32-i860.c, elf32-m68k.c,
	elf32-m88k.c, elf32-mips.c, elf32-ppc.c, elf32-sparc.c,
	elf64-gen.c, elf64-sparc.c, elfcode.h, elflink.c,
	elfxx-target.h: Include elf-bfd.h rather than libelf.h.
	* elfxx-target.h: Change libelf.h reference to elf-bfd.h.

Tue Oct 31 15:30:07 1995  David Mosberger-Tang  <davidm@azstarnet.com>

	* ecoff.c (ecoff_set_symbol_info): Add new parameter weak.  If
	set, set BSF_WEAK in symbol.  Change all callers.
	(ecoff_get_extr): Set weakext based on BSF_WEAK.
	(ecoff_link_add_externals): If weakext is set, pass BSF_WEAK to
	_bfd_generic_link_add_one_symbol.
	(ecoff_indirect_link_order): Check that the section tdata relocs
	are not NULL before using them.

	* configure.in (alpha*-*-linux*): Set COREFILE to trad-core.o and
	define TRAD_HEADER as hosts/alphalinux.h.
	* configure: Rebuild.
	* hosts/alphalinux.h: New file.
	* trad-core.c (trad_unix_core_file_p): Cast u.u_ar0 to bfd_vma,
	not int.

Tue Oct 31 12:34:11 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_slurp_symbol_table): Accept C_BCOMM and
	C_ECOMM storage classes.

	* xcofflink.c (xcoff_mark_symbol): New static function, broken out
	of xcoff_mark.
	(xcoff_mark): Call xcoff_mark_symbol.
	(bfd_xcoff_export_symbol): Call xcoff_mark_symbol.
	(bfd_xcoff_link_count_reloc): Call xcoff_mark_symbol rather than
	doing it by hand.
	(xcoff_build_ldsyms): Build a .loader symbol for an export symbol.

Mon Oct 30 14:53:48 1995  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (struct xcoff_final_link_info): Add new line_filepos
	field.
	(xcoff_find_reloc): New static function.
	(xcoff_link_add_symbols): Use it.
	(_bfd_xcoff_bfd_final_link): Set finfo.line_filepos.
	(xcoff_link_input_bfd): Handle C_BINCL and C_EINCL.  Don't
	relocate the value of C_DECL.

	* elf.c (elf_fake_sections): Remove bogus BFD_ASSERT.

Sat Oct 28 01:25:34 1995  steve chamberlain  <sac@slash.cygnus.com>

	* cofflink.c (_bfd_coff_generic_relocate_section): Make
	callback decide what goes in .relocs.
	* pe[i]-i386.c (TARGET_UNDERSCORE): Define.
	* peicode.h (pe_mkobject_hook): Only copy aouthdr if
	there is one.

Sat Oct 28 01:51:02 1995  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_add_symbols): Handle csects in the
	absolute section.

Fri Oct 27 18:14:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c: More improvements, mostly to fix handling of
	constructors and a few other special cases.
	* coff-rs6000.c (rs6000coff_vec): Set symbol_leading_char back to
	zero, reverting yesterday's change.
	* bfd-in.h (bfd_xcoff_link_record_set): Declare.
	(bfd_xcoff_link_count_reloc): Declare.
	(bfd_xcoff_record_link_assignment): Declare.
	* bfd-in2.h: Rebuild.

Fri Oct 27 14:42:15 1995  Niklas Hallqvist  <niklas@appli.se>

	* PORTING, aout-arm.c, aout-encap.c, aout-target.h,
	aoutx.h, gen-aout.c, host-aout.c, hp300bsd.c, i386aout.c
	i386bsd.c, i386dynix.c, i386linux.c, i386lynx.c, i386mach3.c,
	i386netbsd.c, m68klynx.c, m88kmach3.c, mipsbsd.c, newsos3.c,
	ns32knetbsd.c, pc532-mach.c, riscix.c, sparclynx.c, sparcnetbsd.c:
	Change PAGE_SIZE to TARGET_PAGE_SIZE.

	* m68knetbsd.c: Ditto as well as add support for the m68k4k object
	format.

	* netbsd.h: Double ditto (incl. m68k4k support).  NetBSD's text
	segments includes the a.out header.  See to that the magic number
	*always* is big-endian.

	* config.bfd: Add m68*-hp*-netbsd* case.  Cross-pollinate m68k and
	m68k4k NetBSD configurations.

	* configure.in, configure: Separate i386 & mips NetBSD
	configurations from other BSD ones.  Don't assume DEC is the only
	thing NetBSD/mips run on.  Add {m68k,ns32k,sparc}-*-netbsd*
	configurations.  Add support for m68k4k NetBSD object format.

	* libaout.h: Added M_68K4K_NETBSD magic.

	* m68k4knetbsd.c: New file.

	* hosts/{m68k,sparc}nbsd.h: Don't define HOST_BIG_ENDIAN_P.

	* hosts/nbsd.h: Define HOST_BIG_ENDIAN_P according to
	<machine/endian.h>.

	* hosts/mipsnbsd.h: New file.

Thu Oct 26 14:16:47 1995  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c: Numerous changes to get closer to a working XCOFF
	linker.
	* libcoff-in.h (struct xcoff_tdata): Add full_aouthdr,
	toc_section, and entry_section fields.
	(struct xcoff_section_tdata): Remove ldrel_count field.
	* libcoff.h: Rebuild.
	* coffcode.h (coff_mkobject_hook): Initialize new xcoff_data
	fields.
	(coff_compute_section_file_positions): If RS6000COFF_C, generate
	full a.out header if full_aouthdr is set in xcoff_data.
	(coff_write_object_contents): Likewise.  Set o_snentry and o_sntoc
	based on sections stored in xcoff_data.
	* coff-rs6000.c (xcoff_copy_private_bfd_data): Copy new xcoff_data
	fields.
	(xcoff_reloc_type_lookup): Handle BFD_RELOC_CTOR.
	(rs6000coff_vec): Set symbol_leading_char to '.'.
	* coffgen.c (coff_get_symbol_info): If fix_value is set, fix the
	value stored in ret rather than returning a pointer value.

Wed Oct 25 23:10:39 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config.bfd (powerpc{,le}-{elf,sysv4,eabi,solaris2}): Remove MAC
	format for now.

Wed Oct 25 16:19:27 1995  Jeffrey A Law  (law@cygnus.com)

	* som.c (som_slurp_string_table): Allocate the strings with malloc
	since they're free'd by free_cached_info.
	(som_slurp_symbol_table): Similarly for the symbol table.

Wed Oct 25 14:59:22 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* Makefile.in (diststuff):  Don't make headers.

Wed Oct 25 11:32:54 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in: Rebuild dependencies.

	* sunos.c (bfd_sunos_record_link_assignment): Don't do anything if
	output_bfd is not SunOS.
	(bfd_sunos_size_dynamic_sections): Likewise.  Don't scan relocs of
	non-SunOS input files.

	* xcofflink.c: Extensive changes to support linking shared objects
	and generating a .loader section.
	* libcoff-in.h (struct xcoff_tdata): Add import_file_id field.
	(struct xcoff_section_tdata): Add lineno_count, first_symndx,
	last_symndx, and ldrel_count fields.
	* libcoff.h: Rebuild.
	* coff-rs6000.c (xcoff_howto_table): Correct reloc names.
	* coffcode.h (styp_to_sec_flags): Don't set any flags if STYP_PAD
	is set.
	* bfd-in.h (bfd_xcoff_import_symbol): Declare.
	(bfd_xcoff_export_symbol): Declare.
	(bfd_xcoff_size_dynamic_sections): Declare.
	* bfd-in2.h: Rebuild.

Tue Oct 24 17:44:20 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.in: Add xcofflink.o to pmac_xcoff_vec.
	* configure: Rebuild.
	* mpw-config.in: Add xcofflink.c.o to powerpc-apple-macos.
	* coff-pmac.c: Include coff-rs6000.c instead of duplicating its
	contents.
	(pmac_xcoff_vec): Update to use new xcoff support.
	* coff-rs6000.c (xcoff_generic_stat_arch_elt): Make static.
	(xcoff_write_armap): Declare buf as unsigned char.
	* xcofflink.c (xcoff_link_add_symbols): Declare a local as PTR.

	* mpw-make.sed: Generalize subdir_do edit.

Tue Oct 24 10:25:01 1995  Jeffrey A Law  (law@cygnus.com)

	* hppabsd-core.c (make_bfd_asection): Initialize asect->filepos
	correctly.  Don't initialize asect->vma.

Fri Oct 20 13:23:48 1995  Ken Raeburn  <raeburn@cygnus.com>

	* opncls.c (_bfd_new_bfd): If _bfd_chunksize wasn't preset, use
	something a little less than the page size.

Thu Oct 19 13:06:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coff-i960.c (coff_i960_adjust_symndx): Clear *adjustedp.

Wed Oct 18 16:20:08 1995  steve chamberlain  <sac@slash.cygnus.com>

	* coff-i386.c (coff_i386_reloc_type_lookup): New.
	* coffcode.h (coff_write_object_contents): If .bss is before
	.data us that as data_start.
	* cofflink.c (_bfd_coff_generic_relocate_section): Get reloc
	calc correct.
	* peicode.h (add_data_entry): Use _cooked_size of data directory.
	(coff_swap_outhdr_out): Hardwire in version number.

Wed Oct 18 16:50:54 1995  Ken Raeburn  <raeburn@cygnus.com>

	* sunos.c (sunos_add_dynamic_symbols): Rename local variables
	major and minor to *_vno, since the former are also macros in
	SunOS header files.  Cast result of bfd_alloc to appropriate
	type.

	* coffgen.c (coff_find_nearest_line): Cast used_by_bfd value
	before assigning to sec_data.

Wed Oct 18 13:25:17 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (_bfd_ecoff_find_nearest_line): The offset argument is
	now relative to the section, not absolute.
	* ecofflink.c (_bfd_ecoff_locate_line): Use the right symbol to
	get the file name when there is a N_SO directory name.  When
	handling stabs, remember that section->vma was added to the
	offset.

Tue Oct 17 18:24:54 1995  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (struct sunos_link_hash_table): Add needed field.
	(sunos_link_hash_table_create): Call bfd_release, not free.
	(sunos_link_hash_table_create): Initialize needed field.
	(sunos_add_dynamic_symbols): Record needed objects.
	(bfd_sunos_get_needed_list): New function.
	* bfd-in.h (bfd_sunos_get_needed_list): Declare.
	* bfd-in2.h: Rebuild.

Mon Oct 16 14:43:59 1995  steve chamberlain  <sac@slash.cygnus.com>

	* libcoff-in.h (pe_data_type.in_reloc_p): New.

Mon Oct 16 10:52:50 1995  Ian Lance Taylor  <ian@cygnus.com>

	* bfd-in.h (struct bfd_link_needed_list): Rename from
	bfd_elf_link_needed_list.
	* bfd-in2.h: Rebuild.
	* elf.c, elflink.h, libelf.h: Corresponding changes.

	Add start at AIX linker support; no shared libraries yet.
	* xcofflink.c: New file.
	* configure.in (rs600coff_vec): Use xcofflink.o.
	* configure: Rebuild.
	* libcoff-in.h (struct xcoff_tdata): Add csects and debug_indices
	fields.
	(struct xcoff_section_tdata): Define.
	(xcoff_section_data): Define macro.
	(_bfd_xcoff_bfd_link_hash_table_create): Declare.
	(_bfd_xcoff_bfd_link_add_symbols): Declare.
	(_bfd_xcoff_bfd_final_link): Declare.
	(_bfd_ppc_xcoff_relocate_section): Declare.
	* libcoff.h: Rebuild.
	* coff-rs6000.c: Clean up a bit.
	(xcoff_mkobject): Default modtype to 1L, not RE.  Initialize
	cputype, csects, and debug_indices.
	(xcoff_copy_private_bfd_data): Copy cputype.
	(xcoff_howto_table): Rename from rs6000coff_howto_table.
	(xcoff_rtype2howto): Rename from rs6000coff_rtype2howto.
	(xcoff_reloc_type_lookup): Rename from
	rs6000coff_reloc_type_lookup.
	(coff_relocate_section): Define.
	(_bfd_xcoff_sizeof_headers): Define.
	(_bfd_xcoff_bfd_get_relocated_section_contents): Define.
	(_bfd_xcoff_bfd_relax_section): Define.
	(_bfd_xcoff_bfd_link_split_section): Define.
	(rs6000coff_vec): For BFD_JUMP_TABLE_LINK, use _bfd_xcoff, not
	coff.
	* coffcode.h (coff_compute_section_file_positions): If AIX,
	increment sofar by SMALL_AOUTSZ if not executable.
	(coff_write_object_contents): If AIX, always output an a.out
	header; if not executable, header size of SMALL_AOUTSZ.
	* hash.c (struct bfd_strtab_hash): Add xcoff field.
	(_bfd_stringtab_init): Initialize xcoff field.
	(_bfd_xcoff_stringtab_init): New function.
	(_bfd_stringtab_add): In XCOFF mode, leave two bytes for length.
	(_bfd_stringtab_emit): In XCOFF mode, write out length.
	* libbfd-in.h (_bfd_xcoff_stringtab_init): Declare.
	* libbfd.h: Rebuild.
	* Makefile.in: Rebuild dependencies.
	(BFD32_BACKENDS): Add xcofflink.o.
	(CFILES): Add xcofflink.c.

	* elf32-mips.c (mips_elf_symbol_processing): Set SEC_ALLOC, not
	SEC_NO_FLAGS, for .acommon section.  From Peter Schauer
	<Peter.Schauer@Regent.E-Technik.TU-Muenchen.DE>.

Sat Oct 14 21:36:02 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* coff-ppc.c (in_reloc_p): Add, clone from coff-i386.c.

Fri Oct 13 17:48:43 1995  Ken Raeburn  <raeburn@cygnus.com>

	* acconfig.h (HAVE_SYS_PROCFS_H): Undef, with comment.
	* config.in: Regenerated.

	* opncls.c (getpagesize) [!HAVE_GETPAGESIZE]: Define as 2048.
	(_bfd_chunksize): New variable.
	(_bfd_new_bfd): Set it to getpagesize() if negative, and use it
	for obstack chunk size.
	* configure.in: Check for getpagesize.
	* configure: Regenerated.

	Mon Sep 25 22:49:32 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* trad-core.c (rawptr): Make it a local variable of
 	ptrace_unix_core_file_p.

Fri Oct 13 11:22:01 1995  steve chamberlain  <sac@slash.cygnus.com>

	* coff-arm.c (in_reloc_p): New.
	* coff-i386.c (in_reloc_p): New.
	* coffcode.h: Allways include peicode.h if COFF_WITH_PE.
	(coff_write_object_contents): Only set has_reloc_section
	if PE_IMAGE.
	* cofflink.c (_bfd_coff_generic_relocate_section): Call
	in_reloc_p to decide if reloc should be emitted.
	* libcoff.h (pe_data_type.in_reloc_p): New.
	* peicode.h (pe_mkobject): Initialize in_reloc_p.

Wed Oct 11 00:49:29 1995  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (_bfd_coff_internal_syment_name): Move to coffgen.c.
	(_bfd_coff_read_internal_relocs): Likewise.
	* coffgen.c (_bfd_coff_internal_syment_name): Copy from coffgen.c.
	(_bfd_coff_read_internal_relocs): Likewise.

	* elflink.h (elf_link_add_object_symbols): Correct conditions
	under which type and size change warnings are issued.

Tue Oct 10 18:32:46 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffgen.c (coff_count_linenumbers): Don't count line numbers for
	a symbol which is not in a real section.
	(coff_write_native_symbol): Corresponding change.

	* cofflink.c (_bfd_coff_link_hash_newfunc): Rename from
	coff_link_hash_newfunc and make non-static.
	(_bfd_coff_link_hash_table_init): New function, broken out of
	_bfd_coff_link_hash_table_create.
	(_bfd_coff_link_hash_table_create): Use it.
	(process_embedded_commands): Make static.
	* libcoff-in.h ((_bfd_coff_link_hash_newfunc): Declare.
	(_bfd_coff_link_hash_table_init): Declare.
	* libcoff.h: Rebuild.

	* coffcode.h (coff_mkobject_hook): If RS6000COFF_C, set cputype
	field in XCOFF tdata.
	(coff_set_arch_mach_hook): Check ifdef RS6000COFF_C, not ifdef
	U802ROMAGIC, for clarity.  Try to set arch and machine correctly
	based on cputype stored in a.out header, or in n_type of initial
	.file symbol.
	(coff_write_object_contents): Set cputype correctly in a.out
	header.
	(coff_slurp_symbol_table): Add casts to file_ptr to avoid
	warnings.
	* coffswap.h (coff_swap_aouthdr_in): Swap in cputype field.
	(coff_swap_aouthdr_out): Swap out cputype field.  Don't clear
	old resv1 field.
	* libcoff-in.h (struct xcoff_tdata): Add cputype field.
	* libcoff.h: Rebuild.

	* cpu-rs6000.c (rs6000_compatible): New static function.
	(bfd_rs6000_arch): Use it.
	* cpu-powerpc.c (powerpc_compatible): New static function.
	(arch_info_struct): Define various flavours of PowerPC.
	(bfd_powerpc_arch): Use powerpc_compatible.  Point at
	arch_info_struct.

Tue Oct 10 10:50:46 1995  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (FLAGS_TO_PASS):  Remove BISON.

Tue Oct 10 01:28:29 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Don't warn about
	changing the size or type if the old definition was weak.

Mon Oct  9 11:24:08 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (combined_entry_type): Add fix_line field.
	(coff_slurp_line_table): Warn if we try to set the lineno field of
	a symbol twice.
	(coff_slurp_symbol_table): If RS6000COFF_C, handle C_BINCL and
	C_EINCL by setting fix_line.  Fix C_BSTAT symbol value.
	* coffgen.c (coff_mangle_symbols): Handle fix_line.
	(coff_write_symbol): Only use N_DEBUG if the symbol is in the
	absolute section.
	(coff_print_symbol): Print fix_value symbols in a useful fashion.
	* libcoff.h: Rebuild.

	* libcoff-in.h (struct xcoff_tdata): Define.
	(xcoff_data): Define.
	* bfd.c (struct _bfd): Add xcoff_obj_data field to tdata union.
	* bfd-in2.h, libcoff.h: Rebuild.
	* coff-rs6000.c (xcoff_mkobject): New static function.
	(coff_mkobject): Define.
	(xcoff_copy_private_bfd_data): New static function.
	(coff_bfd_copy_private_bfd_data): Define.
	(rs6000coff_howto_table): Change R_TOC complain_on_overflow from
	signed to bitfield.
	(rs6000coff_vec): Add DYNAMIC to object_flags.
	* coffcode.h (sec_to_styp_flags): If RS6000COFF_C, handle .pad and
	.loader sections specially.
	(coff_new_section_hook): If RS6000COFF_C, get the .text and .data
	section alignment from the XCOFF tdata information.
	(coff_mkobject_hook): If RS6000COFF_C, set DYNAMIC based on
	F_SHROBJ, and copy the extra a.out header information into the
	XCOFF tdata structure.
	(coff_write_object_contents): If RS6000COFF_C, set F_SHROBJ,
	F_DYNLOAD and the extra a.out header information.
	(coff_slurp_symbol_table): Set BSF_NOT_AT_END for a C_EXT or
	C_HIDEXT symbol with attached csect information.
	* coffswap.h (coff_swap_aouthdr_in): If RS6000COFF_C, swap
	in the o_maxdata field.
	(coff_swap_aouthdr_out): If RS6000COFF_C, swap extra XCOFF fields.
	* coffgen.c (coff_renumber_symbols): Don't move any symbol to the
	end if BSF_NOT_AT_END is set.

	* targets.c (bfd_target): Rename _bfd_read_ar_hdr field to
	_bfd_read_ar_hdr_fn.
	* libbfd-in.h (_bfd_read_ar_hdr): Update accordingly.
	* bfd-in2.h, libbfd.h: Rebuild.
	* archive.c (_bfd_get_elt_at_filepos): Cast _bfd_read_ar_hdr
	return value.
	(do_slurp_bsd_armap, do_slurp_coff_armap): Likewise.
	(bfd_slurp_bsd_armap_f2): Likewise.
	(_bfd_slurp_extended_name_table): Likewise.

Fri Oct  6 16:18:35 1995  Ken Raeburn  <raeburn@cygnus.com>

	Mon Sep 25 22:49:32 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* archive.c (bfd_get_next_mapent): Return BFD_NO_MORE_SYMBOLS
	when the symbol table is empty.

	* elf32-m68k.c (elf_m68k_size_dynamic_sections): Don't reserve
	space for section symbols, since we don't output them either.
	(elf_m68k_adjust_dynindx): Removed.

	* ptrace-core.c (rawptr): Make it a local variable of
 	ptrace_unix_core_file_p.

Fri Oct  6 12:24:47 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* coff-rs6000.c (xcoff_write_archive_contents): Return false, not
	NULL.

	* config.bfd (powerpc{,le}-{elf,sysv4,eabi,solaris2}): Add NT, and
	Mac object file formats.

Fri Oct  6 12:04:02 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffgen.c (coff_fix_symbol_name): Don't try to set up file
	auxent if there isn't one.
	(coff_write_symbols): If there is no file auxent, use SYMNMLEN
	rather than FILNMLEN as the maximum name length.

	* coffcode.h (bfd_coff_backend_data): Add new field
	_bfd_coff_print_aux.
	(bfd_coff_print_aux): New static function.
	(coff_pointerize_aux_hook (RS6000COFF_C version)): Pointerize the
	scnlen field of an XTY_LD csect aux entry.
	(coff_print_aux): New static function.
	(coff_slurp_symbol_table): Don't pointerize scnlen field; now done
	in coff_pointerize_aux_hook.
	(bfd_coff_std_swap_table): Initialize new field.
	* coffgen.c (coff_print_symbol): Call bfd_coff_print_aux.
	* libcoff.h: Rebuild.
	* coff-alpha.c (alpha_ecoff_backend_data): Initialize new field.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.

	* coffcode.h (coff_write_object_contents): On AIX, clear F_RELFLG
	if there are symbols, for native AIX ld compatibility.

	* coffcode.h (bfd_coff_backend_data): Add new field
	_bfd_coff_pointerize_aux_hook.
	(coff_pointerize_aux_hook): Define as a function if RS6000COFF_C
	or I960, and as 0 otherwise.
	(bfd_coff_std_swap_table): Initialize new field.
	* libcoff.h: Rebuild.
	* coffgen.c (coff_pointerize_aux): Change parameters  to take
	symbol pointer instead of type and class, and to take aux index.
	Call _bfd_coff_pointerize_aux_hook if it is defined.
	(coff_get_normalized_symtab): Always call coff_pointerize_aux.
	* coff-alpha.c (alpha_ecoff_backend_data): Initialize all fields.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.

	* coff-rs6000.c: Add full support for AIX archives.  Rewrite old
	read-only/host-only support.

	* coffcode.h (coff_slurp_symbol_table): Set C_HIDEXT symbols to be
	BSF_LOCAL.
	(OTHER_GLOBAL_CLASS): Do not define to be C_HIDEXT if
	RS6000COFF_C.

	* targets.c (bfd_target): Add _bfd_read_ar_hdr field.  Modify
	BFD_JUMP_TABLE_ARCHIVE accordingly.
	* libbfd-in.h (_bfd_snarf_ar_hdr): Don't declare.
	(_bfd_compute_and_write_armap): Declare.
	(_bfd_generic_read_ar_hdr): Declare.
	(_bfd_read_ar_hdr): Define.
	(_bfd_noarchive_read_ar_hdr): Define.
	(_bfd_archive_bsd_read_ar_hdr): Define.
	(_bfd_archive_coff_read_ar_hdr): Define.
	* archive.c: Change all callers of _bfd_snarf_ar_hdr to call
	_bfd_read_ar_hdr instead.
	(_bfd_generic_read_ar_hdr): Rename from _bfd_snarf_ar_hdr.
	(_bfd_compute_and_write_armap): Rename from
	compute_and_write_armap.  Make non-static.  Change all callers.
	* ecoff.c (_bfd_ecoff_slurp_armap): Call _bfd_read_ar_hdr rather
	than _bfd_snarf_ar_hdr.
	* aout-target.h (MY_read_ar_hdr): Define if not defined.
	* ieee.c (ieee_read_ar_hdr): Define.
	* libecoff.h (_bfd_ecoff_read_ar_hdr): Define.
	* oasys.c (oasys_read_ar_hdr): Define.
	* som.c (som_read_ar_hdr): Define.
	* bfd-in2.h, libbfd.h: Rebuild.

Thu Oct  5 14:04:07 1995  steve chamberlain  <sac@slash.cygnus.com>

	* peicode.c (coff_swap_filehdr_in): If symptr is
	zero, there aren't any symbols, even if nsyms is set.

Thu Oct  5 11:45:02 1995  Ian Lance Taylor  <ian@cygnus.com>

	* libecoff.h (struct ecoff_backend_data): Add adjust_headers
	field.
	* ecoff.c (ecoff_sec_to_styp_flags): Check for various Alpha
	sections, and set styp correctly for them: .got, .hash, .dynamic,
	.liblist, .rel.dyn, .conflic, .dynstr, .dynsym, .comment.
	(_bfd_ecoff_styp_to_sec_flags): Check for various Alpha section
	types.
	(ecoff_sort_hdrs): New static function.
	(ecoff_compute_section_file_positions): Return boolean, not void.
	Sort the sections by VMA before looking through them.  Put the
	first non SEC_ALLOC section on a new page.  Put every SEC_ALLOC
	section on an appropriate boundary within the page.
	(ecoff_compute_reloc_file_positions): Check return value of
	ecoff_compute_section_file_positions.
	(_bfd_ecoff_set_section_contents): Likewise.
	(_bfd_ecoff_write_object_contents): Check for various Alpha
	section types when incrementing text_size and data_size.  Call
	adjust_headers backend function if it exists.
	* coff-alpha.c (alpha_adjust_headers): New static function.
	(alpha_ecoff_backend_data): Initialize adjust_headers field.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.

	* hosts/i386bsd.h: Restore file incorrectly deleted on Sep 6.

Wed Oct  4 18:15:02 1995  Jeff Law  (law@hurl.cygnus.com)

	* rs6000-core.c (CORE_VERSION_1): Use CORE_VERSION_1 instead
	of ALTERNATE_AIX_CORE_FORMAT.
	* configure.in (aix4): No longer need CORE_FLAGS.
	* configure: Updated.

Wed Oct  4 15:36:36 1995  Ken Raeburn  <raeburn@cygnus.com>

	NS32k changes from Ian Dall:
	* aoutx.h (MY_final_link_relocate, MY_relocate_contents): New
	macros.
	(aout_link_input_section_std, aout_link_input_section_ext,
	aout_link_reloc_link_order): Call them instead of _bfd_*
	versions.
	* aout-target.h (MY_exec_header_not_counted): New macro, defaults
	to zero.
	(backend_data): Use it instead of hardcoded zero.

	* aout-ns32k.c (CTOR_TABLE_RELOC_HOWTO): New macro.
	(MY_swap_std_reloc_out): Use udata.i for KEEPIT, don't call stoi.

	* ns32knetbsd.c: Include bfd.h.
	(MY_text_includes_header, MY_bfd_reloc_type_lookup): New macros.
	(MY_bfd_reloc_type_lookup): Declare function too.
	* pc532-mach.c (set_sizes): Don't declare.
	(MY_text_includes_header, MY_exec_header_not_counted): Define.
	(backend_data, MY_backend_data): Don't define.

	* config.bfd: Treat ns32k-pc532-ux* like ns32k-pc532-mach*, and
	ns32k-*-lites* like ns32k-*-netbsd*.

	* hosts/nbsd.h: Swap order of sys/vmparam.h and sys/param.h, to
	compile on lites.

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

	* coffcode.h (coff_write_object_contents): Restore setting
	f_timdat to 0, deleted on August 22.

Tue Oct  3 16:28:32 1995  steve chamberlain  <sac@slash.cygnus.com>

	* coffcode.h (coff_bfd_copy_private_symbol_data,
	coff_bfd_copy_private_section_data,
	coff_bfd_copy_private_bfd_data): ifdef to allow overrides.
	* peicode.h (coff_bfd_copy_private_bfd_data): New
	(pe_bfd_copy_private_bfd_data): New.
	(coff_swap_scnhdr_in): Swap bss size into the right place.
	(pe_print_private_bfd_data): Add some newlines.

Tue Oct  3 11:53:04 1995  Jeff Law  (law@hurl.cygnus.com)

	* som.c (setup_sections): Don't die if a space has no subspaces.

Mon Oct  2 14:08:55 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Don't let a weak
	dynamic symbol override a common symbol.  Don't change the size or
	type if they have been set and the new symbol is not a definition.
	Warn if the size or type changes.

Sun Oct  1 01:34:41 1995  Jeff Law  (law@hurl.cygnus.com)

        * som.c (som_begin_writing): Don't write the symbol table or
	symbol	strings.
	(som_finish_writing): Write them here.  Place them after the
	subspace data, but before the relocs.

Fri Sep 29 11:01:55 1995  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (sunos_add_one_symbol): Just pass false, not
	info->shared_library, to sunos_create_dynamic_sections.
	(sunos_scan_ext_relocs): Don't warn about a reloc in the .text
	section.
	(sunos_check_dynamic_reloc): Remove .text section assertion.

Thu Sep 28 18:48:47 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* config.bfd: Add powerpc-*-macos*, powerpc-*-mpw*.
	* configure, configure.in: Add pmac_xcoff_vec case.
	* Makefile.in (BFD32_BACKENDS): Add coff-pmac.o.
	* coff-pmac.c: New file, PowerMac XCOFF support.
	* coffcode.h (coff_set_arch_mach_hook): Add PowerMac case.
	* targets.c (pmac_xcoff_vec): Declare.

	* mpw-config.in: Various changes to be compatible with the
	autoconf-based configury.
	* mpw-make.sed: New file, sed commands to translate Unix
	makefile into MPW syntax.
	* mpw-make.in: Remove.
	* hosts/mpw.h: Remove.
	* bfd-in.h, bfd-in2.h: If MPW, include the file that defines
	true and false as enums, then define TRUE_FALSE_ALREADY_DEFINED.

Thu Sep 28 17:06:23 1995  steve chamberlain  <sac@slash.cygnus.com>

	* binary.c (binary_get_symtab): Return an empty string on error.
	* opncls.c (bfd_fdpenr): Change WIN32 restriction to WINGDB.

Thu Sep 28 15:30:44 1995  Kim Knuttila  <krk@nellie>

	* coff-ppc.c: Reformatted according to gnu conventions
	              Removed irrelevant "if 0" code

Thu Sep 28 11:19:53 1995  Ian Lance Taylor  <ian@cygnus.com>

	* hp300hpux.c (convert_sym_type): Treat secondary symbols as weak
	symbols rather than as indirect symbols.
	(MY(slurp_symbol_table)): Don't do anything special about
	secondary symbols.

	* coffcode.h (coff_new_section_hook): Make sure that the alignment
	of .ctors and .dtors sections is no larger than 2.

	* sunos.c (sunos_add_one_symbol): Don't change
	bfd_link_hash_common to bfd_link_hash_new, since it may be on the
	undef list.
	(bfd_sunos_record_link_assignment): Don't put __DYNAMIC in the
	dynamic symbols when creating a shared library.
	(sunos_scan_ext_relocs): Handle relocs correctly when creating a
	shared library.
	(sunos_scan_dynamic_symbol): Don't mark the __DYNAMIC symbol as
	written even if it is not defined in a regular object.
	(sunos_write_dynamic_symbol): Use plt_offset for the address of
	the jump table reloc.  Add an assertion.  Use RELOC_JMP_SLOT
	rather than the constant 22.
	(sunos_check_dynamic_reloc): Handle creating a shared library.
	(sunos_finish_dynamic_link): Set the first entry in the GOT to
	zero when creating a shared library.
	* aoutx.h (NAME(aout,final_link)): If there is a symbol __DYNAMIC,
	write it out at the start of the symbol table.

	* Makefile.in (BFD32_BACKENDS): Add coff-arm.o.

Thu Sep 28 00:58:05 1995  Doug Evans  <dje@deneb.cygnus.com>

	* config.bfd: Add arm-*-coff.
	* configure.in, configure: Add armcoff_{little,big}_vec.
	* targets.c (armcoff_{little,big}_vec): Declare.
	(bfd_target_vector): Add armcoff_{little,big}_vec.
	* coff-arm.c (armcoff_{little,big}_vec): Always define.

Wed Sep 27 10:37:14 1995  Ian Lance Taylor  <ian@cygnus.com>

	* targets.c (bfd_find_target): Remove debugging code.

Wed Sep 27 07:23:39 1995  Kim Knuttila  <krk@nellie>

	* coff-ppc.c, pe-ppc.c, pei-ppc.c: Initial bfd for coff/PE
        support on powerpc.
	* Makefile.in: added *-ppc files
	* coffcode.h: ppc MAGIC, and use peicode.h rather than coffswap.h to
        allow pe based .o's to be shared with other tools on ppc/NT
	* config.bfd: added powerpc[le]-[pe|winnt] config support
	* configure, configure.in: added bfd_powerpc[le]_pe[i]_vec
	* peicode.h: Added more section flags for PE on ppc
	             Added coff_swap_filehdr_out to allow peicode.h to be
		     used for non-image PE files on ppc.
		     Check for image, or not, before copying pe_opthdr
	* targets.c: Added new bfd's
	* targets.c: Removed two inactive bfds that shouldn't have made it this
                     far.

Tue Sep 26 14:06:41 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_reloc_type): Rename from reloc_type, and use
	explicit values to initialize all relocs.  Change all users.
	(ppc_elf_brtaken_inner): New function to handle branch predicition
	relocs.
	(ppc_elf_brtaken_reloc): Ditto.
	(ppc_elf_howto_raw): Use new functions.  Make sure all unsupported
	relocs use ppc_elf_unsupported_reloc.
	(ppc_elf_merge_private_bfd_data): Keep track of whether an error
	needs to be reported.
	(ppc_elf_relocate_section): Support branch prediction relocs.

Tue Sep 26 12:48:05 1995  Ian Lance Taylor  <ian@cygnus.com>

	* bfd.c (bfd_assert): Remove \n from string passed to
        _bfd_error_handler.

	* coff-i386.c: (TWO_DATA_SECS): Don't define.
	* coffcode.h (bfd_coff_backend_data): Remove _bfd_make_section_hook.
	(bfd_coff_make_section_hook): Don't define.
	(coff_make_section_hook): Remove.
	(sec_to_styp_flags): Remove TWO_DATA_SECS case.
	(styp_to_sec_flags): Likewise.
	(coff_write_object_contents): Likewise.
	(bfd_coff_std_swap_table): Don't initialize make_section_hook
	field.
	* libcoff.h: Rebuild.
	* coffgen.c (make_a_section_from_file): Just call
	bfd_make_section_anyway, not bfd_make_section or
	bfd_coff_make_section_hook.
	* ecoff.c (_bfd_ecoff_make_section_hook): Remove.
	* libecoff.h (_bfd_ecoff_make_section_hook): Don't declare.
	* coff-alpha.c (alpha_ecoff_backend_data): Don't initialize
	make_section_hook field.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.

	* aoutx.h (translate_from_native_sym_flags): Don't try to stuff
	pointers into value field for warning and indirect symbols; just
	leave the value field alone.
	* linker.c (generic_link_add_symbol_list): Use next symbol for
	warning and indirect symbols, rather than looking in symbol value.
	* ecoff.c (ecoff_set_symbol_info): Remove indirect_ptr_ptr
	parameter.  Change all callers.  Remove support for indirect
	symbols; it didn't work anyhow.
	(_bfd_ecoff_slurp_symbol_table): Remove indirect_ptr variable.
	* syms.c: Change comments about BSF_WARNING and BSF_INDIRECT.
	* bfd-in2.h: Rebuild.

Mon Sep 25 16:04:09 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_howto_raw): For all 14-bit branch relocs,
	go back to telling the tools this reloc operates on 32 bits.

Mon Sep 25 11:48:02 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aout-adobe.c (aout_adobe_callback): Use _bfd_error_handler
	rather than a direct fprintf.
	* archive.c (_bfd_write_archive_contents): Likewise.
	* coffcode.h (coff_slurp_symbol_table): Likewise.
	* elf32-ppc.c (ppc_elf_merge_private_bfd_data): Likewise.
	(ppc_elf_unsupported_reloc): Likewise.
	(ppc_elf_relocate_section): Likewise.
	* i386linux.c (linux_tally_symbols): Likewise.
	(linux_finish_dynamic_link): Likewise.
	* osf-core.c (osf_core_core_file_p): Likewise.
	* rs6000-core.c (rs6000coff_get_section_contents): Likewise.
	* som.c (som_sizeof_headers): Likewise.
	* srec.c (srec_bad_byte): Likewise.
	* bfd.c (bfd_assert): Likewise.  Also change file to be const.
	* libbfd-in.h (bfd_assert): Declare first parameter const.
	* libbfd.h: Rebuild.
	* coff-a29k.c (a29k_reloc): Don't bother to fprintf; returning
	bfd_reloc_overflow is enough.
	* coff-h8300.c (rtype2howto): Don't bother to fprintf; just abort.
	* coff-h8500.c (rtype2howto): Likewise.
	* coff-z8k.c (rtype2howto): Likewise.
	* coffcode.h (dummy_reloc16_extra_cases): Likewise.
	* elf.c (_bfd_elf_get_lineno): Likewise.
	(_bfd_elf_no_info_to_howto): Likewise.
	(_bfd_elf_no_info_to_howto_rel): Likewise.
	* hp300hpux.c (convert_sym_type): Likewise.
	(MY(swap_std_reloc_in)): Likewise.
	* elf.c (bfd_section_from_shdr): Remove #if 0 sections.

	* libaout.h (struct aoutdata): Add line_buf field.
	* aoutx.h (NAME(aout,find_nearest_line)): Remove statics buffer
	and filename_buffer.  Instead, use a malloc buffer stored in the
	new line_buf field.  Remove length restrictions.

	* coffgen.c (string_size): Remove static variable.
	(debug_string_size, debug_string_section): Likewise.
	(coff_fix_symbol_name): Add string_size_p, debug_string_section_p,
	and debug_string_size_p parameters.  Use them instead of the
	global variables.  Change all callers.
	(coff_write_symbol): Likewise.
	(coff_write_alien_symbol, coff_write_native_symbol): Likewise.
	(coff_write_symbols): Add local variables to replace removed
	global variables.

	* libcoff-in.h (struct coff_section_tdata): Add offset, i,
	function, and line_base fields.
	* libcoff.h: Rebuild.
	* coffgen.c (coff_find_nearest_line): Use section tdata to cache
	information, rather than using static variables.

	* sunos.c (sunos_read_dynamic_info): Adjust offsets in an NMAGIC
	file.  From Peter DeWolf <pld@amt.tay1.dec.com>.

	* init.c (initialized): Remove static variable.
	(bfd_init): Don't bother setting initialized.
	(bfd_check_init): Remove.
	* opncls.c (_bfd_new_bfd): Don't call bfd_check_init.
	* libbfd.h: Rebuild.

Sat Sep 23 01:22:23 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* rs6000-core.c (rs6000coff_core_p):  Don't check the core file
	size for full core dumps. Copy core file header to private data.
	(rs6000coff_core_file_failing_command,
	rs6000coff_core_file_failing_signal):  New functions to extract
	the file name and terminating signal from the core file.
	* coff-rs6000.c:  Use them.

Fri Sep 22 17:44:47 1995  Ian Lance Taylor  <ian@cygnus.com>

	Change arch info to be const, initialized at compile time.
	* archures.c: Reindent many functions.  Change CONST to const.
	(bfd_arch_info_type): Make arch_name const.  Remove disassemble;
	nothing set it anyhow.  Make next const.
	(bfd_arch_info_list): Remove.
	(bfd_archures_list): Rename from archures_init_table.  Change from
	a table of function pointers to a table of bfd_arch_info_type
	structure addresses.
	(bfd_scan_arch): Rewrite accordingly.  Return a const pointer.
	(bfd_lookup_arch): Likewise.
	(bfd_set_arch_info): Rewrite accordingly.  Change argument to be a
	const pointer.
	(bfd_default_arch_struct): Make const.
	(bfd_arch_init, bfd_arch_linkin): Remove.
	(bfd_get_arch_info): Return a const pointer.
	* init.c (bfd_init): Don't call bfd_arch_init.
	* bfd.c (struct _bfd): Make arch_info const.
	* bfd-in2.h: Rebuild.
	* libbfd.h: Rebuild.
	* configure.in: Put & before everything in $selarchs.
	* configure: Rebuild.
	* cpu-*.c: Change bfd_*_arch from a function which calls
	bfd_arch_linkin to a const structure.
	* ieee.c (ieee_object_p): Make arch const.

Fri Sep 22 16:23:18 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* reloc.c (bfd_reloc_code_type): Add relocations to support all of
	PowerPC V.4.
	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate.

	* elf32-ppc.c (reloc_type): Update names to match current draft.
	(ppc_elf_howto_raw): Mark 14 bit relocs as short sized and PC
	relative.  Update names to current V.4 draft.
	(ppc_elf_reloc_type_lookup): Add support for more relocations.
	(ppc_elf_relocate_section): Rename relocations to match draft.

Thu Sep 21 21:53:18 1995  Michael Meissner  <meissner@cygnus.com>

	* elf32-ppc.c (ppc_elf_merge_private_bfd_data): Allow modules
	compiled with -mrelocatable-lib to be linked with either normal
	modules or -mrelocatable modules.

Wed Sep 20 12:03:26 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_write_object_contents): Clear the vstamp field
	in the a.out header.

	* aoutx.h (NAME(aout,swap_ext_reloc_out)): Don't set r_extern for
	a reloc against a local symbol, even if it's not a section.

Tue Sep 19 17:02:26 1995  Ian Lance Taylor  <ian@cygnus.com>

	* targets.c (bfd_target): Remove unused align_power_min field.
	* bfd-in2.h: Rebuild.
	* All backends: Remove initialization of align_power_min.

Tue Sep 19 14:02:21 1995  steve chamberlain  <sac@slash.cygnus.com>

	* peicode.h (coff_swap_scnhdr_out): Get sizes for BSS right.

Mon Sep 18 14:35:01 1995  Arne H. Juul  <arnej@pvv.unit.no>

	* config.bfd (mips-dec-netbsd*): New target.
	* configure.host (mips-dec-netbsd*): New host.
	* configure.in (mips-dec-netbsd*): New native.
	* configure: Rebuild.

Fri Sep 15 10:24:36 1995  Ian Lance Taylor  <ian@cygnus.com>

	Make the COFF backend linker merge common types:
	* cofflink.c (struct coff_debug_merge_element): Define.
	(struct coff_debug_merge_type): Define.
	(struct coff_debug_merge_hash_entry): Define.
	(struct coff_debug_merge_hash_table): Define.
	(coff_debug_merge_hash_table_init): Define.
	(coff_debug_merge_hash_table_free): Define.
	(coff_debug_merge_hash_lookup): Define.
	(struct coff_final_link_info): Add debug_merge field.
	(coff_debug_merge_hash_newfunc): New static function.
	(_bfd_coff_final_link): Allocate and free debug_merge table.
	(coff_link_input_bfd): Merge identical enum, struct and union
	types.

Thu Sep 14 14:53:58 1995  Ian Lance Taylor  <ian@cygnus.com>

	Convert i960 COFF to use COFF backend linker.
	* coff-i960.c (coff_i960_relocate): Use a coff_section_data
	structure to store the symbol being used.
	(coff_i960_start_final_link): New static function.
	(coff_i960_relocate_section): New static function.
	(coff_i960_adjust_symndx): New static function.
	(coff_start_final_link): Define.
	(coff_relocate_section): Define.
	(coff_adjust_symndx): Define.
	* coffcode.h (bfd_coff_backend_data): Add new callback function
	_bfd_coff_start_final_link.
	(bfd_coff_start_final_link): Define.
	(coff_start_final_link): Define if not defined.
	(bfd_coff_std_swap_table): Add coff_start_final_link.
	* cofflink.c (_bfd_coff_internal_syment_name): Make globally
	visible.
	(_bfd_coff_final_link): Call bfd_coff_start_final_link if the
	function callback is not NULL.
	* libcoff-in.h (struct coff_section_tdata): Add tdata field.
	(_bfd_coff_internal_syment_name): Declare.
	* libcoff.h: Rebuild.
	* configure.in (icoff_big_vec): Add cofflink.o.
	(icoff_little_vec): Likewise.
	* configure: Rebuild.

Wed Sep 13 17:38:23 1995  Fred Fish  <fnf@rtl.cygnus.com>

	* Makefile.in (clean-info): Remove extraneous tab from line
	following action.

Wed Sep 13 13:27:53 1995  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (coff_link_input_bfd): Fail if a section with no
	contents has relocs.

Thu Sep 12 12:45:34 1995  steve chamberlain  <sac@slash.cygnus.com>

	* coffcode.h (coff_compute_section_file_positions): Keep the
	raw size safe.
	(coff_write_object_contents): Remember if it's a relocatable
	file.
	* libcoff-in.h (pe_data_type): New member 'has_reloc_section'
	* peicode.h (coff_swap_filehdr_out): Clear not-reloc flag
	if relocatable file. Swap out saved raw size.

Tue Sep 12 12:14:33 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (do_maintainer_clean): Rename from do_realclean.
	(maintainer-clean): Rename from realclean, passing
	maintainer-clean down to subdirectories, but leave realclean as a
	synonym.

	* linker.c (_bfd_generic_link_add_one_symbol): Pass symbol name to
	warning callback.

	* dep-in.sed: Remove config.h from generated dependencies.

	* sunos.c (sunos_slurp_dynamic_symtab): New static function,
	broken out of sunos_canonicalize_dynamic_symtab.
	(sunos_canonicalize_dynamic_symtab): Call new function
	sunos_slurp_dynamic_symtab.
	(sunos_add_dynamic_symbols): Add three new parameters.  Return the
	dynamic symbol table to the caller.
	* aoutx.h (aout_link_add_symbols): Permit add_dynamic_symbols
	callback to override the symbols being read.
	* libaout.h (struct aout_backend_data): Add three new parameters
	to add_dynamic_symbols callback.

	Extensive minor changes to avoid various gcc warnings.  Also:
	* Makefile.in (BFD32_BACKENDS): Remove coff-arm.o.
	* archures.c (bfd_arch_info_type): Change mach field from long to
	unsigned long.
	(bfd_lookup_arch): Change machine parameter from long to unsigned
	long.

Mon Sep 11 10:55:47 1995  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (sunos_scan_std_relocs): Fix BFD_ASSERT: it's OK to find
	a symbol with a non-zero plt_offset.

Fri Sep  8 11:47:24 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (align_file_position): Remove; not used.

	* configure.in: Only check for <sys/procfs.h> on a native system,
	and make sure it defines prstatus_t.
	* configure: Rebuild.

Thu Sep  7 12:48:01 1995  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (sunos_write_dynamic_symbol): Correct m68k abort test.

	* 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 (do_distclean): Remove config.h and stamp-h.
	(Makefile): Just rebuild Makefile.
	(config.h, stamp-h): New targets.
	* configure.in: Create stamp-h when rebuilding config.h.
	* configure: Rebuild.

Wed Sep  6 15:00:33 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Call AC_CONFIG_HEADER.  Substitute
	HOST_64BIT_LONG.  Check that various header files exist.  Check
	that fcntl exists.  Call BFD_BINARY_FOPEN.  Check whether malloc
	and/or free need to be declared.  Don't make a link to sysdep.h.
	Define TRAD_HEADER for various hosts.
	* configure: Rebuild.
	* configure.host: Don't set my_host.  Add definitions taken from
	host header files for various entries.  Remove entries which now
	do nothing.
	* acconfig.h: New file.
	* config.h.in: New file, built by autoheader.
	* sysdep.h: New file.
	* Makefile.in (do_distclean): Don't remove sysdep.h.
	(RECONFIG): Remove.
	(LOCAL_H_DEPS): New variable.
	($(BFD_LIBS)): Use $(LOCAL_H_DEPS) rather than libbfd.h and
	$(RECONFIG).
	($(BFD_MACHINES), $(BFD_BACKENDS)): Likewise.
	($(OPTIONAL_BACKENDS)): Likewise.
	(stmp-bfd.h): Just substitute for BFD_HOST_64BIT_LONG, rather than
	looking through sysdep.h.
	* bfd-in.h (BFD_HOST_64BIT_LONG): Define; set by Makefile.
	(BFD_HOST_64_BIT): Define based on BFD_HOST_64BIT_LONG.
	(fprintf_vma, sprintf_vma): Likewise.
	(int64_type, uint64_type): Don't define.
	* bfd-in2.h: Rebuild.
	* archures.c, bfd.c, srec.c: Include <ctype.h>.
	* elfcore.h: Check HAVE_SYS_PROCFS_H rather than HAVE_PROCFS.
	* lynx-core.c: Include stuff from old hosts/lynx.h.
	* opncls.c (bfd_fdopenr): Check HAVE_FNCTL and defined (F_GETFL),
	rather than NO_FCNTL.
	* targets.c (bfd_target_list): Check HOST_HPPAHPUX and ! __STDC__
	rather than NATIVE_HPPAHPUX_COMPILER.
	* trad-core.c: Don't include <errno.h>.  Include TRAD_HEADER if it
	is defined.
	* hosts/*.h: Remove all header files which merely include,
	declare, and define things.  Leave header files which define
	information needed by trad-core.c.

	* aclocal.m4 (BFD_BINARY_FOPEN): Define.
	(BFD_CC_FOR_BUILD): Define.
	* configure.in: Use BFD_CC_FOR_BUILD.
	* configure: Rebuild.

Tue Sep  5 19:35:28 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aclocal.m4: Don't try to grep ../Makefile if it doesn't exist.
	* configure: Rebuild.

	* coff-sparc.c (CALC_ADDEND): Don't set the addend to the value of
	a global symbol.

Tue Sep  5 12:48:26 1995  Jason Molenda   (crash@phydeaux.cygnus.com)

	* config.bfd: i386pe_ve -> i386pe_vec.

Mon Sep  4 14:02:43 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Incorporate host Makefile fragments by setting
	shell variables.
	* configure.in: Call AC_PROG_CC.  Substitute CFLAGS, HDEFINES and
	AR.  Call AC_PROG_INSTALL.  Substitute CC_FOR_BUILD, choosing a
	value based on whether the code is being compiled by a cross
	compiler.  Don't substitute host_makefile_frag or frags.
	* aclocal.m4: New file to define local AC_PROG_CC.
	* configure: Rebuild.
	* Makefile.in (INSTALL): Set to @INSTALL@.
	(INSTALL_PROGRAM): Set to @INSTALL_PROGRAM@.
	(INSTALL_DATA): Set to @INSTALL_DATA@.
	(AR): Set to @AR@.
	(CC): Define as @CC@.
	(CFLAGS): Set to @CFLAGS@.
	(CC_FOR_BUILD): Set to @CC_FOR_BUILD@.
	(@host_makefile_frag@): Remove.
	(ALL_CFLAGS): Change $(HDEFINES) to @HDEFINES@.  Move $(CFLAGS)
	after other options.
	(config.status): Remove dependency upon @frags@.
	* config/*.mh, config/README: Remove.

	* config.bfd: Rewrite to incorporate the contents of the Makefile
	fragments by setting shell variables, rather than merely returning
	the name of a Makefile fragment.
	* configure.in: Use shell variables set by config.bfd rather than
	looking at the target Makefile fragment files.  Don't substitute
	target_makefile_frag.  Do substitute TDEFINES.
	* configure: Rebuild.
	* Makefile.in (@target_makefile_frag@): Remove.
	(ALL_CFLAGS): Change $(TDEFINES) to @TDEFINES@.
	* config/*.mt: Remove.

Mon Sep  4 03:13:28 1995  Ken Raeburn  <raeburn@cygnus.com>

	* configure.in: Put changequote lines around "i[345]86" patterns
	section of core file support.

Sun Sep  3 11:31:58 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_print_private_bfd_data): Define to use the
	generic version.

Fri Sep  1 17:08:40 1995  steve chamberlain  <sac@slash.cygnus.com>

	* peicode.h (coff_swap_aouthdr_in): Add ImageBase to
	entry, text_start and data_start.

Fri Sep  1 18:06:28 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (OFILES): Remove $(TDEPFILES).
	* config/apollo.mt (TDEPFILES): Remove.
	* config/README: Update.

	* configure.in: For a native configuration, set COREFILE and
	COREFLAG based on the canonical host name.
	* configure: Rebuild.
	* Makefile.in: Rebuild dependencies.
	(ALL_CFLAGS): Add @COREFLAG@.
	(OFILES): Replace $(HDEPFILES) with @COREFILE@.
	* coff-rs6000.c: Check AIX_CORE rather than HOST_AIX for core file
	support routines.  Check LYNX_CORE rather than HOST_LYNX.
	* lynx-core.c: Check LYNX_CORE rather than HOST_LYNX.
	* i386lynx.c: Likewise.
	* m68klynx.c: Likewise.
	* sparclynx.c: Likewise.
	* rs6000-core.c: Check AIX_CORE rather than HOST_AIX.
	* *-core.c: Comment changes.
	* config/decstation.mh (HDEPFILES): Remove.
	(HDEFINES): Remove -DTRAD_CORE.
	* config/irix3.mh (RANLIB): Remove.
	* config/irix4.mh (HDEPFILES, RANLIB): Remove.
	(HDEFINES): Remove -DIRIX_CORE.
	* config/riscos.mh (RANLIB, HDEPFILES): Remove.
	(HDEFINES): Remove -DTRAD_CORE.
	* config/ncr3000.mh (AR_FLAGS, RANLIB): Remove.
	* config/ultra3.mh (RANLIB): Remove.
	* config/aix4.mh, config/alphaosf.mh, config/amix.mh: Remove.
	* config/apollo.mh, config/delta68.mh, config/delta88.mh: Remove.
	* config/dpx2.mh, config/esix.mh, config/harris.mh: Remove.
	* config/hp300.mh, config/hp300bsd.mh, config/hppabsd.mh: Remove.
	* config/hppahpux.mh, config/hppaosf.mh: Remove.
	* config/i386aix.mh, config/i386bsd.mh: Remove.
	* config/i386linux.mh, config/i386mach3.mh: Remove.
	* config/i386sco.mh, config/i386v.mh, config/i386v4.mh: Remove.
	* config/irix5.mh, config/m88kmach3.mh, config/mipsbsd.mh: Remove.
	* config/mipsmach3.mh, config/news-mips.mh: Remove.
	* config/news.mh, config/pc532mach.mh, config/riscix.mh: Remove.
	* config/rs600.mh, config/rs6000lynx.mh: Remove.
	* config/solaris2.mh, config/stratus.mh: Remove.
	* config/symmetry.mh, config/sysv4.mh, config/tahoe.mh: Remove.
	* config/vaxbsd.mh, config/vaxult.mh, config/vaxult2.mh: Remove.

Fri Sep  1 15:18:50 1995  Kazumoto Kojima  <kkojima@info.kanagawa-u.ac.jp>

	* elflink.h (elf_bfd_final_link): Don't change a DT_INIT or
	DT_FINI entry if the appropriate symbol is not in the hash table.

	* libelf.h (struct elf_backend_data): Add create_program_headers
	and want_hdr_in_seg fields.
	* elfxx-target.h (elf_backend_want_hdr_in_seg): Define if not
	defined.
	(elf_backend_create_program_headers): Likewise.
	(elfNN_bed): Initialize create_program_headers and
	want_hdr_in_seg.
	* elf.c (get_program_header_size): Call create_program_headers
	backend routine.
	(map_program_segments): Check want_hdr_in_seg backend field.  Call
	create_program_headers backend routine.

	* elf.c (assign_file_positions_except_relocs): Align non allocated
	sections when creating an executable.

	* elfcode.h (elf_swap_phdr_in): Make non static.
	(elf_swap_phdr_out): Make non static.
	* libelf.h (bfd_elf32_swap_phdr_in): Declare.
	(bfd_elf32_swap_phdr_out): Declare.
	(bfd_elf64_swap_phdr_in): Declare.
	(bfd_elf64_swap_phdr_out): Declare.

	* ecofflink.c (ecoff_collect_shuffle): New static function.
	(_bfd_ecoff_get_accumulated_pdr): New function.
	(_bfd_ecoff_get_accumulated_sym): New function.
	(_bfd_ecoff_get_accumulated_ss): New function.
	* libbfd-in.h (_bfd_ecoff_get_accumulated_pdr): Declare.
	(_bfd_ecoff_get_accumulated_sym): Declare.
	(_bfd_ecoff_get_accumulated_ss): Declare.
	* libbfd.h: Rebuild.

Fri Sep  1 13:20:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* libecoff.h (_bfd_ecoff_bfd_print_private_bfd_data): Fix typo.

	* elflink.h (elf_link_add_object_symbols): Handle indirect and
	warning symbols.  If any section is named .gnu.warning.XXX, treat
	the contents as a warning to be issued if the symbol XXX is
	referenced.
	(elf_link_output_extsym): For an indirect or warning symbol, just
	output the symbol it points to.

	* linker.c (_bfd_link_hash_newfunc): Don't bother to set bfd_error
	if bfd_hash_allocate fails, since it will already be set.
	(generic_link_hash_newfunc): Likewise.
	(archive_hash_newfunc): Likewise.
	(hash_entry_bfd): New static function.
	(_bfd_generic_link_add_one_symbol): Pass new arguments to warning
	callback.  Allocate a new warning using the hash table newfunc.
	Use bfd_hash_replace to update the entry in the hash table, rather
	than assuming we can copy the fields with structure assignment.

	* hash.c (bfd_hash_replace): New function.
	* bfd-in.h (bfd_hash_replace): Declare.
	* bfd-in2.h: Rebuild.

Fri Sep  1 08:12:50 1995  James G. Smith  <jsmith@beauty.cygnus.com>

	* config.bfd: Add mips*vr4300-*-elf* target.
	* config/mipsbvr4300.mt: Added.

Thu Aug 31 16:00:53 1995  steve chamberlain  <sac@slash.cygnus.com>

	* Makefile.in: Update dependencies.
	* aout-target.h (MY_bfd_print_private_bfd_data): New.
	* bfd-in.h (PE STUFF): Deleted.
	* bfd.c (tdata->pe_obj_data): New.
	(bfd_print_private_bfd_data): New.
	* coff-i386.c, coff-arm.c (coff_*-rtype_to_howto): Get image base from
	new place.
	* libcoff.h, libbfd.h, bfd-in2.h: Rebuilt.
	* coffcode.h (pe_value): Delete
	(coff_mkobject, coff_mkobject_hook): Conditionally build.
	(coff_compute_section_file_positions): Look in new place.
	(add_data_entry, fill_pe_header_info): Deleted.
	(coff_write_object_contents): Remove PE stuff.
	(coff_bfd_print_private_bfd_data): New.
	* coffswap.h: Remove PE stuff.
	* elfxx-target.h (bfd_elfNN_bfd_print_private_bfd_data): New.
	* libbfd-in.h (_bfd_generic_bfd_print_private_bfd_data): New.
	* libcoff-in.h (pe_data_type): New.
	* libecoff.h (_bfd_ecoff_bfd_print_private_bfd_data): New.
	* targets.c (_bfd_print_private_bfd_data): New.
	* peicode.h: New file.

Thu Aug 31 11:49:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* bfd-in.h: Add extern "C" if __cplusplus.
	* bfd-in2.h: Rebuild.

	* coff-mips.c (mips_relocate_section): Don't convert a reloc
	against an absolute symbol into a reloc against a section.

Thu Aug 31 08:00:14 1995  steve chamberlain  <sac@slash.cygnus.com>
	
	* coff-arm.c (coff_arm_reloc): Fix common size problem.
	(i3coff_object_p): Delete.

Wed Aug 30 20:41:27 1995  steve chamberlain  <sac@slash.cygnus.com>

	* coff-arm.c (deletemeacoff_arm_reloc): Deleted.
	(arm26): Not partial inplace.
	* coffcode.h (coff_compute_section_file_positions): Don't
	do page aligning if COFF_PAGE_SIZE isn't defined.
	* coffswap.h (coff_swap_scnhdr_in): Update image base correctly.

Tue Aug 29 13:50:21 1995  steve chamberlain  <sac@slash.cygnus.com>

	* coffcode.h (coff_compute_section_file_positions):
	Compile even if COFF_PAGE_SIZE isn't defined.
	* cofflink.c (_bfd_coff_generate_reloc_section): Write
	base file info as rvas.
	* coff-arm.c (coff_rtype_to_howto): Deal with reloc 11.
	* coffcode.h (coff_write_object_contents): Remove #if0ed code
	Only remove empty sections in PE inmage files.
	* libbfd.h, bfd-in2.h: regenerated.
	* coff-arm.c (aoutarm_std_relo): New entry at 11.
	(arm_reloc_type_lookup) : Understand type 11.
	* coff-i386.c (howto_table): fix name of rva type.
	(coff-i386_rtype_to_howto): Understand R_IMAGEBASE type.
	* coffcode.h (sec_to_styp_flags): .edata is data.
	(coff_compute_section_file_positions): Get page size right for PE.
	Pagesize info is only valid in PE image files.
	(fill_pe_header_info): Fix fields.
	(coff_write_object_contents): Remove end_of_image calc.
	(_bfd_coff_generate_reloc_section): Remove orphaned comment.
	* coffswap.h (coff_swap_scnhdr_in): Don't always add IMAGE_BASE.
	Swap in PE header.
	(coff_swap_scnhdr_out): Setup PE flags correctly.
	* reloc.c (BFD_RELOC_RVA): New field.

Thu Aug 24 17:49:59 1995  Ian Lance Taylor  (ian@cygnus.com)

	* cofflink.c (coff_link_input_bfd): Don't include line numbers for
	a section if its output section has no contents.

Wed Aug 23 16:48:52 1995  Ian Lance Taylor  (ian@cygnus.com)

	* ecoff.c (_bfd_ecoff_slurp_symbolic_info): Add parentheses to FIX
	expression to avoid compiler bug on HP-UX 9.01.

Wed Aug 23 09:49:39 1995  Steve Chamberlain  <sac@rtl.cygnus.com>

	* coffcode.h (pe_value): Unansify.

Mon Aug 21 17:49:28 1995  steve chamberlain  <sac@slash.cygnus.com>

	* bfd-in.h (bfd_link_subsystem): Turn enum into #defines.
	(bfd_link_pe_info_dval): New
	(bfd_link_stack_heap): Renamed and massaged into bfd_link_pe_info.
	* bfd-in2.h: rebuilt.
	* bfd.c (NT_subsystem, NT_stack_heap): Deleted.
	* coffcode.h (pe_value): New function.
	(fill_pe_header_info): New function.
	(coff_write_object_contents): Use new function.
	(coff_write_object_contents): Initialze link_data if not set.
	* cofflink.c (coff_final_link_info): Remove pe randomness.
	(dores_com): Update info in bfd_link_pe_info_dval.
	(process_embedded_commands): Use the bfd_link_pe_info_dval.
	(_bfd_coff_final_link): Remove PE stuff, initialize
	coff_data->link_info.
	* coffswap.h (coff_swap_[aout|filehdr]_out): Use indirect PE pointer.
	(coff_swap_scnhdr_out): Use real imagebase.
	* libcoff-in.h (coff_data_type.link_info): New field.

Mon Aug 21 11:10:32 1995  Ian Lance Taylor  <ian@cygnus.com>

	* linker.c (link_action): If an undefined reference follows an
	undefined weak reference, change the type to undefined.
	* elflink.h (elf_link_add_archive_symbols): Don't record an
	undefined weak reference as defined, in case it turns into a real
	undefined reference later in the same archive.

Thu Aug 17 16:29:09 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	* coff-sh.c (sh_relax_section): Cast value for used_by_bfd field
	to PTR, not coff_section_tdata pointer, since PTR is the real type
	of the field.
	* cofflink.c (_bfd_coff_read_internal_relocs): Ditto.

Thu Aug 17 14:44:26 1995  Ian Lance Taylor  <ian@cygnus.com>

	Add support for linking SPARC SunOS PIC compiled code.
	* sunos.c (SPARC_PLT_PIC_WORD0): Define.
	(SPARC_PLT_PIC_WORD1, SPARC_PLT_PIC_WORD2): Define.
	(struct sunos_link_hash_entry): Add got_offset and plt_offset
	fields.
	(struct sunos_link_hash_table): Add dynamic_sections_created and
	dynamic_sections_needed fields.
	(sunos_link_hash_newfunc): Initialize new fields.
	(sunos_link_hash_table_create): Initialize new fields.
	(sunos_create_dynamic_sections): New static function, broken out
	of sunos_add_dynamic_symbols.
	(sunos_add_dynamic_symbols): Call sunos_create_dynamic_sections.
	(sunos_add_one_symbol): Call sunos_create_dynamic_sections.
	(bfd_sunos_size_dynamic_sections): Call sunos_scan_relocs before
	checking whether we need to set up the dynamic link information.
	Define __GLOBAL_OFFSET_TABLE if anything referred to it.
	(sunos_scan_std_relocs): Call sunos_create_dynamic_sections.  Use
	plt_offset field; only put symbol in .plt if it is not defined by
	a regular object.
	(sunos_scan_ext_relocs): Likewise.  Handle base relative relocs.
	(sunos_scan_dynamic_symbol): Store dynobj in local variable.
	(sunos_write_dynamic_symbol): Check plt_offset rather than
	checking whether symbol is in .plt section.  If symbol is defined
	in a regular object file, use SPARC_PLT_PIC_WORD[012], and don't
	add a JMP_TBL reloc.
	(sunos_check_dynamic_reloc): Add contents and relocationp fields.
	If plt_offset is set, redirect relocation to PLT.  If this is a
	base relative reloc, redirect relocation to GOT.  Check
	dynamic_sections_needed field rather than whether dynobj is set.
	(sunos_finish_dynamic_link): Check dynamic_sections_needed field
	rather than whether dynobj is set.  Don't die if .need and .rules
	sections were not created.
	* aoutx.h (howto_table_ext): Mark PC10, PC22, and JMP_TBL entries
	PC relative.  Mark PC10 complain_overflow_dont.  Mark PC22 and
	JMP_TBL complain_overflow_signed.
	(NAME(aout,final_link)): If info->shared is set, set DYNAMIC.
	(aout_link_input_section_std): Call check_dynamic_reloc for all
	relocs.  Pass contents and &relocation.  Don't warn about an
	undefined symbol until check_dynamic_reloc has been called.  Don't
	warn about an undefined symbol for a base relative reloc.
	(aout_link_input_section_ext): Likewise.  For a base relative
	reloc, always treat r_index as an index into the symbol table.
	* libaout.h (struct aout_backend_data): Add contents and
	relocation argument to check_dynamic_reloc entry point.
	(struct aoutdata): Add local_got_offsets field.

Wed Aug 16 01:03:07 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-i386.c (elf_i386_check_relocs): Fix bug in last change.

Mon Aug 14 11:39:24 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (NAME(aout,machine_type)): Handle a machine of
	bfd_mach_sparc or bfd_mach_sparc64.

	* elflink.h (elf_link_add_object_symbols): If a symbol is a weak
	definition, add it to the dynamic symbol table if any dynamic
	object mentions it.  If we do add it, make sure we add the
	corresponding real symbol.
	(elf_adjust_dynamic_symbol): Adjust a weak defined symbol which we
	put in the dynamic symbol table, even if no regular object refers
	to it.
	* elf32-i386.c (elf_i386_check_relocs): When creating a shared
	library, don't allocate space for a PC relative reloc against a
	local symbol.
	* elf32-m68k.c (elf_m68k_check_relocs): Likewise.
	* elf32-sparc.c (elf32_sparc_check_relocs): Likewise.
	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Change assertion
	to accept symbol with weakdef set.
	* elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Likewise.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
	* elf32-m68k.c (elf_m68k_relocate_section): When creating a shared
	libary, don't copy over a PC relative reloc against a local
	symbol.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

Sun Aug 13 00:40:58 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.h (R_HPPA_BEGIN_BRTAB): Define.
	(R_HPPA_END_BRTAB): Likewise.
	* som.c (som_write_fixups): Handle R_BEGIN_BRTAB and R_END_BRTAB.

Thu Aug 10 15:53:29 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffswap.h (coff_swap_aux_in): Swap the array dimensions
	whenever x_fcnary is not being used for something else, rather
	than only for an array.
	(coff_swap_aux_out): Likewise.

Tue Aug  8 16:34:57 1995  steve chamberlain  <sac@slash.cygnus.com>

	* cofflink.c (_bfd_coff_generic_relocate_section): Remove most
	of special case stuff for PE.  Now handled by relocs.
	* coff-i386.c (coff_i386_reloc): Special case of PE type 7s.
	(howto_table): Type 7 is dir32-rva.

Tue Aug  8 10:15:43 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* configure.host: Recognize aix4 explicitly.
	* rs6000-core.c (CORE_DATA_SIZE_FIELD): New macro to get a the size
	of a core dump's data section.  Provide alternate definition for aix4.
	(SAVE_FIELD): Similarly for save state field (register info).
	(STACK_END_ADDR): Provide definition suitable for aix4.
	* config/{aix4.mh,aix4.mt}: New configuration files.
	* hosts/aix4.h: Likewise.

Mon Aug  7 23:03:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* som.c (som_bfd_copy_private_symbol_data): Cast initializations
	to avoid warnings.

Mon Aug  7 14:51:08 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_decode_symclass): Handle absolute symbols by checking
	the SOM type (since they will rarely if ever be in the absolute
	section).

Wed Aug  6 09:12:50 1995  Doug Evans  <dje@canuck.cygnus.com>

	* archures.c (bfd_mach_sparc, bfd_mach_sparc64): Define.
	* bfd-in2.h: Regenerated.
	* cpu-sparc.c (sparc_arch_info): Renamed from arch_info_struct.
	(sparc64_arch_info): New static variable.
	(bfd_sparc_arch): Link in sparc64_arch_info.
	* elf64-sparc.c (sparc64_elf_xxx): Renamed from elf64_xxx.
	(sparc64_elf_object_p): New static function.
	(elf_backend_object_p): Define.
	* config/sparc64-elf.mt (SELECT_VECS): Add bfd_elf32_sparc_vec.

Sat Aug  5 00:04:08 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_get_reloc_upper_bound): Return -1 on error.  Compute
	return value with sizeof (arelent *), not sizeof (arelent).

Wed Aug  2 12:32:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (bfd_section_from_shdr): If the section pointed to by the
	sh_link field of a reloc section is not a symbol table, and the
	file contains a single symbol table, clobber the sh_link field of
	the reloc section to point to the symbol table.

Tue Aug  1 10:09:01 1995  Doug Evans  <dje@canuck.cygnus.com>

	* coff-arm.c (howto reloc ARM26): Change size from 3 to 2.
	(howto reloc ARM26D): Likewise.

Mon Jul 24 14:17:50 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (NAME(aout,find_nearest_line)): Use the line just before
	the offset, not the one just after.  Break out of the loop after
	finding a function past the offset, not merely when finding a
	function with a line defined.

	* ecofflink.c (_bfd_ecoff_locate_line): When handling stabs:
	correct setting of sym_ptr_end to consider symbols skipped when
	setting sym_ptr; don't leave loop early unless an N_FUN is found
	with a larger value.

	* coff-sh.c (sh_coff_howtos): Mark R_SH_PCDISP8BY2 and R_SH_PCDISP
	as PC relative.  Describe R_SH_IMM16.  Add entries for
	R_SH_SWITCH16, R_SH_SWITCH32, R_SH_USES, R_SH_COUNT, and
	R_SH_ALIGN.
	(SWAP_IN_RELOC_OFFSET): Define.
	(SWAP_OUT_RELOC_OFFSET): Define.
	(CALC_ADDEND): Define.
	(sh_reloc): Change sym_value and addr to type bfd_vma.  Skip reloc
	types other than R_SH_IMM32 and R_SH_PCDISP on an external symbol.
	(coff_bfd_relax_section): Define.
	(coff_bfd_get_relocated_section_contents): Define.
	(sh_relax_section): New static function.
	(sh_relax_delete_bytes): New static function.
	(sh_relocate_section): Handle R_SH_PCDISP on an external symbol.
	(sh_coff_get_relocated_section_contents): New static function.

	* cofflink.c (coff_link_add_object_symbols): Call
	_bfd_coff_get_external_symbols, not coff_link_get_symbols.  Call
	_bfd_coff_free_symbols, not coff_link_free_symbols.  Call
	_bfd_coff_read_string_table, not coff_read_string_table.
	(coff_link_check_archive_element): Likewise.
	(coff_link_input_bfd): Likewise.
	(coff_link_get_symbols): Move to coffgen.c.
	(coff_read_string_table): Likewise.
	(coff_link_free_symbols): Likewise.
	(_bfd_coff_internal_syment_name): New static function.
	(coff_link_check_ar_symbols): Use _bfd_coff_internal_syment_name.
	(coff_link_add_symbols): Likewise.
	(coff_link_input_bfd): Likewise.
	(_bfd_coff_generic_relocate_section): Likewise.
	(_bfd_coff_read_internal_relocs): New function.
	(coff_link_input_bfd): Use cached section contents if available.
	Use _bfd_coff_read_internal_relocs.
	* coffcode.h (coff_slurp_symbol_table): Don't call bfd_seek.
	(coff_bfd_get_relocated_section_contents): Only define if not
	already defined.
	(coff_bfd_relax_section): Likewise.
	* coffgen.c (build_string_table): Remove.
	(_bfd_coff_get_external_symbols): New function, moved in from old
	coff_link_get_symbols in cofflink.c.
	(_bfd_coff_read_string_table): New function, moved in from old
	coff_read_string_table in cofflink.c.
	(_bfd_coff_free_symbols): New function, moved in frmo old
	coff_link_free_symbols in cofflink.c.
	(coff_get_normalized_symtab): Use _bfd_coff_get_external_symbols
	rather than reading the symbols directly.  To free them, call
	_bfd_coff_free_symbols.  Use _bfd_coff_read_string_table rather
	than build_string_table.
	* libcoff-in.h (obj_coff_keep_syms): Define.
	(obj_coff_keep_strings): Define.
	(coff_data_type): Add fields keep_syms and keep_strings.
	(coff_section_tdata): Define new structure.
	(coff_section_data): Define.
	(_bfd_coff_get_external_symbols): Declare.
	(_bfd_coff_read_string_table): Declare.
	(_bfd_coff_free_symbols): Declare.
	(_bfd_coff_read_internal_relocs): Declare.
	* libcoff.h: Rebuild.

Fri Jul 21 22:32:54 1995  Michael Meissner  <meissner@cygnus.com>

	* elf32-ppc.c (ppc_elf_howto_raw): Add support for R_PPC_SDAREL
	relocation.
	(ppc_elf_reloc_type_lookup): Ditto.
	(ppc_elf_got16_inner): Ditto.
	(ppc_elf_relocate_section): Ditto.

Thu Jul 20 19:19:06 1995  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (hppa_elf_gen_reloc_type): Add new (ignored)
	argument.
	* elf32-hppa.h: Corresponding change.

Thu Jul 20 19:01:07 1995  Ken Raeburn  <raeburn@cygnus.com>

	* libaout.h (set_aout_section_data): New macro.
	* sunos.c (sunos_scan_relocs): Use it.

	* aout-ns32k.c (MY_swap_std_reloc_out): Undef KEEPIT before
	defining it.

Thu Jul 20 13:48:00 1995  Fred Fish  <fnf@cygnus.com>

	* hosts/i386v4.h (getgid, getuid):  Change prototypes to be
	compatible with Unixware 1.x and Unixware 2.x, and probably other
	i386 svr4 versions as well.

Thu Jul 20 13:41:21 1995  Ken Raeburn  <raeburn@cygnus.com>

	* targets.c (bfd_target_vector): Since armpe and armpei have been
	split into big- and little-endian variants, list all of them,
	instead of the now-nonexistant armpe[i]_vec.

Thu Jul 20 00:06:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (bfd_section_from_phdr): Set lma based on p_paddr.
	(elf_fake_sections): Set sh_addr based on lma, not vma.

Wed Jul 19 15:52:01 1995  Doug Evans  <dje@canuck.cygnus.com>

	* coff-arm.c (TARGET_LITTLE_SYM, TARGET_BIG_SYM): Replaces TARGET_SYM.
	* configure.in (armpe_vec, armpei_vec): Add bi-endian support.
	* configure: "regenerated".
	* pe-arm.c (TARGET_LITTLE_SYM, TARGET_BIG_SYM): Replaces TARGET_SYM.
	(TARGET_LITTLE_NAME, TARGET_BIG_NAME): Replaces TARGET_NAME.
	* pei-arm.c (TARGET_LITTLE_SYM, TARGET_BIG_SYM): Replaces TARGET_SYM.
	(TARGET_LITTLE_NAME, TARGET_BIG_NAME): Replaces TARGET_NAME.
	* targets.c (armpe_vec, armpei_vec): Deleted.
	(armpe_little_vec, armpe_big_vec, armpei_little_vec, armpei_big_vec):
	Added.
	* config/arm-pe.mt (DEFAULT_VECTOR): Default is armpe_little_vec.
	(SELECT_VECS): Add bi-endian support.

Wed Jul 19 10:47:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c: Clean up and comment.
	(r_imm32): Remove.
	(sh_coff_howtos): New static array.
	(SH_COFF_HOWTO_COUNT): Define.
	(get_symbol_value): Make relocation bfd_vma rather than long.
	(RTYPE2HOWTO): Rewrite to use sh_coff_howtos.
	(coff_relocate_section): Define to sh_relocate_section.
	(sh_relocate_section): New static function.

Sat Jul 15 01:02:53 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* configure.host:  Add support for generic m68k SVR4 host.

Fri Jul 14 13:13:55 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (KEEPIT): Change definition to udata.i.
	(KEEPITTYPE): Remove.
	(NAME(aout,reloc_type_lookup)): Add cases to the
	extended reloc type switch: SPARC_GOT10, SPARC_GOT13, SPARC_GOT22,
	SPARC_PC10, SPARC_PC22, SPARC_WPLT30.
	(NAME(aout,swap_std_reloc_out)): Don't bother to use stoi when
	retrieving KEEPIT value.
	(NAME(aout,swap_ext_reloc_out)): Likewise.  Also, only add in
	output section VMA for section symbols, and check BSF_SECTION_SYM
	to control whether to set r_extern to 1.

	* syms.c: Fix comments so that `make info' works.

	* elf32-mips.c (mips_elf_find_nearest_line): Set SEC_HAS_CONTENTS
	in .mdebug section, in case backend linker has cleared it.

Fri Jul 14 11:58:34 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_addr16_ha_inner): Rewrite to take just one
	argument, the final relocated address.
	(ppc_elf_addr16_ha_inner): Adjust ppc_elf_addr16_ha_inner caller.
	(ppc_elf_relocate_section): Ditto.

Thu Jul 13 17:22:03 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (hppa_som_gen_reloc_type): Choose a reasonable field
	selector relocation for the difference of two symbols.

Thu Jul 13 10:33:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (NAME(aout,slurp_reloc_table)): Cast argument to size_t
	for malloc.
	* coff-mips.c (mips_relocate_section): Likewise, for memmove.
	(mips_relax_section): Likewise, for malloc.
	* cofflink.c (process_embedded_commands): Likewise.
	(_bfd_coff_final_link): Likewise.
	* ecoff.c (_bfd_ecoff_write_object_contents): Likewise.
	(ecoff_final_link_debug_accumulate): Likewise.
	(ecoff_indirect_link_order): Likewise, for memcpy and malloc.
	(ecoff_reloc_link_order): Likewise, for malloc.
	* ecofflink.c (ecoff_align_debug): Likewise, for memset.
	(ecoff_write_symhdr): Likewise, for malloc.
	* elf32-hppa.c (elf32_hppa_read_symext_info): Likewise.
	* elf.c (assign_file_positions_except_relocs): Likewise, for
	qsort.
	* elf32-mips.c (mips_elf_read_ecoff_info): Likewise, for malloc.
	* elfcode.h (elf_slurp_reloc_table): Likewise.
	* elfcore.h (elf_corefile_note): Likewise.
	* elflink.h (elf_link_add_object_symbols): Likewise.
	(elf_link_read_relocs): Likewise.
	(NAME(bfd_elf,size_dynamic_sections)): Likewise, for memset.
	* i386linux.c (bfd_linux_size_dynamic_sections): Likewise.
	* ieee.c (do_with_relocs): Likewise.
	* linker.c (default_indirect_link_order): Likewise, for malloc.
	* nlmcode.h (nlm_object_p): Likewise.
	(nlm_write_object_contents): Likewise.
	* oasys.c (oasys_set_section_contents): Likewise, for memcpy.
	* reloc.c (bfd_generic_get_relocated_section_contents): Likewise,
	for malloc.
	* section.c (bfd_get_section_contents): Likewise, for memcpy.
	* srec.c (srec_get_section_contents): Likewise.
	(srec_set_section_contents): Likewise.
	* sunos.c (bfd_sunos_size_dynamic_sections): Likewise, for
	realloc and memset.
	(sunos_scan_relocs): Likewise, for malloc.
	(sunos_scan_dynamic_symbol): Likewise, for realloc.
	* syms.c (_bfd_generic_read_minisymbols): Likewise, for malloc.
	* versados.c (versados_get_section_contents): Likewise, for
	memcpy.

	* libbfd.c (real_read): Add prototype.  Change argument types from
	int to size_t.
	(bfd_read): Cast real_read argument to size_t, not int.
	(bfd_write): Cast fwrite argument to size_t, not int.

	* elf64-gen.c (elf_info_to_howto): Fix definition for recent elf.c
	changes.

	* configure.in: Fix typo: change {$enableval} to ${enableval}.
	* configure: Rebuild.

	* Makefile.in (BFD32_BACKENDS): Add elflink.o.

	* targets.c (bfd_target): Add fields _read_minisymbols and
	_minisymbol_to_symbol.
	(BFD_JUMP_TABLE_SYMBOLS): Add _read_minisymbols and
	_minisymbol_to_symbol.
	(bfd_read_minisymbols): Define.
	(bfd_minisymbol_to_symbol): Define.
	* syms.c (_bfd_generic_read_minisymbols): Define.
	(_bfd_generic_minisymbol_to_symbol): Define.
	* libbfd-in.h (_bfd_nosymbols_read_minisymbols): Define.
	(_bfd_nosymbols_minisymbol_to_symbol): Define.
	(_bfd_generic_read_minisymbols): Declare.
	(_bfd_generic_minisymbol_to_symbol): Declare.
	* bfd-in2.h: Rebuild.
	* libbfd.h: Rebuild.
	* aoutx.h (MINISYM_THRESHOLD): Define.
	(NAME(aout,read_minisymbols)): New function.
	(NAME(aout,minisymbol_to_symbol)): New function.
	* libaout.h (NAME(aout,read_minisymbols)): Declare.
	(NAME(aout,minisymbol_to_symbol)): Declare.
	* aout-target.h (MY_read_minisymbols): Define.
	(MY_minisymbol_to_symbol): Define.
	* All targets: Define read_minisymbols and minisymbol_to_symbol.

Wed Jul 12 17:55:55 1995  Ken Raeburn  <raeburn@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Cast return value from
	bfd_alloc.

	* elfcode.h (size_info): Don't use "&" before function names.

Wed Jul 12 00:16:48 1995  Ken Raeburn  <raeburn@kr-pc.cygnus.com>

	* libelf.h (elf_backend_data): Use unsigned, not unsigned char,
	for bitfields.

Tue Jul 11 15:19:53 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (bfd_section_from_shdr): In case SHT_REL[A], only get the
        BFD section for the sh_link section if it is a SYMTAB section.

	* aoutx.h (NAME(aout,link_add_symbols)): Don't bother to check
	that archives hold a.out objects.
	* cf-i386lynx.c (coff_bfd_link_add_symbols): Don't define.
	(lynx_link_add_symbols): Remove.
	* cf-m68klynx.c (coff_bfd_link_add_symbols): Don't define.
	(lynx_link_add_symbols): Remove.
	* elflink.h (elf_bfd_link_add_symbols): Don't bother to check that
	archives hold ELF objects.

	* archive.c (bfd_generic_archive_p): If the archive has a map, and
	the target was defaulted, but the first object in the archive can
	not be matched with that target, then return a bad format error.

	* elf64-sparc.c (elf_sparc_howto_table): Set howto for WDISP16 to
	elf64_wdisp16_reloc.
	(elf64_wdisp16_reloc): New static function.
	(elf64_sparc_relocate_section): New static function.
	(elf_backend_relocate_section): Define.

	* libelf.h (struct elf_size_info): Change type of last argument to
	swap_symbol_out from char * to PTR.
	(bfd_elf32_swap_symbol_out): Update declaration.
	(bfd_elf64_swap_symbol_out): Likewise.
	* elfcode.h (elf_swap_symbol_out): Change type of cdst from char *
	to PTR.
	* elf.c (swap_out_syms): Cast to PTR, not char *, when calling
	swap_symbol_out routine.
	* elflink.h (NAME(bfd_elf,size_dynamic_sections)): Likewise.
	(elf_link_output_sym): Likewise.
	(elf_link_output_extsym): Likewise.
	* elf32-sparc.c (elf32_sparc_finish_dynamic_sections): Likewise.

Tue Jul 11 12:29:49 1995  Rick Sladkey  <jrs@world.std.com>

	* elf.c (_bfd_elf_find_nearest_line): Handle the simple case where
	there is no debugging information.

Mon Jul 10 11:45:55 1995  Ken Raeburn  <raeburn@cygnus.com>

	* makefile.dos (OBJS): Add binary.o and tekhex.o.  From DJ
	Delorie.

Mon Jul 10 11:09:58 1995  Ian Lance Taylor  <ian@cygnus.com>

	* linker.c (set_symbol_from_hash): bfd_link_hash_new case: Don't
	abort; it can happen for constructor symbols when not building
	constructors.

	* coff-i960.c (coff_i960_relocate): Correct typo: use ! on strcmp,
	not on string.
	* cofflink.c (_bfd_coff_generic_relocate_section): Remove unused
	local i.
	* coff-arm.c (coff_arm_rtype_to_howto): Don't declare.
	(PCRELOFFSET): Define if not already defined.
	* Makefile.in: Rebuild dependencies.
	(BFD32_BACKENDS): Add coff-arm.o
	(CFILES): Add coff-arm.c, pe-arm.c, pei-arm.c.

	* aoutx.h (NAME(aout,link_hash_table_create)): Allocate hash table
	using bfd_alloc, not malloc.
	* cofflink.c (_bfd_coff_link_hash_table_create): Likewise.
	* ecoff.c (_bfd_ecoff_bfd_link_hash_table_create): Likewise.
	* i386linux.c (linux_link_hash_table_create): Likewise.
	* linker.c (_bfd_generic_link_hash_table_create): Likewise.
	* sunos.c (sunos_link_hash_table_create): Likewise.

	Based on patches from Eric Youngdale <eric@aib.com>:
	* elflink.h (NAME(bfd_elf,size_dynamic_sections)): If -Bsymbolic,
	output a DT_SYMBOLIC dynamic entry.
	(elf_adjust_dynamic_symbol): If -Bsymbolic, don't require a PLT
	entry for a locally defined symbol.
	* elf32-i386.c (elf_i386_relocate_section): If -Bsymbolic, do warn
	about undefined symbols, and fill in the GOT entry for a symbol
	defined in a regular object file.
	(elf_i386_finish_dynamic_symbol): If -Bsymbolic, output a RELATIVE
	reloc rather than a GLOB_DAT reloc for a symbol defined in a
	regular object file.
	* elf32-m68k.c (elf_m68k_relocate_section): If -Bsymbolic, do warn
	about undefined symbols, and fill in the GOT entry for a symbol
	defined in a regular object file.
	(elf_m68k_finish_dynamic_symbol): If -Bsymbolic, output a RELATIVE
	reloc rather than a GLOB_DAT reloc for a symbol defined in a
	regular object file.
	* elf32-sparc.c (elf32_sparc_relocate_section): If -Bsymbolic, do
	warn about undefined symbols, and fill in the GOT entry for a
	symbol defined in a regular object file.
	(elf32_sparc_finish_dynamic_symbol): If -Bsymbolic, output a
	RELATIVE reloc rather than a GLOB_DAT reloc for a symbol defined
	in a regular object file.

	* config/m68k-coff.mt (SELECT_VECS): Rename from SELECT_VECTORS.
	Correct elements to be actual BFD vector names.

	* Makefile.in (Makefile): Don't depend upon @frags@.
	(config.status): Depend upon @frags@.

Fri Jul  7 17:36:44 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffgen.c (coff_renumber_symbols): Sort defined symbols that are
	neither BSF_FUNCTION not BSF_NOT_AT_END just before undefined
	symbols.
	* coffcode.h (coff_slurp_symbol_table): Set BSF_FUNCTION as well
	as BSF_NOT_AT_END.

Fri Jul  7 17:16:15 1995  Ken Raeburn  <raeburn@cygnus.com>

	* Makefile.in (do_mostlyclean): Remove config.log.
	(do_distclean): Remove config.cache.

Thu Jul  6 14:37:43 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-i386.c (elf_i386_relocate_section): Revert May 24 patch.
        Don't copy PC32 reloc against section into shared object.

	* Makefile.in: Rebuild dependencies.
	(CFILES): Added elflink.c.
	(Makefile): Depend upon config.status, not configure.in.
	(config.status): New target; depend upon configure configure.host
	and config.bfd.

Wed Jul  5 20:17:14 1995  Ken Raeburn  <raeburn@cygnus.com>

	* elfcore.h, elflink.h, elfcode.h, elf.c, elflink.c: Moved some
 	primarily size-independent code from elfcode.h to elf.c and new
 	file elflink.c; moved out other core- or linker-related routines
 	into other new .h files for clarity.  Renamed many routines to
 	start with bfd_elf or _bfd_elf.  Added a structure of
 	size-dependent but target-independent info to elfcode.h.
	* Makefile.in: Build elflink.o.  Update dependencies.
	* libelf.h: Updated some declarations.  Added a definition for the
	new structure in elfcode.h.  Added more fields to elf backend data
	structure.
	* elfxx-target.h: Refer to the appropriate size-dependent info.
	* elf32-*.c: Changed some function names.  Moved common
	create_dynamic_sections code from m68k, sparc, and i386 support
	into elflink.c.  Define some new macros to fill in new fields of
	back end data.  Also clean up some "gcc -Wall" warnings regarding
	unused or uninitialized variables.

	* Makefile.in (BFD_LIBS): No, don't put elflink.o here.
	* configure.in: Include it here whenever elf.o is specified.

Wed Jul  5 10:31:47 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_object_p): Unconditionally set
	elf_bad_symtab, since sometimes the symbol table is messed up and
	the last symbol is global.

	* ecoff.c (_bfd_ecoff_bfd_is_local_label): New function.
	* libecoff.h (_bfd_ecoff_bfd_is_local_label): Declare.
	* elf32-mips.c (mips_elf_is_local_label): New static function.
	(bfd_elf32_bfd_is_local_label): Define.

	* configure.in: Use $ac_config_sub, not $configsub.
	* configure: Likewise.

	Permit --enable-targets=ieee:
	* config.bfd (*-*-ieee*): New target.
	* config/ieee.mt: New file.

Wed Jul  5 04:16:35 1995  Ken Raeburn  <raeburn@kr-pc.cygnus.com>

	* config/i386aix.mh (HDEFINES): Remove -DFASCIST_FDOPEN.

	Autoconfiscation:
	* configure.in, Makefile.in, doc/Makefile.in: Switch from Cygnus
	configure to autoconf ways of processing --enable arguments,
	setting up symlinks, incorporating makefile fragments, printing
	messages at configuration time, setting variables in Makefile.
	Deleted some unused variables.  Check for ranlib via autoconf.
	For now, configure script removes doc/config.status.
	* configure: New file.
	* dep-in.sed: Use @SRCDIR@ instead of @srcdir@, so Makefile.in
	line doesn't get broken by configure.
	* doc/configure.in: Removed.

Tue Jul  4 12:22:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* archive.c (_bfd_construct_extended_name_table): If
	BFD_TRADITIONAL_FORMAT is set, limit the length of all file names
	to ar_max_namelen.
	(bfd_dont_truncate_arname): If BFD_TRADITIONAL_FORMAT is set, call
	bfd_bsd_truncate_arname.
	(_bfd_write_archive_contents): Revert June 1 change.

	* elfcode.h (NAME(bfd_elf,record_link_assignment)): Add provide
	argument.
	* bfd-in.h (bfd_elf32_record_link_assignment): Update prototype.
	(bfd_elf64_record_link_assignment): Likewise.
	* bfd-in2.h: Rebuild.

	* libelf.h (struct elf_link_hash_table): Add needed field.  Remove
	saw_needed field.
	* elfcode.h (elf_link_add_object_symbols): If elf_dt_needed_name
	is an empty string, don't make a DT_NEEDED entry in the output
	file.  Record all DT_NEEDED entries found in input dynamic
	objects.
	(elf_link_output_extsym): Don't check saw_needed when issuing
	warnings.
	* elf.c (_bfd_elf_link_hash_table_init): Initialize needed, not
	saw_needed.
	(bfd_elf_get_needed_list): New function.
	* bfd-in.h (struct bfd_elf_link_needed_list): Define.
	(bfd_elf_get_needed_list): Define.
	* bfd-in2.h: Rebuild.

	* ecoff.c (_bfd_ecoff_find_nearest_line): Also initialize
	find_buffer and fdrtab_len fields of newly allocated
	find_line_info structure.

Mon Jul  3 17:03:52 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (hppa_som_gen_reloc_type): New argument "sym_diff",
	nonzero when we're generating relocations for an expression
	using the difference of two symbols.  All callers changed.
	Handle difference of symbols for both R_HPPA and R_COMPLEX
	cases.
	(som_write_fixups): Handle R_COMP1, R_COMP2 and R_CODE_EXPR
	fixups.

Mon Jul  3 13:55:18 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* config.bfd (win32): New configuration.
	* configure.host (pe): Changed to i386win32.
	* config/i386pe.mh: Deleted.
	* config/i386win32.mh: New file.

Mon Jul  3 11:30:45 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (_bfd_ecoff_find_nearest_line): If we allocate
	find_line_info, clear the fdrtab field.

	* targets.c (enum bfd_flavour): Add bfd_target_msdos_flavour here,
	rather than in bfd-in2.h.

	* bfd.c (enum bfd_error): Define bfd_error_no_armap.
	(bfd_errmsgs): Add string for bfd_error_no_armap.
	* bfd-in2.h: Rebuild.
	* ecoff.c (ecoff_link_add_archive_symbols): If an archive has no
	armap, set bfd_error_no_armap rather than bfd_error_no_symbols.
	* elfcode.h (elf_link_add_archive_symbols): Likewise.
	* linker.c (_bfd_generic_link_add_archive_symbols): Likewise.

	* elfcode.h (elf_link_add_object_symbols): Permit common and
	indirect symbols in weakdefs BFD_ASSERT.
	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Simplify
	BFD_ASSERT to permit some legal, but odd, cases.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
	* elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Likewise.

	* Makefile.in: Rebuild dependencies.
	(BFD32_BACKENDS): Add versados.o.
	(CFILES): Add pe-i386.c, pei-i386.c, and versados.c.

Sun Jul  2 17:49:32 1995  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (_bfd_coff_generic_relocate_section): Cast base_file
	to FILE * before using it.
	* stab-syms.c: Revert yesterday's patch.

Sat Jul  1 12:10:42 1995  Fred Fish  <fnf@cygnus.com>

	* stab-syms.c (stdio.h):  Include prior to libaout.h, which
	includes bfdlink.h, which now uses FILE.

Sat Jul  1 00:11:08 1995  Ken Raeburn  <raeburn@cygnus.com>

	* elfxx-target.h: New file.

	* libelf.h (struct elf_backend_data): Remove elf_64_p field.
	* elfxx-target.h (elfNN_bed): Don't set it.

	* elf32-target.h, elf64-target.h: Deleted.
	* Makefile.in (elf32-target.h, elf64-target.h): Build them from
	elfxx-target.h.

Fri Jun 30 16:07:18 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* cofflink.c (_bfd_coff_generic_relocate_section): Compare
	the full text of .reloc or .edata section names.

Fri Jun 30 15:47:37 1995  Fred Fish  <fnf@cygnus.com>

	* cofflink.c (_bfd_coff_generic_relocate_section):
	Remove extra '+'.

Thu Jun 29 17:24:52 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* coff-h8300.c (COFF_LONG_FILENAMES): Define.

Wed Jun 28 18:04:42 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* Makefile.in: versados.o is now conditionally built.
	* coffcode.h (add_data_entry): New function.
	(coff_write_object_contents): Clean up. Calculate
	data entries.
	* cofflink.c (_bfd_coff_generic_relocate_section):
	.reloc and .edata sections are IMAGE_BASED too.
	If there's a base_file then write out base information.
	* configure.host (i386-*-pe): New.
	* syms.c (coff_section_type): Only scan prefixes.
	* targets.c (bfd_target_vector): Versados is now conditionally
	built.
	* config/m68k-coff.mt: Build versados.o
	* hosts/i386pe.h: New file.

Mon Jun 26 13:53:49 1995  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hpa.c (elf32_hppa_relocate_section): Close comment before
	R_PARISC_DPREL21L handling.

Thu Jun 22 19:28:36 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Sun May  7 11:53:41 MDT 1995  Bryan Ford  <baford@cs.utah.edu>

	* config/i386-moss.mt: created.

Thu Jun 22 08:56:10 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* reloc.c (bfd_perform_relocation): Add case for -ve words.

Wed Jun 21 13:13:49 1995  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_relocate_section): Don't try to apply a
	relocation against an undefined symbols.

Wed Jun 21 10:16:10 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* versados.c: Second pass/rewrite.

Mon Jun 19 08:40:45 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* syms.c (coff_section_type): Compare only the front part
	of a section name.

Sat Jun 17 09:40:44 1995  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_size_stubs): Set the size of the stub
	section if we get an error.

	* elf32-hppa.c (elf32_hppa_bfd_final_link_relocate): Don't mess
	with the operands of an R_PARISC_DPREL21L relocation if the insn
	is not "addil <symbol>,%r27".

Fri Jun 16 15:04:47 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* bfd-in.h (NT_subsystem, NT_stack_heap): Declare but don't
	define.
	* bfd-in2.h: Rebuilt.
	* bfd.c (NT_subsystem, NT_stack_heap): Define.

Fri Jun 16 00:07:25 1995  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_bfd_link_link_relocate): Use the right
	type field (there are two!) when checking to see if $global$ is
	defined.

Thu Jun 15 14:03:47 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* bfd-in.h, bfd-in2.h (bfd_boolean): Rename bfd_true, bfd_false
	to bfd_tttrue, bfd_fffalse so as not to conflict with functions.
	* coffswap.h (coff_swap_scnhdr_out): Remove version that was
	hacked for MPW C.
	* mpw-config.in: Set shell vars instead of pasting to makefile
	for each configuration, edit coffswap.h to make MPW C not choke.
	(i386-unknown-coff, sh-hitachi-hms): Recognize.
	* mpw-make.in (BFD_LIBS): Add versados.c.o.

	* versados.c (versados_scan): Properly cast results from bfd_alloc.

Wed Jun 14 15:27:32 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* cofflink.c (process_embedded_commands): New function
	reads and handles .drectve sections for PE.
	(coff_link_input_bfd): Call new function if PE.

Mon Jun 12 12:09:39 1995  Jeff Law  (law@snake.cs.utah.edu)

	* bfd-in.h (bfd_set_section_vma): Case true to a boolean.
	(bfd_set_cacheable): Likewise.
	* bfd-in2.h: Rebuilt.

Fri Jun  9 12:20:28 1995  Steve Chamberlain  <sac@rtl.cygnus.com>

	* elfcode.h (elf_sort_hdrs): Rewrite to be symmetrical.

Fri Jun  9 12:49:00 1995  Jeff Law  (law@snake.cs.utah.edu)

	* targets.c: Add copy_private_symbol_data and link_split_section
	to the target vector.
	* libbfd-in.h (_bfd_generic_bfd_copy_private_symbol_data): Define.
	(_bfd_nolink_bfd_link_split_section): Likewise.
	(bfd_generic_link_split_section): Declare.
	* syms.c (bfd_copy_private_symbol_data): Define.
	* linker.c (bf_link_split_section): Likewise.
	* som.c (som_bfd_copy_private_symbol_data): New function
	(som_bfd_link_split_section): Likewise.
	* All other targets updated with default versions of new routines.

	* Take out my braindamaged bfd_true/bfd_false changes from earlier
	today.  Replace with just:
	* bfd-in.h: (TRUE_FALSE_ALREADY_DEFINED): Define this if
	compiling with g++-2.6 or later.
	* bfd-in2.h: Rebuilt.

Fri Jun  9 07:54:29 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* versados.c (struct esd, get_4): Lint; use unsigned chars.

	* coff-i960.c (coff_i960_relocate):  Compare output section names
	when converting for vxworks.

Wed Jun  7 19:01:30 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* elfcode.h (elf_fake_sections): Permit .scommon or COMMON
	sections as random SHT_NOBITS sections, in case a linker script is
	strange.

Tue Jun  6 17:29:32 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* bfd-in.h (NT_subsystem, NT_stack_heap): Moved from pe.h
	* coff-i386.c (coff_i386_rtype_to_howto): Get PE relocs right.
	* coffcode.h (coff_mkobject): Set pe tdata bit when using PE.
	* cofflink.c (COFF_WITH_PE code): Test on obj_pe bit rather
	than conditional compile.
	* configure.in: Fix PE dependencies.
	* libcoff-in.h (obj_pe): New.
	(coff_tdata): Added pe entry.
	* libcoff.h: Regenerated.

Mon Jun  5 09:07:13 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* coff-a29k.c (coff_a29k_adjust_symndx): Completely parenthesize
	macro.

Mon Jun  5 02:15:20 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	Linker support for m68k-elf from Andreas Schwab
	<schwab@issan.informatik.uni-dortmund.de>:
	* elfcode.h (elf_link_add_object_symbols): Check for NULL when
	looping through the symbol hashes.
	(elf_bfd_final_link): When looking for _init and _fini don't use
	the symbol if it is imported from another object.
	* elf32-m68k.c: Relocation type changed from REL to RELA.  Regular
	and dynamic linking support functions added, similar to other elf
	targets.

	* config.bfd (i[345]86-*-gnu*): Use ELF configuration.

Fri Jun  2 18:54:59 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* versados.c: New file.
	* bfd-in2.h (struct _bfd): New field.
	* bfd.c (struct _bfd): New field.
	* configure.in (versados_vec): New field.
	* targets.c (bfd_flavor): Added versados.

Thu Jun  1 13:51:49 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* coffcode.h (sec_to_styp_flags, styp_to_sec_flags, 
	coff_new_section_hook):  Any section that starts ".stab"
	is now marked as debugging.

Thu Jun  1 16:15:16 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* archive.c (_bfd_write_archive_contents): Disable extended name
	table until it can be made optional, so that native AR has half a
	chance on SunOS and HP/UX.

	* linker.c (_bfd_generic_link_output_symbols, case
	bfd_link_hash_indirect): Add cast to correct pointer types.

Sat May 27 21:37:31 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config.bfd (m68k-bull-sysv*): Added strip_underscore=yes.
	  (m68k-est-coff): Removed.  target does not effect object format.

Wed May 24 10:52:01 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* linker.c (_bfd_generic_link_output_symbols): Cope with
	indirect symbols.

	* elf32-i386.c (elf_i386_relocate_section): Give error
	message when linking to a shared reloc which isn't there.

Wed May 24 10:40:00 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	Support for ARM-PE.

	* Makefile.in, coffcode.h, config.bfd, configure.in, pe-arm.c,
	 pei-arm.c, coff-arm.c, reloc.c, targets.c, config/arm-pe.mt:
	 Support for ARM COFF/PE.

Tue May 23 19:24:58 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* bfd.c (bfd_get_relocated_section_contents): Now a function,
	tries calling routine from input bfd target vector for
	bfd_indirect_link_order.  Put a declaration into the header file.
	* bfd-in2.h: Regenerated.
	* elf32-mips.c (gprel16_with_gp): New function, split out from
	mips_elf_gprel16_reloc.
	(mips_elf_gprel16_reloc): Call it.  If output bfd target vector
	isn't elf flavoured, abort, since it's assumed to be elf in some
	of this code, including the code that looks up the gp value.
	(elf32_mips_get_relocated_section_contents): New function,
	modified from bfd_generic_get_relocated_section_contents to deal
	with passing gp to gprel16_with_gp.
	(bfd_elf32_bfd_get_relocated_section_contents): New macro.
	* elf32-target.h (bfd_elf32_bfd_get_relocated_section_contents):
	Don't define if already defined.

Tue May 23 15:58:15 1995  Jeff Law  (law@snake.cs.utah.edu)

	* Makefile.in: Install bfdlink.h too.

Sun May 21 22:25:09 1995  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_relocate_section): Handle undefined and
	notsupported return codes from final_link_relocate (used when
	$global$ is undefined or nonexistant).
	(elf32_hppa_bfd_link_link_relocate): If $global$ exists, but is
	not defined,then return bfd_reloc_undefined.

Fri May 19 10:00:14 1995  Steve Chamberlain  <sac@rtl.cygnus.com>

	* coffswap.h: (IMAGE_BASE): Define to 0 if not.

Thu May 18 04:24:01 1995  Ken Raeburn  <raeburn@kr-laptop.cygnus.com>

	Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk)

	* aoutx.h (aout_link_input_section_standard): If defined, call
	MY_relocatable_reloc before doing a partial relocation.

	* aout-arm.c: (WRITE_HEADERS): Delete.
	(NAME): Define version to override default in aoutx.h
	(MY(howto_table)): Reformat.  Alter some entries slightly.
	(RELOC_ARM_BITS_NEG_{BIG,LITTLE}): Define.
	(MY(reloc_howto), MY(put_reloc), MY(relocatable_reloc)): New functions.
	(MY_reloc_howto, MY_put_reloc, MY_relocatable_reloc): Define.
	(MY(fix_pcrel_26)): Renamed from aoutarm_fix_pcrel_26, return
	bfd_reloc_ok not bfd_reloc_continue.
	(MY(fix_pcrel_26_done)): Likewise.
	(MY(bfd_reloc_type_lookup)): Renamed from aoutarm_reloc_type_lookup.
	(MY_bfd_link_hash_table_create, MY_bfd_link_add_symbols,
	MY_bfd_final_link): Delete.
	(MY_swap_std_reloc_in, MY_swap_std_reloc_out, MY_get_section_contents):
	Define.
	(aoutx.h): Include it.
	(MY(swap_std_reloc_{in,out})): New functions.
	Use RELOC_ARM_BITS_NEG_{BIG,LITTLE} to extract negative reloc bit.
	(aoutarm_squirt_out_relocs): Delete.
 
	From: David Taylor (dtaylor@armltd.co.uk)
	* config/arm[lb]-aout.mt: New files.
	* aout-arm.c: New file.
	* config.bfd: Handle arm{,e[lb]}-*-aout
	* configure.in: Add vetor for aout_arm_{big,little}_vec.
	* reloc.c: New relocation types for the ARM.
	* targets.c (aout_arm_{big,little}_vec): declare.

Tue May 16 10:29:51 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* libbfd.c (bfd_stat): If bfd_cache_lookup returns an error,
	return an error to the caller.  Call bfd_set_error on errors.

Tue May 16 14:44:45 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* libcoff-in.h (coff_renumber_symbols): Modified prototypes in
	accordance with 11 May libcoff.h change.

Thu May 11 16:43:14 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	tekhex.c (first_phase): Understand type 0 symbols.
	(tekhex_write_object_contents): Fix typo in final record.

Thu May 11 16:43:14 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* coff-i960.c (optcall_callback): don't try and optimize
	undefined refs. 
	(coff_write_relocs): Search for broken relocs on the way
	out and fix them up.
	(coff_renumber_symbols): Calculate and return index of
	first undefined symbol.
	(coff_write_object_contents): Call coff_renumber_symbols 
	and coff_write_relocs with the new args.
	* libcoff.h: (coff_renumber_symbols, coff_renumber_symbols):
	Modified prototypes.

Thu May 11 16:43:14 1995  Steve Chamberlain  <sac@slash.cygnus.com>
			  Tom Griest <griest@cs.yale.edu>

	Initial support for PE format. 
	
	* Makefile.in, targets.c, configure.in, config.bfd:
	Add support for i386-*-winnt and i386-*-pe.
	* archive.c (do_slurp_coff_armap):  Understand NTPE format
	archives.
	(_bfd_slurp_extended_name_table): Turn \ in a filename
	into /.
	* bfd-in.h (bfd_link_subsystem, _bfd_link_stack_heap): New.
	* coff-i386.c  (howto_table): Conditionalize PCRELOFFSET.
	* coffcode.h (IMAGE_BASE): New.
	(coff_compute_section_file_positions): Throw away .junk
	sections for PE, align symbols.
	(coff_write_object_contents): Throw away .junk sections
	for PE. Remember info on .idata and .rsrc sections.
	Fill in the PE header.
	(coff_slurp_symbol_table): PE uses C_SECTION class.
	* cofflink.c (_bfd_coff_final_link): Keep PE info up to date.
	(_bfd_coff_generic_relocate_section): Cope with PE relocs.
	* coffswap.h (coff_swap_{aout/file/scn/sym}hdr_{in/out}): 
	New code for PE headers.

Tue May  9 17:01:38 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config.bfd: Add little endian PowerPC support.
	* configure.in: Ditto.
	* targets.c: Ditto.
	* config/ppcle-elf.mt: New file, for little endian PowerPC
	support.
	* config/ppc-elf.mt: Add little endian powerpc to the BFD
	selection vectors.
	* elf32-ppc.c (ppc_elf_merge_private_bfd_data): Complain if
	linking a different endian object than we expect.
	(TARGET_LITTLE_SYM, TARGET_LITTLE_NAME): Define, to provide little
	endian support.

Tue May  2 16:32:24 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config.bfd (hppa*-*-lites*): Treat just like hppa*-*-*elf*.

Tue Apr 25 19:38:43 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* coffgen.c (make_a_section_from_file): Initialize lma same as
	vma.

Tue Apr 25 11:03:21 1995  Jason Molenda  (crash@phydeaux.cygnus.com)

	* hosts/std-host.h: #include ansidecl.h 'cause PTR is used in
	std-host.h.

Mon Apr 24 23:56:44 1995  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* hosts/i386linux.h (HAVE_PROCFS): Don't define it.  Added lengthy
	comment explaining why.

Mon Apr 24 10:34:02 1995  Michael Meissner  <meissner@cygnus.com>

	* hosts/i386linux.h (HAVE_PROCFS): If NO_PROCFS is defined, don't
	define HAVE_PROCFS.

Mon Apr 24 08:33:12 1995  Michael Meissner  <meissner@cygnus.com>

	* elf32-ppc.c (ppc_elf_relocate_section): Do not continue
	processing unknown symbols to prevent a cascade of errors.

Fri Apr 21 12:48:48 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Patches from H.J. Lu for Linux ELF core file support.
	* elfcode.h (elf_core_file_matches_executable_p) [HAVE_PROCFS]:
	Use prpsinfo_t instead of struct prpsinfo, for consistency.
	* hosts/i386linux.h (HAVE_PROCFS): Define.

Thu Apr 20 09:07:39 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* linker.c (link_action): Do the right thing when a undefined
	strong symbol appears after an undefined weak symbol.

Fri Apr 14 16:51:17 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_relocate_section): New function to relocate
	a whole section for the linker, bypassing bfd_perform_relocation.
	(ppc_elf_reloc_type_lookup): New function to map the BFD
	enumeration code into a howto structure.
	(ppc_elf_howto_raw): Rename from ppc_elf_howto_table.
	(ppc_elf_howto_table): New array that maps PowerPC relocation
	numbers to howto structures without a linear search.  Change from
	using bfd_elf_generic_reloc to use ppc_elf_std_reloc.
	(ppc_elf_howto_init): Initialize ppc_elf_howto_table from
	ppc_elf_howto_raw.
	(ppc_elf_reloc_type_lookup): Use a case statement instead of a
	loop.
	(ppc_elf_std_reloc): Replacement for bfd_elf_generic_reloc.
	(ppc_elf_unsupported_reloc): Print a real error message, instead
	of calling abort.
	(ppc_elf_addr16_ha_inner): Abstract getting adjustment from
	ppc_elf_addr16_ha_reloc, so ppc_elf_relocate_section can use it
	too.
	(ppc_elf_addr16_ha_reloc): Call it.
	(ppc_elf_got16_inner): Abstract getting adjustment from
	ppc_elf_got16_reloc, so ppc_elf_relocate_section can use it too.
	(ppc_elf_got16_reloc): Call it.
	(ppc_elf_info_to_howto): Rename from powerpc_info_to_howto.

	* elfcode.h (elf_symbol_from_bfd_symbol): Omit space in debugging
	output.
	(elf_symbol_flags): Add debug function to decode flags so that
	defining DEBUG to be 4 will compile again.
	(elf_debug_section): Fix typo in debug output.

Fri Apr 14 16:03:04 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* config.bfd: Add m68*-*-elf*.
	* elf32-m68k.c: Filled out implementation, except for dynamic
	linking support.
	* reloc.c (enum bfd_reloc_code_real): Added *_GOT_PCREL, *_GOTOFF,
	*_PLT_PCREL, *_PLTOFF, *_68K_* relocations for ELF.
	* libbfd.h, bfd-in2.h: Regenerated.

Thu Apr 13 14:28:04 1995  Torbjorn Granlund  <tege@adder.cygnus.com>

	* coff-m68k.c (COFF_DEFAULT_SECTION_ALIGNMENT_POWER): Change from
	1 to 2.
	(bfd_target): Change minimum section alignment from 1 to 2.

Wed Apr 12 12:40:04 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* aoutx.h (machine_type, case bfd_arch_mips): Treat R8000 like
	R6000 and R4000 for now.

Tue Apr  4 12:28:25 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: New file, MPW version of configure.in.
	* mpw-make.in: New file, MPW version of Makefile.in.
	* hosts/mpw.h: New file, MPW host definitions.
	* ecoffswap.h (ecoff_swap_pdr_in, ecoff_swap_pdr_in) [MPW_C]:
	Alternate versions without ECOFF_64 that chokes MPW C.
	* coffswap.h (coff_swap_scnhdr_out): Add alternative version with
	partly-expanded macros.

Thu Mar 30 14:56:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* reloc.c (bfd_perform_relocation): Don't bother to check for
	overflow if the symbol is undefined.

Thu Mar 30 14:32:26 1995  H.J. Lu (hjl@nynexst.com)

	* config.bfd: Change linux to default to elf.  Using
	i[345]86-*-linuxaout will build a library 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.
	Comment out EXTRALIBS.
	* config/i386-lelf.mt: Remove.

Wed Mar 29 12:01:30 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coff-i960.c (coff_i960_relocate): Cache the section symbol in
	the used_by_bfd field of the section, to avoid looping for each
	reloc.

	* cpu-h8500.c (arch_info_struct): Change name from "H8/300" to
	"h8300" for consistency with other cpu-* files.

Tue Mar 28 15:14:11 1995  Ian Lance Taylor  <ian@cygnus.com>

	* bout.c (b_out_canonicalize_reloc): Handle SEC_CONSTRUCTOR
	sections.
	(b_out_get_reloc_upper_bound): Likewise.

	* linker.c (generic_link_add_symbol_list): Skip constructor
	symbols which the main linker code did not do anything with.
	(_bfd_generic_link_output_symbols): Use udata.p if it is set,
	rather than looking the symbol up in the hash table.  Just pass
	through constructor symbols for which udata.p is not set.  If the
	linker defined the symbol, clear the constructor flag.

Tue Mar 21 10:50:32 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_set_reloc_info): Sign extend constants from
	R_DATA_OVERRIDE fixups.
	* libhppa.h (sign_extend): Renamed from sign_ext.  Fix.
	(low_sign_extend): Likewise.

Mon Mar 20 22:39:10 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_slurp_symbol_table): Tighten test to determine
	what symbols are section symbols.

Sat Mar 18 01:54:45 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (elf_bfd_link_add_symbols): An empty archive is OK.

Fri Mar 17 16:29:02 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_copy_private_section_data): Just return true when
	either the input or output section isn't attached to a SOM BFD.
	(som_bfd_copy_private_bfd_data): Similarly for BFD private data.

Fri Mar 17 11:50:34 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (elf_link_add_object_symbols): Check whether a dynamic
	object has already been included, and ignore it the second time.

Wed Mar 15 11:56:40 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-sparc.c (elf_sparc_howto_table): Change R_SPARC_GOT13 from
	complain_overflow_bitfield to complain_overflow_signed.

	* libelf.h (bfd_elf32__write_relocs): Don't declare.
	(bfd_elf64__write_relocs): Don't declare.

Tue Mar 14 05:54:33 1995  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* stab-syms.c (aout_stab_name): Moved aout_stab_names to be local
	to this function.  Recoded function to stop using table, to
	improve performance (on i486-netbsd host).  Left old version
	intact under "#if 0" for further performance testing.

Mon Mar 13 13:48:49 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (write_relocs): Make static.  Use PTR argument as a
	pointer to a boolean variable set to true if something fails.
	Cast to PTR rather than void *.
	(sym_is_global): Rewrite for clarity.
	(map_program_segments): If the program header size is too small,
	call _bfd_error_handler and return failure rather than aborting.
	(NAME(bfd_elf,write_object_contents)): Pass boolean variable when
	calling write_relocs.
	(elf_symbol_from_bfd_symbol): Use BFD_ASSERT rather than abort.
	(struct elf_info_failed): Define.
	(NAME(bfd_elf,size_dynamic_sections)): Declare variables in inner
	blocks.  Pass elf_info_failed structure when calling
	elf_export_symbol and elf_adjust_dynamic_symbol.
	(elf_export_symbol): Treat data argument as elf_info_failed rather
	than bfd_link_info.  Set failed field on error.
	(elf_adjust_dynamic_symbol): Likewise.
	(struct elf_finfo_failed): Define.
	(elf_bfd_final_link): Pass elf_finfo_failed structure when calling
	elf_link_output_extsym.  Use BFD_ASSERT rather than abort.
	(elf_link_output_extsym): Treat data argument as elf_finfo_failed
	rather than elf_final_link_info.  Set failed field on error.
	(elf_link_input_bfd): Use BFD_ASSERT rather than abort.
	(elf_reloc_link_order): Likewise.

	* elf32-sparc.c (elf32_sparc_size_dynamic_sections): Only write
	out PLTRELSZ, PLTREL and JMPREL relocs if there is a .rela.plt
	section.  Solaris 2.4 apparently does not handle empty reloc
	information correctly.

	* archive.c (bsd_write_armap): Cast getuid and getgid results to
	long, and print with %ld.

Fri Mar 10 16:41:05 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (translate_to_native_sym_flags): Always use the output
	section if it is not NULL.

Thu Mar  9 15:06:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffswap.h (coff_swap_scnhdr_out): If the line number count or
	the reloc count does not fit, print an error and return 0.
	* coffcode.h (coff_write_object_contents): Check return value of
	coff_swap_scnhdr_out.
	* ecoff.c (_bfd_ecoff_write_object_contents): Check return value
	of bfd_coff_swap_scnhdr_out.

	* bfd.c: Include <stdarg.h> or <varargs.h>, depending upon
	ANSI_PROTOTYPES.
	(bfd_error_handler_type): New global type.
	(_bfd_error_program_name): New static variable.
	(_bfd_default_error_handler): New static function.
	(_bfd_error_handler): New BFD private global variable.
	(bfd_set_error_handler): New globally visible function.
	(bfd_set_error_program_name): New globally visible function.
	* libbfd-in.h (_bfd_error_handler): Declare.
	* bfd-in2.h, libbfd.h: Rebuild.

	* aoutx.h (NAME(aout,swap_ext_reloc_in)): Add symcount parameter,
	and use it instead of bfd_get_symcount.  Check r_index after
	setting r_extern based on whether this is a base relative reloc.
	(NAME(aout,swap_std_reloc_IN)): Add symcount parameter, and use it
	instead of bfd_get_symcount.
	(NAME(aout,slurp_reloc_table)): Pass bfd_get_symcount to reloc
	swap routines.
	* libaout.h (NAME(aout,swap_ext_reloc_in)): Add symcount parameter
	to declaration.
	(NAME(aout,swap_std_reloc_in)): Likewise.
	* sunos.c (sunos_canonicalize_dynamic_reloc): Pass
	info->dynsym_count to reloc swap routines.
	* aout-ns32k.c (MY_swap_std_reloc_in): Add symcount parameter.
	* hp300hpux.c (MY(swap_std_reloc_in)): Likewise.
	(MY(slurp_reloc_table)): Pass bfd_get_symcount to reloc swap
	routine.
	* i386lynx.c (NAME(lynx,swap_ext_reloc_in)): Add symcount
	parameter.
	(NAME(lynx,swap_std_reloc_in)): Likewise.
	(NAME(lynx,slurp_reloc_table)): Pass bfd_get_symcount to reloc
	swap routines.

Thu Mar  9 12:04:05 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* bfd.c (bfd_merge_private_bfd_data): New function vector to be
	called by the linker to merge any private bfd data of the input
	files and the output file.  Used by the PowerPC ELF support to
	check whether -mrelocatable is used for all modules.
	(bfd_set_private_flags): New function vector to be called by the
	assembler to set private flags.  Used by the PowerPC ELF support
	to set that a particular object file was assembled with the
	-mrelocatable option.

	* targets.c (BFD_JUMP_TABLE_COPY): Add intiialization of the
	bfd_merge_private_bfd_data and bfd_set_private_flags function
	vectors.

	* bfd-in2.h, libbfd-in.h: Rebuild with bfd.c and targets.c
	changes.

	* elf32-ppc.c (ppc_elf_set_private_flags): New function to set the
	ELF e_flags field.
	(ppc_elf_copy_private_bfd_data): Copy the e_flags field from the
	input file to the output file.
	(ppc_elf_merge_private_bfd_data): Check for a mismatch between the
	e_flags field of all of the linker input files.

	* libelf.h (elf_obj_tdata): Add ppc_flags_init field so that the
	PowerPC support can check if compataible e_flags are present.

	* aout-target.h: Add NOP for the bfd_merge_private_bfd_data
	and bfd_set_private_flags function vectors.
	* coffcode.h: Ditto.
	* elf32-target.h: Ditto.
	* elf64-target.h: Ditto.
	* libbfd.h: Ditto.
	* libecoff.h: Ditto.
	* som.c: Ditto.

Wed Mar  8 00:53:54 1995  Ian Lance Taylor  <ian@cygnus.com>

	* cpu-mips.c (arch_info_struct): Add mips:8000 entry.

	* elfcode.h (swap_out_syms): Mark an undefined BSF_WEAK symbol as
	STB_WEAK rather than STB_GLOBAL.

Tue Mar  7 12:23:47 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (bfd_coff_backend_data): Add new field
	_bfd_coff_adjust_symndx.
	(bfd_coff_adjust_symndx): Define.
	(coff_adjust_symndx): Define as NULL if not already defined.
	(bfd_coff_std_swap_table): Initialize new field to
	coff_adjust_symndx.
	* cofflink.c (coff_link_input_bfd): Call coff_adjust_symndx if it
	is defined.
	* coff-a29k.c (coff_a29k_adjust_symndx): New static function.
	(coff_adjust_symndx): Define before including coffcode.h.
	* libcoff.h: Rebuild.

	* format.c (bfd_check_format_matches): Skip binary_vec when
	searching through bfd_target_vector.

	* elfcode.h (elf_sort_hdrs): Check SHT_NOBITS before checking
	sh_size.

Mon Mar  6 23:31:36 1995  Doug Evans  <dje@chestnut.cygnus.com>

	* elfcode.h (elf_sort_hdrs): Keep SHT_NOBITS sections after
	!SHT_NOBITS ones.

Mon Mar  6 09:53:08 1995  Jeff Law  (law@snake.cs.utah.edu)

	* cpu-hppa.c (arch_info_struct): Support both PA1.0 and PA1.1
	machine types.
	(bfd_hppa_arch): Link in both PA1.0 and PA1.1 architecture info
	structures.
	* libhppa.h (enum pa_arch): New enumeration to describe the
	different variants of the PA architecture.
	* som.c (som_object_setup): Use new enumeration to set machine
	type.
	(som_finish_writing): If the machine type is PA1.1, then use the
	PA1.1 machine identifier in the output file.

Thu Mar  2 15:58:24 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (NAME(aout,swap_ext_reloc_in)): Treat the index of a
        base relative reloc as an index into the symbol table, regardless
        of the setting of r_extern.
	(NAME(aout,swap_std_reloc_in)): Likewise.

	* aoutx.h (NAME(aout,set_section_contents)): Double check that the
	caller is writing to a valid section.

Thu Mar  2 14:37:57 1995  Bryan Ford  <baford@cs.utah.edu>

	* binary.c: Add support for reading binary files.  Loads the raw
	contents of the file into a data section and wraps some symbols
	around it.  The symbols `_binary_<filename>_start' and
	`_binary_<filename>_end' indicate the start and end of the data,
	while `_binary_<filename>_size' is an absolute symbol whose value
	is the size of the data.  <filename> is the name of the binary
	input file, with all non-alphanumeric characters converted to
	underscores.

	* archures.c (bfd_arch_get_compatible): Assume users knows what
	they're doing if one of the architectures is bfd_arch_unknown.

Wed Mar  1 17:30:46 1995  Michael Meissner  <meissner@cygnus.com>

	* elf32-ppc.c (elf_powerpc_howto_table): For relocation
	R_PPC_GOT16, change complain_on_overflow to be
	complain_overflow_signed.

Wed Mar  1 11:52:55 1995  Jason Molenda  <crash@phydeaux.cygnus.com>

	* configure.host: Recognize powerpc-*-aix*.

Wed Mar  1 11:57:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coff-i960.c (COFF_PAGE_SIZE): Define.

	* configure.in: Rewrite output of TDEFAULTS to avoid relying on
	semantics of single quotes in parameter substitution.

Tue Feb 28 12:53:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (elf_sort_hdrs): Sort empty sections before non-empty
	sections, if they have the same VMA.

	* config.bfd (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.

Mon Feb 27 12:58:25 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* config.bfd: add a29k-*-vxworks configuration.

Wed Feb 22 14:40:26 1995  Ian Lance Taylor  <ian@cygnus.com>

	* libaout.h (NAME(aout,slurp_reloc_table)): Change declaration to
	use reloc_howto_type rather than const struct reloc_howto_struct.

Tue Feb 21 18:19:22 1995  Ian Lance Taylor  <ian@cygnus.com>

	* bout.c (b_out_slurp_reloc_table): Don't return an error if asked
	for relocations for the .bss section.

Tue Feb 21 15:13:05 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_ar_write_symbol_stuff): Handle objects with odd
	lengths.

Fri Feb 17 12:34:36 1995  Michael Meissner  <meissner@cygnus.com>

	* elf32-ppc.c (ppc_elf_got16_reloc): Make GOT style relocs add
	32768, so the GOT pointer can point to 16384 pointers, instead of
	8192.

Fri Feb 17 11:45:38 1995  Ian Lance Taylor  <ian@cygnus.com>

	* hosts/sysv4.h: Include <unistd.h>, <stdlib.h>, and <time.h>.
	Only define SEEK_SET and SEEK_CUR if they are not already defined.
	Remove all external function declarations.

	* syms.c (bfd_decode_symclass): Return 'W' for a weak symbol.

	* coffgen.c (coff_real_object_p): Set start address and flags
	before calling coff_mkobject_hook.  Restore them on failure.
	* ecoff.c (_bfd_ecoff_mkobject_hook): If not ECOFF_AOUT_ZMAGIC,
	clear D_PAGED.

	* coffgen.c: Reindented.

Thu Feb 16 14:37:23 1995  Doug Evans  <dje@cygnus.com>

	* reloc.c (bfd_perform_relocation): Don't use bitpos in overflow
	calculations.
	(bfd_install_relocation): Likewise.

Thu Feb 16 13:22:29 1995  Ian Lance Taylor  <ian@cygnus.com>

	* hosts/std-host.h: Remove all function declarations which return
	int or void, except the one for free.

Wed Feb 15 14:54:18 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (elf_powerpc_howto_table): Use a destination mask of
	0xffffffff for R_PPC_REL32, not 0.
	(powerpc_reloc_map): Add low 16 bit, high 16 bit, and high 16 bit
	adjusted relocations.

Tue Feb 14 17:47:17 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (struct mips_elf_find_line): Define.
	(mips_elf_find_nearest_line): New static function.
	(bfd_elf32_find_nearest_line): Define.
	* libelf.h (struct elf_obj_tdata): Add find_line_info field.

	* ecoff.c (_bfd_ecoff_swap_tir_in): Move to ecofflink.c.
	(_bfd_ecoff_swap_tir_out): Likewise.
	(_bfd_ecoff_swap_rndx_in): Likewise.
	(_bfd_ecoff_swap_rndx_out): Likewise.
	(cmp_fdrtab_entry): Likewise.
	(mk_fdrtab): Likewise.
	(lookup): Likewise.
	(_bfd_ecoff_find_nearest_line): Just call _bfd_ecoff_locate_line
	to do most of the work.  Allocate find_line_info if necessary.
	* ecofflink.c: Include "aout/stab_gnu.h".
	(_bfd_ecoff_swap_tir_in): Move in from ecoff.c.
	(_bfd_ecoff_swap_tir_out): Likewise.
	(_bfd_ecoff_swap_rndx_in): Likewise.
	(_bfd_ecoff_swap_rndx_out): Likewise.
	(cmp_fdrtab_entry): Likewise.  Use PTR instead of void *.
	(mk_fdrtab): Move in from ecoff.c.  Add debug_info, debug_swap,
	and line_info arguments, and use them instead of ecoff_data.
	(fdrtab_lookup): Move in from lookup in ecoff.c.  Remove abfd
	argument, add line_info argument.  Use it instead of ecoff_data.
	(_bfd_ecoff_locate_line): New function, mostly from the old
	_bfd_ecoff_find_nearest_line in ecoff.c.
	* libecoff.h (ecoff_data_type): Remove find_buffer, fdrtab_len and
	fdrtab fields, replacing them find_line_info field.
	(_bfd_ecoff_swap_tir_in): Declare.
	(_bfd_ecoff_swap_tir_out): Declare.
	(_bfd_ecoff_swap_rndx_in): Declare.
	(_bfd_ecoff_swap_rndx_out): Declare.
	* libbfd-in.h (_bfd_ecoff_locate_line): Declare.
	* libbfd.h: Rebuild.
	* configure.in: Don't use ecoff.o for bfd_elf32_bigmips_vec or
	bfd_elf32_littlemips_vec.
	* Makefile.in: Rebuild dependencies.

Tue Feb 14 14:04:22 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* libelf.h (elf_backend_data): Add fields elf_machine_alt1 and
	elf_machine_alt2 which provide alternate versions of the machine
	code.

	* elf32-ppc.c (ELF_MACHINE_ALT1, ELF_MACHINE_ALT2): Define to
	recognize old versions of the PowerPC machine code.

	* elf32-target.h (elf32_bed): Initialize alternate machine code
	fields defined by ELF_MACHINE_ALT1 and ELF_MACHINE_ALT2.

	* elf64-target.h (elf64_bed): Initialize alternate machine code
	fields defined by ELF_MACHINE_ALT1 and ELF_MACHINE_ALT2.

	* elfcode.h (elf_object_p, elf_core_file_p): In addition to the
	main machine code field, check the two alternate machine code
	fields.

Tue Feb 14 12:46:48 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aoutf1.h (MACHTYPE_OK): Don't define if already defined.  Don't
	accept M_SPARC if bfd_arch_sparc is not in the list of supported
	architectures, and don't accept a 680x0 machine type if
	bfd_arch_m68k is not in the list of supported architectures.
	* aout0.c (MACHTYPE_OK): Define.

Mon Feb 13 23:25:38 1995  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (NAME(aout,swap_ext_reloc_in)): Don't return a pointer
	to garbage if the symbol index is out of range.
	(NAME(aout,swap_std_reloc_in)): Likewise.

Thu Feb  9 18:36:52 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (BFD32_BACKENDS): Add i386msdos.o.

Thu Feb  9 12:02:35 1995  Ian Lance Taylor  <ian@cygnus.com>

	* i386linux.c (NEEDS_SHRLIB): Define.
	(linux_tally_symbols): Crash if a NEEDS_SHRLIB symbol is
	undefined.  From hjl@nynexst.com (H.J. Lu).

Wed Feb  8 17:26:00 1995  Ian Lance Taylor  <ian@cygnus.com>

	* linker.c (generic_link_check_archive_element): Allocate common
	symbol information structure.  Don't bother to check for common
	symbol size overflow.
	(_bfd_generic_link_add_one_symbol): Likewise.
	* aoutx.h (aout_link_check_ar_symbols): Likewise.
	* linker.c (generic_link_check_archive_element): Adjust references
	to common symbol information for new structure.
	(_bfd_generic_link_add_one_symbol): Likewise.
	* aoutx.h (aout_link_check_ar_symbols): Likewise.
	(aout_link_add_symbols): Likewise.
	* ecoff.c (ecoff_link_add_externals): Likewise.
	* elfcode.h (elf_link_add_object_symbols): Likewise.
	(elf_link_output_extsym): Likewise.
	* sunos.c (sunos_add_one_symbol): Likewise.

Wed Feb  8 09:53:42 1995  Doug Evans  <dje@canuck.cygnus.com>

	* elfcode.h (elf_sort_hdrs): Put SHT_NOBITS sections after !SHT_NOBITS.

Tue Feb  7 16:27:33 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_find_nearest_line): Just return false, don't
	abort.

Tue Feb  7 14:43:33 1995  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* ecoff.c: Reformatted some comments and brace constructs in
	recent changes to GNU style.
	(cmp_fdrtab_entry, mk_fdrtab, lookup): Use old-style function
	definitions.

Tue Feb  7 14:21:28 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ecoffswap.h (ecoff_swap_pdr_in): Zero out intern before setting
	any of the fields.

Mon Feb  6 20:01:24 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Sat Feb  4 14:20:24 1995  David Mosberger-Tang  <davidm@piston.cs.arizona.edu>

	* ecoffswap.h (ecoff_swap_pdr_in, ecoff_swap_pdr_out): added
	internalizing/externalizing new "prof" field.

	* libecoff.h (ecoff_tdata): added fdrtab.

	* ecoff.c (_bfd_ecoff_find_nearest_line): Fixed.

Mon Feb  6 14:25:24 1995  Ian Lance Taylor  <ian@cygnus.com>

	* libelf.h (struct elf_link_hash_table): Add saw_needed field.
	* elfcode.h (elf_link_add_object_symbols): Set saw_needed if
	DT_NEEDED seen in .dynamic section.
	(elf_link_output_extsym): Warn if an undefined symbol is
	only referenced from a dynamic object, and not making a shared
	object, and saw_needed is false.
	* elf.c (_bfd_elf_link_hash_table_init): Initialize saw_needed.

	* libelf.h (ELF_LINK_HASH_DEFINED_WEAK): Don't define.
	* elfcode.h (elf_link_add_object_symbols): Don't clear or set
	ELF_LINK_HASH_DEFINED_WEAK.
	(elf_link_output_extsym): Don't check ELF_LINK_HASH_DEFINED_WEAK.

	Distinguish a weak defined symbol from a regular defined symbol.
	* linker.c (enum link_action): Add DEFW.
	(link_action): Add bfd_link_hash_defweak column.
	(_bfd_generic_link_add_one_symbol): Add DEFW case.  Handle
	bfd_link_hash_defweak in a few other cases.
	* Many files (bfd_link_hash_undefweak): Renamed from
	bfd_link_hash_weak.
	* aoutx.h (aout_link_write_symbols): Handle bfd_link_hash_defweak.
	(aout_link_write_other_symbol): Likewise.
	(aout_link_input_section_std): Likewise.
	(aout_link_input_section_ext): Likewise.
	* bout.c (get_value): Likewise.
	* coff-a29k.c (coff_a29k_relocate_section): Likewise.
	* coff-alpha.c (alpha_convert_external_reloc): Likewise.
	(alpha_relocate_section): Likewise.
	* coff-mips.c (mips_relocate_section): Likewise.
	(mips_relax_section): Likewise.
	(bfd_mips_ecoff_create_embedded_relocs): Likewise.
	* cofflink.c (coff_write_global_sym): Likewise.
	(_bfd_coff_generic_relocate_section): Likewise.
	* ecoff.c (ecoff_link_add_externals): Likewise.
	(ecoff_link_write_external): LIkewise.
	* elf32-hppa.c (elf32_hppa_relocate_section): Likewise.
	(elf32_hppa_size_stubs): Likewise.
	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Likewise.
	(elf_i386_relocate_section): Likewise.
	(elf_i386_finish_dynamic_symbol): Likewise.
	* elf32-mips.c (mips_elf_output_extsym): Likewise.
	(mips_elf_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
	(elf32_sparc_relocate_section): Likewise.
	* elfcode.h (elf_link_add_object_symbols): Likewise.
	(elf_adjust_dynamic_symbol): Likewise.
	(elf_bfd_final_link): Likewise.
	(elf_link_output_extsym): Likewise.
	* i386linux.c (linux_add_one_symbol): Likewise.
	(linux_tally_symbols): Likewise.
	(linux_finish_dynamic_link): Likewise.
	* linker.c (_bfd_generic_link_output_symbols): Likewise.
	(set_symbol_from_hash): Likewise.
	* reloc16.c (bfd_coff_reloc16_get_value): Likewise.
	(bfd_perform_slip): Likewise.
	* sunos.c (sunos_add_one_symbol): Likewise.
	(sunos_scan_std_relocs): Likewise.
	(sunos_scan_ext_relocs): Likewise.
	(sunos_scan_dynamic_symbol): Likewise.
	(sunos_write_dynamic_symbol): Likewise.

Mon Feb  6 03:20:17 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Changes from Bryan Ford, baford@schirf.cs.utah.edu:
	* config.bfd (i[345]86-*-msdos*): New target.
	* configure.in (i386msdos_vec): Handle it.
	* i386msdos.c: New file.
	* config/i386-msdos.mt: New file.
	* bfd.c (enum bfd_error): Added new value bfd_error_file_too_big.
	(bfd_errmsgs): Added string to table.
	* libaout.h (reloc_type-lookup): Declare it.
	* targets.c (enum bfd_flavour): Added bfd_target_msdos_flavour.
	(i386msdos_vec): Declare.
	(bfd_target_vector): Add it to the list.
	* bfd-in2.h: Regenerated.

Wed Feb  1 01:32:14 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_set_reloc_info, case R_DATA_ONE_SYMBOL): If there's
	nothing in R_DATA_OVERRIDE, then try to find the addend in the
	section's contents.
	(som_write_fixups): Ignore the addend in a R_DATA_ONE_SYMBOL fixup.

	* som.c (som_object_setup): More heruistics to detect the
	braindamaged HP OSF1 linker. 
	(setup_sections): Don't forget to free subspace_sections if we get
	an error.
	(som_slurp_string_table): Allocate strings on this bfd's obstack
	rather than directly out of the heap.
	(som_slurp_symbol_table): Likewise for the saved copy of the
	canonical symbols.
	(som_slurp_reloc_table): Likewise for the saved copy of the
	canonical relocations.  Free the native relocations when we're
	done with them.

Tue Jan 31 21:53:28 1995  Doug Evans  <dje@canuck.cygnus.com>

	* libelf.h (struct elf_obj_tdata): New member program_header_size.
	* elfcode.h (get_program_header_size): New parameters sorted_hdrs,
	count, and maxpagesize.  All callers updated.
	If sorted_hdrs is non-NULL, use it to compute the number of segments.
	Save result in case called again.
	(assign_file_positions_except_relocs): Sort headers before calling
	get_program_header_size.

Tue Jan 31 15:27:53 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (map_program_segments): Add sorted_hdrs parameter.
	Search through it rather than through unsorted section headers.
	(assign_file_positions_except_relocs): Pass sorted_hdrs to
	map_program_segments.

Mon Jan 30 22:04:53 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* ecoff.c (_bfd_ecoff_find_nearest_line): Fix problems in range
	checking.  Expect argument OFFSET to be section-relative.  From
	David Mosberger-Tang, davidm@piston.cs.arizona.edu.

Mon Jan 30 11:22:11 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (NAME(bfd_elf,record_link_assignment)): Don't do
	anything if we are not linking an ELF file.
	(NAME(bfd_elf,size_dynamic_sections)): Likewise.

Sat Jan 28 12:48:57 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (compare_subspaces): New function to sort subspaces by
	their location in the object file.
	(setup_sections): When computing the index for each subspace,
	handle case where setup_sections reads the subspaces in a
	different order that they appear in the object file.
	(som_is_space): Also examine the output section for the containing
	section.
	(som_is_subspace, som_is_container): Likewise.
	(som_begin_writing): Don't prepare or write fixups here.  When
	writing the symbol strings, use the unsorted symbol table.
	(som_write_object_contents): Don't write the symbol table here.
	(som_finish_writing): Prepare and write the fixups here.  Likewise
	for the symbol table.
	(som_bfd_derive_misc_symbol_info): Undefined symbols always have
	type SS_UNSAT regardless of BSF_EXPORT.
	(som_set_reloc_info): Unpack and attach argument location
	information for R_PCREL_CALL and R_ABS_CALL relocations.

	* som.c (som_object_setup): New heuristic to determine if the
	entry and flags fields are switched in the exec header.

Sat Jan 28 00:16:01 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (elf_link_add_object_symbols): Use *sym_hash instead
	of h if we might not be doing an ELF link.

Fri Jan 27 16:13:42 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_final_link): If the size of an input
	.reginfo section is zero, force it to the correct size, since the
	linker emulation code may have clobbered it.

	* elfcode.h (elf_sort_hdrs): Correct SHF_ALLOC test.
	(assign_file_positions_except_relocs): Free sorted_hdrs.

Thu Jan 26 09:00:12 1995  Steve Chamberlain  <sac@splat>

	* srec.c (srec_set_section_contents): Fix off by
	one end address calculation.

	* config.bfd: (m68*-est-coff): New configuration.

Thu Jan 26 11:39:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (elf_link_add_object_symbols): Only examine weakdef if
	we are using an ELF hash table.

	* aoutx.h (NAME(aout,some_aout_object_p)): Always set EXEC_P if
	the start address is in the .text section, even if STAT_FOR_EXEC
	is set.  Just use STAT_FOR_EXEC as an additional test.

Thu Jan 26 11:12:54 1995  Michael Meissner  <meissner@cygnus.com>

	* elfcode.h (prep_headers): Use EM_PPC instead of
	EM_CYGNUS_POWERPC.

	* elf32-ppc.c (reloc_type): Add all System V.4 and eABI
	relocations currently defined.
	(powerpc_reloc_map): Adjust to new relocation names.
	(elf_powerpc_howto_table): Add most of the new relocations.
	(ELF_MACHINE_CODE): Use EM_PPC instead of EM_CYGNUS_POWERPC.

	* config.bfd: Add support for powerpc-*-eabi.

	* config/ppc-elf.mt: Add rs6000 architecture support to the
	PowerPC.  Also add XCOFF support.

Wed Jan 25 23:26:13 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c (CALC_ADDEND): Don't define.
	(coff_sh_relocate_section): Remove.
	(coff_relocate_section): Use _bfd_coff_generic_relocate_section.

Tue Jan 24 14:22:47 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elf32-mips.c (mips_elf_output_extsym): Set the value of the
	ECOFF symbol from the hash table entry.

Mon Jan 23 14:53:35 1995  Steve Chamberlain  <sac@splat>

	* coff-sh.c (coff_sh_relocate_section):  Don't subtract
	vma twice.

Mon Jan 23 13:33:18 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* coff-sh.c (sh_reloc): Don't ignore the previous contents of an
	R_SH_IMM32 reloc.

	* config.bfd (i[345]86-*-gnu*): Set bfd_name to i386-gnu.
	* config/i386-gnu.mt: New file.  Include ELF support.

	* opncls.c (bfd_openstreamr): Call bfd_cache_init.

Fri Jan 20 11:44:45 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* sunos.c (sunos_add_one_symbol): Only set the sunos specific
	fields if we are doing a sunos link.

Wed Jan 18 12:28:17 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* cpu-h8300.c (h8300_info_struct): Change name from "H8/300" to
	"h8300" for consistency with other cpu-* files.
	(h8300h_info_struct): Change name from "H8/300H" to "h8300h".
	* coff-h8300.c (special): Remove unused variable diff.

Tue Jan 17 10:52:32 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* bfd-in.h (bfd_byte, reloc_howto_type): Define here, not...
	* reloc.c (bfd_byte, reloc_howto_type): here.
	* Changed all occurrences of ``const struct reloc_howto_struct''
	to be ``reloc_howto_type'' instead.
	* bfd-in2.h, libbfd.h, libcoff.h: Rebuilt.

	* opncls.c (bfd_openstreamr): New function.
	* bfd-in2.h: Rebuilt.

	* elf32-mips.c (enum reloc_type): Define new relocs used on Irix.
	(elf_mips_howto_table): Add entries for new relocs.
	(mips_elf_section_from_shdr): Handle SHT_MIPS_MSYM,
	SHT_MIPS_DWARF, and SHT_MIPS_EVENTS.
	(mips_elf_fake_sections): Handle sections named .msym, .debug_*
	and .MIPS.events.*.

	* srec.c (srec_init): Remove unused local variable i.

Sat Jan 14 19:09:48 1995  Steve Chamberlain  <sac@jonny>

	* archures.c, Makefile.in, targets.c, bfd-in2.h, coffcode.h,
	config.bfd, configure.in, config/w65.mt: Initial support for the W65.

Sun Jan 15 13:57:45 1995  Steve Chamberlain  <sac@splat>

	* opncls.c (bfd_fdopenr): Configure for WIN32.

Thu Jan 12 16:30:47 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (diststuff): Include `headers'.

	* sunos.c (m68k_plt_first_entry, sparc_plt_first_entry): Now
	const.
	* tekhex.c (digs): Ditto.
	* elf32-i386.c (elf_i386_plt0_entry, elf_i386_plt_entry): Ditto.

	* srec.c, tekhex.c: Include libiberty.h.  Delete static array
	hex_value and replace references to it with references to
	hex_init, hex_p, and hex_value.
	* Makefile.in: Updated dependencies.

	* archures.c (archures_init_table): Now const.
	(bfd_arch_init): Adjusted type of local var `ptable'.

Thu Jan 12 09:33:24 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* hosts/symmetry.h:  Redefine `shared' to enable compilation
	with the native Dynix cc compiler.
	* i386dynix.c:  Include aoutx.h instead of using routines
	from aout32.c.

Wed Jan 11 21:31:41 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* reloc.c (reloc_howto_type): Make typedef include `const'.
	* aout-ns32k.c, aoutx.h, bout.c, cf-m68klynx.c, coff-i386.c,
	coff-i960.c, coff-m68k.c, cofflink.c, cpu-ns32k.c, ecoff.c,
	elf32-hppa.c, elf32-i386.c, elf32-mips.c, elf32-sparc.c,
	elfcode.h, libbfd-in.h, linker.c, mipsbsd.c, nlm32-ppc.c, oasys.c,
	reloc.c, som.c: Don't use `const' in combination with
	`reloc_howto_type'.
	* bfd-in2.h, libbfd.h: Regenerated.

	* ecoff.c (ecoff_type_to_string): Local variable `buffer1' doesn't
	need to be static.

Wed Jan 11 14:36:41 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* sunos.c (sunos_add_one_symbol): Don't core dump if a multiple
	definition of an absolute symbol is encountered.

	* linker.c (_bfd_generic_link_add_one_symbol): Ignore
	redefinitions of an absolute symbol to the same value.

Mon Jan  9 15:51:32 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_link_add_object_symbols): It's reasonable for no
	flags to be set, so don't insist otherwise.

Fri Jan  6 16:39:40 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_slurp_symbol_table): Don't set BSF_GLOBAL for an
	undefined or common symbol.
	(elf_link_add_object_symbols): Likewise.

Wed Jan  4 14:14:05 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (bfd_section_from_som_symbol): Only return sections which
	correspond to subspaces.

	* som.c (som_begin_writing): Don't forget to bump the
	total_subspaces when writing the unloadable subspaces.

Wed Dec 28 20:54:47 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_write_fixups): Use SEC_HAS_CONTENTS to identify
	bss-like sections.
	(som_get_section_contents): Likewise.
	(som_set_section_contents): Likewise.

Tue Dec 27 14:03:47 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (setup_sections): Turn off SEC_HAS_CONTENTS for bss-like
	sections.

Tue Dec 20 15:30:12 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* coffgen.c (bfd_debug_section): Deleted.
	(coff_section_from_bfd_index): Return absolute section for debug
	symbol.
	(coff_write_symbol): Set BSF_DEBUGGING for C_FILE symbols.  If
	BSF_DEBUGGING is set, set section to N_DEBUG.
	(coff_bfd_make_debug_symbol): Use absolute section.

	* elfcode.h (assign_file_positions_except_relocs): In assertion,
	force all values to the same type.

Tue Dec 20 11:11:58 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coff-h8300.c (howto_table): All relocs get a special function.
	(special): Never do anything when linking -r.

Tue Dec 20 13:58:01 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* i386linux.c (linux_add_one_symbol): Don't do anything Linux
	specific if this is not a Linux hash table.  From Eric Youngdale
	<eric@aib.com>.

	Patches from kkojima@mix.or.jp (Kazumoto Kojima):
	* mipsbsd.c (mips_howto_table_ext): Change sizes of memory relocs
	apply to from two bytes to four bytes.
	* MY(reloc_howto_type_lookup): Handle BFD_RELOC_CTOR.

	* elf32-i386.c (elf_i386_relocate_section): Correct and expand the
	list of cases for which relocation need not be computed.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

Mon Dec 19 23:09:16 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_read_symext_info): Delete do_locals and
	do_globals arguments, always read symbol extension information for
	globals and locals.  All callers changed.
	(elf32_hppa_size_stubs): Rework to only read symbol extension
	information once for each input bfd.  10% improvement in linker
	performance.

Fri Dec 16 12:28:46 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_section_from_bfd_section): Check
	bfd_is_abs_section, etc., only after checking for the section in
	the BFD and after calling the backend routine.

Wed Dec 14 20:21:58 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_map_symbols): Only use section symbols whose
	value is the start of the section, checking output_offset when
	using output_section.  When creating a new symbol, set the value
	to 0, since BFD symbol values are section relative.

Tue Dec 13 13:31:06 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* cpu-z8k.c (arch_info_struct): Make z8002 the default
	architecture.

Fri Dec  9 12:43:05 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_bfd_link_add_symbols): If the first object in the
	archive is not an ELF object, pass the archive to the add_symbols
	entry point appropriate for the first object.  From Eric Youngdale
	<eric@aib.com>.
	* aoutx.h (NAME(aout,link_add_symbols)): Similar change if the
	first object is not an a.out object.

	* elf32-i386.c (elf_i386_relocate_section): Don't compute
	relocation in cases where we won't use it.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

Thu Dec  8 14:19:41 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* pc532-mach.c (NAME): Define to use ns32kaout prefix.
	* ns32knetbsd.c (NAME): Ditto.
	(ns32kaout_32_get_section_contents): Define to standard aout-32
	version.

Fri Dec  2 13:56:49 1994  Ian Lance Taylor  <ian@rtl.cygnus.com>

	* coff-mips.c (mips_read_relocs): New static function, broken out
	of mips_relax_section.
	(mips_relax_section): Call mips_read_relocs.
	(bfd_mips_ecoff_create_embedded_relocs): New function.
	* bfd-in.h (bfd_mnips_ecoff_create_embedded_relocs): Declare.
	* bfd-in2.h: Rebuild.

Wed Nov 30 14:12:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-sh.c: Use _bfd_dummy_target instead of no_archive.

Tue Nov 29 14:00:19 1994  J.T. Conklin  <jtc@.rtl.cygnus.com>

	* config.bfd (i[345]86-*-freebsd*): Use i386-bsd as bfd_name.
	* configure.host (i[345]86-*-freebsd*): Use i386bsd as my_host.

Mon Nov 28 15:36:04 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* config/m68k-nbsd.mt (DEFAULT_VECTOR): set to m68knetbsd_vec.
	* Makefile.in: Rebuilt dependancies.
	  (CFILES): Added m68knetbsd.c.
	  (HFILES): Added netbsd.h.

Wed Nov 23 19:21:41 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coff-sh.c (shlcoff_vec): New target vector.
	(no_archive): New function.
	* coffcode.h (coff_set_arch_mach_hook, coff_set_flags): Handle
	little endian SH.
	* configure.in: Handle shl.
	* targets.c (bfd_target_vector): Add shlcoff_vec.
	* config/sh-coff.mt (SELECT_VECS): Handle shl_coff_vec.

Wed Nov 23 10:50:13 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elfcode.h (write_relocs): Do not subtract the section's vma from
	the reloc's offset when writing .o's.  Instead add the section's
	vma to the reloc's offset when writing an executable or shared
	library.

Tue Nov 22 23:34:37 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_bfd_final_link_relocate): Do not add
	input_section->vma to the relocation's offset.

Mon Nov 21 12:37:25 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* srec.c (srec_get_reloc_upper_bound): Define.
	(srec_canonicalize_reloc): Define.
	(srec_bfd_reloc_type_lookup): Define.
	(srec_vec, symbolsrec_vec): Use BFD_JUMP_TABLE_RELOCS (srec).

Sat Nov 19 03:10:51 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* configure.host (i[345]86-*-solaris*):  Use solaris2 to
	enable extraction of procfs info from core file for GDB.

Thu Nov 17 17:37:39 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* reloc.c (bfd_reloc_code_type): Add new value BFD_RELOC_12_PCREL.
	* bfd-in2.h, libbfd.h: Rebuilt.

Thu Nov 17 13:12:08 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_bfd_final_link_relocated): Use the
	vma from the output_section containing $global$ when computing
	global_vlaue.

Thu Nov 17 14:29:13 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* archive.c (_bfd_write_archive_contents): Round up the archive
	header size of the extended name table to an even number.

Wed Nov 16 16:08:06 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* coff-sh.c: Deleted some code that was commented out or inside
	"#if 0".
	(COFF_LONG_FILENAMES): Define.

	* cpu-sh.c (arch_info_struct): Convert name to lowercase, for
	consistency with other architectures.

Sat Nov 12 23:50:10 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (elf_export_symbol): Also export symbols which are
	referenced by a regular file.

Fri Nov 11 14:29:31 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add
	export_dynamic argument, and handle it.
	(elf_export_symbol): New function.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update declaration.
	(bfd_elf64_size_dynamic_sections): Update declaration.
	* bfd-in2.h: Rebuild.

Fri Nov 11 10:35:33 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hpux-core.c (hpux_core_struct): Delete handles for the
	data, reg and stack sections.  They're never used.  Delete
	accessor macros.
	(make_bfd_asection): Use bfd_make_section_anyway since debugging
	cores from dynamic executables may have several sections with the
	same logical name.
	(hpux_core_core_file_p): Don't save handles to data, reg and
	stack sections.  Handle CORE_TEXT, CORE_MMF and CORE_SHM.

Tue Nov  8 13:03:30 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* bout.c (callj_callback): Add new argument shrinking.  Change all
	callers.  Handle relocs against section symbols correctly.  If not
	shrinking, don't subtract out dstidx; the subtraction is already
	in the object file.

Sun Nov  6 12:52:00 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.h: Conditionally include <shl.h> and <dl.h>.

Thu Nov  3 18:19:13 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (ALL_MACHINES): Include m68knetbsd.o.

	* config/i386linux.mh (EXTRALIBS): Include -lm.

	Patches from DJ Delorie:
	* coff-go32.c: Replacement file, uses coff-i386.c with minor
	changes.
	* coff-i386.c (TARGET_UNDERSCORE): allow other files to override
	underscore also
	* makefile.dos: del ctor.o, add cofflink.o and elf32.o

	* aoutx.h (adjust_o_magic): If user set data section vma, use it
	to determine the default bss vma.  Patch from Takada Hiroaki,
	hiro@is.s.u-tokyo.ac.jp.
	(machine_type, case bfd_arch_vax): Set *unknown to false.  Patch
	from John David Anglin <dave@hiauly1.hia.nrc.ca>.

	* configure.in (tb): Rename ns32knetbsd_vec to pc532netbsd_vec,
	since that's what it's called.

Wed Nov  2 15:24:51 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* archive.c (normalize): Change to take a BFD as an argument.
	Change VMS version to use bfd_alloc rather than malloc, so that we
	don't lose the memory forever.
	(_bfd_construct_extended_name_table): Check the name of an archive
	entry which is not being extended, and correct it if it is wrong.
	This is necessary in case the archive was constructed by another
	program which put an entry in the extended name table which we
	don't plan to put in ourselves.  From jjc@jclark.com (James
	Clark).
	(bfd_dont_truncate_arname): Check return value of normalize.

Mon Oct 31 14:19:08 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elf32-hppa.c (ELF32_PARISC_SX_SIZE): Define.
	(ELF32_PARISC_SX_GET, ELF32_PARISC_SX_PUT): Define.
	(symextn_entry): Don't define.
	(symext_chain_size): Change type to bfd_size_type.
	(symextn_contents): Change type to bfd_byte *.
	(elf32_hppa_backend_begin_write_processing): Use
	ELF32_PARISC_SX_SIZE instead of sizeof (symext_entryS).
	(elf32_hppa_size_symext): Likewise.  Also, change type of sizep to
	bfd_size_type *.
	(elf_hppa_tc_make_sections): Cast symextn_contents assignment to
	bfd_byte *.  Use ELF32_PARISC_SX_PUT instead of direct assignment.
	(elf32_hppa_backend_symbol_table_processing): Use
	ELF32_PARISC_SX_SIZE instead of sizeof (symext_entryS).  Use
	ELF32_PARISC_SX_GET insetad of direct assignment.
	(elf32_hppa_read_symext_info): Change type of contents, and its
	assignment cast, to bfd_byte *.  Use ELF32_PARISC_SX_SIZE instead
	of sizeof (symextn_entry).  Use symext_entryS instead of
	symextn_entry.  Use ELF32_PARISC_SX_GET instead of direct
	assignment.

	* archive.c (bfd_dont_truncate_arname): Add the ar padding
	character, if there is room for it, even if the name is the
	maximum length.

	* elfcode.h (assign_file_positions_except_relocs): Sort the ELF
	headers by section address when assigning file positions.
	(elf_sort_hdrs): New static function.

Sun Oct 30 18:56:58 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Create DT_INIT
	and DT_FINI dynamic entries based on the existence of _init and
	_fini symbols, not on the .init and .fini sections.  This is
	compatible with some SVR4 linkers.
	(elf_bfd_final_link): Corresponding change.

Sat Oct 29 12:18:10 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Don't move a
	symbol with a PLT entry into the .plt section if it is defined in
	a regular file.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.

	* linker.c (_bfd_generic_link_add_archive_symbols): It's not an
	error if an empty archive has no symbol table.
	* ecoff.c (ecoff_link_add_archive_symbols): Likewise.
	* elfcode.h (elf_link_add_archive_symbols): Likewise.

Fri Oct 28 10:08:41 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

        NetBSD/m68k support, based on work by mikeb@snow.datametrics.com: 
	* config.bfd (m68*-*-netbsd*): Use m68k-nbsd as bfd_name.
	* configure.in (m68knetbsd_vec): Added.
	* targets.c (bfd_m68knetbsd_vec): Added.
	* hosts/m68knbsd.h, config/m68k-nbsd.mt, m68knetbsd.c: New files.
	* Makefile.in (BFD32_BACKENDS, CFILES): Add m68knetbsd.c.

	miscellaneous cleanup required by all netbsd targets, based on work 
	by Andrew Cagney <cagney@highland.com.au>:
	* netbsd.h (N_MAGIC, N_SET_MAGIC, N_GETMAGIC, N_GETMAGIC2, N_TXTADDR,
	  N_TXTOFF, N_ALIGN, N_DATADDR, N_DATOFF): Removed.  Generic a.out
	  definitions work.
	* i386nbsd.c, ns32knbsd.c, sparcnbsd.c (__LDPGSZ): Removed.
	  (MY(write_object_contents)): Use NetBSD's magic numbers

Thu Oct 27 16:59:52 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* libelf.h (struct bfd_elf_section_data): Add field dynindx.
	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Don't finalize
	the .dynsym, .dynstr or .hash sections until after the backend
	size_dynamic_sections routine, so that it can add dynamic symbols
	if it wants to.
	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Don't define the
	symbol to be in the .plt section when generating a shared library
	if it is a defined symbol.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
	(elf32_sparc_size_dynamic_sections): When generating a shared
	library, allocate space for a dynamic symbol for each output
	section, storing the index in the dynindx field of the ELF section
	data.  Adjust the other dynindx fields to account for this.
	(elf32_sparc_adjust_dynindx): New static function.
	(elf32_sparc_relocate_section): When copying a reloc into a shared
	library, use the original addend as appropriate.  Convert an
	R_SPARC_32 reloc into an R_SPARC_RELATIVE reloc.  Use the dynamic
	symbol index of the output section, not the normal symbol index.
	(elf32_sparc_finish_dynamic_sections): Don't die if a section does
	not exist when setting the value of the dynamic tags.  Write out
	a dynamic symbol for each output section.

Wed Oct 26 01:15:51 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_input_section): Don't bother to read or write
	the relocs if there aren't any.

Tue Oct 25 11:44:38 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* Makefile.in (ALL_MACHINES): Add tekhex.o.
	* targets.c (bfd_target_vector): If SELECT_VECS is not defined,
	include tekhex_vec.
	* tekhex.c (NIBBLE, ISHEX): Cast array arguments to unsigned char.
	(getvalue, getsym, out): Likewise.
	(find_chunk): Remove unused variable s.
	(first_phase): Remove unused variable s.
	(pass_over): Remove unused variable address.
	(tekhex_object_p): Remove unused variable section.
	(move_section_contents): Change return type from boolean to void.
	(tekhex_write_object_contents): Remove unused variables tdata and
	list.

	* linker.c (enum link_action): Add CIND.
	(link_action): Change COMMON_ROW\indr from MDEF to CREF.  Change
	INDR_ROW\common from MDEF to CIND.
	(_bfd_generic_link_add_one_symbol): In CREF case, handle an
	existing symbol which is indirect rather than defined.  Add new
	CIND case.

Mon Oct 24 15:33:16 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	Change S-record backend to use multiple sections to handle gaps in
	file.
	* srec.c (srec_data_list_struct): Move field next from last place
	to first.  Change type of data to bfd_byte *.
	(struct srec_symbol): Define.
	(tdata_type): Remove done_symbol_read, count, strings, symbol_idx,
	string_size, string_idx.  Change type of symbols to struct
	srec_symbol *.  Add symtail and csymbols.
	(low, high): Remove.
	(size_symbols, fillup_symbols, size_srec, fillup): Remove.
	(white, skipwhite, pass_over, object_p): Remove.
	(srec_mkobject): Call srec_init.  Adjust tdata initialization for
	field changes.
	(srec_get_byte, srec_bad_byte): New static functions.
	(srec_new_symbol, srec_scan): New static functions.
	(srec_object_p): Change type of b to bfd_byte.  Explicitly set
	wrong_format error.  Call srec_mkobject and srec_scan instead of
	object_p.
	(symbolsrec_object_p): Likewise.  Also, change b to be only two
	bytes.
	(srec_read_section): New static function.
	(srec_get_section_contents): Call srec_read_section rather than
	pass_over.  Handle zero length section correctly.
	(set_set_arch_mach): Change from function to macro.
	(srec_set_section_contents): Change data to bfd_byte *.
	(srec_write_record): Change data, end and src to bfd_byte *.
	(srec_write_header): Change buffer and dst to bfd_byte *.
	(srec_write_section): Change location to bfd_byte *.
	(srec_write_terminator): Change buffer to bfd_byte *.
	(srec_get_symtab_upper_bound): Don't call
	srec_get_section_contents.
	(srec_get_symtab): Rewrite.

	* ecoff.c (ecoff_set_symbol_info): Set udata.i to 0, not NULL.

Fri Oct 21 16:43:13 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* libaout.h (machine_type): added M_68K_NETBSD and M_SPARC_NETBSD.
	* i386netbsd.c, ns32knetbsd.c, sparcnetbsd.c: removed RCS Id's.
	  changed how PAGE_SIZE and SEGMENT_SIZE are defined so they are
	  consistant with each other.
	* netbsd.h (N_HEADER_IN_TEXT, TEXT_START_ADDR): NetBSD fits its
	  header into the start of its text segment.

Fri Oct 21 17:13:07 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* targets.c (BFD_JUMP_TABLE_ARCHIVE): Add case for
	_construct_extended_name_table.
	(bfd_target): Add _bfd_construct_extended_name_table.
	* archive.c (_bfd_archive_bsd_construct_extended_name_table): New
	function.
	(_bfd_archive_coff_construct_extended_name_table): New function.
	(_bfd_construct_extended_name_table): Renamed by adding a leading
	underscore, and made externally visible.  Added trailing_slash
	argument, and used it instead of elf_style.  Changed type of
	tablen to bfd_size_type *.
	(_bfd_write_archive_contents): Use BFD_SEND to call
	construct_extended_name_table.  Use the returned name.
	* libbfd-in.h (_bfd_construct_extended_name_table): Declare.
	(_bfd_noarchive_construct_extended_name_table): Define.
	(_bfd_archive_bsd_construct_extended_name_table): Declare.
	(_bfd_archive_coff_construct_extended_name_table): Declare.
	* bfd-in2.h: Rebuild.
	* libbfd.h: Rebuild.
	* som.c (som_construct_extended_name_table): New static function.
	* aout-target.h (MY_construct_extended_name_table): Define.
	* coff-rs6000.c (rs6000coff_construct_extended_name_table):
	Define.
	* ieee.c (ieee_construct_extended_name_table): Define.
	* libecoff.h (_bfd_ecoff_construct_extended_name_table): Define.
	* oasys.c (oasys_construct_extended_name_table): Define.

	Fix the ELF linker to not require an interpreter if no dynamic
	objects were seen, even when linking PIC code.
	* libelf.h (ELF_LINK_HASH_NEEDS_PLT): Define.
	(struct elf_link_hash_table): Add field dynamic_sections_created.
	* elfcode.h (elf_link_record_dynamic_symbol): Create dynstr if it
	doesn't already exist.
	(elf_link_add_object_symbols): Create dynamic sections based on
	dynamic_sections_created field, not dynobj field.  Don't bother to
	set dynobj.
	(elf_link_create_dynamic_sections): If dynamic sections were
	already created, don't do anything.  If dynobj is already set, use
	it; otherwise, set it to the bfd argument.  Don't initialize
	dynsymcount.  Only create dynstr if it does not exist.  Set
	dynamic_sections_created to true.
	(NAME(bfd_elf,size_dynamic_sections)): Skip most of this function
	if no dynamic objects were seen.
	(elf_adjust_dynamic_symbol): If a symbol has the
	ELF_LINK_HASH_NEEDS_PLT flag set, let the backend adjust it.
	(elf_bfd_final_link): Change most decisions based on dynobj to
	check dynamic_sections_created instead.
	(elf_link_output_extsym): Only handle dynamic symbols if a dynamic
	object was seen.
	* elf.c (_bfd_elf_link_hash_table_init): Initialize new field
	dynamic_sections_created.  Set dynsymcount to 1, not 0.
	* elf32-i386.c (elf_i386_create_dynamic_sections): Call
	elf_i386_create_got_section rather than creating the .got and
	.got.plt sections.
	(elf_i386_create_got_section): New static function.
	(elf_i386_check_relocs): Just call elf_i386_create_got_section if
	a GOT table is needed, not bfd_elf32_link_create_dynamic_sections.
	Only create the .rel.got section, and only make space for a reloc,
	for a global symbol or when generating a shared object.  For a
	R_386_PLT32 reloc, just set the	ELF_LINK_HASH_NEEDS_PLT flag.
	(elf_i386_adjust_dynamic_symbol): Rework initial assertion to
	permit ELF_LINK_HASH_NEEDS_PLT non dynamic symbols.  Create a
	procedure linkage table entry for such symbols.  But, if no
	dynamic objects were seen, never create a PLT entry.
	(elf_i386_size_dynamic_sections): If no dynamic objects were seen,
	skip most of this function, and force the size of the .rel.got
	section to zero.
	(elf_i386_relocate_section): For a R_386_GOT32 reloc against a global
	symbol when no dynamic object was seen, initialize the contents of
	the .got section.  For a R_386_GOT32 against a local symbol, only
	create a R_386_RELATIVE reloc when generating a shared object.
	Treat a R_386_PLT32 reloc against a symbol for which we did not
	create a PLT entry as a R_386_PC32 reloc.
	(elf_i386_finish_dynamic_sections): Only fiddle with the dynamic
	entries and the PLT if we saw a dynamic object.
	* elf32-sparc.c (elf_sparc_howto_table): Fix R_SPARC_PC22 by
	setting rightshift to 10.  Fix R_SPARC_WPLT20 by setting
	rightshift to 2, size to 2, bitsize to 30, and dst_mask to
	0x3fffffff.
	(elf32_sparc_create_dynamic_sections): Don't set the size of the
	.plt section.  Call elf32_sparc_create_got_section rather than
	creating the .got section.
	(elf32_sparc_check_relocs): Call elf32_sparc_create_got_section if
	a GOT table is needed, not bfd_elf32_link_create_dynamic_sections.
	Only create the .rela.got section, and only make space for a
	reloc, for a global symbol or when generating a shared object.
	Set the alignment of the .rela.got section to 2.  For a
	R_SPARC_WPLT30 reloc, just set the ELF_LINK_HASH_NEEDS_PLT flag.
	(elf32_sparc_adjust_dynamic_symbol): Rework initial assertion to
	permit ELF_LINK_HASH_NEDS_PLT non dynamic symbols.  Create a
	procedure linkage table for such symbols.  But, if no dynamic
	objects were seen, never create a PLT entry.  Initialize the size
	of the .plt section.
	(elf32_sparc_size_dynamic_sections): If no dynamic objects were
	seen, skip most of this function, and force the size of the
	.rela.got section to zero.  Strip empty reloc sections, and strip
	an empty .plt section.
	(elf32_sparc_relocate_section): For a GOT reloc against a global
	symbol when no dynamic object was seen, initialize the contents of
	the .got section.  For a GOT reloc against a local symbol, only
	create a R_SPARC_RELATIVE reloc when generating a shared object.
	Treat a R_SPARC_WPLT30 reloc against a symbol for which we did not
	create a PLT entry as a R_SPARC_WDISP30 reloc.
	(elf32_sparc_finish_dynamic_sections): Only fiddle with the
	dynamic entries and the PLT if we saw a dynamic object.

Thu Oct 20 13:28:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (elf_map_symbols): Don't worry about section symbols
	in a section not owned by any BFD.
	(elf_section_from_bfd_section): Separate out loop which calls
	backend routine.  Check bfd_section and call the backend routine
	even for a section not owned by any BFD.
	* elf32-mips.c (mips_elf_section_from_bfd_section): Handle
	.acommon section.

Wed Oct 19 13:28:29 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* coffgen.c (coff_print_symbol): Make names for section number and
	storage class slightly more verbose.  It's not clear how many
	characters I can justify using up, but before this change they
	both were abbreviated "sc" which is (IMHO) clearly unacceptable.

Wed Oct 19 01:26:39 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* binary.c (binary_set_section_contents): Set the base file
	position from the lowest section VMA, not the start address.

	* aoutx.h (NAME(aout,slurp_symbol_table)): Don't return an error
	if there are no symbols.
	* coffgen.c (coff_get_normalized_symtab): Likewise.
	* hp300hpux.c (MY(slurp_symbol_table)): Likewise.

Tue Oct 18 12:56:43 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* aout-target.h (MY_bfd_copy_private_section_data): Only copy
	subformat to another bfd_target_aout_flavour file.

	* binary.c: New file for raw binary output format.
	* Makefile.in (BFD_LIBS): Add binary.o.
	(CFILES): Add binary.c.
	* targets.c (binary_vec): Declare.
	(bfd_target_vector): Include binary_vec.

	* srec.c (tdata_type): Add field tail.
	(srec_mkobject): Initialize tail.
	(srec_set_section_contents): Sort S record list by address.

Mon Oct 17 11:38:16 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_map_symbols): Sort the symbols into a new array,
	rather than messing with Elf_Sym_Extra.  Store the symbol index in
	the udata.i field.
	(swap_out_syms): Use outbound_syms as a pointer rather than as an
	array.  Don't worry about elf_sym_num.
	* libelf.h (struct elf_sym_extra): Don't define.
	(Elf_Sym_Extra): Don't define.
	(struct elf_obj_tdata): Remove sym_extra field.
	(elf_sym_extra): Don't define.
	* elf32-hppa.c (elf32_hppa_backend_final_write_processing): Use
	udata.i rather than elf_sym_extra array.

	* syms.c (asymbol): Change udata field into a union.
	* bfd-in2.h: Rebuild.
	* aoutx.h (NAME(aout,translate_symbol_table)): Use udata.p rather
	than just udata.
	* bout.c (perform_slip): Likewise.
	* hp300hpux.c (MY(slurp_symbol_table)): Likewise.
	* ieee.c (ieee_slurp_external_symbols): Likewise.
	* linker.c (generic_link_add_symbol_list): Likewise.
	(default_indirect_link_order): Likewise.
	* oasys.c (oasys_slurp_symbol_table): Likewise.
	* reloc16.c (bfd_perform_slip): Likewise.
	* srec.c (fillup_symbols): Likewise.
	* coffcode.h (get_index): Use udata.i rather than just udata.
	(coff_slurp_symbol_table): Likewise.
	* coffgen.c (set_index): Likewise.
	* ecoff.c (ecoff_set_symbol_info): Likewise.
	* elfcode.h (elf_symbol_from_bfd_symbol): Likewise.
	* libecoff.h (ecoff_get_sym_index, ecoff_set_sym_index): Likewise.
	* som.c (compare_syms): Likewise.
	(som_prep_for_fixups): Likewise.
	(som_write_fixups): Likewise.

	Use a hash table when writing out ELF symbol names.
	* elfcode.h (elf_stringtab_init): New static function.
	(bfd_new_strtab, bfd_add_to_strtab, bfd_add_2_to_strtab): Remove.
	Change all callers to use elf_stringtab_init or
	_bfd_stringtab_add, and get stringtab lengths using
	_bfd_stringtab_size.
	(elf_fake_sections): Change ignored argument to pointer to
	boolean, and set the boolean to true if an error occurs.  If an
	error has already occurred, don't do anything.
	(assign_section_numbers): Just set sh_size, not contents.
	(elf_compute_section_file_positions): Pass the address of a
	boolean to elf_fake_sections.  Pass the address of a
	bfd_strtab_hash to swap_out_syms.  Write out the .strtab section.
	(prep_headers): Change shstrtab to bfd_strtab_hash.
	(swap_out_syms): Take a pointer to a bfd_strtab_hash as an
	argument.  Set it to the symbol names.
	(NAME(bfd_elf,write_object_contents)): Write out the section
	header names using _bfd_stringtab_emit.
	(elf_debug_section): Remove first argument; get the section name
	via the bfd_section pointer.  Change caller.
	(elf_bfd_final_link): Write out the symbol names using
	_bfd_stringtab_emit.  Likewise for the .dynstr section contents.
	Free the symbol names at the end of the function.
	(elf_link_input_bfd): Remove the last argument, output_names,
	from relocate_section.  Save the old symbol contents before
	calling elf_link_output_sym, and restore them afterward.
	* libelf.h (struct elf_link_hash_table): Change dynstr field to
	struct bfd_strtab_hash.
	(struct elf_backend_data): Remove last argument, output_names,
	from elf_backend_relocate_section field.
	(struct strtab): Don't define.
	(struct elf_obj_tdata): Change strtab_ptr field to struct
	bfd_strtab_hash.
	* elf32-hppa.c (elf32_hppa_relocate_section): Remove last
	argument, output_names.
	* elf32-i386.c (elf_i386_relocate_section): Likewise.
	* elf32-mips.c (mips_elf_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

	* libbfd-in.h (DEFAULT_STRING_SPACE_SIZE): Don't define.
	(bfd_add_to_string_table): Don't declare.
	* libbfd.h: Rebuild.
	* libbfd.c (bfd_add_to_string_table): Remove.

	* elfcode.h (elf_swap_shdr_in): Use bfd_section, not rawdata.
	Clear contents field.
	(bfd_section_from_shdr): In SHT_STRTAB case, check bfd_section,
	not rawdata.  Don't set rawdata if e_shstrndx.  Use bfd_section
	rather than rawdata in commented out code.  In SHT_REL[A] case,
	don't bother to check elf_section_data of section returned by
	section_from_elf_index.
	(elf_fake_sections): Set bfd_section, not rawdata.  Don't set
	size.
	(elf_map_symbols): Don't set elf_num_section_syms.  Don't create
	section symbols that already exist.
	(assign_file_position_for_section): Use bfd_section, not rawdata.
	(section_from_elf_index): Just check bfd_section field.
	(elf_section_from_bfd_section): Likewise.
	(elf_debug_section): Don't print rawdata, contents, or size.
	(elf_link_add_object_symbols): Don't error out if
	section_from_elf_index returns NULL.
	(elf_bfd_final_link): Check return value from
	section_from_elf_index against NULL, not bfd_is_abs_section.
	(elf_link_input_bfd): Don't check section_from_elf_index return
	value.
	* libelf.h (struct elf_obj_tdata): Remove num_section_syms field.
	(elf_num_section_syms): Don't define.
	* elf.c (elf_get_str_section): Store section contents in contents
	field rather than rawdata field.
	(elf_string_from_elf_section): Likewise.
	(_bfd_elf_make_section_from_shdr): Store BFD section pointer in
	bfd_section field rather than rawdata field.
	* elf32-hppa.c (elf32_hppa_read_symext_info): Use bfd_section
	rather than rawdata.
	(elf32_hppa_size_stubs): Likewise.
	(elf32_hppa_backend_symbol_table_processing): Don't set
	symextn_hdr->size; just use sh_size.
	* elf32-mips.c (mips_elf_final_write_processing): Use bfd_section
	rathern than rawdata.
	(mips_elf_section_from_shdr): Likewise.
	(mips_elf_section_processing): Likewise.
	(mips_elf_section_from_bfd_section): Remove rawdata check.

	* srec.c (pass_over): Set the start address for S7, S8 or S9.

Fri Oct 14 19:15:46 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* VERSION: Updated to 2.5.

Fri Oct 14 11:07:50 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* bfd.c (bfd_scan_vma): Cast end to be non const before passing it
	to strtoul.

Thu Oct 13 14:40:41 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* bfd.c (bfd_scan_vma): Pass end argument on to strtoul.

Wed Oct 12 16:46:43 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* opncls.c (bfd_realloc): Deleted, since it's broken and fixing it
	would make it slow.  Besides, it isn't used much.
	* elfcode.h (elf_map_symbols): Always allocate new storage for the
	symbol table.

Wed Oct 12 11:54:37 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ecoff.c (ecoff_set_symbol_info): Mark local stProc, stLabel or
	stabs symbols as BSF_DEBUGGING.

	* rs6000-core.c (rs6000coff_core_file_matches_executable_p): Make
	str1 and str2 const pointers.

	* Makefile.in (INSTALL): Use top level install.sh script.
	* config/README (INSTALL): Remove.
	* config/delta88.mh (INSTALL): Remove.
	* config/i386v4.mh (INSTALL): Remove.
	* config/irix4.mh (INSTALL): Remove.
	* config/irix5.mh (INSTALL): Remove.
	* config/ncrt3000.mh (INSTALL): Remove.

Tue Oct 11 13:57:56 1994  Eric Youngdale  (eric@andante.aib.com)

	* elf32-i386.c (elf_i386_check_relocs): Make sure that a symbol
	with a global offset table entry or a procedure linkage table
	entry is added to the dynamic symbol table.
	* elf32-sparc.c (elf32_sparc_check_relocs): Likewise.
	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): If a symbol has
	already gotten a procedure linkage table entry, change the
	definition to the PLT entry.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.

Tue Oct 11 17:12:00 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* lynx-core.c (lynx_core_file_p): SPARC Lynx appears to start
	dumping the .data section in a core file at a page boundary.

Mon Oct 10 16:24:44 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* cofflink.c (_bfd_coff_final_link): Cast argument to bfd_h_put_32
	to correct type.
	(coff_read_string_table): Cast argument to bfd_h_get_32 to correct
	type.
	* elfcode.h (elf_link_output_extsym): Cast argument to
	bfd_elf_hash to correct type.

	* elf32-sparc.c (elf_sparc_howto_table): The PC10, PC22, and
	WPLT30 relocations are PC-relative.

Thu Oct  6 12:57:26 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* aoutx.h (adjust_o_magic): Correctly initialize vma if the vma of
	the text section was user-defined.

Wed Oct  5 14:42:12 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* archive.c (bfd_construct_extended_name_table): SVR4 uses slash
	newline at the end of the file name, not just newline.

Tue Oct  4 11:23:12 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ecoff.c (_bfd_ecoff_new_section_hook): Default section alignment
	power to 4, rather than using align_power_min.

	* coffcode.h (coff_new_section_hook): Don't use align_power_min;
	use COFF_DEFAULT_SECTION_ALIGNMENT_POWER instead.  Force the .stab
	and .stabstr sections to be aligned to no more than 2.  Remove
	COFF_SPARC special cases.
	* coff-a29k.c: Define COFF_DEFAULT_SECTION_ALIGNMENT_POWER.
	* coff-apollo.c, coff-go32.c, coff-h8300.c: Likewise.
	* coff-h8500.c, coff-i386.c, coff-i960.c, coff-m68k.c: Likewise.
	* coff-m88k.c, coff-rs6000.c, coff-sh.c, coff-sparc.c: Likewise.
	* coff-we32k.c, coff-z8k.c: Likewise.

	* configure.in: Use ${config_shell} when running config.bfd.

	* cofflink.c (coff_link_input_bfd): Don't try to convert a long
	filename if the offset field is zero.

	* elfcode.h (swap_out_syms): If the alignment of a common symbol
	was not set, use a sensible default rather than zero.

Mon Oct  3 16:04:29 1994  H.J. Lu (hjl@nynexst.com)

	* opncls.c (bfd_close): Honor umask when setting execution bits.
	(bfd_close_all_done): Likewise.

Mon Oct  3 04:41:49 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* rs6000-core.c (rs6000coff_core_p):  Set SEC_HAS_CONTENTS flag
	for .stack and .ldinfo sections. Cast coredata.c_tab to a
	file_ptr to avoid warnings from gcc.

Fri Sep 30 13:11:38 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_bfd_final_link): Remove assertion when a non
        SEC_IN_MEMORY section is found in dynobj.  This can happen when
	linking PIC compiled code.

Thu Sep 29 15:21:44 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* reloc.c (bfd_install_relocation): Change type of "data" to
	bfd_byte *, to go along with yesterday's change.

	* elf.c (bfd_elf_print_symbol): Moved here from elf_print_symbol
	in elfcode.h.  (case bfd_print_symbol_all): Print symbol's size
	field, except for common symbols; print their alignment.
	* elfcode.h (elf_print_symbol): Deleted.
	* libelf.h (bfd_elf_print_symbol): Declare.
	(bfd_elf{32,64}_print_symbol): Replace declarations with macros.

	* syms.c (bfd_print_symbol_vandf): Show BSF_LOCAL and BSF_GLOBAL
	in one column.  Use the column freed up to show BSF_FUNCTION and
	BSF_FILE.

Thu Sep 29 12:29:01 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* syms.c (stt): Add .rdata and .rodata.

Wed Sep 28 13:35:05 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* reloc.c (bfd_install_relocation): Cast data_start to bfd_byte *
	before trying to add values to it.

Tue Sep 27 16:47:58 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* elf32-hppa.c (elf32_hppa_backend_final_write_processing): Cast
	return value from elf_sym_extra.
	(elf32_hppa_build_stubs): Cast return value from bfd_zalloc.
	(elf32_hppa_size_stubs): Cast return value from malloc.

	* gen-aout.c (main): Declare and initialize "arch".

	* cofflink.c (coff_link_add_symbols): Cast return value of
	bfd_hash_allocate.

	* riscix.c (riscix_callback): Use PARAMS macro in prototype.

	* reloc.c (bfd_install_relocation): New function, mostly copied
	from bfd_perform_relocation, adjusted for the assembler's needs.
	* bfd-in2.h: Regenerated.

Mon Sep 26 11:00:14 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (assign_file_positions_except_relocs): Align the
	section VMA and the file position even if D_PAGED is not set.

	* bfd-in.h (bfd_seek): Change declaration to not mark fp const.
	* bfd-in2.h: Rebuild.
	* libbfd.c (bfd_seek): Don't mark parameters const, to avoid
	conflicts with declaration.

Fri Sep 23 15:15:31 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (map_program_segments): Don't abort if we allocated
	too much space for the program header, only if we allocated too
	little.
	(assign_file_positions_except_relocs): Similar change.

Tue Sep 20 13:17:07 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* libaout.h: Fix comment.
	* ns32knbsd.h: Changed M_NS32K_NETBSD to M_532_NETBSD to match
	  libaout.h.

Tue Sep 20 15:23:21 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* Makefile.in: Rebuilt dependencies.
	(BFD32_BACKENDS): Add sparcnetbsd.o.
	(CFILES): Add ns32knetbsd.c and sparcnetbsd.c.
	* targets.c: ns32knetbsd_vec was renamed to pc532netbsd_vec.

	* coff-sh.c (rtype2howto): Remove; unused.
	(coff_sh_relocate_section): Remove unused local variable rstat.
	(reloc_processing): Comment out; unused.

Fri Sep 16 12:12:27 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* aoutx.h (aout_link_write_other_symbol): If h->indx is -2, then
	always write it out even if it would normally be stripped.
	(aout_link_input_section_std): If we find a reloc against a
	stripped global symbol, force it to be written out rather than
	merely calling unattached_reloc.
	(aout_link_input_section_ext): Likewise.
	(aout_link_reloc_link_order): Likewise.

Wed Sep 14 15:37:19 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.h (struct somdata): New field sorted_syms.
	(obj_som_sorted_syms): Accessor macro.
	* som.c (som_object_setup): Initialize sorted_syms to NULL.
	(som_prep_for_fixups): Sort a copy of the BFD's symbol table;
	store the sorted symbol table in sorted_syms.
	(som_write_fixups): Initalize tmp_reloc to NULL to make GCC happy.
	(som_begin_writing): Similarly for exec_header.  Pass the sorted
	symbol table to som_write_symbol_strings.
	(som_build_and_write_symbol_table): Use the sorted symbols rather
	than the canonical symbol table.

	* som.h (som_symbol_type): Add "stringtab_offset" field.
	* som.c (som_write_symbol_strings): Use "stringtab_offset"
	rather than destroying the "name" field in the BFD symbol.
	(som_build_and_write_symbol_table): Likewise.

Wed Sep 14 15:06:55 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* aoutx.h (aout_link_write_symbols): Rename skip_indirect to
	skip_next.  If we find an N_WARNING symbol which has already been
	written out, set skip_next.

	* libecoff.h (struct ecoff_tdata): Add field find_buffer.
	* ecoff.c: Include aout/stab_gnu.h.
	(ecoff_find_nearest_line): Handle stabs debugging information.

	* elfcode.h (elf_link_output_extsym): Keep a symbol marked as weak
	even if it is referenced by another object.

Tue Sep 13 17:57:00 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_fixup_formats): Case R_ENTRY (0xb3), set both
	'T' and 'U' to grab all the unwind information.
	(som_set_reloc_info): Make 'U' unwind bits persist across
	multiple SOM relocations.  Set the addend field of an R_ENTRY
	relocation to the value in 'T'; set the addend field on an
	R_EXIT relocation to the value in 'U'.

	* som.h (som_symbol_type): Delete unwind field.

	* som.c (som_write_fixups): For R_ENTRY fixups, get 32bits of
	unwind information from the addend field of the R_ENTRY, get the
	other 32bits from the addend field of the R_EXIT.
	(bfd_som_attach_unwind_info): Delete function and all references.

	* som.h (som_symbol_type): Delete unused a.out-related fields.

	* som.c (bfd_section_from_som_symbol): Use bfd_abs_section_ptr
	instead of &bfd_abs_section.

	* som.c (som_object_setup): Handle exec_entry and exec_flags being
	switched in executables created by the OSF1 linker.
	(som_write_fixups): Handle R_EXIT just like the R_{F,L,R}SEL
	fixups.  Support R_ALT_ENTRY (handle just like R_EXIT).

Tue Sep 13 16:04:07 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* cofflink.c (coff_link_input_bfd): syment_base is unsigned
	so can't compare -ve numbers with it.

Mon Sep 12 20:31:17 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* configure.in (shcoff_vec): Use cofflink.o now.
	* coff-sh.c: Rewritten to use new fast coff backend.

Tue Sep 13 16:23:57 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* aoutx.h (NAME(aout,final_link)): Don't assume that all the input
        files are a.out.

Tue Sep 13 11:09:39 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* configure.host (sparc-*-netbsd): use sparcnbsd.
	  (ns32k-*-netbsd): use ns32knbsd.

	* hosts/{nbsd,i386nbsd,ns32knbsd,sparcnbsd}.h: New files, NetBSD
	  host support.

	* sparcnetbsd.c: New file, adds support for NetBSD/sparc.
	* config/sparc-nbsd.mt: Likewise.

	* netbsd.h: New file, definitions common to all netbsd ports.
	* i386netbsd.c: Use it.
        * ns32knetbsd.c: Use it.

	* Makefile.in, configure.in, targets.c, config/i386-nbsd.mt,
	  config/ns32k-nbsd.mt: canonicalize netbsd targets to conform to
	  file/variable naming conventions.
	* i386netbsd.c: New file, renamed from netbsd386.c.
	* ns32knetbsd.c: New file, renamed from netbsd532.c.
	
Mon Sep 12 21:56:20 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_reloc_skip): Correct off-by-one error for 4-byte
	R_NO_RELOCATION fixups.
	(bfd_section_from_som_symbol): Return the absolute section if the
	symbol isn't contained in any section in the output file.
	(som_slurp_symbol_table): ST_PRI_PROG and ST_SEC_PROG symbols are
	not function symbols (they are magic code labels which *can* be the
	targets of cross space branches).  $START$ is not a section symbol.

Mon Sep 12 11:43:08 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coff-alpha.c (ecoffalpha_little_vec): Add SEC_CODE and SEC_DATA
	to section_flags.
	* coff-mips.c (ecoff_little_vec, ecoff_big_vec): Likewise.

	* elfcode.h (swap_out_syms): Set the type of an undefined symbol
	to STT_FUNC if the BSF_FUNCTION flag is set.

	* cofflink.c (coff_link_input_bfd): If r_symndx is -1, don't
	change it.
	(_bfd_coff_generic_relocate_section): If r_symndx is -1, it is an
	absolute reloc.  Don't dump core using r_symndx as an array index.
	* cf-m68klynx.c (coff_bfd_link_add_symbols): Define.
	(lynx_link_add_symbols): New static function (copy of function in
	coff-i386.c).
	(coff_m68k_lynxrtype_to_howto): sym argument may be NULL.
	* coff-i386.c (coff_i386_rtype_to_howto): Likewise.
	* coff-a29k.c (coff_a29k_relocate_section): Handle an r_symndx
	value of -1, meaning an absolute reloc.

	* ctor.c: Remove; obsolete.
	* Makefile.in: Rebuild dependencies.
	(BFD_LIBS): Remove ctor.o.
	(CFILES): Remove ctor.c.
	* libbfd.h: Rebuild.

Mon Sep 12 01:58:47 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_relocate_section): If there was a link
	error of some sort (for example, undefined symbols), then do not
	apply any relocs, just notify the user of the errors.
	(elf32_hppa_backend_begin_write_processing): Do not build a symbol
	extension section for an executable (it's useless).
	(elf32_hppa_link_output_symbol_hook): Do nothing if there was a
	link error of some sort (for example, undefined symbols).
	(elf32_hppa_read_symext_info): Kludge.  Turn off SEC_HAS_CONTENTS
	for all the input symbol extension sections to keep the generic
	BFD code happy.  Temporarily turn it on to read the contents of
	the symbol extension section.

Sun Sep 11 21:58:59 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/hppaosf.mh (RANLIB): Do not set.
	* config/hppabsd.mh (RANLIB): Likewise.

Sun Sep 11 22:50:49 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* cf-i386lynx.c: Remove #if 0 code.
	(i386_lynxos_coff_object_p): Remove unused function.
	(coff_bfd_link_add_symbols): Define.
	(lynx_link_add_symbols): New static function.
	* coffcode.h (coff_bfd_link_hash_table_create): If
	coff_relocate_section is defined, only define this if not already
	defined.
	(coff_bfd_link_add_symbols, coff_bfd_final_link): Likewise.

	* linker.c (_bfd_generic_final_link): Handle
	bfd_indirect_link_order explicitly, rather than via
	_bfd_default_link_order.
	(set_symbol_from_hash): New static function, broken out of
	_bfd_generic_link_write_global_symbol.
	(_bfd_generic_link_write_global_symbol): Symbol setting code moved
	to set_symbol_from_hash; call it.
	(default_indirect_link_order): Add generic_linker argument.
	Change all callers.  If false, set the generic symbols based on
	the hash table entries.

Fri Sep  9 11:51:49 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coffgen.c (coff_get_symtab): Reindented.  Removed commented out
	call to bfd_constructor_entry.

	Convert m68k COFF to use new COFF backend linker.
	* coff-m68k.c (coff_relocate_section): Define.
	* cf-m68klynx.c (coff_rtype_to_howto): Define.
	(coff_m68k_lynx_rtype_to_howto): New static function.
	* configure.in (m68kcoff_vec): Build cofflink.o.
	(m68kcoffun_vec, m68klynx_coff_vec): Likewise.

Thu Sep  8 16:20:38 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coff-h8300.c (h8300_reloc16_extra_cases, case RELBYTE): Flag
	overflows correctly.

Wed Sep  7 19:01:42 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* libelf.h (struct elf_backend_data): Change second argument of
	elf_backend_final_write_processing hook to boolean.
	(struct elf_obj_tdata): Add linker field.
	* elfcode.h (NAME(bfd_elf,write_object_contents)): Pass value of
	tdata linker field to final_write_processing, rather than NULL.
	(elf_bfd_final_link): Don't call final_write_processing hook.  Set
	tdata linker field to true.
	* elf32-mips.c (mips_elf_final_write_processing): Change type of
	second argument to boolean.
	* elf32-hppa.c (elf32_hppa_backend_final_write_processing):
	Likewise.

	* coff-go32.c (RTYPE2HOWTO): Fully parenthesize arguments.
	* coff-i960.c (RTYPE2HOWTO): Likewise.
	* coff-m88k.c (RTYPE2HOWTO): Likewise.
	* coff-we32k.c (RTYPE2HOWTO): Likewise.

	Make i386 COFF use new COFF backend linker.
	* coff-i386.c (RTYPE2HOWTO): Fully parenthesize arguments.
	(coff_relocate_section): Define.
	(coff_i386_rtype_to_howto): New function.
	* configure.in (i386coff_vec): Use cofflink.o.
	(i386lynx_coff_vec): Likewise.

	* coffcode.h (bfd_coff_backend_data): Add new field
	_bfd_coff_rtype_to_howto.
	(bfd_coff_rtype_to_howto): Define.
	(coff_rtype_to_howto): Define to use RTYPE2HOWTO, if not already
	defined.
	(bfd_coff_std_swap_table): Initialize new field.
	* cofflink.c (_bfd_coff_final_link): Allocate section_count + 1
	section_info structures, since the target_index is 1 based.
	(coff_link_input_bfd): Set *secpp to bfd_com_section_ptr for a
	common symbol.  Adjust rel_hash by the output reloc count.
	(_bfd_coff_generic_relocate_section): New function.
	* libcoff-in.h (_bfd_coff_generic_relocate_section): Declare.
	* libcoff.h: Rebuild.
	* coff-alpha.c (alpha_ecoff_backend_data): Initialize new field.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.

Tue Sep  6 23:28:52 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_derive_misc_symbol_info): Treat undefined code
	symbols and undefined symbols which no type in the same manner
	if the associated BFD symbol has BSF_FUNCTION set.  For a defined
	symbol which no type, select a SOM type based on the flags of the
	section containing the symbol.
	(som_slurp_symbol_type): Set BSF_FUNCTION for undefined ST_STUB
	or ST_CODE symbols (importing a non-function code symbol is
	meaningless in SOM).
	(som_set_reloc_info): Don't set "offset" to the section's vma; it
	should always start at zero.

Tue Sep  6 14:51:11 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	Add new style linker support to COFF backend.  a29k only for now.
	* cofflink.c: New file.
	* libcoff-in.h: Include bfdlink.h.
	(obj_coff_external_syms, obj_coff_strings): Define accessor macro.
	(obj_coff_sym_hashes): Define accessor macro.
	(struct coff_tdata): Add fields external_syms, strings, and
	sym_hashes.
	(struct coff_link_hash_entry): Define.
	(struct coff_link_hash_table): Define.
	(coff_link_hash_lookup, coff_link_hash_traverse): Define.
	(coff_hash_table): Define.
	(_bfd_coff_link_hash_table_create): Declare.
	(_bfd_coff_link_add_symbols, _bfd_coff_final_link): Declare.
	* coffcode.h (bfd_coff_backend_data): Add fields _bfd_relsz,
	_bfd_coff_swap_reloc_in, _bfd_coff_sym_is_global,
	_bfd_coff_compute_section_file_positions,
	_bfd_coff_relocate_section.
	(bfd_coff_relsz, bfd_coff_swap_reloc_in): Define.
	(bfd_coff_sym_is_global): Define.
	(bfd_coff_compute_section_file_positions): Define.
	(bfd_coff_relocate_section): Define.
	(coff_mkobject_hook): Initialize obj_raw_syment_count and
	obj_conv_table_size.
	(coff_compute_section_file_positions): Set target_index of all
	sections.  Set output_has_begun field.
	(coff_write_object_contents): Don't set target_index; now done by
	coff_compute_section_file_positions.  Remove obsolete handling of
	scn_base and data_base.  Don't bother to check that target_index
	is positive, since it always is.  Remove use of pad, which is
	always zero.  Check obj_raw_syment_count, not bfd_get_symcount,
	for the number of symbols, but only write them out if
	bfd_get_symcount is non-zero.  Don't check obj_raw_syment_count
	until after coff_write_symbols is called.
	(coff_slurp_symbol_table): Use obj_raw_syment_count, not
	bfd_get_symcount for the number of symbols.  Don't set
	obj_conv_table_size.
	(coff_sym_is_global): New static function or macro.
	(coff_slurp_reloc_table): Call coff_swap_reloc_in, not
	bfd_swap_reloc_in.
	(coff_bfd_link_hash_table_create): If coff_relocate_section is
	defined, define as _bfd_coff_link_hash_table_create.
	(coff_bfd_link_add_symbols): Similar change.
	(coff_bfd_final_link): Similar change.
	(coff_relocate_section): Define as NULL if not defined.
	(bfd_coff_std_swap_table): Initialize new fields.
	* coffgen.c (coff_real_object_p): Don't set obj_raw_syment_count
	and obj_conv_table_size here.
	(coff_count_linenumbers): Reindent.  If bfd_get_symcount is zero,
	add up the line numbers from the sections.
	(coff_write_symbols): Set obj_raw_syment_count, not
	bfd_get_symcount.
	(coff_pointerize_aux): Don't pointerize a nonpositive x_endndx
	field.
	(coff_get_normalized_symtab): Use obj_raw_syment_count, not
	bfd_get_symcount.
	(coff_print_symbol): If auxp->fix_end, print x_endndx value.
	* coffswap.h (coff_swap_reloc_in): Rename from bfd_swap_reloc_in.
	Reindent.  Change argument type to  PTR.
	* coff-a29k.c (coff_a29k_relocate_section): New static function.
	(coff_relocate_section): Define.
	* configure.in (a29kcoff_big_vec): Compile cofflink.o.
	* coff-alpha.c (alpha_ecoff_backend_data): Initialize new fields.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.
	* libcoff.h: Rebuilt.
	* Makefile.in: Rebuilt dependencies.
	(BFD32_BACKENDS): Add cofflink.o.
	(CFILES): Add cofflink.c.

Tue Sep  6 14:00:45 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* coffgen.c (coff_print_symbol, case bfd_symbol_print_all): Check
	for section symbol, and print its aux fields with appropriate
	labels.

	* Makefile.in (ALL_MACHINES): Added cpu-arm.o.

Sun Sep 04 17:58:10 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* aoutx.h (NAME(aout,machine_type)): Recognize the ARM processor.
	* archures.c, config.bfd, configure.host, libaout.h, reloc.c,
	targets.c: Add support for the ARM.
	* cpu-arm.c, riscix.c, config/riscix.mh, config/riscix.mt: New files.

	* aoutx.h (add_to_stringtable): Check that str isn't a NULL pointer.

Fri Sep  2 14:10:30 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* reloc.c (enum bfd_reloc_code_real): Rewrote definition to use
	new "chew" commands for simultaneous definition of enumerator and
	enumerator name table.
	(bfd_get_reloc_code_name): New function, for retrieving a symbolic
	name associated with an enumerator.
	* libbfd.h, bfd-in2.h: Regenerated.

Tue Aug 30 21:24:54 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_write_fixups, case R_ENTRY): Handle case where no
	unwind descriptor information is available.

Tue Aug 30 11:43:30 1994  Eric Youngdale  (ericy@cais.cais.com)

	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add soname
	argument, and use it to set DT_SONAME dynamic entry.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
	(bfd_elf64_size_dynamic_sections): Update prototype.
	* bfd-in2.h: Rebuilt.

Fri Aug 26 15:47:57 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coffgen.c (coff_real_object_p): Set obj_raw_syment_count.
	(coff_get_normalized_symtab): Verify obj_raw_syment_count, rather
	than setting it.

Thu Aug 25 10:44:53 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* archive.c (bsd_write_armap): Remove host dependencies.

	* aoutx.h (add_to_stringtab): Check for _bfd_stringtab_add error
	before adding BYTES_IN_WORD.

	* coffgen.c (coff_find_nearest_line): Look for the best C_FILE,
	not merely the first.

	* coffgen.c (coff_write_alien_symbol): If we are not using the
	symbol, clear the name so that it is not put in the string table.
	From Antti.Miettinen@ntc.nokia.com.

Wed Aug 24 11:49:19 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coffgen.c (coff_print_symbol): Cast pointer different to long
	and use %ld to print it.
	* osf-core.c (osf_core_core_file_p): Remove unused variable
	dseccnt.
	* ecoffswap.h (ecoff_swap_ext_out): If ECOFF_64, clear remaining
	bytes in bits2.

	* configure.host, config.bfd: Change i[34]86 to i[345]86.
	* coffgen.c (coff_real_object_p): Set obj_conv_table_size here,
	rather than waiting until coff_slurp_symbol_table.
	(coff_write_alien_symbol): Just ignore BSF_DEBUGGING symbols.
	From Antti.Miettinen@ntc.nokia.com.

	* section.c (bfd_make_section_anyway): Fix failure check of
	bfd_make_empty_symbol.  From Antti.Miettinen@ntc.nokia.com.

	* aoutx.h (translate_to_native_sym_flags): Use the output_section
	(and output_offset) if there is one.

	* aoutx.h (aout_link_check_archive_element): Discard the symbols
	if the archive element was not needed.

	* aoutx.h (aout_get_external_symbols): Ensure that a zero string
	index yields an empty string.
	(aout_link_write_symbols): If info->keep_memory is false, use name
	from original hash table entry, not from entry in *sym_hash.

	* aoutx.h (struct aout_final_link_info): Add fields contents,
	relocs, symbol_map and output_syms.
	(NAME(aout,final_link)): Work out the largest section size, reloc
	size, and number of symbols.  Use them to preallocate buffers that
	are large enough for all cases.
	(aout_link_input_bfd): Use preallocated symbol_map.
	(aout_link_write_symbols): Remove symbol_map argument; use
	preallocated symbol_map instead.  Change all callers.  Use
	preallocated output_syms.
	(aout_link_input_section): Remove symbol_map argument.  Change all
	callers.  Use preallocated contents and relocs.
	(aout_link_input_section_std): Remove symbol_map argument; use
	preallocated symbol_map instead.  Change all callers.
	(aout_link_input_section_ext): Likewise.

Tue Aug 23 10:51:09 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* archive.c (_bfd_write_archive_contents): Don't update the
	symbol map timestamp if there is no symbol map.  From
	schwab@issan.informatik.uni-dortmund.de (Andreas Schwab).

Mon Aug 22 12:26:42 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* targets.c (BFD_JUMP_TABLE_ARCHIVE): Add _update_armap_timestamp.
	(bfd_target): Add field _bfd_update_armap_timestamp.
	* bfd.c (bfd_update_armap_timestamp): Define.
	* bfd-in2.h: Rebuilt.
	* libbfd-in.h (_bfd_noarchive_update_armap_timestamp): Define.
	(_bfd_archive_bsd_update_armap_timestamp): Declare.
	(_bfd_archive_coff_update_armap_timestamp): Define.
	* libbfd.h: Rebuilt.
	* archive.c (_bfd_write_archive_contents): Call
	bfd_update_armap_timestamp instead of checking for a BSD archive
	and calling bsd_update_armap_timestamp.
	(_bfd_archive_bsd_update_armap_timestamp): Rename from
	_bsd_update_armap_timestamp.  Don't assume that armap_datepos is
	already set.
	* aout-target.h (MY_update_armap_timestamp): Define if not already
	defined.
	* coff-rs6000.c (rs6000coff_update_armap_timestamp): Define.
	* ieee.c (ieee_update_armap_timestamp): Define.
	* libecoff.h (_bfd_ecoff_update_armap_timestamp): Define.
	* oasys.c (oasys_update_armap_timestamp): Define.
	* som.c (som_update_armap_timestamp): Define.

	* hash.c: Copy string hash functions from aoutx.h.
	* aoutx.h: String hash functions moved to hash.c.  Retain
	simplified versions of add_to_stringtab and emit_stringtab.
	Change all callers to use new function and structure names.
	* libbfd-in.h (_bfd_stringtab_init, _bfd_stringtab_free): Declare.
	(_bfd_stringtab_size, _bfd_stringtab_add): Declare.
	(_bfd_stringtab_emit): Declare.
	* libbfd.h: Rebuilt.

Mon Aug 22 10:49:37 1994  Eric Youngdale  (ericy@cais.cais.com)

	* i386linux.c (linux_add_one_symbol): Create a fixup for any
	defined absolute symbol, not just GOT or PLT symbols.
	(linux_tally_symbols): Correct handling of references to defined
	symbols.

Thu Aug 18 16:29:57 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	Get ld -x -r to handle a.out set symbols correctly.
	* aoutx.h (adjust_o_magic): If the .bss VMA was set outside of
	BFD, pad the .data section up to the VMA of the .bss section.
	(aout_link_add_symbols): If a set symbol does not get modified,
	treat it as a local symbol.
	(aout_link_write_symbols): Set the value of set symbols
	correctly.  Don't discard set symbols even if discarding local
	symbols.
	(aout_link_write_other_symbol): Don't abort on bfd_link_hash_new,
	since it can now happen for set symbols.

	* elfcode.h (elf_fake_sections): Just check for ".rela" and
	".rel", not ".rela." and ".rel."; make this work by checking
	use_rela_p.
	* elf32-i386.c (elf_i386_check_relocs): Just check for ".rel", not
	".rel."
	(elf_i386_size_dynamic_sections): Likewise.
	(elf_i386_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_check_relocs): Just check for
	".rela", not ".rela."
	(elf32_sparc_size_dynamic_sections): Likewise.
	(elf32_sparc_relocate_section): Likewise.

Wed Aug 17 16:54:18 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* linker.c (_bfd_generic_link_add_archive_symbols): Initialize
	PASS to the old value + 1.

	* coffgen.c (coff_get_normalized_symtab): If a C_FILE symbol has
	no aux entries, use the symbol name as the file name.
	(coff_find_nearest_line): Look for the right C_FILE symbol, rather
	than always using the first one.  If there is a debugging symbol
	after a function symbol, skip it.  Add the section VMA to the line
	offset, since it was subtracted out in coff_slurp_line_table.

Tue Aug 16 16:53:00 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_prep_headers): If writing some form of an executable,
	allocate and attach an exec header to the BFD private data.
	(som_begin_writing): Don't fill fields of the exec header based
	on BFD private data here (like the exec flags).  Do not write
	the exec header here.
	(som_write_headers): Instead do it here.
	* som.h (struct somdata): New field "exec_hdr" for the executable
	file header.
	(obj_som_exec_hdr): New accessor macro.

Tue Aug 16 00:12:31 1994  Eric Youngdale  (ericy@cais.cais.com)

	* i386linux.c (linux_link_create_dynamic_sections): Create section
	named .linux-dynamic, not .dynamic.
	(linux_add_one_symbol): Use .linux-dynamic, not .dynamic.
	(bfd_linux_size_dynamic_sections): Likewise.
	(linux_finish_dynamic_link): Likewise.

Mon Aug 15 12:16:56 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coffgen.c (STRING_SIZE_SIZE): Define.
	(coff_fix_symbol_name): Use STRING_SIZE_SIZE, not 4.
	(coff_write_symbols, build_string_table): Likewise.
	(coff_get_normalized_symtab): Likewise.

	* libcoff-in.h (obj_symbol_slew): Don't define.
	(struct coff_tdata): Remove unused fields index_slew, raw_linenos,
	and flags.
	* libcoff.h: Rebuilt.
	* coffcode.h (coff_mkobject): Don't initialize raw_linenos.
	(coff_mkobject_hook): Don't initialize flags.

	* aout-target.h (MY_zmagic_contiguous): Define as 0 if not already
	defined.
	(MY(backend_data)): Use MY_zmagic_contiguous, not hardcoded 0.
	* i386linux.c (MY_zmagic_contiguous): Define.

	* elfcode.h (bfd_section_from_shdr): If a SHT_SYMTAB section in a
	shared object has SHF_ALLOC set, create a BFD section for it.
	(elf_section_from_bfd_section): There may be a BFD section for a
	SHT_SYMTAB section.

	* coffcode.h (styp_to_sec_flags): Add name argument.  If no flags
	are recognized, chose section flags based on the name.
	(bfd_coff_backend_data): _bfd_styp_to_sec_flags_hook field: Add
	name argument.
	(bfd_coff_styp_to_sec_flags_hook): Add name argument.
	(coff_compute_section_file_positions): Don't adjust the section
	position by COFF_PAGE_SIZE unless SEC_ALLOC is set.
	* libcoff.h: Rebuilt.
	* coffgen.c (make_a_section_from_file): Pass section name to
	bfd_coff_styp_to_sec_flags_hook.
	* ecoff.c (_bfd_ecoff_styp_to_sec_flags): Add unused name
	argument.
	* libecoff.h (_bfd_ecoff_styp_to_sec_flags): Add name argument to
	prototype.

Fri Aug 12 11:22:40 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (section_from_elf_index): Correct check for invalid
	section index.

	* elfcode.h (elf_link_add_object_symbols): If there is no symbol
	table, try using the dynamic symbol table.  From Eric Youngdale
	<ericy@cais.cais.com>.

	* configure.host (sparc-*-solaris2*): Use solaris2, not sysv4.
	The linker depends upon configuring for solaris2.
	* hosts/solaris2.h: New file; include hosts/sysv4.h.
	* config/solaris2.mh: New file; copy of config/sysv4.mh.

Wed Aug 10 13:09:38 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* aoutx.h (adjust_z_magic): Make sure data section is padded to
	page boundary when the VMA is set by the calling program.  From
	Eric Youngdale <ericy@cais.cais.com>.

Mon Aug  8 17:18:49 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Update to ns32k support, from Ian Dall (dall@hfrd.dsto.gov.au).
	* aout-ns32k.c: Add declarations that were in aout-ns32k.h, change
	declarations to traditional form.
	(MY_reloc_howto, MY_put_reloc): Change from macro to function.
	(ns32k_relocate_contents): New function.
	* aout-ns32k.h: Remove.
	* cpu-ns32k.c: Add declarations that were in aout-ns32k.h, change
	declarations to traditional form.
	(ns32k_final_link_relocate): Call ns32k_relocate_contents.
	* netbsd532.c: Reformat to standards, add copyright notice.
	(ARCH): Don't define.
	(aout-ns32k.h): Don't include.
	* pc532-mach.c: Ditto.

Mon Aug  8 17:55:52 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coff-i960.c (coff_i960_relocate): Don't try to convert relocs
	against common symbols.

Sat Aug  6 22:27:30 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* irix-core.c (irix_core_core_file_p):  Ignore sections that
	are not contained in the core file.

Thu Aug  4 11:32:23 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coff-m68k.c (m68k_reloc_type_lookup): New function.
	(coff_bfd_reloc_type_lookup): Define.
	* cf-m68klynx.c (_bfd_m68kcoff_reloc_type_lookup): Define.

	* elfcode.h (elf_bfd_final_link): Force the vma of sections which
	do not have SEC_ALLOC set to be 0.  This is needed to handle
	relocs against debugging sections.

Wed Aug  3 16:45:41 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coff-i960.c (coff_i960_relocate): Rewrote to change relocs
	against locally defined symbols into relocs against section
	symbols, for VxWorks 5.1.

Wed Aug  3 10:34:37 1994  Eric Youngdale  (ericy@cais.cais.com)

	* i386linux.c (linux_add_one_symbol): Only handle
	SHARABLE_CONFLICTS specially if BSF_CONSTRUCTOR is set.  Set hashp
	for a GOT or PLT symbol.  Set jump field of fixup for a PLT symbol.
	(linux_tally_symbols): Check section of real symbol.  When looking
	for a builtin fixup, check builtin and jump flags.  Create no more
	than one fixup, and always create one if the real symbol is in the
	absolute section.  Only strip absolute symbols.

Wed Aug  3 05:08:24 1994  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* coffcode.h (coff_write_object_contents): set internal_a.magic to
	LYNXCOFFMAGIC whenever 68k, SPARC or i386 LynxOS
	(yes, they have the same magic number!)

Tue Aug  2 10:43:21 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* hp300hpux.c (BMAGIC): Define as HPUX_DOT_O_MAGIC, to make test
	in aoutx.h work correctly.

	* coff-i960.c (coff_i960_relocate): New function.
	(howto_rellong, howto_iprmed): Use it as special_function.

	* libbfd-in.h: Move declarations of bfd_read, bfd_write, bfd_seek,
	bfd_tell, bfd_flush, and bfd_stat from here...
	* bfd-in.h: ...to here, to make them visible to programs which
	know more about the object file format than BFD does.
	* libbfd.h, bfd-in2.h: Rebuilt.

Mon Aug  1 17:55:53 1994  Fred Fish  (fnf@cygnus.com)

	* ptrace-core.c (ptrace_unix_core_file_p):  Convert zalloc usage
	to bfd_zalloc.

Mon Aug  1 12:04:40 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elf64-sparc.c (ELF_MAXPAGESIZE): Define.

	ELF linker patches from Eric Youngdale <ericy@cais.cais.com>.
	* elfcode.h (elf_link_create_dynamic_sections): Set type of
	_DYNAMIC to STT_OBJECT.
	(NAME(bfd_elf,record_link_assignment)): Always create hash table
	entry.  Set type to STT_OBJECT.
	(elf_link_output_extsym): Don't set type of weak defined symbol to
	STB_WEAK if symbol was referenced.
	(map_program_segments): Check DYNAMIC as well as EXEC_P.
	(assign_file_positions_except_relocs): Likewise.
	* elf32-i386.c (elf_i386_create_dynamic_sections): Set type of
	_GLOBAL_OFFSET_TABLE to STT_OBJECT.
	(elf_i386_check_relocs): Ignore local PLT32 relocs.
	(elf_i386_relocate_section): Treat local PLT32 relocs as PC32.

	* elfcode.h (elf_adjust_dynamic_symbol): Correct weak symbol
	handling again.

	* elfcode.h (elf_slurp_reloc_table): Don't try to read the relocs
	if there aren't any.

	* configure.host (sparc-*-solaris2*): Use sysv4, not solaris2.
	* hosts/solaris2.h: Remove.
	* config/solaris2.mh: Remove.

Sun Jul 31 14:27:04 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c, elf32-hppa.h: Update comment reflecting which
	HPPA ELF spec the code implements.

Tue Jul 26 17:38:01 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* cpu-i960.c (MAX_ARCH): New macro.
	(compatible): Use it in computing array bounds.  Put comma after
	last entry in array, for regularity.
	(arch_info_struct): Adjust spacing for easier reading.

	* coff-i960.c (howto_rellong, howto_iprmed, howto_optcall): Use
	HOWTO macro.

	* cpu-i960.c (JX): Define as bfd_mach_i960_jx.
	(scan_960_mach): Recognize jx machine.
	(MAX_ARCH): Define to be JX.
	(compatible): Add JX row to array.
	(arch_info_struct): Add JX entry.

	* archures.c (bfd_mach_i960_jx): New macro.
	* bfd-in2.h: Regenerated.

	* coffcode.h (coff_set_arch_mach_hook): For F_I960JX, set machine
	to bfd_mach_i960_jx.
	(coff_set_flags): For bfd_mach_i960_jx, set F_I960JX.

Tue Jul 26 11:04:00 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (elf_adjust_dynamic_symbol): When handling a weak
	symbol, correct check to see whether the equivalent normal symbol
	was referenced.

	Add support for creating shared libraries under i386 ELF and SPARC
	ELF.  Based on patches by Eric Youngdale <ericy@cais.cais.com>.
	* libelf.h (struct elf_link_hash_entry): Remove copy_offset field.
	Add got_offset and plt_offset fields.
	(ELF_LINK_HASH_REF_DYNAMIC_MULTIPLE): Don't define.
	(ELF_LINK_HASH_DEF_DYNAMIC_MULTIPLE): Don't define.
	(ELF_LINK_HASH_NEEDS_COPY): Define.
	(struct elf_backend_data): Add check_relocs field.
	(struct bfd_elf_section_data): Change relocs from PTR to
	Elf_Internal_Rela *.
	(struct elf_obj_tdata): Add local_got_offsets field.
	(elf_local_got_offsets): Define accessor macro.
	(bfd_elf32_link_create_dynamic_sections): Declare.
	(bfd_elf32_link_record_dynamic_symbol): Declare.
	(bfd_elf64_link_create_dynamic_sections): Declare.
	(bfd_elf64_link_record_dynamic_symbol): Declare.
	* elfcode.h (elf_slurp_reloc_table): Don't use the section data
	relocs field.
	(elf_link_record_dynamic_symbol): Make globally visible.  Use
	macro to rename to NAME(bfd_elf,link_record_dynamic_symbol).
	(elf_link_add_object_symbols): If creating a shared library, put
	make all local symbols dynamic.  Don't bother with the
	DYNAMIC_MULTIPLE flags.  Call the check_relocs backend function if
	it is defined.
	(elf_link_create_dynamic_sections): Make globally visible.  Use
	macro to rename to NAME(bfd_elf,link_create_dynamic_sections).  If
	creating a shared library, make sure that _DYNAMIC is added as a
	dynamic symbol.
	(elf_link_read_relocs): New function.
	(NAME(bfd_elf,record_link_assignment)): If creating a shared
	library, always create symbols, and always make them dynamic.
	(elf_bfd_final_link): Permit creation of shared libraries.
	(elf_link_input_bfd): Use elf_link_read_relocs to get the relocs.
	* elf.c (_bfd_elf_link_hash_newfunc): Don't initialize
	copy_offset.  Initialize got_offset and plt_offset.
	* elf32-target.h (elf_backend_check_relocs): Define as 0 if not
	defined.
	(elf32_bed): Initialize check_relocs field.
	* elf64-target.h (elf_backend_check_relocs): Define as 0 if not
	defined.
	(elf64_bed): Initialize check_relocs field.
	* elf32-i386.c (elf_howto_table): Change R_386_PLT32 and
	R_386_GOTPC to be pc_relative and pcrel_offset.
	(elf_i386_pic_plt0_entry): Define.
	(elf_i386_pic_plt_entry): Define.
	(elf_i386_create_dynamic_sections): Create a .got.plt section, and
	define _GLOBAL_OFFSET_TABLE_ at the start of it.  If creating a
	shared library, make sure that _GLOBAL_OFFSET_TABLE_ is added as a
	dynamic symbol.  Don't create .rel.bss if creating a shared
	library.
	(elf_i386_check_relocs): New function.
	(elf_i386_adjust_dynamic_symbol): Don't make a PLT entry if the
	symbol already has one.  When making a PLT entry, set plt_offset.
	Don't create a copy reloc when creating a shared library.  Don't
	set copy_offset, just set ELF_LINK_HASH_NEEDS_COPY.
	(elf_i386_allocate_dynamic_section): Remove.
	(elf_i386_size_dynamic_sections): Look through all the sections
	rather than assuming we know their names.  Remove any empty reloc
	or plt sections.  Only add a DT_DEBUG entry if not creating a
	shared library.  Only add a DT_PLTGOT entry if there is a PLT.
	Add a DT_TEXTREL entry if required.
	(elf_i386_relocate_section): Permit undefined symbols when
	creating a shared library.  Handle the special relocation types
	specially.
	(elf_i386_finish_dynamic_symbol): Create a PLT entry if plt_offset
	is set.  If creating a shared library, produce a PIC PLT entry.
	Only mark a PLT symbol as undefined if it was not defined by a
	regular object file.  Create a GOT entry if got_offset is set.
	Create a copy reloc if ELF_LINK_HASH_NEEDS_COPY is set.
	(elf_i386_finish_dynamic_sections): Change the handling of
	DT_RELSZ to simply subtract out the size of .rel.plt.  If creating
	a shared library, produce PIC PLT code.
	(elf_backend_check_relocs): Define.
	* elf32-sparc.c (elf_sparc_howto_table): Change R_SPARC_GOT10,
	R_SPARC_GOT22, and R_SPARC_PC10 to not warn about reloc overflow.
	(elf32_sparc_create_dynamic_sections): If creating a shared
	library, make sure that _GLOBAL_OFFSET_TABLE_ is added as a
        dynamic symbol, and set the type to STT_OBJECT.  Likewise for
        _PROCEDURE_LINKAGE_TABLE_.  Don't create .rel.bss if creating a
        shared library.
	(elf32_sparc_check_relocs): New function.
	(elf32_sparc_adjust_dynamic_symbol): Don't make a PLT entry if the
	symbol already has one.  When making a PLT entry, set plt_offset.
	Don't create a copy reloc when creating a shared library.  Don't
	set copy_offset, just set ELF_LINK_HASH_NEEDS_COPY.
	(elf32_sparc_allocate_dynamic_section): Remove.
	(elf32_sparc_size_dynamic_sections): Look through all the sections
	rather than assuming we know their names.  Only add a DT_DEBUG
	entry if not creating a shared library.  Add a DT_TEXTREL entry if
	required.
	(elf32_sparc_relocate_section): Permit undefined symbols when
	creating a shared library.  Handle the special relocation types
	specially.
	(elf32_sparc_finish_dynamic_symbol): Create a PLT entry if plt_offset
	is set.  Only mark a PLT symbol as undefined if it was not defined
	by a regular object file.  Create a GOT entry if got_offset is
	set.  Create a copy reloc if ELF_LINK_HASH_NEEDS_COPY is set.
	(elf32_sparc_finish_dynamic_sections): Store dynobj in a local
	variable.
	(elf_backend_check_relocs): Define.

Mon Jul 25 12:21:07 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* configure.in (pc532mach_vec): Change to pc532machaout_vec.
	* config.bfd (ns32k-*-netbsd*): Use ns32k-nbsd as bfd_name.
	* Makefile.in (ALL_MACHINES): Add cpu-ns32k.o.
	(BFD32_BACKENDS): Add aout-ns32k.o, netbsd532.o, m88kmach3.o,
	pc532-mach.o.
	* targets.c (pc532machaout_vec): Use instead of pc532mach_vec.
	* config/pc532-mach.mt (DEFAULT_VECTOR): Ditto.
	(SELECT_VECS): Remove.
	* config/ns32k-nbsd.mt: New file, was ns32k-netbsd.mt.
	* config/ns32k-netbsd.mt: Remove, name too long.

Fri Jul 22 11:07:14 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* linker.c (generic_link_check_archive_element): When changing a
	symbol to common, set the alignment.
	(_bfd_generic_link_add_one_symbol): When creating a common symbol,
	set the alignment.
	* aoutx.h (aout_link_check_ar_symbols): When changing a symbol to
	common, set the alignment.
	(aout_link_add_symbols): Restrict the alignment of a common symbol
	to the alignment power given by the architecture.
	* libelf.h (struct elf_link_hash_entry): Remove align field.  Add
	copy_offset field.
	* elfcode.h (elf_link_add_object_symbols): Store alignment in
	new bfd_link_hash_entry field, not in elf_link_hash_entry field.
	(elf_link_output_extsym): Similar change when getting alignment.
	* elf.c (_bfd_elf_link_hash_newfunc): Don't initialize align.  Do
	initialize copy_offset.
	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Use copy_offset
	field rather than align field.  Get alignment using bfd_log2
	rather than switch.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
	* elf32-i386.c (elf_i386_finish_dynamic_symbol): Use copy_offset,
	not align.
	* elf32-sparc.c (elf32_sparc_finish_dynamic_symbol): Likewise.

	* aoutx.h (NAME(aout,some_aout_object_p)): Just check
	STAT_FOR_EXEC, don't check MACH.
	* m88kmach3.c (MACH): Don't define.
	* config/i386-mach3.mt (TDEFINES): Define STAT_FOR_EXEC.
	* config/m88k-mach3.mt (TDEFINES): Likewise.
	* config/mips-mach3.mt (TDEFINES): Likewise.

Thu Jul 21 17:24:31 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* i386mach3.c: Reverted to version from before Jul 5 1994 changes.

Thu Jul 21 12:26:01 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* reloc.c (struct reloc_howto_struct): Remove special_function1.
	It's the wrong way to do things.
	(HOWTO): Change accordingly.
	(HOWTO2): Remove.
	(_bfd_final_link_relocate): Remove references to
	special_function1.
	* bfd-in2.h: Rebuilt.
	* aoutx.h (aout_link_input_section_std): Remove references to
	special_function1.
	(aout_link_reloc_link_order): Likewise.

Wed Jul 20 15:46:44 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add rpath
	argument.  If it is not NULL, use it to set DT_RPATH.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
	(bfd_elf64_size_dynamic_sections): Likewise.
	* bfd-in2.h: Rebuilt.

Sat Jul 16 21:10:39 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (elf_get_dynamic_symtab_upper_bound): If there is no
	dynamic symtab, return error.

	* libelf.h (ELF_LINK_HASH_DEFINED_WEAK): Define.
	* elfcode.h (elf_link_add_object_symbols): If symbol is defined as
	weak, set ELF_LINK_HASH_DEFINED_WEAK.
	(elf_link_output_extsym): If symbol is defined as weak, mark it
	STB_WEAK.

	* libelf.h (struct bfd_elf_section_data): Add relocs field.
	(shdr_name): Remove; unused.
	* elfcode.h (elf_slurp_reloc_table): Rewrote to handle both REL
	and RELA relocs.  Free up the unswapped relocs.  Permit the relocs
	to be cached in the section_data.  Correct the reloc address.
	(elf_slurp_reloca_table): Remove.
	(elf_canonicalize_reloc): Rewrote.
	(elf_link_input_bfd): Permit the relocs to be cached in the
	section data.

Sat Jul 16 13:55:38 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config.bfd (m88*-harris-cxux*): Recognize.
	* hosts/harris.h (POSIX_UTIME, HAVE_PROCFS): Define.

	* configure.host (m68*-atari-sysv4*): New host.
	(m68*-cbm-sysv4*): Use m68kv4 instead of amix.
	* hosts/amix.h: Remove.
	* hosts/m68kv4.h: New file, was amix.h.

Thu Jul 14 15:12:24 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* reloc.c (enum bfd_reloc_code_real, bfd_type, struct
	reloc_howto_struct, reloc_howto_type, HOWTO, HOWTO2): Copied
	changes over from bfd-in2.h so they get generated properly next
	time someone runs "make headers".
	* bfd-in2.h: Rebuilt.

	* targets.c (netbsd532_vec, pc532mach_vec): Declare const.
	(m88kmach3_vec): Restore deleted declaration.

	* configure.in: Alphabetize target vector names.

	* config/pc532mach.mh: New file.
	(HDEPFILES, HDEFINES): Define here.
	* config/pc532-mach.mt (HDEPFILES, HDEFINES): Deleted.
	* config/ns32k-netbsd.mt (HDEPFILES, HDEFINES): Deleted.

	Sun Jul 10 00:04:20 1994  Ian Dall  (dall@hfrd.dsto.gov.au)

	* pc532-mach.c: New File. pc532-mach a.out format.

	* netbsd532.c: New file. pc532-netbsd532 a.out format.

	* hosts/pc532mach.h: New file. pc532-mach host support.

	* cpu-ns32k.c: New file. ns32k support cpu specific code rather
	than format specific code.

	* config/pc532-mach.mt: New file. Support for pc532-mach target.

	* config/ns32k-netbsd.mt: New file. Support for netbsd532 target.

	* aout-ns32k.c, aout-ns32k.h: New files supporting aout format for
	ns32k series. 

	* targets.c: Add netbsd532_vec and pc532machaout_vec into
	bfd_target_vector array. Move netbsd386_vec to alphabetic order
	location.

	* reloc.c (_bfd_final_link_relocate) Add support for
	special_function1 in howto.

	* libaout.h: add M_NS32032, M_NS32532, M_532_NETBSD entries in
	machine_type enum.

	* configure.in: add pc532mach_vec and netbsd532_vec entries.

	* config.bfd: add pc532mach host entries. Use for both
	ns32k-pc532-mach and ns32k-pc532-netbsd.

	* config.bfd: it doesn't work to use i386-mach3 for ns32k*-*-mach.
	add ns32k-pc532-mach* and ns32k-*-netbsd* entries.

	* bfd-in2.h: Add ns32k specific relocations to bfd_reloc_code_real
	enum.

	* bfd-in2.h: Add special_function1 to struct howto. Change HOWTO
	and NEWHOWTO macros to make special_function1 NULL. Neww HOWTO2
	macro.

	* bfd-in2.h: Split definition of struct reloc_howto_struct
	and corresponding typedef into two statements.

	* bfd-in2.h: Add entry bfd_arch_ns32k to bfd_architecture enum.

	* archures.c: Add bfd_ns32k_arch prototype, and entry in
	archures_init_table. 

	* aoutx.h (aout_link_reloc_link_order): Allow for target dependent
	MY_put_reloc macro. Allow for target dependent special_function1
	to apply the relocation. 

	* aoutx.h (aout_link_input_section_std): Allow for target
	dependent determination of reloc howto. Allow for target dependent
	special_function1 to apply the relocation.

	* aoutx.h (get_reloc_upper_bound): Detect bss and return 0.

	* aoutx.h (slurp_reloc_table): Detect bss and succesfully read
	zero reloc entries.

	* aoutx.h (machine_type): Add bfd_arch_ns32k case.

	* aoutx.h: Stat to determine executable status if STAT_FOR_EXEC
	is defined (not just MACH). Use fstat instead of stat and check
	for fstat error.

	* aoutx.h: Allow target dependent swap_std_reloc_{in,out}.

	* aoutx.h: Allow CTORS reloc info to be in target dependent reloc
	table.

	* aout-target.h: Apply SWAP_MAGIC (if defined) after
	swap_exec_header_in, otherwise we have magic in the wrong order.

Thu Jul 14 11:47:27 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* coff-sparc.c (sparccoff_vec): Have leading underscores.

Tue Jul 12 12:08:10 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* aix386-core.c, aoutf1.h, cisco-core.c, elfcode.h, hppabsd-core.c,
	hpux-core.c, irix-core.c, lynx-core.c, osf-core.c, ptrace-core.c,
	rs6000-core.c, trad-core.c:  Remove SEC_ALLOC flag from .reg
	sections, .reg sections are not allocated and contain debug
	information only.
	* osf-core.c (make_bfd_asection, osf_core_core_file_p):  Use
	bfd_make_section_anyway instead of building unique section names.

Tue Jul 12 11:41:22 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* libelf.h (bfd_elf32_swap_symbol_in): Declare.
	(bfd_elf32_swap_symbol_out): Declare.
	(bfd_elf64_swap_symbol_in, bfd_elf64_swap_symbol_out): Declare.
	* elf32-hppa.c (elf32_hppa_args_hash_table_init): Correct cast.

	* aout-encap.c (ARCH): Don't define.  Obsolete.
	* aout0.c, aoutx.h, gen-aout.c, hp300bsd.c, hp300hpux.c: Likewise.
	* i386aout.c, i386bsd.c, i386dynix.c, i386linux.c: Likewise.
	* i386lynx.c, m68klynx.c, mipsbsd.c, netbsd386.c: Likewise.
	* newsos3.c, sparclynx.c, sunos.c: Likewise.

Mon Jul 11 20:08:23 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* section.c (STD_SECTION): Make the sixth argument boolean, not
	the seventh.  From gary@tuva.pacsemi.oz.au (gary kopff).

Sun Jul 10 09:12:02 1994  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* aoutx.h (bfd_free_cached_info): Change name of FREE to BFCI_FREE
	in order not to collide with LynxOS's definition of FREE in
	/usr/include/sys/proc.h

Thu Jul  7 14:18:06 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* reloc.c (bfd_perform_relocation): Don't clobber the relocation
	value for coff-Intel-little or coff-Intel-big.  Hack upon hack.

Thu Jul  7 10:10:34 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* aoutx.h (howto_table_std):  Add entry for GOT relocations
	which are present in sun3 shared libraries, to avoid assertions
	when reading the dynamic relocations.

Thu Jul  7 10:19:20 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.h (R_HPPA_COMPLEX): Fix dumb typo. 

Wed Jul  6 19:21:57 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* hosts/sysv4.h (qsort, strtol): Don't declare.

	* elfcode.h (elf_link_output_sym): Don't call output_symbol_hook
	if it is NULL.

	* elf32-mips.c (mips_elf_final_write_processing): Add ignored info
	argument to correspond to recent libelf.h change.

Wed Jul  6 00:48:57 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* coff-alpha.c (alpha_ecoff_mkobject_hook):  New hook to
	additionally copy object type information from the alpha file
	header to the BFD flags.
	(alpha_ecoff_backend_data):  Use it.
	(ecoffalpha_little_vec):  Add DYNAMIC to object_flags.
	* aout64.c:  Fix typo in conditional QMAGIC definition.

Wed Jul  6 00:13:17 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppabsd-core.c (hppabsd_core_core_file_p): Sanity check the
	value of clicksz to help weed out non HPPA BSD core files.

Tue Jul  5 13:26:02 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Mach 3 support.
	* config.bfd (m88*-*-mach3*, mips*-dec-mach3*, mips*-*-mach3*):
	New targets.
	* configure.host (i[34]86-*-mach3*, ns32k-*-mach3*): Recognize
	"mach3" instead of "mach".
	(m88*-*-mach3*, mips*-dec-mach3*, mips*-*-mach3*): New hosts.
	* targets.c (m88kmach3_vec): New target vector.
	(bfd_target_vector): Add i386mach3_vec and m88kmach3_vec, but
	inside #if 0.
	* aoutx.h (some_aout_object_p) [MACH]: Recognize executables by
	checking for execute permission, instead of looking at entry
	point.
	* i386mach3.c: Update, define MACH, N_TXTOFF, N_TXTADDR,
	N_SHARED_LIB, don't include aout/*.h files, etc.
	* m88kmach3.c: New file, m88k Mach 3 target.
	* config/m88k-mach3.mt,	config/mips-mach3.mt: New files, target
	makefile fragments.
	* config/i386mach3.mh, config/m88kmach3.mh, config/mipsmach3.mh:
	New files, host	makefile fragments.
	* hosts/m88kmach3.h, hosts/mipsmach3.h: New files, host definitions.

Tue Jul  5 13:56:52 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (swap_out_syms): Get alignment of common symbol from
	st_value field of saved ELF symbol information, if there is any.

Mon Jul  4 19:13:32 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.h (R_HPPA_COMPLEX): Define.
	* elf32-hppa.h (R_HPPA_COMPLEX): Define.
	(elf32_hppa_reloc_type): Delete R_PARISC_STUB_CALL_17.

Fri Jul  1 12:07:41 1994  Jeff Law  (law@snake.cs.utah.edu)

	* Support code for enabling the new style linker for PA ELF.
	* elfcode.h (swap_symbol_in, swap_symbol_out): Externalize.
	(elf_compute_section_file_positions): Pass link_info to
	the begin_write_processing hook.
	(bfd_elf_write_object_contents): Pass NULL for new link_info
	argument to final_write_processing hook.
	(elf_link_output_sym): Accept new "input_section" argument for
	the symbols's input section.  All callers changed.  Call the
	link_output_symbol_hook if it's defined.
	(elf_bfd_final_link): Call the final_write_processing hook if
	it's defined.
	* libelf.h (elf_backend_link_output_symbol_hook): Declare.
	(elf_backend_begin_write_processing): Add new "info" argument.
	(elf_backend_final_write_processing): Likewise.
	* elf32-target.h (elf_backend_link_output_symbol_hook): Provide
	a default definition.
	(elf32_bed): Add elf_backend_link_output_symbol_hook.
	* elf64-target.h: Likewise.
	
	* Major rework of the PA ELF code.  Uses the new style BFD
	linker, major cleanups.
	* hppa_stubs.h: Rewrite from scratch.  Much smaller and simpler.
	* elf32-hppa.h: Delete all symbol extension related code.
	(hppa_look_for_stubs_in_section): Delete decl.
	(elf32_hppa_size_stubs, elf32_hppa_build_stubs): New decls.
	* elf32-hppa.c: Symbol extension stuff moved form elf32-hppa.h
	into elf32-hppa.c.  Do not include aout64.h.
	(typdef hppa_stub_type): Delete.
	(elf32_hppa_stub_name_list_struct): Delete.
	(elf32_hppa_stub_description_struct): Delete.
	(arg_reloc_type): Use simpler enumerations.  All references changed.
	(arg_location, arg_reloc_relocation): Likewise.
	(elf32_hppa_symextn_map_struct): Delete.
	(get_symbol_value): Delete.
	(elf32_hppa_get_sym_extn): Delete.
	(find_stubs, new_stubs, type_of_mismatch): Delete.
	(find_stub_by_name, add_stub_by_name): Delete.
	(hppa_elf_stub_finish, hppa_elf_stub_reloc): Delete.
	(hppa_elf_arg_reloc_needed): Renamed.  Simplify.
	(hppa_elf_build_linker_stub, hppa_elf_create_stub_sec): Delete.
	(hppa_elf_long_branch_needed_p): Delete.
	(hppa_look_for_stubs_in_section): Delete.
	(hppa_elf_get_section_contents): Delete.
	(elf32_hppa_backend_symbol_processing): Delete.
	(elf32_hppa_backend_section_processing): Delete.
	(elf32_hppa_backend_section_from_shdr): Delete.
	(elf32_hppa_backend_fake_sections): Delete.
	(elf32_hppa_backend_section_from_bfd_section): Delete.
	(NEW_INSTRUCTION): Delete.
	(CURRENT_STUB_OFFSET): Delete.
	(elf32_hppa_relocate_section): New function.
	(elf32_hppa_bfd_final_link_relocate): New function.
	(elf32_hppa_size_symext): New function.
	(elf32_hppa_link_output_symbol_hook): New function.
	(elf32_hppa_read_symext_info): New function.
	(elf32_hppa_add_symbol_hook): New function.
	(elf32_hppa_name_of_stub): New function.
	(elf32_hppa_size_of_stub): New function.
	(elf32_hppa_build_one_sub): New function.
	(elf32_hppa_build_stubs): New function.
	(elf32_hppa_size_stubs): New function.
	(linker, stub and argument hash tables): Add appropriate
	structures, definitions and functions to implement all three
	hash tables.
	(hppa_elf_relocate_insn): Don't need argument location information
	in this function.
	(add_entry_to_symext_chain): Accept a symbol's argument location
	information rather than the symbol itself.  All callers changed.
	(hppa_elf_gen_reloc_type): Simplify.
	(hppa_elf_set_section_contents): Stub section is no longer special.
	(hppa_elf_reloc): Greatly simplify.
	(elf32_hppa_begin_write_processing): Accept link_info argument.
	Handle being called from the BFD backend linker.
	(elf32_hppa_final_write_processing): Likewise.
	(elf_hppa_tc_make_sections): No longer call stub_finish.
	
Mon Jun 27 18:07:06 1994  Steve Chamberlain  (sac@cirdan.cygnus.com)

	* section.c (bfd_get_section_contents): Put in parens to get
	precedence right.

Sun Jun 26 18:08:29 1994  Jeff Law  (law@snake.cs.utah.edu)

	* libelf.h (relocate_section): New argument "output_names" added
	to prototype.
	* elfcode.h (elf_link_input_bfd): New argument "output_names"
	added to prototype of relocate_section.  Pass the output symbol
	names to relocate_section.
	* elf32-i386.c (elf_i386_relocate_section): Use "output_names" to
	determine the name of a local symbol.
	* elf32-mips.c (mips_elf_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

Fri Jun 24 08:15:42 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	Add Solaris BCP (the part of Solaris which allows it to run
	SunOS4 a.out files) core file handling.
	* aoutf1.h (external_solaris_bcp_core, swapcore_solaris_bcp):
	New structure and its swap in function.
	(internal_sunos_core):  New member c_data_addr, to receive the
	start address of the data section in the core file.
	(swapcore_sun3, swapcore_sparc, sunos4_core_file_p):  Use it.
	(sunos4_core_file_p):  Recognize Solaris BCP core file.
	(sunos4_core_file_matches_executable_p):  Always indicate match
	for Solaris BCP core files.

Thu Jun 23 15:31:28 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	Preliminary support for generating shared libraries, from Eric
	Youngdale <ericy@cais.cais.com>.
	* elfcode.h (prep_headers): If DYNAMIC, set e_type to ET_DYN.
	(elf_link_add_object_symbols): If generating a shared library,
	create dynamic sections for first input BFD with the right format.
	(elf_link_create_dynamic_sections): Don't create .interp section
	if creating a shared library.
	(elf_link_input_bfd): Skip dynamic sections in input file.
	(elf_bfd_final_link): If creating a shared library, it's OK for
	dynobj to have sections which are not SEC_IN_MEMORY.
	* elf32-i386.c (elf_i386_size_dynamic_sections): Only set .interp
	section if not creating a shared library.
	* elf32-sparc.c (elf_sparc_size_dynamic_sections): Likewise.

	* elfcode.h (elf_object_p): Don't set DYNAMIC just because there
	is an SHT_DYNAMIC section.

	* cf-i386lynx.c (i386coff_vec): Don't include DYNAMIC in
	object_flags.
	* coff-sparc.c (sparccoff_vec): Likewise.
	* hppabsd-core.c (hppabsd_core_vec): Likewise.

	* aoutx.h (NAME(aout,some_aout_object_p)): Don't set SEC_RELOC
	just because DYNAMIC is set.

Thu Jun 23 12:53:41 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* configure.in: Change --with-targets to --enable-targets and
	--with-64-bit-bfd to --enable-64-bit-bfd.
	* Makefile.in, mpw-make.in, targets.c: Change comments.

Wed Jun 22 17:59:59 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config.bfd (powerpc-*-elf*): New target, just like
	powerpc-*-sysv4*.

	* linker.c (FAIL): Undefine macro before defining as enum.

Wed Jun 22 10:52:47 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* linker.c (_bfd_generic_link_add_archive_symbols): Initialize
	pass from abfd->archive_pass, and save it there as well.

	* hash.c (bfd_hash_allocate): Don't call bfd_set_error if
	obstack_alloc returns NULL unless the size is non-zero.

	* linker.c (archive_hash_allocate): Define.
	(_bfd_generic_link_add_archive_symbols): Use archive_hash_allocate
	rather than obstack_alloc, for clarity.

	* elfcode.h (elf_get_reloc_upper_bound): Correct.

	* aout64.c (BMAGIC, QMAGIC): Define if not already defined.  From
	Peter Schauer <pes@regent.e-technik.tu-muenchen.de>.

	Linux ZMAGIC support from Eric Youngdale <ericy@cais.cais.com>.
	* libaout.h (struct aoutdata): Add field zmagic_disk_block_size.
	* aout-target.h (MY(callback)): Only set alignment according to
	architecture if the section sizes are aligned to that alignment,
	for backward compatibility.
	(MY(set_sizes)): Initialize zmagic_disk_block_size field.
	* aoutx.h (adjust_z_magic): Set ztih if using q_magic_format.  Set
	text section filepos to zmagic_disk_block_size if not ztih.  Use a
	different padding algorithm if not ztih.
	* i386linux.c (MY_text_includes_header): Don't define.

	* aoutx.h (aout_link_check_ar_symbols): Just skip N_STAB and N_FN
        symbols; don't look them up in the hash table.  From
        ralphc@pyramid.com (Ralph Campbell).

Tue Jun 21 11:47:20 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coff-go32.c (go32coff_archive_p): Remove unused function.

	* section.c (bfd_abs_section): Make const.
	(bfd_abs_section_ptr, bfd_is_abs_section): Define.
	(bfd_und_section): Make const.
	(bfd_und_section_ptr, bfd_is_und_section): Define.
	(bfd_com_section): Make const.
	(bfd_com_section_ptr): Define.
	(bfd_ind_section): Make const.
	(bfd_ind_section_ptr, bfd_is_ind_section): Define.
	(bfd_abs_symbol, bfd_com_symbol): Make const.
	(bfd_und_symbol, bfd_ind_symbol): Likewise.
	(global_syms): Cast initialization of section field.
	(STD_SECTION): Define as const, and cast initializations.
	* bfd-in2.h: Rebuilt.
	* Many files: Change uses of bfd_abs_section, etc., to use
	bfd_abs_section_ptr or bfd_is_abs_section, etc.

Mon Jun 20 11:06:27 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* Many files: change all bfd_target vectors to be const.  Change
	all uses of bfd_target * to be const bfd_target *.  Change
	bfd_target_vector and bfd_default_vector arrays to be const
	bfd_target * const *.

	* ecoff.c, libecoff.h, ecoffswap.h, coff-alpha.c, coff-mips.c,
	elf32-mips.c: Renamed all externally visible ECOFF routines which
	are local to BFD to start with _bfd_ecoff instead of just ecoff.

	* ecoff.c (ecoff_swap_tir_in): Change input argument to const.
	(ecoff_swap_tir_out): Likewise.
	(ecoff_swap_rndx_in, ecoff_swap_rndx_out): Likewise.
	(ecoff_slurp_symbolic_info): Add new arguments to correspond to
	read_debug_info entry point in ecoff_debug_swap structure.
	Change all calls.
	* libecoff.h (ecoff_slurp_symbolic_info): Change declaration.
	* ecoffswap.h (ecoff_swap_tir_in, ecoff_swap_tir_out): Declare.
	(ecoff_swap_rndx_in, ecoff_swap_rndx_out): Declare.
	* coff-alpha.c (alpha_ecoff_backend_data): Initialize new
	ecoff_debug_swap fields.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.
	* elf32-mips.c (mips_elf_read_ecoff_info): Undefine READ.
	(mips_elf_ecoff_debug_swap): Initialize new ecoff_debug_swap
	fields.
	* configure.in (bfd_elf32_bigmips_vec): Use ecoff.o and
	ecofflink.o.
	(bfd_elf32_littlemips_vec): Likewise.
	(ecoff_big_vec, ecoff_little_vec): Likewise.
	(ecoffalpha_little_vec): Likewise.
	* Makefile.in (BFD_LIBS): Remove ecoff.o and ecofflink.o.
	(BFD32_BACKENDS): Add ecoff.o and ecofflink.o.

	* aoutx.h (NAME(aout,final_link)): Check flavour of sub, not abfd,
	when computing reloc sizes.  From Eric Youngdale
	<ericy@cais.cais.com>.
	* elfcode.h (elf_bfd_final_link): Don't try to compute maximum
	reloc count or size for a non-ELF file.

	* mipsbsd.c (MY_final_link_callback): Define to avoid warning.

	* hp300hpux.c (MY_final_link_callback): Define to avoid warning.
	(BMAGIC, QMAGIC): Define; used by aoutx.h.
	(MY(slurp_symbol_table)): Change translate_from_native_sym_flags
	calls to use new parameters.

Fri Jun 17 14:45:32 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aout-target.h (MY(callback)): Set the alignments of the text,
	data and bss sections after determining the architecture.

	* sunos.c (sunos_add_one_symbol): Treat a common symbol from a
	dynamic object as being in the .bss section of the object, rather
	than as being undefined.

Fri Jun 17 11:16:50 1994  Jeff Law  (law@snake.cs.utah.edu)

	* libhppa.h (bfd_hppa_insn2fmt, hppa_rebuild_insn): Make INLINE.

	* elf32-hppa.h (elf_hppa_final_processing): Delete decl.

Thu Jun 16 23:36:23 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elfcode.h (elf_link_input_bfd): Don't try to read local symbols
	if there aren't any in the input file.

Thu Jun 16 14:25:22 1994  Eric Youngdale  (ericy@cais.cais.com)

	* i386linux.c: Many new functions and definitions for linker
	support for Linux shared libraries.
	* bfd-in.h (bfd_linux_size_dynamic_sections): Declare.
	* bfd-in2.h: Rebuild.

Thu Jun 16 14:23:46 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config.bfd: If second argument is ``_'', then, instead of
	echoing config file name, echo whether target uses leading
	underscores on symbol names.  Add appropriate settings to
	different cases.  Used by binutils/configure.in to set default for
	c++filt.

	* elfcode.h (elf_bfd_final_link): If trying to generate a shared
	object, warn and return false.

	* aoutx.h (NAME(aout,some_aout_object_p)): Accept BMAGIC objects
	and treat them as OMAGIC.

Wed Jun 15 18:02:21 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	Enable sparc v9 support for release.  Note that this is still a
	work in progress, pending release of an ABI specification.
	* config.bfd, configure.in: Include sparc v9 elf config.
	* elfcode.h (prep_headers): Handle sparc v9 (64 bit).
	* reloc.c (bfd_reloc_code_real): New reloc types.
	* elf64-sparc.c: Implement elf64-sparc target.
	* Makefile.in, targets.c: Updated.

Wed Jun 15 01:34:07 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* libelf.h (struct elf_obj_tdata): New field dt_needed_name.
	(elf_dt_needed_name): New accessor macro.
	* elfcode.h (elf_link_add_object_symbols): If elf_dt_needed_name
	is set, use that instead of the filename for the DT_NEEDED dynamic
	entry.
	* elf.c (bfd_elf_set_dt_needed_name): New function.
	* bfd-in.h (bfd_elf_set_dt_needed_name): Declare.
	* bfd-in2.h: Rebuilt.

	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add sinterpptr
	argument, and set it to the .interp section.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
	(bfd_elf64_size_dynamic_sections): Likewise.
	* bfd-in2.h: Rebuilt.

	* coff-sparc.c (SWAP_OUT_RELOC_EXTRA): Define to clear the r_spare
	field of the reloc rather than letting it be garbage.

	* archive.c (bfd_slurp_armap): Recognize __.SYMDEF/ as well as
	__.SYMDEF; the former was used in old Linux archives.  From
	jrs@world.std.com (Rick Sladkey).

	* i386linux.c (i386linux_write_object_contents): Define; like
	MY(write_object_contents) in aout-target.h, but set MACHTYPE to
	M_386.  From jrs@world.std.com (Rick Sladkey).
	(MY_write_object_contents): Define.

	* aoutx.h (translate_from_native_sym_flags): Treat N_SETV symbols
	as N_DATA symbols.
	(aout_link_add_symbols): Likewise.

	* aoutx.h: Rewrite symbol duplicate elimination to use BFD hash
	tables.
	(struct stringtab_entry, struct stringtab_data): Remove.
	(HASHMAXLEN, HASH_CHAR, hash, compare, log2, emit_strtab): Remove.
	(struct strtab_hash_entry, struct strtab_hash): Define.
	(strtab_hash_newfunc, strtab_hash_lookup): Define.
	(stringtab_free, emit_stringtab): Define.
	(stringtab_init, add_to_stringtab): Rewrite.
	(NAME(aout,write_syms)): Use new stringtab code.
	(struct aout_final_link_info, NAME(aout,final_link)): Likewise.
	(aout_link_write_symbols, aout_link_write_other_symbol): Likewise.

	* bfd-in.h (BFD_TRADITIONAL_FORMAT): Define new BFD flag to
	request BFD to write object in the traditional format, whatever
	that means for the particular backend.
	* bfd-in2.h: Rebuilt.

	* hash.c (bfd_hash_allocate): If obstack_alloc fails, set
	bfd_error_no_memory.

Tue Jun 14 13:00:04 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* libaout.h (struct aoutdata): Add q_magic_format to subformat
	enum.
	* aout-target.h (MY_bfd_copy_private_bfd_data): Define as function
	if not already defined.  Copy subformat information.
	(MY_text_includes_header): Define as 0 if not already defined.
	(MY(backend_data)): Use MY_text_includes_header rather than 0.
	(MY_final_link_callback): Rename from final_link_callback, and
	define only if MY_final_link_callback is not already defined.
	(MY_bfd_final_link): Rename use of final_link_callback to
	MY_final_link_callback.
	* aoutx.h (NAME(aout,some_aout_object_p)): Handle QMAGIC like
	ZMAGIC, but set the subformat to q_magic_format.  Abort if the
	magic number if not recognized.
	(adjust_z_magic): Use QMAGIC if q_magic_format.
	* i386linux.c (MY_text_includes_header): Define as 1.
	(i386linux_bfd_final_link): New static function.
	(MY_bfd_final_link): Define as i386linux_bfd_final_link.

	* aoutx.h (translate_to_native_sym_flags): Check both section and
	output_section against sections of abfd.

	* libecoff.h (struct ecoff_link_hash_entry): Change type of
	written from boolean to char.  Add new field small.
	* ecoff.c (ecoff_link_hash_newfunc): Initialize written to 0
	rather than false.  Initialize small to 0.
	(ecoff_link_add_externals): If ECOFF type is scSUndefined, set
	small.  If small is set, and hash table type is common, force the
	symbol into a section named SCOMMON and change the ECOFF type from
	scCommon to scSCommon.
	(ecoff_link_write_external): Set written to 1 rather than true.
	* coff-mips.c (mips_relocate_section): Correct JMPADDR reloc
	overflow check to consider section VMA of input file.

Mon Jun 13 14:20:07 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutf1.h (aout_32_sunos4_write_object_contents): Handle a
	machine type of 68000.
	* aoutx.h (NAME(aout,machine_type)): Add new argument unknown.
	Set *unknown to true if machine type is really unknown, as opposed
	to M_UNKNOWN for the 68000.
	(NAME(aout,set_arch_mach)): Change NAME(aout,machine_type) call
	accordingly.
	* libaout.h (NAME(aout,machine_type)): Add new argument to
	prototype.

Sun Jun 12 20:21:03 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (EXEC_AUX_ID): Define based on availablity of HPUX_AUX_ID
	or HIUX_AUX_ID.
	(som_begin_writing): Use EXEC_AUX_ID instead of HPUX_AUX_ID.
	(som_write_armap): Use CPU_PA_RISC1_0 as the magic number.  Note
	som.c is careful to always define CPU_PA_RISC1_0.

Sat Jun 11 16:32:30 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Add weak symbols as an extension to a.out.
	* aoutx.h (sym_in_text_section): Don't define.
	(sym_in_data_section, sym_in_bss_section): Likewise.
	(sym_is_undefined, sym_is_global_defn): Likewise.
	(sym_is_debugger_info, sym_is_fortrancommon): Likewise.
	(sym_is_absolute, sym_is_indirect): Likewise.
	(translate_from_native_sym_flags): Rewrite for clarity.  Rearrange
	arguments and change caller.  Handle weak symbols.
	(translate_to_native_sym_flags): Likewise.
	(aout_link_check_ar_symbols): Don't ignore weak symbols.  Pull
	object in from archive if a weak defintion is found for an
	existing undefined symbol.
	(aout_link_add_symbols): Put all cases in switch.  Set flags of an
	undefined symbol to 0.  Handle weak symbols.
	(aout_link_write_symbols): Handle weak symbols.
	(aout_link_write_other_symbol): Likewise.
	(aout_link_input_section_std): Likewise.
	(aout_link_input_section_ext): Likewise.
	* sunos.c (sunos_write_dynamic_symbol): Likewise.

Fri Jun 10 13:25:13 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (NAME(aout,canonicalize_reloc)): Handle .bss section.
	(NAME(aout,get_reloc_upper_bound)): Likewise.

	* coff-i960.c (coff_i960_reloc_type_lookup): Add BFD_RELOC_CTOR.
	* linker.c (_bfd_generic_link_write_global_symbol): Don't assume
	the section of a common symbol is not NULL.

Wed Jun  8 23:15:53 1994  Stu Grossman  (grossman@cygnus.com)

	* nlmcode.h (nlm_object_p):  Set EXEC_P and start address for GDB.

Wed Jun  8 23:57:34 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_get_external_symbols): Don't try to read the
	strings if there are no symbols.
	(aout_link_write_other_symbol): Use the output section when
	working out the type.

Tue Jun  7 13:25:08 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (assign_section_numbers): Put shstrtab, symtab and
	strtab sections at end of file.  Avoids bug in some versions of
	SVR4 strip.  From Eric Youngdale <eric@tantalus.nrl.navy.mil>.

	* coffcode.h (styp_to_sec_flags): If COFF_PAGE_SIZE is defined,
	set SEC_DEBUGGING for STYP_INFO sections.
	(coff_compute_section_file_positions): If COFF_PAGE_SIZE is
	defined, and D_PAGED is set, set the file position equal to the
	section VMA modulo COFF_PAGE_SIZE.
	* coffgen.c (coff_real_object_p): If F_EXEC is set, set D_PAGED.
	* coff-i386.c: Set D_PAGED in BFD target.
	(COFF_PAGE_SIZE): Define.
	* coff-m68k.c, coff-sparc.c: Likewise.

Mon Jun  6 10:57:28 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (bfd_section_from_shdr): Don't turn a reloc section
	into a BFD section just because SHF_ALLOC is set; require that it
	not use the normal symbol table.
	(elf_section_from_bfd_section): Corresponding change.

	Better indirect and warning symbol handling inspired by Stuart
	Quick <stuck@cs.man.ac.uk>.
	* linker.c (enum link_action): Add REF, MIND, CWARN, REFC.
	(link_action): Change UNDEF_ROW/def and UNDEFW_ROW/def from NOACT
	to REF.  Change UNDEF_ROW/indr and UNDEFW_ROW/indr from CYCLE to
	REFC.  Change DEF_ROW/indr and COMMON_ROW/indr from CYCLE to MDEF.
	Change DEFW_ROW/indr from CYCLE to NOACT.  Change INDR_ROW/indr
	from MDEF to MIND.  Change INDR_ROW/warn from WARNC to CYCLE.
	Change WARN_ROW/def and WARN_ROW/indr from MWARN to CWARN.  Change
	WARN_ROW/com from MWARN to WARN.  Change WARN_ROW/warn from NOACT
	to CYCLE.  Change SET_ROW/warn from WARNC to CYCLE>
	(_bfd_generic_link_add_one_symbol): Handle REF, MIND, CWARN and
	REFC.  If a new indirect symbol has been referenced, push the
	reference down to the symbol it points to.  FIx handling of WARN.
	* aoutx.h (translate_from_native_sym_flags): If N_WARNING, don't
	clobber e_type of next symbol.
	(translate_to_native_sym_flags): Likewise.
	(aout_link_write_symbols): Loop on bfd_link_hash_warning as well
	as bfd_link_hash_indirect.

	* libaout.h (struct aout_link_hash_entry): New field written.
	* aoutx.h (NAME(aout,link_hash_newfunc)): Initialize written.
	(aout_link_write_symbols): Use written, not root.written.
	(aout_link_write_other_symbol): Likewise.
	* sunos.c (sunos_scan_dynamic_symbol): Likewise.
	* libecoff.h (struct ecoff_link_hash_entry): New field written.
	* ecoff.c (ecoff_link_hash_newfunc): Initialize written.
	(ecoff_link_write_external): use written, not root.written.
	* genlink.h (struct generic_link_hash_entry): New field written.
	* linker.c (_bfd_link_hash_newfunc): Don't initialize written.
	(generic_link_hash_newfunc): Initialize written.
	(_bfd_generic_link_output_symbols): Use written, not root.written.
	(_bfd_generic_link_write_global_symbol): Likewise.
	(_bfd_generic_reloc_link_order): Likewise.

	* libecoff.h (ecoff_data_type): Add linker field.
	* ecoff.c (ecoff_write_object_contents): Check new tdata linker
	field, rather than outsymbols being non-NULL, to decide whether to
	output the symbols and relocs.
	(ecoff_bfd_final_link): Set new tdata linker field to true.

	* ecoff.c (ecoff_bfd_copy_private_bfd_data): Don't try to copy
	data to a non-ECOFF file.

	* libbfd-in.h: Add warning that libbfd.h is a generated file.
	* libbfd.h: Rebuilt.

Sun Jun  5 15:02:30 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Changes to support ELF strip and objcopy on dynamically linked
	files.
	* elfcode.h (elf_fake_sections): Add prototype.
	(bfd_section_from_shdr): Make a BFD section from an SHT_HASH
	section, and from an SHT_DYNSYM section, and from the dynamic
	string table section.
	(elf_object_p): Set D_PAGED if there is a program header.
	(elf_make_sections): Remove.
	(fix_up_strtabs): Remove.
	(elf_fake_sections): Rewrite.  Now sets sh_entsize.
	(assign_section_numbers): Rewrite.  Now sets sh_link and sh_info
	for all sections.
	(elf_compute_section_file_positions):  Don't call obsolete
	functions elf_make_sections or fix_up_strtabs.
	(swap_out_syms): Set sh_addralign to FILE_ALIGN rather than 4.
	(NAME(bfd_elf,write_object_contents)): Permit writing DYNAMIC
	objects.
	(elf_section_from_bfd_section): Treat SHT_DYNSYM like other normal
	sections.  If an SHT_REL or SHT_RELA section is allocated or uses
	an unusual symbol table, permit a BFD section to map to it.
	Permit most SHT_STRTAB sections to have a BFD section mapped to
	them.
	(elf_bfd_final_link): Don't set sh_link, sh_info or sh_entsize
	fields of dynamic sections here; do it in assign_section_numbers.
	* elf32-target.h, elf64-target.h: Add D_PAGED to permitted object
	flags.

	* elf.c (_bfd_elf_make_section_from_shdr): Only set SEC_DATA if
	SEC_LOAD is set, rather than checking SEC_ALLOC.

	* libbfd-in.h (bfd_realloc): Change last arg to "size_t size".

Fri Jun  3 10:58:02 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_write_object_contents): Don't compute the file header's
	checksum here.
	(som_write_headers): Instead do it here.

	* libbfd.h (bfd_realloc): Change last arg to "size_t size".

Thu Jun  2 17:39:22 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* hosts/sun3.h: Include <stdlib.h>.  Don't declare free, exit or
	getenv.

	Add linker support for SunOS shared libraries.
	* sunos.c: Include bfdlink.h.  Add many new functions and
	definitions for SunOS shared library support.
	* bfd-in.h (bfd_sunos_record_link_assignment): Declare.
	(bfd_sunos_size_dynamic_sections): Declare.
	* bfd-in2.h: Rebuilt.
	* aoutx.h (struct aout_link_hash_entry): Move to libaout.h.
	(struct aout_link_hash_table): Likewise.
	(aout_link_hash_lookup, aout_link_hash_traverse): Likewise.
	(aout_hash_table): Likewise.
	(NAME(aout,link_hash_newfunc)): Rename from aout_link_hash_newfunc
	and make externally visible.
	(NAME(aout,link_hash_table_init)): New function.
	(NAME(aout,link_hash_table_create)): Call
	NAME(aout,link_hash_table_init), not _bfd_link_hash_table_init.
	(aout_link_add_symbols): Don't fail if no symbols.  If it exists,
	call add_dynamic_symbols backend entry point for dynamic objects.
	Use add_one_symbol backend entry point if it exists.
	(NAME(aout,final_link)): Call finish_dynamic_link backend entry
	point, if it exists.
	(aout_link_input_bfd): For a dynamic object, call
	link_dynamic_object backend entry point, if it exists.
	(aout_link_write_other_symbol): Call write_dynamic_symbol backend
	entry point, if it exists.
	(aout_link_input_section): Don't read the relocs if they have
	already been read.
	(aout_link_input_section_std): When doing a final link, for a
	reloc against an external symbol, call check_dynamic_reloc backend
	entry point, if it exists.
	(aout_link_input_section_ext): Likewise.
	* libaout.h: Protect against multiple inclusion.  Include
	bfdlink.h.
	(struct aout_link_hash_entry): Move in from aoutx.h.
	(struct aout_link_hash_table): Likewise.
	(aout_link_hash_lookup, aout_link_hash_traverse): Likewise.
	(aout_hash_table): Likewise.
	(struct aout_backend_data): Add fields add_dynamic_symbols,
	add_one_symbol, link_dynamic_object, write_dynamic_symbol,
	check_dynamic_reloc, and finish_dynamic_link.
	(struct aout_section_data_struct): Define new structure.
	(aout_section_data): Define new accessor macro.
	(NAME(aout,link_hash_newfunc)): Declare.
	(NAME(aout,link_hash_table_init)): Declare.
	* aoutf1.h (sunos4_aout_backend): Initialize new aout_backend_data
	fields.
	* aout-target.h (MY(backend_data)): Likewise.
	* i386aout.c (MY(backend_data)): Likewise.
	* i386mach3.c (MY(backend_data)): Likewise.
	* mipsbsd.c (MY(backend_data)): Likewise.
	* sparclynx.c (sparclynx_aout_backend): Likewise.

	* aoutx.h (NAME(aout,slurp_symbol_table)): Don't zero out cached
	until we know it is non-NULL.
	(aout_link_write_symbols): Don't skip a warning symbol even if it
	has already been written out.  If skipping an indirect symbol,
	skip the next symbol as well.

Wed Jun  1 14:37:50 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* hosts/sun3.h: Don't declare qsort, malloc or realloc.

Thu May 26 13:56:03 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* nlmcode.h (nlm_swap_auxiliary_headers_in): Cast bfd_byte pointer
	to char pointer to avoid compiler warnings.

	* dep-in.sed: Remove spaces before colons.

	Merged changes back in from FSF gas release 2.3:

	* Makefile.in (stmp-bfd.h): Wrap `if' block around grep
	invocation, to avoid a bug in BSD 4.4 make.

	From Ralph Campbell:
	* mipsbsd.c (mips_fix_jmp_addr): If symbol is undefined, return an
	error.
	(mips_fix_hi16_s): Ditto.

	Fri May 13 21:21:00 1994  DJ Delorie (dj@ctron.com)

	* makefile.dos: define a default target, or archives won't work
	  due to multiple matches.

	Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)

	* configure.bat: update for latest files
	* makefile.dos: update for correct targets and sources
	* coff-go32.c: [new] go32's COFF format (i386coff with underscores)
	* targets.c: add go32coff target
	* makefile.in: add coff-go32.c support

Thu May 26 10:10:21 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_prep_headers): Do not set the system_id here, private
	bfd data has not been copied yet.
	(som_write_headers): Instead do it here.

Tue May 24 16:17:18 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Make MIPS ELF use new ELF backend linker.  No shared library
	support yet.
	* elf32-mips.c (bfd_mips_elf32_swap_gptab_in): New function.
	(bfd_mips_elf32_swap_gptab_out): New function.
	(mips_elf_object_p): If last symbol is LOCAL, set elf_bad_symtab.
	(mips_elf_final_write_processing): Set sh_info field for .gptab.*
	sections.
	(mips_elf_fake_sections): Set sh_entsize for .gptab.* sections.
	(mips_elf_read_ecoff_info): Read and free external symbols last,
	not first, for clarity.
	(struct mips_elf_link_hash_entry): Define new structure.
	(struct mips_elf_link_hash_table): Define new structure.
	(mips_elf_link_hash_lookup): Define new macro.
	(mips_elf_link_hash_traverse): Define new macro.
	(mips_elf_hash_table): Define new macro.
	(mips_elf_link_hash_newfunc): New static function.
	(mips_elf_link_hash_table_create): New static function.
	(mips_elf_add_symbol_hook): New static function.
	(struct extsym_info): Define new structure.
	(mips_elf_get_extr, mips_elf_set_index): Remove.
	(mips_elf_output_extsym): New static function.
	(gptab_compare): New static function.
	(mips_elf_final_link): Rewrite to use ELF backend linker, and to
	merge gptab information in input files.
	(mips_elf_relocate_hi16): New static function.
	(mips_elf_relocate_section): New static function.
	(bfd_elf32_bfd_link_hash_table_create): Define as macro before
	including elf32-target.h.
	(elf_backend_relocate_section): Likewise.
	(elf_backend_add_symbol_hook): Likewise.
	* elf.c (_bfd_elf_link_hash_newfunc): Rename from
	elf_link_hash_newfunc and make globally visible.  Change caller.
	(_bfd_elf_link_hash_table_init): New function, broken out of
	_bfd_elf_link_hash_table_create.
	(_bfd_elf_link_hash_table_create): Use
	_bfd_elf_link_hash_table_init.
	* libelf.h (struct elf_obj_tdata): Add new field bad_symtab.
	(elf_bad_symtab): Define new accessor macro.
	(_bfd_elf_link_hash_newfunc): Declare.
	(_bfd_elf_link_hash_table_init): Declare.
	* elfcode.h (elf_object_p): Call backend object_p hook after
	swapping in all the section headers.
	(map_program_segments): Correct typo: Internal for External.
	(elf_link_add_object_symbols): If elf_bad_symtab is set, read all
	the symbols.  Skip STB_LOCAL symbols rather than giving an error.
	(elf_bfd_final_link): If elf_bad_symtab is set, allocate space for
	all symbols, not just locals.
	(elf_link_output_extsym): Only skip a symbol not mentioned by a
	regular file if it is mentioned by a dynamic object.
	(elf_link_input_bfd): If elf_bad_symtab is set, read all the
	symbols.

Fri May 20 13:38:23 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_set_reloc_info): Do not set any relocation info
	for SOM fixups which are never passed to BFD.

Fri May 20 11:57:05 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-mips.c (mips_relocate_section): Add MIPS_R_JMPADDR overflow
	checking.

	* elf32-i386.c (elf_i386_size_dynamic_sections): Add DT_DEBUG to
	the dynamic linking information for the benefit of the debugger.
	From Peter Schauer.
	* elf32-sparc.c (elf32_sparc_size_dynamic_sections): Likewise.

	* elf.c (_bfd_elf_make_section_from_shdr): New function, based on
	code repeated three times in bfd_section_from_shdr in elfcode.h.
	* libelf.h (_bfd_elf_make_section_from_shdr): Declare.
	* elfcode.h (bfd_section_from_shdr): Use new function
	_bfd_elf_make_section_from_shdr to create BFD sections.  If a
	reloc section does not use the main symbol table, or it is part of
	the process image, treat it as a normal section, not relocs.
	* elf32-mips.c (mips_elf_section_from_shdr): Use new function
	_bfd_elf_make_section_from_shdr.

Thu May 19 11:37:11 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elf32-target.h, elf64-target.h: Change ar_max_namelen value from
	15 to 14 to match SVR4 ar.

	Add support for ELF shared libraries.  Loosely based on work by
	Eric Youngdale <ericy@cais.com>.
	* libelf.h (struct elf_backend_data): Add new fields for dynamic
	linking: elf_backend_create_dynamic_sections,
	elf_backend_adjust_dynamic_symbol,
	elf_backend_size_dynamic_sections,
	elf_backend_finish_dynamic_symbol,
	elf_backend_finish_dynamic_sections.
	(struct elf_link_hash_entry): Change type of align field to
	bfd_size_type.  Add fields dynindx, dynstr_index, weakdef,
	elf_link_hash_flags.
	(struct elf_link_hash_table): Add fields dynobj, dynsymcount,
	dynstr, bucketcount.
	(bfd_elf32_swap_reloc_in, bfd_elf32_swap_reloc_out): Declare.
	(bfd_elf32_swap_reloca_in, bfd_elf32_swap_reloca_out): Declare.
	(bfd_elf32_swap_dyn_in, bfd_elf32_swap_dyn_out): Declare.
	(bfd_elf32_add_dynamic_entry): Declare.
	(bfd_elf64_swap_reloc_in, bfd_elf64_swap_reloc_out): Declare.
	(bfd_elf64_swap_reloca_in, bfd_elf64_swap_reloca_out): Declare.
	(bfd_elf64_swap_dyn_in, bfd_elf64_swap_dyn_out): Declare.
	(bfd_elf64_add_dynamic_entry): Declare.
	* elfcode.h (Elf_External_Dyn): Define.
	(elf_swap_reloc_in): Define as macro using NAME.  Make externally
	visible.
	(elf_swap_reloc_out): Likewise.
	(elf_swap_reloca_in, elf_swap_reloca_out): Likewise.
	(elf_swap_dyn_in, elf_swap_dyn_out): Define as macro using NAME
	and as new externally visible function.
	(elf_fake_sections): Set section type of dynamic sections based on
	section names.
	(elf_write_phdrs): Remove.
	(assign_file_position_for_section): Add new align argument.
	Change all callers.
	(get_program_header_size): New static function.
	(struct seg_info): Remove.
	(map_program_segments): Completely rewrite.
	(assign_file_positions_except_relocs): Completely rewrite.
	(assign_file_positions_for_relocs): Don't set a file position for
	sections which already have one.  Don't bother to align the file
	position here.
	(section_from_elf_index): Handle SHT_HASH and SHT_DYNAMIC
	section types.
	(elf_section_from_bfd_section): Likewise.
	(elf_slurp_symbol_table): If section_from_elf_index fails, just
	use bfd_abs_section rather than returning an error.
	(elf_sizeof_headers): Make useful.
	(elf_link_record_dynamic_symbol): New static function.
	(elf_link_add_object_symbols): Handle dynamic objects.
	(elf_link_create_dynamic_sections): New static function.
	(elf_add_dynamic_entry): Define as macro using NAME and as new
	externally visible function.
	(NAME(bfd_elf,record_link_assignment)): New function.
	(elf_buckets): New static variable.
	(NAME(bfd_elf,size_dynamic_sections)): New function.
	(struct elf_final_link_info): Add dynsym_sec and hash_sec fields.
	(elf_bfd_final_link): Handle dynamic linking.  Create a section
	symbol for all ELF sections, not all BFD sections.  Store section
	symbol index in target_index field, not index field.  Traverse
	over global symbols even if stripping.
	(elf_link_output_extsym): Output dynamic symbols.  Mark symbols
	defined by dynamic objects as undefined.
	(elf_link_input_bfd): Ignore dynamic objects.  Use target_index
	field for section relocs, and make sure it is set.
	(elf_reloc_link_order): Use target_index field for section relocs,
	and make sure it is set.
	* elf.c (elf_link_hash_newfunc): Initialize dynindx, dynstr_index,
	weakdef and elf_link_hash_flags fields.
	(_bfd_elf_link_hash_table_create): Initialize dynobj, dynsymcount,
	dynstr and bucketcount fields.
	* elf32-target.h: Initialize new dynamic linking fields.
	* elf64-target.h: Likewise.  
	* elf32-i386.c: New functions for dynamic linking support.
	* elf32-sparc.c: Likewise.
	* bfd-in.h (bfd_elf32_record_link_assignment): Declare.
	(bfd_elf64_record_link_assignment): Declare.
	(bfd_elf32_size_dynamic_sections): Declare.
	(bfd_elf64_size_dynamic_sections): Declare.
	* bfd-in2.h: Rebuilt.

Wed May 18 08:29:04 1994  Ian Lance Taylor  (ian@cygnus.com)

	* som.c: Don't include <sys/dir.h> or <sys/user.h>.
	(som_reloc_queue_find): Call memcmp instead of bcmp.
	(som_bfd_reloc_type_lookup): Change first argument to bfd *.
	(compare_syms): Change types of arguments to const void *.
	(bfd_section_from_som_symbol): Removed unused local found.
	(som_write_armap): Add elength, map, orl_count and int arguments.
	(som_write_armap): Use %ld and cast to long for getuid result.

Wed May 18 09:09:32 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.h (R_HPPA_ABS_CALL): Define.
	* elf32-hppa.c (hppa_elf_gen_reloc_type): Handle absolute calls.

	* som.h (R_HPPA_ABS_CALL): Define.
	* som.c (hppa_som_gen_reloc_type): Delete complex relocation types.

Tue May 17 19:33:12 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* coff-i960.c (icoff_little_vec, icoff_big_vec): Indicate leading
	underscore, for compatibility with Intel tool chain (gnu960v2).

Mon May 16 10:09:22 1994  Jeff Law  (law@snake.cs.utah.edu)

	* bfd-in2.h: Rebuilt.

	* elf32-hppa.c: Change .hppa_linker_stubs to .PARISC.stubs,
	likewise for other PA specific sections.
	(hppa_elf_relocate_unwind_table): Delete unused
	function.
	(elf_hppa_howto_table): Completely new table based on 94-02-02
	draft PA ELF spec.  Change relocation tags appropriately
	throughout elf32-hppa.c
	(hppa_elf_gen_reloc_type): Rewrite and simplify based on 94-02-02
	spec.
	(hppa_elf_reloc): Likewise.
	(hppa_look_for_stubs_in_section): Likewise
	(ELF_MACHINE_CODE): Change to EM_PARISC.
	* elf32-hppa.h: Include "elf/hppa.h".  Change relocation tags 
	appropriately throughout elf32-hppa.h.
	(elf32_hppa_reloc_type): New table based on 94-02-02 draft PA ELF
	spec.
	(R_HPPA_ABS_CALL, R_HPPA_COMPLEX*, R_HPPA_UNWIND): Delete definitions.
	* elfcode.h (prep_headers): Use EM_PARISC instead of EM_HPPA.
	* reloc.c (bfd_reloc_code_real): Delete unused HPPA relocations.
	* som.h (R_HPPA_ABS_CALL, R_HPPA_COMPLEX): Delete definitions.

	* libhppa.h (hppa_field_adjust): Avoid adding constant_value into
	the final value twice for LR and RR field selectors.

Sat May 14 09:09:19 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* aoutx.h (add_to_stringtab): Use BFD_ASSERT not assert.  This
	avoids __eprintf troubles.

Fri May 13 10:51:21 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* bout.c (b_out_bfd_reloc_type_lookup): Handle BFD_RELOC_CTOR.

	* config/mipsbelf.mt (SELECT_VECS): Add ecoff_big_vec and
	ecoff_little_vec since Irix 5 supports ECOFF executables.

Wed May 11 00:31:57 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_find_nearest_line): Handle fdr.adr != pdr.adr
	correctly.

	* Makefile.in (stmp-bfd.h): Use || instead of ; to force SunOS
	make to invoke the shell.

Tue May 10 14:23:43 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* section.c (SEC_COFF_SHARED_LIBRARY): Renamed from
	SEC_SHARED_LIBRARY for clarity.  Changed all uses.
	* bfd-in2.h: Rebuilt.
	* coffcode.h (sec_to_styp_flags): If SEC_COFF_SHARED_LIBRARY is
	set, set STYP_NOLOAD.
	* coffgen.c (coff_section_from_bfd_index): Don't get an assertion
	failure because of a bad shared library.

Mon May  9 18:53:40 1994  Bill Cox  (bill@rtl.cygnus.com)

	* linker.c: Add missing comment terminator.

Mon May  9 11:53:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* linker.c (_bfd_generic_link_add_one_symbol): If hashp and *hashp
	are not NULL, assume the caller has already looked up the symbol
	in the hash table and has stored the entry in *hashp.
	(generic_link_add_symbol_list): Set h to NULL before calling
	_bfd_generic_link_add_one_symbol.
	* ecoff.c (ecoff_link_add_externals): Likewise.

	* elfcode.h (assign_file_positions_except_relocs): Don't require
	page shared between .data and .bss segments to contain zeroes.

	* elfcode.h: Include bfdlink.h.  Added several new functions to do
	linking.
	(ELF_R_TYPE): Define.
	(bfd_add_to_strtab): Return unsigned long.  Change check for
	realloc failure.
	(elf_fake_sections): Check return value of bfd_add_to_strtab.
	(elf_compute_section_file_positions): Add link_info argument.
	Call elf_backend_begin_write_processing hook and prep_headers
	here.  Only call swap_out_syms if link_info is NULL.  Set up
	.shstrtab section here.  Pass dosyms argument to
	assign_file_positions_except_relocs.  Set output_has_begun flag.
	(assign_file_positions_for_symtab_and_strtabs): Add dosyms
	argument, and use it to control setting .symtab and .strtab file
	positions.
	(assign_file_positions_except_relocs): Add dosyms argument, and
	pass it on.
	(prep_headers): Check return value of bfd_add_to_strtab.
	(swap_out_syms): Likewise.  Also, don't set up .shstrtab here.
	(NAME(bfd_elf,write_object_contents)): Some calls moved into
	elf_compute_section_file_positions.
	(elf_set_section_contents): Likewise.
	(elf_slurp_symbol_table): SHN_LORESERV corrected to SHN_LORESERVE.
	* libelf.h: Include bfdlink.h.
	(struct elf_backend_data): Add fields collect,
	elf_add_symbol_hook, elf_backend_relocate_section.
	(struct bfd_elf_section_data): Add field rel_hashes.
	(struct elf_obj_tdata): Remove fields internal_syms and symbols.
	Add field sym_hashes.
	(obj_symbols, obj_internal_syms): Remove definitions.
	(elf_sym_hashes): Define.
	(struct elf_link_hash_entry): Define.
	(struct elf_link_hash_table): Define.
	(elf_link_hash_lookup): Define.
	(elf_link_hash_traverse): Define.
	(elf_hash_table): Define.
	(_bfd_elf_link_hash_table_create): Declare.
	(bfd_elf32_bfd_link_add_symbols): Declare.
	(bfd_elf32_bfd_final_link): Declare.
	(bfd_elf64_bfd_link_add_symbols): Declare.
	(bfd_elf64_bfd_final_link): Declare.
	* elf.c: Include bfdlink.h.
	(elf_link_hash_newfunc): New function.
	(_bfd_elf_link_hash_table_create): New function.
	* elf32-target.h (elf_backend_relocate_section): If not defined,
	define as 0 and use generic linker.  Otherwise, use ELF backend
	linker.
	(elf_backend_collect): If not defined, define as false.
	(elf_backend_add_symbol_hook): If not defined, define as 0.
	(elf32_bed): Initialize new fields.
	* elf64-target.h: Same changes as elf32-target.h.
	* elf32-i386.c: Include bfdlink.h.
	(elf_i386_relocate_section): New function.
	(elf_backend_relocate_section): Define.
	* elf32-sparc.c: Include bfdlink.h.
	(elf_info_to_howto): Change type of dst from Elf32_Internal_Rela
	to Elf_Internal_Rela (they're the same type anyhow).
	(elf_sparc_relocate_section): New function.
	(elf_backend_relocate_section): Define.
	* elf32-mips.c (elf_backend_collect): Define.

	* Makefile.in (stmp-bfd.h): Avoid useless make error message in a
	different way; touch takes a numeric argument on some systems.

Fri May  6 13:34:14 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmcode.h (nlm_swap_auxiliary_headers_in): Rework custom header
	handling for latest suggested format.
	(nlm_swap_auxiliary_headers_out): Likewise.
	(nlm_compute_section_file_positions): Likewise.

Fri May  6 11:11:50 1994  D. V. Henkel-Wallace  (gumby@rtl.cygnus.com)

	* config.bfd: handle erricsson config (for OSE).

Thu May  5 15:40:47 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	Patches from Ralph Campbell:
	* mipsbsd.c (mips_fix_jmp_addr): New function.
	(mips_fix_hi16_s): Use bfd_is_com_section.
	(mips_howto_table_ext): Call mips_fix_jmp_addr for MIPS_RELOC_JMP.

Fri May  6 11:48:55 1994  Steve Chamberlain  (sac@cygnus.com)

	* config/go32.mh: XX support.

	From bill
	* Makefile.in: Build sysdep.h without causing worrying but
	harmless error message.

Wed May  4 11:09:53 1994  Ian Lance Taylor  (ian@cygnus.com)

	Changed m68k-aout to set flags to 0; m68k-sunos still uses 1.
	* aout0.c: New file.
	* targets.c (aout0_big_vec): Declare.
	(bfd_target_vector): Add aout0_big_vec.
	* config.bfd (m68*-*-aout*): Use m68k-0aout, not m68k-aout.
	* config/m68k-aout.mt (SELECT_VECS): Removed.
	* config/m68k-0aout.mt: New file.
	* configure.in (aout0_big_vec): New target vector: use aout0.o,
	aout32.o and stab-syms.o.
	* Makefile.in: Rebuilt dependencies.
	(BFD32_BACKENDS): Add aout0.o.
	(CFILES): Add aout0.c.

	* libaout.h (struct aout_backend_data): Add field exec_hdr_flags.
	* aout-target.h (MY_exec_hdr_flags): If not defined, define as 0.
	MY(backend_data): Initialize exec_hdr_flags field.
	* aoutf1.h (sunos_32_set_arch_mach): Make static.
	(aout32_sunos4_write_object_contents): Set flags from backend
	info.
	(MY_exec_hdr_flags): If not defined, define as 1.
	(sunos4_aout_backend): Initialize exec_hdr_flags field.
	* aout-encap.c (encap_write_object_contents): Set flags from
	backend info.
	(MY_exec_hdr_flags): Define as N_FLAGS_COFF_ENCAPSULATE.
	* hp300hpux.c (MY_exec_hdr_flags): Define as 0x2.
	(MY(write_object_contents)): Set flags from backend info.
	* i386aout.c (MY(backend_data)): Initialize exec_hdr_flags field.
	* i386mach3.c (MY(backend_data)): Likewise.
	* mipsbsd.c (MY(backend_data)): Likewise.
	* sparclynx.c (NAME(aout,sparclynx_write_object_contents)): Set
	flags from backend info.
	(sparclynx_aout_backend): Initialize exec_hdr_flags field.

Wed May  4 02:56:00 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config.bfd (i386-*-gnu*): Treat like i386-*-mach*.
	(m68*-apollo-*): Treat all Apollo configs the same, don't handle
	BSD specially.

Tue May  3 19:43:21 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* cache.c: Rewrote to work correctly.
	* libbfd.h: Rebuilt.
	* opncls.c (bfd_cache_init, bfd_open_file): Don't declare.
	(bfd_fdopenr): Check return value of bfd_cache_init.

Fri Apr 29 15:08:23 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* cf-m68klynx.c (CALC_ADDEND): Check for PC relative relocs by
	enumerating them, since the reloc type can not serve as an index
	into the m68k COFF howto_table.

Fri Apr 29 09:42:39 1994  Steve Chamberlain  (sac@cygnus.com)

        * config.bfd (*-go32): Changed to coff.
	* coff-h8300.c (JMPL1): Get HOWTO right for 24bit branches.
	* srec.c (srec_write_symbols): Write out the correct number of
	symbols and don't stick in extra nulls.

Tue Apr 26 15:07:24 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* cf-sparclynx.c (LYNXOS, COFF_LONG_FILENAMES): Define.
	* coff-sparc.c (BADMAG): Recognize LYNXCOFFMAGIC.
	(COFF_SPARC): Define.
	* coffcode.h (coff_new_section_hook): If COFF_SPARC, set alignment
	power of data and bss sections to 3.
	* hosts/lynx.h (__LYNXOS): Define.

Tue Apr 26 15:04:26 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (hppa_elf_reloc): Adjust the addend of relocations
	against section symbols to avoid losing during ld -r.

Tue Apr 26 12:16:41 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (shstrtab_length_fixed): Remove useless static
	variable.
	(struct elf_sect_data): Remove unused structure.
	(elf_object_p): Free memory if error occurs.  Check return value
	of bfd_default_set_arch_mach.  If elf_get_str_section fails,
	preserve error code rather than setting wrong_format.
	(null_shdr): Remove static variable.
	(assign_section_numbers): Remove shstrtab_length_fixed assignment.
	Allocate first section header on BFD obstack rather than using
	null_shdr.
	(bfd_prpsinfo): Remove unused local variable newsect.

Mon Apr 25 15:31:04 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (write_relocs): Undo patch of Apr 10; breaks Solaris.

	* elfcode.h (bfd_section_from_shdr): Use bfd_make_section_anyway
	to create sections.  Check return value of recursive calls.
	(bfd_section_from_phdr): Check return value of bfd_make_section.
	(elf_symbol_from_bfd_symbol): Likewise.
	(elf_object_p): Check return value of bfd_section_from_shdr.
	(section_from_elf_index): Likewise.
	(elf_slurp_symbol_table): Check return value of
	section_from_elf_index.
	(bfd_prstatus): Return boolean value.  Check return value of
	bfd_make_section.
	(bfd_fpregset): Likewise.
	(bfd_prpsinfo): Return boolean value.
	(elf_corefile_note): Check return values of bfd_prstatus,
	bfd_fpregset, and bfd_prpsinfo.
	(elf_core_file_p): Check return value of elf_corefile_note.

Fri Apr 22 11:08:38 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Get rid of the ECOFF .reginfo section hack.
	* ecoff.c (ecoff_mkobject_hook): Don't create a .reginfo section.
	(ecoff_new_section_hook): Don't handle the .reginfo section.
	(ecoff_sizeof_headers): Likewise.
	(ecoff_get_section_contents): Likewise.
	(ecoff_compute_section_file_positions): Likewise.
	(ecoff_compute_reloc_file_positions): Likewise.
	(ecoff_set_section_contents): Likewise.
	(ecoff_write_object_contents): Likewise.
	(ecoff_bfd_final_link): Likewise.
	(ecoff_bfd_copy_private_bfd_data): Copy the GP value and the
	register masks.
	(bfd_ecoff_get_gp_value): New function.
	(bfd_ecoff_set_gp_value): New function.
	(bfd_ecoff_set_regmasks): New function.
	* bfd-in.h (bfd_ecoff_get_gp_value): Declare.
	(bfd_ecoff_set_gp_value): Declare.
	(bfd_ecoff_set_regmasks): Declare.
	* bfd-in2.h: Rebuilt.

	Fix ECOFF objcopy to actually copy debugging information.
	* ecoff.c (ecoff_bfd_copy_private_bfd_data): New function.
	(ecoff_get_extr): Assume that any ECOFF symbol with local clear is
	an external symbol, rather than checking the symbol flags.  Only
	check the flags for non-ECOFF symbols.
	* ecofflink.c (bfd_ecoff_debug_externals): Don't crash if the
	output_section field of the symbol section is NULL.
	* libecoff.h (ecoff_bfd_copy_private_bfd_data): Declare as
	function rather than defining as macro.

	* ieee.c (ieee_object_p): Set bfd_error_got_wrong_format if
	appropriate.

	* targets.c (bfd_target_vector): Add bfd_elf32_powerpc_vec.

	* aout-adobe.c (aout_adobe_set_arch_mach): Check return value of
	bfd_default_set_arch_mach.  Accept bfd_arch_m68k as well as
	bfd_arch_unknown.
	* coffcode.h (coff_set_arch_mach): Check return value of
	bfd_default_set_arch_mach.
	* elfcode.h (elf_set_arch_mach): Don't check a list of ELF
	architectures, just see if the desired architecture matches what
	the ELF backend permits.

	* coffcode.h (coff_set_arch_mach_hook): Rename SHMAGIC to
	SH_ARCH_MAGIC to match change in coff/sh.h.
	(coff_set_flags): Likewise.

	Follow convention in which each NLM header has an 8 byte stamp
	followed by a four byte length.
	* libnlm.h (struct nlm_obj_tdata): Rename nlm_cygnus_section_hdr
	to nlm_cygnus_ext_header, and change type to
	Nlm_Internal_Cygnus_Ext_Header.
	(nlm_cygnus_ext_header): Rename from nlm_cygnus_section_header.
	* nlmcode.h (nlm_swap_auxiliary_headers_in): Use CyGnUsEx instead
	of CyGnUsSeCs.  Rename from cygnus_section to cygnus_ext.  Require
	length word to be 8.
	(nlm_swap_auxiliary_headers_out): Rename from cygnus_section to
	cygnus_ext.  Set length word to 8.
	(nlm_compute_section_file_positions): Rename from cygnus_section
	to cygnus_ext.

Thu Apr 21 22:54:22 1994  Stu Grossman  (grossman at cygnus.com)

	* nlmcode.h (nlm_swap_auxiliary_headers_in):  Keep section table
	(from CyGnUsSeCs) in more permanent memory to keep section names
	from getting trashed.

Thu Apr 21 09:29:37 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* libelf.h (elf_obj_tdata):  Add members for dynamic symbol table
	handling.
	* elfcode.h (bfd_section_from_shdr):  Handle dynamic symbol table.
	* elfcode.h (elf_slurp_symbol_table):  Take additional parameter
	to select static or dynamic symbol table and return number of
	symbols slurped or -1 on error.
	* elfcode.h (elf_get_symtab):  Set bfd symcount from
	elf_slurp_symbol_table result.
	* elfcode.h (elf_get_dynamic_symtab_upper_bound,
	elf_canonicalize_dynamic_symtab):  New functions to handle dynamic
	symbol table.
	* elf32-target.h, elf64-target.h (BFD_JUMP_TABLE_DYNAMIC):
	Change to handle dynamic symbol table, provide default definitions
	for dynamic relocs.
	* aoutx.h (howto_table_std, NAME(aout,swap_std_reloc_out),
	NAME(aout,swap_std_reloc_in), aout_link_input_section_std,
	aout_link_reloc_link_order):  Handle r_jmptable and r_relative
	relocations.

Thu Apr 21 11:58:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Clean up uses of _bfd_dummy_target (from Peter Schauer).
	* libbfd.c (_bfd_dummy_target): Set bfd_error_wrong_format.
	* nlm-target.h (nlm_core_file_p): Define as _bfd_dummy_target, not
	NULL.
	* srec.c (srec_vec): Use _bfd_dummy_target, not NULL, in
	_bfd_check_format.
	(symbolsrec_vec): Likewise.
	* tekhex.c (tekhex_vec): Likewise.

	* libnlm.h (struct nlm_obj_tdata): Add nlm_cygnus_section_hdr
	field.
	(nlm_cygnus_section_header): New accessor macro.
	* nlmcode.h (nlm_object_p): Free new tdata structure if failure.
	Add fixed sections before swapping in auxiliary headers.  After
	adding sections, treat errors as real, not as wrong format.
	(nlm_swap_auxiliary_headers_in): Swap in the sections header; add
	sections to the BFD for each section it describes.
	(nlm_swap_auxiliary_headers_out): Swap out the sections header.
	(nlm_compute_section_file_positions): Account for the size of the
	sections header.

Wed Apr 20 16:45:51 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* coff-sparc.c (sparccoff_vec): Change minimum alignment power to
	2, so that stab sections can be multiples of 4 bytes only.

	* hosts/i386aix.h: Changes to avoid prototypes conflicts with the
	ones defined in stdlib.h.  (From Minh Tran-Le.)

Wed Apr 20 14:15:21 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlm32-ppc.c: Complete rewrite for new version of PowerPC
	NetWare.  Old code still present, but ifdeffed out.

	* nlmcode.h (nlm_swap_auxiliary_headers_in): Don't assume a
	particular format for the customer header.  Allocate a block of
	memory and read it into that.
	(nlm_swap_auxiliary_headers_out): Write out the block of memory.
	(nlm_compute_section_file_positions): Include length of customer
	header when computing its size.

Mon Apr 18 14:27:17 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_prep_headers): Get the space's number from the
	backend private section data rather than target_index.
	(bfd_som_set_section_attributes): Store the space's number
	in the backend private section data rather than target_index.

	* som.h (som_copyable_section_data_struct): Add space_number.

Fri Apr 15 12:22:07 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-a29k.c (reloc_processing): Always set the address of a
	R_IHCONST reloc to that of the immediately preceding R_IHIHALF.
	gas does this anyhow, but some other assemblers seem to leave
	garbage in the R_IHCONST address field.

	* archive.c: Consistently use ARFMAG; from
	schwab@issan.informatik.uni-dortmund.de (Andreas Schwab).
	(_bfd_write_archive_contents): Use ARFMAG rather than '`' and
	'\012'.
	(bsd_write_armap): Likewise.
	(coff_write_armap): Likewise.

	* coff-mips.c (mips_relocate_section): When relaxing, adjust local
	relocs against the .text section as required.
	* ecofflink.c (bfd_ecoff_debug_accumulate): When relaxing, adjust
	PDR addresses as required.

	* ecoff.c (ecoff_emit_aggregate): Take fdr argument.  Map fdr
	index through rfd map if it exists.  Check for a couple of cases
	which gdb handles specially.  Change all callers.
	(ecoff_type_to_string): Take fdr argument rather than aux_ptr and
	bigendian argument.  Change all callers.
	(ecoff_print_symbol): Handle stStruct, stUnion and stEnum.

Thu Apr 14 13:05:10 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-mips.c (mips_howto_table): Add dummy entries to account for
	numbering changes in include/coff/mips.h.  Add entries for
	MIPS_R_RELHI and MIPS_R_RELLO.
	(mips_ecoff_swap_reloc_in): Handle an extra bit for the reloc type
	when little endian.  Treat internal MIPS_R_RELLO or MIPS_R_RELHI
	relocs like MIPS_R_SWITCH, and convert r_offset from 24 to 32
	bits.
	(mips_ecoff_swap_reloc_out): Likewise.
	(mips_adjust_reloc_in): Handle internal MIPS_R_RELLO or
	MIPS_R_RELHI relocs like MIPS_R_SWITCH.
	(mips_adjust_reloc_out): Likewise.
	(mips_relhi_addr, mips_relhi_addend): New static variables.
	(mips_relhi_reloc, mips_rello_reloc): New functions.
	(mips_bfd_reloc_type_lookup): Turn BFD_RELOC_PCREL_HI16_S into
	MIPS_R_RELHI and turn BFD_RELOC_PCREL_LO16 into MIPS_R_RELLO.
	(mips_relocate_hi): Rename from mips_relocate_refhi, and add pcrel
	argument.  Changed all callers.
	(mips_relocate_section): Rename got_reflo to got_lo and
	reflo_int_rel to lo_int_rel.  Handle MIPS_R_RELLO and MIPS_R_RELHI
	relocs.
	(mips_relax_section): Adjust MIPS_R_RELHI/MIPS_R_RELLO pairs when
	expanding a PC relative call.

	* reloc.c (bfd_reloc_code_real_type): Add BFD_RELOC_PCREL_HI16_S
	and BFD_RELOC_PCREL_LO16.
	* bfd-in2.h: Rebuilt.

Wed Apr 13 11:50:07 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* coff-sparc.c (sparccoff_vec): Set minimum alignment power to 3.

Tue Apr 12 13:36:20 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_write_fixups): Always emit at least
        one relocation for any non-bss section.

Mon Apr 11 14:41:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (assign_file_positions_except_relocs): Don't require
	the file alignment to correspond to the page size when linking
	with -N.

Sun Apr 10 01:02:24 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elfcode.h (write_relocs): For rela relocations, adjust the
	addend for relocations involving section symbols to account
	for the lossage of 1:1 mapping from input section symbols to
	output section symbols.

Fri Apr  8 12:22:02 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (NAME(aout,make_sections)): New function.
	(NAME(aout,some_aout_object_p)): Call NAME(aout,make_sections)
	rather than making sections inline.
	(NAME(aout,mkobject)): Don't make any sections.
	(NAME(aout,adjust_sizes_and_vmas)): Call NAME(aout,make_sections).
	(NAME(aout,final_link)): Don't dereference obj_textsec (abfd) or
	obj_datasec (abfd) if they are NULL.
	* libaout.h (NAME(aout,make_sections)): Declare.
	* bout.c (b_out_mkobject): Don't make any sections.
	(b_out_write_object_contents): Call aout_32_make_sections.
	(b_out_set_section_contents): Likewise.
	* i386os9k.c (os9k_mkobject): Don't make any sections.
	(os9k_write_object_contents): Call aout_32_make_sections.
	(os9k_set_section_contents): Likewise.

	* aoutx.h (NAME(aout,new_section_hook)): Don't set N_EXT in target
	index.

Wed Apr  6 20:44:56 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config.bfd, configure.host:  Add mips-*-sysv4* support.

Thu Apr  7 14:23:05 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-mips.c (mips_howto_table): Add entry for MIPS_R_SWITCH.
	(mips_ecoff_swap_reloc_in): For MIPS_R_SWTICH, copy r_symndx into
	r_offset and set r_symndx to RELOC_SECTION_TEXT.
	(mips_ecoff_swap_reloc_out): For MIPS_R_SWITCH, get the r_symndx
	value from the r_offset field.
	(mips_adjust_reloc_in): Maximum r_type value is now MIPS_R_SWITCH.
	For MIPS_R_SWITCH, copy the r_offset field into the addend field.
	(mips_adjust_reloc_out): For MIPS_R_SWITCH, copy the addend field
	into the r_offset field.
	(mips_switch_reloc): New function.
	(mips_bfd_reloc_type_lookup): Translate BFD_RELOC_GPREL32 into
	MIPS_R_SWITCH.
	(mips_relocate_section): Handle MIPS_R_SWITCH.
	(mips_relax_section): Adjust MIPS_R_SWITCH offset if necessary.

Thu Apr  7 11:10:51 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elfcode.h (elf_set_section_contents): Support calling the backend
	function elf_backend_begin_write_processing when just beginning to
	write an object file.

	* libelf.h (elf_backend_begin_write_processing): Declare.

	* elf{32,64}-target.h (elf_backend_begin_write_processing): Provide
	a default definition.
	(elf{32,64}_bed): Add elf_backend_begin_write_processing.
	
	* elf32-hppa.h (elf_hppa_tc_symbol): Delete extern declaration.
	(elf_hppa_tc_make_sections): Likewise.

	* elf32-hppa.c (symext_chain_built): Delete.
	(symext_chain_size): Renamed from symextn_contents_real_size.
	(elf32_hppa_backend_{begin,final}_write_processing): New functions.
	(add_entry_to_symext_chain): New function.
	(hppa_elf_set_section_contents): Ignore writes to the symbol extension
	section until it's been rebuilt internally.
	(hppa_elf_get_section_contents): Symbol extension section is no
	longer special.
	(elf_backend_{begin,final}_write_processing): Define.
	(elf_hppa_tc_make_sections): Simplify now that much code has
	migrated into elf32_hppa_backend_{being,final}_write_processing.

Wed Apr  6 17:24:14 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Add new target vectors to read the dynamic symbols and dynamic
	relocs.  Change a.out to use these rather than reading the dynamic
	symbols and relocs along with the normal symbols and relocs.
	* targets.c (bfd_target): Add fields
	_bfd_get_dynamic_symtab_upper_bound,
	_bfd_canonicalize_dynamic_symtab,
	_bfd_get_dynamic_reloc_upper_bound,
	_bfd_canonicalize_dynamic_reloc.
	(BFD_JUMP_TABLE_DYNAMIC): Define.
	* libbfd-in.h (_bfd_nodynamic_get_dynamic_symtab_upper_bound):
	Define.
	(_bfd_nodynamic_canonicalize_dynamic_symtab): Define.
	(_bfd_nodynamic_get_dynamic_reloc_upper_bound): Define.
	(_bfd_nodynamic_canonicalize_dynamic_reloc): Define.
	* bfd.c (bfd_get_dynamic_symtab_upper_bound): Define.
	(bfd_canonicalize_dynamic_symtab): Define.
	(bfd_get_dynamic_reloc_upper_bound): Define.
	(bfd_canonicalize_dynamic_reloc): Define.
	* sunos.c (MY_read_dynamic_symbols): Don't define.
	(MY_read_dynamic_relocs): Don't define.
	(MY_get_dynamic_symtab_upper_bound): Define.
	(MY_canonicalize_dynamic_symtab): Define.
	(MY_get_dynamic_reloc_upper_bound): Define.
	(MY_canonicalize_dynamic_reloc): Define.
	(struct sunos_dynamic_info): Change type of dynsym_count and
	dynrel_count to long.  Add fields canonical_dynsym and
	canonical_dynrel.
	(sunos_read_dynamic_info): Check that BFD had DYNAMIC flag set.
	Clear info->canonical_dynsym and info->canonical_dynrel.
	(MY(read_dynamic_symbols)): Removed.
	(MY(read_dynamic_relocs)): Removed.
	(sunos_get_dynamic_symtab_upper_bound): New function.
	(sunos_canonicalize_dynamic_symtab): New function.
	(sunos_get_dynamic_reloc_upper_bound): New function.
	(sunos_canonicalize_dynamic_reloc): New function.
	* libaout.h: Declare struct reloc_ext_external and
	reloc_std_external to avoid prototype problems.
	(struct aout_backend_data): Remove fields read_dynamic_symbols and
	read_dynamic_relocs.
	(NAME(aout,translate_symbol_table)): Declare.
	(NAME(aout,swap_ext_reloc_in)): Declare.
	(NAME(aout,swap_std_reloc_in)): Declare.
	* aoutx.h (NAME(aout,translate_symbol_table)): Renamed from
	translate_symbol_table and made non-static.  Changed all callers.
	(NAME(aout,slurp_symbol_table)): Don't read dynamic symbols.
	(NAME(aout,slurp_reloc_table)): Don't read dynamic relocs.
	(NAME(aout,get_reloc_upper_bound)): Don't count dynamic relocs.
	* aoutf1.h (aout_32_sunos4_write_object_contents): Don't bother to
	remove dynamic symbols and relocs.  They will no longer be
	present.
	(MY_read_dynamic_symbols): Don't define.
	(MY_read_dynamic_relocs): Don't define.
	(sunos4_aout_backend): Don't initialize dynamic entry points.
	* aout-target.h (MY_read_dynamic_symbols): Don't define.
	(MY_read_dynamic_relocs): Don't define.
	(MY(backend_data)): Don't initialize dynamic entry points.
	(MY_get_dynamic_symtab_upper_bound): If not defined, define to
	_bfd_nodynamic version.
	(MY_canonicalize_dynamic_symtab): Likewise.
	(MY_get_dynamic_reloc_upper_bound): Likewise.
	(MY_canonicalize_dynamic_reloc): Likewise.
	* All backends: Added BFD_JUMP_TABLE_DYNAMIC to target vector.
	* bfd-in2.h: Rebuilt.
	* libbfd.h: Rebuilt.

	* cf-m68klynx.c: Include sysdep.h.

	* hp300hpux.c: Removed some spaces in uses of NAME to avoid
	problems with traditional C compilers.

	* targets.c (bfd_target): Rearranged fields in target vector.
	Removed _bfd_debug_info_start, _bfd_debug_info_end and
	_bfd_debug_info_accumulate, which were never used.
	(BFD_JUMP_TABLE_GENERIC, BFD_JUMP_TABLE_COPY): Defined.
	(BFD_JUMP_TABLE_CORE, BFD_JUMP_TABLE_ARCHIVE): Defined.
	(BFD_JUMP_TABLE_SYMBOLS, BFD_JUMP_TABLE_RELOCS): Defined.
	(BFD_JUMP_TABLE_WRITE, BFD_JUMP_TABLE_LINK): Defined.
	* All backends: Changed to use the new BFD_JUMP_TABLE_* macros
	rather than the single JUMP_TABLE macro.  Removed many of the
	weird macro definitions needed to support the monolithic
	JUMP_TABLE.
	* bfd-in.h (JUMP_TABLE): Removed.
	* libbfd-in.h: Define a bunch of macros, and declare a few
	functions, for use with the new BFD_JUMP_TABLE_* macros.
	* libbfd.c (_bfd_dummy_new_section_hook): Removed.
	(bfd_false): Set bfd_error_invalid_operation.
	(bfd_nullvoidptr): Likewise.
	(bfd_n1): New function.
	(_bfd_nocore_core_file_matches_executable_p): Renamed from
	_bfd_dummy_core_file_matches_executable_p.
	(_bfd_nocore_core_file_failing_command): Similar rename.  Set
	bfd_error_invalid_operation.
	(_bfd_nocore_core_file_failing_signal): Likewise.
	(_bfd_generic_get_section_contents): Renamed from
	bfd_generic_get_section_contents.  Changed all callers.
	(_bfd_generic_set_section_contents): Similar rename.
	* ieee.c: #if 0 out ieee_bfd_debug_info_start,
	ieee_bfd_debug_info_end, ieee_bfd_debug_info_accumulate.  They
	were never called.
	* bfd-in2.h: Rebuilt.
	* libbfd.h: Rebuilt.

Tue Apr  5 22:10:04 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Crude support for examining dynamic libraries.
	* som.c (som_object_setup): Set DYNAMIC flag for SHL_MAGIC and
	DL_MAGIC objects.
	(som_prep_headers): Preserve the system_id for DYNAMIC objects.
	Use SHL_MAGIC as the magic number of the DYNAMIC flag is set.
	Write exec headers for DYNAMIC objects.
	(som_begin_writing): DYNAMIC objects have the same alignment
	restrictions as D_PAGED objects.
	(bfd_section_from_som_symbol): Treat DYNAMIC objects like EXEC_P
	objects.
	(object_flags): Add DYNAMIC.

Tue Apr  5 17:48:52 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* i386lynx.c, sparclynx.c (NAME): Remove embedded whitespace in
	macro uses, confuses some non-ANSI compilers.

Tue Apr  5 15:50:01 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_free_cached_info): Add missing PARAMS decl.
	Don't free anything if we don't have a bfd_object.
	(som_close_and_cleanup): Call som_bfd_free_cached_info.

Tue Apr  5 11:22:38 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elf32-mips.c (mips_elf_final_link): Don't remove empty sections.
	It turns out not to be required on Irix 5, and it causes problems
	if the sections happen to contain symbols.

	* elfcode.h (write_shdrs_and_ehdr): Correct bfd_write check.

	* aoutx.h (NAME(aout,canonicalize_reloc)): Don't error out if
	section->relocation is NULL; malloc might have returned NULL when
	given a zero size if there were no relocations.
	* bout.c (b_out_canonicalize_reloc): Likewise.
	* coffcode.h (coff_canonicalize_reloc): Likewise.
	* ecoff.c (ecoff_canonicalize_reloc): Likewise.
	* elfcode.h (elf_canonicalize_reloc): Likewise.
	* mipsbsd.c (MY(canonicalize_reloc)): Likewise.
	* i386lynx.c (NAME(lynx,canonicalize_reloc)): Likewise.
	* nlmcode.h (nlm_canonicalize_reloc): Likewise.
	* som.c (som_canonicalize_reloc): Likewise.
	* hp300hpux.c (MY(slurp_reloc_table)): Likewise.  Also, if malloc
	returns NULL, don't report an error if we asked for zero bytes.
	* i386lynx.c (NAME(lynx,slurp_reloc_table)): If malloc returns
	NULL, don't report an error if we asked for zero bytes.
	* nlmcode.h (nlm_slurp_reloc_fixups): Likewise.

Mon Apr  4 15:30:49 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (NAME(aout,bfd_free_cached_info)): Don't free anything
	if we don't have a bfd_object.

	Made sure that every call to bfd_read, bfd_write, and bfd_seek
	checks the return value and handled bfd_error correctly.  These
	changes are not itemised.  Also:
	* aoutx.h (emit_strtab): Change return type to boolean, and return
	errors.
	(NAME(aout,write_syms)): Check emit_strtab return value.
	(NAME(aout,final_link)): Likewise.
	* coffcode.h (coff_write_relocs): Change return type to boolean,
	and return errors.
	(coff_write_object_contents): Check coff_write_relocs return
	value.
	* i386os9k.c (os9k_swap_exec_header_in): Change return type to
	boolean.
	(os9k_object_p): Check os9k_swap_exec_header_in return value.
	* oasys.c (oasys_read_record): Change return type to boolean.
	(oasys_slurp_symbol_table: Check oasys_read_record return value.
	(oasys_object_p, oasys_slurp_section_data): Likewise.
	(oasys_write_record): Change return type to boolean.
	(oasys_write_syms): Likewise.  Also, check oasys_write_record
	return value.
	(oasys_write_sections): Check oasys_write_record return value.
	(oasys_write_header): Change return type to boolean.  Check
	oasys_write_record return value.
	(oasys_write_end, oasys_write_data): Likewise.
	(oasys_write_object_contents): Check return values of
	oasys_write_header, oasys_write_syms, oasys_write_data, and
	oasys_write_end.
	* srec.c (srec_write_record): Change return type to boolean.
	(srec_write_header): Likewise.  Also, check srec_write_record
	return value.
	(srec_write_section, srec_write_terminator): Likewise.
	(srec_write_symbols): Change return type to boolean.
	(internal_srec_write_object_contents): Check return value of
	srec_write_symbols, srec_write_header, srec_write_section, and
	srec_write_terminator.

	* Makefile.in: Rebuilt dependencies.

Mon Apr  4 10:56:45 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* aix386-core.c (aix386_bfd_is_local_label):  Correct cast from
	asection to asymbol.
	* ptrace-core.c (ptrace_unix_bfd_is_local_label):  Correct cast from
	bfd to asymbol.
	* trad-core.c (trad_unix_bfd_is_local_label):  Correct cast from
	asection to asymbol.

Sun Apr  3 18:27:29 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_slurp_string_table): Use malloc to allocate space
	for the cached copy of the native string table.
	(som_slurp_symbol_table): Likewise for the native symbol table.
	(som_slurp_reloc_table): Likewise for the native and generic
	relocation tables.
	(som_bfd_free_cached_info): Free the cached native strings,
	symbols, and relocations.  Also free the canonical cached
	relocations.

Fri Apr  1 12:40:58 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_write_symbols): If keep_memory is false, make
	sure the symbol name is stored in permanent memory before adding
	it to the string table.

	* archive.c (_bfd_write_archive_contents): Once we've found an
	object, don't bother to look for more when deciding whether to
	build a map.
	(compute_and_write_armap): After adding the symbols for a BFD,
	call bfd_free_cached_info on it.

	Add bfd_free_cached_info support to a.out backends.
	* aoutx.h (aout_get_external_symbols): Renamed from
	aout_link_get_symbols.  Read strings even if symbols have been
	read.  Store string size in obj_aout_string_size.
	(NAME(aout,slurp_symbol_table)): Call aout_get_external_symbols to
	read the symbols.  Allocate the cached symbols with malloc, not
	bfd_alloc.
	(NAME(aout,slurp_reloc_table)): Allocate the cached relocs with
	malloc, not bfd_alloc.
	(NAME(aout,bfd_free_cached_info)): New function; free cached
	symbols and relocs.
	* libaout.h (struct aoutdata): Add external_string_size field.
	(obj_aout_external_string_size): New accessor macro.
	(NAME(aout,close_and_cleanup)): Don't declare.
	(NAME(aout,bfd_free_cached_info)): Declare.
	(aout_32_close_and_cleanup): Don't define.
	(aout_64_close_and_cleanup): Don't define.
	* aout-target.h (MY_bfd_free_cached_info): If not already defined,
	define as NAME(aout,free_cached_info).
	(MY_close_and_cleanup): If not already defined, define as
	MY_bfd_free_cached_info.
	* aout-adobe.c (aout_32_close_and_cleanup): Define.
	(aout_32_bfd_free_cached_info): Don't define.
	* bout.c (aout_32_close_and_cleanup): Define.
	(aout_32_bfd_free_cached_info): Don't define.
	* hp300hpux.c (MY_bfd_free_cached_info): Define as bfd_true.
	(MY_close_and_cleanup): Don't define.
	* i386lynx.c (NAME(lynx,slurp_reloc_table)): Allocate the cached
	relocs with malloc, not bfd_alloc.
	* i386os9k.c (aout_32_close_and_cleanup): Define.
	(aout_32_bfd_free_cached_info): Don't define.

	Add a new entry point to free memory cached by a BFD.
	* targets.c (bfd_target): Add _bfd_free_cached_info field.
	* bfd.c (bfd_free_cached_info): Define.
	* bfd-in.h (JUMP_TABLE): Add _bfd_free_cached_info.
	* bfd-in2.h: Rebuilt.
	* All backends: Initialize bfd_free_cached_info entry point to
	bfd_true.

	* elf32-hppa.c (elf_hppa_reloc_type_lookup): Correct type of
	first, unused, argument.
	(hppa_elf_is_local_label): Declare instead of
	som_bfd_is_local_label.

	* coff-a29k.c (a29k_reloc): Add reloc_entry->address to value of
	absolute R_IREL reloc.

Thu Mar 31 11:52:15 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Added some support for Irix 4 shared libraries.
	* ecoff.c (ecoff_new_section_hook): Set SEC_SHARED_LIBRARY for a
	.lib section.
	(ecoff_sec_to_styp_flags): Set SEC_SHARED_LIBRARY if
	STYP_ECOFF_LIB bit is set.
	(ecoff_compute_section_file_positions): Round the contents of a
	.lib section up to the next page boundary.
	(ecoff_set_section_contents): If we see a .lib section, increment
	the vma by one to count the number of shared libraries we have.
	(ecoff_write_object_contents): Don't crash if we see a
	STYP_ECOFF_LIB section, and don't adjust text_start or data_start
	or bss_size either.

	* coffcode.h (CALC_ADDEND): Change to fetch original symbol value
	from original BFD, rather than using value of current BFD symbol.
	Needed for new linker.
	* coff-sparc.c (CALC_ADDEND): Likewise.

	* ecoff.c (ecoff_write_object_contents): Set the text_start and
	data_start entries in the optional header correctly even if a text
	or data section starts at location zero.

	* reloc.c (bfd_reloc_code_real_type): Added BFD_RELOC_26 (from sef
	and raeburn).
	* bfd-in2.h: Rebuilt.

	* nlm32-i386.c (nlm_i386_read_import): Null terminate the symbol
	name.
	* nlm32-alpha.c (nlm_alpha_read_import): Likewise.
	* nlm32-sparc.c (nlm_sparc_read_import): Likewise.

	* coffgen.c (coff_write_symbol): Reindented.  Changed to return
	boolean, and changed written to unsigned int *.  Check error
	returns from called functions.
	(coff_write_alien_symbol): Likewise.
	(coff_write_native_symbol): Likewise.
	(coff_write_symbols): Likewise.  Reworked checks on whether to
	write symbol name to string table for clarity and to avoid core
	dumping when given a non COFF symbol.
	* libcoff-in.h (coff_write_symbols): Declare as returning boolean.
	* libcoff.h: Rebuilt.
	* coffcode.h (coff_write_object_contents): Check return value of
	coff_write_symbols.

Wed Mar 30 16:25:41 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Changes to let BFD return an error indication from
	get_symtab_upper_bound, bfd_canonicalize_symtab,
	bfd_get_reloc_upper_bound, and bfd_canonicalize_reloc.  They now
	return long instead of unsigned int, and use -1 to indicate an
	error.  Along the way, rename get_symtab_upper_bound to
	bfd_get_symtab_upper_bound.
	* bfd.c (bfd_get_reloc_upper_bound): Return long, and -1 on
	errors.
	(bfd_canonicalize_reloc): Likewise.
	* syms.c (bfd_get_symtab_upper_bound): Renamed from
	get_symtab_upper_bound.
	* targets.c (bfd_target): Renamed _get_symtab_upper_bound to
	_bfd_get_symtab_upper_bound, and changed it and
	_bfd_canonicalize_symtab and _get_reloc_upper_bound and
	_bfd_canonicalize_reloc to all return long.
	* aoutx.h (NAME(aout,get_symtab)): Return long, and -1 on errors.
	(NAME(aout,canonicalize_reloc)): Likewise.
	(NAME(aout,get_reloc_upper_bound)): Likewise.
	(NAME(aout,get_symtab_upper_bound)): Likewise.
	* bout.c (b_out_canonicalize_reloc): Likewise.
	(b_out_get_reloc_upper_bound): Likewise.
	* coffcode.h (coff_canonicalize_reloc): Likewise.
	* coffgen.c (coff_get_symtab_upper_bound): Likewise.
	(coff_get_symtab): Likewise.
	(coff_get_reloc_upper_bound): Likewise.
	* ecoff.c (ecoff_get_symtab_upper_bound): Likewise.
	(ecoff_get_symtab): Likewise.
	(ecoff_canonicalize_reloc): Likewise.
	* elfcode.h (elf_get_symtab_upper_bound): Likewise.
	(elf_get_reloc_upper_bound): Likewise.
	(elf_canonicalize_reloc): Likewise.
	(elf_get_symtab): Likewise.
	* hp300hpux.c (MY(get_symtab)): Likewise.
	(MY(get_symtab_upper_bound)): Likewise.
	(MY(canonicalize_reloc)): Likewise.
	* i386lynx.c (NAME(lynx,canonicalize_reloc)): Likewise.
	* ieee.c (ieee_slurp_external_symbols): Change return type to
	boolean.  Check for errors from get_symbol.
	(ieee_slurp_symbol_table): Change return type to boolean.  Check
	for errors from ieee_slurp_external_symbols.
	(ieee_get_symtab_upper_bound): Return long, and -1 on errors.
	(ieee_get_symtab): Likewise.
	(ieee_get_reloc_upper_bound): Likewise.
	(ieee_canonicalize_reloc): Likewise.
	* mipsbsd.c (MY(canonicalize_reloc)): Likewise.
	* nlmcode.h (nlm_get_symtab_upper_bound): Likewise.
	(nlm_get_symtab): Likewise.
	(nlm_get_reloc_upper_bound): Likewise.
	(nlm_canonicalize_reloc): Likewise.
	* oasys.c (oasys_get_symtab_upper_bound): Likewise.
	(oasys_get_symtab): Likewise.
	(oasys_get_reloc_upper_bound): Likewise.
	(oasys_canonicalize_reloc): Likewise.
	* som.c (som_get_symtab_upper_bound): Likewise.
	(som_get_symtab): Likewise.
	(som_get_reloc_upper_bound): Likewise.
	(som_canonicalize_reloc): Likewise.
	* srec.c (srec_get_symtab_upper_bound): Likewise.
	(srec_get_symtab): Likewise.
	(srec_get_reloc_upper_bound): Define as bfd_0l.
	(srec_canonicalize_reloc): Likewise.
	* tekhex.c (tekhex_get_symtab): Return long, and -1 on errors.
	(tekhex_get_symtab_upper_bound): Likewise.
	(tekhex_get_reloc_upper_bound): Define as bfd_0l.
	(tekhex_canonicalize_reloc): Likewise.
	* libaout.h (NAME(aout,get_symtab_upper_bound)): Change
	declaration to return long.
	(NAME(aout,get_symtab)): Likewise.
	(NAME(aout,canonicalize_reloc)): Likewise.
	(NAME(aout,get_reloc_upper_bound)): Likewise.
	* libcoff-in.h (coff_get_symtab_upper_bound): Likewise.
	(coff_get_symtab): Likewise.
	(coff_get_reloc_upper_bound): Likewise.
	* libecoff.h (ecoff_get_symtab_upper_bound): Likewise.
	(ecoff_get_symtab): Likewise.
	(ecoff_canonicalize_reloc): Likewise.
	* libelf.h (bfd_elf32_get_symtab_upper_bound): Likewise.
	(bfd_elf32_get_symtab): Likewise.
	(bfd_elf32_get_reloc_upper_bound): Likewise.
	(bfd_elf32_canonicalize_reloc): Likewise.
	(bfd_elf64_get_symtab_upper_bound): Likewise.
	(bfd_elf64_get_symtab): Likewise.
	(bfd_elf64_get_reloc_upper_bound): Likewise.
	(bfd_elf64_canonicalize_reloc): Likewise.
	* libnlm.h (nlmNAME(get_symtab_upper_bound)): Likewise.
	(nlmNAME(get_symtab)): Likewise.
	(nlmNAME(get_reloc_upper_bound)): Likewise.
	(nlmNAME(canonicalize_reloc)): Likewise.
	* archive.c (compute_and_write_armap): Use error_return and
	no_memory_return labels rather than freeing information in various
	places.  Change storage, symcount and src_count to long.  Check
	errors from bfd_get_symtab_upper_bound and
	bfd_canonicalize_symtab.
	* bout.c (b_out_relax_section): Change reloc_size to long.  Check
	for errors from bfd_get_reloc_upper_bound and
	bfd_canonicalize_reloc.
	(b_out_get_relocated_section_contents): Likewise.
	* coff-alpha.c (alpha_ecoff_get_relocated_section_contents):
	Likewise.
	* elf32-mips.c: Likewise.
	* elf32-hppa.c (hppa_elf_stub_finish): Likewise.
	(hppa_look_for_stubs_in_section): Check for errors from
	bfd_get_symtab_upper_bound, bfd_canonicalize_symtab, and
	bfd_canonicalize_reloc.
	* ecofflink.c (bfd_ecoff_debug_accumulate_other): Check for errors
	from bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
	* linker.c (generic_link_read_symbols): Likewise.
	(_bfd_generic_final_link): Check for errors from
	bfd_get_reloc_upper_bound and bfd_canonicalize_reloc.
	* reloc.c (bfd_generic_get_relocated_section_contents): Likewise.
	* reloc16.c (bfd_coff_reloc16_relax_section): Likewise.
	(bfd_coff_reloc16_get_relocated_section_contents): Likewise.
	* libbfd.c (bfd_0l): New function.
	* libbfd-in.h (bfd_0l): Declare.
	* aix386-core.c: Change get_symtab_upper_bound, get_symtab,
	get_reloc_upper_bound, and canonicalize_reloc to use bfd_0l rather
	than bfd_0u.
	* cisco-core.c, hppabsd-core.c, hpux-core.c: Likewise.
	* irix-core.c, osf-core.c, ptrace-core.c, trad-core.c: Likewise.
	* bfd-in2.h: Rebuilt.
	* libbfd.h: Rebuilt.
	* libcoff.h: Rebuilt.

	* nlm32-sparc.c (nlm_sparc_read_reloc): Remove unused variables
	temp and name.

Wed Mar 30 08:33:04 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* hosts/dpx2.h: Define POSIX_UTIME.

Wed Mar 30 00:31:49 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* i386dynix.c, config/i386-dynix.mt:  New files, handling Dynix
	variant of a.out.
	* configure.in, config.bfd:  Use them for Dynix.
	* Makefile.in:  Add dependencies for i386dynix.o. 
	* targets.c:  Add definition for i386dynix_vec.
	* hosts/symmetry.h:  Do not define TRAD_CORE_USER_OFFSET for Dynix.
	Define HOST_DATA_START_ADDR and TRAD_UNIX_CORE_FILE_FAILING_SIGNAL
	for Dynix. Remove inclusion of dynix3.h, Dynix bfd is now handled by
	i386dynix.c

Mon Mar 28 12:53:27 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (BFD32_BACKENDS): Add coff-sparc.o.

	* coffcode.h (coff_set_flags): Handle bfd_arch_powerpc like
	bfd_arch_rs6000.

	* config.bfd (powerpc-*-aix*): New target; use rs6000.mt.
	* config/rs6000.mt (SELECT_ARCHITECTURES): Add bfd_powerpc_arch.

	* aoutx.h (translate_from_native_sym_flags): Set SEC_RELOC flag
	for generated constructor section.

Sun Mar 27 16:25:22 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_begin_writing): New approach at dealing with holes
	in executables left by the HP linker.  Does not rely on subspace
	alignments as subspaces are *NOT* guaranteed to be properly
	aligned in an executable (can you believe that!).

Sat Mar 26 10:25:43 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_get_section_contents): New function.  Do not try
	to actually read data from a section that doesn't have either
	SEC_LOAD or SEC_DEBUGGING set (eg $BSS$) just return true.

        * libbfd.c (bfd_read): Set bfd_error as appropriate for a short
	read. (bfd_error_system_call or bfd_error_file_truncated).

	* som.c: Do not blindly set bfd_error_system_call after a
	failing bfd_read, bfd_write, or bfd_seek.  In a few places
	(like som_object_p) override the error status set by bfd_read.

	* aix386-core.c, aout-encap,c archive.c, bout.c: Likewise.
	* coff-rs6000.c, coffgen.c ecoff.c, elf.c: Likewise.
	* elf32-hppa.c, elfcode.h, hp300hpux.c, i386lynx.c: Likewise.
	* nlm32-alpha.c, nlm32-i386.c, nlm32-sparc.c: Likewise.

	* som.c: Check return values from several bfd_{seek,read,write}
	calls that we just assumed were not failing.

Fri Mar 25 11:44:06 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* hosts/sysv4.h (HAVE_PROCFS): Add comments about ptx4.
	* config/sysv4.mh: Add comment.
	* config/symmetry.mh: Change comment.
	* configure.host: Use sysv4, not symmetry, for i[34]86-sequent-sysv4*.

Fri Mar 25 17:10:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Changes to support linker relaxing of embedded MIPS PIC code to
	use a five instruction sequence for function calls which are out of
	range of the bal instruction.
	* libecoff.h (struct ecoff_section_tdata): Define.
	(ecoff_section_data): Define.
	(ecoff_bfd_relax_section): Don't define.
	* ecoff.c (ecoff_final_link_debug_accumulate): Don't read or free
	the debugging information if it has already been read.
	(ecoff_indirect_link_order): Handle _cooked_size being different
	from _raw_size.  Don't reread the contents or the relocs if they
	have already been read in.
	* coff-mips.c (mips_howto_table): Change bitsize of PCREL16 from
	18 to 16.
	(PCREL16_EXPANSION_ADJUSTMENT): Define.
	(mips_relocate_refhi): Take adjust argument.
	(mips_relocate_section): Handle reloc offsets stored in section
	used_by_bfd field.  Call mips_relax_pcrel16 to handle details of
	expanding an out of range PCREL16.  Keep trace of adjustments
	required by expansions.  Set s and unset h when converting a reloc
	from undefined to section.  Change handling of PC relative relocs:
	if against a section, they are correct in the object file, if
	against an external symbol they are pcrel_offset.
	(mips_relax_section): New function.
	(mips_relax_pcrel16): New function.
	(ecoff_bfd_relax_section): Define.
	* coff-alpha.c (ecoff_bfd_relax_section): Define.
	* ecofflink.c (bfd_ecoff_debug_accumulate): Handle adjustments
	built by mips_relax_section when writing out addresses.
	* elf32-mips.c (mips_elf_read_ecoff_info): Clear adjust field.

	* aoutx.h (NAME(aout,find_nearest_line)): The caller expects
	functionname_ptr to be set to a symbol name, so prepend
	symbol_leading_char.

Thu Mar 24 11:33:46 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coff-h8300.c (h8300_reloc16_extra_cases): Add relaxing info
	for 16bit relative branches.
	* coff-h8500.c (r_high8, r_low16, r_high16): Don't complain on
	overflow.

Thu Mar 24 09:21:13 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_prep_for_ar_write): Ignore non-SOM objects.
	(som_bfd_ar_write_symbol_stuff, som_write_armap): Likewise.

Wed Mar 23 14:29:31 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* netbsd386.c (N_SET_FLAGS): Delete the old definition.

Wed Mar 23 14:58:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Clean up the relaxing code for the new linker.
	* targets.c (_bfd_relax_section): Take boolean *again argument
	rather than asymbol list.
	* bfd.c (bfd_relax_section): Change name of fourth argument from
	symbols to again.
	* reloc.c (bfd_generic_relax_section): Take boolean *again
	argument rather than asymbol list.  Always return true.
	* bout.c: Include genlink.h.
	(aligncode, perform_slip): Declare.
	(perform_slip): Take BFD argument rather than asymbol list.
	Changed all callers.  Get the symbols from the BFD.  Change the
	hash table entry value as well as the symbol value.
	(abs32code): Take BFD argument rather than asymbol list.  Changed
	all callers.
	(aligncode): Likewise.
	(b_out_relax_section): Take boolean *again argument rather than
	asymbol list.  Only return false if an error occurred.  Set *again
	to false.  Get symbols from BFD.
	* reloc16.c: Include genlink.h.
	(bfd_perform_slip): Take BFD argument rather than asymbol list.
	Get the symbols from the BFD.  Change the hash table entry value
	as well as the symbol value.
	(bfd_coff_reloc16_relax_section): Take boolean *again argument
	rather than asymbol list.  Only return false if an error occurred.
	Set *again to false.  Get symbols from BFD.
	* coffcode.h (bfd_coff_backend_data): Change
	_bfd_coff_reloc16_estimate to take BFD argument rather than
	asymbol list.
	(bfd_coff_reloc16_estimate): Corresponding change.
	(dummy_reloc16_estimate): Corresponding change.
	* libcoff-in.h (bfd_coff_reloc16_relax_section): Change
	declaration to take boolean * rather than asymbol list.
	(bfd_perform_slip): Change declaration to take BFD rather than
	asymbol list.
	* coff-h8300.c (h300_reloc16_estimate): Take BFD argument rather
	than asymbol list.  Changed calls to bfd_perform_slip.
	* bfd-in2.h: Rebuilt.
	* libbfd.h: Rebuilt.
	* libcoff.h: Rebuilt.
	* Makefile.in: Rebuilt dependencies.

	* genlink.h (_bfd_generic_link_get_symbols): Define.
	(_bfd_generic_link_get_symcount): Define.
	* linker.c (generic_link_read_symbols): New function.
	(generic_link_add_object_symbols): Use it.  Use
	_bfd_generic_link_get_symbols and _bfd_generic_link_get_symcount
	to get the symbols from the BFD.
	(generic_link_check_archive_element): Likewise.
	(_bfd_generic_final_link): Likewise.
	(_bfd_generic_link_output_symbols): Likewise.
	(default_indirect_link_order): Likewise.
	(generic_link_add_symbol_list): Store pointer to hash table entry
	in asymbol udata field.

Tue Mar 22 13:09:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-mips.c (mips_howto_table): Add entry for new MIPS_R_PCREL16
	reloc, used in embedded PIC code.
	(mips_adjust_reloc_in): Change sanity check to permit new reloc.
	(mips_bfd_reloc_type_lookup): Turn BFD_RELOC_16_PCREL_S2 into
	MIPS_R_PCREL16.

	* elf32-mips.c (mips_elf_final_link): Account for link_order
	relocs when allocating space for relocations.  Set SEC_RELOC flag
	for any section which has relocs.  Handle link_order relocs in
	link_order loop.  Use _bfd_generic_link_add_symbols_collect for
	add_symbls entry point.

	* linker.c (_bfd_generic_final_link): Set reloc_count to 0 before
	counting relocs.  Set SEC_RELOC flag for any section which has
	relocs.

	* linker.c (_bfd_default_link_order): Handle bfd_data_link_order.

	* linker.c (_bfd_generic_link_add_symbols): Just call
	generic_link_add_symbols.
	(_bfd_generic_link_add_symbols_collect): New function, like
	_bfd_generic_link_add_symbols but also collect constructors and
	destructors by name as collect2 does.
	(generic_link_add_symbols): New function, like old
	_bfd_generic_link_add_symbols but with collect argument.
	(generic_link_add_object_symbols): Take collect argument.
	(generic_link_check_archive_element_no_collect): New function.
	(generic_link_check_archive_element_collect): New function.
	(generic_link_check_archive_element): Take collect argument.
	(generic_link_add_symbol_list): Take collect argument.
	(_bfd_generic_link_add_one_symbol): Rename constructor argument to
	collect.
	* libbfd-in.h (_bfd_generic_link_add_symbols_collect): Declare.
	* libbfd.h: Rebuilt.

Tue Mar 22 10:04:00 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* archive.c (bfd_construct_extended_name_table): Use ar_padchar
	for first character in an extended name.
	(_bfd_write_archive_contents): If ar_padchar == '/', then use
	"//" as the name of the special archive member holding the
	extended name table.

Mon Mar 21 12:28:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Support for link_order types which generate relocs in order to
	support -Ur in the linker.
	* linker.c (generic_link_add_symbol_list): Remove bitsize argument
	from call to _bfd_generic_link_add_one_symbol.
	(_bfd_generic_link_add_one_symbol): Remove bitsize argument.
	Don't pass bitsize to constructor call back.  Pass BFD_RELOC_CTOR
	instead of bitsize to add_to_set call back.
	(_bfd_generic_final_link): Account for link_order relocs when
	allocating space for relocations.  Handle them in link_order loop.
	(_bfd_generic_reloc_link_order): New function.
	(_bfd_default_link_order): If a reloc_link_order is seen here,
	abort.
	(_bfd_count_link_order_relocs): New function.
	* libbfd-in.h (_bfd_generic_link_add_one_symbol): Remove bitsize
	argument from declaration.
	(_bfd_generic_reloc_link_order): Declare.
	(_bfd_count_link_order_relocs): Declare.
	* libbfd.h: Rebuilt.
	* aoutx.h (aout_link_add_symbols): Remove bitsize argument from
	call to _bfd_generic_link_add_one_symbol.
	(NAME(aout,final_link)): Account for link_order relocs when
	allocating space for relocations.  Handle them after handling all
	input BFDs.
	(aout_link_reloc_link_order): New function.
	* ecoff.c (ecoff_link_add_externals): Remove bitsize argument from
	call to _bfd_generic_link_add_one_symbol.
	(ecoff_bfd_final_link): Account for link_order relocs when
	allocating space for relocations.  Handle them in link_order loop.
	(ecoff_link_write_external): Set the storage class of a defined
	linker created symbol based on the section it is in.  Correct
	bfd_link_hash_weak case to use .sc rather than .st.
	(ecoff_reloc_link_order): New function.
	* coff-alpha.c (alpha_bfd_reloc_type_lookup): Handle
	BFD_RELOC_CTOR.
	* coff-mips.c (mips_bfd_reloc_type_lookup): Likewise.

	* sunos.c (sunos_read_dynamic_info): Remove unused locals dynsym
	and buf.

	* cisco-core.c (cisco_core_file_p): Only pass one argument to
	bfd_zmalloc.  Free a pointer, not a union.
	(cisco_bfd_is_local_label): Correct cast from asection to asymbol.

Sun Mar 20 09:24:36 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_begin_writing): Fix thinko (off by one error).

	* som.c (bfd_section_from_som_symbol): Only to do the value
	comparison for function symbols within executables.

	* som.c (bfd_section_from_som_symbol): Renamed from
	som_section_from_subspace_index.  Pass in a native SOM symbol.
	For executables, iterate through the sections to find out
	which contains the symbol's address rather than using the
	symbol_info field.  (symbol_info has a different meaning for
	dynamicly linked executables.)

	* trad-core.c (trad_unix_core_file_p): Don't pass abfd to
	bfd_zmalloc.

	* som.c (som_begin_writing): Fix braino (one call to align
	space/subspace data was done unconditionally rather than
	just for executables.)

	* som.c (som_begin_writing): Align text in all executables to
	make HPUX kernel happy.  Fixes strip/objcopy for shared
	executables.

Sat Mar 19 07:06:59 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_begin_writing): Account for alignment needs of
	subspaces too when writing executables.  Never request a negative
	bss size.  Fixes some problems with demand paged executables,
	still having problems with pure executables and shared executables.

Fri Mar 18 19:12:47 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* trad-core.c (trad_unix_core_file_p): Call bfd_zmalloc not
	bfd_zalloc for rawptr, because later on we may call free, not
	bfd_release, on it.

	* bfd.c (struct _bfd): Add cisco_core_struct to tdata union.
	* libbfd.c (bfd_read, bfd_seek): Add comments regarding errors.
	* cisco-core.c: New file.
	* Makefile.in: Change accordingly.
	* configure.in: Recognize cisco_core_vec.
	* config/m68k-aout.mt (SELECT_VECS): Add cisco_core_vec.
	* targets.c: Add cisco_core_vec.
	* bfd-in2.h: Rebuilt.

Fri Mar 18 18:13:49 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.h (som_copyable_section_data_struct): New structure
	containing all the private section information which needs
	to be copied from input section to output section during
	objcopy or strip.
	(som_section_data_struct): Remove several fields now in
	som_copyable_section_data_struct.  Make the space and 
	subspace dictionaries be pointers (to save space when
	only reading objects).

	* som.c (bfd_som_set_section_attributes): Now returns a boolean;
	some references changed.  Allocate a copyable data stucture if
	none exists.  Store info into the copyable data structure.
	(bfd_som_set_subsection_attributes): Likewise.
	(som_is_space, som_is_subspace, som_is_container): New functions.
	Use these instead of directly accessing private data.
	(som_prep_headers): Allocate space and subspace headers here.
	Fill in some fields in the space/subspace headers from the
	copyable data.
	(som_bfd_copy_private_section_data): Only copy the stuff
	that we really need to make objcopy and strip work.  Allocate
	the copy_data structure for the output bfd before copying.

	* som.h (struct som_exec_data): New structure to hold exec
	info that must be preserved when running objcopy/strip.
	(struct somdata): Add new "exec_data" field and accessor
	macro.  Add some comments on how the various fields are used.
	(som_section_data_struct): Make is_space and is_subspace bitfields.
	Delete unused subspace_index.  All references now use the
	target_index field within the section structure itself.

	* som.c (make_unique_section): Delete unused declaration.
	(som_bfd_copy_private_bfd_data): New function.
	(som_object_setup): Allocate space for and save exec information
	that needs to be copied during objcopy/strip.
	(som_mkobject): Do not allocate space for a file header here.
	It is not used when only reading SOM objects.
	(som_prep_headers): Allocate space for and attach a file header
	to the output bfd.  For executables, use the saved system_id
	value rather than trying to guess the right value.  Do not abort
	wwhen setting file_hdr->entry* for executables.
	(som_begin_writing): For executables, set the exec_entry and
	exec_flags fields.
	(som_copy_private_backend_section_data): Always return a value.

	* libhppa.h (PA_PAGESIZE): Define.

	* som.c (SOM_ALIGN): Define.
	(som_begin_writing): If writing an executable, initialize all
	fields in the exec header to zero.  Update fields in the exec
	header as sizes of loadable subspaces are computed.  Carefully
	preserve alignments when building executables.  Actually write the
	exec after all the fields are filled in.

        * Better long-filename handling.  Reads SOM ABI compliant extended
	names, but doesn't quite write compliant extended names yet.
	* som.c (som_slurp_extended_name_table): Delete function.  The
	generic code will handle things correctly.
	(som_slurp_armap): Seek to the beginning of the next member.
	(normalize): New function.
	(som_bfd_ar_write_symbol_stuff): Take the size of the extended
	name table into account when computing the file offsets in the
	SOM dictionary.  Make sure to align to an even boundary.
	(som_write_armap): Initialize the checksum to zero.
	(ar_maxchars): Fix.  Opps.

Fri Mar 18 20:35:24 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* aoutx.h (reloc_type_lookup): Handle BFD_RELOC_CTOR on a 64-bit
	machine.  Handle BFD_RELOC_SPARC13 and BFD_RELOC_SPARC_BASE13.

Thu Mar 17 18:26:46 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* bfd-in.h (BFD_VERSION): Use @VERSION@.
	* Makefile.in (bfd.h): Replace it with contents of VERSION file.
	* bfd-in2.h: Regenerated.

	* trad-core.c (trad_unix_bfd_is_local_label): Fixed typo where
	this was also named trad_unix_bfd_copy_private_bfd_data.

Thu Mar 17 10:37:07 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* aoutx.h, elfcode.h, coff-alpha.c, bout.c, ecoff.c, ecofflink.c,
	elf32-hppa.c, elf32-mips.c, linker.c, som.c, sunos.c: If malloc(0)
	returns NULL, it is not an error.  It's possible that some of
	these checks are not necessary (because the size can never be
	zero), but putting in the checks is the conservative thing to do
	in light of the fact that some of these malloc calls replaced
	unchecked alloca calls, in which a zero argument would work fine.

Thu Mar 17 11:44:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* osf-core.c (osf_core_bfd_copy_private_bfd_data): Remove
	duplicate definition.
	(osf_core_bfd_is_local_label): Define.

	* reloc.c (bfd_generic_get_relocated_section_contents): Don't fail
	if malloc (0) fails.  bfd_canonicalize_reloc returning 0 is not a
	failure indication, it merely means there are no relocs.

	* elfcode.h (NAME(bfd_elf,write_object_contents)): Don't use space
	after NAME, since SunOS /bin/cc can't handle it.

Wed Mar 16 16:43:33 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* netbsd386.c (N_SET_FLAGS): Don't nuke the machine id field.
	From sukes@glue.umd.edu (Tasuki Hirata).

Wed Mar 16 07:55:54 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* aoutf1.h (4 places): Use a simple #if on ARCH_SIZE, rather than
	all that convoluted stuff with NAME, CAT3, etc.  The convoluted
	stuff broke for SunOS4 /bin/cc (due to DEFUN elimination, I guess).

Wed Mar 16 00:02:05 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_prep_for_fixups): Detect section symbols based
	on either the lack of private data or the symbol flags.  Do not
	munge section symbol names anymore -- they no longer confuse GDB.
	(som_begin_writing): Leave space for an exec header if writing
	an executable.
	(som_slurp_symbol_table): Recognize both forms of section symbol
	names "L$0\002" and "$<FOO>$".  Change the name of "L$0\002"
	section symbols to be the name of the section they represent.
	Debugging  symbols begin with "L$0\001", not just "L$".

Tue Mar 15 22:58:28 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* bfd-in2.h, libbfd.h, libcoff.h: Rebuilt.

	* bfd-in.h (JUMP_TABLE): Add new entries to the jump table
	for bfd_copy_private_section_data, bfd_copy_private_bfd_data,
	and bfd_is_local_label.

	* targets.c: Add new entries to the bfd_target structure.
	
	* bfd.c (bfd_copy_private_bfd_data): New definition.

	* section.c (bfd_copy_private_section_data): New definition.

	* syms.c (bfd_is_local_label): New definition.

	* libbfd-in.h (bfd_generic_is_local_label): Declare.

	* libbfd.c (bfd_generic_is_local_label): New function.

	* *-core.c: Provide default definitions for new functions in
	the target vector which all point to bfd_false.

	* aout-target.h, coffcode.h, elf32-target.h elf64-target.h, ieee.c
	libaout.h, libecoff.h, nlm-target.h, oasys.c, srec.c, tekhex.c
	Default new vectors for copying private backend data to bfd_true.
	Default new vector for determining if a symbol is a local label
	to bfd_generic_is_local_label.

	* som.c (som_bfd_copy_private_section_data): New function.
	(som_bfd_is_local_label): New function.
	(som_bfd_copy_private_bfd_data): For now default to bfd_true.

	* elf32-hppa.c (hppa_elf_is_local_label): New function.

Tue Mar 15 23:55:47 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* cf-m68klynx.c (CALC_ADDEND): Use _bfd_m68klynx_howto_table.

Tue Mar 15 04:41:13 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* Most files:
	Replace DEFUN and DEFUN_VOID with K&R-style function definition.
	Indent some of them to GNU standards.

	* aout32.c, archures.c, core.c, cpu-h8300.c, cpu-i960.c,
	cpu-m68k.c, cpu-m88k.c, cpu-mips.c, cpu-vax.c, ctor.c, demo64.c,
	elf32-hppa.h, gen-aout.c, host-aout.c, init.c, libhppa.h,
	libieee.h, liboasys.h, newsos3.c, som.h, stab-syms.c, sunos.c:
	Update copyright years.

Mon Mar 14 11:41:23 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_prep_for_fixups): A relocation involving the section
	symbol for the *ABS* section is really a relocation involving
	no symbol.
	(som_slurp_symbol_table): Do not set BSF_GLOBAL or BSF_EXPORT for
	undefined symbols.  Correctly distinguish between debugger symbols
	and section symbols.

	* som.c (setup_sections): Set SEC_DEBUGGING and the section attributes
	for spaces and subspaces.

	* som.c (som_bfd_count_ar_symbols): Fix typo.

	* som.c (som_object_setup): Set EXEC_P, D_PAGED, WP_TEXT, and
	HAS_RELOC based on the object's magic number.
	(make_unique_section): Delete function.  BFD and its users are
	prepared to handle multiple sections with the same name.
	(setup_sections): Allocate space on the BFD's obstack to hold
	section names.  Use bfd_make_setion_anyway rather than the
	obsolete make_unique_section.
	(som_prep_headers): Choose the correct SOM magic number based
	on the BFD's flags.
	(som_bfd_fill_in_ar_symbols): Return false, not NULL on error.

Sat Mar 12 09:46:09 1994  Ian Lance Taylor  (ian@cygnus.com)

	* elf32-ppc.c: Renamed from elf32-powerpc.c.
	* nlm32-ppc.c: Renamed from nlm32-powerpc.c.
	* Makefile.in, configure.in: Corresponding changes.

Fri Mar 11 22:27:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elf32-powerpc.c: Extensive changes to update to preliminary ABI.

Fri Mar 11 00:34:59 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* sunos.c (sunos_read_dynamic_info):  Assume that dynamic info
	is always located at the start of the data section to allow
	recovery of the dynamic info from a stripped executable.
	* ecoff.c (ecoff_styp_to_sec_flags):  Handle STYP_PDATA, STYP_XDATA
	and STYP_COMMENT.

Wed Mar  9 17:17:53 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* libbfd-in.h: Remove alloca cruft.  It was missing some necessary
	cruft (like the #pragma alloca for AIX).
	In addition to that problem, the C alloca calls xmalloc, which
	means checking for being out of memory can't work right.  The
	following changes remove all uses of alloca from BFD.
	* hosts/solaris2.h: Remove alloca cruft.
	* som.c: Replace alloca with a fixed size auto array.
	* aoutx.h, elfcode.h, nlmcode.h, bout.c, coff-alpha.c, ecoff.c,
	ecofflink.c, elf32-hppa.c, elf32-mips.c, linker.c, reloc.c, som.c,
	sunos.c: Replace alloca with malloc and appropriate error checking and
	freeing.
	* linker.c: Replace alloca with obstack_alloc.
	* libbfd.h: Rebuilt.

Tue Mar  8 12:10:38 1994  Ian Lance Taylor  (ian@cygnus.com)

	* coff-mips.c (mips_relocate_section): Handle MIPS_R_LITERAL like
	MIPS_R_GPREL.

Sat Mar  5 14:08:54 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elf32-hppa.h, elfcode.h:  Replace uses of Elf*_Half, Elf*_Word,
	Elf*_Off typedefs by their expansion, the typedefs have been
	removed from include/elf/internal.h.
	* elfcode.h (bfd_section_from_shdr):  Handle SHT_DYNAMIC section like
	SHT_PROGBITS section.

Thu Mar  3 20:03:39 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.h (_PA_RISC_ID): Treat HOST_HPPAOSF just like HOST_HPPABSD.

Wed Mar  2 13:28:06 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* configure.host: Recognize i[34]86-sequent-*.

	* trad-core.c (trad_unix_core_file_p): A non-zero, not zero,
	return from bfd_seek indicates an error.
	New macro TRAD_CORE_DSIZE_INCLUDES_TSIZE to replace
	TRAD_CORE_STACK_OFFSET.
	* hosts/symmetry.h: Define TRAD_CORE_DSIZE_INCLUDES_TSIZE and
	TRAD_CORE_USER_OFFSET but not HOST_STACK_OFFSET.

Wed Mar  2 11:57:03 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.[ch]: Do not include libhppa.h in som.c, instead include
	it in som.h.

	* elf32-hppa.[ch]: Do not include libhppa.h in elf32-hppa.c, instead
	include it in elf32-hppa.h.

	* som.c (log2): Return -1 on error rather than aborting.
	(setup_sections): Bubble up an error from log2.

	* Changes to make HP C compiler happy in both traditional
	and ANSI mode.
	* som.c (hppa_som_gen_reloc_type): Use correct enum type for
	field parameter.
	(bfd_som_set_section_attributes): Use unsigned int rather than
	unsigned char to avoid GNU-C extensions.
	(bfd_som_attach_aux_hdr): Return a boolean to indicate success
	or failure rather than aborting on failure.

	* som.h (bfd_som_set_section_attributes): Fix prototype to match
	som.c changes.
	(bfd_som_attach_aux_hdr): Add prototype.
	(hppa_som-gen_reloc_type): Likewise.

	* elf32-hppa.c: Add a couple casts to make HP compiler happy.
	(hppa_look_for_stubs_in_section): Do not return false on failure
	until rest of code is ready to handle it.  Abort for now.

Tue Mar  1 18:33:59 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* bfd-in2.h: Rebuilt.

Tue Mar  1 13:06:53 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* i386os9k.c: use new functions bfd_set_error and bfd_get_error.
	* Makefile.in: delete an extra blank.
	* configure.in : Add i396os9k_vec.

Mon Feb 28 15:41:01 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* config.bfd : Add i386-os9k.
	* config/i386-os9k.mt : Newly add os9k target makefile.

	* i386os9k.c : new file to handle os9k format bfd.
	* Makefile.in : Handle new file i386os9k.c
	* targets.c : Add bfd_target_os9k_flavour and i386os9k_vec.
	* cache.c : Initialize cache_sentinel to 0.

Sun Feb 27 16:30:55 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (mismatches, retval_mismatches): Fix mismatch
	action in case where caller specified no argument relocation.
	(hppa_elf_build_linker_stub): Try again to get the sym_ptr_ptr
	right in the original relocation and the stub's relocation.

        * elf32-hppa.h (hppa_look_for_stub_in_section): Fix typo.  Delete
	unused symbols argument.

	* elf32-hppa.c (hppa_elf_stub_reloc): Accept asymbol ** rather
	than asymbol * for original target symbol.  All callers changed.
	Set reloc->sym_ptr_ptr appropriately.
	(hppa_elf_build_linker_stub): Set reloc->sym_ptr_ptr correctly.
	(hppa_elf_look_for_stubs_in_section): No longer need symbols
	argument.  Use the output symbols when canonicalizing the relocs,
	creating them if necessary.

	* linker.c (_bfd_generic_link_output_symbols): Do not
	rebuild/clobber the output symbols if they already exist.

Sun Feb 27 15:22:36 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* targets.c (BFD_SEND, BFD_SEND_FMT): Add debugging versions that
	check all the pointer dereferences.  Enabled via DEBUG_BFD_SEND.
	* bfd-in2.h: Rebuilt.

	* srec.c (hex_value): Always set to a size of 256 bytes.
	(srec_init): Cosmetic changes.

Sun Feb 27 11:18:47 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c: Second half of major cleanup.  More comments,
	PARAMize and staticize rest of functions.  Delete unused
	functions.  Delete unused/unnecessary arguments to some functions.
	Group static vars together.  Abort for bad errors until we have
	error code propogation working.  Work on spacing and indention.
	Add FIXMEs for unresolved problems.  Use enums rather than
	#defines for lots of things.  Merge two functions which build
	linker stubs into a single function (so they can easily share a
	ton of common code).

Sat Feb 26 10:00:45 1994  Ian Lance Taylor  (ian@cygnus.com)

	* reloc.c (_bfd_relocate_contents): Adjust handling of overflow to
	avoid depending upon right shifts of signed numbers, and to
	correct handling of src_mask with lower bits zero.

	* aoutx.h, archive.c: Add casts to avoid warnings from SVR4 cc.
	* ecoff.c, ecofflink.c, ecoffswap.h, srec.c: Likewise.
	* elf32-i386.c: Likewise.
	* elfcode.h (bfd_section_from_shdr): Make i unsigned; remove old
	#if 0 code.
	(elf_write_phdrs): Make i unsigned.
	(map_program_segments): Make i and n_left unsigned.
	(assign_file_positions_except_relocs): Make i unsigned.
	(write_shdrs_and_ehdr): Make count unsigned.
	(assign_file_positions_for_relocs): Make i unsigned.
	(NAME(bfd,elf_write_object_contents)): Make count unsigned.
	(section_from_elf_index): Make index argument unsigned.

Fri Feb 25 21:34:58 1994  Ian Lance Taylor  (ian@cygnus.com)

	* elfcode.h: Don't include assert.h.
	(swap_out_syms): Use BFD_ASSERT rather than assert.

	* linker.c (_bfd_generic_link_write_global_symbol): Add missing
	break in switch.

	* hosts/i386v4.h (qsort, strtol): Remove incorrect and useless
	declarations.

Fri Feb 25 16:35:57 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* libhppa.h (hppa_rebuild_insn): Moved here from elf32-hppa.c.

	* elf32-hppa.h (elf_hppa_tc_symbol): Add new arguments.
	(elf_hppa_tc_make_sections): Likewise.
	(elf_hppa_final_processing): Add extern decl.

	* elf32-hppa.c: First half of major cleanup.  Add/cleanup lots of
	comments.  PARAMize some static functions.  Delete unused functions.
	Delete unused/unnecessary arguments to many functions.  Group
	static vars together.  Collapse common case statements together
	in many places.  Use default case when possible instead of listing
	each case separately.  Abort for bad errors until we get error
	code propogation working.  Work on spacing and indention problems.
	Add FIXMEs for some unresolved problems.  Delete hopelessly broken 
	COMPLEX relocation support (it's never used anyway).
	(hppa_elf_rebuild_insn): Delete.  Moved into libhppa.h.
	(elf_hppa_tc_symbol): Accept and use new arguments (symext chains).
	(elf_hppa_tc_make_sections): Likewise.

	* format.c (bfd_check_format_matches): Initialize matching_vector
	to keep gcc -Wall quiet.

	* elfcode.h (elf_slurp_reloca_table): Fix typo.

	* som.c (som_get_symtab_upper_bound): Use "sizeof (asymbol *)"
	not "sizeof (som_symbol_type *)".

	* elfcode.h (elf_get_symtab_upper_bound): Use "sizeof (asymbol *)"
	not "sizeof (asymbol").  Opps.

Fri Feb 25 13:19:04 1994  Ted Lemon  (mellon@pepper.ncd.com)

	* bfd.c (bfd_get_gp_size): Can't return gp value on an archive.
	(bfd_set_gp_size):  Can't set gp value on an archive.

Fri Feb 25 12:57:00 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* srec.c (pass_over): Don't skip too many characters when
	end of line seen.

Fri Feb 25 11:41:57 1994  Ian Lance Taylor  (ian@cygnus.com)

	* ecoff.c (ecoff_sizeof_headers): Align result to 16 byte
	boundary.

Thu Feb 24 07:13:22 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_derive_misc_symbol_info): Derive symbol_info
	field for absolute symbols in the same manner as undefined
	and common symbols.

Thu Feb 24 04:29:19 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elfcode.h (elf_core_file_p):  Check for core file e_machine match
	like in elf_object_p.

Wed Feb 23 18:28:37 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elfcode.h (alloca): Delete declaration.

	* som.c (som_prep_headers): Use CPU_PA_RISC1_0 for magic
	number rather than HP9000S800_ID.  Note som.c is careful
	to make sure CPU_PA_RISC1_0 is always defined.

Mon Feb 21 10:12:02 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* Makefile.in (targets.o, archures.o): Use ALL_CFLAGS to supply
	flags to explicit compile actions.

Mon Feb 21 09:50:06 1994  Ian Lance Taylor  (ian@lisa.cygnus.com)

	* ecofflink.c (ecoff_write_symhdr): Set symhdr->magic here.
	* ecoff.c (ecoff_write_object_contents): Make sure .bss section
	ends on a page boundary if there is no symbol table.
	(ecoff_bfd_final_link): Don't set symhdr->magic here.

	* hosts/hp300.h: Include <stdlib.h>; don't declare free.

	* som.c (som_bfd_count_ar_symbols): Use a pointer and alloca
	rather than an array of variable size.
	(som_bfd_fill_in_ar_symbols): Likewise.
	(som_bfd_ar_write_symbol_stuff): Likewise.

	* coff-alpha.c (alpha_relocate_section): Rewrite mask and shift
	operation to avoid OSF 1.3 cc bug.
	* ecoff.c (ecoff_write_object_contents): Make text_size, data_size
	and bss_size bfd_size_type instead of unsigned long.  Make
	text_start and data_start bfd_vma instead of unsigned long.
	* ecofflink.c (ecoff_add_string): Remove incorrect cast of return
	value.

Sun Feb 20 16:06:54 1994  Ian Lance Taylor  (ian@lisa.cygnus.com)

	* linker.c (_bfd_generic_link_add_archive_symbols): Consider
	symbols in the order they appear in the archive map.

Sat Feb 19 03:17:32 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* coff-alpha.c (reloc_nil):  Add forward declaration, add missing
	error_message argument.
	* coff-sparc.c (bfd_coff_generic_reloc):  Add forward declaration,
	add missing error_message argument.
	* mipsbsd.c (mips_fix_hi16_s):  Add forward declaration, add missing
	error_message argument.

Fri Feb 18 11:41:58 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Support for PowerPC NetWare.
	* nlm32-powerpc.c: New file.
	* config.bfd (powerpc-*-netware*): New target; use ppc-nlm.
	* config/ppc-nlm.mt: New file.
	* configure.in (nlm32_powerpc_vec): New target vector; use
	nlm32-powerpc.o, nlm32.o, nlm.o.
	* targets.c (nlm32_powerpc_vec): Declare.
	* Makefile.in (BFD32_BACKENDS): Add nlm32-powerpc.o.
	(CFILES): Add nlm32-powerpc.c.

	Initial support for PowerPC ELF.  Done without an ABI, and
	probably to be changed when I get an ABI.
	* config.bfd (powerpc-*-sysv4*): New target; use ppc-elf.
	* config/ppc-elf.mt: New file.
	* configure.in (bfd_elf32_powerpc_vec): New target vector; use
	elf32-powerpc.o, elf32.o, elf.o.
	* elf32-powerpc.c: New file.
	* elfcode.h (prep_headers): Add bfd_arch_powerpc case.
	(elf_set_arch_mach): Likewise.
	* targets.c (bfd_elf32_powerpc_vec): Declare.
	* Makefile.in (BFD32_BACKENDS): Add elf32-powerpc.o.
	(CFILES): Add elf32-powerpc.c.
	Rebuilt dependencies.

Thu Feb 17 15:29:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coffgen.c (coff_write_linenumbers): Always return a value.

	* elfcode.h (elf_slurp_symbol_table): Handle zero symbols
	reasonably.  Allocate x_symp using alloca.

	* elfcode.h (map_program_segments): ELF program header entries
	must be sorted by load address.  This used to generate the entries
	in reverse order.

	* section.c (SEC_IN_MEMORY): Define.
	(asection): Rename unused field otheruserdata to contents, and
	make it char *.
	(bfd_make_section_anyway): Initialize contents field to NULL.
	(bfd_get_section_contents): If SEC_IN_MEMORY is set, get section
	contents from contents field rather than from file.
	* bfd-in2.h: Rebuilt.

Thu Feb 17 08:30:53 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* bfd.c (bfd_get_error, bfd_set_error): New functions.
	(bfd_error): Make static.
	(bfd_error_type): Renamed from bfd_ec.  Prepend "bfd_error_" to
	all values.
	* bfd-in2.h: Regenerated.
	* aix386-core.c, aout-adobe.c, aout-encap.c, aout-target.h, 
	aoutf1.h, aoutx.h, archive.c, archures.c, 
	bfd.c, bout.c, cache.c, coff-alpha.c, coff-mips.c, 
	coff-rs6000.c, coffcode.h, coffgen.c, core.c, ctor.c, 
	ecoff.c, ecofflink.c, elf.c, elf32-hppa.c, elf32-mips.c, 
	elfcode.h, format.c, hash.c, hp300hpux.c, hppabsd-core.c, 
	i386lynx.c, ieee.c, libbfd.c, libelf.h, linker.c, 
	lynx-core.c, nlm.c, nlm32-alpha.c, nlm32-i386.c, 
	nlm32-sparc.c, nlmcode.h, oasys.c, opncls.c, osf-core.c, 
	ptrace-core.c, reloc16.c, rs6000-core.c, section.c, som.c, 
	srec.c, sunos.c, syms.c, targets.c, tekhex.c, 
	trad-core.c: Change callers.

Tue Feb 15 22:27:27 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c: Remove FIXMEs for things which have been dealt with.

Tue Feb 15 19:39:24 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* section.c (bfd_get_section_contents): Since this function reads
	unrelocated contents, the section's raw size is always the one to
	use for bounds checking.

	* linker.c (default_indirect_link_order): In assertion, compare
	link_order size field against cooked size, not raw size, of input
	section.

	* bout.c (b_out_get_reloc_upper_bound): For BSS section, just
	return 0.
	(aligncode): When shrinking, the addend should be set to the
	current offset in the section plus the number of bytes of padding
	that will actually be retained.
	(b_out_relax_section): If a section contains no relocations, don't
	bother processing them.
	(b_out_get_relocated_section_contents): Set reloc_done.  Assert
	that bfd_get_section_contents returns true.  Check that relocs are
	properly ordered.
	(b_out_get_relocated_section_contents, case ALIGNDONE): Assert
	that reloc->addend falls between the current source offset and the
	raw size of the input section.

	* config.bfd: Support i960 vxworks versions > 5.0 with coff, not
	bout.  Default with no version number is still bout.  Support
	explicit i960-coff target too.

	* bout.c: Changed some indentation, deleted trailing whitespace,
	fixed some comments, removed some "#if 1" lines.
	(output_addr): New macro.
	(calljx_callback, callj_callback, get_value, abs32code, aligncode,
	b_out_get_relocated_section_contents): Use it for readability.

Tue Feb 15 09:00:16 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_prep_for_ar_write): Iterate through the SOM
	symbols, not the BFD symbols.
	(som_bfd_ar_write_symbol_stuff): Likewise.

Mon Feb 14 22:55:20 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_slurp_symbol_table): Do not die if a BFD doesn't
	have any symbols.

	* Finish basic read-write support for SOM archive libraries.  Bugs
	surely remain as this hasn't been tested all that much.
	* som.c (SOM_LST_HASH_SIZE, SOM_LST_MODULE_LIMIT): Define.
	(struct som_misc_symbol_info): New structure to hold info necessary
	to build both normal and library symbol tables.
	(som_derive_misc_symbol_info): New function to derive info necessary
	to build both normal and library symbol tables.
	(som_build_and_write_symbol_table): Use new function to derive misc
	symbol information.
	(som_slurp_symbol_table): Update backend private data for symbols
	appropriately.
	(som_bfd_prep_for_ar_write): New function.
	(som_bfd_ar_symbol_hash): New function.
	(som_bfd_ar_write_symbol_stuff): New function.
	(som_write_armap): Flesh out.
	(som_vec): Fix ar padding character.

	* som.c: Consistently use memset rather than bzero.

Mon Feb 14 17:02:28 1994  Stu Grossman  (grossman at cygnus.com)

	* coff-rs6000.c:  Add Lynx core file support, use HOST_AIX, where
	appropriate.
	* rs6000-core.c:  Use HOST_AIX instead of COREFILES_PLEASE.
	* config/rs6000.mh:  Remove defs of ARCHIVES_PLEASE and
	COREFILES_PLEASE.
	* config/rs6000lynx.mh:  Turn on Lynx core file support.
	* hosts/rs6000.h:  #define HOST_AIX.
	* hosts/rs6000lynx.h:  Create this to enable Lynx host support.

Sun Feb 13 14:30:00 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.h (som_symbol_data): Safely access backend private data
	for BFD symbols.  All callers changed.

	* Read-only SOM archive support.
	* som.c (som_bfd_count_ar_symbols): New helper function.
	(som_bfd_fill_in_ar_symbols): New helper function.
	(som_slurp_armap): New function to read a SOM LST.

	* som.h: Include <lst.h> and <ar.h>.

Sat Feb 12 22:34:14 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elfcode.h (elf_map_symbols): Fix typo.
	(write_object_contents): Check return values from prep_headers and
	elf_compute_section_file_positions.
	(set_section_contents): Likewise.

Fri Feb 11 16:56:50 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* archive.c (normalize) [VMS]: Call malloc, not bfd_xmalloc.
	(bfd_construct_extended_name_table): Check result of normalize.

Tue Feb  8 08:57:31 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	Make all callers of malloc or realloc (including via obstacks)
	check the result for NULL.  Most set bfd_error to no_memory and
	return in that case; a few are harder to fix, and are marked
	with "FIXME <return type>".

	* elf32-hppa.c (hppa_elf_build_arg_reloc_stub
	hppa_elf_build_long_branch_stub):  Check bfd_make_empty_symbol return.
	* linker.c (_bfd_generic_link_output_symbols
	_bfd_generic_link_write_global_symbol): Ditto
	* section.c (bfd_make_section_anyway): Ditto.

	* tekhex.c (find_chunk tekhex_mkobject): Check bfd_alloc.
	(first_phase): Ditto.  FIXME void
	(tekhex_make_empty_symbol): Check bfd_zalloc.

	* sunos.c (sunos_read_dynamic_info): Check bfd_zalloc.
	(MY(read_dynamic_symbols) MY(read_dynamic_relocs)): Check bfd_alloc.

	* stringhash.c (_bfd_stringtab_hash_newfunc): Check bfd_hash_allocate.

	* srec.c: Indent.
	(fillup_symbols): Check bfd_alloc.  FIXME void
	(srec_mkobject srec_get_section_contents
	srec_set_section_contents): Check bfd_alloc. 
	(srec_make_empty_symbol): Check bfd_zalloc.

	* som.c (hppa_som_gen_reloc_type): Check bfd_alloc_by_size_t.
	(make_unique_section): Check bfd_alloc.
	(som_new_section_hook): Check bfd_zalloc.
	(bfd_som_attach_aux_hdr): Ditto.  FIXME void

	* rs6000-core.c (rs6000coff_core_p): Check bfd_zalloc.

	* osf-core.c (osf_core_make_empty_symbol): Check bfd_zalloc.
	(osf_core_core_file_p): Check bfd_alloc.

	* oasys.c (oasys_slurp_symbol_table oasys_archive_p
	oasys_mkobject oasys_object_p oasys_new_section_hook
	oasys_set_section_contents): Check bfd_alloc.
	(oasys_slurp_section_data): Check bfd_zalloc and bfd_alloc.
	(oasys_make_empty_symbol): Check bfd_zalloc.

	* nlmcode.h (nlm_make_empty_symbol): Check bfd_zalloc.
	(nlm_slurp_symbol_table): Check bfd_zalloc and bfd_alloc.

	* nlm32-sparc.c (nlm_sparc_read_import): Check bfd_alloc.

	* nlm32-i386.c (nlm_i386_read_import): Check bfd_alloc.

	* nlm32-alpha.c (nlm_alpha_read_import): Check bfd_alloc.

	* linker.c (_bfd_link_hash_newfunc
	(generic_link_hash_newfunc
	(archive_hash_newfunc
	(_bfd_generic_link_add_one_symbol): Check bfd_hash_allocate.
	(_bfd_generic_final_link
	(_bfd_generic_link_output_symbols
	(default_indirect_link_order): Check bfd_alloc.
	(bfd_new_link_order): Check bfd_alloc_by_size_t.

	* irix-core.c (irix_core_make_empty_symbol): Check bfd_zalloc.

	* ieee.c: Indent.
	(read_id get_symbol get_section_entry ieee_archive_p ieee_object_p
	ieee_slurp_section_data ieee_new_section_hook): Check bfd_alloc.
	(do_one): Check bfd_alloc.  Return a boolean.
	(ieee_slurp_section_data): Check it.
	(init_for_output): Check bfd_alloc.  Return a boolean.
	(ieee_set_section_contents): Check it.
	(do_with_relocs):  Check bfd_alloc.  Return a boolean.
	(ieee_bfd_debug_info_accumulate): Ditto.  FIXME void.
	(ieee_mkobject): Check bfd_zalloc.
	(ieee_make_empty_symbol): Check bfd_zmalloc.

	* hpux-core.c (hpux_core_make_empty_symbol): Check
	bfd_zalloc.

	* hppabsd-core.c (hppabsd_core_make_empty_symbol): Check
	bfd_zalloc.
	(hppabsd_core_core_file_p): Check bfd_zalloc.

	* hp300hpux.c (MY(slurp_symbol_table)): Check bfd_alloc.

	* elfcode.h (elf_new_section_hook): Check bfd_alloc.
	(bfd_section_from_phdr): Ditto.
	(write_relocs): Ditto.  FIXME void
	(elf_map_symbols assign_section_numbers map_program_segments):
	Ditto.  Return a boolean. 
	(swap_out_syms): Ditto.  Check elf_map_symbols.
	(elf_slurp_symbol_table): Check bfd_zalloc.
	(elf_slurp_reloca_table): Check bfd_alloc.
	(elf_slurp_reloc_table): Ditto.
	(elf_compute_section_file_positions): Check assign_section_numbers.
	(assign_file_positions_except_relocs): Return a boolean.
	Check map_program_segments.
	(elf_compute_section_file_positions): Check it.

	* elf32-mips.c (mips_elf_final_link): Check bfd_alloc.

	* elf32-hppa.c (hppa_elf_stub_branch_reloc): Check bfd_zmalloc and
	realloc. 
	(hppa_elf_stub_reloc): Ditto.
	(hppa_elf_build_arg_reloc_stub): Check bfd_zalloc.
	(hppa_elf_build_long_branch_stub): Ditto.
	(elf32_hppa_backend_symbol_table_processing): Ditto.

	* ecoff.c (ecoff_set_symbol_info): Check bfd_alloc.  Return a boolean.
	(ecoff_slurp_symbol_table): Check it.
	(ecoff_slurp_armap): Check bfd_alloc.
	(ecoff_write_armap): Check bfd_zalloc.
	(ecoff_link_hash_newfunc): Check bfd_hash_allocate and
	_bfd_link_hash_newfunc. 
	(ecoff_link_add_externals): Check bfd_alloc.

	* ctor.c (bfd_constructor_entry): Check bfd_alloc.

	* coffgen.c (coff_real_object_p): Check bfd_alloc.
	(coff_renumber_symbols): Check bfd_alloc_by_size_t.  Return a boolean.
	(coff_write_symbol): Check bfd_alloc.  FIXME int
	(coff_write_linenumbers): Check bfd_alloc.  Return a boolean.
	(coff_section_symbol): Check bfd_alloc_by_size_t.
	(coff_get_normalized_symtab): Check bfd_alloc.
	(coff_bfd_make_debug_symbol): Check bfd_zalloc.
	* libcoff-in.h: Change decls of coff_renumber_symbols,
	coff_write_linenumbers.
	* libcoff.h: Rebuilt.
	* coffcode.h (coff_write_object_contents): Check
	coff_renumber_symbols, coff_write_linenumbers.

	* coffcode.h: Indent.
	(coff_add_missing_symbols): Check bfd_alloc_by_size_t.  Return a
	boolean. 
	(coff_write_object_contents): Check it.

	* coff-alpha.c (alpha_relocate_section): Check bfd_alloc.
	* coff-mips.c (mips_relocate_section): Ditto.

	* archive.c (bfd_slurp_bsd_armap_f2): Check bfd_alloc value.
	(do_slurp_bsd_armap): Ditto.
	(compute_and_write_armap): Check bfd_realloc value.

	* aoutx.h (translate_from_native_sym_flags): Check bfd_alloc
	return value.  Return boolean value.
	(NAME(aout,make_empty_symbol)): Check bfd_zalloc return value.
	(NAME(aout,slurp_symbol_table)): Check bf_alloc and bfd_zalloc
	return value.
	(add_to_stringtab): Ditto.  FIXME void
	(aout_link_hash_newfunc): Check bfd_hash_allocate return value.
	(aout_link_add_symbols): Check bfd_alloc value.
	(translate_symbol_table): Check translate_from_native_sym_flags.
	* hp300hpux.c (MY(slurp_symbol_table)): Ditto.
	* aoutx.h (aout_link_hash_newfunc): Check _bfd_link_hash_newfunc.

	* opncls.c (bfd_zalloc bfd_realloc): Check result of bfd_alloc.

	* opncls.c (obstack_chunk_alloc): Define as malloc, not
	bfd_xmalloc_by_size_t. 
	(_bfd_new_bfd): Check obstack_begin for 0 return.

	* ieee.c (obstack_chunk_alloc): Define as malloc, not
	bfd_xmalloc_by_size_t. 
	(ieee_archive_p): Check obstack_begin for 0 return and
	obstack_finish for NULL return.

	* hash.c (obstack_chunk_alloc): Define as malloc, not
	bfd_xmalloc_by_size_t. 
	(bfd_hash_table_init_n): Check obstack_begin for 0 return and
	obstack_finish for NULL return.
	(bfd_hash_lookup): Check obstack_alloc for NULL return.

	* ecofflink.c (obstack_chunk_alloc): Define as malloc, not
	bfd_xmalloc_by_size_t. 
	bfd_ecoff_debug_accumulate
	bfd_ecoff_debug_accumulate_other): Check obstack_alloc.
	(add_file_shuffle add_memory_shuffle): Check obstack_alloc for
	NULL return.  Return boolean, not void.
	(bfd_ecoff_debug_init): Check obstack_begin for 0 return.
	(bfd_ecoff_debug_accumulate): Check add_file_shuffle
	and add_memory_shuffle return. 
	(string_hash_newfunc): Check bfd_hash_allocate and bfd_hash_newfunc.
	(bfd_ecoff_debug_accumulate): Check bfd_alloc.
	(ecoff_add_string): Check add_memory_shuffle return.

	* libbfd-in.h (xmalloc, bfd_xmalloc, bfd_xmalloc_by_size_t):
	Remove decls. 
	* libbfd.h: Rebuilt.

Fri Feb 11 15:35:32 1994  Stu Grossman  (grossman at cygnus.com)

	* configure.host:  Add Lynx/rs6000 support.
	* config/i386-nlm.mt:  Enable a.out file support.
	* config/rs6000lynx.mh:  Lynx/rs6000 host support.

Fri Feb 11 17:25:58 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* archive.c (compute_and_write_armap): Rewrite somewhat to improve
	memory usage.

Fri Feb 11 13:10:42 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* archive.c: Change all references to '\n' in archive magic
	to '\012', for greater portability.
	* ecoff.c (ecoff_write_armap): Ditto.

Thu Feb 10 12:58:48 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_write_other_symbol): Check strip settings to
	see whether symbol should be output.
	* genlink.h (struct generic_write_global_symbol_info): Added info
	field.
	* linker.c (_bfd_generic_final_link): Initialize wginfo.info.
	(_bfd_generic_link_write_global_symbol): Check strip settings to
	see whether symbol should be output.
	* elf32-mips.c (mips_elf_final_link): Initialize wginfo.info.

Wed Feb  9 21:34:58 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_reloc_queue_find): Do not examine a NULL queue entry.

	* som.c: Cast return values from BFD memory allocation routines to
	avoid warnings from the HP compiler.

Wed Feb  9 12:55:02 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-alpha.c (alpha_relocate_section): Accept a LITERAL
	reloc on an "ldl" instruction too.

	* archive.c (bfd_ar_hdr_from_filesystem): Cast status elements
	when passing them to sprintf.  Use %ld instead of %d.

	* coff-rs6000.c (rs6000coff_mkarchive): Return false.
	(rs6000_coff_snarf_ar_hdr): Don't declare errno; it's not used.
	Also removed unused variable namelen.
	(rs6000coff_write_armap): Declare orl_count and stridx parameters.

Tue Feb  8 18:00:34 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* libbfd-in.h (xmalloc): Don't declare parameter type, to avoid
	conflicts.
	* libbfd.h: Rebuilt.

Tue Feb  8 15:55:50 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* coff-alpha.c (reloc_nil): New function.
	(alpha_howto_table): Use it as special_function to prevent certain
	relocs from being adjusted by bfd_perform_relocation.  IGNORE
	reloc should be partial_inplace.
	(alpha_ecoff_get_relocated_section_contents): Accept a LITERAL
	reloc on an "ldl" instruction too.

Tue Feb  8 00:32:28 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elf32-hppa.c (CURRENT_STUB_OFFSET, hppa_elf_build_arg_reloc_stub,
	hppa_elf_build_long_branch_stub):  Cast to char * instead of int
	before performing pointer arithmetic.

Mon Feb  7 20:56:27 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config.bfd (hppa*-*-osf*): Use bfd_name hppaosf for this
	configuration.
	(hppa*-*-*elf*): This configuration used hppa-elf now.

	* som.c: This file is also used for HOST_HPPAOSF.

	* targets.c (bfd_target_vector): Enable som_vec for HOST_HPPAOSF.

	* hosts/hppaosf.h: New host configuration file.

	* config/hppabsd.mt (SELECT_VECS): Add bfd_elf32_hppa_vec as
	BSD handles both SOM and ELF object files.

	* config/hppaosf.mh (HDEFINES): Delete.  No longer needed.
	(RANLIB): Doesn't do anything, define it to be "echo".

	* config/hppaosf.mt: New target makefile fragment for a PA running
	OSF1.

Mon Feb  7 15:02:06 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* archures.c (enum bfd_architecture): Added bfd_arch_powerpc.
	(archures_init_table): If SELECT_ARCHITECTURES is not defined,
	added bfd_powerpc_arch.
	* bfd-in2.h: Rebuilt.
	* cpu-powerpc.c: New file.
	* Makefile.in (ALL_MACHINES, CFILES): Added cpu-powerpc.c.
	Rebuilt dependencies.

	* elfcode.h (bfd_section_from_shdr): Get vma and alignment_power
	of an SHT_STRTAB section from sh_addr and sh_addralign, rather
	than just setting them to zero.

Sun Feb  6 20:04:10 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* elfcode.h (prep_headers, swap_out_syms): Check for NULL return
	from bfd_new_strtab. 
	(elf_compute_section_file_positions): Check for false return from
	swap_out_syms. 

	* linker.c (default_indirect_link_order): Check for NULL return
	from bfd_get_relocated_section_contents.

	* syms.c: Make example application in doc call xmalloc, not
	bfd_xmalloc. 

	* aoutx.h (NAME(aout,slurp_symbol_table),
	aout_link_get_symbols, NAME(aout,link_hash_table_create)):
	* bout.c (b_out_slurp_reloc_table, b_out_squirt_out_relocs):
	* ecoff.c (ecoff_bfd_link_hash_table_create): 
	* ecofflink.c (bfd_ecoff_debug_init): 
	* format.c (bfd_check_format_matches): 
	* linker.c (_bfd_generic_link_hash_table_create): 
	(_bfd_generic_final_link): 
	* reloc16.c (bfd_coff_reloc16_relax_section): 
	(bfd_coff_reloc16_get_relocated_section_contents): 
	* elf32-hppa.c (hppa_elf_build_arg_reloc_stub): 
	* elf32-mips.c (mips_elf_final_link): 
	* elfcode.h (bfd_new_strtab): 
	(bfd_add_2_to_strtab): 
	(elf_slurp_symbol_table): 
	(elf_corefile_note): 
	* libbfd.c (bfd_zmalloc): 
	Use malloc and check the result, instead of bfd_xmalloc.

Sat Feb  5 12:39:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config.bfd: Put m68*-*-sysv* line after m68*-*-sysv4*.

Sat Feb  5 05:32:44 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* srec.c (srec_write_record):  Put CONST keyword for "src" before
	"unsigned", some compilers don't like it after "unsigned".
	* libcoff.h, libcoff-in.h (bfd_perform_slip):  Rename "value" to
	"val" in prototype declaration because some compilers don't like
	arguments whose names are the same as types.

Sat Feb  5 01:14:38 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_check_ar_symbols): Correct test for whether
	object file defines symbol.  Also, if skipping a symbol, skip the
	second symbol of a N_WARNING or N_INDR symbol as well.

Fri Feb  4 23:55:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Add basic support for writing RS/6000 XCOFF files.
	* coff-rs6000.c (dummy_reloc): Removed.
	(rs6000coff_howto_table): Defined XCOFF relocs.
	(RTYPE2HOWTO): Defined to use rs6000coff_rtype2howto.
	(rs6000coff_rtype2howto): New function.
	(coff_bfd_reloc_type_lookup): Defined to use
	rs6000coff_reloc_type_lookup. 
	(rs6000coff_reloc_type_lookup): New function.
	(SELECT_RELOC): Defined to set r_type and r_size fields.
	(COFF_LONG_FILENAMES): Defined.
	* coffcode.h (combined_entry_type): Changed fix_tag and fix_end
	fields to bitfields.  Added fields fix_value and fix_scnlen.
	(sec_to_styp_flags): If STYP_DEBUG is defined, use it rather than
	STYP_INFO for the type of a section named .debug.
	(coff_add_missing_symbols): Don't define if RS6000COFF_C.
	(coff_write_object_contents): If RS6000COFF_C, don't call
	coff_add_missing_symbols.
	(coff_slurp_symbol_table): If RS6000COFF_C, then if the last aux
	entry has type STY_LD change the x_scnlen into a pointer to a
	symbol and set fix_scnlen.  Also, for a C_BSTAT symbol, change the
	value into a pointer to a symbol and set fix_value.
	* libcoff.h: Rebuilt.
	* coffgen.c (coff_mangle_symbols): Reindent.  If fix_value is set,
	get the symbol offset. Likewise for fix_scnlen.
	(string_size): Change type to bfd_size_type.
	(debug_string_size, debug_string_section): New static variables.
	(coff_fix_symbol_name): If bfd_coff_symname_in_debug returns true,
	write the symbol name into the .debug section; assume that the
	section has already been created with the right size.
	(coff_write_symbols): Initialize debug_string_size to 0.  If
	bfd_coff_symname_in_debug returns true, don't put symbol name in
	usual string table.  After writing out all symbols, if
	debug_string_size is not 0, check that it matches the size of the
	.debug section.
	(coff_get_normalized_symtab): Clear new fix_value and fix_scnlen
	fields.  If the string offset is 0, always use an empty string as
	the name.
	(coff_make_empty_symbol): Zero out the symbol structure.
	* reloc.c (bfd_perform_relocation): Work around one gross hack
	with another: actually look at the target name to avoid the broken
	COFF check.
	(bfd_reloc_code_real_type): Add BFD_RELOC_PPC_B26,
	BFD_RELOC_PPC_BA26 and BFD_RELOC_PPC_TOC16.
	* bfd-in2.h: Rebuilt.

Fri Feb  4 17:28:32 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* libbfd.c (bfd_zmalloc): Call bfd_xmalloc instead of malloc.
	(bfd_xmalloc, bfd_xmalloc_by_size_t): Functions deleted.
	* libbfd-in.h: Define them as macros calling xmalloc and declare
	xmalloc. 
	* libbfd.h: Rebuilt.

Thu Feb  3 16:49:35 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecofflink.c (bfd_ecoff_debug_externals): If a small undefined
	symbol has a value in the ECOFF symbol but not in the BFD symbol,
	keep the value in the ECOFF symbol.  This helps gas.

	* linker.c (_bfd_generic_link_output_symbols,
	_bfd_generic_link_write_global_symbol): Don't require that all
	references to a common symbol be themselves common symbols.

	* aoutx.h (aout_reloc_index_to_section): Handle N_UNDF.

Wed Feb  2 20:37:19 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* libbfd.c, bfd-in.h, hosts/alphaosf.h, hosts/sparc-ll.h, aoutf1.h,
	sparclynx.c, Makefile.in: Change HOST_64_BIT to BFD_HOST_64_BIT.
	* bfd-in2.h: Rebuilt.

Wed Feb  2 12:30:13 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coffswap.h (coff_swap_reloc_out): If RS6000COFF_C, handle type
	and size correctly.
	(coff_swap_aux_in): If RS6000COFF_C, change x_csect.x_scnlen to
	x_csect.x_scnlen.l to match change in coff/internal.h.
	(coff_swap_aux_out): Likewise.

	* coff-mips.c (mips_ecoff_backend_data), coff-alpha.c
	(alpha_ecoff_backend_data): Change casts of aux_in and aux_out
	fields to match yesterday's changes.

	* coffcode.h (coff_write_relocs): If SELECT_RELOC is defined, pass
	in the internal_reloc itself, not the type.
	* coff-apollo.c, coff-h8300.c, coff-h8500.c, coff-i386.c,
	coff-m68k.c, coff-sh.c, coff-we32k.c, coff-z8k.c: Changed
	definition of SELECT_RELOC accordingly.

Tue Feb  1 12:05:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coffcode.h (bfd_coff_backend_data): Added new arguments to
	_bfd_coff_swap_aux_in and _bfd_coff_swap_aux_out: aux index number
	and number of aux entries.
	(bfd_coff_swap_aux_in, bfd_coff_swap_aux_out): Changed
	accordingly.
	* libcoff.h: Rebuilt.
	* coffswap.h (coff_swap_aux_in, coff_swap_aux_out): Accept new
	arguments.  If RS6000COFF_C, only treat C_EXT and C_HIDEXT
	specially if this is the last aux entry.
	* coffgen.c (coff_write_symbol, coff_get_normalized_symtab): Pass
	new arguments to swap_aux functions.

Sun Jan 30 15:14:36 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* gen-aout.c (main): Set DEFAULT_ARCH based on preprocessor macros
	(only testing for m68k and vax at the moment); do verify that the
	preprocessor didn't trash the arch name inside the string version.
	Don't print out "pagesize =" line that prevents output from
	compiling.  Derive BYTES_IN_WORD and ARCH values from sizeof
	results.
	* Makefile.in (aout-params.h): Pass gen-aout a dummy target name.
	(check, installcheck): Identify directory in "no testsuites"
	message.

Sun Jan 30 13:25:28 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_write_symbols): Write out correct value for
	object file symbol.

Fri Jan 28 18:34:05 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* hosts/vaxbsd.h (HOST_STACK_END_ADDR): Vax BSD doesn't define
	KERNBASE, so hard-code 0x80000000 instead.

Thu Jan 27 13:54:08 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* linker.c (generic_link_add_symbol_list): If symbol is common,
	set the BSF_OLD_COMMON flag.

Wed Jan 26 13:47:15 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* format.c (bfd_check_format_matches): Put the new entry in the
	correct element of matching_vector.

Tue Jan 25 11:43:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* som.c, som.h (bfd_som_set_section_attributes,
	bfd_som_set_subsection_attributes): Change parameters from char
	to int.  Following a prototype with an old-style function definition
	in the presence of widened parameters is a GCC-ism not supported
	by the HP compiler in ANSI mode.

Tue Jan 25 11:46:46 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* reloc.c (bfd_get_reloc_size): Size of type -2 is 4 bytes, not 2.

	* hp300hpux.c (MY(write_object_contents)): Write out the symbols
	before writing out the relocs, so that the right symbol indices
	are used.

	* archive.c (do_slurp_bsd_armap, bfd_slurp_bsd_armap_f2): Do not
	try to overlay the internal carsyms on the external symdefs.  That
	can not work if the size of a host pointer is larger than 4 bytes.

	* format.c (bfd_check_format_matches): Cast result of
	bfd_xmalloc_by_size_t.
	* opncls.c (_bfd_new_bfd): Avoid ANSI C prototype.

	* archive.c: Reindented to GNU standards.

Mon Jan 24 14:41:23 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* opncls.c (_bfd_new_bfd, _bfd_new_bfd_contained_in): Add
	"_bfd_" to function names.
	* archive.c (_bfd_create_empty_archive_element_shell),
	libbfd-in.h: Change callers.

	* libbfd.c (bfd_zmalloc): Renamed from zalloc.
	* libbfd.c (bfd_add_to_string_table),
	trad-core.c (trad_unix_core_file_p),
	targets.c (bfd_target_list),
	ptrace-core.c (ptrace_unix_core_file_p),
	opncls.c (new_bfd), libbfd-in.h,
	ieee.c (ieee_make_empty_symbol),
	elf32-hppa.c (hppa_elf_stub_branch_reloc),
	(hppa_elf_stub_reloc): Change callers.
	* libbfd.h: Regenerated.

	* archive.c (_bfd_look_for_bfd_in_cache): Add "_bfd_" to name.
	(_bfd_get_elt_at_filepos), 
	coff-rs6000.c (rs6000coff_get_elt_at_filepos), libbfd-in.h:
	Change callers.

	* format.c (bfd_check_format_matches), libbfd-in.h, targets.c,
	elfcode.h (elf_object_p): Rename target_vector to bfd_target_vector
	and default_vector to bfd_default_vector.
	* libbfd.h: Regenerated.

	* format.c (bfd_check_format_matches): New function.
	(bfd_check_format): Call it.
	(bfd_matching_formats): Function removed.
	* targets.c: Replace the vector added on Jan 21 with a count of
	entries in default_vector.
	* bfd-in2.h: Regenerated.

Mon Jan 24 12:38:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-alpha.c (alpha_ecoff_object_p): New function.  Set size of
	.pdata section based on lnnoptr field, not section header.
	(alpha_relocate_section): Don't bother to check if r_symndx >= 0,
	since it is unsigned.
	(ecoffalpha_little_vec): Use alpha_ecoff_object_p rather than
	coff_object_p.
	* ecoff.c (ecoff_new_section_hook): Set alignment_power field of
	.pdata section to 3.
	(ecoff_compute_section_file_positions): Save the size of the
	.pdata section in the line_filepos field, and actually align the
	.pdata section to an alignment power of 4.
	(ecoff_compute_reloc_file_positions): Set output_has_begun after
	calling ecoff_compute_section_file_positions.
	(ecoff_write_object_contents): Set s_lnnoptr for the .pdata
	section from the line_filepos field.  Set vstamp for the optional
	header from the vstamp of the symbolic header.
	(ecoff_bfd_final_link): Set vstamp of the symbolic header to the
	vstamp used by the first object file in the link.

	* ecofflink.c (ecoff_align_debug): Align RFDs to debug_align.

	* linker.c (generic_link_check_achive_element): Set SEC_ALLOC flag
	for a created common section.
	(_bfd_generic_link_add_one_symbol): Likewise.

	* elfcode.h (swap_out_syms): Use elf_section_from_bfd_section to
	get the index of a common section, rather than always using
	SHN_COMMON (MIPS has multiple common sections).

	* elf32-hppa.c (hppa_elf_gen_reloc_type): Typo (== for =).

	* aoutx.h (aout_link_input_section_std,
	aout_link_input_section_ext): Pass additional arguments to
	reloc_overflow callback.
	* coff-alpha.c (alpha_ecoff_get_relocated_section_contents,
	alpha_relocat_section): Likewise.
	* coff-h8300.c (h8300_reloc16_extra_cases): Likewise.
	* coff-h8500.c (extra_case): Likewise.
	* coff-mips.c (mips_relocate_section): Likewise.
	* coff-z8k.c (extra_case): Likewise.
	* elf32-hppa.c (hppa_elf_stub_finish): Likewise.
	* reloc.c (bfd_generic_get_relocated_section_contents): Likewise.

	* bout.c (calljx_callback, callj_callback): Use get_value to get
	the symbol value and check for undefined symbols.
	(get_value): If the symbol is undefined, look it up in the linker
	hash table.
	(b_out_get_relocated_section_contents): For PCREL24 and PCREL13
	use get_value to get the symbol value and check for undefined
	symbols.
	* reloc16.c (bfd_coff_reloc16_get_value): If the symbol is
	undefined, look it up in the linker hash table.

	* aoutx.h (translate_symbol_table): The string index 0 has a
	special meaning for normal symbols, but not for dynamic symbols.

Sat Jan 22 12:26:01 1994  Stu Grossman  (grossman at cygnus.com)

	* sparclynx.c:  Setup appropriate macros to enable core file
	support.

Fri Jan 21 16:25:35 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* targets.c: Add a vector of matching format names.
	* format.c (bfd_matching_formats): New function to return it.
	(bfd_check_format): Set it.
	* bfd-in2.h: Regenerated.

	* bfd-in.h: Remove decls of bfd_ec type and error printing functions.
	Remove decl of type symclass; wasn't used.
	* bfd.c: Document error handling, including code fragments
	containing the error decls that were in bfd-in.h.
	Remove DEFUNs.
	* bfd-in2.h: Regenerated.

Fri Jan 21 14:11:16 1994  Sean Fagan  (sef@cygnus.com)

	* nlmcode.h, liblnm.h, nlm32-alpha.c nlm32-i386.c nlm32-sparc.c:
	The sparc (and possibly other?) NLM format requires a different
	way to write exports, so add a write_export field to the backend
	data (and set it to NULL for everything but the sparc).

Fri Jan 21 14:11:16 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* sunos.c (MY(read_dynamic_relocs)): Compare info->dynrel with NULL,
	not (struct external_nlist *) NULL.  info->dynrel is a PTR, not
	a struct external_nlist *.

Fri Jan 21 09:29:01 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* bfd.c: Remove error strings for errors removed below.
	* aoutx.h (translate_to_native_sym_flags), bfd-in.h (bfd_ec),
	oasys.c (oasys_write_sections): Rename
	bfd_error_nonrepresentable_section to nonrepresentable_section.
	None of the other bfd error names start with "bfd_error".
	Remove errors symbol_not_found and no_relocation_info, which seem
	to be unused.
	* bfd-in2.h: Regenerated.

Fri Jan 21 01:11:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* bfd.c (bfd_get_gp_size): Added support for ELF.

	* syms.c (BSF_DYNAMIC): New symbol flag.
	(bfd_print_symbol_vandf): Print it.
	* bfd-in2.h: Rebuilt.
	* libaout.h (struct aout_backend_data): New read_dynamic_symbols
	and read_dynamic_relocs fields.
	(struct aoutdata): New dynamic_info field.
	(obj_aout_dynamic_info): New accessor macro.
	* sunos.c (struct sunos_dynamic_info): New structure.
	(sunos_read_dynamic_info, MY(read_dynamic_symbols),
	MY(read_dynamic_relocs)): New functions to read dynamic symbols
	and relocs.
	* aoutx.h (NAME(aout,some_aout_object_p)): If the object is
	dynamically linked, set SEC_RELOC for both the .text and .data
	sections.
	(translate_from_native_sym_flags): Don't set BSF_LOCAL for an
	undefined symbol.
	(translate_symbol_table): New function, split out of
	slurp_symbol_table; set the BSF_DYNAMIC flag appropriately.
	(NAME(aout,slurp_symbol_table)): Read dynamic symbols, if any.
	(NAME(aout,slurp_reloc_table)): Read dynamic relocs, if any.
	(NAME(aout,get_reloc_upper_bound)): Include dynamic reloc count in
	return value.
	* aoutf1.h (NAME(aout,sunos4_write_object_contents)): Don't write
	out dynamic symbols or relocs against reloc symbols, since they
	are already in the .text section and we wouldn't know where to
	write them anyhow.
	(sunos4_aout_backend): Initialize read_dynamic_symbols and
	read_dynamic_relocs fields.
	* aout-target.h (MY(backend_data)): Initialize
	read_dynamic_symbols and read_dynamic_relocs fields.

Thu Jan 20 20:57:27 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* hosts/alphaosf.h (uint64e_type, uint64_type, int64_type): Delete
	typedefs, since HOST_64_BIT will take care of defining them in
	bfd.h.

Wed Jan 19 17:28:59 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/alphaosf.mh (HDEFINES): Don't define HOST_64_BIT here;
	that's dealt with elsewhere.
	* hosts/alphaosf.h (sprintf_vma, fprintf_vma): New macros.
	(uint64_typeHIGH, uint64_typeLOW): Comment with HOST_64_BIT so
	they get copied to bfd.h.

	* reloc.c (enum bfd_reloc_code_real): Add some Alpha relocation
	types.  Reorganized some of the existing ones.
	* coff-alpha.c (alpha_howto_table): Construct 64-bit negative one
	values in case of compilation on a 32-bit machine.  Fix pcrel
	fields of some reloc types.
	(alpha_bfd_reloc_type_lookup): Handle more relocation types.

	* bfd-in.h (uint64_typeHIGH, uint64_typeLOW): Supply default
	definitions when not defined, regardless of whether uint64_type is
	a defined macro or not.
	(fprintf_vma, sprintf_vma): Define only if fprintf_vma is not
	already defined.

Wed Jan 19 00:02:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (translate_to_native_sym_flags): Set the type of a
	BSF_WARNING symbol to N_WARNING.

Tue Jan 18 16:43:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_add_symbols): Increment sym_hash as well as p
	for an indirect or warning symbol.
	(aout_link_write_symbols): Update sym_hash with the target of an
	indirect or warning symbol.  If an indirect symbol is defined,
	output the calculated value and don't output the target symbol.

Tue Jan 18 03:54:59 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* aoutx.h (translate_from_native_sym_flags): Give warning symbols
	an (unused) nonzero section value, needed for check below.

Mon Jan 17 15:12:07 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* aoutx.h (translate_from_native_sym_flags,
	aout_link_add_symbols): Treat N_SET[ABDT] | N_EXT like
	N_SET[ABDT].

Fri Jan 14 16:45:43 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (elf_object_p): If there is a SHT_DYNAMIC section, set
	the DYNAMIC flag for the BFD.
	(NAME(bfd_elf,write_object_contents)): Don't try to write out a
	BFD with the DYNAMIC flag set, since we don't generate the program
	header table correctly.

Fri Jan 14 01:04:36 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elfcode.h (elf_slurp_symbol_table):  Free x_symp at the end
	of the function to avoid storage leak.

Thu Jan 13 23:07:32 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_link_write_external): An ifd can be -1.

Thu Jan 13 12:33:27 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_set_reloc_info): Provide a default symbol for
	relocations which don't actually have an associated symbol.

	* som.c (hppa_som_reloc): Add new "error message" argument.

Wed Jan 12 13:36:43 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	Enable gdb to write to core files on more core file readers.
	* libbfd.c (bfd_generic_set_section_contents):  Remove range check
	for section size, it is already done in bfd_set_section_contents
	with bfd_get_section_size_now.
	* aix386-core.c, hppabsd-core.c, hpux-core.c, irix-core.c,
	osf-core.c, ptrace-core.c, trad-core.c (*_set_section_contents):
	Use bfd_generic_set_section_contents instead of bfd_false.

Wed Jan 12 15:31:57 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* linker.c: Added initial documentation.

	* linker.c (default_indirect_link_order): Don't expect space for
	output relocations if there aren't any input relocations.

Tue Jan 11 14:37:12 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (NAME(aout,final_link)): Set a_entry before computing
	file offsets.

	* elfcode.h (swap_out_syms): A common symbol is STT_OBJECT, not
	STT_NOTYPE.

Tue Jan 11 09:10:56 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config.bfd: Use ELF, not COFF for m88*-*-dgux*.
	Combine m88k-*-* and m88110-*-* cases into m88*-*-*.

Tue Jan 11 00:07:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecofflink.c: Extensive changes to compress and merge debugging
	information, and to write some of out directly rather than saving
	it in memory.  Several new functions and structures, and new
	arguments to existing functions.
	* ecoff.c (ecoff_compute_reloc_file_positions): Compute
	sym_filepos as well.
	(ecoff_get_extr): Use ifdmap instead of ifdbase.
	(ecoff_write_object_contents): Don't compute sym_filepos here.
	Only output symbols if outsymbols is not NULL.
	(ecoff_bfd_final_link): Adjust for changes in ecoff_debug_info and
	bfd_ecoff_debug functions.  Write out debugging information here.
	(ecoff_final_link_debug_accumulate): Adjust for changes in
	bfd_ecoff_debug functions.
	(ecoff_link_write_external): Use ifdmap rather than ifdbase.
	* elf32-mips.c (mips_elf_read_ecoff_info): Read external symbols
	first, to put them in the first memory buffer.  Clear fdr field.
	(mips_elf_get_extr): Use pointer to unswapped external symbol.
	(mips_elf_final_link): Adjust for changes in bfd_ecoff functions.
	Preserve .text, .data and .bss even if they are empty.  Save
	pointer to unswapped external symbol rather than copying it.
	Don't free up the external symbols.
	* libelf.h (elf_symbol_type): Change mips_extr to PTR.
	* bfd-in.h (bfd_ecoff_debug_init, bfd_ecoff_debug_free): Declare.
	(bfd_ecoff_debug_accumulate): Update declaration.
	(bfd_ecoff_debug_accumulate_other): Rename declaration from
	bfd_ecoff_debug_link_other and update.
	(bfd_ecoff_write_accumulated_debug): Declare.
	* bfd-in2.h: Rebuilt.
	* Makefile.in: Rebuilt dependencies.

Mon Jan 10 20:46:53 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (install): Remove "@" which follows a backslash.  In
	this position it just causes errors, not suppresses echoes.

Mon Jan 10 09:06:21 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (hppa_som_gen_reloc_type): Fix handling of LT and RT
	field selectors.

Sun Jan  9 04:32:25 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config/i386-netbsd.mt (SELECT_VECS): Include i386bsd_vec.

Fri Jan  7 10:27:27 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* aoutx.h (adjust_z_magic): Don't merge the start of bss with the
	end of data if they are not contiguous.

	* aoutf1.h (sunos4_aout_backend): Comment the fields' meanings.

Fri Jan  7 15:40:16 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_mkobject_hook): Don't set SEC_SHARED_LIBRARY flag
	for .reginfo section here.
	(ecoff_new_section_hook): Set it here instead.

Fri Jan  7 10:29:27 1994  Stan Shebs  (shebs@andros.cygnus.com)

    	* bfd-in.h: (bfd_boolean): Add workaround for systems that also
	define true and false as enums.
	(ALMOST_STDC): Add as alternative to __STDC__.
	* bfd-in2.h: Rebuilt.
	* syms.c (bfd_print_symbol_vandf): Convert a PTR to FILE*.

Thu Jan  6 14:24:44 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* aoutx.h (translate_to_native_sym_flags): Catch the case where
	there is no output section.

Thu Jan  6 14:37:42 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmcode.h (nlm_object_p): If we can't read the fixed header,
	count it as a wrong format error, not a system call error, since
	the object file might simply be too small.

	* targets.c (target_vector): Added nlm32_alpha_vec inside #ifdef
	BFD64.
	* Makefile.in (BFD32_BACKENDS): Remove nlm32-alpha.o.
	(BFD64_BACKENDS): Add nlm32-alpha.o.  It depends on 64 bit
	support, even though it is for an Alpha in 32 bit mode.
	* configure.in (nlm32_alpha_vec): Set target64 to true.

	* nlm32-gen.c, nlm64-gen.c: Removed.  All nlm targets are
	different, so there is no point to providing a generic one.
	* libnlm.h: Don't bother to check for nlm_backend(bfd) being NULL
	in the backend accessor macros; that should no longer be possible.
	* targets.c (target_vector): Removed nlm32_big_generic_vec,
	nlm64_big_generic_vec, nlm64_little_generic_vec.
	* configure.in (nlm32_big_generic_vec, nlm32_little_generic_vec,
	nlm64_big_generic_vec, nlm64_little_generic_vec): Removed.
	* Makefile.in: Rebuilt dependencies, and
	(BFD32_BACKENDS): Removed nlm32-gen.o.
	(BFD64_BACKENDS): Removed nlm64-gen.o.
	(CFILES): Removed nlm32-gen.c and nlm64-gen.c.

	* hp300hpux.c (ARCH_SIZE): Define before including aoutx.h.

	* linker.c (_bfd_generic_link_add_one_symbol): Add constructor and
	bitsize arguments.  Changed all callers (aoutx.h).
	* libbfd-in.h (_bfd_generic_link_add_one_symbol): Add constructor
	and bitsize arguments to declaration.
	* libbfd.h: Rebuilt.

	* ecoff.c: First cut at new style of linker backend for
	ECOFF--added a bunch of functions.  Also:
	(ecoff_sec_to_styp_flags): Set flags for .pdata and .xdata.
	(ecoff_slurp_symbolic_header): New function.
	(ecoff_slurp_symbolic_info): Call ecoff_slurp_symbolic_header.
	(ecoff_compute_reloc_file_positions): New function.
	(ecoff_set_section_contents): Get out quickly if count is zero.
	Check errors better.
	(ecoff_write_object_contents): Put .xdata section in data segment.
	Call ecoff_compute_reloc_file_positions.  Don't output relocs or
	external symbols if outsymbols is NULL.
	(ecoff_bfd_final_link): Completely rewritten.
	* libecoff.h: Include bfdlink.h.
	(struct ecoff_backend_data): Add relocate_section field.
	(ecoff_data_type): Add sym_hashes and symndx_to_section fields.
	(struct ecoff_link_hash_entry): Define.
	(struct ecoff_link_hash_table): Define.
	(ecoff_bfd_link_add_symbols): Declare as function, not macro.
	(ecoff_bfd_link_hash_table_create): Likewise.
	* ecofflink.c (bfd_ecoff_debug_one_external): New function.
	(bfd_ecoff_debug_externals): Call bfd_ecoff_debug_one_external.
	* bfd-in.h (bfd_ecoff_debug_one_external): Declare.
	* bfd-in2.h: Rebuilt.
	* coff-alpha.c (alpha_howto_table): Mark BRADDR as
	partial_inplace, and set the src_mask to 0x1fffff.
	(alpha_ecoff_get_relocated_section_contents): Remove unused
	variable gp_warned.
	(alpha_convert_external_reloc): New static function.
	(alpha_relocate_section): New static function.
	(alpha_ecoff_backend_data): Initialize relocate_section field.
	* coff-mips.c (mips_relocate_refhi): New static function.
	(mips_relocate_section): New static function.
	(mips_ecoff_backend_data): Initialize relocate_section field.

	* reloc.c (_bfd_relocate_contents): Corrected signed overflow
	checking when there is an addend.

	* aoutx.h (NAME(aout,final_link)): Don't abort when trying to link
	a non a.out file, just pass it to _bfd_default_link_order.
	(aout_link_input_section_std): When doing a final PC relative link
	against a section symbol, subtract the VMA of the input section.
	(aout_link_input_section_ext): Likewise.

	* linker.c (default_indirect_link_order): Renamed from
	_bfd_generic_indirect_link_order and made static.
	(_bfd_generic_final_link): Don't switch on link_order type, just
	call _bfd_default_link_order.
	(_bfd_default_link_order): Handle bfd_indirect_link_order type.
	* genlink.h: Removed declaration of
	_bfd_generic_indirect_link_order.
	* elf32-mips.c (mips_elf_final_link): Don't switch on link_order
	type, just call _bfd_default_link_order.

Tue Jan  4 21:23:37 1994  Ian Lance Taylor  (ian@cygnus.com)

	* linker.c (generic_link_check_archive_element): Base the name of
	the created common section on the name of the section the symbol
	came from.
	(_bfd_generic_link_add_one_symbol): (case BIG): A common symbol
	must have a section, so don't bother to create one.

Mon Jan  3 15:32:16 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* aout-target.h (MY(vec)): Add DYNAMIC to mask of object flags.
	* aoutf1.h (NAME(aout,sunos4_write_object_contents)):
	If the DYNAMIC flag is set, set it in the exec header.
	* aoutx.h (NAME(aout,some_aout_object_p)): If the object is
	dynamically linked, set the DYNAMIC flag in the BFD.
	* libaout.h (N_SET_DYNAMIC): New macro.
	(N_DYNAMIC): Add missing 0 in mask.

Mon Jan  3 11:41:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_get_extr): Don't output section symbols as
	external symbols.

	* bfd-in.h, hash.c: Change bfd_hash_allocate argument from size_t
	to unsigned int, because size_t may not be defined in bfd.h.
	* bfd-in2.h: Rebuilt.

	* bfd-in.h (bfd_get{b,l}[_signed_]{16,32,64}): Declare argument to
	be a const pointer.
	* bfd-in2.h: Rebuilt.
	* libbfd.c (bfd_get{b,l}[_signed_]{16,32,64}): Declare argument to
	be a const pointer.
	* targets.c (bfd_target): Change swap function pointers
	accordingly.
	* archive.c (do_slurp_coff_armap): Change swap accordingly.
	* aix386-core.c: Change NO_GET and NO_GETS accordingly.
	* hppabsd-core.c, hpux-core.c, irix-core.c, osf-core.c,
	ptrace-core.c, trad-core.c: Change NO_GET and NO_SIGNED_GET
	accordingly.

	* libbfd-in.h (struct artdata): Added tdata field.
	(_bfd_add_bfd_to_archive_cache): Declare.
	(_bfd_get_elt_at_filepos): Declare.
	(_bfd_snarf_ar_hdr): Renamed from snarf_ar_hdr.
	* libbfd.h: Rebuilt.
	* archive.c: Cleaned up some more.
	(_bfd_generic_mkarchive, bfd_generic_archive_p): Initialize
	pointer elements of artdata.
	(_bfd_add_bfd_to_archive_cache): Renamed from add_bfd_to_cache.
	(_bfd_snarf_ar_hdr): Renamed from snarf_ar_hdr.
	(_bfd_get_elt_at_filepos): Renamed from get_elt_at_filepos.
	(get_extended_arelt_filename, bfd_construct_extended_name_table,
	bfd_ar_hdr_from_filesystem, compute_and_write_armap): Made static.
	* ecoff.c: Some comment changes.
	(ecoff_slurp_armap): Handle rename of snarf_ar_hdr.  Set
	ardata->tdata to raw_armap.
	(ecoff_archive_p): Initialize pointer elements of artdata.
	* coff-rs6000.c (rs6000coff_get_elt_at_filepos): Handle rename of
	add_bfd_to_cache.

	* hash.c: Added some documentation.

Mon Jan  3 11:09:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* aout-target.h, netbsd386.c: Replace NO_SWAP_MAGIC with SWAP_MAGIC,
	and do the swapping here rather than calling ntohl from the N_*
	macros.  This cleans up assumptions about the size of a host long,
	the existence to ntohl, etc.

Sat Jan  1 13:50:05 1994  Rob Savoye  (rob@darkstar.cygnus.com)

	* config.bfd: Add support for VSTa micro-kernel. It currently uses
	i386-aout.

Sat Jan  1 10:18:54 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* hosts/i386mach3.h (HOST_SEGMENT_SIZE): Fix value.
	* i386mach3.c (SEGMENT_SIZE): Fix value.

For older changes see ChangeLog-9193

Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
