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, 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 (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)

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

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

	* bfd/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 (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 =).

	* bfd/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:
