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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* peicode.h (dir_names): Added name descriptions

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

	* VERSION: Updated to cygnus-2.6.

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

	* targets.c (m68k4knetbsd_vec): Declare.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Permit use of mmap when available:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* libaout.h: Added M_68K4K_NETBSD magic.

	* m68k4knetbsd.c: New file.

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

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

	* hosts/mipsnbsd.h: New file.

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

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

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

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

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

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

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

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

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

	* Makefile.in: Rebuild dependencies.

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

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

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

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

	* mpw-make.sed: Generalize subdir_do edit.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* Makefile.in (FLAGS_TO_PASS):  Remove BISON.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* config.in: Rename from config.h.in.
	* configure.in: Call AC_CONFIG_HEADER with config.h:config.in.
	Check for config.h:config.in when creating stamp-h.
	* configure: Rebuild.
	* Makefile.in (stamp-h): Depend upon config.in rather than
	config.h.in.  Set CONFIG_HEADERS to config.h:config.in when
	calling config.status.

	* Makefile.in (do_distclean): Remove config.h and stamp-h.
	(Makefile): Just rebuild Makefile.
	(config.h, stamp-h): New targets.
	* configure.in: Create stamp-h when rebuilding config.h.
	* configure: Rebuild.

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

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

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

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

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

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

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

	* config.bfd: i386pe_ve -> i386pe_vec.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* libecoff.h (_bfd_ecoff_bfd_print_private_bfd_data): Fix typo.

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

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

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

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

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

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

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

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

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

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

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

	* coff-arm.c (coff_arm_reloc): Fix common size problem.
	(i3coff_object_p): Delete.

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

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

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

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

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

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

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

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

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

	* coffcode.h (pe_value): Unansify.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* elfxx-target.h: New file.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* config/i386-moss.mt: created.

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

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

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

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

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

	* versados.c: Second pass/rewrite.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Support for ARM-PE.

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

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

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

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

	* Makefile.in: Install bfdlink.h too.

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

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

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

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

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

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

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

	* aout-arm.c: (WRITE_HEADERS): Delete.
	(NAME): Define version to override default in aoutx.h
	(MY(howto_table)): Reformat.  Alter some entries slightly.
	(RELOC_ARM_BITS_NEG_{BIG,LITTLE}): Define.
	(MY(reloc_howto), MY(put_reloc), MY(relocatable_reloc)): New functions.
	(MY_reloc_howto, MY_put_reloc, MY_relocatable_reloc): Define.
	(MY(fix_pcrel_26)): Renamed from aoutarm_fix_pcrel_26, return
	bfd_reloc_ok not bfd_reloc_continue.
	(MY(fix_pcrel_26_done)): Likewise.
	(MY(bfd_reloc_type_lookup)): Renamed from aoutarm_reloc_type_lookup.
	(MY_bfd_link_hash_table_create, MY_bfd_link_add_symbols,
	MY_bfd_final_link): Delete.
	(MY_swap_std_reloc_in, MY_swap_std_reloc_out, MY_get_section_contents):
	Define.
	(aoutx.h): Include it.
	(MY(swap_std_reloc_{in,out})): New functions.
	Use RELOC_ARM_BITS_NEG_{BIG,LITTLE} to extract negative reloc bit.
	(aoutarm_squirt_out_relocs): Delete.

	From: David Taylor (dtaylor@armltd.co.uk)
	* config/arm[lb]-aout.mt: New files.
	* aout-arm.c: New file.
	* config.bfd: Handle arm{,e[lb]}-*-aout
	* configure.in: Add vetor for aout_arm_{big,little}_vec.
	* reloc.c: New relocation types for the ARM.
	* targets.c (aout_arm_{big,little}_vec): declare.

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

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

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

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

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

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

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

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

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

	Initial support for PE format.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* config.bfd: Change linux to default to elf.  Using
	i[345]86-*-linuxaout will build a library which defaults to a.out.
	* config/i386-laout.mt: Rename from old config/i386-linux.mt.
	* config/i386-linux.mt: Rename from old config/i386-lelf.mt.
	Comment out EXTRALIBS.
	* config/i386-lelf.mt: Remove.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* config.bfd (i[345]86-*-linuxelf*): New target.  Use i386-lelf.
	(i[345]86-*-gnuelf*): New target.  Use i386-gelf.
	* config/i386-lelf.mt: New file.
	* config/i386-gelf.mt: New file.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* coffgen.c: Reindented.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	* libecoff.h (ecoff_tdata): added fdrtab.

	* ecoff.c (_bfd_ecoff_find_nearest_line): Fixed.

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

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

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

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

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

	Changes from Bryan Ford, baford@schirf.cs.utah.edu:
	* config.bfd (i[345]86-*-msdos*): New target.
	* configure.in (i386msdos_vec): Handle it.
	* i386msdos.c: New file.
	* config/i386-msdos.mt: New file.
	* bfd.c (enum bfd_error): Added new value bfd_error_file_too_big.
	(bfd_errmsgs): Added string to table.
	* libaout.h (reloc_type-lookup): Declare it.
	* targets.c (enum bfd_flavour): Added bfd_target_msdos_flavour.
	(i386msdos_vec): Declare.
	(bfd_target_vector): Add it to the list.
	* bfd-in2.h: Regenerated.

Wed Feb  1 01:32:14 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_set_reloc_info, case R_DATA_ONE_SYMBOL): If there's
	nothing in R_DATA_OVERRIDE, then try to find the addend in the
	section's contents.
	(som_write_fixups): Ignore the addend in a R_DATA_ONE_SYMBOL fixup.

	* som.c (som_object_setup): More heruistics to detect the
	braindamaged HP OSF1 linker.
	(setup_sections): Don't forget to free subspace_sections if we get
	an error.
	(som_slurp_string_table): Allocate strings on this bfd's obstack
	rather than directly out of the heap.
	(som_slurp_symbol_table): Likewise for the saved copy of the
	canonical symbols.
	(som_slurp_reloc_table): Likewise for the saved copy of the
	canonical relocations.  Free the native relocations when we're
	done with them.

Tue Jan 31 21:53:28 1995  Doug Evans  <dje@canuck.cygnus.com>

	* libelf.h (struct elf_obj_tdata): New member program_header_size.
	* elfcode.h (get_program_header_size): New parameters sorted_hdrs,
	count, and maxpagesize.  All callers updated.
	If sorted_hdrs is non-NULL, use it to compute the number of segments.
	Save result in case called again.
	(assign_file_positions_except_relocs): Sort headers before calling
	get_program_header_size.

Tue Jan 31 15:27:53 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (map_program_segments): Add sorted_hdrs parameter.
	Search through it rather than through unsorted section headers.
	(assign_file_positions_except_relocs): Pass sorted_hdrs to
	map_program_segments.

Mon Jan 30 22:04:53 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* ecoff.c (_bfd_ecoff_find_nearest_line): Fix problems in range
	checking.  Expect argument OFFSET to be section-relative.  From
	David Mosberger-Tang, davidm@piston.cs.arizona.edu.

Mon Jan 30 11:22:11 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (NAME(bfd_elf,record_link_assignment)): Don't do
	anything if we are not linking an ELF file.
	(NAME(bfd_elf,size_dynamic_sections)): Likewise.

Sat Jan 28 12:48:57 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (compare_subspaces): New function to sort subspaces by
	their location in the object file.
	(setup_sections): When computing the index for each subspace,
	handle case where setup_sections reads the subspaces in a
	different order that they appear in the object file.
	(som_is_space): Also examine the output section for the containing
	section.
	(som_is_subspace, som_is_container): Likewise.
	(som_begin_writing): Don't prepare or write fixups here.  When
	writing the symbol strings, use the unsorted symbol table.
	(som_write_object_contents): Don't write the symbol table here.
	(som_finish_writing): Prepare and write the fixups here.  Likewise
	for the symbol table.
	(som_bfd_derive_misc_symbol_info): Undefined symbols always have
	type SS_UNSAT regardless of BSF_EXPORT.
	(som_set_reloc_info): Unpack and attach argument location
	information for R_PCREL_CALL and R_ABS_CALL relocations.

	* som.c (som_object_setup): New heuristic to determine if the
	entry and flags fields are switched in the exec header.

Sat Jan 28 00:16:01 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (elf_link_add_object_symbols): Use *sym_hash instead
	of h if we might not be doing an ELF link.

Fri Jan 27 16:13:42 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_final_link): If the size of an input
	.reginfo section is zero, force it to the correct size, since the
	linker emulation code may have clobbered it.

	* elfcode.h (elf_sort_hdrs): Correct SHF_ALLOC test.
	(assign_file_positions_except_relocs): Free sorted_hdrs.

Thu Jan 26 09:00:12 1995  Steve Chamberlain  <sac@splat>

	* srec.c (srec_set_section_contents): Fix off by
	one end address calculation.

	* config.bfd: (m68*-est-coff): New configuration.

Thu Jan 26 11:39:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (elf_link_add_object_symbols): Only examine weakdef if
	we are using an ELF hash table.

	* aoutx.h (NAME(aout,some_aout_object_p)): Always set EXEC_P if
	the start address is in the .text section, even if STAT_FOR_EXEC
	is set.  Just use STAT_FOR_EXEC as an additional test.

Thu Jan 26 11:12:54 1995  Michael Meissner  <meissner@cygnus.com>

	* elfcode.h (prep_headers): Use EM_PPC instead of
	EM_CYGNUS_POWERPC.

	* elf32-ppc.c (reloc_type): Add all System V.4 and eABI
	relocations currently defined.
	(powerpc_reloc_map): Adjust to new relocation names.
	(elf_powerpc_howto_table): Add most of the new relocations.
	(ELF_MACHINE_CODE): Use EM_PPC instead of EM_CYGNUS_POWERPC.

	* config.bfd: Add support for powerpc-*-eabi.

	* config/ppc-elf.mt: Add rs6000 architecture support to the
	PowerPC.  Also add XCOFF support.

Wed Jan 25 23:26:13 1995  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c (CALC_ADDEND): Don't define.
	(coff_sh_relocate_section): Remove.
	(coff_relocate_section): Use _bfd_coff_generic_relocate_section.

Tue Jan 24 14:22:47 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elf32-mips.c (mips_elf_output_extsym): Set the value of the
	ECOFF symbol from the hash table entry.

Mon Jan 23 14:53:35 1995  Steve Chamberlain  <sac@splat>

	* coff-sh.c (coff_sh_relocate_section):  Don't subtract
	vma twice.

Mon Jan 23 13:33:18 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* coff-sh.c (sh_reloc): Don't ignore the previous contents of an
	R_SH_IMM32 reloc.

	* config.bfd (i[345]86-*-gnu*): Set bfd_name to i386-gnu.
	* config/i386-gnu.mt: New file.  Include ELF support.

	* opncls.c (bfd_openstreamr): Call bfd_cache_init.

Fri Jan 20 11:44:45 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* sunos.c (sunos_add_one_symbol): Only set the sunos specific
	fields if we are doing a sunos link.

Wed Jan 18 12:28:17 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* cpu-h8300.c (h8300_info_struct): Change name from "H8/300" to
	"h8300" for consistency with other cpu-* files.
	(h8300h_info_struct): Change name from "H8/300H" to "h8300h".
	* coff-h8300.c (special): Remove unused variable diff.

Tue Jan 17 10:52:32 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* bfd-in.h (bfd_byte, reloc_howto_type): Define here, not...
	* reloc.c (bfd_byte, reloc_howto_type): here.
	* Changed all occurrences of ``const struct reloc_howto_struct''
	to be ``reloc_howto_type'' instead.
	* bfd-in2.h, libbfd.h, libcoff.h: Rebuilt.

	* opncls.c (bfd_openstreamr): New function.
	* bfd-in2.h: Rebuilt.

	* elf32-mips.c (enum reloc_type): Define new relocs used on Irix.
	(elf_mips_howto_table): Add entries for new relocs.
	(mips_elf_section_from_shdr): Handle SHT_MIPS_MSYM,
	SHT_MIPS_DWARF, and SHT_MIPS_EVENTS.
	(mips_elf_fake_sections): Handle sections named .msym, .debug_*
	and .MIPS.events.*.

	* srec.c (srec_init): Remove unused local variable i.

Sat Jan 14 19:09:48 1995  Steve Chamberlain  <sac@jonny>

	* archures.c, Makefile.in, targets.c, bfd-in2.h, coffcode.h,
	config.bfd, configure.in, config/w65.mt: Initial support for the W65.

Sun Jan 15 13:57:45 1995  Steve Chamberlain  <sac@splat>

	* opncls.c (bfd_fdopenr): Configure for WIN32.

Thu Jan 12 16:30:47 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (diststuff): Include `headers'.

	* sunos.c (m68k_plt_first_entry, sparc_plt_first_entry): Now
	const.
	* tekhex.c (digs): Ditto.
	* elf32-i386.c (elf_i386_plt0_entry, elf_i386_plt_entry): Ditto.

	* srec.c, tekhex.c: Include libiberty.h.  Delete static array
	hex_value and replace references to it with references to
	hex_init, hex_p, and hex_value.
	* Makefile.in: Updated dependencies.

	* archures.c (archures_init_table): Now const.
	(bfd_arch_init): Adjusted type of local var `ptable'.

Thu Jan 12 09:33:24 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* hosts/symmetry.h:  Redefine `shared' to enable compilation
	with the native Dynix cc compiler.
	* i386dynix.c:  Include aoutx.h instead of using routines
	from aout32.c.

Wed Jan 11 21:31:41 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* reloc.c (reloc_howto_type): Make typedef include `const'.
	* aout-ns32k.c, aoutx.h, bout.c, cf-m68klynx.c, coff-i386.c,
	coff-i960.c, coff-m68k.c, cofflink.c, cpu-ns32k.c, ecoff.c,
	elf32-hppa.c, elf32-i386.c, elf32-mips.c, elf32-sparc.c,
	elfcode.h, libbfd-in.h, linker.c, mipsbsd.c, nlm32-ppc.c, oasys.c,
	reloc.c, som.c: Don't use `const' in combination with
	`reloc_howto_type'.
	* bfd-in2.h, libbfd.h: Regenerated.

	* ecoff.c (ecoff_type_to_string): Local variable `buffer1' doesn't
	need to be static.

Wed Jan 11 14:36:41 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* sunos.c (sunos_add_one_symbol): Don't core dump if a multiple
	definition of an absolute symbol is encountered.

	* linker.c (_bfd_generic_link_add_one_symbol): Ignore
	redefinitions of an absolute symbol to the same value.

Mon Jan  9 15:51:32 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_link_add_object_symbols): It's reasonable for no
	flags to be set, so don't insist otherwise.

Fri Jan  6 16:39:40 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_slurp_symbol_table): Don't set BSF_GLOBAL for an
	undefined or common symbol.
	(elf_link_add_object_symbols): Likewise.

Wed Jan  4 14:14:05 1995  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (bfd_section_from_som_symbol): Only return sections which
	correspond to subspaces.

	* som.c (som_begin_writing): Don't forget to bump the
	total_subspaces when writing the unloadable subspaces.

Wed Dec 28 20:54:47 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_write_fixups): Use SEC_HAS_CONTENTS to identify
	bss-like sections.
	(som_get_section_contents): Likewise.
	(som_set_section_contents): Likewise.

Tue Dec 27 14:03:47 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (setup_sections): Turn off SEC_HAS_CONTENTS for bss-like
	sections.

Tue Dec 20 15:30:12 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* coffgen.c (bfd_debug_section): Deleted.
	(coff_section_from_bfd_index): Return absolute section for debug
	symbol.
	(coff_write_symbol): Set BSF_DEBUGGING for C_FILE symbols.  If
	BSF_DEBUGGING is set, set section to N_DEBUG.
	(coff_bfd_make_debug_symbol): Use absolute section.

	* elfcode.h (assign_file_positions_except_relocs): In assertion,
	force all values to the same type.

Tue Dec 20 11:11:58 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coff-h8300.c (howto_table): All relocs get a special function.
	(special): Never do anything when linking -r.

Tue Dec 20 13:58:01 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* i386linux.c (linux_add_one_symbol): Don't do anything Linux
	specific if this is not a Linux hash table.  From Eric Youngdale
	<eric@aib.com>.

	Patches from kkojima@mix.or.jp (Kazumoto Kojima):
	* mipsbsd.c (mips_howto_table_ext): Change sizes of memory relocs
	apply to from two bytes to four bytes.
	* MY(reloc_howto_type_lookup): Handle BFD_RELOC_CTOR.

	* elf32-i386.c (elf_i386_relocate_section): Correct and expand the
	list of cases for which relocation need not be computed.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

Mon Dec 19 23:09:16 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_read_symext_info): Delete do_locals and
	do_globals arguments, always read symbol extension information for
	globals and locals.  All callers changed.
	(elf32_hppa_size_stubs): Rework to only read symbol extension
	information once for each input bfd.  10% improvement in linker
	performance.

Fri Dec 16 12:28:46 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_section_from_bfd_section): Check
	bfd_is_abs_section, etc., only after checking for the section in
	the BFD and after calling the backend routine.

Wed Dec 14 20:21:58 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_map_symbols): Only use section symbols whose
	value is the start of the section, checking output_offset when
	using output_section.  When creating a new symbol, set the value
	to 0, since BFD symbol values are section relative.

Tue Dec 13 13:31:06 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* cpu-z8k.c (arch_info_struct): Make z8002 the default
	architecture.

Fri Dec  9 12:43:05 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_bfd_link_add_symbols): If the first object in the
	archive is not an ELF object, pass the archive to the add_symbols
	entry point appropriate for the first object.  From Eric Youngdale
	<eric@aib.com>.
	* aoutx.h (NAME(aout,link_add_symbols)): Similar change if the
	first object is not an a.out object.

	* elf32-i386.c (elf_i386_relocate_section): Don't compute
	relocation in cases where we won't use it.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

Thu Dec  8 14:19:41 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* pc532-mach.c (NAME): Define to use ns32kaout prefix.
	* ns32knetbsd.c (NAME): Ditto.
	(ns32kaout_32_get_section_contents): Define to standard aout-32
	version.

Fri Dec  2 13:56:49 1994  Ian Lance Taylor  <ian@rtl.cygnus.com>

	* coff-mips.c (mips_read_relocs): New static function, broken out
	of mips_relax_section.
	(mips_relax_section): Call mips_read_relocs.
	(bfd_mips_ecoff_create_embedded_relocs): New function.
	* bfd-in.h (bfd_mnips_ecoff_create_embedded_relocs): Declare.
	* bfd-in2.h: Rebuild.

Wed Nov 30 14:12:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-sh.c: Use _bfd_dummy_target instead of no_archive.

Tue Nov 29 14:00:19 1994  J.T. Conklin  <jtc@.rtl.cygnus.com>

	* config.bfd (i[345]86-*-freebsd*): Use i386-bsd as bfd_name.
	* configure.host (i[345]86-*-freebsd*): Use i386bsd as my_host.

Mon Nov 28 15:36:04 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* config/m68k-nbsd.mt (DEFAULT_VECTOR): set to m68knetbsd_vec.
	* Makefile.in: Rebuilt dependancies.
	  (CFILES): Added m68knetbsd.c.
	  (HFILES): Added netbsd.h.

Wed Nov 23 19:21:41 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coff-sh.c (shlcoff_vec): New target vector.
	(no_archive): New function.
	* coffcode.h (coff_set_arch_mach_hook, coff_set_flags): Handle
	little endian SH.
	* configure.in: Handle shl.
	* targets.c (bfd_target_vector): Add shlcoff_vec.
	* config/sh-coff.mt (SELECT_VECS): Handle shl_coff_vec.

Wed Nov 23 10:50:13 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elfcode.h (write_relocs): Do not subtract the section's vma from
	the reloc's offset when writing .o's.  Instead add the section's
	vma to the reloc's offset when writing an executable or shared
	library.

Tue Nov 22 23:34:37 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_bfd_final_link_relocate): Do not add
	input_section->vma to the relocation's offset.

Mon Nov 21 12:37:25 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* srec.c (srec_get_reloc_upper_bound): Define.
	(srec_canonicalize_reloc): Define.
	(srec_bfd_reloc_type_lookup): Define.
	(srec_vec, symbolsrec_vec): Use BFD_JUMP_TABLE_RELOCS (srec).

Sat Nov 19 03:10:51 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* configure.host (i[345]86-*-solaris*):  Use solaris2 to
	enable extraction of procfs info from core file for GDB.

Thu Nov 17 17:37:39 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* reloc.c (bfd_reloc_code_type): Add new value BFD_RELOC_12_PCREL.
	* bfd-in2.h, libbfd.h: Rebuilt.

Thu Nov 17 13:12:08 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_bfd_final_link_relocated): Use the
	vma from the output_section containing $global$ when computing
	global_vlaue.

Thu Nov 17 14:29:13 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* archive.c (_bfd_write_archive_contents): Round up the archive
	header size of the extended name table to an even number.

Wed Nov 16 16:08:06 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* coff-sh.c: Deleted some code that was commented out or inside
	"#if 0".
	(COFF_LONG_FILENAMES): Define.

	* cpu-sh.c (arch_info_struct): Convert name to lowercase, for
	consistency with other architectures.

Sat Nov 12 23:50:10 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (elf_export_symbol): Also export symbols which are
	referenced by a regular file.

Fri Nov 11 14:29:31 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add
	export_dynamic argument, and handle it.
	(elf_export_symbol): New function.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update declaration.
	(bfd_elf64_size_dynamic_sections): Update declaration.
	* bfd-in2.h: Rebuild.

Fri Nov 11 10:35:33 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hpux-core.c (hpux_core_struct): Delete handles for the
	data, reg and stack sections.  They're never used.  Delete
	accessor macros.
	(make_bfd_asection): Use bfd_make_section_anyway since debugging
	cores from dynamic executables may have several sections with the
	same logical name.
	(hpux_core_core_file_p): Don't save handles to data, reg and
	stack sections.  Handle CORE_TEXT, CORE_MMF and CORE_SHM.

Tue Nov  8 13:03:30 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* bout.c (callj_callback): Add new argument shrinking.  Change all
	callers.  Handle relocs against section symbols correctly.  If not
	shrinking, don't subtract out dstidx; the subtraction is already
	in the object file.

Sun Nov  6 12:52:00 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.h: Conditionally include <shl.h> and <dl.h>.

Thu Nov  3 18:19:13 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (ALL_MACHINES): Include m68knetbsd.o.

	* config/i386linux.mh (EXTRALIBS): Include -lm.

	Patches from DJ Delorie:
	* coff-go32.c: Replacement file, uses coff-i386.c with minor
	changes.
	* coff-i386.c (TARGET_UNDERSCORE): allow other files to override
	underscore also
	* makefile.dos: del ctor.o, add cofflink.o and elf32.o

	* aoutx.h (adjust_o_magic): If user set data section vma, use it
	to determine the default bss vma.  Patch from Takada Hiroaki,
	hiro@is.s.u-tokyo.ac.jp.
	(machine_type, case bfd_arch_vax): Set *unknown to false.  Patch
	from John David Anglin <dave@hiauly1.hia.nrc.ca>.

	* configure.in (tb): Rename ns32knetbsd_vec to pc532netbsd_vec,
	since that's what it's called.

Wed Nov  2 15:24:51 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* archive.c (normalize): Change to take a BFD as an argument.
	Change VMS version to use bfd_alloc rather than malloc, so that we
	don't lose the memory forever.
	(_bfd_construct_extended_name_table): Check the name of an archive
	entry which is not being extended, and correct it if it is wrong.
	This is necessary in case the archive was constructed by another
	program which put an entry in the extended name table which we
	don't plan to put in ourselves.  From jjc@jclark.com (James
	Clark).
	(bfd_dont_truncate_arname): Check return value of normalize.

Mon Oct 31 14:19:08 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elf32-hppa.c (ELF32_PARISC_SX_SIZE): Define.
	(ELF32_PARISC_SX_GET, ELF32_PARISC_SX_PUT): Define.
	(symextn_entry): Don't define.
	(symext_chain_size): Change type to bfd_size_type.
	(symextn_contents): Change type to bfd_byte *.
	(elf32_hppa_backend_begin_write_processing): Use
	ELF32_PARISC_SX_SIZE instead of sizeof (symext_entryS).
	(elf32_hppa_size_symext): Likewise.  Also, change type of sizep to
	bfd_size_type *.
	(elf_hppa_tc_make_sections): Cast symextn_contents assignment to
	bfd_byte *.  Use ELF32_PARISC_SX_PUT instead of direct assignment.
	(elf32_hppa_backend_symbol_table_processing): Use
	ELF32_PARISC_SX_SIZE instead of sizeof (symext_entryS).  Use
	ELF32_PARISC_SX_GET insetad of direct assignment.
	(elf32_hppa_read_symext_info): Change type of contents, and its
	assignment cast, to bfd_byte *.  Use ELF32_PARISC_SX_SIZE instead
	of sizeof (symextn_entry).  Use symext_entryS instead of
	symextn_entry.  Use ELF32_PARISC_SX_GET instead of direct
	assignment.

	* archive.c (bfd_dont_truncate_arname): Add the ar padding
	character, if there is room for it, even if the name is the
	maximum length.

	* elfcode.h (assign_file_positions_except_relocs): Sort the ELF
	headers by section address when assigning file positions.
	(elf_sort_hdrs): New static function.

Sun Oct 30 18:56:58 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Create DT_INIT
	and DT_FINI dynamic entries based on the existence of _init and
	_fini symbols, not on the .init and .fini sections.  This is
	compatible with some SVR4 linkers.
	(elf_bfd_final_link): Corresponding change.

Sat Oct 29 12:18:10 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Don't move a
	symbol with a PLT entry into the .plt section if it is defined in
	a regular file.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.

	* linker.c (_bfd_generic_link_add_archive_symbols): It's not an
	error if an empty archive has no symbol table.
	* ecoff.c (ecoff_link_add_archive_symbols): Likewise.
	* elfcode.h (elf_link_add_archive_symbols): Likewise.

Fri Oct 28 10:08:41 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

        NetBSD/m68k support, based on work by mikeb@snow.datametrics.com:
	* config.bfd (m68*-*-netbsd*): Use m68k-nbsd as bfd_name.
	* configure.in (m68knetbsd_vec): Added.
	* targets.c (bfd_m68knetbsd_vec): Added.
	* hosts/m68knbsd.h, config/m68k-nbsd.mt, m68knetbsd.c: New files.
	* Makefile.in (BFD32_BACKENDS, CFILES): Add m68knetbsd.c.

	miscellaneous cleanup required by all netbsd targets, based on work
	by Andrew Cagney <cagney@highland.com.au>:
	* netbsd.h (N_MAGIC, N_SET_MAGIC, N_GETMAGIC, N_GETMAGIC2, N_TXTADDR,
	  N_TXTOFF, N_ALIGN, N_DATADDR, N_DATOFF): Removed.  Generic a.out
	  definitions work.
	* i386nbsd.c, ns32knbsd.c, sparcnbsd.c (__LDPGSZ): Removed.
	  (MY(write_object_contents)): Use NetBSD's magic numbers

Thu Oct 27 16:59:52 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* libelf.h (struct bfd_elf_section_data): Add field dynindx.
	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Don't finalize
	the .dynsym, .dynstr or .hash sections until after the backend
	size_dynamic_sections routine, so that it can add dynamic symbols
	if it wants to.
	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Don't define the
	symbol to be in the .plt section when generating a shared library
	if it is a defined symbol.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
	(elf32_sparc_size_dynamic_sections): When generating a shared
	library, allocate space for a dynamic symbol for each output
	section, storing the index in the dynindx field of the ELF section
	data.  Adjust the other dynindx fields to account for this.
	(elf32_sparc_adjust_dynindx): New static function.
	(elf32_sparc_relocate_section): When copying a reloc into a shared
	library, use the original addend as appropriate.  Convert an
	R_SPARC_32 reloc into an R_SPARC_RELATIVE reloc.  Use the dynamic
	symbol index of the output section, not the normal symbol index.
	(elf32_sparc_finish_dynamic_sections): Don't die if a section does
	not exist when setting the value of the dynamic tags.  Write out
	a dynamic symbol for each output section.

Wed Oct 26 01:15:51 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_input_section): Don't bother to read or write
	the relocs if there aren't any.

Tue Oct 25 11:44:38 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* Makefile.in (ALL_MACHINES): Add tekhex.o.
	* targets.c (bfd_target_vector): If SELECT_VECS is not defined,
	include tekhex_vec.
	* tekhex.c (NIBBLE, ISHEX): Cast array arguments to unsigned char.
	(getvalue, getsym, out): Likewise.
	(find_chunk): Remove unused variable s.
	(first_phase): Remove unused variable s.
	(pass_over): Remove unused variable address.
	(tekhex_object_p): Remove unused variable section.
	(move_section_contents): Change return type from boolean to void.
	(tekhex_write_object_contents): Remove unused variables tdata and
	list.

	* linker.c (enum link_action): Add CIND.
	(link_action): Change COMMON_ROW\indr from MDEF to CREF.  Change
	INDR_ROW\common from MDEF to CIND.
	(_bfd_generic_link_add_one_symbol): In CREF case, handle an
	existing symbol which is indirect rather than defined.  Add new
	CIND case.

Mon Oct 24 15:33:16 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	Change S-record backend to use multiple sections to handle gaps in
	file.
	* srec.c (srec_data_list_struct): Move field next from last place
	to first.  Change type of data to bfd_byte *.
	(struct srec_symbol): Define.
	(tdata_type): Remove done_symbol_read, count, strings, symbol_idx,
	string_size, string_idx.  Change type of symbols to struct
	srec_symbol *.  Add symtail and csymbols.
	(low, high): Remove.
	(size_symbols, fillup_symbols, size_srec, fillup): Remove.
	(white, skipwhite, pass_over, object_p): Remove.
	(srec_mkobject): Call srec_init.  Adjust tdata initialization for
	field changes.
	(srec_get_byte, srec_bad_byte): New static functions.
	(srec_new_symbol, srec_scan): New static functions.
	(srec_object_p): Change type of b to bfd_byte.  Explicitly set
	wrong_format error.  Call srec_mkobject and srec_scan instead of
	object_p.
	(symbolsrec_object_p): Likewise.  Also, change b to be only two
	bytes.
	(srec_read_section): New static function.
	(srec_get_section_contents): Call srec_read_section rather than
	pass_over.  Handle zero length section correctly.
	(set_set_arch_mach): Change from function to macro.
	(srec_set_section_contents): Change data to bfd_byte *.
	(srec_write_record): Change data, end and src to bfd_byte *.
	(srec_write_header): Change buffer and dst to bfd_byte *.
	(srec_write_section): Change location to bfd_byte *.
	(srec_write_terminator): Change buffer to bfd_byte *.
	(srec_get_symtab_upper_bound): Don't call
	srec_get_section_contents.
	(srec_get_symtab): Rewrite.

	* ecoff.c (ecoff_set_symbol_info): Set udata.i to 0, not NULL.

Fri Oct 21 16:43:13 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* libaout.h (machine_type): added M_68K_NETBSD and M_SPARC_NETBSD.
	* i386netbsd.c, ns32knetbsd.c, sparcnetbsd.c: removed RCS Id's.
	  changed how PAGE_SIZE and SEGMENT_SIZE are defined so they are
	  consistant with each other.
	* netbsd.h (N_HEADER_IN_TEXT, TEXT_START_ADDR): NetBSD fits its
	  header into the start of its text segment.

Fri Oct 21 17:13:07 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* targets.c (BFD_JUMP_TABLE_ARCHIVE): Add case for
	_construct_extended_name_table.
	(bfd_target): Add _bfd_construct_extended_name_table.
	* archive.c (_bfd_archive_bsd_construct_extended_name_table): New
	function.
	(_bfd_archive_coff_construct_extended_name_table): New function.
	(_bfd_construct_extended_name_table): Renamed by adding a leading
	underscore, and made externally visible.  Added trailing_slash
	argument, and used it instead of elf_style.  Changed type of
	tablen to bfd_size_type *.
	(_bfd_write_archive_contents): Use BFD_SEND to call
	construct_extended_name_table.  Use the returned name.
	* libbfd-in.h (_bfd_construct_extended_name_table): Declare.
	(_bfd_noarchive_construct_extended_name_table): Define.
	(_bfd_archive_bsd_construct_extended_name_table): Declare.
	(_bfd_archive_coff_construct_extended_name_table): Declare.
	* bfd-in2.h: Rebuild.
	* libbfd.h: Rebuild.
	* som.c (som_construct_extended_name_table): New static function.
	* aout-target.h (MY_construct_extended_name_table): Define.
	* coff-rs6000.c (rs6000coff_construct_extended_name_table):
	Define.
	* ieee.c (ieee_construct_extended_name_table): Define.
	* libecoff.h (_bfd_ecoff_construct_extended_name_table): Define.
	* oasys.c (oasys_construct_extended_name_table): Define.

	Fix the ELF linker to not require an interpreter if no dynamic
	objects were seen, even when linking PIC code.
	* libelf.h (ELF_LINK_HASH_NEEDS_PLT): Define.
	(struct elf_link_hash_table): Add field dynamic_sections_created.
	* elfcode.h (elf_link_record_dynamic_symbol): Create dynstr if it
	doesn't already exist.
	(elf_link_add_object_symbols): Create dynamic sections based on
	dynamic_sections_created field, not dynobj field.  Don't bother to
	set dynobj.
	(elf_link_create_dynamic_sections): If dynamic sections were
	already created, don't do anything.  If dynobj is already set, use
	it; otherwise, set it to the bfd argument.  Don't initialize
	dynsymcount.  Only create dynstr if it does not exist.  Set
	dynamic_sections_created to true.
	(NAME(bfd_elf,size_dynamic_sections)): Skip most of this function
	if no dynamic objects were seen.
	(elf_adjust_dynamic_symbol): If a symbol has the
	ELF_LINK_HASH_NEEDS_PLT flag set, let the backend adjust it.
	(elf_bfd_final_link): Change most decisions based on dynobj to
	check dynamic_sections_created instead.
	(elf_link_output_extsym): Only handle dynamic symbols if a dynamic
	object was seen.
	* elf.c (_bfd_elf_link_hash_table_init): Initialize new field
	dynamic_sections_created.  Set dynsymcount to 1, not 0.
	* elf32-i386.c (elf_i386_create_dynamic_sections): Call
	elf_i386_create_got_section rather than creating the .got and
	.got.plt sections.
	(elf_i386_create_got_section): New static function.
	(elf_i386_check_relocs): Just call elf_i386_create_got_section if
	a GOT table is needed, not bfd_elf32_link_create_dynamic_sections.
	Only create the .rel.got section, and only make space for a reloc,
	for a global symbol or when generating a shared object.  For a
	R_386_PLT32 reloc, just set the	ELF_LINK_HASH_NEEDS_PLT flag.
	(elf_i386_adjust_dynamic_symbol): Rework initial assertion to
	permit ELF_LINK_HASH_NEEDS_PLT non dynamic symbols.  Create a
	procedure linkage table entry for such symbols.  But, if no
	dynamic objects were seen, never create a PLT entry.
	(elf_i386_size_dynamic_sections): If no dynamic objects were seen,
	skip most of this function, and force the size of the .rel.got
	section to zero.
	(elf_i386_relocate_section): For a R_386_GOT32 reloc against a global
	symbol when no dynamic object was seen, initialize the contents of
	the .got section.  For a R_386_GOT32 against a local symbol, only
	create a R_386_RELATIVE reloc when generating a shared object.
	Treat a R_386_PLT32 reloc against a symbol for which we did not
	create a PLT entry as a R_386_PC32 reloc.
	(elf_i386_finish_dynamic_sections): Only fiddle with the dynamic
	entries and the PLT if we saw a dynamic object.
	* elf32-sparc.c (elf_sparc_howto_table): Fix R_SPARC_PC22 by
	setting rightshift to 10.  Fix R_SPARC_WPLT20 by setting
	rightshift to 2, size to 2, bitsize to 30, and dst_mask to
	0x3fffffff.
	(elf32_sparc_create_dynamic_sections): Don't set the size of the
	.plt section.  Call elf32_sparc_create_got_section rather than
	creating the .got section.
	(elf32_sparc_check_relocs): Call elf32_sparc_create_got_section if
	a GOT table is needed, not bfd_elf32_link_create_dynamic_sections.
	Only create the .rela.got section, and only make space for a
	reloc, for a global symbol or when generating a shared object.
	Set the alignment of the .rela.got section to 2.  For a
	R_SPARC_WPLT30 reloc, just set the ELF_LINK_HASH_NEEDS_PLT flag.
	(elf32_sparc_adjust_dynamic_symbol): Rework initial assertion to
	permit ELF_LINK_HASH_NEDS_PLT non dynamic symbols.  Create a
	procedure linkage table for such symbols.  But, if no dynamic
	objects were seen, never create a PLT entry.  Initialize the size
	of the .plt section.
	(elf32_sparc_size_dynamic_sections): If no dynamic objects were
	seen, skip most of this function, and force the size of the
	.rela.got section to zero.  Strip empty reloc sections, and strip
	an empty .plt section.
	(elf32_sparc_relocate_section): For a GOT reloc against a global
	symbol when no dynamic object was seen, initialize the contents of
	the .got section.  For a GOT reloc against a local symbol, only
	create a R_SPARC_RELATIVE reloc when generating a shared object.
	Treat a R_SPARC_WPLT30 reloc against a symbol for which we did not
	create a PLT entry as a R_SPARC_WDISP30 reloc.
	(elf32_sparc_finish_dynamic_sections): Only fiddle with the
	dynamic entries and the PLT if we saw a dynamic object.

Thu Oct 20 13:28:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (elf_map_symbols): Don't worry about section symbols
	in a section not owned by any BFD.
	(elf_section_from_bfd_section): Separate out loop which calls
	backend routine.  Check bfd_section and call the backend routine
	even for a section not owned by any BFD.
	* elf32-mips.c (mips_elf_section_from_bfd_section): Handle
	.acommon section.

Wed Oct 19 13:28:29 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* coffgen.c (coff_print_symbol): Make names for section number and
	storage class slightly more verbose.  It's not clear how many
	characters I can justify using up, but before this change they
	both were abbreviated "sc" which is (IMHO) clearly unacceptable.

Wed Oct 19 01:26:39 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* binary.c (binary_set_section_contents): Set the base file
	position from the lowest section VMA, not the start address.

	* aoutx.h (NAME(aout,slurp_symbol_table)): Don't return an error
	if there are no symbols.
	* coffgen.c (coff_get_normalized_symtab): Likewise.
	* hp300hpux.c (MY(slurp_symbol_table)): Likewise.

Tue Oct 18 12:56:43 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* aout-target.h (MY_bfd_copy_private_section_data): Only copy
	subformat to another bfd_target_aout_flavour file.

	* binary.c: New file for raw binary output format.
	* Makefile.in (BFD_LIBS): Add binary.o.
	(CFILES): Add binary.c.
	* targets.c (binary_vec): Declare.
	(bfd_target_vector): Include binary_vec.

	* srec.c (tdata_type): Add field tail.
	(srec_mkobject): Initialize tail.
	(srec_set_section_contents): Sort S record list by address.

Mon Oct 17 11:38:16 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_map_symbols): Sort the symbols into a new array,
	rather than messing with Elf_Sym_Extra.  Store the symbol index in
	the udata.i field.
	(swap_out_syms): Use outbound_syms as a pointer rather than as an
	array.  Don't worry about elf_sym_num.
	* libelf.h (struct elf_sym_extra): Don't define.
	(Elf_Sym_Extra): Don't define.
	(struct elf_obj_tdata): Remove sym_extra field.
	(elf_sym_extra): Don't define.
	* elf32-hppa.c (elf32_hppa_backend_final_write_processing): Use
	udata.i rather than elf_sym_extra array.

	* syms.c (asymbol): Change udata field into a union.
	* bfd-in2.h: Rebuild.
	* aoutx.h (NAME(aout,translate_symbol_table)): Use udata.p rather
	than just udata.
	* bout.c (perform_slip): Likewise.
	* hp300hpux.c (MY(slurp_symbol_table)): Likewise.
	* ieee.c (ieee_slurp_external_symbols): Likewise.
	* linker.c (generic_link_add_symbol_list): Likewise.
	(default_indirect_link_order): Likewise.
	* oasys.c (oasys_slurp_symbol_table): Likewise.
	* reloc16.c (bfd_perform_slip): Likewise.
	* srec.c (fillup_symbols): Likewise.
	* coffcode.h (get_index): Use udata.i rather than just udata.
	(coff_slurp_symbol_table): Likewise.
	* coffgen.c (set_index): Likewise.
	* ecoff.c (ecoff_set_symbol_info): Likewise.
	* elfcode.h (elf_symbol_from_bfd_symbol): Likewise.
	* libecoff.h (ecoff_get_sym_index, ecoff_set_sym_index): Likewise.
	* som.c (compare_syms): Likewise.
	(som_prep_for_fixups): Likewise.
	(som_write_fixups): Likewise.

	Use a hash table when writing out ELF symbol names.
	* elfcode.h (elf_stringtab_init): New static function.
	(bfd_new_strtab, bfd_add_to_strtab, bfd_add_2_to_strtab): Remove.
	Change all callers to use elf_stringtab_init or
	_bfd_stringtab_add, and get stringtab lengths using
	_bfd_stringtab_size.
	(elf_fake_sections): Change ignored argument to pointer to
	boolean, and set the boolean to true if an error occurs.  If an
	error has already occurred, don't do anything.
	(assign_section_numbers): Just set sh_size, not contents.
	(elf_compute_section_file_positions): Pass the address of a
	boolean to elf_fake_sections.  Pass the address of a
	bfd_strtab_hash to swap_out_syms.  Write out the .strtab section.
	(prep_headers): Change shstrtab to bfd_strtab_hash.
	(swap_out_syms): Take a pointer to a bfd_strtab_hash as an
	argument.  Set it to the symbol names.
	(NAME(bfd_elf,write_object_contents)): Write out the section
	header names using _bfd_stringtab_emit.
	(elf_debug_section): Remove first argument; get the section name
	via the bfd_section pointer.  Change caller.
	(elf_bfd_final_link): Write out the symbol names using
	_bfd_stringtab_emit.  Likewise for the .dynstr section contents.
	Free the symbol names at the end of the function.
	(elf_link_input_bfd): Remove the last argument, output_names,
	from relocate_section.  Save the old symbol contents before
	calling elf_link_output_sym, and restore them afterward.
	* libelf.h (struct elf_link_hash_table): Change dynstr field to
	struct bfd_strtab_hash.
	(struct elf_backend_data): Remove last argument, output_names,
	from elf_backend_relocate_section field.
	(struct strtab): Don't define.
	(struct elf_obj_tdata): Change strtab_ptr field to struct
	bfd_strtab_hash.
	* elf32-hppa.c (elf32_hppa_relocate_section): Remove last
	argument, output_names.
	* elf32-i386.c (elf_i386_relocate_section): Likewise.
	* elf32-mips.c (mips_elf_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

	* libbfd-in.h (DEFAULT_STRING_SPACE_SIZE): Don't define.
	(bfd_add_to_string_table): Don't declare.
	* libbfd.h: Rebuild.
	* libbfd.c (bfd_add_to_string_table): Remove.

	* elfcode.h (elf_swap_shdr_in): Use bfd_section, not rawdata.
	Clear contents field.
	(bfd_section_from_shdr): In SHT_STRTAB case, check bfd_section,
	not rawdata.  Don't set rawdata if e_shstrndx.  Use bfd_section
	rather than rawdata in commented out code.  In SHT_REL[A] case,
	don't bother to check elf_section_data of section returned by
	section_from_elf_index.
	(elf_fake_sections): Set bfd_section, not rawdata.  Don't set
	size.
	(elf_map_symbols): Don't set elf_num_section_syms.  Don't create
	section symbols that already exist.
	(assign_file_position_for_section): Use bfd_section, not rawdata.
	(section_from_elf_index): Just check bfd_section field.
	(elf_section_from_bfd_section): Likewise.
	(elf_debug_section): Don't print rawdata, contents, or size.
	(elf_link_add_object_symbols): Don't error out if
	section_from_elf_index returns NULL.
	(elf_bfd_final_link): Check return value from
	section_from_elf_index against NULL, not bfd_is_abs_section.
	(elf_link_input_bfd): Don't check section_from_elf_index return
	value.
	* libelf.h (struct elf_obj_tdata): Remove num_section_syms field.
	(elf_num_section_syms): Don't define.
	* elf.c (elf_get_str_section): Store section contents in contents
	field rather than rawdata field.
	(elf_string_from_elf_section): Likewise.
	(_bfd_elf_make_section_from_shdr): Store BFD section pointer in
	bfd_section field rather than rawdata field.
	* elf32-hppa.c (elf32_hppa_read_symext_info): Use bfd_section
	rather than rawdata.
	(elf32_hppa_size_stubs): Likewise.
	(elf32_hppa_backend_symbol_table_processing): Don't set
	symextn_hdr->size; just use sh_size.
	* elf32-mips.c (mips_elf_final_write_processing): Use bfd_section
	rathern than rawdata.
	(mips_elf_section_from_shdr): Likewise.
	(mips_elf_section_processing): Likewise.
	(mips_elf_section_from_bfd_section): Remove rawdata check.

	* srec.c (pass_over): Set the start address for S7, S8 or S9.

Fri Oct 14 19:15:46 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* VERSION: Updated to 2.5.

Fri Oct 14 11:07:50 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* bfd.c (bfd_scan_vma): Cast end to be non const before passing it
	to strtoul.

Thu Oct 13 14:40:41 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* bfd.c (bfd_scan_vma): Pass end argument on to strtoul.

Wed Oct 12 16:46:43 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* opncls.c (bfd_realloc): Deleted, since it's broken and fixing it
	would make it slow.  Besides, it isn't used much.
	* elfcode.h (elf_map_symbols): Always allocate new storage for the
	symbol table.

Wed Oct 12 11:54:37 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ecoff.c (ecoff_set_symbol_info): Mark local stProc, stLabel or
	stabs symbols as BSF_DEBUGGING.

	* rs6000-core.c (rs6000coff_core_file_matches_executable_p): Make
	str1 and str2 const pointers.

	* Makefile.in (INSTALL): Use top level install.sh script.
	* config/README (INSTALL): Remove.
	* config/delta88.mh (INSTALL): Remove.
	* config/i386v4.mh (INSTALL): Remove.
	* config/irix4.mh (INSTALL): Remove.
	* config/irix5.mh (INSTALL): Remove.
	* config/ncrt3000.mh (INSTALL): Remove.

Tue Oct 11 13:57:56 1994  Eric Youngdale  (eric@andante.aib.com)

	* elf32-i386.c (elf_i386_check_relocs): Make sure that a symbol
	with a global offset table entry or a procedure linkage table
	entry is added to the dynamic symbol table.
	* elf32-sparc.c (elf32_sparc_check_relocs): Likewise.
	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): If a symbol has
	already gotten a procedure linkage table entry, change the
	definition to the PLT entry.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.

Tue Oct 11 17:12:00 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* lynx-core.c (lynx_core_file_p): SPARC Lynx appears to start
	dumping the .data section in a core file at a page boundary.

Mon Oct 10 16:24:44 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* cofflink.c (_bfd_coff_final_link): Cast argument to bfd_h_put_32
	to correct type.
	(coff_read_string_table): Cast argument to bfd_h_get_32 to correct
	type.
	* elfcode.h (elf_link_output_extsym): Cast argument to
	bfd_elf_hash to correct type.

	* elf32-sparc.c (elf_sparc_howto_table): The PC10, PC22, and
	WPLT30 relocations are PC-relative.

Thu Oct  6 12:57:26 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* aoutx.h (adjust_o_magic): Correctly initialize vma if the vma of
	the text section was user-defined.

Wed Oct  5 14:42:12 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* archive.c (bfd_construct_extended_name_table): SVR4 uses slash
	newline at the end of the file name, not just newline.

Tue Oct  4 11:23:12 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ecoff.c (_bfd_ecoff_new_section_hook): Default section alignment
	power to 4, rather than using align_power_min.

	* coffcode.h (coff_new_section_hook): Don't use align_power_min;
	use COFF_DEFAULT_SECTION_ALIGNMENT_POWER instead.  Force the .stab
	and .stabstr sections to be aligned to no more than 2.  Remove
	COFF_SPARC special cases.
	* coff-a29k.c: Define COFF_DEFAULT_SECTION_ALIGNMENT_POWER.
	* coff-apollo.c, coff-go32.c, coff-h8300.c: Likewise.
	* coff-h8500.c, coff-i386.c, coff-i960.c, coff-m68k.c: Likewise.
	* coff-m88k.c, coff-rs6000.c, coff-sh.c, coff-sparc.c: Likewise.
	* coff-we32k.c, coff-z8k.c: Likewise.

	* configure.in: Use ${config_shell} when running config.bfd.

	* cofflink.c (coff_link_input_bfd): Don't try to convert a long
	filename if the offset field is zero.

	* elfcode.h (swap_out_syms): If the alignment of a common symbol
	was not set, use a sensible default rather than zero.

Mon Oct  3 16:04:29 1994  H.J. Lu (hjl@nynexst.com)

	* opncls.c (bfd_close): Honor umask when setting execution bits.
	(bfd_close_all_done): Likewise.

Mon Oct  3 04:41:49 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* rs6000-core.c (rs6000coff_core_p):  Set SEC_HAS_CONTENTS flag
	for .stack and .ldinfo sections. Cast coredata.c_tab to a
	file_ptr to avoid warnings from gcc.

Fri Sep 30 13:11:38 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* elfcode.h (elf_bfd_final_link): Remove assertion when a non
        SEC_IN_MEMORY section is found in dynobj.  This can happen when
	linking PIC compiled code.

Thu Sep 29 15:21:44 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* reloc.c (bfd_install_relocation): Change type of "data" to
	bfd_byte *, to go along with yesterday's change.

	* elf.c (bfd_elf_print_symbol): Moved here from elf_print_symbol
	in elfcode.h.  (case bfd_print_symbol_all): Print symbol's size
	field, except for common symbols; print their alignment.
	* elfcode.h (elf_print_symbol): Deleted.
	* libelf.h (bfd_elf_print_symbol): Declare.
	(bfd_elf{32,64}_print_symbol): Replace declarations with macros.

	* syms.c (bfd_print_symbol_vandf): Show BSF_LOCAL and BSF_GLOBAL
	in one column.  Use the column freed up to show BSF_FUNCTION and
	BSF_FILE.

Thu Sep 29 12:29:01 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* syms.c (stt): Add .rdata and .rodata.

Wed Sep 28 13:35:05 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* reloc.c (bfd_install_relocation): Cast data_start to bfd_byte *
	before trying to add values to it.

Tue Sep 27 16:47:58 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* elf32-hppa.c (elf32_hppa_backend_final_write_processing): Cast
	return value from elf_sym_extra.
	(elf32_hppa_build_stubs): Cast return value from bfd_zalloc.
	(elf32_hppa_size_stubs): Cast return value from malloc.

	* gen-aout.c (main): Declare and initialize "arch".

	* cofflink.c (coff_link_add_symbols): Cast return value of
	bfd_hash_allocate.

	* riscix.c (riscix_callback): Use PARAMS macro in prototype.

	* reloc.c (bfd_install_relocation): New function, mostly copied
	from bfd_perform_relocation, adjusted for the assembler's needs.
	* bfd-in2.h: Regenerated.

Mon Sep 26 11:00:14 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (assign_file_positions_except_relocs): Align the
	section VMA and the file position even if D_PAGED is not set.

	* bfd-in.h (bfd_seek): Change declaration to not mark fp const.
	* bfd-in2.h: Rebuild.
	* libbfd.c (bfd_seek): Don't mark parameters const, to avoid
	conflicts with declaration.

Fri Sep 23 15:15:31 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (map_program_segments): Don't abort if we allocated
	too much space for the program header, only if we allocated too
	little.
	(assign_file_positions_except_relocs): Similar change.

Tue Sep 20 13:17:07 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* libaout.h: Fix comment.
	* ns32knbsd.h: Changed M_NS32K_NETBSD to M_532_NETBSD to match
	  libaout.h.

Tue Sep 20 15:23:21 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* Makefile.in: Rebuilt dependencies.
	(BFD32_BACKENDS): Add sparcnetbsd.o.
	(CFILES): Add ns32knetbsd.c and sparcnetbsd.c.
	* targets.c: ns32knetbsd_vec was renamed to pc532netbsd_vec.

	* coff-sh.c (rtype2howto): Remove; unused.
	(coff_sh_relocate_section): Remove unused local variable rstat.
	(reloc_processing): Comment out; unused.

Fri Sep 16 12:12:27 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* aoutx.h (aout_link_write_other_symbol): If h->indx is -2, then
	always write it out even if it would normally be stripped.
	(aout_link_input_section_std): If we find a reloc against a
	stripped global symbol, force it to be written out rather than
	merely calling unattached_reloc.
	(aout_link_input_section_ext): Likewise.
	(aout_link_reloc_link_order): Likewise.

Wed Sep 14 15:37:19 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.h (struct somdata): New field sorted_syms.
	(obj_som_sorted_syms): Accessor macro.
	* som.c (som_object_setup): Initialize sorted_syms to NULL.
	(som_prep_for_fixups): Sort a copy of the BFD's symbol table;
	store the sorted symbol table in sorted_syms.
	(som_write_fixups): Initalize tmp_reloc to NULL to make GCC happy.
	(som_begin_writing): Similarly for exec_header.  Pass the sorted
	symbol table to som_write_symbol_strings.
	(som_build_and_write_symbol_table): Use the sorted symbols rather
	than the canonical symbol table.

	* som.h (som_symbol_type): Add "stringtab_offset" field.
	* som.c (som_write_symbol_strings): Use "stringtab_offset"
	rather than destroying the "name" field in the BFD symbol.
	(som_build_and_write_symbol_table): Likewise.

Wed Sep 14 15:06:55 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* aoutx.h (aout_link_write_symbols): Rename skip_indirect to
	skip_next.  If we find an N_WARNING symbol which has already been
	written out, set skip_next.

	* libecoff.h (struct ecoff_tdata): Add field find_buffer.
	* ecoff.c: Include aout/stab_gnu.h.
	(ecoff_find_nearest_line): Handle stabs debugging information.

	* elfcode.h (elf_link_output_extsym): Keep a symbol marked as weak
	even if it is referenced by another object.

Tue Sep 13 17:57:00 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_fixup_formats): Case R_ENTRY (0xb3), set both
	'T' and 'U' to grab all the unwind information.
	(som_set_reloc_info): Make 'U' unwind bits persist across
	multiple SOM relocations.  Set the addend field of an R_ENTRY
	relocation to the value in 'T'; set the addend field on an
	R_EXIT relocation to the value in 'U'.

	* som.h (som_symbol_type): Delete unwind field.

	* som.c (som_write_fixups): For R_ENTRY fixups, get 32bits of
	unwind information from the addend field of the R_ENTRY, get the
	other 32bits from the addend field of the R_EXIT.
	(bfd_som_attach_unwind_info): Delete function and all references.

	* som.h (som_symbol_type): Delete unused a.out-related fields.

	* som.c (bfd_section_from_som_symbol): Use bfd_abs_section_ptr
	instead of &bfd_abs_section.

	* som.c (som_object_setup): Handle exec_entry and exec_flags being
	switched in executables created by the OSF1 linker.
	(som_write_fixups): Handle R_EXIT just like the R_{F,L,R}SEL
	fixups.  Support R_ALT_ENTRY (handle just like R_EXIT).

Tue Sep 13 16:04:07 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* cofflink.c (coff_link_input_bfd): syment_base is unsigned
	so can't compare -ve numbers with it.

Mon Sep 12 20:31:17 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* configure.in (shcoff_vec): Use cofflink.o now.
	* coff-sh.c: Rewritten to use new fast coff backend.

Tue Sep 13 16:23:57 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* aoutx.h (NAME(aout,final_link)): Don't assume that all the input
        files are a.out.

Tue Sep 13 11:09:39 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* configure.host (sparc-*-netbsd): use sparcnbsd.
	  (ns32k-*-netbsd): use ns32knbsd.

	* hosts/{nbsd,i386nbsd,ns32knbsd,sparcnbsd}.h: New files, NetBSD
	  host support.

	* sparcnetbsd.c: New file, adds support for NetBSD/sparc.
	* config/sparc-nbsd.mt: Likewise.

	* netbsd.h: New file, definitions common to all netbsd ports.
	* i386netbsd.c: Use it.
        * ns32knetbsd.c: Use it.

	* Makefile.in, configure.in, targets.c, config/i386-nbsd.mt,
	  config/ns32k-nbsd.mt: canonicalize netbsd targets to conform to
	  file/variable naming conventions.
	* i386netbsd.c: New file, renamed from netbsd386.c.
	* ns32knetbsd.c: New file, renamed from netbsd532.c.

Mon Sep 12 21:56:20 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_reloc_skip): Correct off-by-one error for 4-byte
	R_NO_RELOCATION fixups.
	(bfd_section_from_som_symbol): Return the absolute section if the
	symbol isn't contained in any section in the output file.
	(som_slurp_symbol_table): ST_PRI_PROG and ST_SEC_PROG symbols are
	not function symbols (they are magic code labels which *can* be the
	targets of cross space branches).  $START$ is not a section symbol.

Mon Sep 12 11:43:08 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coff-alpha.c (ecoffalpha_little_vec): Add SEC_CODE and SEC_DATA
	to section_flags.
	* coff-mips.c (ecoff_little_vec, ecoff_big_vec): Likewise.

	* elfcode.h (swap_out_syms): Set the type of an undefined symbol
	to STT_FUNC if the BSF_FUNCTION flag is set.

	* cofflink.c (coff_link_input_bfd): If r_symndx is -1, don't
	change it.
	(_bfd_coff_generic_relocate_section): If r_symndx is -1, it is an
	absolute reloc.  Don't dump core using r_symndx as an array index.
	* cf-m68klynx.c (coff_bfd_link_add_symbols): Define.
	(lynx_link_add_symbols): New static function (copy of function in
	coff-i386.c).
	(coff_m68k_lynxrtype_to_howto): sym argument may be NULL.
	* coff-i386.c (coff_i386_rtype_to_howto): Likewise.
	* coff-a29k.c (coff_a29k_relocate_section): Handle an r_symndx
	value of -1, meaning an absolute reloc.

	* ctor.c: Remove; obsolete.
	* Makefile.in: Rebuild dependencies.
	(BFD_LIBS): Remove ctor.o.
	(CFILES): Remove ctor.c.
	* libbfd.h: Rebuild.

Mon Sep 12 01:58:47 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (elf32_hppa_relocate_section): If there was a link
	error of some sort (for example, undefined symbols), then do not
	apply any relocs, just notify the user of the errors.
	(elf32_hppa_backend_begin_write_processing): Do not build a symbol
	extension section for an executable (it's useless).
	(elf32_hppa_link_output_symbol_hook): Do nothing if there was a
	link error of some sort (for example, undefined symbols).
	(elf32_hppa_read_symext_info): Kludge.  Turn off SEC_HAS_CONTENTS
	for all the input symbol extension sections to keep the generic
	BFD code happy.  Temporarily turn it on to read the contents of
	the symbol extension section.

Sun Sep 11 21:58:59 1994  Jeff Law  (law@snake.cs.utah.edu)

	* config/hppaosf.mh (RANLIB): Do not set.
	* config/hppabsd.mh (RANLIB): Likewise.

Sun Sep 11 22:50:49 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* cf-i386lynx.c: Remove #if 0 code.
	(i386_lynxos_coff_object_p): Remove unused function.
	(coff_bfd_link_add_symbols): Define.
	(lynx_link_add_symbols): New static function.
	* coffcode.h (coff_bfd_link_hash_table_create): If
	coff_relocate_section is defined, only define this if not already
	defined.
	(coff_bfd_link_add_symbols, coff_bfd_final_link): Likewise.

	* linker.c (_bfd_generic_final_link): Handle
	bfd_indirect_link_order explicitly, rather than via
	_bfd_default_link_order.
	(set_symbol_from_hash): New static function, broken out of
	_bfd_generic_link_write_global_symbol.
	(_bfd_generic_link_write_global_symbol): Symbol setting code moved
	to set_symbol_from_hash; call it.
	(default_indirect_link_order): Add generic_linker argument.
	Change all callers.  If false, set the generic symbols based on
	the hash table entries.

Fri Sep  9 11:51:49 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coffgen.c (coff_get_symtab): Reindented.  Removed commented out
	call to bfd_constructor_entry.

	Convert m68k COFF to use new COFF backend linker.
	* coff-m68k.c (coff_relocate_section): Define.
	* cf-m68klynx.c (coff_rtype_to_howto): Define.
	(coff_m68k_lynx_rtype_to_howto): New static function.
	* configure.in (m68kcoff_vec): Build cofflink.o.
	(m68kcoffun_vec, m68klynx_coff_vec): Likewise.

Thu Sep  8 16:20:38 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coff-h8300.c (h8300_reloc16_extra_cases, case RELBYTE): Flag
	overflows correctly.

Wed Sep  7 19:01:42 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* libelf.h (struct elf_backend_data): Change second argument of
	elf_backend_final_write_processing hook to boolean.
	(struct elf_obj_tdata): Add linker field.
	* elfcode.h (NAME(bfd_elf,write_object_contents)): Pass value of
	tdata linker field to final_write_processing, rather than NULL.
	(elf_bfd_final_link): Don't call final_write_processing hook.  Set
	tdata linker field to true.
	* elf32-mips.c (mips_elf_final_write_processing): Change type of
	second argument to boolean.
	* elf32-hppa.c (elf32_hppa_backend_final_write_processing):
	Likewise.

	* coff-go32.c (RTYPE2HOWTO): Fully parenthesize arguments.
	* coff-i960.c (RTYPE2HOWTO): Likewise.
	* coff-m88k.c (RTYPE2HOWTO): Likewise.
	* coff-we32k.c (RTYPE2HOWTO): Likewise.

	Make i386 COFF use new COFF backend linker.
	* coff-i386.c (RTYPE2HOWTO): Fully parenthesize arguments.
	(coff_relocate_section): Define.
	(coff_i386_rtype_to_howto): New function.
	* configure.in (i386coff_vec): Use cofflink.o.
	(i386lynx_coff_vec): Likewise.

	* coffcode.h (bfd_coff_backend_data): Add new field
	_bfd_coff_rtype_to_howto.
	(bfd_coff_rtype_to_howto): Define.
	(coff_rtype_to_howto): Define to use RTYPE2HOWTO, if not already
	defined.
	(bfd_coff_std_swap_table): Initialize new field.
	* cofflink.c (_bfd_coff_final_link): Allocate section_count + 1
	section_info structures, since the target_index is 1 based.
	(coff_link_input_bfd): Set *secpp to bfd_com_section_ptr for a
	common symbol.  Adjust rel_hash by the output reloc count.
	(_bfd_coff_generic_relocate_section): New function.
	* libcoff-in.h (_bfd_coff_generic_relocate_section): Declare.
	* libcoff.h: Rebuild.
	* coff-alpha.c (alpha_ecoff_backend_data): Initialize new field.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.

Tue Sep  6 23:28:52 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_derive_misc_symbol_info): Treat undefined code
	symbols and undefined symbols which no type in the same manner
	if the associated BFD symbol has BSF_FUNCTION set.  For a defined
	symbol which no type, select a SOM type based on the flags of the
	section containing the symbol.
	(som_slurp_symbol_type): Set BSF_FUNCTION for undefined ST_STUB
	or ST_CODE symbols (importing a non-function code symbol is
	meaningless in SOM).
	(som_set_reloc_info): Don't set "offset" to the section's vma; it
	should always start at zero.

Tue Sep  6 14:51:11 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	Add new style linker support to COFF backend.  a29k only for now.
	* cofflink.c: New file.
	* libcoff-in.h: Include bfdlink.h.
	(obj_coff_external_syms, obj_coff_strings): Define accessor macro.
	(obj_coff_sym_hashes): Define accessor macro.
	(struct coff_tdata): Add fields external_syms, strings, and
	sym_hashes.
	(struct coff_link_hash_entry): Define.
	(struct coff_link_hash_table): Define.
	(coff_link_hash_lookup, coff_link_hash_traverse): Define.
	(coff_hash_table): Define.
	(_bfd_coff_link_hash_table_create): Declare.
	(_bfd_coff_link_add_symbols, _bfd_coff_final_link): Declare.
	* coffcode.h (bfd_coff_backend_data): Add fields _bfd_relsz,
	_bfd_coff_swap_reloc_in, _bfd_coff_sym_is_global,
	_bfd_coff_compute_section_file_positions,
	_bfd_coff_relocate_section.
	(bfd_coff_relsz, bfd_coff_swap_reloc_in): Define.
	(bfd_coff_sym_is_global): Define.
	(bfd_coff_compute_section_file_positions): Define.
	(bfd_coff_relocate_section): Define.
	(coff_mkobject_hook): Initialize obj_raw_syment_count and
	obj_conv_table_size.
	(coff_compute_section_file_positions): Set target_index of all
	sections.  Set output_has_begun field.
	(coff_write_object_contents): Don't set target_index; now done by
	coff_compute_section_file_positions.  Remove obsolete handling of
	scn_base and data_base.  Don't bother to check that target_index
	is positive, since it always is.  Remove use of pad, which is
	always zero.  Check obj_raw_syment_count, not bfd_get_symcount,
	for the number of symbols, but only write them out if
	bfd_get_symcount is non-zero.  Don't check obj_raw_syment_count
	until after coff_write_symbols is called.
	(coff_slurp_symbol_table): Use obj_raw_syment_count, not
	bfd_get_symcount for the number of symbols.  Don't set
	obj_conv_table_size.
	(coff_sym_is_global): New static function or macro.
	(coff_slurp_reloc_table): Call coff_swap_reloc_in, not
	bfd_swap_reloc_in.
	(coff_bfd_link_hash_table_create): If coff_relocate_section is
	defined, define as _bfd_coff_link_hash_table_create.
	(coff_bfd_link_add_symbols): Similar change.
	(coff_bfd_final_link): Similar change.
	(coff_relocate_section): Define as NULL if not defined.
	(bfd_coff_std_swap_table): Initialize new fields.
	* coffgen.c (coff_real_object_p): Don't set obj_raw_syment_count
	and obj_conv_table_size here.
	(coff_count_linenumbers): Reindent.  If bfd_get_symcount is zero,
	add up the line numbers from the sections.
	(coff_write_symbols): Set obj_raw_syment_count, not
	bfd_get_symcount.
	(coff_pointerize_aux): Don't pointerize a nonpositive x_endndx
	field.
	(coff_get_normalized_symtab): Use obj_raw_syment_count, not
	bfd_get_symcount.
	(coff_print_symbol): If auxp->fix_end, print x_endndx value.
	* coffswap.h (coff_swap_reloc_in): Rename from bfd_swap_reloc_in.
	Reindent.  Change argument type to  PTR.
	* coff-a29k.c (coff_a29k_relocate_section): New static function.
	(coff_relocate_section): Define.
	* configure.in (a29kcoff_big_vec): Compile cofflink.o.
	* coff-alpha.c (alpha_ecoff_backend_data): Initialize new fields.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.
	* libcoff.h: Rebuilt.
	* Makefile.in: Rebuilt dependencies.
	(BFD32_BACKENDS): Add cofflink.o.
	(CFILES): Add cofflink.c.

Tue Sep  6 14:00:45 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* coffgen.c (coff_print_symbol, case bfd_symbol_print_all): Check
	for section symbol, and print its aux fields with appropriate
	labels.

	* Makefile.in (ALL_MACHINES): Added cpu-arm.o.

Sun Sep 04 17:58:10 1994  Richard Earnshaw (rwe@pegasus.esprit.ec.org)

	* aoutx.h (NAME(aout,machine_type)): Recognize the ARM processor.
	* archures.c, config.bfd, configure.host, libaout.h, reloc.c,
	targets.c: Add support for the ARM.
	* cpu-arm.c, riscix.c, config/riscix.mh, config/riscix.mt: New files.

	* aoutx.h (add_to_stringtable): Check that str isn't a NULL pointer.

Fri Sep  2 14:10:30 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* reloc.c (enum bfd_reloc_code_real): Rewrote definition to use
	new "chew" commands for simultaneous definition of enumerator and
	enumerator name table.
	(bfd_get_reloc_code_name): New function, for retrieving a symbolic
	name associated with an enumerator.
	* libbfd.h, bfd-in2.h: Regenerated.

Tue Aug 30 21:24:54 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_write_fixups, case R_ENTRY): Handle case where no
	unwind descriptor information is available.

Tue Aug 30 11:43:30 1994  Eric Youngdale  (ericy@cais.cais.com)

	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add soname
	argument, and use it to set DT_SONAME dynamic entry.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
	(bfd_elf64_size_dynamic_sections): Update prototype.
	* bfd-in2.h: Rebuilt.

Fri Aug 26 15:47:57 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coffgen.c (coff_real_object_p): Set obj_raw_syment_count.
	(coff_get_normalized_symtab): Verify obj_raw_syment_count, rather
	than setting it.

Thu Aug 25 10:44:53 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* archive.c (bsd_write_armap): Remove host dependencies.

	* aoutx.h (add_to_stringtab): Check for _bfd_stringtab_add error
	before adding BYTES_IN_WORD.

	* coffgen.c (coff_find_nearest_line): Look for the best C_FILE,
	not merely the first.

	* coffgen.c (coff_write_alien_symbol): If we are not using the
	symbol, clear the name so that it is not put in the string table.
	From Antti.Miettinen@ntc.nokia.com.

Wed Aug 24 11:49:19 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coffgen.c (coff_print_symbol): Cast pointer different to long
	and use %ld to print it.
	* osf-core.c (osf_core_core_file_p): Remove unused variable
	dseccnt.
	* ecoffswap.h (ecoff_swap_ext_out): If ECOFF_64, clear remaining
	bytes in bits2.

	* configure.host, config.bfd: Change i[34]86 to i[345]86.
	* coffgen.c (coff_real_object_p): Set obj_conv_table_size here,
	rather than waiting until coff_slurp_symbol_table.
	(coff_write_alien_symbol): Just ignore BSF_DEBUGGING symbols.
	From Antti.Miettinen@ntc.nokia.com.

	* section.c (bfd_make_section_anyway): Fix failure check of
	bfd_make_empty_symbol.  From Antti.Miettinen@ntc.nokia.com.

	* aoutx.h (translate_to_native_sym_flags): Use the output_section
	(and output_offset) if there is one.

	* aoutx.h (aout_link_check_archive_element): Discard the symbols
	if the archive element was not needed.

	* aoutx.h (aout_get_external_symbols): Ensure that a zero string
	index yields an empty string.
	(aout_link_write_symbols): If info->keep_memory is false, use name
	from original hash table entry, not from entry in *sym_hash.

	* aoutx.h (struct aout_final_link_info): Add fields contents,
	relocs, symbol_map and output_syms.
	(NAME(aout,final_link)): Work out the largest section size, reloc
	size, and number of symbols.  Use them to preallocate buffers that
	are large enough for all cases.
	(aout_link_input_bfd): Use preallocated symbol_map.
	(aout_link_write_symbols): Remove symbol_map argument; use
	preallocated symbol_map instead.  Change all callers.  Use
	preallocated output_syms.
	(aout_link_input_section): Remove symbol_map argument.  Change all
	callers.  Use preallocated contents and relocs.
	(aout_link_input_section_std): Remove symbol_map argument; use
	preallocated symbol_map instead.  Change all callers.
	(aout_link_input_section_ext): Likewise.

Tue Aug 23 10:51:09 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* archive.c (_bfd_write_archive_contents): Don't update the
	symbol map timestamp if there is no symbol map.  From
	schwab@issan.informatik.uni-dortmund.de (Andreas Schwab).

Mon Aug 22 12:26:42 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* targets.c (BFD_JUMP_TABLE_ARCHIVE): Add _update_armap_timestamp.
	(bfd_target): Add field _bfd_update_armap_timestamp.
	* bfd.c (bfd_update_armap_timestamp): Define.
	* bfd-in2.h: Rebuilt.
	* libbfd-in.h (_bfd_noarchive_update_armap_timestamp): Define.
	(_bfd_archive_bsd_update_armap_timestamp): Declare.
	(_bfd_archive_coff_update_armap_timestamp): Define.
	* libbfd.h: Rebuilt.
	* archive.c (_bfd_write_archive_contents): Call
	bfd_update_armap_timestamp instead of checking for a BSD archive
	and calling bsd_update_armap_timestamp.
	(_bfd_archive_bsd_update_armap_timestamp): Rename from
	_bsd_update_armap_timestamp.  Don't assume that armap_datepos is
	already set.
	* aout-target.h (MY_update_armap_timestamp): Define if not already
	defined.
	* coff-rs6000.c (rs6000coff_update_armap_timestamp): Define.
	* ieee.c (ieee_update_armap_timestamp): Define.
	* libecoff.h (_bfd_ecoff_update_armap_timestamp): Define.
	* oasys.c (oasys_update_armap_timestamp): Define.
	* som.c (som_update_armap_timestamp): Define.

	* hash.c: Copy string hash functions from aoutx.h.
	* aoutx.h: String hash functions moved to hash.c.  Retain
	simplified versions of add_to_stringtab and emit_stringtab.
	Change all callers to use new function and structure names.
	* libbfd-in.h (_bfd_stringtab_init, _bfd_stringtab_free): Declare.
	(_bfd_stringtab_size, _bfd_stringtab_add): Declare.
	(_bfd_stringtab_emit): Declare.
	* libbfd.h: Rebuilt.

Mon Aug 22 10:49:37 1994  Eric Youngdale  (ericy@cais.cais.com)

	* i386linux.c (linux_add_one_symbol): Create a fixup for any
	defined absolute symbol, not just GOT or PLT symbols.
	(linux_tally_symbols): Correct handling of references to defined
	symbols.

Thu Aug 18 16:29:57 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	Get ld -x -r to handle a.out set symbols correctly.
	* aoutx.h (adjust_o_magic): If the .bss VMA was set outside of
	BFD, pad the .data section up to the VMA of the .bss section.
	(aout_link_add_symbols): If a set symbol does not get modified,
	treat it as a local symbol.
	(aout_link_write_symbols): Set the value of set symbols
	correctly.  Don't discard set symbols even if discarding local
	symbols.
	(aout_link_write_other_symbol): Don't abort on bfd_link_hash_new,
	since it can now happen for set symbols.

	* elfcode.h (elf_fake_sections): Just check for ".rela" and
	".rel", not ".rela." and ".rel."; make this work by checking
	use_rela_p.
	* elf32-i386.c (elf_i386_check_relocs): Just check for ".rel", not
	".rel."
	(elf_i386_size_dynamic_sections): Likewise.
	(elf_i386_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_check_relocs): Just check for
	".rela", not ".rela."
	(elf32_sparc_size_dynamic_sections): Likewise.
	(elf32_sparc_relocate_section): Likewise.

Wed Aug 17 16:54:18 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* linker.c (_bfd_generic_link_add_archive_symbols): Initialize
	PASS to the old value + 1.

	* coffgen.c (coff_get_normalized_symtab): If a C_FILE symbol has
	no aux entries, use the symbol name as the file name.
	(coff_find_nearest_line): Look for the right C_FILE symbol, rather
	than always using the first one.  If there is a debugging symbol
	after a function symbol, skip it.  Add the section VMA to the line
	offset, since it was subtracted out in coff_slurp_line_table.

Tue Aug 16 16:53:00 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_prep_headers): If writing some form of an executable,
	allocate and attach an exec header to the BFD private data.
	(som_begin_writing): Don't fill fields of the exec header based
	on BFD private data here (like the exec flags).  Do not write
	the exec header here.
	(som_write_headers): Instead do it here.
	* som.h (struct somdata): New field "exec_hdr" for the executable
	file header.
	(obj_som_exec_hdr): New accessor macro.

Tue Aug 16 00:12:31 1994  Eric Youngdale  (ericy@cais.cais.com)

	* i386linux.c (linux_link_create_dynamic_sections): Create section
	named .linux-dynamic, not .dynamic.
	(linux_add_one_symbol): Use .linux-dynamic, not .dynamic.
	(bfd_linux_size_dynamic_sections): Likewise.
	(linux_finish_dynamic_link): Likewise.

Mon Aug 15 12:16:56 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coffgen.c (STRING_SIZE_SIZE): Define.
	(coff_fix_symbol_name): Use STRING_SIZE_SIZE, not 4.
	(coff_write_symbols, build_string_table): Likewise.
	(coff_get_normalized_symtab): Likewise.

	* libcoff-in.h (obj_symbol_slew): Don't define.
	(struct coff_tdata): Remove unused fields index_slew, raw_linenos,
	and flags.
	* libcoff.h: Rebuilt.
	* coffcode.h (coff_mkobject): Don't initialize raw_linenos.
	(coff_mkobject_hook): Don't initialize flags.

	* aout-target.h (MY_zmagic_contiguous): Define as 0 if not already
	defined.
	(MY(backend_data)): Use MY_zmagic_contiguous, not hardcoded 0.
	* i386linux.c (MY_zmagic_contiguous): Define.

	* elfcode.h (bfd_section_from_shdr): If a SHT_SYMTAB section in a
	shared object has SHF_ALLOC set, create a BFD section for it.
	(elf_section_from_bfd_section): There may be a BFD section for a
	SHT_SYMTAB section.

	* coffcode.h (styp_to_sec_flags): Add name argument.  If no flags
	are recognized, chose section flags based on the name.
	(bfd_coff_backend_data): _bfd_styp_to_sec_flags_hook field: Add
	name argument.
	(bfd_coff_styp_to_sec_flags_hook): Add name argument.
	(coff_compute_section_file_positions): Don't adjust the section
	position by COFF_PAGE_SIZE unless SEC_ALLOC is set.
	* libcoff.h: Rebuilt.
	* coffgen.c (make_a_section_from_file): Pass section name to
	bfd_coff_styp_to_sec_flags_hook.
	* ecoff.c (_bfd_ecoff_styp_to_sec_flags): Add unused name
	argument.
	* libecoff.h (_bfd_ecoff_styp_to_sec_flags): Add name argument to
	prototype.

Fri Aug 12 11:22:40 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (section_from_elf_index): Correct check for invalid
	section index.

	* elfcode.h (elf_link_add_object_symbols): If there is no symbol
	table, try using the dynamic symbol table.  From Eric Youngdale
	<ericy@cais.cais.com>.

	* configure.host (sparc-*-solaris2*): Use solaris2, not sysv4.
	The linker depends upon configuring for solaris2.
	* hosts/solaris2.h: New file; include hosts/sysv4.h.
	* config/solaris2.mh: New file; copy of config/sysv4.mh.

Wed Aug 10 13:09:38 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* aoutx.h (adjust_z_magic): Make sure data section is padded to
	page boundary when the VMA is set by the calling program.  From
	Eric Youngdale <ericy@cais.cais.com>.

Mon Aug  8 17:18:49 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Update to ns32k support, from Ian Dall (dall@hfrd.dsto.gov.au).
	* aout-ns32k.c: Add declarations that were in aout-ns32k.h, change
	declarations to traditional form.
	(MY_reloc_howto, MY_put_reloc): Change from macro to function.
	(ns32k_relocate_contents): New function.
	* aout-ns32k.h: Remove.
	* cpu-ns32k.c: Add declarations that were in aout-ns32k.h, change
	declarations to traditional form.
	(ns32k_final_link_relocate): Call ns32k_relocate_contents.
	* netbsd532.c: Reformat to standards, add copyright notice.
	(ARCH): Don't define.
	(aout-ns32k.h): Don't include.
	* pc532-mach.c: Ditto.

Mon Aug  8 17:55:52 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coff-i960.c (coff_i960_relocate): Don't try to convert relocs
	against common symbols.

Sat Aug  6 22:27:30 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* irix-core.c (irix_core_core_file_p):  Ignore sections that
	are not contained in the core file.

Thu Aug  4 11:32:23 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coff-m68k.c (m68k_reloc_type_lookup): New function.
	(coff_bfd_reloc_type_lookup): Define.
	* cf-m68klynx.c (_bfd_m68kcoff_reloc_type_lookup): Define.

	* elfcode.h (elf_bfd_final_link): Force the vma of sections which
	do not have SEC_ALLOC set to be 0.  This is needed to handle
	relocs against debugging sections.

Wed Aug  3 16:45:41 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coff-i960.c (coff_i960_relocate): Rewrote to change relocs
	against locally defined symbols into relocs against section
	symbols, for VxWorks 5.1.

Wed Aug  3 10:34:37 1994  Eric Youngdale  (ericy@cais.cais.com)

	* i386linux.c (linux_add_one_symbol): Only handle
	SHARABLE_CONFLICTS specially if BSF_CONSTRUCTOR is set.  Set hashp
	for a GOT or PLT symbol.  Set jump field of fixup for a PLT symbol.
	(linux_tally_symbols): Check section of real symbol.  When looking
	for a builtin fixup, check builtin and jump flags.  Create no more
	than one fixup, and always create one if the real symbol is in the
	absolute section.  Only strip absolute symbols.

Wed Aug  3 05:08:24 1994  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* coffcode.h (coff_write_object_contents): set internal_a.magic to
	LYNXCOFFMAGIC whenever 68k, SPARC or i386 LynxOS
	(yes, they have the same magic number!)

Tue Aug  2 10:43:21 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* hp300hpux.c (BMAGIC): Define as HPUX_DOT_O_MAGIC, to make test
	in aoutx.h work correctly.

	* coff-i960.c (coff_i960_relocate): New function.
	(howto_rellong, howto_iprmed): Use it as special_function.

	* libbfd-in.h: Move declarations of bfd_read, bfd_write, bfd_seek,
	bfd_tell, bfd_flush, and bfd_stat from here...
	* bfd-in.h: ...to here, to make them visible to programs which
	know more about the object file format than BFD does.
	* libbfd.h, bfd-in2.h: Rebuilt.

Mon Aug  1 17:55:53 1994  Fred Fish  (fnf@cygnus.com)

	* ptrace-core.c (ptrace_unix_core_file_p):  Convert zalloc usage
	to bfd_zalloc.

Mon Aug  1 12:04:40 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elf64-sparc.c (ELF_MAXPAGESIZE): Define.

	ELF linker patches from Eric Youngdale <ericy@cais.cais.com>.
	* elfcode.h (elf_link_create_dynamic_sections): Set type of
	_DYNAMIC to STT_OBJECT.
	(NAME(bfd_elf,record_link_assignment)): Always create hash table
	entry.  Set type to STT_OBJECT.
	(elf_link_output_extsym): Don't set type of weak defined symbol to
	STB_WEAK if symbol was referenced.
	(map_program_segments): Check DYNAMIC as well as EXEC_P.
	(assign_file_positions_except_relocs): Likewise.
	* elf32-i386.c (elf_i386_create_dynamic_sections): Set type of
	_GLOBAL_OFFSET_TABLE to STT_OBJECT.
	(elf_i386_check_relocs): Ignore local PLT32 relocs.
	(elf_i386_relocate_section): Treat local PLT32 relocs as PC32.

	* elfcode.h (elf_adjust_dynamic_symbol): Correct weak symbol
	handling again.

	* elfcode.h (elf_slurp_reloc_table): Don't try to read the relocs
	if there aren't any.

	* configure.host (sparc-*-solaris2*): Use sysv4, not solaris2.
	* hosts/solaris2.h: Remove.
	* config/solaris2.mh: Remove.

Sun Jul 31 14:27:04 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c, elf32-hppa.h: Update comment reflecting which
	HPPA ELF spec the code implements.

Tue Jul 26 17:38:01 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* cpu-i960.c (MAX_ARCH): New macro.
	(compatible): Use it in computing array bounds.  Put comma after
	last entry in array, for regularity.
	(arch_info_struct): Adjust spacing for easier reading.

	* coff-i960.c (howto_rellong, howto_iprmed, howto_optcall): Use
	HOWTO macro.

	* cpu-i960.c (JX): Define as bfd_mach_i960_jx.
	(scan_960_mach): Recognize jx machine.
	(MAX_ARCH): Define to be JX.
	(compatible): Add JX row to array.
	(arch_info_struct): Add JX entry.

	* archures.c (bfd_mach_i960_jx): New macro.
	* bfd-in2.h: Regenerated.

	* coffcode.h (coff_set_arch_mach_hook): For F_I960JX, set machine
	to bfd_mach_i960_jx.
	(coff_set_flags): For bfd_mach_i960_jx, set F_I960JX.

Tue Jul 26 11:04:00 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (elf_adjust_dynamic_symbol): When handling a weak
	symbol, correct check to see whether the equivalent normal symbol
	was referenced.

	Add support for creating shared libraries under i386 ELF and SPARC
	ELF.  Based on patches by Eric Youngdale <ericy@cais.cais.com>.
	* libelf.h (struct elf_link_hash_entry): Remove copy_offset field.
	Add got_offset and plt_offset fields.
	(ELF_LINK_HASH_REF_DYNAMIC_MULTIPLE): Don't define.
	(ELF_LINK_HASH_DEF_DYNAMIC_MULTIPLE): Don't define.
	(ELF_LINK_HASH_NEEDS_COPY): Define.
	(struct elf_backend_data): Add check_relocs field.
	(struct bfd_elf_section_data): Change relocs from PTR to
	Elf_Internal_Rela *.
	(struct elf_obj_tdata): Add local_got_offsets field.
	(elf_local_got_offsets): Define accessor macro.
	(bfd_elf32_link_create_dynamic_sections): Declare.
	(bfd_elf32_link_record_dynamic_symbol): Declare.
	(bfd_elf64_link_create_dynamic_sections): Declare.
	(bfd_elf64_link_record_dynamic_symbol): Declare.
	* elfcode.h (elf_slurp_reloc_table): Don't use the section data
	relocs field.
	(elf_link_record_dynamic_symbol): Make globally visible.  Use
	macro to rename to NAME(bfd_elf,link_record_dynamic_symbol).
	(elf_link_add_object_symbols): If creating a shared library, put
	make all local symbols dynamic.  Don't bother with the
	DYNAMIC_MULTIPLE flags.  Call the check_relocs backend function if
	it is defined.
	(elf_link_create_dynamic_sections): Make globally visible.  Use
	macro to rename to NAME(bfd_elf,link_create_dynamic_sections).  If
	creating a shared library, make sure that _DYNAMIC is added as a
	dynamic symbol.
	(elf_link_read_relocs): New function.
	(NAME(bfd_elf,record_link_assignment)): If creating a shared
	library, always create symbols, and always make them dynamic.
	(elf_bfd_final_link): Permit creation of shared libraries.
	(elf_link_input_bfd): Use elf_link_read_relocs to get the relocs.
	* elf.c (_bfd_elf_link_hash_newfunc): Don't initialize
	copy_offset.  Initialize got_offset and plt_offset.
	* elf32-target.h (elf_backend_check_relocs): Define as 0 if not
	defined.
	(elf32_bed): Initialize check_relocs field.
	* elf64-target.h (elf_backend_check_relocs): Define as 0 if not
	defined.
	(elf64_bed): Initialize check_relocs field.
	* elf32-i386.c (elf_howto_table): Change R_386_PLT32 and
	R_386_GOTPC to be pc_relative and pcrel_offset.
	(elf_i386_pic_plt0_entry): Define.
	(elf_i386_pic_plt_entry): Define.
	(elf_i386_create_dynamic_sections): Create a .got.plt section, and
	define _GLOBAL_OFFSET_TABLE_ at the start of it.  If creating a
	shared library, make sure that _GLOBAL_OFFSET_TABLE_ is added as a
	dynamic symbol.  Don't create .rel.bss if creating a shared
	library.
	(elf_i386_check_relocs): New function.
	(elf_i386_adjust_dynamic_symbol): Don't make a PLT entry if the
	symbol already has one.  When making a PLT entry, set plt_offset.
	Don't create a copy reloc when creating a shared library.  Don't
	set copy_offset, just set ELF_LINK_HASH_NEEDS_COPY.
	(elf_i386_allocate_dynamic_section): Remove.
	(elf_i386_size_dynamic_sections): Look through all the sections
	rather than assuming we know their names.  Remove any empty reloc
	or plt sections.  Only add a DT_DEBUG entry if not creating a
	shared library.  Only add a DT_PLTGOT entry if there is a PLT.
	Add a DT_TEXTREL entry if required.
	(elf_i386_relocate_section): Permit undefined symbols when
	creating a shared library.  Handle the special relocation types
	specially.
	(elf_i386_finish_dynamic_symbol): Create a PLT entry if plt_offset
	is set.  If creating a shared library, produce a PIC PLT entry.
	Only mark a PLT symbol as undefined if it was not defined by a
	regular object file.  Create a GOT entry if got_offset is set.
	Create a copy reloc if ELF_LINK_HASH_NEEDS_COPY is set.
	(elf_i386_finish_dynamic_sections): Change the handling of
	DT_RELSZ to simply subtract out the size of .rel.plt.  If creating
	a shared library, produce PIC PLT code.
	(elf_backend_check_relocs): Define.
	* elf32-sparc.c (elf_sparc_howto_table): Change R_SPARC_GOT10,
	R_SPARC_GOT22, and R_SPARC_PC10 to not warn about reloc overflow.
	(elf32_sparc_create_dynamic_sections): If creating a shared
	library, make sure that _GLOBAL_OFFSET_TABLE_ is added as a
        dynamic symbol, and set the type to STT_OBJECT.  Likewise for
        _PROCEDURE_LINKAGE_TABLE_.  Don't create .rel.bss if creating a
        shared library.
	(elf32_sparc_check_relocs): New function.
	(elf32_sparc_adjust_dynamic_symbol): Don't make a PLT entry if the
	symbol already has one.  When making a PLT entry, set plt_offset.
	Don't create a copy reloc when creating a shared library.  Don't
	set copy_offset, just set ELF_LINK_HASH_NEEDS_COPY.
	(elf32_sparc_allocate_dynamic_section): Remove.
	(elf32_sparc_size_dynamic_sections): Look through all the sections
	rather than assuming we know their names.  Only add a DT_DEBUG
	entry if not creating a shared library.  Add a DT_TEXTREL entry if
	required.
	(elf32_sparc_relocate_section): Permit undefined symbols when
	creating a shared library.  Handle the special relocation types
	specially.
	(elf32_sparc_finish_dynamic_symbol): Create a PLT entry if plt_offset
	is set.  Only mark a PLT symbol as undefined if it was not defined
	by a regular object file.  Create a GOT entry if got_offset is
	set.  Create a copy reloc if ELF_LINK_HASH_NEEDS_COPY is set.
	(elf32_sparc_finish_dynamic_sections): Store dynobj in a local
	variable.
	(elf_backend_check_relocs): Define.

Mon Jul 25 12:21:07 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* configure.in (pc532mach_vec): Change to pc532machaout_vec.
	* config.bfd (ns32k-*-netbsd*): Use ns32k-nbsd as bfd_name.
	* Makefile.in (ALL_MACHINES): Add cpu-ns32k.o.
	(BFD32_BACKENDS): Add aout-ns32k.o, netbsd532.o, m88kmach3.o,
	pc532-mach.o.
	* targets.c (pc532machaout_vec): Use instead of pc532mach_vec.
	* config/pc532-mach.mt (DEFAULT_VECTOR): Ditto.
	(SELECT_VECS): Remove.
	* config/ns32k-nbsd.mt: New file, was ns32k-netbsd.mt.
	* config/ns32k-netbsd.mt: Remove, name too long.

Fri Jul 22 11:07:14 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* linker.c (generic_link_check_archive_element): When changing a
	symbol to common, set the alignment.
	(_bfd_generic_link_add_one_symbol): When creating a common symbol,
	set the alignment.
	* aoutx.h (aout_link_check_ar_symbols): When changing a symbol to
	common, set the alignment.
	(aout_link_add_symbols): Restrict the alignment of a common symbol
	to the alignment power given by the architecture.
	* libelf.h (struct elf_link_hash_entry): Remove align field.  Add
	copy_offset field.
	* elfcode.h (elf_link_add_object_symbols): Store alignment in
	new bfd_link_hash_entry field, not in elf_link_hash_entry field.
	(elf_link_output_extsym): Similar change when getting alignment.
	* elf.c (_bfd_elf_link_hash_newfunc): Don't initialize align.  Do
	initialize copy_offset.
	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Use copy_offset
	field rather than align field.  Get alignment using bfd_log2
	rather than switch.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
	* elf32-i386.c (elf_i386_finish_dynamic_symbol): Use copy_offset,
	not align.
	* elf32-sparc.c (elf32_sparc_finish_dynamic_symbol): Likewise.

	* aoutx.h (NAME(aout,some_aout_object_p)): Just check
	STAT_FOR_EXEC, don't check MACH.
	* m88kmach3.c (MACH): Don't define.
	* config/i386-mach3.mt (TDEFINES): Define STAT_FOR_EXEC.
	* config/m88k-mach3.mt (TDEFINES): Likewise.
	* config/mips-mach3.mt (TDEFINES): Likewise.

Thu Jul 21 17:24:31 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* i386mach3.c: Reverted to version from before Jul 5 1994 changes.

Thu Jul 21 12:26:01 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* reloc.c (struct reloc_howto_struct): Remove special_function1.
	It's the wrong way to do things.
	(HOWTO): Change accordingly.
	(HOWTO2): Remove.
	(_bfd_final_link_relocate): Remove references to
	special_function1.
	* bfd-in2.h: Rebuilt.
	* aoutx.h (aout_link_input_section_std): Remove references to
	special_function1.
	(aout_link_reloc_link_order): Likewise.

Wed Jul 20 15:46:44 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add rpath
	argument.  If it is not NULL, use it to set DT_RPATH.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
	(bfd_elf64_size_dynamic_sections): Likewise.
	* bfd-in2.h: Rebuilt.

Sat Jul 16 21:10:39 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (elf_get_dynamic_symtab_upper_bound): If there is no
	dynamic symtab, return error.

	* libelf.h (ELF_LINK_HASH_DEFINED_WEAK): Define.
	* elfcode.h (elf_link_add_object_symbols): If symbol is defined as
	weak, set ELF_LINK_HASH_DEFINED_WEAK.
	(elf_link_output_extsym): If symbol is defined as weak, mark it
	STB_WEAK.

	* libelf.h (struct bfd_elf_section_data): Add relocs field.
	(shdr_name): Remove; unused.
	* elfcode.h (elf_slurp_reloc_table): Rewrote to handle both REL
	and RELA relocs.  Free up the unswapped relocs.  Permit the relocs
	to be cached in the section_data.  Correct the reloc address.
	(elf_slurp_reloca_table): Remove.
	(elf_canonicalize_reloc): Rewrote.
	(elf_link_input_bfd): Permit the relocs to be cached in the
	section data.

Sat Jul 16 13:55:38 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config.bfd (m88*-harris-cxux*): Recognize.
	* hosts/harris.h (POSIX_UTIME, HAVE_PROCFS): Define.

	* configure.host (m68*-atari-sysv4*): New host.
	(m68*-cbm-sysv4*): Use m68kv4 instead of amix.
	* hosts/amix.h: Remove.
	* hosts/m68kv4.h: New file, was amix.h.

Thu Jul 14 15:12:24 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* reloc.c (enum bfd_reloc_code_real, bfd_type, struct
	reloc_howto_struct, reloc_howto_type, HOWTO, HOWTO2): Copied
	changes over from bfd-in2.h so they get generated properly next
	time someone runs "make headers".
	* bfd-in2.h: Rebuilt.

	* targets.c (netbsd532_vec, pc532mach_vec): Declare const.
	(m88kmach3_vec): Restore deleted declaration.

	* configure.in: Alphabetize target vector names.

	* config/pc532mach.mh: New file.
	(HDEPFILES, HDEFINES): Define here.
	* config/pc532-mach.mt (HDEPFILES, HDEFINES): Deleted.
	* config/ns32k-netbsd.mt (HDEPFILES, HDEFINES): Deleted.

	Sun Jul 10 00:04:20 1994  Ian Dall  (dall@hfrd.dsto.gov.au)

	* pc532-mach.c: New File. pc532-mach a.out format.

	* netbsd532.c: New file. pc532-netbsd532 a.out format.

	* hosts/pc532mach.h: New file. pc532-mach host support.

	* cpu-ns32k.c: New file. ns32k support cpu specific code rather
	than format specific code.

	* config/pc532-mach.mt: New file. Support for pc532-mach target.

	* config/ns32k-netbsd.mt: New file. Support for netbsd532 target.

	* aout-ns32k.c, aout-ns32k.h: New files supporting aout format for
	ns32k series.

	* targets.c: Add netbsd532_vec and pc532machaout_vec into
	bfd_target_vector array. Move netbsd386_vec to alphabetic order
	location.

	* reloc.c (_bfd_final_link_relocate) Add support for
	special_function1 in howto.

	* libaout.h: add M_NS32032, M_NS32532, M_532_NETBSD entries in
	machine_type enum.

	* configure.in: add pc532mach_vec and netbsd532_vec entries.

	* config.bfd: add pc532mach host entries. Use for both
	ns32k-pc532-mach and ns32k-pc532-netbsd.

	* config.bfd: it doesn't work to use i386-mach3 for ns32k*-*-mach.
	add ns32k-pc532-mach* and ns32k-*-netbsd* entries.

	* bfd-in2.h: Add ns32k specific relocations to bfd_reloc_code_real
	enum.

	* bfd-in2.h: Add special_function1 to struct howto. Change HOWTO
	and NEWHOWTO macros to make special_function1 NULL. Neww HOWTO2
	macro.

	* bfd-in2.h: Split definition of struct reloc_howto_struct
	and corresponding typedef into two statements.

	* bfd-in2.h: Add entry bfd_arch_ns32k to bfd_architecture enum.

	* archures.c: Add bfd_ns32k_arch prototype, and entry in
	archures_init_table.

	* aoutx.h (aout_link_reloc_link_order): Allow for target dependent
	MY_put_reloc macro. Allow for target dependent special_function1
	to apply the relocation.

	* aoutx.h (aout_link_input_section_std): Allow for target
	dependent determination of reloc howto. Allow for target dependent
	special_function1 to apply the relocation.

	* aoutx.h (get_reloc_upper_bound): Detect bss and return 0.

	* aoutx.h (slurp_reloc_table): Detect bss and succesfully read
	zero reloc entries.

	* aoutx.h (machine_type): Add bfd_arch_ns32k case.

	* aoutx.h: Stat to determine executable status if STAT_FOR_EXEC
	is defined (not just MACH). Use fstat instead of stat and check
	for fstat error.

	* aoutx.h: Allow target dependent swap_std_reloc_{in,out}.

	* aoutx.h: Allow CTORS reloc info to be in target dependent reloc
	table.

	* aout-target.h: Apply SWAP_MAGIC (if defined) after
	swap_exec_header_in, otherwise we have magic in the wrong order.

Thu Jul 14 11:47:27 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* coff-sparc.c (sparccoff_vec): Have leading underscores.

Tue Jul 12 12:08:10 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* aix386-core.c, aoutf1.h, cisco-core.c, elfcode.h, hppabsd-core.c,
	hpux-core.c, irix-core.c, lynx-core.c, osf-core.c, ptrace-core.c,
	rs6000-core.c, trad-core.c:  Remove SEC_ALLOC flag from .reg
	sections, .reg sections are not allocated and contain debug
	information only.
	* osf-core.c (make_bfd_asection, osf_core_core_file_p):  Use
	bfd_make_section_anyway instead of building unique section names.

Tue Jul 12 11:41:22 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* libelf.h (bfd_elf32_swap_symbol_in): Declare.
	(bfd_elf32_swap_symbol_out): Declare.
	(bfd_elf64_swap_symbol_in, bfd_elf64_swap_symbol_out): Declare.
	* elf32-hppa.c (elf32_hppa_args_hash_table_init): Correct cast.

	* aout-encap.c (ARCH): Don't define.  Obsolete.
	* aout0.c, aoutx.h, gen-aout.c, hp300bsd.c, hp300hpux.c: Likewise.
	* i386aout.c, i386bsd.c, i386dynix.c, i386linux.c: Likewise.
	* i386lynx.c, m68klynx.c, mipsbsd.c, netbsd386.c: Likewise.
	* newsos3.c, sparclynx.c, sunos.c: Likewise.

Mon Jul 11 20:08:23 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* section.c (STD_SECTION): Make the sixth argument boolean, not
	the seventh.  From gary@tuva.pacsemi.oz.au (gary kopff).

Sun Jul 10 09:12:02 1994  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* aoutx.h (bfd_free_cached_info): Change name of FREE to BFCI_FREE
	in order not to collide with LynxOS's definition of FREE in
	/usr/include/sys/proc.h

Thu Jul  7 14:18:06 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* reloc.c (bfd_perform_relocation): Don't clobber the relocation
	value for coff-Intel-little or coff-Intel-big.  Hack upon hack.

Thu Jul  7 10:10:34 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* aoutx.h (howto_table_std):  Add entry for GOT relocations
	which are present in sun3 shared libraries, to avoid assertions
	when reading the dynamic relocations.

Thu Jul  7 10:19:20 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.h (R_HPPA_COMPLEX): Fix dumb typo.

Wed Jul  6 19:21:57 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* hosts/sysv4.h (qsort, strtol): Don't declare.

	* elfcode.h (elf_link_output_sym): Don't call output_symbol_hook
	if it is NULL.

	* elf32-mips.c (mips_elf_final_write_processing): Add ignored info
	argument to correspond to recent libelf.h change.

Wed Jul  6 00:48:57 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* coff-alpha.c (alpha_ecoff_mkobject_hook):  New hook to
	additionally copy object type information from the alpha file
	header to the BFD flags.
	(alpha_ecoff_backend_data):  Use it.
	(ecoffalpha_little_vec):  Add DYNAMIC to object_flags.
	* aout64.c:  Fix typo in conditional QMAGIC definition.

Wed Jul  6 00:13:17 1994  Jeff Law  (law@snake.cs.utah.edu)

	* hppabsd-core.c (hppabsd_core_core_file_p): Sanity check the
	value of clicksz to help weed out non HPPA BSD core files.

Tue Jul  5 13:26:02 1994  Stan Shebs  (shebs@andros.cygnus.com)

	Mach 3 support.
	* config.bfd (m88*-*-mach3*, mips*-dec-mach3*, mips*-*-mach3*):
	New targets.
	* configure.host (i[34]86-*-mach3*, ns32k-*-mach3*): Recognize
	"mach3" instead of "mach".
	(m88*-*-mach3*, mips*-dec-mach3*, mips*-*-mach3*): New hosts.
	* targets.c (m88kmach3_vec): New target vector.
	(bfd_target_vector): Add i386mach3_vec and m88kmach3_vec, but
	inside #if 0.
	* aoutx.h (some_aout_object_p) [MACH]: Recognize executables by
	checking for execute permission, instead of looking at entry
	point.
	* i386mach3.c: Update, define MACH, N_TXTOFF, N_TXTADDR,
	N_SHARED_LIB, don't include aout/*.h files, etc.
	* m88kmach3.c: New file, m88k Mach 3 target.
	* config/m88k-mach3.mt,	config/mips-mach3.mt: New files, target
	makefile fragments.
	* config/i386mach3.mh, config/m88kmach3.mh, config/mipsmach3.mh:
	New files, host	makefile fragments.
	* hosts/m88kmach3.h, hosts/mipsmach3.h: New files, host definitions.

Tue Jul  5 13:56:52 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* elfcode.h (swap_out_syms): Get alignment of common symbol from
	st_value field of saved ELF symbol information, if there is any.

Mon Jul  4 19:13:32 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.h (R_HPPA_COMPLEX): Define.
	* elf32-hppa.h (R_HPPA_COMPLEX): Define.
	(elf32_hppa_reloc_type): Delete R_PARISC_STUB_CALL_17.

Fri Jul  1 12:07:41 1994  Jeff Law  (law@snake.cs.utah.edu)

	* Support code for enabling the new style linker for PA ELF.
	* elfcode.h (swap_symbol_in, swap_symbol_out): Externalize.
	(elf_compute_section_file_positions): Pass link_info to
	the begin_write_processing hook.
	(bfd_elf_write_object_contents): Pass NULL for new link_info
	argument to final_write_processing hook.
	(elf_link_output_sym): Accept new "input_section" argument for
	the symbols's input section.  All callers changed.  Call the
	link_output_symbol_hook if it's defined.
	(elf_bfd_final_link): Call the final_write_processing hook if
	it's defined.
	* libelf.h (elf_backend_link_output_symbol_hook): Declare.
	(elf_backend_begin_write_processing): Add new "info" argument.
	(elf_backend_final_write_processing): Likewise.
	* elf32-target.h (elf_backend_link_output_symbol_hook): Provide
	a default definition.
	(elf32_bed): Add elf_backend_link_output_symbol_hook.
	* elf64-target.h: Likewise.

	* Major rework of the PA ELF code.  Uses the new style BFD
	linker, major cleanups.
	* hppa_stubs.h: Rewrite from scratch.  Much smaller and simpler.
	* elf32-hppa.h: Delete all symbol extension related code.
	(hppa_look_for_stubs_in_section): Delete decl.
	(elf32_hppa_size_stubs, elf32_hppa_build_stubs): New decls.
	* elf32-hppa.c: Symbol extension stuff moved form elf32-hppa.h
	into elf32-hppa.c.  Do not include aout64.h.
	(typdef hppa_stub_type): Delete.
	(elf32_hppa_stub_name_list_struct): Delete.
	(elf32_hppa_stub_description_struct): Delete.
	(arg_reloc_type): Use simpler enumerations.  All references changed.
	(arg_location, arg_reloc_relocation): Likewise.
	(elf32_hppa_symextn_map_struct): Delete.
	(get_symbol_value): Delete.
	(elf32_hppa_get_sym_extn): Delete.
	(find_stubs, new_stubs, type_of_mismatch): Delete.
	(find_stub_by_name, add_stub_by_name): Delete.
	(hppa_elf_stub_finish, hppa_elf_stub_reloc): Delete.
	(hppa_elf_arg_reloc_needed): Renamed.  Simplify.
	(hppa_elf_build_linker_stub, hppa_elf_create_stub_sec): Delete.
	(hppa_elf_long_branch_needed_p): Delete.
	(hppa_look_for_stubs_in_section): Delete.
	(hppa_elf_get_section_contents): Delete.
	(elf32_hppa_backend_symbol_processing): Delete.
	(elf32_hppa_backend_section_processing): Delete.
	(elf32_hppa_backend_section_from_shdr): Delete.
	(elf32_hppa_backend_fake_sections): Delete.
	(elf32_hppa_backend_section_from_bfd_section): Delete.
	(NEW_INSTRUCTION): Delete.
	(CURRENT_STUB_OFFSET): Delete.
	(elf32_hppa_relocate_section): New function.
	(elf32_hppa_bfd_final_link_relocate): New function.
	(elf32_hppa_size_symext): New function.
	(elf32_hppa_link_output_symbol_hook): New function.
	(elf32_hppa_read_symext_info): New function.
	(elf32_hppa_add_symbol_hook): New function.
	(elf32_hppa_name_of_stub): New function.
	(elf32_hppa_size_of_stub): New function.
	(elf32_hppa_build_one_sub): New function.
	(elf32_hppa_build_stubs): New function.
	(elf32_hppa_size_stubs): New function.
	(linker, stub and argument hash tables): Add appropriate
	structures, definitions and functions to implement all three
	hash tables.
	(hppa_elf_relocate_insn): Don't need argument location information
	in this function.
	(add_entry_to_symext_chain): Accept a symbol's argument location
	information rather than the symbol itself.  All callers changed.
	(hppa_elf_gen_reloc_type): Simplify.
	(hppa_elf_set_section_contents): Stub section is no longer special.
	(hppa_elf_reloc): Greatly simplify.
	(elf32_hppa_begin_write_processing): Accept link_info argument.
	Handle being called from the BFD backend linker.
	(elf32_hppa_final_write_processing): Likewise.
	(elf_hppa_tc_make_sections): No longer call stub_finish.

Mon Jun 27 18:07:06 1994  Steve Chamberlain  (sac@cirdan.cygnus.com)

	* section.c (bfd_get_section_contents): Put in parens to get
	precedence right.

Sun Jun 26 18:08:29 1994  Jeff Law  (law@snake.cs.utah.edu)

	* libelf.h (relocate_section): New argument "output_names" added
	to prototype.
	* elfcode.h (elf_link_input_bfd): New argument "output_names"
	added to prototype of relocate_section.  Pass the output symbol
	names to relocate_section.
	* elf32-i386.c (elf_i386_relocate_section): Use "output_names" to
	determine the name of a local symbol.
	* elf32-mips.c (mips_elf_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

Fri Jun 24 08:15:42 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	Add Solaris BCP (the part of Solaris which allows it to run
	SunOS4 a.out files) core file handling.
	* aoutf1.h (external_solaris_bcp_core, swapcore_solaris_bcp):
	New structure and its swap in function.
	(internal_sunos_core):  New member c_data_addr, to receive the
	start address of the data section in the core file.
	(swapcore_sun3, swapcore_sparc, sunos4_core_file_p):  Use it.
	(sunos4_core_file_p):  Recognize Solaris BCP core file.
	(sunos4_core_file_matches_executable_p):  Always indicate match
	for Solaris BCP core files.

Thu Jun 23 15:31:28 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	Preliminary support for generating shared libraries, from Eric
	Youngdale <ericy@cais.cais.com>.
	* elfcode.h (prep_headers): If DYNAMIC, set e_type to ET_DYN.
	(elf_link_add_object_symbols): If generating a shared library,
	create dynamic sections for first input BFD with the right format.
	(elf_link_create_dynamic_sections): Don't create .interp section
	if creating a shared library.
	(elf_link_input_bfd): Skip dynamic sections in input file.
	(elf_bfd_final_link): If creating a shared library, it's OK for
	dynobj to have sections which are not SEC_IN_MEMORY.
	* elf32-i386.c (elf_i386_size_dynamic_sections): Only set .interp
	section if not creating a shared library.
	* elf32-sparc.c (elf_sparc_size_dynamic_sections): Likewise.

	* elfcode.h (elf_object_p): Don't set DYNAMIC just because there
	is an SHT_DYNAMIC section.

	* cf-i386lynx.c (i386coff_vec): Don't include DYNAMIC in
	object_flags.
	* coff-sparc.c (sparccoff_vec): Likewise.
	* hppabsd-core.c (hppabsd_core_vec): Likewise.

	* aoutx.h (NAME(aout,some_aout_object_p)): Don't set SEC_RELOC
	just because DYNAMIC is set.

Thu Jun 23 12:53:41 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* configure.in: Change --with-targets to --enable-targets and
	--with-64-bit-bfd to --enable-64-bit-bfd.
	* Makefile.in, mpw-make.in, targets.c: Change comments.

Wed Jun 22 17:59:59 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config.bfd (powerpc-*-elf*): New target, just like
	powerpc-*-sysv4*.

	* linker.c (FAIL): Undefine macro before defining as enum.

Wed Jun 22 10:52:47 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* linker.c (_bfd_generic_link_add_archive_symbols): Initialize
	pass from abfd->archive_pass, and save it there as well.

	* hash.c (bfd_hash_allocate): Don't call bfd_set_error if
	obstack_alloc returns NULL unless the size is non-zero.

	* linker.c (archive_hash_allocate): Define.
	(_bfd_generic_link_add_archive_symbols): Use archive_hash_allocate
	rather than obstack_alloc, for clarity.

	* elfcode.h (elf_get_reloc_upper_bound): Correct.

	* aout64.c (BMAGIC, QMAGIC): Define if not already defined.  From
	Peter Schauer <pes@regent.e-technik.tu-muenchen.de>.

	Linux ZMAGIC support from Eric Youngdale <ericy@cais.cais.com>.
	* libaout.h (struct aoutdata): Add field zmagic_disk_block_size.
	* aout-target.h (MY(callback)): Only set alignment according to
	architecture if the section sizes are aligned to that alignment,
	for backward compatibility.
	(MY(set_sizes)): Initialize zmagic_disk_block_size field.
	* aoutx.h (adjust_z_magic): Set ztih if using q_magic_format.  Set
	text section filepos to zmagic_disk_block_size if not ztih.  Use a
	different padding algorithm if not ztih.
	* i386linux.c (MY_text_includes_header): Don't define.

	* aoutx.h (aout_link_check_ar_symbols): Just skip N_STAB and N_FN
        symbols; don't look them up in the hash table.  From
        ralphc@pyramid.com (Ralph Campbell).

Tue Jun 21 11:47:20 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* coff-go32.c (go32coff_archive_p): Remove unused function.

	* section.c (bfd_abs_section): Make const.
	(bfd_abs_section_ptr, bfd_is_abs_section): Define.
	(bfd_und_section): Make const.
	(bfd_und_section_ptr, bfd_is_und_section): Define.
	(bfd_com_section): Make const.
	(bfd_com_section_ptr): Define.
	(bfd_ind_section): Make const.
	(bfd_ind_section_ptr, bfd_is_ind_section): Define.
	(bfd_abs_symbol, bfd_com_symbol): Make const.
	(bfd_und_symbol, bfd_ind_symbol): Likewise.
	(global_syms): Cast initialization of section field.
	(STD_SECTION): Define as const, and cast initializations.
	* bfd-in2.h: Rebuilt.
	* Many files: Change uses of bfd_abs_section, etc., to use
	bfd_abs_section_ptr or bfd_is_abs_section, etc.

Mon Jun 20 11:06:27 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* Many files: change all bfd_target vectors to be const.  Change
	all uses of bfd_target * to be const bfd_target *.  Change
	bfd_target_vector and bfd_default_vector arrays to be const
	bfd_target * const *.

	* ecoff.c, libecoff.h, ecoffswap.h, coff-alpha.c, coff-mips.c,
	elf32-mips.c: Renamed all externally visible ECOFF routines which
	are local to BFD to start with _bfd_ecoff instead of just ecoff.

	* ecoff.c (ecoff_swap_tir_in): Change input argument to const.
	(ecoff_swap_tir_out): Likewise.
	(ecoff_swap_rndx_in, ecoff_swap_rndx_out): Likewise.
	(ecoff_slurp_symbolic_info): Add new arguments to correspond to
	read_debug_info entry point in ecoff_debug_swap structure.
	Change all calls.
	* libecoff.h (ecoff_slurp_symbolic_info): Change declaration.
	* ecoffswap.h (ecoff_swap_tir_in, ecoff_swap_tir_out): Declare.
	(ecoff_swap_rndx_in, ecoff_swap_rndx_out): Declare.
	* coff-alpha.c (alpha_ecoff_backend_data): Initialize new
	ecoff_debug_swap fields.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.
	* elf32-mips.c (mips_elf_read_ecoff_info): Undefine READ.
	(mips_elf_ecoff_debug_swap): Initialize new ecoff_debug_swap
	fields.
	* configure.in (bfd_elf32_bigmips_vec): Use ecoff.o and
	ecofflink.o.
	(bfd_elf32_littlemips_vec): Likewise.
	(ecoff_big_vec, ecoff_little_vec): Likewise.
	(ecoffalpha_little_vec): Likewise.
	* Makefile.in (BFD_LIBS): Remove ecoff.o and ecofflink.o.
	(BFD32_BACKENDS): Add ecoff.o and ecofflink.o.

	* aoutx.h (NAME(aout,final_link)): Check flavour of sub, not abfd,
	when computing reloc sizes.  From Eric Youngdale
	<ericy@cais.cais.com>.
	* elfcode.h (elf_bfd_final_link): Don't try to compute maximum
	reloc count or size for a non-ELF file.

	* mipsbsd.c (MY_final_link_callback): Define to avoid warning.

	* hp300hpux.c (MY_final_link_callback): Define to avoid warning.
	(BMAGIC, QMAGIC): Define; used by aoutx.h.
	(MY(slurp_symbol_table)): Change translate_from_native_sym_flags
	calls to use new parameters.

Fri Jun 17 14:45:32 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aout-target.h (MY(callback)): Set the alignments of the text,
	data and bss sections after determining the architecture.

	* sunos.c (sunos_add_one_symbol): Treat a common symbol from a
	dynamic object as being in the .bss section of the object, rather
	than as being undefined.

Fri Jun 17 11:16:50 1994  Jeff Law  (law@snake.cs.utah.edu)

	* libhppa.h (bfd_hppa_insn2fmt, hppa_rebuild_insn): Make INLINE.

	* elf32-hppa.h (elf_hppa_final_processing): Delete decl.

Thu Jun 16 23:36:23 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elfcode.h (elf_link_input_bfd): Don't try to read local symbols
	if there aren't any in the input file.

Thu Jun 16 14:25:22 1994  Eric Youngdale  (ericy@cais.cais.com)

	* i386linux.c: Many new functions and definitions for linker
	support for Linux shared libraries.
	* bfd-in.h (bfd_linux_size_dynamic_sections): Declare.
	* bfd-in2.h: Rebuild.

Thu Jun 16 14:23:46 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config.bfd: If second argument is ``_'', then, instead of
	echoing config file name, echo whether target uses leading
	underscores on symbol names.  Add appropriate settings to
	different cases.  Used by binutils/configure.in to set default for
	c++filt.

	* elfcode.h (elf_bfd_final_link): If trying to generate a shared
	object, warn and return false.

	* aoutx.h (NAME(aout,some_aout_object_p)): Accept BMAGIC objects
	and treat them as OMAGIC.

Wed Jun 15 18:02:21 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	Enable sparc v9 support for release.  Note that this is still a
	work in progress, pending release of an ABI specification.
	* config.bfd, configure.in: Include sparc v9 elf config.
	* elfcode.h (prep_headers): Handle sparc v9 (64 bit).
	* reloc.c (bfd_reloc_code_real): New reloc types.
	* elf64-sparc.c: Implement elf64-sparc target.
	* Makefile.in, targets.c: Updated.

Wed Jun 15 01:34:07 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* libelf.h (struct elf_obj_tdata): New field dt_needed_name.
	(elf_dt_needed_name): New accessor macro.
	* elfcode.h (elf_link_add_object_symbols): If elf_dt_needed_name
	is set, use that instead of the filename for the DT_NEEDED dynamic
	entry.
	* elf.c (bfd_elf_set_dt_needed_name): New function.
	* bfd-in.h (bfd_elf_set_dt_needed_name): Declare.
	* bfd-in2.h: Rebuilt.

	* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Add sinterpptr
	argument, and set it to the .interp section.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
	(bfd_elf64_size_dynamic_sections): Likewise.
	* bfd-in2.h: Rebuilt.

	* coff-sparc.c (SWAP_OUT_RELOC_EXTRA): Define to clear the r_spare
	field of the reloc rather than letting it be garbage.

	* archive.c (bfd_slurp_armap): Recognize __.SYMDEF/ as well as
	__.SYMDEF; the former was used in old Linux archives.  From
	jrs@world.std.com (Rick Sladkey).

	* i386linux.c (i386linux_write_object_contents): Define; like
	MY(write_object_contents) in aout-target.h, but set MACHTYPE to
	M_386.  From jrs@world.std.com (Rick Sladkey).
	(MY_write_object_contents): Define.

	* aoutx.h (translate_from_native_sym_flags): Treat N_SETV symbols
	as N_DATA symbols.
	(aout_link_add_symbols): Likewise.

	* aoutx.h: Rewrite symbol duplicate elimination to use BFD hash
	tables.
	(struct stringtab_entry, struct stringtab_data): Remove.
	(HASHMAXLEN, HASH_CHAR, hash, compare, log2, emit_strtab): Remove.
	(struct strtab_hash_entry, struct strtab_hash): Define.
	(strtab_hash_newfunc, strtab_hash_lookup): Define.
	(stringtab_free, emit_stringtab): Define.
	(stringtab_init, add_to_stringtab): Rewrite.
	(NAME(aout,write_syms)): Use new stringtab code.
	(struct aout_final_link_info, NAME(aout,final_link)): Likewise.
	(aout_link_write_symbols, aout_link_write_other_symbol): Likewise.

	* bfd-in.h (BFD_TRADITIONAL_FORMAT): Define new BFD flag to
	request BFD to write object in the traditional format, whatever
	that means for the particular backend.
	* bfd-in2.h: Rebuilt.

	* hash.c (bfd_hash_allocate): If obstack_alloc fails, set
	bfd_error_no_memory.

Tue Jun 14 13:00:04 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* libaout.h (struct aoutdata): Add q_magic_format to subformat
	enum.
	* aout-target.h (MY_bfd_copy_private_bfd_data): Define as function
	if not already defined.  Copy subformat information.
	(MY_text_includes_header): Define as 0 if not already defined.
	(MY(backend_data)): Use MY_text_includes_header rather than 0.
	(MY_final_link_callback): Rename from final_link_callback, and
	define only if MY_final_link_callback is not already defined.
	(MY_bfd_final_link): Rename use of final_link_callback to
	MY_final_link_callback.
	* aoutx.h (NAME(aout,some_aout_object_p)): Handle QMAGIC like
	ZMAGIC, but set the subformat to q_magic_format.  Abort if the
	magic number if not recognized.
	(adjust_z_magic): Use QMAGIC if q_magic_format.
	* i386linux.c (MY_text_includes_header): Define as 1.
	(i386linux_bfd_final_link): New static function.
	(MY_bfd_final_link): Define as i386linux_bfd_final_link.

	* aoutx.h (translate_to_native_sym_flags): Check both section and
	output_section against sections of abfd.

	* libecoff.h (struct ecoff_link_hash_entry): Change type of
	written from boolean to char.  Add new field small.
	* ecoff.c (ecoff_link_hash_newfunc): Initialize written to 0
	rather than false.  Initialize small to 0.
	(ecoff_link_add_externals): If ECOFF type is scSUndefined, set
	small.  If small is set, and hash table type is common, force the
	symbol into a section named SCOMMON and change the ECOFF type from
	scCommon to scSCommon.
	(ecoff_link_write_external): Set written to 1 rather than true.
	* coff-mips.c (mips_relocate_section): Correct JMPADDR reloc
	overflow check to consider section VMA of input file.

Mon Jun 13 14:20:07 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutf1.h (aout_32_sunos4_write_object_contents): Handle a
	machine type of 68000.
	* aoutx.h (NAME(aout,machine_type)): Add new argument unknown.
	Set *unknown to true if machine type is really unknown, as opposed
	to M_UNKNOWN for the 68000.
	(NAME(aout,set_arch_mach)): Change NAME(aout,machine_type) call
	accordingly.
	* libaout.h (NAME(aout,machine_type)): Add new argument to
	prototype.

Sun Jun 12 20:21:03 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (EXEC_AUX_ID): Define based on availablity of HPUX_AUX_ID
	or HIUX_AUX_ID.
	(som_begin_writing): Use EXEC_AUX_ID instead of HPUX_AUX_ID.
	(som_write_armap): Use CPU_PA_RISC1_0 as the magic number.  Note
	som.c is careful to always define CPU_PA_RISC1_0.

Sat Jun 11 16:32:30 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Add weak symbols as an extension to a.out.
	* aoutx.h (sym_in_text_section): Don't define.
	(sym_in_data_section, sym_in_bss_section): Likewise.
	(sym_is_undefined, sym_is_global_defn): Likewise.
	(sym_is_debugger_info, sym_is_fortrancommon): Likewise.
	(sym_is_absolute, sym_is_indirect): Likewise.
	(translate_from_native_sym_flags): Rewrite for clarity.  Rearrange
	arguments and change caller.  Handle weak symbols.
	(translate_to_native_sym_flags): Likewise.
	(aout_link_check_ar_symbols): Don't ignore weak symbols.  Pull
	object in from archive if a weak defintion is found for an
	existing undefined symbol.
	(aout_link_add_symbols): Put all cases in switch.  Set flags of an
	undefined symbol to 0.  Handle weak symbols.
	(aout_link_write_symbols): Handle weak symbols.
	(aout_link_write_other_symbol): Likewise.
	(aout_link_input_section_std): Likewise.
	(aout_link_input_section_ext): Likewise.
	* sunos.c (sunos_write_dynamic_symbol): Likewise.

Fri Jun 10 13:25:13 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (NAME(aout,canonicalize_reloc)): Handle .bss section.
	(NAME(aout,get_reloc_upper_bound)): Likewise.

	* coff-i960.c (coff_i960_reloc_type_lookup): Add BFD_RELOC_CTOR.
	* linker.c (_bfd_generic_link_write_global_symbol): Don't assume
	the section of a common symbol is not NULL.

Wed Jun  8 23:15:53 1994  Stu Grossman  (grossman@cygnus.com)

	* nlmcode.h (nlm_object_p):  Set EXEC_P and start address for GDB.

Wed Jun  8 23:57:34 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_get_external_symbols): Don't try to read the
	strings if there are no symbols.
	(aout_link_write_other_symbol): Use the output section when
	working out the type.

Tue Jun  7 13:25:08 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (assign_section_numbers): Put shstrtab, symtab and
	strtab sections at end of file.  Avoids bug in some versions of
	SVR4 strip.  From Eric Youngdale <eric@tantalus.nrl.navy.mil>.

	* coffcode.h (styp_to_sec_flags): If COFF_PAGE_SIZE is defined,
	set SEC_DEBUGGING for STYP_INFO sections.
	(coff_compute_section_file_positions): If COFF_PAGE_SIZE is
	defined, and D_PAGED is set, set the file position equal to the
	section VMA modulo COFF_PAGE_SIZE.
	* coffgen.c (coff_real_object_p): If F_EXEC is set, set D_PAGED.
	* coff-i386.c: Set D_PAGED in BFD target.
	(COFF_PAGE_SIZE): Define.
	* coff-m68k.c, coff-sparc.c: Likewise.

Mon Jun  6 10:57:28 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (bfd_section_from_shdr): Don't turn a reloc section
	into a BFD section just because SHF_ALLOC is set; require that it
	not use the normal symbol table.
	(elf_section_from_bfd_section): Corresponding change.

	Better indirect and warning symbol handling inspired by Stuart
	Quick <stuck@cs.man.ac.uk>.
	* linker.c (enum link_action): Add REF, MIND, CWARN, REFC.
	(link_action): Change UNDEF_ROW/def and UNDEFW_ROW/def from NOACT
	to REF.  Change UNDEF_ROW/indr and UNDEFW_ROW/indr from CYCLE to
	REFC.  Change DEF_ROW/indr and COMMON_ROW/indr from CYCLE to MDEF.
	Change DEFW_ROW/indr from CYCLE to NOACT.  Change INDR_ROW/indr
	from MDEF to MIND.  Change INDR_ROW/warn from WARNC to CYCLE.
	Change WARN_ROW/def and WARN_ROW/indr from MWARN to CWARN.  Change
	WARN_ROW/com from MWARN to WARN.  Change WARN_ROW/warn from NOACT
	to CYCLE.  Change SET_ROW/warn from WARNC to CYCLE>
	(_bfd_generic_link_add_one_symbol): Handle REF, MIND, CWARN and
	REFC.  If a new indirect symbol has been referenced, push the
	reference down to the symbol it points to.  FIx handling of WARN.
	* aoutx.h (translate_from_native_sym_flags): If N_WARNING, don't
	clobber e_type of next symbol.
	(translate_to_native_sym_flags): Likewise.
	(aout_link_write_symbols): Loop on bfd_link_hash_warning as well
	as bfd_link_hash_indirect.

	* libaout.h (struct aout_link_hash_entry): New field written.
	* aoutx.h (NAME(aout,link_hash_newfunc)): Initialize written.
	(aout_link_write_symbols): Use written, not root.written.
	(aout_link_write_other_symbol): Likewise.
	* sunos.c (sunos_scan_dynamic_symbol): Likewise.
	* libecoff.h (struct ecoff_link_hash_entry): New field written.
	* ecoff.c (ecoff_link_hash_newfunc): Initialize written.
	(ecoff_link_write_external): use written, not root.written.
	* genlink.h (struct generic_link_hash_entry): New field written.
	* linker.c (_bfd_link_hash_newfunc): Don't initialize written.
	(generic_link_hash_newfunc): Initialize written.
	(_bfd_generic_link_output_symbols): Use written, not root.written.
	(_bfd_generic_link_write_global_symbol): Likewise.
	(_bfd_generic_reloc_link_order): Likewise.

	* libecoff.h (ecoff_data_type): Add linker field.
	* ecoff.c (ecoff_write_object_contents): Check new tdata linker
	field, rather than outsymbols being non-NULL, to decide whether to
	output the symbols and relocs.
	(ecoff_bfd_final_link): Set new tdata linker field to true.

	* ecoff.c (ecoff_bfd_copy_private_bfd_data): Don't try to copy
	data to a non-ECOFF file.

	* libbfd-in.h: Add warning that libbfd.h is a generated file.
	* libbfd.h: Rebuilt.

Sun Jun  5 15:02:30 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Changes to support ELF strip and objcopy on dynamically linked
	files.
	* elfcode.h (elf_fake_sections): Add prototype.
	(bfd_section_from_shdr): Make a BFD section from an SHT_HASH
	section, and from an SHT_DYNSYM section, and from the dynamic
	string table section.
	(elf_object_p): Set D_PAGED if there is a program header.
	(elf_make_sections): Remove.
	(fix_up_strtabs): Remove.
	(elf_fake_sections): Rewrite.  Now sets sh_entsize.
	(assign_section_numbers): Rewrite.  Now sets sh_link and sh_info
	for all sections.
	(elf_compute_section_file_positions):  Don't call obsolete
	functions elf_make_sections or fix_up_strtabs.
	(swap_out_syms): Set sh_addralign to FILE_ALIGN rather than 4.
	(NAME(bfd_elf,write_object_contents)): Permit writing DYNAMIC
	objects.
	(elf_section_from_bfd_section): Treat SHT_DYNSYM like other normal
	sections.  If an SHT_REL or SHT_RELA section is allocated or uses
	an unusual symbol table, permit a BFD section to map to it.
	Permit most SHT_STRTAB sections to have a BFD section mapped to
	them.
	(elf_bfd_final_link): Don't set sh_link, sh_info or sh_entsize
	fields of dynamic sections here; do it in assign_section_numbers.
	* elf32-target.h, elf64-target.h: Add D_PAGED to permitted object
	flags.

	* elf.c (_bfd_elf_make_section_from_shdr): Only set SEC_DATA if
	SEC_LOAD is set, rather than checking SEC_ALLOC.

	* libbfd-in.h (bfd_realloc): Change last arg to "size_t size".

Fri Jun  3 10:58:02 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_write_object_contents): Don't compute the file header's
	checksum here.
	(som_write_headers): Instead do it here.

	* libbfd.h (bfd_realloc): Change last arg to "size_t size".

Thu Jun  2 17:39:22 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* hosts/sun3.h: Include <stdlib.h>.  Don't declare free, exit or
	getenv.

	Add linker support for SunOS shared libraries.
	* sunos.c: Include bfdlink.h.  Add many new functions and
	definitions for SunOS shared library support.
	* bfd-in.h (bfd_sunos_record_link_assignment): Declare.
	(bfd_sunos_size_dynamic_sections): Declare.
	* bfd-in2.h: Rebuilt.
	* aoutx.h (struct aout_link_hash_entry): Move to libaout.h.
	(struct aout_link_hash_table): Likewise.
	(aout_link_hash_lookup, aout_link_hash_traverse): Likewise.
	(aout_hash_table): Likewise.
	(NAME(aout,link_hash_newfunc)): Rename from aout_link_hash_newfunc
	and make externally visible.
	(NAME(aout,link_hash_table_init)): New function.
	(NAME(aout,link_hash_table_create)): Call
	NAME(aout,link_hash_table_init), not _bfd_link_hash_table_init.
	(aout_link_add_symbols): Don't fail if no symbols.  If it exists,
	call add_dynamic_symbols backend entry point for dynamic objects.
	Use add_one_symbol backend entry point if it exists.
	(NAME(aout,final_link)): Call finish_dynamic_link backend entry
	point, if it exists.
	(aout_link_input_bfd): For a dynamic object, call
	link_dynamic_object backend entry point, if it exists.
	(aout_link_write_other_symbol): Call write_dynamic_symbol backend
	entry point, if it exists.
	(aout_link_input_section): Don't read the relocs if they have
	already been read.
	(aout_link_input_section_std): When doing a final link, for a
	reloc against an external symbol, call check_dynamic_reloc backend
	entry point, if it exists.
	(aout_link_input_section_ext): Likewise.
	* libaout.h: Protect against multiple inclusion.  Include
	bfdlink.h.
	(struct aout_link_hash_entry): Move in from aoutx.h.
	(struct aout_link_hash_table): Likewise.
	(aout_link_hash_lookup, aout_link_hash_traverse): Likewise.
	(aout_hash_table): Likewise.
	(struct aout_backend_data): Add fields add_dynamic_symbols,
	add_one_symbol, link_dynamic_object, write_dynamic_symbol,
	check_dynamic_reloc, and finish_dynamic_link.
	(struct aout_section_data_struct): Define new structure.
	(aout_section_data): Define new accessor macro.
	(NAME(aout,link_hash_newfunc)): Declare.
	(NAME(aout,link_hash_table_init)): Declare.
	* aoutf1.h (sunos4_aout_backend): Initialize new aout_backend_data
	fields.
	* aout-target.h (MY(backend_data)): Likewise.
	* i386aout.c (MY(backend_data)): Likewise.
	* i386mach3.c (MY(backend_data)): Likewise.
	* mipsbsd.c (MY(backend_data)): Likewise.
	* sparclynx.c (sparclynx_aout_backend): Likewise.

	* aoutx.h (NAME(aout,slurp_symbol_table)): Don't zero out cached
	until we know it is non-NULL.
	(aout_link_write_symbols): Don't skip a warning symbol even if it
	has already been written out.  If skipping an indirect symbol,
	skip the next symbol as well.

Wed Jun  1 14:37:50 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* hosts/sun3.h: Don't declare qsort, malloc or realloc.

Thu May 26 13:56:03 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* nlmcode.h (nlm_swap_auxiliary_headers_in): Cast bfd_byte pointer
	to char pointer to avoid compiler warnings.

	* dep-in.sed: Remove spaces before colons.

	Merged changes back in from FSF gas release 2.3:

	* Makefile.in (stmp-bfd.h): Wrap `if' block around grep
	invocation, to avoid a bug in BSD 4.4 make.

	From Ralph Campbell:
	* mipsbsd.c (mips_fix_jmp_addr): If symbol is undefined, return an
	error.
	(mips_fix_hi16_s): Ditto.

	Fri May 13 21:21:00 1994  DJ Delorie (dj@ctron.com)

	* makefile.dos: define a default target, or archives won't work
	  due to multiple matches.

	Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)

	* configure.bat: update for latest files
	* makefile.dos: update for correct targets and sources
	* coff-go32.c: [new] go32's COFF format (i386coff with underscores)
	* targets.c: add go32coff target
	* makefile.in: add coff-go32.c support

Thu May 26 10:10:21 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_prep_headers): Do not set the system_id here, private
	bfd data has not been copied yet.
	(som_write_headers): Instead do it here.

Tue May 24 16:17:18 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Make MIPS ELF use new ELF backend linker.  No shared library
	support yet.
	* elf32-mips.c (bfd_mips_elf32_swap_gptab_in): New function.
	(bfd_mips_elf32_swap_gptab_out): New function.
	(mips_elf_object_p): If last symbol is LOCAL, set elf_bad_symtab.
	(mips_elf_final_write_processing): Set sh_info field for .gptab.*
	sections.
	(mips_elf_fake_sections): Set sh_entsize for .gptab.* sections.
	(mips_elf_read_ecoff_info): Read and free external symbols last,
	not first, for clarity.
	(struct mips_elf_link_hash_entry): Define new structure.
	(struct mips_elf_link_hash_table): Define new structure.
	(mips_elf_link_hash_lookup): Define new macro.
	(mips_elf_link_hash_traverse): Define new macro.
	(mips_elf_hash_table): Define new macro.
	(mips_elf_link_hash_newfunc): New static function.
	(mips_elf_link_hash_table_create): New static function.
	(mips_elf_add_symbol_hook): New static function.
	(struct extsym_info): Define new structure.
	(mips_elf_get_extr, mips_elf_set_index): Remove.
	(mips_elf_output_extsym): New static function.
	(gptab_compare): New static function.
	(mips_elf_final_link): Rewrite to use ELF backend linker, and to
	merge gptab information in input files.
	(mips_elf_relocate_hi16): New static function.
	(mips_elf_relocate_section): New static function.
	(bfd_elf32_bfd_link_hash_table_create): Define as macro before
	including elf32-target.h.
	(elf_backend_relocate_section): Likewise.
	(elf_backend_add_symbol_hook): Likewise.
	* elf.c (_bfd_elf_link_hash_newfunc): Rename from
	elf_link_hash_newfunc and make globally visible.  Change caller.
	(_bfd_elf_link_hash_table_init): New function, broken out of
	_bfd_elf_link_hash_table_create.
	(_bfd_elf_link_hash_table_create): Use
	_bfd_elf_link_hash_table_init.
	* libelf.h (struct elf_obj_tdata): Add new field bad_symtab.
	(elf_bad_symtab): Define new accessor macro.
	(_bfd_elf_link_hash_newfunc): Declare.
	(_bfd_elf_link_hash_table_init): Declare.
	* elfcode.h (elf_object_p): Call backend object_p hook after
	swapping in all the section headers.
	(map_program_segments): Correct typo: Internal for External.
	(elf_link_add_object_symbols): If elf_bad_symtab is set, read all
	the symbols.  Skip STB_LOCAL symbols rather than giving an error.
	(elf_bfd_final_link): If elf_bad_symtab is set, allocate space for
	all symbols, not just locals.
	(elf_link_output_extsym): Only skip a symbol not mentioned by a
	regular file if it is mentioned by a dynamic object.
	(elf_link_input_bfd): If elf_bad_symtab is set, read all the
	symbols.

Fri May 20 13:38:23 1994  Jeff Law  (law@snake.cs.utah.edu)

	* som.c (som_set_reloc_info): Do not set any relocation info
	for SOM fixups which are never passed to BFD.

Fri May 20 11:57:05 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-mips.c (mips_relocate_section): Add MIPS_R_JMPADDR overflow
	checking.

	* elf32-i386.c (elf_i386_size_dynamic_sections): Add DT_DEBUG to
	the dynamic linking information for the benefit of the debugger.
	From Peter Schauer.
	* elf32-sparc.c (elf32_sparc_size_dynamic_sections): Likewise.

	* elf.c (_bfd_elf_make_section_from_shdr): New function, based on
	code repeated three times in bfd_section_from_shdr in elfcode.h.
	* libelf.h (_bfd_elf_make_section_from_shdr): Declare.
	* elfcode.h (bfd_section_from_shdr): Use new function
	_bfd_elf_make_section_from_shdr to create BFD sections.  If a
	reloc section does not use the main symbol table, or it is part of
	the process image, treat it as a normal section, not relocs.
	* elf32-mips.c (mips_elf_section_from_shdr): Use new function
	_bfd_elf_make_section_from_shdr.

Thu May 19 11:37:11 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elf32-target.h, elf64-target.h: Change ar_max_namelen value from
	15 to 14 to match SVR4 ar.

	Add support for ELF shared libraries.  Loosely based on work by
	Eric Youngdale <ericy@cais.com>.
	* libelf.h (struct elf_backend_data): Add new fields for dynamic
	linking: elf_backend_create_dynamic_sections,
	elf_backend_adjust_dynamic_symbol,
	elf_backend_size_dynamic_sections,
	elf_backend_finish_dynamic_symbol,
	elf_backend_finish_dynamic_sections.
	(struct elf_link_hash_entry): Change type of align field to
	bfd_size_type.  Add fields dynindx, dynstr_index, weakdef,
	elf_link_hash_flags.
	(struct elf_link_hash_table): Add fields dynobj, dynsymcount,
	dynstr, bucketcount.
	(bfd_elf32_swap_reloc_in, bfd_elf32_swap_reloc_out): Declare.
	(bfd_elf32_swap_reloca_in, bfd_elf32_swap_reloca_out): Declare.
	(bfd_elf32_swap_dyn_in, bfd_elf32_swap_dyn_out): Declare.
	(bfd_elf32_add_dynamic_entry): Declare.
	(bfd_elf64_swap_reloc_in, bfd_elf64_swap_reloc_out): Declare.
	(bfd_elf64_swap_reloca_in, bfd_elf64_swap_reloca_out): Declare.
	(bfd_elf64_swap_dyn_in, bfd_elf64_swap_dyn_out): Declare.
	(bfd_elf64_add_dynamic_entry): Declare.
	* elfcode.h (Elf_External_Dyn): Define.
	(elf_swap_reloc_in): Define as macro using NAME.  Make externally
	visible.
	(elf_swap_reloc_out): Likewise.
	(elf_swap_reloca_in, elf_swap_reloca_out): Likewise.
	(elf_swap_dyn_in, elf_swap_dyn_out): Define as macro using NAME
	and as new externally visible function.
	(elf_fake_sections): Set section type of dynamic sections based on
	section names.
	(elf_write_phdrs): Remove.
	(assign_file_position_for_section): Add new align argument.
	Change all callers.
	(get_program_header_size): New static function.
	(struct seg_info): Remove.
	(map_program_segments): Completely rewrite.
	(assign_file_positions_except_relocs): Completely rewrite.
	(assign_file_positions_for_relocs): Don't set a file position for
	sections which already have one.  Don't bother to align the file
	position here.
	(section_from_elf_index): Handle SHT_HASH and SHT_DYNAMIC
	section types.
	(elf_section_from_bfd_section): Likewise.
	(elf_slurp_symbol_table): If section_from_elf_index fails, just
	use bfd_abs_section rather than returning an error.
	(elf_sizeof_headers): Make useful.
	(elf_link_record_dynamic_symbol): New static function.
	(elf_link_add_object_symbols): Handle dynamic objects.
	(elf_link_create_dynamic_sections): New static function.
	(elf_add_dynamic_entry): Define as macro using NAME and as new
	externally visible function.
	(NAME(bfd_elf,record_link_assignment)): New function.
	(elf_buckets): New static variable.
	(NAME(bfd_elf,size_dynamic_sections)): New function.
	(struct elf_final_link_info): Add dynsym_sec and hash_sec fields.
	(elf_bfd_final_link): Handle dynamic linking.  Create a section
	symbol for all ELF sections, not all BFD sections.  Store section
	symbol index in target_index field, not index field.  Traverse
	over global symbols even if stripping.
	(elf_link_output_extsym): Output dynamic symbols.  Mark symbols
	defined by dynamic objects as undefined.
	(elf_link_input_bfd): Ignore dynamic objects.  Use target_index
	field for section relocs, and make sure it is set.
	(elf_reloc_link_order): Use target_index field for section relocs,
	and make sure it is set.
	* elf.c (elf_link_hash_newfunc): Initialize dynindx, dynstr_index,
	weakdef and elf_link_hash_flags fields.
	(_bfd_elf_link_hash_table_create): Initialize dynobj, dynsymcount,
	dynstr and bucketcount fields.
	* elf32-target.h: Initialize new dynamic linking fields.
	* elf64-target.h: Likewise.
	* elf32-i386.c: New functions for dynamic linking support.
	* elf32-sparc.c: Likewise.
	* bfd-in.h (bfd_elf32_record_link_assignment): Declare.
	(bfd_elf64_record_link_assignment): Declare.
	(bfd_elf32_size_dynamic_sections): Declare.
	(bfd_elf64_size_dynamic_sections): Declare.
	* bfd-in2.h: Rebuilt.

Wed May 18 08:29:04 1994  Ian Lance Taylor  (ian@cygnus.com)

	* som.c: Don't include <sys/dir.h> or <sys/user.h>.
	(som_reloc_queue_find): Call memcmp instead of bcmp.
	(som_bfd_reloc_type_lookup): Change first argument to bfd *.
	(compare_syms): Change types of arguments to const void *.
	(bfd_section_from_som_symbol): Removed unused local found.
	(som_write_armap): Add elength, map, orl_count and int arguments.
	(som_write_armap): Use %ld and cast to long for getuid result.

Wed May 18 09:09:32 1994  Jeff Law  (law@snake.cs.utah.edu)

	* elf32-hppa.h (R_HPPA_ABS_CALL): Define.
	* elf32-hppa.c (hppa_elf_gen_reloc_type): Handle absolute calls.

	* som.h (R_HPPA_ABS_CALL): Define.
	* som.c (hppa_som_gen_reloc_type): Delete complex relocation types.

Tue May 17 19:33:12 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* coff-i960.c (icoff_little_vec, icoff_big_vec): Indicate leading
	underscore, for compatibility with Intel tool chain (gnu960v2).

Mon May 16 10:09:22 1994  Jeff Law  (law@snake.cs.utah.edu)

	* bfd-in2.h: Rebuilt.

	* elf32-hppa.c: Change .hppa_linker_stubs to .PARISC.stubs,
	likewise for other PA specific sections.
	(hppa_elf_relocate_unwind_table): Delete unused
	function.
	(elf_hppa_howto_table): Completely new table based on 94-02-02
	draft PA ELF spec.  Change relocation tags appropriately
	throughout elf32-hppa.c
	(hppa_elf_gen_reloc_type): Rewrite and simplify based on 94-02-02
	spec.
	(hppa_elf_reloc): Likewise.
	(hppa_look_for_stubs_in_section): Likewise
	(ELF_MACHINE_CODE): Change to EM_PARISC.
	* elf32-hppa.h: Include "elf/hppa.h".  Change relocation tags
	appropriately throughout elf32-hppa.h.
	(elf32_hppa_reloc_type): New table based on 94-02-02 draft PA ELF
	spec.
	(R_HPPA_ABS_CALL, R_HPPA_COMPLEX*, R_HPPA_UNWIND): Delete definitions.
	* elfcode.h (prep_headers): Use EM_PARISC instead of EM_HPPA.
	* reloc.c (bfd_reloc_code_real): Delete unused HPPA relocations.
	* som.h (R_HPPA_ABS_CALL, R_HPPA_COMPLEX): Delete definitions.

	* libhppa.h (hppa_field_adjust): Avoid adding constant_value into
	the final value twice for LR and RR field selectors.

Sat May 14 09:09:19 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* aoutx.h (add_to_stringtab): Use BFD_ASSERT not assert.  This
	avoids __eprintf troubles.

Fri May 13 10:51:21 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* bout.c (b_out_bfd_reloc_type_lookup): Handle BFD_RELOC_CTOR.

	* config/mipsbelf.mt (SELECT_VECS): Add ecoff_big_vec and
	ecoff_little_vec since Irix 5 supports ECOFF executables.

Wed May 11 00:31:57 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_find_nearest_line): Handle fdr.adr != pdr.adr
	correctly.

	* Makefile.in (stmp-bfd.h): Use || instead of ; to force SunOS
	make to invoke the shell.

Tue May 10 14:23:43 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* section.c (SEC_COFF_SHARED_LIBRARY): Renamed from
	SEC_SHARED_LIBRARY for clarity.  Changed all uses.
	* bfd-in2.h: Rebuilt.
	* coffcode.h (sec_to_styp_flags): If SEC_COFF_SHARED_LIBRARY is
	set, set STYP_NOLOAD.
	* coffgen.c (coff_section_from_bfd_index): Don't get an assertion
	failure because of a bad shared library.

Mon May  9 18:53:40 1994  Bill Cox  (bill@rtl.cygnus.com)

	* linker.c: Add missing comment terminator.

Mon May  9 11:53:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* linker.c (_bfd_generic_link_add_one_symbol): If hashp and *hashp
	are not NULL, assume the caller has already looked up the symbol
	in the hash table and has stored the entry in *hashp.
	(generic_link_add_symbol_list): Set h to NULL before calling
	_bfd_generic_link_add_one_symbol.
	* ecoff.c (ecoff_link_add_externals): Likewise.

	* elfcode.h (assign_file_positions_except_relocs): Don't require
	page shared between .data and .bss segments to contain zeroes.

	* elfcode.h: Include bfdlink.h.  Added several new functions to do
	linking.
	(ELF_R_TYPE): Define.
	(bfd_add_to_strtab): Return unsigned long.  Change check for
	realloc failure.
	(elf_fake_sections): Check return value of bfd_add_to_strtab.
	(elf_compute_section_file_positions): Add link_info argument.
	Call elf_backend_begin_write_processing hook and prep_headers
	here.  Only call swap_out_syms if link_info is NULL.  Set up
	.shstrtab section here.  Pass dosyms argument to
	assign_file_positions_except_relocs.  Set output_has_begun flag.
	(assign_file_positions_for_symtab_and_strtabs): Add dosyms
	argument, and use it to control setting .symtab and .strtab file
	positions.
	(assign_file_positions_except_relocs): Add dosyms argument, and
	pass it on.
	(prep_headers): Check return value of bfd_add_to_strtab.
	(swap_out_syms): Likewise.  Also, don't set up .shstrtab here.
	(NAME(bfd_elf,write_object_contents)): Some calls moved into
	elf_compute_section_file_positions.
	(elf_set_section_contents): Likewise.
	(elf_slurp_symbol_table): SHN_LORESERV corrected to SHN_LORESERVE.
	* libelf.h: Include bfdlink.h.
	(struct elf_backend_data): Add fields collect,
	elf_add_symbol_hook, elf_backend_relocate_section.
	(struct bfd_elf_section_data): Add field rel_hashes.
	(struct elf_obj_tdata): Remove fields internal_syms and symbols.
	Add field sym_hashes.
	(obj_symbols, obj_internal_syms): Remove definitions.
	(elf_sym_hashes): Define.
	(struct elf_link_hash_entry): Define.
	(struct elf_link_hash_table): Define.
	(elf_link_hash_lookup): Define.
	(elf_link_hash_traverse): Define.
	(elf_hash_table): Define.
	(_bfd_elf_link_hash_table_create): Declare.
	(bfd_elf32_bfd_link_add_symbols): Declare.
	(bfd_elf32_bfd_final_link): Declare.
	(bfd_elf64_bfd_link_add_symbols): Declare.
	(bfd_elf64_bfd_final_link): Declare.
	* elf.c: Include bfdlink.h.
	(elf_link_hash_newfunc): New function.
	(_bfd_elf_link_hash_table_create): New function.
	* elf32-target.h (elf_backend_relocate_section): If not defined,
	define as 0 and use generic linker.  Otherwise, use ELF backend
	linker.
	(elf_backend_collect): If not defined, define as false.
	(elf_backend_add_symbol_hook): If not defined, define as 0.
	(elf32_bed): Initialize new fields.
	* elf64-target.h: Same changes as elf32-target.h.
	* elf32-i386.c: Include bfdlink.h.
	(elf_i386_relocate_section): New function.
	(elf_backend_relocate_section): Define.
	* elf32-sparc.c: Include bfdlink.h.
	(elf_info_to_howto): Change type of dst from Elf32_Internal_Rela
	to Elf_Internal_Rela (they're the same type anyhow).
	(elf_sparc_relocate_section): New function.
	(elf_backend_relocate_section): Define.
	* elf32-mips.c (elf_backend_collect): Define.

	* Makefile.in (stmp-bfd.h): Avoid useless make error message in a
	different way; touch takes a numeric argument on some systems.

Fri May  6 13:34:14 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmcode.h (nlm_swap_auxiliary_headers_in): Rework custom header
	handling for latest suggested format.
	(nlm_swap_auxiliary_headers_out): Likewise.
	(nlm_compute_section_file_positions): Likewise.

Fri May  6 11:11:50 1994  D. V. Henkel-Wallace  (gumby@rtl.cygnus.com)

	* config.bfd: handle erricsson config (for OSE).

Thu May  5 15:40:47 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	Patches from Ralph Campbell:
	* mipsbsd.c (mips_fix_jmp_addr): New function.
	(mips_fix_hi16_s): Use bfd_is_com_section.
	(mips_howto_table_ext): Call mips_fix_jmp_addr for MIPS_RELOC_JMP.

Fri May  6 11:48:55 1994  Steve Chamberlain  (sac@cygnus.com)

	* config/go32.mh: XX support.

	From bill
	* Makefile.in: Build sysdep.h without causing worrying but
	harmless error message.

Wed May  4 11:09:53 1994  Ian Lance Taylor  (ian@cygnus.com)

	Changed m68k-aout to set flags to 0; m68k-sunos still uses 1.
	* aout0.c: New file.
	* targets.c (aout0_big_vec): Declare.
	(bfd_target_vector): Add aout0_big_vec.
	* config.bfd (m68*-*-aout*): Use m68k-0aout, not m68k-aout.
	* config/m68k-aout.mt (SELECT_VECS): Removed.
	* config/m68k-0aout.mt: New file.
	* configure.in (aout0_big_vec): New target vector: use aout0.o,
	aout32.o and stab-syms.o.
	* Makefile.in: Rebuilt dependencies.
	(BFD32_BACKENDS): Add aout0.o.
	(CFILES): Add aout0.c.

	* libaout.h (struct aout_backend_data): Add field exec_hdr_flags.
	* aout-target.h (MY_exec_hdr_flags): If not defined, define as 0.
	MY(backend_data): Initialize exec_hdr_flags field.
	* aoutf1.h (sunos_32_set_arch_mach): Make static.
	(aout32_sunos4_write_object_contents): Set flags from backend
	info.
	(MY_exec_hdr_flags): If not defined, define as 1.
	(sunos4_aout_backend): Initialize exec_hdr_flags field.
	* aout-encap.c (encap_write_object_contents): Set flags from
	backend info.
	(MY_exec_hdr_flags): Define as N_FLAGS_COFF_ENCAPSULATE.
	* hp300hpux.c (MY_exec_hdr_flags): Define as 0x2.
	(MY(write_object_contents)): Set flags from backend info.
	* i386aout.c (MY(backend_data)): Initialize exec_hdr_flags field.
	* i386mach3.c (MY(backend_data)): Likewise.
	* mipsbsd.c (MY(backend_data)): Likewise.
	* sparclynx.c (NAME(aout,sparclynx_write_object_contents)): Set
	flags from backend info.
	(sparclynx_aout_backend): Initialize exec_hdr_flags field.

Wed May  4 02:56:00 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config.bfd (i386-*-gnu*): Treat like i386-*-mach*.
	(m68*-apollo-*): Treat all Apollo configs the same, don't handle
	BSD specially.

Tue May  3 19:43:21 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* cache.c: Rewrote to work correctly.
	* libbfd.h: Rebuilt.
	* opncls.c (bfd_cache_init, bfd_open_file): Don't declare.
	(bfd_fdopenr): Check return value of bfd_cache_init.

Fri Apr 29 15:08:23 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* cf-m68klynx.c (CALC_ADDEND): Check for PC relative relocs by
	enumerating them, since the reloc type can not serve as an index
	into the m68k COFF howto_table.

Fri Apr 29 09:42:39 1994  Steve Chamberlain  (sac@cygnus.com)

        * config.bfd (*-go32): Changed to coff.
	* coff-h8300.c (JMPL1): Get HOWTO right for 24bit branches.
	* srec.c (srec_write_symbols): Write out the correct number of
	symbols and don't stick in extra nulls.

Tue Apr 26 15:07:24 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* cf-sparclynx.c (LYNXOS, COFF_LONG_FILENAMES): Define.
	* coff-sparc.c (BADMAG): Recognize LYNXCOFFMAGIC.
	(COFF_SPARC): Define.
	* coffcode.h (coff_new_section_hook): If COFF_SPARC, set alignment
	power of data and bss sections to 3.
	* hosts/lynx.h (__LYNXOS): Define.

Tue Apr 26 15:04:26 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (hppa_elf_reloc): Adjust the addend of relocations
	against section symbols to avoid losing during ld -r.

Tue Apr 26 12:16:41 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (shstrtab_length_fixed): Remove useless static
	variable.
	(struct elf_sect_data): Remove unused structure.
	(elf_object_p): Free memory if error occurs.  Check return value
	of bfd_default_set_arch_mach.  If elf_get_str_section fails,
	preserve error code rather than setting wrong_format.
	(null_shdr): Remove static variable.
	(assign_section_numbers): Remove shstrtab_length_fixed assignment.
	Allocate first section header on BFD obstack rather than using
	null_shdr.
	(bfd_prpsinfo): Remove unused local variable newsect.

Mon Apr 25 15:31:04 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (write_relocs): Undo patch of Apr 10; breaks Solaris.

	* elfcode.h (bfd_section_from_shdr): Use bfd_make_section_anyway
	to create sections.  Check return value of recursive calls.
	(bfd_section_from_phdr): Check return value of bfd_make_section.
	(elf_symbol_from_bfd_symbol): Likewise.
	(elf_object_p): Check return value of bfd_section_from_shdr.
	(section_from_elf_index): Likewise.
	(elf_slurp_symbol_table): Check return value of
	section_from_elf_index.
	(bfd_prstatus): Return boolean value.  Check return value of
	bfd_make_section.
	(bfd_fpregset): Likewise.
	(bfd_prpsinfo): Return boolean value.
	(elf_corefile_note): Check return values of bfd_prstatus,
	bfd_fpregset, and bfd_prpsinfo.
	(elf_core_file_p): Check return value of elf_corefile_note.

Fri Apr 22 11:08:38 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Get rid of the ECOFF .reginfo section hack.
	* ecoff.c (ecoff_mkobject_hook): Don't create a .reginfo section.
	(ecoff_new_section_hook): Don't handle the .reginfo section.
	(ecoff_sizeof_headers): Likewise.
	(ecoff_get_section_contents): Likewise.
	(ecoff_compute_section_file_positions): Likewise.
	(ecoff_compute_reloc_file_positions): Likewise.
	(ecoff_set_section_contents): Likewise.
	(ecoff_write_object_contents): Likewise.
	(ecoff_bfd_final_link): Likewise.
	(ecoff_bfd_copy_private_bfd_data): Copy the GP value and the
	register masks.
	(bfd_ecoff_get_gp_value): New function.
	(bfd_ecoff_set_gp_value): New function.
	(bfd_ecoff_set_regmasks): New function.
	* bfd-in.h (bfd_ecoff_get_gp_value): Declare.
	(bfd_ecoff_set_gp_value): Declare.
	(bfd_ecoff_set_regmasks): Declare.
	* bfd-in2.h: Rebuilt.

	Fix ECOFF objcopy to actually copy debugging information.
	* ecoff.c (ecoff_bfd_copy_private_bfd_data): New function.
	(ecoff_get_extr): Assume that any ECOFF symbol with local clear is
	an external symbol, rather than checking the symbol flags.  Only
	check the flags for non-ECOFF symbols.
	* ecofflink.c (bfd_ecoff_debug_externals): Don't crash if the
	output_section field of the symbol section is NULL.
	* libecoff.h (ecoff_bfd_copy_private_bfd_data): Declare as
	function rather than defining as macro.

	* ieee.c (ieee_object_p): Set bfd_error_got_wrong_format if
	appropriate.

	* targets.c (bfd_target_vector): Add bfd_elf32_powerpc_vec.

	* aout-adobe.c (aout_adobe_set_arch_mach): Check return value of
	bfd_default_set_arch_mach.  Accept bfd_arch_m68k as well as
	bfd_arch_unknown.
	* coffcode.h (coff_set_arch_mach): Check return value of
	bfd_default_set_arch_mach.
	* elfcode.h (elf_set_arch_mach): Don't check a list of ELF
	architectures, just see if the desired architecture matches what
	the ELF backend permits.

	* coffcode.h (coff_set_arch_mach_hook): Rename SHMAGIC to
	SH_ARCH_MAGIC to match change in coff/sh.h.
	(coff_set_flags): Likewise.

	Follow convention in which each NLM header has an 8 byte stamp
	followed by a four byte length.
	* libnlm.h (struct nlm_obj_tdata): Rename nlm_cygnus_section_hdr
	to nlm_cygnus_ext_header, and change type to
	Nlm_Internal_Cygnus_Ext_Header.
	(nlm_cygnus_ext_header): Rename from nlm_cygnus_section_header.
	* nlmcode.h (nlm_swap_auxiliary_headers_in): Use CyGnUsEx instead
	of CyGnUsSeCs.  Rename from cygnus_section to cygnus_ext.  Require
	length word to be 8.
	(nlm_swap_auxiliary_headers_out): Rename from cygnus_section to
	cygnus_ext.  Set length word to 8.
	(nlm_compute_section_file_positions): Rename from cygnus_section
	to cygnus_ext.

Thu Apr 21 22:54:22 1994  Stu Grossman  (grossman at cygnus.com)

	* nlmcode.h (nlm_swap_auxiliary_headers_in):  Keep section table
	(from CyGnUsSeCs) in more permanent memory to keep section names
	from getting trashed.

Thu Apr 21 09:29:37 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* libelf.h (elf_obj_tdata):  Add members for dynamic symbol table
	handling.
	* elfcode.h (bfd_section_from_shdr):  Handle dynamic symbol table.
	* elfcode.h (elf_slurp_symbol_table):  Take additional parameter
	to select static or dynamic symbol table and return number of
	symbols slurped or -1 on error.
	* elfcode.h (elf_get_symtab):  Set bfd symcount from
	elf_slurp_symbol_table result.
	* elfcode.h (elf_get_dynamic_symtab_upper_bound,
	elf_canonicalize_dynamic_symtab):  New functions to handle dynamic
	symbol table.
	* elf32-target.h, elf64-target.h (BFD_JUMP_TABLE_DYNAMIC):
	Change to handle dynamic symbol table, provide default definitions
	for dynamic relocs.
	* aoutx.h (howto_table_std, NAME(aout,swap_std_reloc_out),
	NAME(aout,swap_std_reloc_in), aout_link_input_section_std,
	aout_link_reloc_link_order):  Handle r_jmptable and r_relative
	relocations.

Thu Apr 21 11:58:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Clean up uses of _bfd_dummy_target (from Peter Schauer).
	* libbfd.c (_bfd_dummy_target): Set bfd_error_wrong_format.
	* nlm-target.h (nlm_core_file_p): Define as _bfd_dummy_target, not
	NULL.
	* srec.c (srec_vec): Use _bfd_dummy_target, not NULL, in
	_bfd_check_format.
	(symbolsrec_vec): Likewise.
	* tekhex.c (tekhex_vec): Likewise.

	* libnlm.h (struct nlm_obj_tdata): Add nlm_cygnus_section_hdr
	field.
	(nlm_cygnus_section_header): New accessor macro.
	* nlmcode.h (nlm_object_p): Free new tdata structure if failure.
	Add fixed sections before swapping in auxiliary headers.  After
	adding sections, treat errors as real, not as wrong format.
	(nlm_swap_auxiliary_headers_in): Swap in the sections header; add
	sections to the BFD for each section it describes.
	(nlm_swap_auxiliary_headers_out): Swap out the sections header.
	(nlm_compute_section_file_positions): Account for the size of the
	sections header.

Wed Apr 20 16:45:51 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* coff-sparc.c (sparccoff_vec): Change minimum alignment power to
	2, so that stab sections can be multiples of 4 bytes only.

	* hosts/i386aix.h: Changes to avoid prototypes conflicts with the
	ones defined in stdlib.h.  (From Minh Tran-Le.)

Wed Apr 20 14:15:21 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlm32-ppc.c: Complete rewrite for new version of PowerPC
	NetWare.  Old code still present, but ifdeffed out.

	* nlmcode.h (nlm_swap_auxiliary_headers_in): Don't assume a
	particular format for the customer header.  Allocate a block of
	memory and read it into that.
	(nlm_swap_auxiliary_headers_out): Write out the block of memory.
	(nlm_compute_section_file_positions): Include length of customer
	header when computing its size.

Mon Apr 18 14:27:17 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_prep_headers): Get the space's number from the
	backend private section data rather than target_index.
	(bfd_som_set_section_attributes): Store the space's number
	in the backend private section data rather than target_index.

	* som.h (som_copyable_section_data_struct): Add space_number.

Fri Apr 15 12:22:07 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-a29k.c (reloc_processing): Always set the address of a
	R_IHCONST reloc to that of the immediately preceding R_IHIHALF.
	gas does this anyhow, but some other assemblers seem to leave
	garbage in the R_IHCONST address field.

	* archive.c: Consistently use ARFMAG; from
	schwab@issan.informatik.uni-dortmund.de (Andreas Schwab).
	(_bfd_write_archive_contents): Use ARFMAG rather than '`' and
	'\012'.
	(bsd_write_armap): Likewise.
	(coff_write_armap): Likewise.

	* coff-mips.c (mips_relocate_section): When relaxing, adjust local
	relocs against the .text section as required.
	* ecofflink.c (bfd_ecoff_debug_accumulate): When relaxing, adjust
	PDR addresses as required.

	* ecoff.c (ecoff_emit_aggregate): Take fdr argument.  Map fdr
	index through rfd map if it exists.  Check for a couple of cases
	which gdb handles specially.  Change all callers.
	(ecoff_type_to_string): Take fdr argument rather than aux_ptr and
	bigendian argument.  Change all callers.
	(ecoff_print_symbol): Handle stStruct, stUnion and stEnum.

Thu Apr 14 13:05:10 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-mips.c (mips_howto_table): Add dummy entries to account for
	numbering changes in include/coff/mips.h.  Add entries for
	MIPS_R_RELHI and MIPS_R_RELLO.
	(mips_ecoff_swap_reloc_in): Handle an extra bit for the reloc type
	when little endian.  Treat internal MIPS_R_RELLO or MIPS_R_RELHI
	relocs like MIPS_R_SWITCH, and convert r_offset from 24 to 32
	bits.
	(mips_ecoff_swap_reloc_out): Likewise.
	(mips_adjust_reloc_in): Handle internal MIPS_R_RELLO or
	MIPS_R_RELHI relocs like MIPS_R_SWITCH.
	(mips_adjust_reloc_out): Likewise.
	(mips_relhi_addr, mips_relhi_addend): New static variables.
	(mips_relhi_reloc, mips_rello_reloc): New functions.
	(mips_bfd_reloc_type_lookup): Turn BFD_RELOC_PCREL_HI16_S into
	MIPS_R_RELHI and turn BFD_RELOC_PCREL_LO16 into MIPS_R_RELLO.
	(mips_relocate_hi): Rename from mips_relocate_refhi, and add pcrel
	argument.  Changed all callers.
	(mips_relocate_section): Rename got_reflo to got_lo and
	reflo_int_rel to lo_int_rel.  Handle MIPS_R_RELLO and MIPS_R_RELHI
	relocs.
	(mips_relax_section): Adjust MIPS_R_RELHI/MIPS_R_RELLO pairs when
	expanding a PC relative call.

	* reloc.c (bfd_reloc_code_real_type): Add BFD_RELOC_PCREL_HI16_S
	and BFD_RELOC_PCREL_LO16.
	* bfd-in2.h: Rebuilt.

Wed Apr 13 11:50:07 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* coff-sparc.c (sparccoff_vec): Set minimum alignment power to 3.

Tue Apr 12 13:36:20 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_write_fixups): Always emit at least
        one relocation for any non-bss section.

Mon Apr 11 14:41:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (assign_file_positions_except_relocs): Don't require
	the file alignment to correspond to the page size when linking
	with -N.

Sun Apr 10 01:02:24 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elfcode.h (write_relocs): For rela relocations, adjust the
	addend for relocations involving section symbols to account
	for the lossage of 1:1 mapping from input section symbols to
	output section symbols.

Fri Apr  8 12:22:02 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (NAME(aout,make_sections)): New function.
	(NAME(aout,some_aout_object_p)): Call NAME(aout,make_sections)
	rather than making sections inline.
	(NAME(aout,mkobject)): Don't make any sections.
	(NAME(aout,adjust_sizes_and_vmas)): Call NAME(aout,make_sections).
	(NAME(aout,final_link)): Don't dereference obj_textsec (abfd) or
	obj_datasec (abfd) if they are NULL.
	* libaout.h (NAME(aout,make_sections)): Declare.
	* bout.c (b_out_mkobject): Don't make any sections.
	(b_out_write_object_contents): Call aout_32_make_sections.
	(b_out_set_section_contents): Likewise.
	* i386os9k.c (os9k_mkobject): Don't make any sections.
	(os9k_write_object_contents): Call aout_32_make_sections.
	(os9k_set_section_contents): Likewise.

	* aoutx.h (NAME(aout,new_section_hook)): Don't set N_EXT in target
	index.

Wed Apr  6 20:44:56 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config.bfd, configure.host:  Add mips-*-sysv4* support.

Thu Apr  7 14:23:05 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-mips.c (mips_howto_table): Add entry for MIPS_R_SWITCH.
	(mips_ecoff_swap_reloc_in): For MIPS_R_SWTICH, copy r_symndx into
	r_offset and set r_symndx to RELOC_SECTION_TEXT.
	(mips_ecoff_swap_reloc_out): For MIPS_R_SWITCH, get the r_symndx
	value from the r_offset field.
	(mips_adjust_reloc_in): Maximum r_type value is now MIPS_R_SWITCH.
	For MIPS_R_SWITCH, copy the r_offset field into the addend field.
	(mips_adjust_reloc_out): For MIPS_R_SWITCH, copy the addend field
	into the r_offset field.
	(mips_switch_reloc): New function.
	(mips_bfd_reloc_type_lookup): Translate BFD_RELOC_GPREL32 into
	MIPS_R_SWITCH.
	(mips_relocate_section): Handle MIPS_R_SWITCH.
	(mips_relax_section): Adjust MIPS_R_SWITCH offset if necessary.

Thu Apr  7 11:10:51 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elfcode.h (elf_set_section_contents): Support calling the backend
	function elf_backend_begin_write_processing when just beginning to
	write an object file.

	* libelf.h (elf_backend_begin_write_processing): Declare.

	* elf{32,64}-target.h (elf_backend_begin_write_processing): Provide
	a default definition.
	(elf{32,64}_bed): Add elf_backend_begin_write_processing.

	* elf32-hppa.h (elf_hppa_tc_symbol): Delete extern declaration.
	(elf_hppa_tc_make_sections): Likewise.

	* elf32-hppa.c (symext_chain_built): Delete.
	(symext_chain_size): Renamed from symextn_contents_real_size.
	(elf32_hppa_backend_{begin,final}_write_processing): New functions.
	(add_entry_to_symext_chain): New function.
	(hppa_elf_set_section_contents): Ignore writes to the symbol extension
	section until it's been rebuilt internally.
	(hppa_elf_get_section_contents): Symbol extension section is no
	longer special.
	(elf_backend_{begin,final}_write_processing): Define.
	(elf_hppa_tc_make_sections): Simplify now that much code has
	migrated into elf32_hppa_backend_{being,final}_write_processing.

Wed Apr  6 17:24:14 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Add new target vectors to read the dynamic symbols and dynamic
	relocs.  Change a.out to use these rather than reading the dynamic
	symbols and relocs along with the normal symbols and relocs.
	* targets.c (bfd_target): Add fields
	_bfd_get_dynamic_symtab_upper_bound,
	_bfd_canonicalize_dynamic_symtab,
	_bfd_get_dynamic_reloc_upper_bound,
	_bfd_canonicalize_dynamic_reloc.
	(BFD_JUMP_TABLE_DYNAMIC): Define.
	* libbfd-in.h (_bfd_nodynamic_get_dynamic_symtab_upper_bound):
	Define.
	(_bfd_nodynamic_canonicalize_dynamic_symtab): Define.
	(_bfd_nodynamic_get_dynamic_reloc_upper_bound): Define.
	(_bfd_nodynamic_canonicalize_dynamic_reloc): Define.
	* bfd.c (bfd_get_dynamic_symtab_upper_bound): Define.
	(bfd_canonicalize_dynamic_symtab): Define.
	(bfd_get_dynamic_reloc_upper_bound): Define.
	(bfd_canonicalize_dynamic_reloc): Define.
	* sunos.c (MY_read_dynamic_symbols): Don't define.
	(MY_read_dynamic_relocs): Don't define.
	(MY_get_dynamic_symtab_upper_bound): Define.
	(MY_canonicalize_dynamic_symtab): Define.
	(MY_get_dynamic_reloc_upper_bound): Define.
	(MY_canonicalize_dynamic_reloc): Define.
	(struct sunos_dynamic_info): Change type of dynsym_count and
	dynrel_count to long.  Add fields canonical_dynsym and
	canonical_dynrel.
	(sunos_read_dynamic_info): Check that BFD had DYNAMIC flag set.
	Clear info->canonical_dynsym and info->canonical_dynrel.
	(MY(read_dynamic_symbols)): Removed.
	(MY(read_dynamic_relocs)): Removed.
	(sunos_get_dynamic_symtab_upper_bound): New function.
	(sunos_canonicalize_dynamic_symtab): New function.
	(sunos_get_dynamic_reloc_upper_bound): New function.
	(sunos_canonicalize_dynamic_reloc): New function.
	* libaout.h: Declare struct reloc_ext_external and
	reloc_std_external to avoid prototype problems.
	(struct aout_backend_data): Remove fields read_dynamic_symbols and
	read_dynamic_relocs.
	(NAME(aout,translate_symbol_table)): Declare.
	(NAME(aout,swap_ext_reloc_in)): Declare.
	(NAME(aout,swap_std_reloc_in)): Declare.
	* aoutx.h (NAME(aout,translate_symbol_table)): Renamed from
	translate_symbol_table and made non-static.  Changed all callers.
	(NAME(aout,slurp_symbol_table)): Don't read dynamic symbols.
	(NAME(aout,slurp_reloc_table)): Don't read dynamic relocs.
	(NAME(aout,get_reloc_upper_bound)): Don't count dynamic relocs.
	* aoutf1.h (aout_32_sunos4_write_object_contents): Don't bother to
	remove dynamic symbols and relocs.  They will no longer be
	present.
	(MY_read_dynamic_symbols): Don't define.
	(MY_read_dynamic_relocs): Don't define.
	(sunos4_aout_backend): Don't initialize dynamic entry points.
	* aout-target.h (MY_read_dynamic_symbols): Don't define.
	(MY_read_dynamic_relocs): Don't define.
	(MY(backend_data)): Don't initialize dynamic entry points.
	(MY_get_dynamic_symtab_upper_bound): If not defined, define to
	_bfd_nodynamic version.
	(MY_canonicalize_dynamic_symtab): Likewise.
	(MY_get_dynamic_reloc_upper_bound): Likewise.
	(MY_canonicalize_dynamic_reloc): Likewise.
	* All backends: Added BFD_JUMP_TABLE_DYNAMIC to target vector.
	* bfd-in2.h: Rebuilt.
	* libbfd.h: Rebuilt.

	* cf-m68klynx.c: Include sysdep.h.

	* hp300hpux.c: Removed some spaces in uses of NAME to avoid
	problems with traditional C compilers.

	* targets.c (bfd_target): Rearranged fields in target vector.
	Removed _bfd_debug_info_start, _bfd_debug_info_end and
	_bfd_debug_info_accumulate, which were never used.
	(BFD_JUMP_TABLE_GENERIC, BFD_JUMP_TABLE_COPY): Defined.
	(BFD_JUMP_TABLE_CORE, BFD_JUMP_TABLE_ARCHIVE): Defined.
	(BFD_JUMP_TABLE_SYMBOLS, BFD_JUMP_TABLE_RELOCS): Defined.
	(BFD_JUMP_TABLE_WRITE, BFD_JUMP_TABLE_LINK): Defined.
	* All backends: Changed to use the new BFD_JUMP_TABLE_* macros
	rather than the single JUMP_TABLE macro.  Removed many of the
	weird macro definitions needed to support the monolithic
	JUMP_TABLE.
	* bfd-in.h (JUMP_TABLE): Removed.
	* libbfd-in.h: Define a bunch of macros, and declare a few
	functions, for use with the new BFD_JUMP_TABLE_* macros.
	* libbfd.c (_bfd_dummy_new_section_hook): Removed.
	(bfd_false): Set bfd_error_invalid_operation.
	(bfd_nullvoidptr): Likewise.
	(bfd_n1): New function.
	(_bfd_nocore_core_file_matches_executable_p): Renamed from
	_bfd_dummy_core_file_matches_executable_p.
	(_bfd_nocore_core_file_failing_command): Similar rename.  Set
	bfd_error_invalid_operation.
	(_bfd_nocore_core_file_failing_signal): Likewise.
	(_bfd_generic_get_section_contents): Renamed from
	bfd_generic_get_section_contents.  Changed all callers.
	(_bfd_generic_set_section_contents): Similar rename.
	* ieee.c: #if 0 out ieee_bfd_debug_info_start,
	ieee_bfd_debug_info_end, ieee_bfd_debug_info_accumulate.  They
	were never called.
	* bfd-in2.h: Rebuilt.
	* libbfd.h: Rebuilt.

Tue Apr  5 22:10:04 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Crude support for examining dynamic libraries.
	* som.c (som_object_setup): Set DYNAMIC flag for SHL_MAGIC and
	DL_MAGIC objects.
	(som_prep_headers): Preserve the system_id for DYNAMIC objects.
	Use SHL_MAGIC as the magic number of the DYNAMIC flag is set.
	Write exec headers for DYNAMIC objects.
	(som_begin_writing): DYNAMIC objects have the same alignment
	restrictions as D_PAGED objects.
	(bfd_section_from_som_symbol): Treat DYNAMIC objects like EXEC_P
	objects.
	(object_flags): Add DYNAMIC.

Tue Apr  5 17:48:52 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* i386lynx.c, sparclynx.c (NAME): Remove embedded whitespace in
	macro uses, confuses some non-ANSI compilers.

Tue Apr  5 15:50:01 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_free_cached_info): Add missing PARAMS decl.
	Don't free anything if we don't have a bfd_object.
	(som_close_and_cleanup): Call som_bfd_free_cached_info.

Tue Apr  5 11:22:38 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elf32-mips.c (mips_elf_final_link): Don't remove empty sections.
	It turns out not to be required on Irix 5, and it causes problems
	if the sections happen to contain symbols.

	* elfcode.h (write_shdrs_and_ehdr): Correct bfd_write check.

	* aoutx.h (NAME(aout,canonicalize_reloc)): Don't error out if
	section->relocation is NULL; malloc might have returned NULL when
	given a zero size if there were no relocations.
	* bout.c (b_out_canonicalize_reloc): Likewise.
	* coffcode.h (coff_canonicalize_reloc): Likewise.
	* ecoff.c (ecoff_canonicalize_reloc): Likewise.
	* elfcode.h (elf_canonicalize_reloc): Likewise.
	* mipsbsd.c (MY(canonicalize_reloc)): Likewise.
	* i386lynx.c (NAME(lynx,canonicalize_reloc)): Likewise.
	* nlmcode.h (nlm_canonicalize_reloc): Likewise.
	* som.c (som_canonicalize_reloc): Likewise.
	* hp300hpux.c (MY(slurp_reloc_table)): Likewise.  Also, if malloc
	returns NULL, don't report an error if we asked for zero bytes.
	* i386lynx.c (NAME(lynx,slurp_reloc_table)): If malloc returns
	NULL, don't report an error if we asked for zero bytes.
	* nlmcode.h (nlm_slurp_reloc_fixups): Likewise.

Mon Apr  4 15:30:49 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (NAME(aout,bfd_free_cached_info)): Don't free anything
	if we don't have a bfd_object.

	Made sure that every call to bfd_read, bfd_write, and bfd_seek
	checks the return value and handled bfd_error correctly.  These
	changes are not itemised.  Also:
	* aoutx.h (emit_strtab): Change return type to boolean, and return
	errors.
	(NAME(aout,write_syms)): Check emit_strtab return value.
	(NAME(aout,final_link)): Likewise.
	* coffcode.h (coff_write_relocs): Change return type to boolean,
	and return errors.
	(coff_write_object_contents): Check coff_write_relocs return
	value.
	* i386os9k.c (os9k_swap_exec_header_in): Change return type to
	boolean.
	(os9k_object_p): Check os9k_swap_exec_header_in return value.
	* oasys.c (oasys_read_record): Change return type to boolean.
	(oasys_slurp_symbol_table: Check oasys_read_record return value.
	(oasys_object_p, oasys_slurp_section_data): Likewise.
	(oasys_write_record): Change return type to boolean.
	(oasys_write_syms): Likewise.  Also, check oasys_write_record
	return value.
	(oasys_write_sections): Check oasys_write_record return value.
	(oasys_write_header): Change return type to boolean.  Check
	oasys_write_record return value.
	(oasys_write_end, oasys_write_data): Likewise.
	(oasys_write_object_contents): Check return values of
	oasys_write_header, oasys_write_syms, oasys_write_data, and
	oasys_write_end.
	* srec.c (srec_write_record): Change return type to boolean.
	(srec_write_header): Likewise.  Also, check srec_write_record
	return value.
	(srec_write_section, srec_write_terminator): Likewise.
	(srec_write_symbols): Change return type to boolean.
	(internal_srec_write_object_contents): Check return value of
	srec_write_symbols, srec_write_header, srec_write_section, and
	srec_write_terminator.

	* Makefile.in: Rebuilt dependencies.

Mon Apr  4 10:56:45 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* aix386-core.c (aix386_bfd_is_local_label):  Correct cast from
	asection to asymbol.
	* ptrace-core.c (ptrace_unix_bfd_is_local_label):  Correct cast from
	bfd to asymbol.
	* trad-core.c (trad_unix_bfd_is_local_label):  Correct cast from
	asection to asymbol.

Sun Apr  3 18:27:29 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_slurp_string_table): Use malloc to allocate space
	for the cached copy of the native string table.
	(som_slurp_symbol_table): Likewise for the native symbol table.
	(som_slurp_reloc_table): Likewise for the native and generic
	relocation tables.
	(som_bfd_free_cached_info): Free the cached native strings,
	symbols, and relocations.  Also free the canonical cached
	relocations.

Fri Apr  1 12:40:58 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_write_symbols): If keep_memory is false, make
	sure the symbol name is stored in permanent memory before adding
	it to the string table.

	* archive.c (_bfd_write_archive_contents): Once we've found an
	object, don't bother to look for more when deciding whether to
	build a map.
	(compute_and_write_armap): After adding the symbols for a BFD,
	call bfd_free_cached_info on it.

	Add bfd_free_cached_info support to a.out backends.
	* aoutx.h (aout_get_external_symbols): Renamed from
	aout_link_get_symbols.  Read strings even if symbols have been
	read.  Store string size in obj_aout_string_size.
	(NAME(aout,slurp_symbol_table)): Call aout_get_external_symbols to
	read the symbols.  Allocate the cached symbols with malloc, not
	bfd_alloc.
	(NAME(aout,slurp_reloc_table)): Allocate the cached relocs with
	malloc, not bfd_alloc.
	(NAME(aout,bfd_free_cached_info)): New function; free cached
	symbols and relocs.
	* libaout.h (struct aoutdata): Add external_string_size field.
	(obj_aout_external_string_size): New accessor macro.
	(NAME(aout,close_and_cleanup)): Don't declare.
	(NAME(aout,bfd_free_cached_info)): Declare.
	(aout_32_close_and_cleanup): Don't define.
	(aout_64_close_and_cleanup): Don't define.
	* aout-target.h (MY_bfd_free_cached_info): If not already defined,
	define as NAME(aout,free_cached_info).
	(MY_close_and_cleanup): If not already defined, define as
	MY_bfd_free_cached_info.
	* aout-adobe.c (aout_32_close_and_cleanup): Define.
	(aout_32_bfd_free_cached_info): Don't define.
	* bout.c (aout_32_close_and_cleanup): Define.
	(aout_32_bfd_free_cached_info): Don't define.
	* hp300hpux.c (MY_bfd_free_cached_info): Define as bfd_true.
	(MY_close_and_cleanup): Don't define.
	* i386lynx.c (NAME(lynx,slurp_reloc_table)): Allocate the cached
	relocs with malloc, not bfd_alloc.
	* i386os9k.c (aout_32_close_and_cleanup): Define.
	(aout_32_bfd_free_cached_info): Don't define.

	Add a new entry point to free memory cached by a BFD.
	* targets.c (bfd_target): Add _bfd_free_cached_info field.
	* bfd.c (bfd_free_cached_info): Define.
	* bfd-in.h (JUMP_TABLE): Add _bfd_free_cached_info.
	* bfd-in2.h: Rebuilt.
	* All backends: Initialize bfd_free_cached_info entry point to
	bfd_true.

	* elf32-hppa.c (elf_hppa_reloc_type_lookup): Correct type of
	first, unused, argument.
	(hppa_elf_is_local_label): Declare instead of
	som_bfd_is_local_label.

	* coff-a29k.c (a29k_reloc): Add reloc_entry->address to value of
	absolute R_IREL reloc.

Thu Mar 31 11:52:15 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Added some support for Irix 4 shared libraries.
	* ecoff.c (ecoff_new_section_hook): Set SEC_SHARED_LIBRARY for a
	.lib section.
	(ecoff_sec_to_styp_flags): Set SEC_SHARED_LIBRARY if
	STYP_ECOFF_LIB bit is set.
	(ecoff_compute_section_file_positions): Round the contents of a
	.lib section up to the next page boundary.
	(ecoff_set_section_contents): If we see a .lib section, increment
	the vma by one to count the number of shared libraries we have.
	(ecoff_write_object_contents): Don't crash if we see a
	STYP_ECOFF_LIB section, and don't adjust text_start or data_start
	or bss_size either.

	* coffcode.h (CALC_ADDEND): Change to fetch original symbol value
	from original BFD, rather than using value of current BFD symbol.
	Needed for new linker.
	* coff-sparc.c (CALC_ADDEND): Likewise.

	* ecoff.c (ecoff_write_object_contents): Set the text_start and
	data_start entries in the optional header correctly even if a text
	or data section starts at location zero.

	* reloc.c (bfd_reloc_code_real_type): Added BFD_RELOC_26 (from sef
	and raeburn).
	* bfd-in2.h: Rebuilt.

	* nlm32-i386.c (nlm_i386_read_import): Null terminate the symbol
	name.
	* nlm32-alpha.c (nlm_alpha_read_import): Likewise.
	* nlm32-sparc.c (nlm_sparc_read_import): Likewise.

	* coffgen.c (coff_write_symbol): Reindented.  Changed to return
	boolean, and changed written to unsigned int *.  Check error
	returns from called functions.
	(coff_write_alien_symbol): Likewise.
	(coff_write_native_symbol): Likewise.
	(coff_write_symbols): Likewise.  Reworked checks on whether to
	write symbol name to string table for clarity and to avoid core
	dumping when given a non COFF symbol.
	* libcoff-in.h (coff_write_symbols): Declare as returning boolean.
	* libcoff.h: Rebuilt.
	* coffcode.h (coff_write_object_contents): Check return value of
	coff_write_symbols.

Wed Mar 30 16:25:41 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Changes to let BFD return an error indication from
	get_symtab_upper_bound, bfd_canonicalize_symtab,
	bfd_get_reloc_upper_bound, and bfd_canonicalize_reloc.  They now
	return long instead of unsigned int, and use -1 to indicate an
	error.  Along the way, rename get_symtab_upper_bound to
	bfd_get_symtab_upper_bound.
	* bfd.c (bfd_get_reloc_upper_bound): Return long, and -1 on
	errors.
	(bfd_canonicalize_reloc): Likewise.
	* syms.c (bfd_get_symtab_upper_bound): Renamed from
	get_symtab_upper_bound.
	* targets.c (bfd_target): Renamed _get_symtab_upper_bound to
	_bfd_get_symtab_upper_bound, and changed it and
	_bfd_canonicalize_symtab and _get_reloc_upper_bound and
	_bfd_canonicalize_reloc to all return long.
	* aoutx.h (NAME(aout,get_symtab)): Return long, and -1 on errors.
	(NAME(aout,canonicalize_reloc)): Likewise.
	(NAME(aout,get_reloc_upper_bound)): Likewise.
	(NAME(aout,get_symtab_upper_bound)): Likewise.
	* bout.c (b_out_canonicalize_reloc): Likewise.
	(b_out_get_reloc_upper_bound): Likewise.
	* coffcode.h (coff_canonicalize_reloc): Likewise.
	* coffgen.c (coff_get_symtab_upper_bound): Likewise.
	(coff_get_symtab): Likewise.
	(coff_get_reloc_upper_bound): Likewise.
	* ecoff.c (ecoff_get_symtab_upper_bound): Likewise.
	(ecoff_get_symtab): Likewise.
	(ecoff_canonicalize_reloc): Likewise.
	* elfcode.h (elf_get_symtab_upper_bound): Likewise.
	(elf_get_reloc_upper_bound): Likewise.
	(elf_canonicalize_reloc): Likewise.
	(elf_get_symtab): Likewise.
	* hp300hpux.c (MY(get_symtab)): Likewise.
	(MY(get_symtab_upper_bound)): Likewise.
	(MY(canonicalize_reloc)): Likewise.
	* i386lynx.c (NAME(lynx,canonicalize_reloc)): Likewise.
	* ieee.c (ieee_slurp_external_symbols): Change return type to
	boolean.  Check for errors from get_symbol.
	(ieee_slurp_symbol_table): Change return type to boolean.  Check
	for errors from ieee_slurp_external_symbols.
	(ieee_get_symtab_upper_bound): Return long, and -1 on errors.
	(ieee_get_symtab): Likewise.
	(ieee_get_reloc_upper_bound): Likewise.
	(ieee_canonicalize_reloc): Likewise.
	* mipsbsd.c (MY(canonicalize_reloc)): Likewise.
	* nlmcode.h (nlm_get_symtab_upper_bound): Likewise.
	(nlm_get_symtab): Likewise.
	(nlm_get_reloc_upper_bound): Likewise.
	(nlm_canonicalize_reloc): Likewise.
	* oasys.c (oasys_get_symtab_upper_bound): Likewise.
	(oasys_get_symtab): Likewise.
	(oasys_get_reloc_upper_bound): Likewise.
	(oasys_canonicalize_reloc): Likewise.
	* som.c (som_get_symtab_upper_bound): Likewise.
	(som_get_symtab): Likewise.
	(som_get_reloc_upper_bound): Likewise.
	(som_canonicalize_reloc): Likewise.
	* srec.c (srec_get_symtab_upper_bound): Likewise.
	(srec_get_symtab): Likewise.
	(srec_get_reloc_upper_bound): Define as bfd_0l.
	(srec_canonicalize_reloc): Likewise.
	* tekhex.c (tekhex_get_symtab): Return long, and -1 on errors.
	(tekhex_get_symtab_upper_bound): Likewise.
	(tekhex_get_reloc_upper_bound): Define as bfd_0l.
	(tekhex_canonicalize_reloc): Likewise.
	* libaout.h (NAME(aout,get_symtab_upper_bound)): Change
	declaration to return long.
	(NAME(aout,get_symtab)): Likewise.
	(NAME(aout,canonicalize_reloc)): Likewise.
	(NAME(aout,get_reloc_upper_bound)): Likewise.
	* libcoff-in.h (coff_get_symtab_upper_bound): Likewise.
	(coff_get_symtab): Likewise.
	(coff_get_reloc_upper_bound): Likewise.
	* libecoff.h (ecoff_get_symtab_upper_bound): Likewise.
	(ecoff_get_symtab): Likewise.
	(ecoff_canonicalize_reloc): Likewise.
	* libelf.h (bfd_elf32_get_symtab_upper_bound): Likewise.
	(bfd_elf32_get_symtab): Likewise.
	(bfd_elf32_get_reloc_upper_bound): Likewise.
	(bfd_elf32_canonicalize_reloc): Likewise.
	(bfd_elf64_get_symtab_upper_bound): Likewise.
	(bfd_elf64_get_symtab): Likewise.
	(bfd_elf64_get_reloc_upper_bound): Likewise.
	(bfd_elf64_canonicalize_reloc): Likewise.
	* libnlm.h (nlmNAME(get_symtab_upper_bound)): Likewise.
	(nlmNAME(get_symtab)): Likewise.
	(nlmNAME(get_reloc_upper_bound)): Likewise.
	(nlmNAME(canonicalize_reloc)): Likewise.
	* archive.c (compute_and_write_armap): Use error_return and
	no_memory_return labels rather than freeing information in various
	places.  Change storage, symcount and src_count to long.  Check
	errors from bfd_get_symtab_upper_bound and
	bfd_canonicalize_symtab.
	* bout.c (b_out_relax_section): Change reloc_size to long.  Check
	for errors from bfd_get_reloc_upper_bound and
	bfd_canonicalize_reloc.
	(b_out_get_relocated_section_contents): Likewise.
	* coff-alpha.c (alpha_ecoff_get_relocated_section_contents):
	Likewise.
	* elf32-mips.c: Likewise.
	* elf32-hppa.c (hppa_elf_stub_finish): Likewise.
	(hppa_look_for_stubs_in_section): Check for errors from
	bfd_get_symtab_upper_bound, bfd_canonicalize_symtab, and
	bfd_canonicalize_reloc.
	* ecofflink.c (bfd_ecoff_debug_accumulate_other): Check for errors
	from bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
	* linker.c (generic_link_read_symbols): Likewise.
	(_bfd_generic_final_link): Check for errors from
	bfd_get_reloc_upper_bound and bfd_canonicalize_reloc.
	* reloc.c (bfd_generic_get_relocated_section_contents): Likewise.
	* reloc16.c (bfd_coff_reloc16_relax_section): Likewise.
	(bfd_coff_reloc16_get_relocated_section_contents): Likewise.
	* libbfd.c (bfd_0l): New function.
	* libbfd-in.h (bfd_0l): Declare.
	* aix386-core.c: Change get_symtab_upper_bound, get_symtab,
	get_reloc_upper_bound, and canonicalize_reloc to use bfd_0l rather
	than bfd_0u.
	* cisco-core.c, hppabsd-core.c, hpux-core.c: Likewise.
	* irix-core.c, osf-core.c, ptrace-core.c, trad-core.c: Likewise.
	* bfd-in2.h: Rebuilt.
	* libbfd.h: Rebuilt.
	* libcoff.h: Rebuilt.

	* nlm32-sparc.c (nlm_sparc_read_reloc): Remove unused variables
	temp and name.

Wed Mar 30 08:33:04 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* hosts/dpx2.h: Define POSIX_UTIME.

Wed Mar 30 00:31:49 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* i386dynix.c, config/i386-dynix.mt:  New files, handling Dynix
	variant of a.out.
	* configure.in, config.bfd:  Use them for Dynix.
	* Makefile.in:  Add dependencies for i386dynix.o.
	* targets.c:  Add definition for i386dynix_vec.
	* hosts/symmetry.h:  Do not define TRAD_CORE_USER_OFFSET for Dynix.
	Define HOST_DATA_START_ADDR and TRAD_UNIX_CORE_FILE_FAILING_SIGNAL
	for Dynix. Remove inclusion of dynix3.h, Dynix bfd is now handled by
	i386dynix.c

Mon Mar 28 12:53:27 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

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

	* coffcode.h (coff_set_flags): Handle bfd_arch_powerpc like
	bfd_arch_rs6000.

	* config.bfd (powerpc-*-aix*): New target; use rs6000.mt.
	* config/rs6000.mt (SELECT_ARCHITECTURES): Add bfd_powerpc_arch.

	* aoutx.h (translate_from_native_sym_flags): Set SEC_RELOC flag
	for generated constructor section.

Sun Mar 27 16:25:22 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_begin_writing): New approach at dealing with holes
	in executables left by the HP linker.  Does not rely on subspace
	alignments as subspaces are *NOT* guaranteed to be properly
	aligned in an executable (can you believe that!).

Sat Mar 26 10:25:43 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_get_section_contents): New function.  Do not try
	to actually read data from a section that doesn't have either
	SEC_LOAD or SEC_DEBUGGING set (eg $BSS$) just return true.

        * libbfd.c (bfd_read): Set bfd_error as appropriate for a short
	read. (bfd_error_system_call or bfd_error_file_truncated).

	* som.c: Do not blindly set bfd_error_system_call after a
	failing bfd_read, bfd_write, or bfd_seek.  In a few places
	(like som_object_p) override the error status set by bfd_read.

	* aix386-core.c, aout-encap,c archive.c, bout.c: Likewise.
	* coff-rs6000.c, coffgen.c ecoff.c, elf.c: Likewise.
	* elf32-hppa.c, elfcode.h, hp300hpux.c, i386lynx.c: Likewise.
	* nlm32-alpha.c, nlm32-i386.c, nlm32-sparc.c: Likewise.

	* som.c: Check return values from several bfd_{seek,read,write}
	calls that we just assumed were not failing.

Fri Mar 25 11:44:06 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* hosts/sysv4.h (HAVE_PROCFS): Add comments about ptx4.
	* config/sysv4.mh: Add comment.
	* config/symmetry.mh: Change comment.
	* configure.host: Use sysv4, not symmetry, for i[34]86-sequent-sysv4*.

Fri Mar 25 17:10:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Changes to support linker relaxing of embedded MIPS PIC code to
	use a five instruction sequence for function calls which are out of
	range of the bal instruction.
	* libecoff.h (struct ecoff_section_tdata): Define.
	(ecoff_section_data): Define.
	(ecoff_bfd_relax_section): Don't define.
	* ecoff.c (ecoff_final_link_debug_accumulate): Don't read or free
	the debugging information if it has already been read.
	(ecoff_indirect_link_order): Handle _cooked_size being different
	from _raw_size.  Don't reread the contents or the relocs if they
	have already been read in.
	* coff-mips.c (mips_howto_table): Change bitsize of PCREL16 from
	18 to 16.
	(PCREL16_EXPANSION_ADJUSTMENT): Define.
	(mips_relocate_refhi): Take adjust argument.
	(mips_relocate_section): Handle reloc offsets stored in section
	used_by_bfd field.  Call mips_relax_pcrel16 to handle details of
	expanding an out of range PCREL16.  Keep trace of adjustments
	required by expansions.  Set s and unset h when converting a reloc
	from undefined to section.  Change handling of PC relative relocs:
	if against a section, they are correct in the object file, if
	against an external symbol they are pcrel_offset.
	(mips_relax_section): New function.
	(mips_relax_pcrel16): New function.
	(ecoff_bfd_relax_section): Define.
	* coff-alpha.c (ecoff_bfd_relax_section): Define.
	* ecofflink.c (bfd_ecoff_debug_accumulate): Handle adjustments
	built by mips_relax_section when writing out addresses.
	* elf32-mips.c (mips_elf_read_ecoff_info): Clear adjust field.

	* aoutx.h (NAME(aout,find_nearest_line)): The caller expects
	functionname_ptr to be set to a symbol name, so prepend
	symbol_leading_char.

Thu Mar 24 11:33:46 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coff-h8300.c (h8300_reloc16_extra_cases): Add relaxing info
	for 16bit relative branches.
	* coff-h8500.c (r_high8, r_low16, r_high16): Don't complain on
	overflow.

Thu Mar 24 09:21:13 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_prep_for_ar_write): Ignore non-SOM objects.
	(som_bfd_ar_write_symbol_stuff, som_write_armap): Likewise.

Wed Mar 23 14:29:31 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* netbsd386.c (N_SET_FLAGS): Delete the old definition.

Wed Mar 23 14:58:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Clean up the relaxing code for the new linker.
	* targets.c (_bfd_relax_section): Take boolean *again argument
	rather than asymbol list.
	* bfd.c (bfd_relax_section): Change name of fourth argument from
	symbols to again.
	* reloc.c (bfd_generic_relax_section): Take boolean *again
	argument rather than asymbol list.  Always return true.
	* bout.c: Include genlink.h.
	(aligncode, perform_slip): Declare.
	(perform_slip): Take BFD argument rather than asymbol list.
	Changed all callers.  Get the symbols from the BFD.  Change the
	hash table entry value as well as the symbol value.
	(abs32code): Take BFD argument rather than asymbol list.  Changed
	all callers.
	(aligncode): Likewise.
	(b_out_relax_section): Take boolean *again argument rather than
	asymbol list.  Only return false if an error occurred.  Set *again
	to false.  Get symbols from BFD.
	* reloc16.c: Include genlink.h.
	(bfd_perform_slip): Take BFD argument rather than asymbol list.
	Get the symbols from the BFD.  Change the hash table entry value
	as well as the symbol value.
	(bfd_coff_reloc16_relax_section): Take boolean *again argument
	rather than asymbol list.  Only return false if an error occurred.
	Set *again to false.  Get symbols from BFD.
	* coffcode.h (bfd_coff_backend_data): Change
	_bfd_coff_reloc16_estimate to take BFD argument rather than
	asymbol list.
	(bfd_coff_reloc16_estimate): Corresponding change.
	(dummy_reloc16_estimate): Corresponding change.
	* libcoff-in.h (bfd_coff_reloc16_relax_section): Change
	declaration to take boolean * rather than asymbol list.
	(bfd_perform_slip): Change declaration to take BFD rather than
	asymbol list.
	* coff-h8300.c (h300_reloc16_estimate): Take BFD argument rather
	than asymbol list.  Changed calls to bfd_perform_slip.
	* bfd-in2.h: Rebuilt.
	* libbfd.h: Rebuilt.
	* libcoff.h: Rebuilt.
	* Makefile.in: Rebuilt dependencies.

	* genlink.h (_bfd_generic_link_get_symbols): Define.
	(_bfd_generic_link_get_symcount): Define.
	* linker.c (generic_link_read_symbols): New function.
	(generic_link_add_object_symbols): Use it.  Use
	_bfd_generic_link_get_symbols and _bfd_generic_link_get_symcount
	to get the symbols from the BFD.
	(generic_link_check_archive_element): Likewise.
	(_bfd_generic_final_link): Likewise.
	(_bfd_generic_link_output_symbols): Likewise.
	(default_indirect_link_order): Likewise.
	(generic_link_add_symbol_list): Store pointer to hash table entry
	in asymbol udata field.

Tue Mar 22 13:09:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-mips.c (mips_howto_table): Add entry for new MIPS_R_PCREL16
	reloc, used in embedded PIC code.
	(mips_adjust_reloc_in): Change sanity check to permit new reloc.
	(mips_bfd_reloc_type_lookup): Turn BFD_RELOC_16_PCREL_S2 into
	MIPS_R_PCREL16.

	* elf32-mips.c (mips_elf_final_link): Account for link_order
	relocs when allocating space for relocations.  Set SEC_RELOC flag
	for any section which has relocs.  Handle link_order relocs in
	link_order loop.  Use _bfd_generic_link_add_symbols_collect for
	add_symbls entry point.

	* linker.c (_bfd_generic_final_link): Set reloc_count to 0 before
	counting relocs.  Set SEC_RELOC flag for any section which has
	relocs.

	* linker.c (_bfd_default_link_order): Handle bfd_data_link_order.

	* linker.c (_bfd_generic_link_add_symbols): Just call
	generic_link_add_symbols.
	(_bfd_generic_link_add_symbols_collect): New function, like
	_bfd_generic_link_add_symbols but also collect constructors and
	destructors by name as collect2 does.
	(generic_link_add_symbols): New function, like old
	_bfd_generic_link_add_symbols but with collect argument.
	(generic_link_add_object_symbols): Take collect argument.
	(generic_link_check_archive_element_no_collect): New function.
	(generic_link_check_archive_element_collect): New function.
	(generic_link_check_archive_element): Take collect argument.
	(generic_link_add_symbol_list): Take collect argument.
	(_bfd_generic_link_add_one_symbol): Rename constructor argument to
	collect.
	* libbfd-in.h (_bfd_generic_link_add_symbols_collect): Declare.
	* libbfd.h: Rebuilt.

Tue Mar 22 10:04:00 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* archive.c (bfd_construct_extended_name_table): Use ar_padchar
	for first character in an extended name.
	(_bfd_write_archive_contents): If ar_padchar == '/', then use
	"//" as the name of the special archive member holding the
	extended name table.

Mon Mar 21 12:28:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Support for link_order types which generate relocs in order to
	support -Ur in the linker.
	* linker.c (generic_link_add_symbol_list): Remove bitsize argument
	from call to _bfd_generic_link_add_one_symbol.
	(_bfd_generic_link_add_one_symbol): Remove bitsize argument.
	Don't pass bitsize to constructor call back.  Pass BFD_RELOC_CTOR
	instead of bitsize to add_to_set call back.
	(_bfd_generic_final_link): Account for link_order relocs when
	allocating space for relocations.  Handle them in link_order loop.
	(_bfd_generic_reloc_link_order): New function.
	(_bfd_default_link_order): If a reloc_link_order is seen here,
	abort.
	(_bfd_count_link_order_relocs): New function.
	* libbfd-in.h (_bfd_generic_link_add_one_symbol): Remove bitsize
	argument from declaration.
	(_bfd_generic_reloc_link_order): Declare.
	(_bfd_count_link_order_relocs): Declare.
	* libbfd.h: Rebuilt.
	* aoutx.h (aout_link_add_symbols): Remove bitsize argument from
	call to _bfd_generic_link_add_one_symbol.
	(NAME(aout,final_link)): Account for link_order relocs when
	allocating space for relocations.  Handle them after handling all
	input BFDs.
	(aout_link_reloc_link_order): New function.
	* ecoff.c (ecoff_link_add_externals): Remove bitsize argument from
	call to _bfd_generic_link_add_one_symbol.
	(ecoff_bfd_final_link): Account for link_order relocs when
	allocating space for relocations.  Handle them in link_order loop.
	(ecoff_link_write_external): Set the storage class of a defined
	linker created symbol based on the section it is in.  Correct
	bfd_link_hash_weak case to use .sc rather than .st.
	(ecoff_reloc_link_order): New function.
	* coff-alpha.c (alpha_bfd_reloc_type_lookup): Handle
	BFD_RELOC_CTOR.
	* coff-mips.c (mips_bfd_reloc_type_lookup): Likewise.

	* sunos.c (sunos_read_dynamic_info): Remove unused locals dynsym
	and buf.

	* cisco-core.c (cisco_core_file_p): Only pass one argument to
	bfd_zmalloc.  Free a pointer, not a union.
	(cisco_bfd_is_local_label): Correct cast from asection to asymbol.

Sun Mar 20 09:24:36 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_begin_writing): Fix thinko (off by one error).

	* som.c (bfd_section_from_som_symbol): Only to do the value
	comparison for function symbols within executables.

	* som.c (bfd_section_from_som_symbol): Renamed from
	som_section_from_subspace_index.  Pass in a native SOM symbol.
	For executables, iterate through the sections to find out
	which contains the symbol's address rather than using the
	symbol_info field.  (symbol_info has a different meaning for
	dynamicly linked executables.)

	* trad-core.c (trad_unix_core_file_p): Don't pass abfd to
	bfd_zmalloc.

	* som.c (som_begin_writing): Fix braino (one call to align
	space/subspace data was done unconditionally rather than
	just for executables.)

	* som.c (som_begin_writing): Align text in all executables to
	make HPUX kernel happy.  Fixes strip/objcopy for shared
	executables.

Sat Mar 19 07:06:59 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_begin_writing): Account for alignment needs of
	subspaces too when writing executables.  Never request a negative
	bss size.  Fixes some problems with demand paged executables,
	still having problems with pure executables and shared executables.

Fri Mar 18 19:12:47 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* trad-core.c (trad_unix_core_file_p): Call bfd_zmalloc not
	bfd_zalloc for rawptr, because later on we may call free, not
	bfd_release, on it.

	* bfd.c (struct _bfd): Add cisco_core_struct to tdata union.
	* libbfd.c (bfd_read, bfd_seek): Add comments regarding errors.
	* cisco-core.c: New file.
	* Makefile.in: Change accordingly.
	* configure.in: Recognize cisco_core_vec.
	* config/m68k-aout.mt (SELECT_VECS): Add cisco_core_vec.
	* targets.c: Add cisco_core_vec.
	* bfd-in2.h: Rebuilt.

Fri Mar 18 18:13:49 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.h (som_copyable_section_data_struct): New structure
	containing all the private section information which needs
	to be copied from input section to output section during
	objcopy or strip.
	(som_section_data_struct): Remove several fields now in
	som_copyable_section_data_struct.  Make the space and
	subspace dictionaries be pointers (to save space when
	only reading objects).

	* som.c (bfd_som_set_section_attributes): Now returns a boolean;
	some references changed.  Allocate a copyable data stucture if
	none exists.  Store info into the copyable data structure.
	(bfd_som_set_subsection_attributes): Likewise.
	(som_is_space, som_is_subspace, som_is_container): New functions.
	Use these instead of directly accessing private data.
	(som_prep_headers): Allocate space and subspace headers here.
	Fill in some fields in the space/subspace headers from the
	copyable data.
	(som_bfd_copy_private_section_data): Only copy the stuff
	that we really need to make objcopy and strip work.  Allocate
	the copy_data structure for the output bfd before copying.

	* som.h (struct som_exec_data): New structure to hold exec
	info that must be preserved when running objcopy/strip.
	(struct somdata): Add new "exec_data" field and accessor
	macro.  Add some comments on how the various fields are used.
	(som_section_data_struct): Make is_space and is_subspace bitfields.
	Delete unused subspace_index.  All references now use the
	target_index field within the section structure itself.

	* som.c (make_unique_section): Delete unused declaration.
	(som_bfd_copy_private_bfd_data): New function.
	(som_object_setup): Allocate space for and save exec information
	that needs to be copied during objcopy/strip.
	(som_mkobject): Do not allocate space for a file header here.
	It is not used when only reading SOM objects.
	(som_prep_headers): Allocate space for and attach a file header
	to the output bfd.  For executables, use the saved system_id
	value rather than trying to guess the right value.  Do not abort
	wwhen setting file_hdr->entry* for executables.
	(som_begin_writing): For executables, set the exec_entry and
	exec_flags fields.
	(som_copy_private_backend_section_data): Always return a value.

	* libhppa.h (PA_PAGESIZE): Define.

	* som.c (SOM_ALIGN): Define.
	(som_begin_writing): If writing an executable, initialize all
	fields in the exec header to zero.  Update fields in the exec
	header as sizes of loadable subspaces are computed.  Carefully
	preserve alignments when building executables.  Actually write the
	exec after all the fields are filled in.

        * Better long-filename handling.  Reads SOM ABI compliant extended
	names, but doesn't quite write compliant extended names yet.
	* som.c (som_slurp_extended_name_table): Delete function.  The
	generic code will handle things correctly.
	(som_slurp_armap): Seek to the beginning of the next member.
	(normalize): New function.
	(som_bfd_ar_write_symbol_stuff): Take the size of the extended
	name table into account when computing the file offsets in the
	SOM dictionary.  Make sure to align to an even boundary.
	(som_write_armap): Initialize the checksum to zero.
	(ar_maxchars): Fix.  Opps.

Fri Mar 18 20:35:24 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* aoutx.h (reloc_type_lookup): Handle BFD_RELOC_CTOR on a 64-bit
	machine.  Handle BFD_RELOC_SPARC13 and BFD_RELOC_SPARC_BASE13.

Thu Mar 17 18:26:46 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* bfd-in.h (BFD_VERSION): Use @VERSION@.
	* Makefile.in (bfd.h): Replace it with contents of VERSION file.
	* bfd-in2.h: Regenerated.

	* trad-core.c (trad_unix_bfd_is_local_label): Fixed typo where
	this was also named trad_unix_bfd_copy_private_bfd_data.

Thu Mar 17 10:37:07 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* aoutx.h, elfcode.h, coff-alpha.c, bout.c, ecoff.c, ecofflink.c,
	elf32-hppa.c, elf32-mips.c, linker.c, som.c, sunos.c: If malloc(0)
	returns NULL, it is not an error.  It's possible that some of
	these checks are not necessary (because the size can never be
	zero), but putting in the checks is the conservative thing to do
	in light of the fact that some of these malloc calls replaced
	unchecked alloca calls, in which a zero argument would work fine.

Thu Mar 17 11:44:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* osf-core.c (osf_core_bfd_copy_private_bfd_data): Remove
	duplicate definition.
	(osf_core_bfd_is_local_label): Define.

	* reloc.c (bfd_generic_get_relocated_section_contents): Don't fail
	if malloc (0) fails.  bfd_canonicalize_reloc returning 0 is not a
	failure indication, it merely means there are no relocs.

	* elfcode.h (NAME(bfd_elf,write_object_contents)): Don't use space
	after NAME, since SunOS /bin/cc can't handle it.

Wed Mar 16 16:43:33 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* netbsd386.c (N_SET_FLAGS): Don't nuke the machine id field.
	From sukes@glue.umd.edu (Tasuki Hirata).

Wed Mar 16 07:55:54 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* aoutf1.h (4 places): Use a simple #if on ARCH_SIZE, rather than
	all that convoluted stuff with NAME, CAT3, etc.  The convoluted
	stuff broke for SunOS4 /bin/cc (due to DEFUN elimination, I guess).

Wed Mar 16 00:02:05 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_prep_for_fixups): Detect section symbols based
	on either the lack of private data or the symbol flags.  Do not
	munge section symbol names anymore -- they no longer confuse GDB.
	(som_begin_writing): Leave space for an exec header if writing
	an executable.
	(som_slurp_symbol_table): Recognize both forms of section symbol
	names "L$0\002" and "$<FOO>$".  Change the name of "L$0\002"
	section symbols to be the name of the section they represent.
	Debugging  symbols begin with "L$0\001", not just "L$".

Tue Mar 15 22:58:28 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* bfd-in2.h, libbfd.h, libcoff.h: Rebuilt.

	* bfd-in.h (JUMP_TABLE): Add new entries to the jump table
	for bfd_copy_private_section_data, bfd_copy_private_bfd_data,
	and bfd_is_local_label.

	* targets.c: Add new entries to the bfd_target structure.

	* bfd.c (bfd_copy_private_bfd_data): New definition.

	* section.c (bfd_copy_private_section_data): New definition.

	* syms.c (bfd_is_local_label): New definition.

	* libbfd-in.h (bfd_generic_is_local_label): Declare.

	* libbfd.c (bfd_generic_is_local_label): New function.

	* *-core.c: Provide default definitions for new functions in
	the target vector which all point to bfd_false.

	* aout-target.h, coffcode.h, elf32-target.h elf64-target.h, ieee.c
	libaout.h, libecoff.h, nlm-target.h, oasys.c, srec.c, tekhex.c
	Default new vectors for copying private backend data to bfd_true.
	Default new vector for determining if a symbol is a local label
	to bfd_generic_is_local_label.

	* som.c (som_bfd_copy_private_section_data): New function.
	(som_bfd_is_local_label): New function.
	(som_bfd_copy_private_bfd_data): For now default to bfd_true.

	* elf32-hppa.c (hppa_elf_is_local_label): New function.

Tue Mar 15 23:55:47 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* cf-m68klynx.c (CALC_ADDEND): Use _bfd_m68klynx_howto_table.

Tue Mar 15 04:41:13 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* Most files:
	Replace DEFUN and DEFUN_VOID with K&R-style function definition.
	Indent some of them to GNU standards.

	* aout32.c, archures.c, core.c, cpu-h8300.c, cpu-i960.c,
	cpu-m68k.c, cpu-m88k.c, cpu-mips.c, cpu-vax.c, ctor.c, demo64.c,
	elf32-hppa.h, gen-aout.c, host-aout.c, init.c, libhppa.h,
	libieee.h, liboasys.h, newsos3.c, som.h, stab-syms.c, sunos.c:
	Update copyright years.

Mon Mar 14 11:41:23 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_prep_for_fixups): A relocation involving the section
	symbol for the *ABS* section is really a relocation involving
	no symbol.
	(som_slurp_symbol_table): Do not set BSF_GLOBAL or BSF_EXPORT for
	undefined symbols.  Correctly distinguish between debugger symbols
	and section symbols.

	* som.c (setup_sections): Set SEC_DEBUGGING and the section attributes
	for spaces and subspaces.

	* som.c (som_bfd_count_ar_symbols): Fix typo.

	* som.c (som_object_setup): Set EXEC_P, D_PAGED, WP_TEXT, and
	HAS_RELOC based on the object's magic number.
	(make_unique_section): Delete function.  BFD and its users are
	prepared to handle multiple sections with the same name.
	(setup_sections): Allocate space on the BFD's obstack to hold
	section names.  Use bfd_make_setion_anyway rather than the
	obsolete make_unique_section.
	(som_prep_headers): Choose the correct SOM magic number based
	on the BFD's flags.
	(som_bfd_fill_in_ar_symbols): Return false, not NULL on error.

Sat Mar 12 09:46:09 1994  Ian Lance Taylor  (ian@cygnus.com)

	* elf32-ppc.c: Renamed from elf32-powerpc.c.
	* nlm32-ppc.c: Renamed from nlm32-powerpc.c.
	* Makefile.in, configure.in: Corresponding changes.

Fri Mar 11 22:27:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elf32-powerpc.c: Extensive changes to update to preliminary ABI.

Fri Mar 11 00:34:59 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* sunos.c (sunos_read_dynamic_info):  Assume that dynamic info
	is always located at the start of the data section to allow
	recovery of the dynamic info from a stripped executable.
	* ecoff.c (ecoff_styp_to_sec_flags):  Handle STYP_PDATA, STYP_XDATA
	and STYP_COMMENT.

Wed Mar  9 17:17:53 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* libbfd-in.h: Remove alloca cruft.  It was missing some necessary
	cruft (like the #pragma alloca for AIX).
	In addition to that problem, the C alloca calls xmalloc, which
	means checking for being out of memory can't work right.  The
	following changes remove all uses of alloca from BFD.
	* hosts/solaris2.h: Remove alloca cruft.
	* som.c: Replace alloca with a fixed size auto array.
	* aoutx.h, elfcode.h, nlmcode.h, bout.c, coff-alpha.c, ecoff.c,
	ecofflink.c, elf32-hppa.c, elf32-mips.c, linker.c, reloc.c, som.c,
	sunos.c: Replace alloca with malloc and appropriate error checking and
	freeing.
	* linker.c: Replace alloca with obstack_alloc.
	* libbfd.h: Rebuilt.

Tue Mar  8 12:10:38 1994  Ian Lance Taylor  (ian@cygnus.com)

	* coff-mips.c (mips_relocate_section): Handle MIPS_R_LITERAL like
	MIPS_R_GPREL.

Sat Mar  5 14:08:54 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elf32-hppa.h, elfcode.h:  Replace uses of Elf*_Half, Elf*_Word,
	Elf*_Off typedefs by their expansion, the typedefs have been
	removed from include/elf/internal.h.
	* elfcode.h (bfd_section_from_shdr):  Handle SHT_DYNAMIC section like
	SHT_PROGBITS section.

Thu Mar  3 20:03:39 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.h (_PA_RISC_ID): Treat HOST_HPPAOSF just like HOST_HPPABSD.

Wed Mar  2 13:28:06 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* configure.host: Recognize i[34]86-sequent-*.

	* trad-core.c (trad_unix_core_file_p): A non-zero, not zero,
	return from bfd_seek indicates an error.
	New macro TRAD_CORE_DSIZE_INCLUDES_TSIZE to replace
	TRAD_CORE_STACK_OFFSET.
	* hosts/symmetry.h: Define TRAD_CORE_DSIZE_INCLUDES_TSIZE and
	TRAD_CORE_USER_OFFSET but not HOST_STACK_OFFSET.

Wed Mar  2 11:57:03 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.[ch]: Do not include libhppa.h in som.c, instead include
	it in som.h.

	* elf32-hppa.[ch]: Do not include libhppa.h in elf32-hppa.c, instead
	include it in elf32-hppa.h.

	* som.c (log2): Return -1 on error rather than aborting.
	(setup_sections): Bubble up an error from log2.

	* Changes to make HP C compiler happy in both traditional
	and ANSI mode.
	* som.c (hppa_som_gen_reloc_type): Use correct enum type for
	field parameter.
	(bfd_som_set_section_attributes): Use unsigned int rather than
	unsigned char to avoid GNU-C extensions.
	(bfd_som_attach_aux_hdr): Return a boolean to indicate success
	or failure rather than aborting on failure.

	* som.h (bfd_som_set_section_attributes): Fix prototype to match
	som.c changes.
	(bfd_som_attach_aux_hdr): Add prototype.
	(hppa_som-gen_reloc_type): Likewise.

	* elf32-hppa.c: Add a couple casts to make HP compiler happy.
	(hppa_look_for_stubs_in_section): Do not return false on failure
	until rest of code is ready to handle it.  Abort for now.

Tue Mar  1 18:33:59 1994  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* bfd-in2.h: Rebuilt.

Tue Mar  1 13:06:53 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* i386os9k.c: use new functions bfd_set_error and bfd_get_error.
	* Makefile.in: delete an extra blank.
	* configure.in : Add i396os9k_vec.

Mon Feb 28 15:41:01 1994  Kung Hsu  (kung@mexican.cygnus.com)

	* config.bfd : Add i386-os9k.
	* config/i386-os9k.mt : Newly add os9k target makefile.

	* i386os9k.c : new file to handle os9k format bfd.
	* Makefile.in : Handle new file i386os9k.c
	* targets.c : Add bfd_target_os9k_flavour and i386os9k_vec.
	* cache.c : Initialize cache_sentinel to 0.

Sun Feb 27 16:30:55 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c (mismatches, retval_mismatches): Fix mismatch
	action in case where caller specified no argument relocation.
	(hppa_elf_build_linker_stub): Try again to get the sym_ptr_ptr
	right in the original relocation and the stub's relocation.

        * elf32-hppa.h (hppa_look_for_stub_in_section): Fix typo.  Delete
	unused symbols argument.

	* elf32-hppa.c (hppa_elf_stub_reloc): Accept asymbol ** rather
	than asymbol * for original target symbol.  All callers changed.
	Set reloc->sym_ptr_ptr appropriately.
	(hppa_elf_build_linker_stub): Set reloc->sym_ptr_ptr correctly.
	(hppa_elf_look_for_stubs_in_section): No longer need symbols
	argument.  Use the output symbols when canonicalizing the relocs,
	creating them if necessary.

	* linker.c (_bfd_generic_link_output_symbols): Do not
	rebuild/clobber the output symbols if they already exist.

Sun Feb 27 15:22:36 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* targets.c (BFD_SEND, BFD_SEND_FMT): Add debugging versions that
	check all the pointer dereferences.  Enabled via DEBUG_BFD_SEND.
	* bfd-in2.h: Rebuilt.

	* srec.c (hex_value): Always set to a size of 256 bytes.
	(srec_init): Cosmetic changes.

Sun Feb 27 11:18:47 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elf32-hppa.c: Second half of major cleanup.  More comments,
	PARAMize and staticize rest of functions.  Delete unused
	functions.  Delete unused/unnecessary arguments to some functions.
	Group static vars together.  Abort for bad errors until we have
	error code propogation working.  Work on spacing and indention.
	Add FIXMEs for unresolved problems.  Use enums rather than
	#defines for lots of things.  Merge two functions which build
	linker stubs into a single function (so they can easily share a
	ton of common code).

Sat Feb 26 10:00:45 1994  Ian Lance Taylor  (ian@cygnus.com)

	* reloc.c (_bfd_relocate_contents): Adjust handling of overflow to
	avoid depending upon right shifts of signed numbers, and to
	correct handling of src_mask with lower bits zero.

	* aoutx.h, archive.c: Add casts to avoid warnings from SVR4 cc.
	* ecoff.c, ecofflink.c, ecoffswap.h, srec.c: Likewise.
	* elf32-i386.c: Likewise.
	* elfcode.h (bfd_section_from_shdr): Make i unsigned; remove old
	#if 0 code.
	(elf_write_phdrs): Make i unsigned.
	(map_program_segments): Make i and n_left unsigned.
	(assign_file_positions_except_relocs): Make i unsigned.
	(write_shdrs_and_ehdr): Make count unsigned.
	(assign_file_positions_for_relocs): Make i unsigned.
	(NAME(bfd,elf_write_object_contents)): Make count unsigned.
	(section_from_elf_index): Make index argument unsigned.

Fri Feb 25 21:34:58 1994  Ian Lance Taylor  (ian@cygnus.com)

	* elfcode.h: Don't include assert.h.
	(swap_out_syms): Use BFD_ASSERT rather than assert.

	* linker.c (_bfd_generic_link_write_global_symbol): Add missing
	break in switch.

	* hosts/i386v4.h (qsort, strtol): Remove incorrect and useless
	declarations.

Fri Feb 25 16:35:57 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* libhppa.h (hppa_rebuild_insn): Moved here from elf32-hppa.c.

	* elf32-hppa.h (elf_hppa_tc_symbol): Add new arguments.
	(elf_hppa_tc_make_sections): Likewise.
	(elf_hppa_final_processing): Add extern decl.

	* elf32-hppa.c: First half of major cleanup.  Add/cleanup lots of
	comments.  PARAMize some static functions.  Delete unused functions.
	Delete unused/unnecessary arguments to many functions.  Group
	static vars together.  Collapse common case statements together
	in many places.  Use default case when possible instead of listing
	each case separately.  Abort for bad errors until we get error
	code propogation working.  Work on spacing and indention problems.
	Add FIXMEs for some unresolved problems.  Delete hopelessly broken
	COMPLEX relocation support (it's never used anyway).
	(hppa_elf_rebuild_insn): Delete.  Moved into libhppa.h.
	(elf_hppa_tc_symbol): Accept and use new arguments (symext chains).
	(elf_hppa_tc_make_sections): Likewise.

	* format.c (bfd_check_format_matches): Initialize matching_vector
	to keep gcc -Wall quiet.

	* elfcode.h (elf_slurp_reloca_table): Fix typo.

	* som.c (som_get_symtab_upper_bound): Use "sizeof (asymbol *)"
	not "sizeof (som_symbol_type *)".

	* elfcode.h (elf_get_symtab_upper_bound): Use "sizeof (asymbol *)"
	not "sizeof (asymbol").  Opps.

Fri Feb 25 13:19:04 1994  Ted Lemon  (mellon@pepper.ncd.com)

	* bfd.c (bfd_get_gp_size): Can't return gp value on an archive.
	(bfd_set_gp_size):  Can't set gp value on an archive.

Fri Feb 25 12:57:00 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* srec.c (pass_over): Don't skip too many characters when
	end of line seen.

Fri Feb 25 11:41:57 1994  Ian Lance Taylor  (ian@cygnus.com)

	* ecoff.c (ecoff_sizeof_headers): Align result to 16 byte
	boundary.

Thu Feb 24 07:13:22 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_derive_misc_symbol_info): Derive symbol_info
	field for absolute symbols in the same manner as undefined
	and common symbols.

Thu Feb 24 04:29:19 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elfcode.h (elf_core_file_p):  Check for core file e_machine match
	like in elf_object_p.

Wed Feb 23 18:28:37 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elfcode.h (alloca): Delete declaration.

	* som.c (som_prep_headers): Use CPU_PA_RISC1_0 for magic
	number rather than HP9000S800_ID.  Note som.c is careful
	to make sure CPU_PA_RISC1_0 is always defined.

Mon Feb 21 10:12:02 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* Makefile.in (targets.o, archures.o): Use ALL_CFLAGS to supply
	flags to explicit compile actions.

Mon Feb 21 09:50:06 1994  Ian Lance Taylor  (ian@lisa.cygnus.com)

	* ecofflink.c (ecoff_write_symhdr): Set symhdr->magic here.
	* ecoff.c (ecoff_write_object_contents): Make sure .bss section
	ends on a page boundary if there is no symbol table.
	(ecoff_bfd_final_link): Don't set symhdr->magic here.

	* hosts/hp300.h: Include <stdlib.h>; don't declare free.

	* som.c (som_bfd_count_ar_symbols): Use a pointer and alloca
	rather than an array of variable size.
	(som_bfd_fill_in_ar_symbols): Likewise.
	(som_bfd_ar_write_symbol_stuff): Likewise.

	* coff-alpha.c (alpha_relocate_section): Rewrite mask and shift
	operation to avoid OSF 1.3 cc bug.
	* ecoff.c (ecoff_write_object_contents): Make text_size, data_size
	and bss_size bfd_size_type instead of unsigned long.  Make
	text_start and data_start bfd_vma instead of unsigned long.
	* ecofflink.c (ecoff_add_string): Remove incorrect cast of return
	value.

Sun Feb 20 16:06:54 1994  Ian Lance Taylor  (ian@lisa.cygnus.com)

	* linker.c (_bfd_generic_link_add_archive_symbols): Consider
	symbols in the order they appear in the archive map.

Sat Feb 19 03:17:32 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* coff-alpha.c (reloc_nil):  Add forward declaration, add missing
	error_message argument.
	* coff-sparc.c (bfd_coff_generic_reloc):  Add forward declaration,
	add missing error_message argument.
	* mipsbsd.c (mips_fix_hi16_s):  Add forward declaration, add missing
	error_message argument.

Fri Feb 18 11:41:58 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Support for PowerPC NetWare.
	* nlm32-powerpc.c: New file.
	* config.bfd (powerpc-*-netware*): New target; use ppc-nlm.
	* config/ppc-nlm.mt: New file.
	* configure.in (nlm32_powerpc_vec): New target vector; use
	nlm32-powerpc.o, nlm32.o, nlm.o.
	* targets.c (nlm32_powerpc_vec): Declare.
	* Makefile.in (BFD32_BACKENDS): Add nlm32-powerpc.o.
	(CFILES): Add nlm32-powerpc.c.

	Initial support for PowerPC ELF.  Done without an ABI, and
	probably to be changed when I get an ABI.
	* config.bfd (powerpc-*-sysv4*): New target; use ppc-elf.
	* config/ppc-elf.mt: New file.
	* configure.in (bfd_elf32_powerpc_vec): New target vector; use
	elf32-powerpc.o, elf32.o, elf.o.
	* elf32-powerpc.c: New file.
	* elfcode.h (prep_headers): Add bfd_arch_powerpc case.
	(elf_set_arch_mach): Likewise.
	* targets.c (bfd_elf32_powerpc_vec): Declare.
	* Makefile.in (BFD32_BACKENDS): Add elf32-powerpc.o.
	(CFILES): Add elf32-powerpc.c.
	Rebuilt dependencies.

Thu Feb 17 15:29:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coffgen.c (coff_write_linenumbers): Always return a value.

	* elfcode.h (elf_slurp_symbol_table): Handle zero symbols
	reasonably.  Allocate x_symp using alloca.

	* elfcode.h (map_program_segments): ELF program header entries
	must be sorted by load address.  This used to generate the entries
	in reverse order.

	* section.c (SEC_IN_MEMORY): Define.
	(asection): Rename unused field otheruserdata to contents, and
	make it char *.
	(bfd_make_section_anyway): Initialize contents field to NULL.
	(bfd_get_section_contents): If SEC_IN_MEMORY is set, get section
	contents from contents field rather than from file.
	* bfd-in2.h: Rebuilt.

Thu Feb 17 08:30:53 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* bfd.c (bfd_get_error, bfd_set_error): New functions.
	(bfd_error): Make static.
	(bfd_error_type): Renamed from bfd_ec.  Prepend "bfd_error_" to
	all values.
	* bfd-in2.h: Regenerated.
	* aix386-core.c, aout-adobe.c, aout-encap.c, aout-target.h,
	aoutf1.h, aoutx.h, archive.c, archures.c,
	bfd.c, bout.c, cache.c, coff-alpha.c, coff-mips.c,
	coff-rs6000.c, coffcode.h, coffgen.c, core.c, ctor.c,
	ecoff.c, ecofflink.c, elf.c, elf32-hppa.c, elf32-mips.c,
	elfcode.h, format.c, hash.c, hp300hpux.c, hppabsd-core.c,
	i386lynx.c, ieee.c, libbfd.c, libelf.h, linker.c,
	lynx-core.c, nlm.c, nlm32-alpha.c, nlm32-i386.c,
	nlm32-sparc.c, nlmcode.h, oasys.c, opncls.c, osf-core.c,
	ptrace-core.c, reloc16.c, rs6000-core.c, section.c, som.c,
	srec.c, sunos.c, syms.c, targets.c, tekhex.c,
	trad-core.c: Change callers.

Tue Feb 15 22:27:27 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c: Remove FIXMEs for things which have been dealt with.

Tue Feb 15 19:39:24 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* section.c (bfd_get_section_contents): Since this function reads
	unrelocated contents, the section's raw size is always the one to
	use for bounds checking.

	* linker.c (default_indirect_link_order): In assertion, compare
	link_order size field against cooked size, not raw size, of input
	section.

	* bout.c (b_out_get_reloc_upper_bound): For BSS section, just
	return 0.
	(aligncode): When shrinking, the addend should be set to the
	current offset in the section plus the number of bytes of padding
	that will actually be retained.
	(b_out_relax_section): If a section contains no relocations, don't
	bother processing them.
	(b_out_get_relocated_section_contents): Set reloc_done.  Assert
	that bfd_get_section_contents returns true.  Check that relocs are
	properly ordered.
	(b_out_get_relocated_section_contents, case ALIGNDONE): Assert
	that reloc->addend falls between the current source offset and the
	raw size of the input section.

	* config.bfd: Support i960 vxworks versions > 5.0 with coff, not
	bout.  Default with no version number is still bout.  Support
	explicit i960-coff target too.

	* bout.c: Changed some indentation, deleted trailing whitespace,
	fixed some comments, removed some "#if 1" lines.
	(output_addr): New macro.
	(calljx_callback, callj_callback, get_value, abs32code, aligncode,
	b_out_get_relocated_section_contents): Use it for readability.

Tue Feb 15 09:00:16 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_bfd_prep_for_ar_write): Iterate through the SOM
	symbols, not the BFD symbols.
	(som_bfd_ar_write_symbol_stuff): Likewise.

Mon Feb 14 22:55:20 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_slurp_symbol_table): Do not die if a BFD doesn't
	have any symbols.

	* Finish basic read-write support for SOM archive libraries.  Bugs
	surely remain as this hasn't been tested all that much.
	* som.c (SOM_LST_HASH_SIZE, SOM_LST_MODULE_LIMIT): Define.
	(struct som_misc_symbol_info): New structure to hold info necessary
	to build both normal and library symbol tables.
	(som_derive_misc_symbol_info): New function to derive info necessary
	to build both normal and library symbol tables.
	(som_build_and_write_symbol_table): Use new function to derive misc
	symbol information.
	(som_slurp_symbol_table): Update backend private data for symbols
	appropriately.
	(som_bfd_prep_for_ar_write): New function.
	(som_bfd_ar_symbol_hash): New function.
	(som_bfd_ar_write_symbol_stuff): New function.
	(som_write_armap): Flesh out.
	(som_vec): Fix ar padding character.

	* som.c: Consistently use memset rather than bzero.

Mon Feb 14 17:02:28 1994  Stu Grossman  (grossman at cygnus.com)

	* coff-rs6000.c:  Add Lynx core file support, use HOST_AIX, where
	appropriate.
	* rs6000-core.c:  Use HOST_AIX instead of COREFILES_PLEASE.
	* config/rs6000.mh:  Remove defs of ARCHIVES_PLEASE and
	COREFILES_PLEASE.
	* config/rs6000lynx.mh:  Turn on Lynx core file support.
	* hosts/rs6000.h:  #define HOST_AIX.
	* hosts/rs6000lynx.h:  Create this to enable Lynx host support.

Sun Feb 13 14:30:00 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.h (som_symbol_data): Safely access backend private data
	for BFD symbols.  All callers changed.

	* Read-only SOM archive support.
	* som.c (som_bfd_count_ar_symbols): New helper function.
	(som_bfd_fill_in_ar_symbols): New helper function.
	(som_slurp_armap): New function to read a SOM LST.

	* som.h: Include <lst.h> and <ar.h>.

Sat Feb 12 22:34:14 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* elfcode.h (elf_map_symbols): Fix typo.
	(write_object_contents): Check return values from prep_headers and
	elf_compute_section_file_positions.
	(set_section_contents): Likewise.

Fri Feb 11 16:56:50 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* archive.c (normalize) [VMS]: Call malloc, not bfd_xmalloc.
	(bfd_construct_extended_name_table): Check result of normalize.

Tue Feb  8 08:57:31 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	Make all callers of malloc or realloc (including via obstacks)
	check the result for NULL.  Most set bfd_error to no_memory and
	return in that case; a few are harder to fix, and are marked
	with "FIXME <return type>".

	* elf32-hppa.c (hppa_elf_build_arg_reloc_stub
	hppa_elf_build_long_branch_stub):  Check bfd_make_empty_symbol return.
	* linker.c (_bfd_generic_link_output_symbols
	_bfd_generic_link_write_global_symbol): Ditto
	* section.c (bfd_make_section_anyway): Ditto.

	* tekhex.c (find_chunk tekhex_mkobject): Check bfd_alloc.
	(first_phase): Ditto.  FIXME void
	(tekhex_make_empty_symbol): Check bfd_zalloc.

	* sunos.c (sunos_read_dynamic_info): Check bfd_zalloc.
	(MY(read_dynamic_symbols) MY(read_dynamic_relocs)): Check bfd_alloc.

	* stringhash.c (_bfd_stringtab_hash_newfunc): Check bfd_hash_allocate.

	* srec.c: Indent.
	(fillup_symbols): Check bfd_alloc.  FIXME void
	(srec_mkobject srec_get_section_contents
	srec_set_section_contents): Check bfd_alloc.
	(srec_make_empty_symbol): Check bfd_zalloc.

	* som.c (hppa_som_gen_reloc_type): Check bfd_alloc_by_size_t.
	(make_unique_section): Check bfd_alloc.
	(som_new_section_hook): Check bfd_zalloc.
	(bfd_som_attach_aux_hdr): Ditto.  FIXME void

	* rs6000-core.c (rs6000coff_core_p): Check bfd_zalloc.

	* osf-core.c (osf_core_make_empty_symbol): Check bfd_zalloc.
	(osf_core_core_file_p): Check bfd_alloc.

	* oasys.c (oasys_slurp_symbol_table oasys_archive_p
	oasys_mkobject oasys_object_p oasys_new_section_hook
	oasys_set_section_contents): Check bfd_alloc.
	(oasys_slurp_section_data): Check bfd_zalloc and bfd_alloc.
	(oasys_make_empty_symbol): Check bfd_zalloc.

	* nlmcode.h (nlm_make_empty_symbol): Check bfd_zalloc.
	(nlm_slurp_symbol_table): Check bfd_zalloc and bfd_alloc.

	* nlm32-sparc.c (nlm_sparc_read_import): Check bfd_alloc.

	* nlm32-i386.c (nlm_i386_read_import): Check bfd_alloc.

	* nlm32-alpha.c (nlm_alpha_read_import): Check bfd_alloc.

	* linker.c (_bfd_link_hash_newfunc
	(generic_link_hash_newfunc
	(archive_hash_newfunc
	(_bfd_generic_link_add_one_symbol): Check bfd_hash_allocate.
	(_bfd_generic_final_link
	(_bfd_generic_link_output_symbols
	(default_indirect_link_order): Check bfd_alloc.
	(bfd_new_link_order): Check bfd_alloc_by_size_t.

	* irix-core.c (irix_core_make_empty_symbol): Check bfd_zalloc.

	* ieee.c: Indent.
	(read_id get_symbol get_section_entry ieee_archive_p ieee_object_p
	ieee_slurp_section_data ieee_new_section_hook): Check bfd_alloc.
	(do_one): Check bfd_alloc.  Return a boolean.
	(ieee_slurp_section_data): Check it.
	(init_for_output): Check bfd_alloc.  Return a boolean.
	(ieee_set_section_contents): Check it.
	(do_with_relocs):  Check bfd_alloc.  Return a boolean.
	(ieee_bfd_debug_info_accumulate): Ditto.  FIXME void.
	(ieee_mkobject): Check bfd_zalloc.
	(ieee_make_empty_symbol): Check bfd_zmalloc.

	* hpux-core.c (hpux_core_make_empty_symbol): Check
	bfd_zalloc.

	* hppabsd-core.c (hppabsd_core_make_empty_symbol): Check
	bfd_zalloc.
	(hppabsd_core_core_file_p): Check bfd_zalloc.

	* hp300hpux.c (MY(slurp_symbol_table)): Check bfd_alloc.

	* elfcode.h (elf_new_section_hook): Check bfd_alloc.
	(bfd_section_from_phdr): Ditto.
	(write_relocs): Ditto.  FIXME void
	(elf_map_symbols assign_section_numbers map_program_segments):
	Ditto.  Return a boolean.
	(swap_out_syms): Ditto.  Check elf_map_symbols.
	(elf_slurp_symbol_table): Check bfd_zalloc.
	(elf_slurp_reloca_table): Check bfd_alloc.
	(elf_slurp_reloc_table): Ditto.
	(elf_compute_section_file_positions): Check assign_section_numbers.
	(assign_file_positions_except_relocs): Return a boolean.
	Check map_program_segments.
	(elf_compute_section_file_positions): Check it.

	* elf32-mips.c (mips_elf_final_link): Check bfd_alloc.

	* elf32-hppa.c (hppa_elf_stub_branch_reloc): Check bfd_zmalloc and
	realloc.
	(hppa_elf_stub_reloc): Ditto.
	(hppa_elf_build_arg_reloc_stub): Check bfd_zalloc.
	(hppa_elf_build_long_branch_stub): Ditto.
	(elf32_hppa_backend_symbol_table_processing): Ditto.

	* ecoff.c (ecoff_set_symbol_info): Check bfd_alloc.  Return a boolean.
	(ecoff_slurp_symbol_table): Check it.
	(ecoff_slurp_armap): Check bfd_alloc.
	(ecoff_write_armap): Check bfd_zalloc.
	(ecoff_link_hash_newfunc): Check bfd_hash_allocate and
	_bfd_link_hash_newfunc.
	(ecoff_link_add_externals): Check bfd_alloc.

	* ctor.c (bfd_constructor_entry): Check bfd_alloc.

	* coffgen.c (coff_real_object_p): Check bfd_alloc.
	(coff_renumber_symbols): Check bfd_alloc_by_size_t.  Return a boolean.
	(coff_write_symbol): Check bfd_alloc.  FIXME int
	(coff_write_linenumbers): Check bfd_alloc.  Return a boolean.
	(coff_section_symbol): Check bfd_alloc_by_size_t.
	(coff_get_normalized_symtab): Check bfd_alloc.
	(coff_bfd_make_debug_symbol): Check bfd_zalloc.
	* libcoff-in.h: Change decls of coff_renumber_symbols,
	coff_write_linenumbers.
	* libcoff.h: Rebuilt.
	* coffcode.h (coff_write_object_contents): Check
	coff_renumber_symbols, coff_write_linenumbers.

	* coffcode.h: Indent.
	(coff_add_missing_symbols): Check bfd_alloc_by_size_t.  Return a
	boolean.
	(coff_write_object_contents): Check it.

	* coff-alpha.c (alpha_relocate_section): Check bfd_alloc.
	* coff-mips.c (mips_relocate_section): Ditto.

	* archive.c (bfd_slurp_bsd_armap_f2): Check bfd_alloc value.
	(do_slurp_bsd_armap): Ditto.
	(compute_and_write_armap): Check bfd_realloc value.

	* aoutx.h (translate_from_native_sym_flags): Check bfd_alloc
	return value.  Return boolean value.
	(NAME(aout,make_empty_symbol)): Check bfd_zalloc return value.
	(NAME(aout,slurp_symbol_table)): Check bf_alloc and bfd_zalloc
	return value.
	(add_to_stringtab): Ditto.  FIXME void
	(aout_link_hash_newfunc): Check bfd_hash_allocate return value.
	(aout_link_add_symbols): Check bfd_alloc value.
	(translate_symbol_table): Check translate_from_native_sym_flags.
	* hp300hpux.c (MY(slurp_symbol_table)): Ditto.
	* aoutx.h (aout_link_hash_newfunc): Check _bfd_link_hash_newfunc.

	* opncls.c (bfd_zalloc bfd_realloc): Check result of bfd_alloc.

	* opncls.c (obstack_chunk_alloc): Define as malloc, not
	bfd_xmalloc_by_size_t.
	(_bfd_new_bfd): Check obstack_begin for 0 return.

	* ieee.c (obstack_chunk_alloc): Define as malloc, not
	bfd_xmalloc_by_size_t.
	(ieee_archive_p): Check obstack_begin for 0 return and
	obstack_finish for NULL return.

	* hash.c (obstack_chunk_alloc): Define as malloc, not
	bfd_xmalloc_by_size_t.
	(bfd_hash_table_init_n): Check obstack_begin for 0 return and
	obstack_finish for NULL return.
	(bfd_hash_lookup): Check obstack_alloc for NULL return.

	* ecofflink.c (obstack_chunk_alloc): Define as malloc, not
	bfd_xmalloc_by_size_t.
	bfd_ecoff_debug_accumulate
	bfd_ecoff_debug_accumulate_other): Check obstack_alloc.
	(add_file_shuffle add_memory_shuffle): Check obstack_alloc for
	NULL return.  Return boolean, not void.
	(bfd_ecoff_debug_init): Check obstack_begin for 0 return.
	(bfd_ecoff_debug_accumulate): Check add_file_shuffle
	and add_memory_shuffle return.
	(string_hash_newfunc): Check bfd_hash_allocate and bfd_hash_newfunc.
	(bfd_ecoff_debug_accumulate): Check bfd_alloc.
	(ecoff_add_string): Check add_memory_shuffle return.

	* libbfd-in.h (xmalloc, bfd_xmalloc, bfd_xmalloc_by_size_t):
	Remove decls.
	* libbfd.h: Rebuilt.

Fri Feb 11 15:35:32 1994  Stu Grossman  (grossman at cygnus.com)

	* configure.host:  Add Lynx/rs6000 support.
	* config/i386-nlm.mt:  Enable a.out file support.
	* config/rs6000lynx.mh:  Lynx/rs6000 host support.

Fri Feb 11 17:25:58 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* archive.c (compute_and_write_armap): Rewrite somewhat to improve
	memory usage.

Fri Feb 11 13:10:42 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* archive.c: Change all references to '\n' in archive magic
	to '\012', for greater portability.
	* ecoff.c (ecoff_write_armap): Ditto.

Thu Feb 10 12:58:48 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_write_other_symbol): Check strip settings to
	see whether symbol should be output.
	* genlink.h (struct generic_write_global_symbol_info): Added info
	field.
	* linker.c (_bfd_generic_final_link): Initialize wginfo.info.
	(_bfd_generic_link_write_global_symbol): Check strip settings to
	see whether symbol should be output.
	* elf32-mips.c (mips_elf_final_link): Initialize wginfo.info.

Wed Feb  9 21:34:58 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_reloc_queue_find): Do not examine a NULL queue entry.

	* som.c: Cast return values from BFD memory allocation routines to
	avoid warnings from the HP compiler.

Wed Feb  9 12:55:02 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-alpha.c (alpha_relocate_section): Accept a LITERAL
	reloc on an "ldl" instruction too.

	* archive.c (bfd_ar_hdr_from_filesystem): Cast status elements
	when passing them to sprintf.  Use %ld instead of %d.

	* coff-rs6000.c (rs6000coff_mkarchive): Return false.
	(rs6000_coff_snarf_ar_hdr): Don't declare errno; it's not used.
	Also removed unused variable namelen.
	(rs6000coff_write_armap): Declare orl_count and stridx parameters.

Tue Feb  8 18:00:34 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* libbfd-in.h (xmalloc): Don't declare parameter type, to avoid
	conflicts.
	* libbfd.h: Rebuilt.

Tue Feb  8 15:55:50 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* coff-alpha.c (reloc_nil): New function.
	(alpha_howto_table): Use it as special_function to prevent certain
	relocs from being adjusted by bfd_perform_relocation.  IGNORE
	reloc should be partial_inplace.
	(alpha_ecoff_get_relocated_section_contents): Accept a LITERAL
	reloc on an "ldl" instruction too.

Tue Feb  8 00:32:28 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elf32-hppa.c (CURRENT_STUB_OFFSET, hppa_elf_build_arg_reloc_stub,
	hppa_elf_build_long_branch_stub):  Cast to char * instead of int
	before performing pointer arithmetic.

Mon Feb  7 20:56:27 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config.bfd (hppa*-*-osf*): Use bfd_name hppaosf for this
	configuration.
	(hppa*-*-*elf*): This configuration used hppa-elf now.

	* som.c: This file is also used for HOST_HPPAOSF.

	* targets.c (bfd_target_vector): Enable som_vec for HOST_HPPAOSF.

	* hosts/hppaosf.h: New host configuration file.

	* config/hppabsd.mt (SELECT_VECS): Add bfd_elf32_hppa_vec as
	BSD handles both SOM and ELF object files.

	* config/hppaosf.mh (HDEFINES): Delete.  No longer needed.
	(RANLIB): Doesn't do anything, define it to be "echo".

	* config/hppaosf.mt: New target makefile fragment for a PA running
	OSF1.

Mon Feb  7 15:02:06 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* archures.c (enum bfd_architecture): Added bfd_arch_powerpc.
	(archures_init_table): If SELECT_ARCHITECTURES is not defined,
	added bfd_powerpc_arch.
	* bfd-in2.h: Rebuilt.
	* cpu-powerpc.c: New file.
	* Makefile.in (ALL_MACHINES, CFILES): Added cpu-powerpc.c.
	Rebuilt dependencies.

	* elfcode.h (bfd_section_from_shdr): Get vma and alignment_power
	of an SHT_STRTAB section from sh_addr and sh_addralign, rather
	than just setting them to zero.

Sun Feb  6 20:04:10 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* elfcode.h (prep_headers, swap_out_syms): Check for NULL return
	from bfd_new_strtab.
	(elf_compute_section_file_positions): Check for false return from
	swap_out_syms.

	* linker.c (default_indirect_link_order): Check for NULL return
	from bfd_get_relocated_section_contents.

	* syms.c: Make example application in doc call xmalloc, not
	bfd_xmalloc.

	* aoutx.h (NAME(aout,slurp_symbol_table),
	aout_link_get_symbols, NAME(aout,link_hash_table_create)):
	* bout.c (b_out_slurp_reloc_table, b_out_squirt_out_relocs):
	* ecoff.c (ecoff_bfd_link_hash_table_create):
	* ecofflink.c (bfd_ecoff_debug_init):
	* format.c (bfd_check_format_matches):
	* linker.c (_bfd_generic_link_hash_table_create):
	(_bfd_generic_final_link):
	* reloc16.c (bfd_coff_reloc16_relax_section):
	(bfd_coff_reloc16_get_relocated_section_contents):
	* elf32-hppa.c (hppa_elf_build_arg_reloc_stub):
	* elf32-mips.c (mips_elf_final_link):
	* elfcode.h (bfd_new_strtab):
	(bfd_add_2_to_strtab):
	(elf_slurp_symbol_table):
	(elf_corefile_note):
	* libbfd.c (bfd_zmalloc):
	Use malloc and check the result, instead of bfd_xmalloc.

Sat Feb  5 12:39:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config.bfd: Put m68*-*-sysv* line after m68*-*-sysv4*.

Sat Feb  5 05:32:44 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* srec.c (srec_write_record):  Put CONST keyword for "src" before
	"unsigned", some compilers don't like it after "unsigned".
	* libcoff.h, libcoff-in.h (bfd_perform_slip):  Rename "value" to
	"val" in prototype declaration because some compilers don't like
	arguments whose names are the same as types.

Sat Feb  5 01:14:38 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_check_ar_symbols): Correct test for whether
	object file defines symbol.  Also, if skipping a symbol, skip the
	second symbol of a N_WARNING or N_INDR symbol as well.

Fri Feb  4 23:55:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Add basic support for writing RS/6000 XCOFF files.
	* coff-rs6000.c (dummy_reloc): Removed.
	(rs6000coff_howto_table): Defined XCOFF relocs.
	(RTYPE2HOWTO): Defined to use rs6000coff_rtype2howto.
	(rs6000coff_rtype2howto): New function.
	(coff_bfd_reloc_type_lookup): Defined to use
	rs6000coff_reloc_type_lookup.
	(rs6000coff_reloc_type_lookup): New function.
	(SELECT_RELOC): Defined to set r_type and r_size fields.
	(COFF_LONG_FILENAMES): Defined.
	* coffcode.h (combined_entry_type): Changed fix_tag and fix_end
	fields to bitfields.  Added fields fix_value and fix_scnlen.
	(sec_to_styp_flags): If STYP_DEBUG is defined, use it rather than
	STYP_INFO for the type of a section named .debug.
	(coff_add_missing_symbols): Don't define if RS6000COFF_C.
	(coff_write_object_contents): If RS6000COFF_C, don't call
	coff_add_missing_symbols.
	(coff_slurp_symbol_table): If RS6000COFF_C, then if the last aux
	entry has type STY_LD change the x_scnlen into a pointer to a
	symbol and set fix_scnlen.  Also, for a C_BSTAT symbol, change the
	value into a pointer to a symbol and set fix_value.
	* libcoff.h: Rebuilt.
	* coffgen.c (coff_mangle_symbols): Reindent.  If fix_value is set,
	get the symbol offset. Likewise for fix_scnlen.
	(string_size): Change type to bfd_size_type.
	(debug_string_size, debug_string_section): New static variables.
	(coff_fix_symbol_name): If bfd_coff_symname_in_debug returns true,
	write the symbol name into the .debug section; assume that the
	section has already been created with the right size.
	(coff_write_symbols): Initialize debug_string_size to 0.  If
	bfd_coff_symname_in_debug returns true, don't put symbol name in
	usual string table.  After writing out all symbols, if
	debug_string_size is not 0, check that it matches the size of the
	.debug section.
	(coff_get_normalized_symtab): Clear new fix_value and fix_scnlen
	fields.  If the string offset is 0, always use an empty string as
	the name.
	(coff_make_empty_symbol): Zero out the symbol structure.
	* reloc.c (bfd_perform_relocation): Work around one gross hack
	with another: actually look at the target name to avoid the broken
	COFF check.
	(bfd_reloc_code_real_type): Add BFD_RELOC_PPC_B26,
	BFD_RELOC_PPC_BA26 and BFD_RELOC_PPC_TOC16.
	* bfd-in2.h: Rebuilt.

Fri Feb  4 17:28:32 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* libbfd.c (bfd_zmalloc): Call bfd_xmalloc instead of malloc.
	(bfd_xmalloc, bfd_xmalloc_by_size_t): Functions deleted.
	* libbfd-in.h: Define them as macros calling xmalloc and declare
	xmalloc.
	* libbfd.h: Rebuilt.

Thu Feb  3 16:49:35 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecofflink.c (bfd_ecoff_debug_externals): If a small undefined
	symbol has a value in the ECOFF symbol but not in the BFD symbol,
	keep the value in the ECOFF symbol.  This helps gas.

	* linker.c (_bfd_generic_link_output_symbols,
	_bfd_generic_link_write_global_symbol): Don't require that all
	references to a common symbol be themselves common symbols.

	* aoutx.h (aout_reloc_index_to_section): Handle N_UNDF.

Wed Feb  2 20:37:19 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* libbfd.c, bfd-in.h, hosts/alphaosf.h, hosts/sparc-ll.h, aoutf1.h,
	sparclynx.c, Makefile.in: Change HOST_64_BIT to BFD_HOST_64_BIT.
	* bfd-in2.h: Rebuilt.

Wed Feb  2 12:30:13 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coffswap.h (coff_swap_reloc_out): If RS6000COFF_C, handle type
	and size correctly.
	(coff_swap_aux_in): If RS6000COFF_C, change x_csect.x_scnlen to
	x_csect.x_scnlen.l to match change in coff/internal.h.
	(coff_swap_aux_out): Likewise.

	* coff-mips.c (mips_ecoff_backend_data), coff-alpha.c
	(alpha_ecoff_backend_data): Change casts of aux_in and aux_out
	fields to match yesterday's changes.

	* coffcode.h (coff_write_relocs): If SELECT_RELOC is defined, pass
	in the internal_reloc itself, not the type.
	* coff-apollo.c, coff-h8300.c, coff-h8500.c, coff-i386.c,
	coff-m68k.c, coff-sh.c, coff-we32k.c, coff-z8k.c: Changed
	definition of SELECT_RELOC accordingly.

Tue Feb  1 12:05:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coffcode.h (bfd_coff_backend_data): Added new arguments to
	_bfd_coff_swap_aux_in and _bfd_coff_swap_aux_out: aux index number
	and number of aux entries.
	(bfd_coff_swap_aux_in, bfd_coff_swap_aux_out): Changed
	accordingly.
	* libcoff.h: Rebuilt.
	* coffswap.h (coff_swap_aux_in, coff_swap_aux_out): Accept new
	arguments.  If RS6000COFF_C, only treat C_EXT and C_HIDEXT
	specially if this is the last aux entry.
	* coffgen.c (coff_write_symbol, coff_get_normalized_symtab): Pass
	new arguments to swap_aux functions.

Sun Jan 30 15:14:36 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* gen-aout.c (main): Set DEFAULT_ARCH based on preprocessor macros
	(only testing for m68k and vax at the moment); do verify that the
	preprocessor didn't trash the arch name inside the string version.
	Don't print out "pagesize =" line that prevents output from
	compiling.  Derive BYTES_IN_WORD and ARCH values from sizeof
	results.
	* Makefile.in (aout-params.h): Pass gen-aout a dummy target name.
	(check, installcheck): Identify directory in "no testsuites"
	message.

Sun Jan 30 13:25:28 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_write_symbols): Write out correct value for
	object file symbol.

Fri Jan 28 18:34:05 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* hosts/vaxbsd.h (HOST_STACK_END_ADDR): Vax BSD doesn't define
	KERNBASE, so hard-code 0x80000000 instead.

Thu Jan 27 13:54:08 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* linker.c (generic_link_add_symbol_list): If symbol is common,
	set the BSF_OLD_COMMON flag.

Wed Jan 26 13:47:15 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* format.c (bfd_check_format_matches): Put the new entry in the
	correct element of matching_vector.

Tue Jan 25 11:43:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* som.c, som.h (bfd_som_set_section_attributes,
	bfd_som_set_subsection_attributes): Change parameters from char
	to int.  Following a prototype with an old-style function definition
	in the presence of widened parameters is a GCC-ism not supported
	by the HP compiler in ANSI mode.

Tue Jan 25 11:46:46 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* reloc.c (bfd_get_reloc_size): Size of type -2 is 4 bytes, not 2.

	* hp300hpux.c (MY(write_object_contents)): Write out the symbols
	before writing out the relocs, so that the right symbol indices
	are used.

	* archive.c (do_slurp_bsd_armap, bfd_slurp_bsd_armap_f2): Do not
	try to overlay the internal carsyms on the external symdefs.  That
	can not work if the size of a host pointer is larger than 4 bytes.

	* format.c (bfd_check_format_matches): Cast result of
	bfd_xmalloc_by_size_t.
	* opncls.c (_bfd_new_bfd): Avoid ANSI C prototype.

	* archive.c: Reindented to GNU standards.

Mon Jan 24 14:41:23 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* opncls.c (_bfd_new_bfd, _bfd_new_bfd_contained_in): Add
	"_bfd_" to function names.
	* archive.c (_bfd_create_empty_archive_element_shell),
	libbfd-in.h: Change callers.

	* libbfd.c (bfd_zmalloc): Renamed from zalloc.
	* libbfd.c (bfd_add_to_string_table),
	trad-core.c (trad_unix_core_file_p),
	targets.c (bfd_target_list),
	ptrace-core.c (ptrace_unix_core_file_p),
	opncls.c (new_bfd), libbfd-in.h,
	ieee.c (ieee_make_empty_symbol),
	elf32-hppa.c (hppa_elf_stub_branch_reloc),
	(hppa_elf_stub_reloc): Change callers.
	* libbfd.h: Regenerated.

	* archive.c (_bfd_look_for_bfd_in_cache): Add "_bfd_" to name.
	(_bfd_get_elt_at_filepos),
	coff-rs6000.c (rs6000coff_get_elt_at_filepos), libbfd-in.h:
	Change callers.

	* format.c (bfd_check_format_matches), libbfd-in.h, targets.c,
	elfcode.h (elf_object_p): Rename target_vector to bfd_target_vector
	and default_vector to bfd_default_vector.
	* libbfd.h: Regenerated.

	* format.c (bfd_check_format_matches): New function.
	(bfd_check_format): Call it.
	(bfd_matching_formats): Function removed.
	* targets.c: Replace the vector added on Jan 21 with a count of
	entries in default_vector.
	* bfd-in2.h: Regenerated.

Mon Jan 24 12:38:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* coff-alpha.c (alpha_ecoff_object_p): New function.  Set size of
	.pdata section based on lnnoptr field, not section header.
	(alpha_relocate_section): Don't bother to check if r_symndx >= 0,
	since it is unsigned.
	(ecoffalpha_little_vec): Use alpha_ecoff_object_p rather than
	coff_object_p.
	* ecoff.c (ecoff_new_section_hook): Set alignment_power field of
	.pdata section to 3.
	(ecoff_compute_section_file_positions): Save the size of the
	.pdata section in the line_filepos field, and actually align the
	.pdata section to an alignment power of 4.
	(ecoff_compute_reloc_file_positions): Set output_has_begun after
	calling ecoff_compute_section_file_positions.
	(ecoff_write_object_contents): Set s_lnnoptr for the .pdata
	section from the line_filepos field.  Set vstamp for the optional
	header from the vstamp of the symbolic header.
	(ecoff_bfd_final_link): Set vstamp of the symbolic header to the
	vstamp used by the first object file in the link.

	* ecofflink.c (ecoff_align_debug): Align RFDs to debug_align.

	* linker.c (generic_link_check_achive_element): Set SEC_ALLOC flag
	for a created common section.
	(_bfd_generic_link_add_one_symbol): Likewise.

	* elfcode.h (swap_out_syms): Use elf_section_from_bfd_section to
	get the index of a common section, rather than always using
	SHN_COMMON (MIPS has multiple common sections).

	* elf32-hppa.c (hppa_elf_gen_reloc_type): Typo (== for =).

	* aoutx.h (aout_link_input_section_std,
	aout_link_input_section_ext): Pass additional arguments to
	reloc_overflow callback.
	* coff-alpha.c (alpha_ecoff_get_relocated_section_contents,
	alpha_relocat_section): Likewise.
	* coff-h8300.c (h8300_reloc16_extra_cases): Likewise.
	* coff-h8500.c (extra_case): Likewise.
	* coff-mips.c (mips_relocate_section): Likewise.
	* coff-z8k.c (extra_case): Likewise.
	* elf32-hppa.c (hppa_elf_stub_finish): Likewise.
	* reloc.c (bfd_generic_get_relocated_section_contents): Likewise.

	* bout.c (calljx_callback, callj_callback): Use get_value to get
	the symbol value and check for undefined symbols.
	(get_value): If the symbol is undefined, look it up in the linker
	hash table.
	(b_out_get_relocated_section_contents): For PCREL24 and PCREL13
	use get_value to get the symbol value and check for undefined
	symbols.
	* reloc16.c (bfd_coff_reloc16_get_value): If the symbol is
	undefined, look it up in the linker hash table.

	* aoutx.h (translate_symbol_table): The string index 0 has a
	special meaning for normal symbols, but not for dynamic symbols.

Sat Jan 22 12:26:01 1994  Stu Grossman  (grossman at cygnus.com)

	* sparclynx.c:  Setup appropriate macros to enable core file
	support.

Fri Jan 21 16:25:35 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* targets.c: Add a vector of matching format names.
	* format.c (bfd_matching_formats): New function to return it.
	(bfd_check_format): Set it.
	* bfd-in2.h: Regenerated.

	* bfd-in.h: Remove decls of bfd_ec type and error printing functions.
	Remove decl of type symclass; wasn't used.
	* bfd.c: Document error handling, including code fragments
	containing the error decls that were in bfd-in.h.
	Remove DEFUNs.
	* bfd-in2.h: Regenerated.

Fri Jan 21 14:11:16 1994  Sean Fagan  (sef@cygnus.com)

	* nlmcode.h, liblnm.h, nlm32-alpha.c nlm32-i386.c nlm32-sparc.c:
	The sparc (and possibly other?) NLM format requires a different
	way to write exports, so add a write_export field to the backend
	data (and set it to NULL for everything but the sparc).

Fri Jan 21 14:11:16 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* sunos.c (MY(read_dynamic_relocs)): Compare info->dynrel with NULL,
	not (struct external_nlist *) NULL.  info->dynrel is a PTR, not
	a struct external_nlist *.

Fri Jan 21 09:29:01 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* bfd.c: Remove error strings for errors removed below.
	* aoutx.h (translate_to_native_sym_flags), bfd-in.h (bfd_ec),
	oasys.c (oasys_write_sections): Rename
	bfd_error_nonrepresentable_section to nonrepresentable_section.
	None of the other bfd error names start with "bfd_error".
	Remove errors symbol_not_found and no_relocation_info, which seem
	to be unused.
	* bfd-in2.h: Regenerated.

Fri Jan 21 01:11:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* bfd.c (bfd_get_gp_size): Added support for ELF.

	* syms.c (BSF_DYNAMIC): New symbol flag.
	(bfd_print_symbol_vandf): Print it.
	* bfd-in2.h: Rebuilt.
	* libaout.h (struct aout_backend_data): New read_dynamic_symbols
	and read_dynamic_relocs fields.
	(struct aoutdata): New dynamic_info field.
	(obj_aout_dynamic_info): New accessor macro.
	* sunos.c (struct sunos_dynamic_info): New structure.
	(sunos_read_dynamic_info, MY(read_dynamic_symbols),
	MY(read_dynamic_relocs)): New functions to read dynamic symbols
	and relocs.
	* aoutx.h (NAME(aout,some_aout_object_p)): If the object is
	dynamically linked, set SEC_RELOC for both the .text and .data
	sections.
	(translate_from_native_sym_flags): Don't set BSF_LOCAL for an
	undefined symbol.
	(translate_symbol_table): New function, split out of
	slurp_symbol_table; set the BSF_DYNAMIC flag appropriately.
	(NAME(aout,slurp_symbol_table)): Read dynamic symbols, if any.
	(NAME(aout,slurp_reloc_table)): Read dynamic relocs, if any.
	(NAME(aout,get_reloc_upper_bound)): Include dynamic reloc count in
	return value.
	* aoutf1.h (NAME(aout,sunos4_write_object_contents)): Don't write
	out dynamic symbols or relocs against reloc symbols, since they
	are already in the .text section and we wouldn't know where to
	write them anyhow.
	(sunos4_aout_backend): Initialize read_dynamic_symbols and
	read_dynamic_relocs fields.
	* aout-target.h (MY(backend_data)): Initialize
	read_dynamic_symbols and read_dynamic_relocs fields.

Thu Jan 20 20:57:27 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* hosts/alphaosf.h (uint64e_type, uint64_type, int64_type): Delete
	typedefs, since HOST_64_BIT will take care of defining them in
	bfd.h.

Wed Jan 19 17:28:59 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/alphaosf.mh (HDEFINES): Don't define HOST_64_BIT here;
	that's dealt with elsewhere.
	* hosts/alphaosf.h (sprintf_vma, fprintf_vma): New macros.
	(uint64_typeHIGH, uint64_typeLOW): Comment with HOST_64_BIT so
	they get copied to bfd.h.

	* reloc.c (enum bfd_reloc_code_real): Add some Alpha relocation
	types.  Reorganized some of the existing ones.
	* coff-alpha.c (alpha_howto_table): Construct 64-bit negative one
	values in case of compilation on a 32-bit machine.  Fix pcrel
	fields of some reloc types.
	(alpha_bfd_reloc_type_lookup): Handle more relocation types.

	* bfd-in.h (uint64_typeHIGH, uint64_typeLOW): Supply default
	definitions when not defined, regardless of whether uint64_type is
	a defined macro or not.
	(fprintf_vma, sprintf_vma): Define only if fprintf_vma is not
	already defined.

Wed Jan 19 00:02:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (translate_to_native_sym_flags): Set the type of a
	BSF_WARNING symbol to N_WARNING.

Tue Jan 18 16:43:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (aout_link_add_symbols): Increment sym_hash as well as p
	for an indirect or warning symbol.
	(aout_link_write_symbols): Update sym_hash with the target of an
	indirect or warning symbol.  If an indirect symbol is defined,
	output the calculated value and don't output the target symbol.

Tue Jan 18 03:54:59 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* aoutx.h (translate_from_native_sym_flags): Give warning symbols
	an (unused) nonzero section value, needed for check below.

Mon Jan 17 15:12:07 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* aoutx.h (translate_from_native_sym_flags,
	aout_link_add_symbols): Treat N_SET[ABDT] | N_EXT like
	N_SET[ABDT].

Fri Jan 14 16:45:43 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfcode.h (elf_object_p): If there is a SHT_DYNAMIC section, set
	the DYNAMIC flag for the BFD.
	(NAME(bfd_elf,write_object_contents)): Don't try to write out a
	BFD with the DYNAMIC flag set, since we don't generate the program
	header table correctly.

Fri Jan 14 01:04:36 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elfcode.h (elf_slurp_symbol_table):  Free x_symp at the end
	of the function to avoid storage leak.

Thu Jan 13 23:07:32 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_link_write_external): An ifd can be -1.

Thu Jan 13 12:33:27 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (som_set_reloc_info): Provide a default symbol for
	relocations which don't actually have an associated symbol.

	* som.c (hppa_som_reloc): Add new "error message" argument.

Wed Jan 12 13:36:43 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	Enable gdb to write to core files on more core file readers.
	* libbfd.c (bfd_generic_set_section_contents):  Remove range check
	for section size, it is already done in bfd_set_section_contents
	with bfd_get_section_size_now.
	* aix386-core.c, hppabsd-core.c, hpux-core.c, irix-core.c,
	osf-core.c, ptrace-core.c, trad-core.c (*_set_section_contents):
	Use bfd_generic_set_section_contents instead of bfd_false.

Wed Jan 12 15:31:57 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* linker.c: Added initial documentation.

	* linker.c (default_indirect_link_order): Don't expect space for
	output relocations if there aren't any input relocations.

Tue Jan 11 14:37:12 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* aoutx.h (NAME(aout,final_link)): Set a_entry before computing
	file offsets.

	* elfcode.h (swap_out_syms): A common symbol is STT_OBJECT, not
	STT_NOTYPE.

Tue Jan 11 09:10:56 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config.bfd: Use ELF, not COFF for m88*-*-dgux*.
	Combine m88k-*-* and m88110-*-* cases into m88*-*-*.

Tue Jan 11 00:07:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecofflink.c: Extensive changes to compress and merge debugging
	information, and to write some of out directly rather than saving
	it in memory.  Several new functions and structures, and new
	arguments to existing functions.
	* ecoff.c (ecoff_compute_reloc_file_positions): Compute
	sym_filepos as well.
	(ecoff_get_extr): Use ifdmap instead of ifdbase.
	(ecoff_write_object_contents): Don't compute sym_filepos here.
	Only output symbols if outsymbols is not NULL.
	(ecoff_bfd_final_link): Adjust for changes in ecoff_debug_info and
	bfd_ecoff_debug functions.  Write out debugging information here.
	(ecoff_final_link_debug_accumulate): Adjust for changes in
	bfd_ecoff_debug functions.
	(ecoff_link_write_external): Use ifdmap rather than ifdbase.
	* elf32-mips.c (mips_elf_read_ecoff_info): Read external symbols
	first, to put them in the first memory buffer.  Clear fdr field.
	(mips_elf_get_extr): Use pointer to unswapped external symbol.
	(mips_elf_final_link): Adjust for changes in bfd_ecoff functions.
	Preserve .text, .data and .bss even if they are empty.  Save
	pointer to unswapped external symbol rather than copying it.
	Don't free up the external symbols.
	* libelf.h (elf_symbol_type): Change mips_extr to PTR.
	* bfd-in.h (bfd_ecoff_debug_init, bfd_ecoff_debug_free): Declare.
	(bfd_ecoff_debug_accumulate): Update declaration.
	(bfd_ecoff_debug_accumulate_other): Rename declaration from
	bfd_ecoff_debug_link_other and update.
	(bfd_ecoff_write_accumulated_debug): Declare.
	* bfd-in2.h: Rebuilt.
	* Makefile.in: Rebuilt dependencies.

Mon Jan 10 20:46:53 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (install): Remove "@" which follows a backslash.  In
	this position it just causes errors, not suppresses echoes.

Mon Jan 10 09:06:21 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* som.c (hppa_som_gen_reloc_type): Fix handling of LT and RT
	field selectors.

Sun Jan  9 04:32:25 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* config/i386-netbsd.mt (SELECT_VECS): Include i386bsd_vec.

Fri Jan  7 10:27:27 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* aoutx.h (adjust_z_magic): Don't merge the start of bss with the
	end of data if they are not contiguous.

	* aoutf1.h (sunos4_aout_backend): Comment the fields' meanings.

Fri Jan  7 15:40:16 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_mkobject_hook): Don't set SEC_SHARED_LIBRARY flag
	for .reginfo section here.
	(ecoff_new_section_hook): Set it here instead.

Fri Jan  7 10:29:27 1994  Stan Shebs  (shebs@andros.cygnus.com)

    	* bfd-in.h: (bfd_boolean): Add workaround for systems that also
	define true and false as enums.
	(ALMOST_STDC): Add as alternative to __STDC__.
	* bfd-in2.h: Rebuilt.
	* syms.c (bfd_print_symbol_vandf): Convert a PTR to FILE*.

Thu Jan  6 14:24:44 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* aoutx.h (translate_to_native_sym_flags): Catch the case where
	there is no output section.

Thu Jan  6 14:37:42 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmcode.h (nlm_object_p): If we can't read the fixed header,
	count it as a wrong format error, not a system call error, since
	the object file might simply be too small.

	* targets.c (target_vector): Added nlm32_alpha_vec inside #ifdef
	BFD64.
	* Makefile.in (BFD32_BACKENDS): Remove nlm32-alpha.o.
	(BFD64_BACKENDS): Add nlm32-alpha.o.  It depends on 64 bit
	support, even though it is for an Alpha in 32 bit mode.
	* configure.in (nlm32_alpha_vec): Set target64 to true.

	* nlm32-gen.c, nlm64-gen.c: Removed.  All nlm targets are
	different, so there is no point to providing a generic one.
	* libnlm.h: Don't bother to check for nlm_backend(bfd) being NULL
	in the backend accessor macros; that should no longer be possible.
	* targets.c (target_vector): Removed nlm32_big_generic_vec,
	nlm64_big_generic_vec, nlm64_little_generic_vec.
	* configure.in (nlm32_big_generic_vec, nlm32_little_generic_vec,
	nlm64_big_generic_vec, nlm64_little_generic_vec): Removed.
	* Makefile.in: Rebuilt dependencies, and
	(BFD32_BACKENDS): Removed nlm32-gen.o.
	(BFD64_BACKENDS): Removed nlm64-gen.o.
	(CFILES): Removed nlm32-gen.c and nlm64-gen.c.

	* hp300hpux.c (ARCH_SIZE): Define before including aoutx.h.

	* linker.c (_bfd_generic_link_add_one_symbol): Add constructor and
	bitsize arguments.  Changed all callers (aoutx.h).
	* libbfd-in.h (_bfd_generic_link_add_one_symbol): Add constructor
	and bitsize arguments to declaration.
	* libbfd.h: Rebuilt.

	* ecoff.c: First cut at new style of linker backend for
	ECOFF--added a bunch of functions.  Also:
	(ecoff_sec_to_styp_flags): Set flags for .pdata and .xdata.
	(ecoff_slurp_symbolic_header): New function.
	(ecoff_slurp_symbolic_info): Call ecoff_slurp_symbolic_header.
	(ecoff_compute_reloc_file_positions): New function.
	(ecoff_set_section_contents): Get out quickly if count is zero.
	Check errors better.
	(ecoff_write_object_contents): Put .xdata section in data segment.
	Call ecoff_compute_reloc_file_positions.  Don't output relocs or
	external symbols if outsymbols is NULL.
	(ecoff_bfd_final_link): Completely rewritten.
	* libecoff.h: Include bfdlink.h.
	(struct ecoff_backend_data): Add relocate_section field.
	(ecoff_data_type): Add sym_hashes and symndx_to_section fields.
	(struct ecoff_link_hash_entry): Define.
	(struct ecoff_link_hash_table): Define.
	(ecoff_bfd_link_add_symbols): Declare as function, not macro.
	(ecoff_bfd_link_hash_table_create): Likewise.
	* ecofflink.c (bfd_ecoff_debug_one_external): New function.
	(bfd_ecoff_debug_externals): Call bfd_ecoff_debug_one_external.
	* bfd-in.h (bfd_ecoff_debug_one_external): Declare.
	* bfd-in2.h: Rebuilt.
	* coff-alpha.c (alpha_howto_table): Mark BRADDR as
	partial_inplace, and set the src_mask to 0x1fffff.
	(alpha_ecoff_get_relocated_section_contents): Remove unused
	variable gp_warned.
	(alpha_convert_external_reloc): New static function.
	(alpha_relocate_section): New static function.
	(alpha_ecoff_backend_data): Initialize relocate_section field.
	* coff-mips.c (mips_relocate_refhi): New static function.
	(mips_relocate_section): New static function.
	(mips_ecoff_backend_data): Initialize relocate_section field.

	* reloc.c (_bfd_relocate_contents): Corrected signed overflow
	checking when there is an addend.

	* aoutx.h (NAME(aout,final_link)): Don't abort when trying to link
	a non a.out file, just pass it to _bfd_default_link_order.
	(aout_link_input_section_std): When doing a final PC relative link
	against a section symbol, subtract the VMA of the input section.
	(aout_link_input_section_ext): Likewise.

	* linker.c (default_indirect_link_order): Renamed from
	_bfd_generic_indirect_link_order and made static.
	(_bfd_generic_final_link): Don't switch on link_order type, just
	call _bfd_default_link_order.
	(_bfd_default_link_order): Handle bfd_indirect_link_order type.
	* genlink.h: Removed declaration of
	_bfd_generic_indirect_link_order.
	* elf32-mips.c (mips_elf_final_link): Don't switch on link_order
	type, just call _bfd_default_link_order.

Tue Jan  4 21:23:37 1994  Ian Lance Taylor  (ian@cygnus.com)

	* linker.c (generic_link_check_archive_element): Base the name of
	the created common section on the name of the section the symbol
	came from.
	(_bfd_generic_link_add_one_symbol): (case BIG): A common symbol
	must have a section, so don't bother to create one.

Mon Jan  3 15:32:16 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* aout-target.h (MY(vec)): Add DYNAMIC to mask of object flags.
	* aoutf1.h (NAME(aout,sunos4_write_object_contents)):
	If the DYNAMIC flag is set, set it in the exec header.
	* aoutx.h (NAME(aout,some_aout_object_p)): If the object is
	dynamically linked, set the DYNAMIC flag in the BFD.
	* libaout.h (N_SET_DYNAMIC): New macro.
	(N_DYNAMIC): Add missing 0 in mask.

Mon Jan  3 11:41:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ecoff.c (ecoff_get_extr): Don't output section symbols as
	external symbols.

	* bfd-in.h, hash.c: Change bfd_hash_allocate argument from size_t
	to unsigned int, because size_t may not be defined in bfd.h.
	* bfd-in2.h: Rebuilt.

	* bfd-in.h (bfd_get{b,l}[_signed_]{16,32,64}): Declare argument to
	be a const pointer.
	* bfd-in2.h: Rebuilt.
	* libbfd.c (bfd_get{b,l}[_signed_]{16,32,64}): Declare argument to
	be a const pointer.
	* targets.c (bfd_target): Change swap function pointers
	accordingly.
	* archive.c (do_slurp_coff_armap): Change swap accordingly.
	* aix386-core.c: Change NO_GET and NO_GETS accordingly.
	* hppabsd-core.c, hpux-core.c, irix-core.c, osf-core.c,
	ptrace-core.c, trad-core.c: Change NO_GET and NO_SIGNED_GET
	accordingly.

	* libbfd-in.h (struct artdata): Added tdata field.
	(_bfd_add_bfd_to_archive_cache): Declare.
	(_bfd_get_elt_at_filepos): Declare.
	(_bfd_snarf_ar_hdr): Renamed from snarf_ar_hdr.
	* libbfd.h: Rebuilt.
	* archive.c: Cleaned up some more.
	(_bfd_generic_mkarchive, bfd_generic_archive_p): Initialize
	pointer elements of artdata.
	(_bfd_add_bfd_to_archive_cache): Renamed from add_bfd_to_cache.
	(_bfd_snarf_ar_hdr): Renamed from snarf_ar_hdr.
	(_bfd_get_elt_at_filepos): Renamed from get_elt_at_filepos.
	(get_extended_arelt_filename, bfd_construct_extended_name_table,
	bfd_ar_hdr_from_filesystem, compute_and_write_armap): Made static.
	* ecoff.c: Some comment changes.
	(ecoff_slurp_armap): Handle rename of snarf_ar_hdr.  Set
	ardata->tdata to raw_armap.
	(ecoff_archive_p): Initialize pointer elements of artdata.
	* coff-rs6000.c (rs6000coff_get_elt_at_filepos): Handle rename of
	add_bfd_to_cache.

	* hash.c: Added some documentation.

Mon Jan  3 11:09:28 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* aout-target.h, netbsd386.c: Replace NO_SWAP_MAGIC with SWAP_MAGIC,
	and do the swapping here rather than calling ntohl from the N_*
	macros.  This cleans up assumptions about the size of a host long,
	the existence to ntohl, etc.

Sat Jan  1 13:50:05 1994  Rob Savoye  (rob@darkstar.cygnus.com)

	* config.bfd: Add support for VSTa micro-kernel. It currently uses
	i386-aout.

Sat Jan  1 10:18:54 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* hosts/i386mach3.h (HOST_SEGMENT_SIZE): Fix value.
	* i386mach3.c (SEGMENT_SIZE): Fix value.

For older changes see ChangeLog-9193

Copyright (C) 1994-1995 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.

Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
