Tue Dec 30 12:45:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-sparc.c (elf32_sparc_check_relocs): If -Bsymbolic, don't
	allocate space for a PC relative reloc against a symbol which is
	defined in a regular file.
	(elf32_sparc_relocate_section): If -Bsymbolic, don't copy a PC
	relative reloc against a symbol which is defined in a regular
	file.

Mon Dec 29 18:02:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Jonathan Stone <jonathan@DSG.Stanford.EDU>:
	* config.bfd (mips-dec-netbsd*): Add ECOFF vectors to
	targ_selvecs.
	(mips*el-*-netbsd*): Like mips-dec-netbsd*.
	(mips*-*-netbsd*): New target.

Mon Dec 29 17:13:28 1997  H.J. Lu  (hjl@gnu.org)

	* elflink.h (elf_link_assign_sym_version): Change error message
	from "undefined version name" to "undefined versioned symbol
	name".

Mon Dec 29 11:41:16 1997  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (coff_arm_relocate_section): Fix typo from previous
	delta.

Tue Dec 23 17:01:10 1997  Ian Lance Taylor  <ian@cygnus.com>

	* libbfd-in.h (_bfd_dwarf2_find_nearest_line): Declare.
	* libbfd.h: Rebuild.

	* peicode.h (coff_swap_scnhdr_out): Set .reloc section to be
	shared.  Set stab* sections to be shared and read.  Set .rsrc
	section to be read and shared.

Mon Dec 22 13:20:57 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am: Rebuild dependencies.
 	(ALL_MACHINES_CFILES): Add dwarf2.lo.
	(ALL_MACHINES_CFILES): Add dwarf2.c.
	* Makefile.in: Rebuild.

	* coff-arm.c: Don't include obstack.h.

Mon Dec 22 13:04:33 1997  Joel Sherrill  <joel@oarcorp.com>

        * config.bfd (i[3456]86*-go32-rtems*): Fix to be the same as
	i[3456]86-go32.

Thu Dec 18 16:01:25 1997  Doug Evans  <devans@canuck.cygnus.com>

	* configure: Regenerate to get @SHELL@ substituted.

Wed Dec 17 09:45:09 1997  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (coff_arm_relocate_section): Only look at section
	owner if there is one.

	* elf.c (assign_file_positions_for_segments): Fail if there is not
	enough room for the program headers.

Tue Dec 16 08:09:56 1997  Gavin Koch  <gavin@cygnus.com>

	* elf.c (_bfd_elf_find_nearest_line): Call
	_bfd_dwarf2_find_nearest_line first.
	* elf32-mips.c (_bfd_mips_elf_find_nearest_line): Same.
	* dwarf2.c: New file; implement _bfd_dwarf2_find_nearest_line.

Mon Dec 15 16:08:52 1997  Nick Clifton  <nickc@cygnus.com>

	* archures.c: Add bfd_mach_m32r.

Mon Dec 15 16:11:22 1997  Fred Fish  <fnf@cygnus.com>

	* coffcode.h (ALIGN_SECTIONS_IN_FILE): Define if I960 not defined.
	(coff_compute_section_file_positions): Use ALIGN_SECTIONS_IN_FILE
	to decide when to align the file sections for paging.
	* coffcode.h (ALIGN_SECTIONS_IN_FILE): Undefine for TIC80COFF.

Mon Dec 15 15:01:15 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-m32r.c (m32r_elf_object_p): New Function.
	(m32r_elf_final_write_processing):  New Function.
	(m32r_elf_set_private_flags):  New Function.
	(m32r_elf_copy_private_bfd_data):  New Function.
	(m32r_elf_merge_private_bfd_data):  New Function.
	(m32r_elf_print_private_bfd_data):  New Function.
	(elf_backend_object_p): Point to m32r_object_p.
	(elf_backend_final_write_processing): Point to
	m32r_elf_final_write_processing.
	(bfd_elf32_bfd_copy_private_bfd_data): Point to
	m32r_elf_copy_private_bfd_data.
	(bfd_elf32_bfd_merge_private_bfd_data): Point to
	m32r_elf_merge_private_bfd_data.
	(bfd_elf32_bfd_set_private_flags): Point to
	m32r_elf_set_private_bfd_data.
	(bfd_elf32_bfd_print_private_bfd_data): Point to
	m32r_elf_print_private_bfd_data.


	* bfd-in2.h (bfd_mach_m32r): Add identifier for M32R architecture
	machines.

Fri Dec 12 11:30:28 1997  Brendan Kehoe  <brendan@canuck.cygnus.com>

	* configure: Only build libbfd shared if --enable-shared's value
	was `yes', or was set to `*bfd*'.
	* aclocal.m4: Likewise.
	* NOTE: this really needs to be fixed in libtool/libtool.m4, the
	original source of this bit of code.  It's not clear what the best fix
	would be, though.

Thu Dec 11 17:48:11 1997  Richard Henderson  <rth@cygnus.com>

	* linker.c (generic_link_add_symbol_list): Always init udata.p so
	that the generic relaxation code can function when input and output
	file formats are mismatched.

Thu Dec 11 01:02:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c (bfd_coff_small_swap_table): Initialize new fields.

	* elf.c (assign_file_positions_for_segments): For a loadable
	section, make sure that the load address is correct relative to
	the load address of the segment plus the size of the segment so
	far.

	* coffcode.h (_coff_link_output_has_begun): Make static.
	(_coff_final_link_postscript): Likewise.

Wed Dec 10 23:37:11 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_input_bfd): Handle a relocateable link in
	which a relocation refers to an indirect or warning symbol.

Wed Dec 10 11:15:55 1997  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (bfd_arm_coff_final_link): Function deleted.
	(coff_arm_final_link_postscript): New function.
	(coff_arm_link_output_has_begun): New function.

	* libcoff.h (struct bfd_coff_backend_data): Add new fields:
	_bfd_coff_link_output_has_begun and
	_bfd_coff_final_link_postscript.  Add new macros:
	bfd_coff_link_output_has_begun() and
	bfd_coff_final_link_postscript().

	* cofflink.c (_bfd_coff_final_link): Insert calls to
	bfd_coff_link_output_has_begun() and
	bfd_coff_final_link_postscript().

	* coffcode.h: Add two new fields to bfd_coff_backend_data
	structure: _bfd_coff_link_output_has_begun and
	_bfd_coff_final_link_postscript.  Add default initialisers for
	these fields.  Add overridable aliases for the coff swap functions
	in the backend data structure.

	* elf32-v850.c: Update with patches from the branch to fix
	HI16_S/LO16 reloc pairs.

Wed Dec 10 14:06:48 1997  Michael Meissner  <meissner@cygnus.com>

	* elf32-d30v.c (d30v_info_to_howto_rela): New function to support
	RELA relocations.
	(USE_REL): Don't define any more, switch to using RELA
	relocations.
	(elf_info_to_howto): Define as d30v_info_to_howto_rela.

Tue Dec  9 11:37:53 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* archures.c (bfd_mach_mips*): Define.
	(bfd_default_scan): For 3000 and 4000 replace magic constant with
 	macro.

	* cpu-mips.c (N): Define.
	(bfd_mips_arch, arch_info_struct): Re-write using macro N, replace
 	numbers with bfd_mach_mips* macros.

Fri Dec  5 11:13:46 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_reloc, v850_elf_store_addend_in_insn,
	v850_elf_relocate_section): Fix reloc addend handling.
	(v850_elf_section_from_bfd_section, v850_elf_symbol_processing,
	v850_elf_add_symbol_hook, v850_elf_link_output_symbol_hook,
	v850_elf_section_from_shdr, v850_elf_fake_sections): New functions
	to create and handle special common sections.
	(v850_elf_final_link_relocate): Fix HI16 and HI16_S relocations
	which have data stored in the instructions.

Tue Dec  2 10:26:16 1997  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (TARGET_UNDERSCORE): Revert back to '_'
	(USER_LABEL_PREFIX): Revert back to '_'

	* config.bfd (targ_cpu): Add support for Thumb target.

Mon Dec  1 20:24:18 1997  J"orn Rennecke <amylaar@cygnus.co.uk>

	* coff-sh.c (sh_coff_howtos): Add R_SH_SWITCH8 entry.
	(get_symbol_value): Handle R_SH_SWITCH8.
	(sh_relax_delete_bytes): Likewise.

Wed Nov 26 14:13:34 1997  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (TARGET_UNDERSCORE): Changed to match definition in
	gcc/config/arm/semi.h

	* coffcode.h (coff_slurp_symbol_table): Add ARM and Thumb symbol
	classes.

Sun Nov 23 16:02:58 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* freebsd.h (SWAP_MAGIC): Read magic number little and not big
 	endian.

Wed Nov 26 09:30:37 1997  Nick Clifton  <nickc@cygnus.com>

	* coffcode.h (coff_mkobject_hook): Only set private flags for non
	PE ARM ports.

Tue Nov 25 15:33:23 1997  Richard Henderson  <rth@cygnus.com>

	* binary.c (binary_set_section_contents): Also ignore NEVER_LOAD
	sections.

Tue Nov 25 10:55:36 1997  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (coff_arm_bfd_merge_private_bfd_data): Do not
	complain if inout and output formats differ.

Tue Nov 25 11:26:27 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (BFD32_BACKENDS): Remove tekhex.lo.
	(BFD32_BACKENDS_CFILES): Remove tekhex.c.
	* Makefile.in: Rebuild.
	* aclocal.m4, configure, Makefile.in: Rebuild with current
	automake and autoconf.

	* coff-arm.c (arm_allocate_interworking_sections): Fix typo
	(COFF_WITH_PR to COFF_WITH_PE).

Mon Nov 24 15:47:49 1997  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c: Make variables and some functions static, so that
	this file can be included in multiple object files.
	(coff_arm_bfd_final_link): Fix minor bug.

Sat Nov 22 15:16:00 1997  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c: Add support for PIC and APCS-FLOAT type binaries.

	* coffcode.h: Add support for PIC and APCS-FLOAT type binaries.

Sat Nov 22 16:06:56 1997  Klaus Kaempf  <kkaempf@progis.de>

	* evax-emh.c (_bfd_evax_write_emh): Use alloca instead of strdup.

Sat Nov 22 12:29:30 1997  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (sunos_add_one_symbol): When overriding a defined
	symbol, set it to undefined, not new.

	* elf32-sh.c (sh_elf_relax_delete_bytes): Don't kill LABEL
	relocs.

Fri Nov 21 14:14:22 1997  Richard Henderson  <rth@cygnus.com>

	* coff-sh.c (sh_relax_section): Force sign extention of USES r_offset.
	(sh_relax_delete_bytes): Don't kill LABEL relocs.

Mon Nov 17 15:08:38 1997  Jeffrey A Law  (law@cygnus.com)

	* elf-m10300.c (elf32_mn10300_finish_hash_table_entry): Fix typo.
	(mn10300_elf_relax_section): Likewise.

Sat Nov 15 15:36:07 1997  Fred Fish  <fnf@cygnus.com>

	* peicode.h (coff_swap_aouthdr_in): Cast second arg of
	bfd_h_get_* calls to "bfd_byte *".

Tue Nov 11 10:37:23 1997  Jeffrey A Law  (law@cygnus.com)

	* elf-m10300.c (elf32_mn10300_link_hash_entry): Add new field
	"movm_stack_size".
	(mn10300_elf_relax_section): Include stack space for register saves
	in the imm8 field of a "call" instruction.
	(compute_function_info): Determine how much stack is allocated by
	the movm instruction.  Fix typo.
	(elf32_mn10300_link_hash_newfunc): Initialize movm_stack_size.

Mon Nov 10 14:32:40 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elflink.h (NAME(bfd_elf,size_dynamic_sections)): Don't crash if
	a version dependency could not be found.

Tue Nov  4 12:05:56 1997  Klaus K"ampf  <kkaempf@progis.de>

	* configure.com: Get version info from configure.in

Fri Oct 24 11:15:58 1997  Jakub Jelinek  <jj@sunsite.mff.cuni.cz>

	* elf64-sparc.c (sparc64_elf_merge_private_bfd_data):
	New function. Avoid mixing US1 and HAL R1 code.
	Set resulting memory ordering to the strongest one used.
	(sparc64_elf_object_p): Set bfd_mach correctly.

Thu Oct 23 14:09:33 1997  Richard Henderson  <rth@cygnus.com>

	* elf64-sparc.c (sparc64_elf_howto_table): Add UA64 & UA16.
	(sparc64_elf_check_relocs): Handle them.
	(sparc64_elf_relocate_section): Likewise.  Before emitting a dyn reloc,
	check alignment and transmute R_SPARC_x<->R_SPARC_UAx.

Thu Oct 23 00:53:14 1997  Richard Henderson  <rth@dot.cygnus.com>

	* configure.in (sparc*-*-linux*): Use trad-core and ...
	* hosts/sparclinux.h: New file.

Thu Oct 23 00:25:29 1997  Richard Henderson  <rth@dot.cygnus.com>

	* config.bfd (sparc64-*-linux*): New target.

	* elf-bfd.h (struct elf_backend_data): Add plt_alignment member.
	* elflink.c (_bfd_elf_create_got_section): Set .got alignment based
	on arch_size.
	(_bfd_elf_create_dynamic_sections): Likewise for .rel* sections.
	Set .plt alignment from new plt_alignment.
	* elflink.h (elf_link_create_dynamic_sections): Set version section
	alignment to LOG_FILE_ALIGN.
	* elfxx-target.h (elf_backend_plt_alignment): Provide default.
	(elfXX_bed): Init plt_alignment.

	* elf64-sparc.c (sparc64_elf_check_relocs,
	sparc64_elf_adjust_dynamic_symbol, sparc64_elf_size_dynamic_sections,
	sparc64_elf_adjust_dynindx, sparc64_elf_finish_dynamic_symbol,
	sparc64_elf_finish_dynamic_sections): New functions.
	(sparc64_elf_howto_table): Fix a few name strings.
	(ELF_DYNAMIC_INTERPRETER): New definition.
	(sparc64_elf_relocate_section): Handle shared libraries.

	* elf64-sparc.c (struct plt_template, plt_*_header, plt_*_entry,
	sparc64_elf_build_plt_entry, sparc64_elf_finish_dynamic_symbol):
	PLT definitions sparc64-linux originally choose.  These will go
	away soon in favour of the official abi definitions.

Wed Oct 22 16:08:45 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c (coff_small_object_p): New static function.
	(coff_small_new_section_hook): New static function.
	(bfd_coff_small_swap_table): New static const structure.
	(coff_small_close_and_cleanup): Define.
	(coff_small_bfd_free_cached_info): Define.
	(coff_small_get_section_contents): Define.
	(coff_small_get_section_contents_in_window): Define.
	(shcoff_small_vec): New static structure.
	(shlcoff_small_vec): New static structure.
	* targets.c (bfd_target_vector): Add shcoff_small_vec and
	shlcoff_small_vec.
	* config.bfd (sh-*-elf*): Add shcoff_small_vec and
	shlcoff_small_vec to targ_selvecs.
	(sh-*-*): Likewise.
	* configure.in: Add shcoff_small_vec and shlcoff_small_vec cases.
	* configure: Rebuild.

Mon Oct 20 15:01:27 1997  Klaus K"ampf  <kkaempf@progis.de>

	* evax-egsd.c: Weak symbols are global.

	* evax-emh.c: Use proper casts.

	* evax-egsd.c (_bfd_evax_write_egsd): Remove unneeded uname.

	* evax-egsd.c: Section names and symbols have different
	length restrictions. Add length parameter to
	_bfd_evax_length_hash_symbol.
	* evax-etir.c: Likewise.
	* evax-misc.c (_bfd_evax_length_hash_symbol): Add length
	parameter.
	* evax.h (EOBJ_S_C_SECSIZ): Define.

	* evax-alpha.c: Remove duplicate test.

	* evax-emh.c: SYS$ functions are upper-case.

	* evax-egsd.c: Create separate sections for common symbols.
	* evax-etir.c: Don't output common section.
	* evax.h: Bump up section count.

	* configure.com: Use 64bit integers with DEC C.

	* evax-egsd.c: Make section flags dec c compatible.

Mon Oct 20 09:38:31 1997  Jeffrey A Law  (law@cygnus.com)

	* som.c (normalize): Delete function.
	(som_bfd_ar_write_symbol_stuff): New parameter elength.  All callers
	changed.  Use passed in elength to determine size of the extended
	name table instead of computing it again.

Sun Oct 19 23:36:21 1997  Jim Wilson  <wilson@cygnus.com>

	* peicode.h (coff_swap_scnhdr_out): Use |= not = to set
	IMAGE_SCN_MEM_READ for an unrecognized section.

Sun Oct 19 21:04:56 1997  Jeffrey A Law  (law@cygnus.com)

	* som.c (som_bfd_ar_write_symbol_stuff): Account for trailing
	'/' in the extended name table.

Fri Oct 17 00:04:13 1997  Richard Henderson  <rth@cygnus.com>

	* elflink.h (elf_link_assign_sym_version): For explicitly versioned
	symbols, check globals list before matching on locals.

Thu Oct 16 08:17:06 1997  Michael Meissner  <meissner@cygnus.com>

	* peicode.h (coff_swap_scnhdr_out,pe_print_idata): Fix mangled
	patch.

Wed Oct 15 13:45:10 1997  Ian Lance Taylor  <ian@cygnus.com>

	* peicode.h (pe_mkobject_hook): Set DLL flag.
	(pe_bfd_copy_private_bfd_data): Copy DLL flag.

	* peicode.h (coff_swap_scnhdr_out): Set IMAGE_SCN_MEM_DISCARDABLE
	for .stab* sections.  Replace strlen of constant strings with
	number.

Tue Oct 14 15:42:45 1997  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (elf64_alpha_merge_ind_symbols): New function to
	merge got and reloc entries from ind syms to their target.
	(elf64_alpha_always_size_sections): Call it.
	(elf64_alpha_check_relocs): Operate on the target of indirect symbols.
	(elf64_alpha_can_merge_gots): Likewise.
	(elf64_alpha_merge_gots): Likewise.

	* elf64-alpha.c (elf64_alpha_relocate_section): Back out HJ's change,
	as it is insufficient to handle the relocation changes as well.

Mon Oct 13 23:10:08 1997  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (elf64_alpha_calc_dynrel_sizes): Allow for RELATIVE
	relocs for symbols in shlibs that have been forced local.
	(elf64_alpha_relocate_section): Output RELATIVEs in .got for same.

Mon Oct 13 21:24:04 1997  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (elf64_alpha_relocate_section): Use the
	got_enties of the default symbol for the default versioned
	symbol.  Patch from hjl@gnu.ai.mit.edu, modified not to use
	alloca in the loop.

Mon Oct 13 17:37:37 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_final_link_relocate): Only use the bottom
	24 bits of the PC when computing a PC relative relocation.

Fri Oct 10 16:01:30 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_reloc, v850_elf_final_link_relocate):
	Correct value for maximum positive 22 bit PC relative relocation.
	(v850_elf_final_link_relocate):  Prevent overflow from HI16_S and
	HI_16 relocations.  Correct bit adjustment in TDA offsets.

Thu Oct  9 16:43:39 1997  Doug Evans  <dje@canuck.cygnus.com>

	* elf64-sparc.c (sparc_elf_{hix22,lox10}_reloc): New functions.
	(sparc64_elf_howto_table): Use them for HIX22,LOX10 relocs.

Wed Oct  8 11:38:45 1997  Richard Henderson  <rth@cygnus.com>

	* elfcore.h (bfd_prstatus): Pedanticly, alignment_power should
	be LOG_FILE_ALIGN.

Wed Oct  8 11:36:00 1997  Richard Henderson  <rth@cygnus.com>

	* config.bfd: Missed one alpha* change.

Tue Oct  7 13:00:17 1997  Doug Evans  <dje@canuck.cygnus.com>

	* elf32-sparc.c (_bfd_sparc_elf_howto_table): Remove BFD64 support.
	* elf64-sparc.c (SPARC64_OLD_RELOCS): Undef.
	(MINUS_ONE): New macro.
	(sparc_elf_notsup_reloc): New function.
	(sparc64_elf_howto_table): Add entries for DISP64,PLT64,HIX22,LOX10,
	H44,M44,L44,REGISTER.
	(sparc_reloc_map): Likewise.  Map BFD_RELOC_CTOR to R_SPARC_64.
	(init_insn_reloc): New function.
	(sparc_elf_wdisp16_reloc): Use it.
	(sparc64_elf_relocate_section): Add entries for OLO10,HIX22,LOX10.

Tue Oct  7 11:40:37 1997  Ian Lance Taylor  <ian@cygnus.com>

	* som.c (som_construct_extended_name_table): Remove static
	function, and define as macro instead.

Fri Oct  3 14:02:17 1997  Richard Henderson  <rth@cygnus.com>

	* config.bfd: Change alpha-*-* to alpha*-*-*; config.guess now
	recognizes alphaev5 etc.
	* configure.host: Likewise.

Fri Oct  3 11:23:47 1997  Ian Lance Taylor  <ian@cygnus.com>

	Make ld -s work on AIX:
	* xcofflink.c (xcoff_link_add_symbols): Don't create the .debug
	section if we are stripping.
	(bfd_xcoff_size_dynamic_sections): Don't set the .debug section
	size if we are stripping.
	(_bfd_xcoff_bfd_final_link): Don't set SEC_RELOC or rel_filepos,
	and don't write out relocs, if we are stripping.
	(xcoff_link_input_bfd): Don't set up reloc if we are stripping.
	(xcoff_write_global_symbol): Don't write out symbol or reloc if we
	are stripping.

	* configure.in: Don't include elf.lo again for ELF targets; it's
	always in the library anyhow.
	* configure: Rebuild.

	* bfd-in2.h: Rebuild.

	* elf32-sparc.c (sparc_elf_wdisp16_reloc): Cast to bfd_byte *, not
	char *, when calling bfd_get_32 and bfd_put_32.
	* sunos.c (sunos_scan_dynamic_symbol): Cast contents to char *
	when calling strcpy.

Thu Oct  2 16:15:50 1997  Doug Evans  <dje@canuck.cygnus.com>

	* reloc.c (bfd_check_overflow): New function.
	(bfd_perform_relocation, bfd_install_relocation): Use it.
	(BFD_RELOC_SPARC_{DISP64,PLT64}): New relocs.
	(BFD_RELOC_SPARC_{HIX22,LOX10,H44,M44,L44,REGISTER}): New relocs.
	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate.

Thu Oct  2 13:17:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* peicode.h (coff_swap_scnhdr_out): Set IMAGE_SCN_MEM_READ for an
	unrecognized section.  From Jon Thackray <jont@harlequin.co.uk>.

Wed Oct  1 14:03:44 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am ($(BFD_H)): Change stmp-bfd.h to stmp-bfd-h.
 	(stmp-bfd-h): Rename from stmp-bfd.h.
 	(BFD_H_FILES, LIBBFD_H_FILES, LIBCOFF_H_FILES): New variables.
	($(srcdir)/bfd-in2.h): Just depend upon stmp-bin2-h.
	(stmp-bin2-h): New target.
	($(srcdir)/libbfd.h): Just depend upon stmp-lbfd-h.
	(stmp-lbfd-h): New target.
	($(srcdir)/libcoff.h): Just depend upon stmp-lcoff-h.
	(stmp-lcoff-h): New target.
	(CLEANFILES): Change stmp-bfd.h to stmp-bfd-h.  Add stmp-bin2.h,
	stmp-lbfd-h, and stmp-lcoff-h.
	* Makefile.in: Rebuild.

	* configure.in: Use a diversion to set enable_shared before the
	arguments are parsed.
	* configure: Rebuild.

Tue Sep 30 14:18:32 1997  Doug Evans  <dje@canuck.cygnus.com>

	* elf32-sparc.c (_bfd_sparc_elf_howto_table): R_SPARC_GLOB_JMP
	renamed to R_SPARC_UNUSED_42.
	(sparc_reloc_map): Delete R_SPARC_GLOB_JMP entry.
	* elf64-sparc.c (_bfd_sparc_elf_howto_table): R_SPARC_GLOB_JMP
	renamed to R_SPARC_UNUSED_42.
	(sparc_reloc_map): Delete R_SPARC_GLOB_JMP entry.
	* reloc.c (BFD_RELOC_SPARC_GLOB_JMP): Delete.
	* bfd-in2.h: Regenerated.
	* libbfd.h: Regenerated.

Thu Sep 25 12:15:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_merge_symbol): Don't check the hash creator until
	after we have set *sym_hash.

Wed Sep 24 16:52:28 1997  Joel Sherrill  <joel@oarcorp.com>

        * config.bfd (sh*-*-rtems*): New target, like sh-*-*elf*.

Wed Sep 24 11:27:23 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (libbfd_a_SOURCES): Define.
	* Makefile.in: Rebuild.

	* configure.in: Call AC_CHECK_TOOL before AM_PROG_LIBTOOL.
	* aclocal.m4: Rebuild with new libtool.
	* configure: Rebuild.

Tue Sep 23 19:03:13 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (map_sections_to_segments): Even if we are not demand
	paged, don't put a loadable section after a nonloadable section.
	(assign_file_positions_for_segments): Increment the file offset
	for a section with contents, even if it is not loadable.

Sun Sep 21 11:03:24 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_final_link_relocate): Add return code
	indicating that __ctbp could not be found.

Thu Sep 18 15:04:57 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_check_relocs): Improve error message.

Wed Sep 17 09:54:51 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_final_link_relocate, v850_elf_reloc,
	v850_elf_check_relocs, v850_elf_reloc_map, v850_elf_howto_table):
	Add support for the CALLT relocs.

	* reloc.c (COMMENT): Add BFD_RELOC_V850_CALLT_6_7_OFFSET and
	BFD_RELOC_V850_CALLT_16_16_OFFSET.

	* elf32-v850.c (v850_elf_final_link_relocate): Add checks to catch
	relocations against non-existant symbols.

Tue Sep 16 14:20:27 1997  Nick Clifton  <nickc@cygnus.com>

	* reloc.c: Add BFR_RELOC_V850_TDA_16_16_OFFSET.

	* elf32-v850.c (v850_elf_reloc, v850_elf_final_link_relocate,
	v850_elf_howto_table, v850_elf_reloc_map): Add support for a 16
	bit reloc in the tiny data area.

Mon Sep 15 11:27:36 1997  Ken Raeburn  <raeburn@cygnus.com>

	Merged changes from Martin Hunt:

	* elf32-d30v.c (bfd_elf_d30v_reloc): Change pc-relative relocs
	over 2^32 bytes to be absolute.  Needed because D30V PC doesn't
	necessarily wrap.

	* reloc.c, elf32-d30v.c (BFD_RELOC_D30V_9_PCREL,
	BFD_RELOC_D30V_9_PCREL_R): New relocs.

	* elf32-d30v.c (bfd_elf_d30v_reloc_21): New function.
	Do 15 and 21 bit pc-relative relocations.
	* reloc.c (BFD_RELOC_D30V_15_PCREL_R, BFD_RELOC_D30V_21_PCREL_R):
	New relocations.

	* elf32-d30v.c (bfd_elf_d30v_reloc): Addend needs to be
	added to the relocation, not or'd.

Wed Sep 10 15:17:25 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_reloc): Remove spurious error message.

Wed Sep 10 11:17:50 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* archures.c (bfd_default_scan): Use strcasecmp.
	(bfd_default_scan): Test for match with arch_name + ":" +
 	printable_name.
	(bfd_default_scan): Test for match with printable_name - ":".
	(bfd_default_scan): Delete w65, h8300, h8500, z8k, i960 special
 	cases.  Each implements their own scan function.
	(bfd_default_scan): Delete 386, 2900, 860, mips 2000, mips 4400
 	special cases.  Since info->mach == 0.  The test mach == number
 	fails.
	(bfd_arch_list): New function, return name of all the supported
 	architectures.

Tue Sep  9 10:21:56 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_print_private_bfd_data): Break after
	decoding architecture.
	(v850_elf_reloc): Do not complain if a R_V850_LO16 reloc has bit
	15 set.

Sun Sep  7 12:25:22 1997  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* elf64-alpha.c (reloc_howto_type): Fix the howto table.

Thu Sep  4 09:44:10 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am: Rebuild dependencies.
 	(ALL_MACHINES_CFILES): Add cpu-v850.c.
	(ALL_MACHINES_CFILES): Add elf32-v850.c.
	* Makefile.in: Rebuild.

	* reloc.c: Remove extraneous commas from relocation entries.
	Remove BFD_RELOC_V850_16_PCREL.
	* bfd-in2.h: Rebuild.

	* xcofflink.c (xcoff_link_add_symbols): Put XTY_CM/XMC_TD symbols
	in sections named .tocbss rather than .bss.

Wed Sep  3 11:23:23 1997  Nick Clifton  <nickc@cygnus.com>

	* libbfd.h, bfd-in2.h, elf32-v850.c: Removed
	BFD_RELOC_V850_16_PCREL.

Tue Sep  2 20:44:10 1997  Fred Fish  <fnf@cygnus.com>

	* cofflink.c (coff_link_check_ar_symbols): Handle C_SYSTEM syms
	the same as C_EXT syms.
	(coff_link_add_symbols): Ditto.
	(_bfd_coff_link_input_bfd): Ditto.
	(_bfd_coff_write_task_globals): Add save_global_to_static.  Use
	it to preserve and restore state of global_to_static flag.

Tue Sep  2 17:45:22 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_object_p): Set machine number based on
	bits in e_flags field rather than magic numbers.
	(v850_elf_final_write_processing, v850_elf_set_private_flags,
	v850_elf_copy_private_bfd_data, v850_elf_merge_private_bfd_data,
	v850_elf_print_private_bfd_data): New functions.

Tue Sep  2 17:43:49 1997  Nick Clifton  <nickc@cygnus.com>

	* elf.c (prep_headers): Remove V850E magic number.
	* elf.c (prep_headers): Remove V850EA magic number.

Tue Sep  2 17:35:05 1997  Doug Evans  <dje@canuck.cygnus.com>

	* cpu-arc.c (arc_get_mach): Properly scan defined mach entries.

Tue Sep  2 18:29:37 1997  Jeffrey A Law  (law@cygnus.com)

	* elf-m10200.c (mn10200_elf_final_link_relocate): PC relative
	instructions are relative to the next instruction, not the
	current instruction.
	(mn10200_elf_relax_section): Similarly.

Tue Sep  2 15:45:45 1997  Nick Clifton  <nickc@cygnus.com>

	* cpu-v850.c: Use a macro to construct bfd_arch_info_type
	entries.

	* reloc.c, libbfd.h, bfd-in2.h, elf32-v850.c: Replace
	BFD_RELOC_V850_{SDA/TDA/ZDA}_OFFSET relocs with new bit pattern
	specific versions: BFD_RELOC_V850_{area}_{bits}_OFFSET.

Thu Aug 28 17:01:09 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* cpu-v850.c: Remove "plain" from v850 printable name.
	(scan): Use strcasecmp.

	* archures.c (bfd_mach_v850): Define.

	* cpu-sh.c (scan_mach): Compare with table instead of hardwired to
 	just sh/SH, use strcasecmp.
	(arch_info_struct): Add entries for sh3 et.al.

	* archures.c (bfd_mach_sh, ...): Define.

Wed Aug 27 17:33:07 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* archures.c (bfd_archures_list): Always NULL terminate the list.

Tue Aug 26 17:26:51 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am: Rebuild dependencies.
	(ALL_MACHINES_CFILES): Add cpu-arc.c.
	(ALL_MACHINES_CFILES): Add elf32-arc.c.
	(elf32-arc.lo): Remove explicit dependency.
	* Makefile.in: Rebuild.

	* acinclude.m4 (BFD_CC_FOR_BUILD): Set EXEEXT_FOR_BUILD.
	* doc/Makefile.am (MKDOC): Use EXEEXT_FOR_BUILD, not EXEEXT.
	* aclocal.m4: Rebuild.
	* configure: Rebuild.
	* Makefile.in: Rebuild.
	* doc/Makefile.in: Rebuild.

Mon Aug 25 16:14:34 1997  Christopher Provenzano  <proven@cygnus.com>

	* configure: Rebuild with latest devo autoconf for NT support

Mon Aug 25 16:11:04 1997  Nick Clifton  <nickc@cygnus.com>

	* cpu-arm.c (compatible): If B is a default type, return A.

Mon Aug 25 15:35:46 1997  Nick Clifton  <nickc@cygnus.com>

	* cpu-v850.c (scan): New function.
	(arch_info_struct): New structure.
	(bfd_v850_arch): Add link into arch_info_structure.

	* config.bfd (targ_cpu): All v850 variants use the bfd_arch_v850
	architecture.

	* elf32-v850.c (v850_elf_object_p): New function.

	* archures.c (bfd_mach_v850e): Machine value for v850e.

	* bfd-in2.h (bfd_mach_v850e): Machine value for v850e.

	* elf32-v850.c (ELF_MACHINE_CODE): Default to v850e machine
	number.

	* elf.c (prep_headers): Add support for v850e machine number.

	* archures.c (bfd_mach_v850ea): Machine value for v850ea.

	* bfd-in2.h (bfd_mach_v850ea): Machine value for v850ea.

	* elf32-v850.c (ELF_MACHINE_CODE): Default to v850ea machine
	number.

	* elf.c (prep_headers): Add support for v850ea machine number.

Mon Aug 25 14:07:33 1997  Ian Lance Taylor  <ian@cygnus.com>

	* syms.c (_bfd_stab_section_find_nearest_line): Clear the
 	cached_stab field if the offset prevents us from using the cache.

Mon Aug 25 12:08:13 1997  Ian Lance Taylor  <ian@cygnus.com>

	* aout-target.h (MY(vec)): Add SEC_CODE and SEC_DATA to section
	flags.
	* aout-arm.c (aout_arm_little_vec): Likewise.
	(aout_arm_big_vec): Likewise.
	* bout.c (b_out_vec_big_host): Likewise.
	(b_out_vec_little_host): Likewise.
	* mipsbsd.c (aout_mips_little_vec): Likewise.
	(aout_mips_big_vec): Likewise.

Tue Aug 19 10:09:10 1997  Fred Fish  <fnf@cygnus.com>

	* coff-tic80.c (COFF_ALIGN_IN_SFLAGS): Define to 1.
	* coffcode.h (styp_to_sec_flags): Ignore incoming STYP_INFO
	bit in s_flags if COFF_ALIGN_IN_S_FLAGS is defined.

Tue Aug 19 08:47:17 1997  Fred Fish  <fnf@cygnus.com>

	* coff-i960.c (COFF_ALIGN_IN_SECTION_HEADER): Define to 1.
	(GET_SCNHDR_ALIGN, PUT_SCNHDR_ALIGN): Define.
	* coff-m88k.c (GET_SCNHDR_NRELOC, GET_SCNHDR_NLNNO): Define.
	* coffcode.h (coff_set_alignment_hook): Conditionally compile in if
	COFF_ALIGN_IN_SECTION_HEADER is defined.  Convert alignment to power
	of two for I960 only.
	* coffswap.h (GET_SCNHDR_NRELOC, PUT_SCNHDR_NRELOC, GET_SCNDHR_NLNNO,
	PUT_SCNHDR_NLNNO, GET_SCNHDR_FLAGS, PUT_SCNHDR_FLAGS): Provide
	default definitions.
	(coff_swap_scnhdr_in): Use GET_SCNHDR_FLAGS, GET_SCNHDR_NRELOC,
	GET_SCNHDR_NLNNO, and GET_SCNHDR_ALIGN.
	(coff_swap_scnhdr_out): Use PUT_SCNHDR_FLAGS, PUT_SCNHDR_ALIGN.
	* Makefile.in (coff-tic80.o): Depends upon coffswap.h.
	* coff-tic80.c (COFF_ALIGN_IN_SECTION_HEADER): Define to 1.
	(GET_SCNHDR_FLAGS, PUT_SCNHDR_FLAGS): Define
	* coffcode.h (coff_write_object_contents): Set alignment field in
 	section header for TIC80COFF files.

Mon Aug 18 11:36:19 1997  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_howto_table, v850_elf_reloc_map,
	v850_elf_check_relocs, v850_elf_reloc,
	v850_elf_final_link_relocate):  Add support for
	BFD_RELOC_V850_16_PCREL relocation.

	* reloc.c (COMMENT): Add suuport for BFD_RELOC_V850_16_PCREL
	relocation.

	* libbfd.h: Add support for BFD_RELOC_V850_16_PCREL relocation.

	* bfd-in2.h: Add support for BFD_RELOC_V850_16_PCREL relocation.

Mon Aug 18 11:33:56 1997  Nick Clifton  <nickc@cygnus.com>

	* cpu-v850e: New file.

	* elf.c (prep_headers): Add support for v850e target.

	* bfd-in2.h (bfd_architecture): Add support for v850e target.

	* config.bfd: Add support for v850e target.

	* archures.c: Add support for v850e target.

Mon Aug 18 11:33:56 1997  Nick Clifton  <nickc@cygnus.com>

	* cpu-v850ea: New file.

	* elf.c (prep_headers): Add support for v850ea target.

	* bfd-in2.h (bfd_architecture): Add support for v850ea target.

	* config.bfd: Add support for v850ea target.

	* archures.c: Add support for v850ea target.

Fri Aug 15 12:01:28 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coffgen.c (coff_find_nearest_line): Correctly handle the offset
	argument as section relative, rather than an absolute address.
	From Jan Hoogenraad <hoogenrd@natlab.research.philips.com>.

Fri Aug 15 04:58:02 1997  Doug Evans  <dje@canuck.cygnus.com>

	* config.bfd (arc-*-elf*): Add.
	* configure.in (bfd_elf32_{little,big}arc_vec): Add.
	* configure: Rebuild.
	* Makefile.am (ALL_MACHINES): Add cpu-arc.lo.
	(BFD32_BACKENDS): Add elf32-arc.lo.
	(cpu-arc.lo,elf32-arc.lo): Add rules for.
	* Makefile.in: Rebuild.
	* archures.c (architecture list): Add bfd_arch_arc.
	(bfd_archures_list): Add bfd_arc_arch.
	(bfd_mach_arc_base): Define.
	* reloc.c (BFD_RELOC_ARC_B22_PCREL,BFD_RELOC_ARC_B26): Add.
	* targets.c (bfd_elf32_{little,big}arc_vec): Declare.
	(bfd_target_vect): Add them.
	* bfd-in2.h, libbfd.h: Rebuild.
	* cpu-arc.c, elf32-arc.c: New files.
	* elf.c (pre_headers): Recognize bfd_arch_arc.

Tue Aug 12 11:45:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (NAME(aout,final_link)): If no symbols, make sure the
	data section is correctly rounded to a page in the file.

Mon Aug 11 12:45:43 1997  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (NAME(aout,final_link)): Don't emit the string table if
	there are no symbols.

Sun Aug 10 14:45:56 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-stgo32.c: Rename from coff-stubgo32.c to avoid old System V
	file system 14 character limit.
	* Makefile.am: Corresponding changes.
	* configure.in: Corresponding changes.
	* Makefile.in: Rebuild.
	* configure: Rebuild.

Fri Aug  8 18:34:36 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am: (ALL_MACHINES_CFILES): Add elf32-d10v.c.
	Rebuild dependencies.
	* Makefile.in: Rebuild.

Wed Aug  6 18:56:51 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (docdir): Define.
	* Makefile.in: Rebuild.

Tue Aug  5 23:05:03 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Rebuild with autoconf 2.12.1.

Mon Aug  4 12:00:35 1997  Ian Lance Taylor  <ian@cygnus.com>

	* aclocal.m4, configure: Rebuild with new automake patches.

Sun Aug  3 08:15:12 1997  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* rs6000-core.c (make_bfd_asection):  New function to add a section
	to the core file bfd.
	(rs6000coff_core_p):  Use make_bfd_asection to add the core file
	sections.
	Use BFD routines to seek, read and stat the core file.
	Handle .data sections from loaded objects and anonymously mmapped
	regions, these are available in AIX 4 core files.

Fri Aug  1 12:58:32 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Set enable_shared before AM_PROG_LIBTOOL.
	* acinclude.m4: Move acmacros.m4 in here.  Remove AM_PROG_LIBTOOL
	copy; use a patches libtool instead.
	* acmacros.m4: Remove.
	* Makefile.in: Rebuild.
	* aclocal.m4: Rebuild.
	* configure: Rebuild.

Thu Jul 31 19:55:36 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am: New file, based on old Makefile.in.
	* acmacros.m4: New file, copied from old aclocal.m4.
	* acinclude.m4: New file.
	* configure.in: Call AM_PROG_LIBTOOL.  Remove shared library
	handling; now handled by libtool.  Replace AC_CONFIG_HEADER with
	AM_CONFIG_HEADER.  Replace AC_PROG_INSTALL with AM_PROG_INSTALL.
	Call AM_MAINTAINER_MODE, AM_CYGWIN32, and AM_EXEEXT.  Change all
	.o files to .lo.  Remove stamp-h handling in AC_OUTPUT.
	* acconfig.h: Mention PACKAGE and VERSION.
	* stamp-h.in: New file.
	* dep-in.sed: Change .o to .lo.
	* Makefile.in: Now built with automake.
	* aclocal.m4: Now built with aclocal.
	* config.in, configure: Rebuild.
	* VERSION: Remove.

Thu Jul 31 12:09:20 1997  Geoff Keating  <geoffk@ozemail.com.au>

	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Don't set TEXTREL
 	if there is only a relocation to a read-only but not allocatable
 	section (like .stab).
	* elf32-sparc.c (elf32_sparc_size_dynamic_sections): Likewise.
	* elf32-i386.c (elf_i386_size_dynamic_sections): Likewise.
	* elf32-m68k.c (elf_m68k_size_dynamic_sections): Likewise.
	* elf32-mips.c (mips_elf_size_dynamic_sections): Likewise.
	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Likewise.

	* elf32-ppc.c (ppc_elf_howto_raw): Correct various comments.
	(ppc_elf_create_linker_section): These sections are not
	created by the linker (that is, they are created by the user
	putting data in them). In particular, they can be the source
	and target of relocations.
	(ppc_elf_adjust_dynamic_symbol): Check postcondition of
 	bfd_elf32_link_record_dynamic_symbol.  Align 16-byte common
 	objects (for instance, 'long double') to 16-byte boundaries.
	(ppc_elf_size_dynamic_sections): Make the code that generates
	section symbols exactly the same as for sparc, reducing the
	number of section symbols output.
	(ppc_elf_check_relocs): Check postcondition of
	bfd_elf32_link_record_dynamic_symbol.  Make default case the
	same as corresponding code for sparc, fixing bug involving
	.rela.stabs.
	(ppc_elf_finish_dynamic_symbol): Fix case involving GOT symbols
 	forced to be local because of versioning (by replicating
 	corresponding change in sparc).  Treat R_PPC_RELATIVE RELA relocs
 	as usual in ELF, not as pseudo-REL relocs (as the sparc linker
 	does).
	(ppc_elf_relocate_section): Add handy debugging code for when
 	assertion fails.  Add some more 'symbol made local because of
 	versioning' cases.

	* elf32-ppc.c (ppc_elf_relocate_section): Cope with addend when
	processing a GOT relocation as required by ABI.

Wed Jul 30 21:30:35 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elflink.h (NAME(bfd_elf,record_link_assignment)): Remove any
	version info if this symbol came from a dynamic object.
	(elf_link_add_object_symbols): Set the version info of a symbol
	only if the object actually contains version definitions and
	defines this symbol.

Mon Jul 28 18:07:43 1997  Rob Savoye  <rob@chinadoll.cygnus.com>

	* aclocal.m4: Add CYGWIN and EXEEXT autoconf macros.
        * configure.in: Use CYGWIN and EXEEXT autoconf macro to look for
        win32 dependencies.
        * configure: Regenerated with autoconf 2.12.
        * doc/Makefile.in: Add $(EXEEXT) to chew executable.

Mon Jul 28 02:50:29 1997  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* rs6000-core.c (rs6000coff_core_p):  If CORE_TRUNC is set, print
	a warning rather than returning an error.

Sun Jul 27 19:54:14 1997  Felix Lee  <flee@cygnus.com>

	* coffswap.h (coff_swap_aux_in): add semicolon to make MSVC happy.

Fri Jul 25 14:50:08 1997  Felix Lee  <flee@cygnus.com>

	* cisco-core.c: define signals for wingdb.

Fri Jul 25 16:27:07 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ecofflink.c (bfd_ecoff_debug_accumulate): Only merge files with
	the same number of aux entries.

Fri Jul 25 08:22:15 1997  Jeffrey A Law  (law@cygnus.com)

	* som.c (hppa_som_gen_reloc_type): Use R_DATA_EXPR for the
	difference of two symbols if the relocation size is 32 bits.
	(som_write_fixups): Handle R_DATA_EXPR.

Wed Jul 23 16:08:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-i386.c (coff_i386_reloc): Don't offset a common symbol by
	its value if COFF_WITH_PE is defined.

Tue Jul 22 17:19:45 1997  Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>

	* coff-stubgo32.c: New file.
	* go32stub.h: New file.
	* coff-i386.c: If COFF_GO32_EXE, include coff/go32exe.h.
	* coffswap.h (coff_swap_filehdr_in): Invoke
	COFF_ADJUST_FILEHDR_IN_PRE and COFF_ADJUST_FILEHDR_IN_POST if they
	are defined.
	(coff_swap_filehdr_out): Invoke COFF_ADJUST_FILEHDR_OUT_PRE and
	COFF_ADJUST_FILEHDR_OUT_POST if they are defined.
	(coff_swap_aux_in): Invoke COFF_ADJUST_AUX_IN_PRE and
	COFF_ADJUST_AUX_IN_POST if they are defined.
	(coff_swap_aux_out): Invoke COFF_ADJUST_AUX_OUT_PRE and
	COFF_ADJUST_AUX_OUT_POST if they are defined.
	(coff_swap_scnhdr_in): Invoke COFF_ADJUST_SCNHDR_IN_PRE and
	COFF_ADJUST_SCNHDR_IN_POST if they are defined.
	(coff_swap_scnhdr_out): Invoke COFF_ADJUST_SCNHDR_OUT_PRE and
	COFF_ADJUST_SCNHDR_OUT_POST if they are defined.
	* targets.c (go32stubbedcoff_vec): Declare.
	(bfd_target_vector): Add go32stubbedcoff_vec.
	* configure.in (go32coff_vec): New target vector.
	(go32stubbedcoff_vec): Likewise.
	* config.bfd (i[3456]86-*-msdosdjgpp*): New target.
	(i[3456]86-*-go32*): Change to be like new msdosdjgpp*.
	* Makefile.in: Rebuild dependencies.
 	(BFD32_BACKENDS): Add coff-stubgo32.o.
	(BFD32_BACKENDS_CFILES): Add coff-stubgo32.c.
	(HFILES): Add go32stub.h.

Tue Jul 22 15:09:12 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Check for fdopen.
	* configure, config.in: Rebuild.
	* opncls.c (bfd_fdopenr): Check HAVE_FDOPEN rather than VMS or
	__GO32__.  Reindent a bit.

Sun Jul 20 20:05:20 1997  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (sunos_create_dynamic_sections): Set SEC_LINKER_CREATED
	flag for newly created sections.
	(sunos_add_dynamic_symbols): Don't discard newly created sections
	if shared library is dynobj.

Mon Jul 14 15:33:55 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (map_sections_to_segments): When checking whether
	including a section in a segment would force us to skip a page,
	align the address of the next segment to avoid wraparound
	problems.

Tue Jul  8 12:11:29 1997  Fred Fish  <fnf@cygnus.com>

	* coffcode.h (coff_write_object_contents): Initialize
 	target id field to TIC80_TARGET_ID.
	* coffswap.h (coff_swap_filehdr_out): Swap out target id field
 	if used.
	(coff_swap_filehdr_in): Swap in target id field if used.

Mon Jul  7 16:41:20 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-i386.c (coff_i386_is_local_label_name): New static function
	if TARGET_UNDERSCORE.
	(coff_bfd_is_local_label_name): Define if TARGET_UNDERSCORE.
	(i386coff_vec): Add SEC_CODE and SEC_DATA to section_flags.

Mon Jun 30 14:29:26 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-m68k.c (howto_table): Use complain_overflow_bitfield, not
	complain_overflow_signed, for 32 bit PC relative relocations.

Thu Jun 26 01:26:31 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): When a version
	indirection symbol is overridden, make the original symbol point
	at the real overriding symbol.

	* elf.c (bfd_elf_string_from_elf_section): Check for an invalid
	string index.

	* elflink.h (elf_link_output_extsym): Use the right section for a
	common symbol.
	* elf32-mips.c (mips_elf_link_output_symbol_hook): If a common
	symbol was in .scommon, mark it as SHN_MIPS_SCOMMON.

Wed Jun 25 12:43:10 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* elflink.h (elf_merge_symbols): Resolve indirect and warning
	symbols before checking for new symbols.

	* elfcore.h (elf_corefile_note): Move out of HAVE_SYS_PROCFS_H.

Tue Jun 24 11:20:43 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coffgen.c (coff_object_p): Read the f_opthdr bytes from the
	file, not aoutsz bytes (they are different in XCOFF .o files).

	* xcofflink.c (xcoff_link_add_symbols): Permit symbols to be
	redefined by objects included from archives.

Mon Jun 23 18:03:27 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_merge_symbol): In the case of a new defined
	symbol overriding an old defined symbol, return the hash table
	entry which we modify, even if it is the target of an
	indirection.
	(elf_link_add_object_symbols): If the real name of the symbol gets
	overridden, convert the versioned symbol into an indirect symbol
	to the real symbol.

	* elflink.h (elf_merge_symbol): New static function, broken out of
	elf_link_add_object_symbols.
	(elf_link_add_object_symbols): Call it.

Sun Jun 22 19:40:57 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-i386.c (i3coff_object_p): If COFF_IMAGE_WITH_PE, hack to
	handle case where COFF filehdr does not immediately follow PE
	header.
	* coffgen.c (coff_object_p): Remove useless seek to current
	location.

Wed Jun 18 19:03:38 1997  Ian Lance Taylor  <ian@cygnus.com>

	* linker.c (link_action): Change COMMON_ROW/indr to from CREF to
	REFC.

Tue Jun 17 11:55:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (_bfd_coff_link_input_bfd): If stripping debugging
	symbols, skip N_ABS symbols with debugging storage classes.

Mon Jun 16 18:56:27 1997  Geoff Keating  <geoffk@ozemail.com.au>

	* elf32-ppc.c (ppc_elf_relocate_section): Don't emit R_PPC_REL*
	relocs in shared libraries which refer to local symbols.  Cope
	with addend when processing a GOT relocation.

	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Only create symbols
	for sections that the linker didn't create.
	(ppc_elf_finish_dynamic_sections): Only try to write out a section
	symbol if it was created in ppc_elf_size_dynamic_sections.
	(ppc_elf_relocate_section): Complain if we have to generate a reloc
	relative to a section for which we didn't output a symbol.

	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Clean up.  PLT
	relocs are 'rela' relocs, like everything else.  .rela.plt is not
	a read-only section, so we don't have to special-case it.

	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Entries in the
	.rela.bss section are (of course) 'rela' relocs not 'rel' relocs.

	* elf32-ppc.c (ppc_elf_check_relocs): Initialise srelgot.
	(ppc_elf_relocate_section): @got offsets are 4 from start of the
	actual .got section.
	* elflink.c (_bfd_elf_create_got_section): The three reserved
	words start from the symbol '_GLOBAL_OFFSET_TABLE_'.

	* elf32-ppc.c (ppc_elf_size_dynamic_sections): '.rela' is 5
	characters, not 4.

	* elf32-ppc.c (ppc_elf_check_relocs): Use
	_bfd_elf_create_got_section to create the GOT rather than
	ppc_elf_create_linker_section. Create the '.rela.got' section
	ourselves.
	(ppc_elf_finish_dynamic_symbol): Set up GOT relocations when a
	symbol has a GOT entry.
	(ppc_elf_relocate_section): Record when a symbol is used through
	the GOT, and allocate space in the GOT for each such symbol.
	(ppc_elf_adjust_dynamic_symbol): Delete unused .got.plt stuff.
	(ppc_elf_create_linker_section): Delete unused LINKER_SECTION_GOT
	stuff.

	* elf32-ppc.c (ppc_elf_howto_raw): GOT16_HA relocs should be
	treated in a similar way to ADDR16_HA relocs.
	(ppc_elf_relocate_section): PLTREL24 relocs do not get copied into
	shared objects; the linker must deal with them.
	(ppc_elf_create_linker_section): Stop setting
	_GLOBAL_OFFSET_TABLE_ to the wrong value; delete unused
	LINKER_SECTION_PLT stuff.
	(ppc_elf_check_relocs): Delete unused LINKER_SECTION_PLT stuff.
	(ppc_elf_finish_dynamic_sections): Use BFD calls to get GOT
	section, not ELF-specific calls.
	(elf_backend_plt_not_loaded): Set to 1.
	(elf_backend_got_symbol_offset): Set to 4.
	* elf-bfd.h (elf_backend_data): Add 'plt_not_loaded' member
	for when ld.so fills in the PLT; and 'got_symbol_offset' member.
	* elflink.c (_bfd_elf_create_dynamic_sections): Apply
	plt_not_loaded member.
	(_bfd_elf_create_got_section): Apply got_symbol_offset.
	* elfxx-target.h (elf_backend_plt_not_loaded): Set default to
	'loaded'.
	(elf_backend_G_O_T_offset): Set default to 0.
	(elfNN_bed): Set added fields.

	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Was setting
	DT_RELENT in shared objects; should be DT_RELAENT.

	* elf32-ppc.c (ppc_elf_relocate_section): Propagate
	R_PPC_ADDR16_HA relocs to shared objects. Cope with case where
	such a reloc (in a non-shared object) refers to a symbol that's
	not defined.

Mon Jun 16 14:42:14 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* elfcode.h (put_signed_word): Define.
	(get_signed_word): Define.
	(elf_swap_reloca_in): Use get_signed_word for the r_addend field.
	(elf_swap_reloca_out): Use put_signed_word for the r_addend
	field.
	* elf32-m68k.c (elf_m68k_finish_dynamic_symbol): Use
	bfd_get_signed_32 to set the r_addend field.
	* elf64-mips.c (mips_elf64_swap_reloca_in): Use
	bfd_h_get_signed_64 to set the r_addend field.

Mon Jun 16 12:31:29 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-i386.c (elf_i386_relocate_section): When generating a
	shared library, do the relocation if the input section is not
	allocated in memory.

	* elflink.h (NAME(bfd_elf,size_dynamic_sections)): Call
	elf_link_assign_sym_version before elf_adjust_dynamic_symbol.
	(elf_fix_symbol_flags): New static function, broken out of
	elf_adjust_dynamic_symbol.
	(elf_adjust_dynamic_symbol): Call elf_fix_symbol_flags.
	(elf_link_assign_sym_version): Likewise.  Permit a symbol to be
	forced local even if NEEDS_PLT is set.  When forcing a symbol to
	be local, clear NEEDS_PLT.
	(elf_link_output_extsym): Remove unused local bed.

Wed Jun 11 22:44:20 1997  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10300.c (elf32_mn10300_link_hash_entry): New structure
	for derived elf linker hash table entries.  References to
	elf_link_hash_entry changed appropriately.
	(elf32_mn10300_link_hash_table): New structure for derived elf
	linker hash table.
	(elf32_mn10300_hash_table): Define.
	(elf32_mn10300_link_hash_traverse): Likewise.
	(elf32_mn10300_link_hash_newfunc): New function.
	(elf32_mn10300_link_hash_table_create): Likewise.
	(elf32_mn10300_finish_hash_table_entry): Likewise.
	(mn10300_elf_relax_section): Handle "call" -> "calls", removal
	of prologue code, and call:32->call:16 relaxing.
	(compute_function_info: New function.
	(bfd_elf32_bfd_ilink_hash_table_create): Define.

Wed Jun 11 00:00:07 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_output_extsym): Call finish_dynamic_symbol
	for a symbol which is being forced to be local.
	* elf32-i386.c (elf_i386_relocate_section): Write out the
	relocation value for a GOT reloc for a symbol which is turning
	into a local symbol.
	(elf_i386_finish_dynamic_symbol): If a symbol is turning into a
	local symbol, write out a RELATIVE reloc rather than a GLOB_DAT
	reloc.
	* elf32-m68k.c, elf32-sparc.c: Corresponding changes.

	* elf32-i386.c (elf_i386_relocate_section): Get the relocation
	value if the symbol is turning into a local symbol.
	* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

1997-06-10 22:58  Ulrich Drepper  <drepper@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Also read verneed
	information by calling `_bfd_elf_slurp_version_tables'.
	(elf_link_add_object_symbols): For undefined symbols look for
	version information in the verneed records.
	(elf_link_add_object_symbols): Use soname of shared object
	for verneed record if it is available.

Tue Jun 10 11:13:03 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* cpu-arm.c: Add prototypes for compatible and scan.
	* cofflink.c: Add prototype for mark_relocs.

	* archive.c (bfd_special_undocumented_glue): Change filename to
	const pointer.  Add prototype.

Mon Jun  9 12:34:21 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elflink.h (elf_link_add_object_symbols): Ignore relocations of
	sections that will be discarded.

1997-06-06 22:58  Ulrich Drepper  <drepper@cygnus.com>

	* elflink.h (elf_link_find_version_dependencies): When searching
	for known version symbol skip non-matching verdef records, not
	matching records.

Thu Jun  5 15:52:45 1997  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (_bfd_coff_generic_relocate_section): Write a long,
	not a bfd_vma, to the base file, to match how dlltool reads it.

Tue Jun  3 16:57:45 1997  Nick Clifton  <nickc@cygnus.com>

	* reloc.c: Add thumb relocations.

	* bfd-in2.h: Add Thumb relocations.

	* libbfd.h: Add Thumb relocations.

Mon Jun  2 10:41:52 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* cpu-m68k.c (arch_info_struct): Fix 68060 cpu name.

Fri May 30 12:46:27 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-sparc.c (elf32_sparc_size_dynamic_sections): Set dynindx
	for a section even if it is not loaded.

	* cofflink.c (coff_link_add_symbols): If PE file, don't subtract
	section VMA.
	(_bfd_coff_link_input_bfd): Separate section VMA handling for
	input and output files.
	(_bfd_coff_generic_relocate_section): Check whether input file,
	not output file, is a PE file.

Wed May 28 15:48:43 1997  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c: (coff_arm_bfd_set_private_flags): Make static.

Wed May 28 16:16:04 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-i386.c (coff_i386_reloc): Don't just exit if we see an
	R_IMAGEBASE reloc.

Wed May 28 09:48:43 1997  Nick Clifton  <nickc@cygnus.com>

	* cpu-arm.c (compatible): Add test for supersets of ARM
	architectures.

Tue May 27 19:42:03 1997  Bob Manson  <manson@charmed.cygnus.com>

	* cofflink.c (_bfd_coff_final_link): Initialize global_to_static
	member.

Tue May 27 14:34:08 1997  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (coff_arm_bfd_set_private_flags): Make global.  It is
	called directly by gas/config/tc-arm.c.

Tue May 27 15:58:53 1997  Richard Henderson  <rth@tamu.edu>

	* elf64-alpha.c (PLT_ENTRY_*): Use a new thread-safe format.
	(elf64_alpha_finish_dynamic_symbol): Fill it in properly.

Mon May 26 14:05:13 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-ppc.c (coff_ppc_relocate_section): If PE file, don't add
	section VMA.

Mon May 26 10:57:48 1997  Fred Fish  <fnf@cygnus.com>

	* peicode.h (coff_bfd_print_private_bfd_data): #undef before #define.
	(coff_bfd_copy_private_bfd_data): Ditto.
	* coff-arm.c (coff_arm_bfd_merge_private_bfd_data): Make static.
	(coff_arm_bfd_print_private_bfd_data): Ditto.
	(coff_arm_bfd_set_private_flags): Ditto.
	(coff_arm_bfd_copy_private_bfd_data): Ditto.

Fri May 23 15:14:58 1997  Fred Fish  <fnf@cygnus.com>

	* libcoff-in.h (struct coff_final_link_info): Add boolean
	global_to_static member for support of task linking.
	(_bfd_coff_write_task_globals): Add prototype.
	* libcoff.h: Regenerate.
	* coffcode.h (coff_write_object_contents): Use #ifdef to
	check RS6000COFF_C, to be consistent with all other uses
	in this file.
	* cofflink.c (_bfd_coff_final_link): If doing task linking,
	call _bfd_coff_write_task_globals.
	(_bfd_coff_link_input_bfd): If doing task linking, convert
	global functions to static.
	(_bfd_coff_write_global_sym): If doing task linking, convert
	global variables to static.
	(_bfd_coff_write_task_globals): New function.
	* coff-tic80.c (TIC80COFF): Define this instead of just TIC80.
	(C_AUTOARG): #undef since it clashes with C_UEXT.
	(C_LASTENT): #undef since it clashes with C_STATLAB.
	* coffcode.h (coff_write_object_contents): Use TIC80COFF
	rather than TIC80.
	(coff_slurp_symbol_table): Use C_SYSTEM.  Hide C_AUTOARG use
	when TIC80COFF defined (clashes with C_UEXT).  Explicitly
	recognize C_UEXT, C_STATLAB, and C_EXTLAB as unsupported.

Fri May 23 12:38:24 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-tic80.c (tic80_howto_table): Change overflow check for most
	PP relocations to complain_overflow_dont.

Thu May 22 20:22:14 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-tic80.c (tic80_howto_table): Add PP relocations.  Change
	name of R_RELLONG to "RELLONG".  Set rightshift and complain for
	M_PPCR.
	(ppbase_reloc, glob15_reloc): New static functions.
	(glob16_reloc, local16_reloc): New static functions.
	(rtype2howto): Handle all relocation types.
	(coff_tic80_relocate_section): New static function.
	(coff_relocate_section): Define to coff_tic80_relocate_section.
	* Makefile.in (coff-tic80.o): Depends upon include/coff/tic80.h.

Wed May 21 17:15:50 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_slurp_symbol_table): If COFF_WITH_PE or
	COFF_IMAGE_WITH_PE, don't subtract the section VMA from the symbol
	value.
	* coffgen.c (fixup_symbol_value): Add abfd parameter.  Change all
	callers.  If PE file, don't add section VMA.
	(coff_write_alien_symbol): If PE file, don't add section VMA.
	* cofflink.c (_bfd_coff_link_input_bfd): Likewise.
	(_bfd_coff_write_global_sym): Likewise.
	(_bfd_coff_generic_relocate_section): Likewise.

	* peicode.h: Add & 0xffffffff when using ImageBase in case bfd_vma
	is 64 bits.

Wed May 21 09:58:10 1997  Nick Clifton  <nickc@cygnus.com>

	* cofflink.c (mark_relocs): Add new function to mark symbols which
	are used by relocations.
	(_bfd_coff_link_input_bfd): Add call to mark_relocs() and code to
	suppress the skipping of symbols that have thus been marked.

Tue May 20 18:45:26 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c (sh_merge_private_data): New static function.
	(coff_bfd_merge_private_bfd_data): Define.

Mon May 19 14:46:00 1997  Mark Alexander  <marka@cygnus.com>

	* coff-tic80.c: Remove unnecessary #ifdefs.
	* config.bfd: Set targ_underscore to yes for tic80.

Mon May 19 14:26:36 1997  Mark Alexander  <marka@cygnus.com>

	* coff-tic80.c (NAMES_HAVE_UNDERSCORE): Define (fixes problem
	with unresolved external symbols in GDB).

Fri May 16 10:23:03 1997  Jeffrey A Law  (law@cygnus.com)

	* elf-m10300.c (elf32_mn10300_relax_section): Read in all
	the symbols associated with each BFD.
	(mn10300_elf_relax_delete_bytes): Don't adjust the same symbol
	more than once.
	* elf-m10200.c: Likewise.
	* elf32-m32r.c: Likewise.
	* elf32-sh.c: Likewise.

Fri May 16 12:10:52 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Don't decrease the
	alignment of a common symbol.  If two symbols that look like
	common symbols are found in two shared libraries, and the size is
	different, use the larger size, and warn if --warn-common.  If a
	common symbol overrides a definition in a shared library, set the
	size to the larger size, and warn if --warn-common.

Thu May 15 14:31:28 1997  Nick Clifton  <nickc@cygnus.com>

	* cpu-arm.c (compatible):  Allow default machine to be polymorphed
	into any other machine type.

	* coffcode.h (coff_set_flags):  Initialise flags variable to 0.

	* coff-arm.c (coff_arm_bfd_merge_private_bfd_data):  When merging
	data into an unitialised destination set its machine type as well.

Thu May 15 16:40:20 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Force ELF symbol size
	to common symbol size.  Consistently treat uninitialized symbols
	in shared objects as common symbols.

Fri May  9 10:15:27 1997  Nick Clifton  <nickc@cygnus.com>

	* archures.c (constants):  Added new constants to identify the
	type of the ARM architecture: bfd_mach_arm_2, bfd_mach_arm_2a,
	bfd_mach_arm_3,	bfd_mach_arm_3M, bfd_mach_arm_4 and bfd_mach_arm_4T.

	* bfd-in2.h (constants):   Added new constants to identify
	the type of the ARM architecture: bfd_mach_arm_2, bfd_mach_arm_2a,
	bfd_mach_arm_3, bfd_mach_arm_3M, bfd_mach_arm_4 and
	bfd_mach_arm_4T.  This file is auto-magically generated from the
	archures.c file.  This update is just to save work.

	* coff-arm.c (coff_arm_bfd_merge_private_bfd_data,
	coff_arm_bfd_print_private_bfd_data,
	coff_arm_bfd_set_private_flags,
	coff_arm_bfd_copy_private_bfd_data): Added these new functions.
	(global): Macro redefinitions set up to use these new functions.

	* coffcode.h (coff_mkobject_hook): Added call to
	coff_arm_bfd_set_private_flags().
	(coff_set_arch_mach_hook): Added code to set machine type based on
	bits stored in internal flags.
  	(coff_set_flags): Added code to set the new bits in the flags
	field based on the machine number.
	(function definition macros): Made all function definition macros
	conditional so that they can be overridden by target specific
	files.

	* cpu-arm.c (compatible): Added this function.  (arch_info_struct):
	Structure extended to include new types, one each for ARMv2,
	ARMv2a, ARMv3, ARMv3M, ARMv4 and ARMv4T.

	* libcoff-in.h (struct coff_tdata):  Added flags field.

Fri May  9 17:40:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	* config.bfd (i[3456]86-*-gnu*): Don't include Mach support.

	* config.bfd: Change #if 0 around uses of host_aout_vec to #if
	HAVE_host_aout_vec.

Mon May  5 13:57:32 1997  Mike Meissner  <meissner@cygnus.com>

	* coffgen.c (coff_find_nearest_line): If there are no syments,
	just return false.

Mon May  5 18:18:45 1997  Philip Blundell  <pjb27@cam.ac.uk>

	* config.bfd: cope with '*-*-linux-gnuaout' targets.

Thu May  1 11:31:12 1997  Ian Lance Taylor  <ian@cygnus.com>

	* targmatch.sed: Add explicit \n characters to work around bug in
	HP/UX 10.20 sed program.

Wed Apr 30 12:27:03 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (copy_private_bfd_data): Cast csecs to avoid sign
	extension problems.

Tue Apr 22 12:06:08 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (do_maintainer_clean): Don't remove bfd-in2.h.

Mon Apr 21 11:21:31 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf32-m68k.c: Follow the last changes in elf32-i386.c:
	(struct elf_m68k_pcrel_relocs_copied, struct
	elf_m68k_link_hash_entry, struct elf_m68k_link_hash_table,
	elf_m68k_link_hash_traverse, elf_m68k_hash_table,
	elf_m68k_link_hash_newfunc, elf_m68k_link_hash_table_create,
	elf_m68k_discard_copies, bfd_elf32_bfd_link_hash_table_create):
	New definitions.
	(elf_m68k_check_relocs): If linking with -Bsymbolic, don't copy
	PC relative relocs for a global symbol defined in a regular
	object, and count the number of PC relative relocs copied for any
	global symbol.
	(elf_m68k_size_dynamic_sections): If linking with -Bsymbolic,
	traverse with elf_m68k_discard_copies.

Sat Apr 19 22:50:14 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-i386.c (elf_i386_check_relocs): Only count PC relative
	relocs.  From Jamie Lokier <jamie@rebellion.co.uk>.

	* coffcode.h (coff_compute_section_file_positions): Force the
	potential last byte in the file to be written out when
	COFF_IMAGE_WITH_PE.

Thu Apr 17 13:46:56 1997  Per Fogelstrom  <pefo@openbsd.org>

	* configure.host (mips*-*-openbsd*): New host.

Thu Apr 17 11:10:54 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Only subtract the
	section VMA from the symbol value if this is a fully linked file.

	* elf32-i386.c (struct elf_i386_pcrel_relocs_copied): Define.
	(struct elf_i386_link_hash_entry): Define.
	(struct elf_i386_link_hash_table): Define.
	(elf_i386_link_hash_traverse): Define.
	(elf_i386_hash_table): Define.
	(elf_i386_link_hash_newfunc): New static function.
	(elf_i386_link_hash_table_create): New static function.
	(elf_i386_check_relocs): If linking with -Bsymbolic, don't copy
	PC relative relocs for a global symbol defined in a regular
	object, and count the number of PC relative relocs copied for any
	global symbol.
	(elf_i386_size_dynamic_sections): If linking with -Bsymbolic,
	traverse with elf_i386_discard_copies.
	(elf_i386_discard_copies): New static function.
	(bfd_elf32_bfd_link_hash_table_create): Define.

	From Gordon W. Ross <gwr@mc.com>:
	* aoutf1.h (MY_entry_is_text_address): Define if not defined.
	(sunos4_aout_backend): Use MY_entry_is_text_address.

Wed Apr 16 12:43:32 1997  Martin Hunt  <hunt@cygnus.com>

	* elf32-d30v.c (elf_d30v_howto_table): Changed size of
	R_D30V_32_NORMAL to 2 (4 bytes).

Wed Apr 16 14:02:29 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Gordon W. Ross <gwr@mc.com>:
	* netbsd.h (N_SHARED_LIB): Define.
	(SEGMENT_SIZE): Don't define.
	* m68knetbsd.c (SEGMENT_SIZE): Don't define (revert change of
	April 11).
	* sparcnetbsd.c (TARGET_PAGE_SIZE): Define as 0x2000.
	(SEGMENT_SIZE): Don't define.

	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Set .rela.bss size
	to sizeof Rela structure, not sizeof Rel structure.  From Gary
	Thomas <g.thomas@opengroup.org>.

Tue Apr 15 11:50:37 1997  Ian Lance Taylor  <ian@cygnus.com>

	* aout-target.h (MY(callback)): If entry_is_text_address, adjust
	whenever entry is larger than text address, but only by whole
	pages.  From Gordon W. Ross <gwr@mc.com>.

	* Makefile.in (install): Depend upon installdirs.  Use
	mkinstalldirs to build $(oldincludedir).
	(installdirs): New target.

	* elflink.h (elf_link_add_object_symbols): Don't call check_relocs
	if this is a debugging section which we are stripping.

Mon Apr 14 12:39:30 1997  Richard Henderson  <rth@tamu.edu>

	* elf64-alpha.c (elf64_alpha_object_p): Allocate the
	alpha-specific target data struct.

Mon Apr 14 11:45:46 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Thomas Graichen <graichen@rzpd.de>:
	* Makefile.in: Always use $(SHELL) when running move-if-change.
	* configure.in: Use ${CONFIG_SHELL} when running $ac_config_sub.
	* configure: Rebuild.

Fri Apr 11 15:43:24 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (elf_slurp_symbol_table): Only subtract the section
	VMA if this is an executable file or a shared object.

	* targets.c (netbsd_core_vec): Declare.  From Gordon W. Ross
	<gwr@mc.com>.

	* libaout.h (struct aout_backend_data): Add entry_is_text_address
	field.
	* aout-target.h (SEGMENT_SIZE): Define to TARGET_PAGE_SIZE at the
	start of the file.  Remove uses later on which switch using
	ifdef.
	(MY(callback)): Handle entry_is_text_address.
	(MY_entry_is_text_address): Define if not defined.
	(MY(backend_data)): Initialize new field.
	* aoutf1.h (sunos4_aout_backend): 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.
	* netbsd.h (SEGMENT_SIZE): Define if not defined.
	(MY_entry_is_text_address): Define.
	* m68knetbsd.c (SEGMENT_SIZE): Define as 0x20000.

	* xcofflink.c (bfd_xcoff_import_symbol): Handle importing a symbol
	whose name starts with `.'.

Fri Apr 11 11:57:15 1997  Niklas Hallqvist  <niklas@appli.se>

	* config.bfd: (i[3456]86-*-openbsd*, m68*-*-openbsd*,
	mips*el*-*-openbsd*, mips*-*-openbsd*, ns32k-*-openbsd*,
	powerpc-*-*bsd*, sparc-*-openbsd*): New targets.
	* configure.in (i[3456]86-*-openbsd*, mips*-*-openbsd*,
	m68*-*-openbsd*, ns32k-*-openbsd*, powerpc-*-*bsd*,
	sparc-*-openbsd*): New targets.
	* configure: Rebuild.

Tue Apr  8 18:09:29 1997  Jamie Lokier  <jamie@rebellion.co.uk>

	* stabs.c (struct stab_section_info): New field
	`cumulative_skips'.
	(_bfd_link_section_stabs): Fill the above array.
	(_bfd_stab_section_offset): Use `cumulative_skips' to
	speed up offset calculation.

Tue Apr  8 00:01:31 1997  Jeffrey A Law  (law@cygnus.com)

        * elf-mn10300.c (mn10300_elf_relax_section): Don't forget the
        addend for non pc-relative relocations.

	* elf-m10300.c (bfd_elf32_mn10300_reloc): Remove prototype
	for non-existent function.

	* elf-m10300.c (mn10300_elf_relax_section): New function.
	(mn10300_elf_relax_delete_bytes): Likewise.
	(mn10300_elf_symbol_address_p): Likewise.
	(mn10300_elf_get_relocated_section_contents): Likewise.
	(bfd_elf32_bfd_relax_section): Define.
	(bfd_elf32_bfd_get_relocated_section_contents): Likewise.

Mon Apr  7 16:47:09 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Set SHLIB_LIBS.
	* configure.in: Substitute SHLIB_LIBS.
	* configure: Rebuild.
	* Makefile.in (SHLIB_LIBS): New variable.
	($(SHLIB)): Use $(SHLIB_LIBS).

Mon Apr  7 10:53:52 1997  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* bfd-in.h bfd-in2.h: add bfd_section_lma macro to correspond
	with bfd_section_vma.

Fri Apr  4 11:37:15 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Update file names for bfd_elf32_mn10[23]00_vec.
	Correct CPU file names for mn10[23]00.
	* configure: Rebuild.

	* bfd.c (bfd_record_phdr): Cast count to size_t before
	subtraction.

	* coff-ppc.c (dump_toc): Add cast to avoid warning from SunOS cc.
	* coff-rs6000.c (xcoff_read_ar_hdr): Likewise.
	(xcoff_write_archive_contents): LIkewise.
	* elf32-mips.c (_bfd_mips_elf_set_section_contents): Likewise.
	(mips_elf_create_procedure_table): Likewise.
	* peicode.h (pe_print_idata): Likewise.
	(pe_print_edata, pe_print_pdata, pe_print_reloc): Likewise.
	* xcofflink.c (xcoff_get_section_contents): Likewise.
	(_bfd_xcoff_canonicalize_dynamic_symtab): Likewise.
	(xcoff_link_add_symbols): Likewise.
	(xcoff_link_add_symbols): Likewise.

	* ppcboot.c (ppcboot_set_arch_mach): Make static.
	(ppcboot_bfd_print_private_bfd_data): Likewise.

	* elf32-mips.c (elf_mips_ctor64_howto): Set complain_on_overflow
	to complain_overflow_signed.

Thu Apr  3 11:51:54 1997  Ian Lance Taylor  <ian@cygnus.com>

	* VERSION: Set to 2.8.1.

	* Branched binutils 2.8.

	* elf32-ppc.c (ppc_elf_check_relocs):  Don't check SEC_ALLOC when
	deciding whether to copy a reloc into a shared object.
	(ppc_elf_relocate_section): Likewise.  Relocate R_PPC_RELATIVE
	relocs in unallocated sections.
	* elf32-sparc.c (elf32_sparc_relocate_section): Relocate
	R_SPARC_RELATIVE relocs in unallocated sections.

Wed Apr  2 16:19:41 1997  Mike Meissner  <meissner@cygnus.com>

	* elf32-ppc.c (ppc_elf_check_relocs): Undo March 26 change and
	always create got section so that the _GLOBAL_OFFSET_TABLE_ label
	is always created.

Wed Apr  2 10:49:07 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Let a common symbol
	override an uninitialized symbol from a shared library with a
	smaller size.

	* elf-m10200.c: Rename from elf32-mn10200.c.
	* elf-m10300.c: Rename from elf32-mn10300.c.
	* cpu-m10200.c: Rename from cpu-mn10200.c
	* cpu-m10300.c: Rename from cpu-mn10300.c
	* Makefile.in: Update accordingly.

	* elf32-mips.c (elf_mips_ctor64_howto): New static variable.
	(elf_mips_isa): Move to earlier in file.
	(mips_reloc_map): Remove BFD_RELOC_CTOR entry.
	(bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_CTOR
	specially.

	* elf32-mips.c (mips16_jump_reloc): Print a warning rather than
	calling abort.

Tue Apr  1 16:18:05 1997  Klaus Kaempf  <kkaempf@progis.de>

	* configure.com: New file.
	* config.h-vms: Remove file.
	* makefile.vms: Update for new configure scheme.

Mon Mar 31 23:28:39 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* libcoff-in.h (ppc_allocate_toc_section): Declare.
	(ppc_process_before_allocation): Declare.
	* libcoff.h: Rebuild.

	* coffcode.h (coff_mkobject_hook): Declare if not a macro.

Mon Mar 31 16:29:50 1997  Joel Sherrill  <joel@oarcorp.com>

        * config.bfd (hppa*-*-rtems*): New target, like hppa-*-*elf*.

Mon Mar 31 16:11:35 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coff-a29k.c (coff_a29k_relocate_section): Don't use symndx as a
	symbol index for a R_IHCONST reloc.

Mon Mar 31 15:40:59 1997  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* targmatch.sed: Do not use \(\) recursively.

Fri Mar 28 14:44:08 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* m68klinux.c (MACHTYPE_OK): Define.
	* i386linux.c (MACHTYPE_OK): Define.

Fri Mar 28 11:56:15 1997  Ian Lance Taylor  <ian@cygnus.com>

	From David S. Miller <davem@caip.rutgers.edu> and H.J. Lu
	<hjl@gnu.ai.mit.edu>:
	* sparclinux.c: New file.
	* bfd-in.h (bfd_sparclinux_size_dynamic_sections): Declare.
	* bfd-in2.h: Rebuild.
	* config.bfd (sparc-*-linuxaout*, sparc-*-linux*): New targets.
	* configure.in (sparclinux_vec): Add to list of vectors.
	* configure: Rebuild.
	* targets.c (sparclinux_vec): Declare.
	(bfd_target_vector): Add sparclinux_vec.
	* Makefile.in: Rebuild dependencies.
	(BFD32_BACKENDS): Add sparclinux.o.
	(BFD32_BACKENDS_CFILES): Add sparclinux.c.

	* coff-mips.c (mips_ecoff_backend_data): Initialize new
	bfd_coff_backend_data field.
	* coff-alpha.c (alpha_ecoff_backend_data): Likewise.

	* config.bfd: Add bfd_elf64_{big,little}mips_vec to targ_selvecs
	for mips*el*-*-linux* and mips*-*-linux*.  From H.J. Lu
	<hjl@lucon.org> and Ralf Baechle <ralf@gnu.ai.mit.edu>.

	* bfd.c: Include "libiberty.h".
	(strerror): Don't declare.
	(bfd_errmsg): Call xstrerror rather than strerror.

Thu Mar 27 12:55:42 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Generate a COPY
	reloc even if the symbol is in the .bss section.
	* elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Likewise.
	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Likewise.
	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.

	* coffcode.h (bfd_coff_backend_data): Add new field
	_bfd_coff_default_section_alignment_power.
	(bfd_coff_default_section_alignment_power): Define.
	(bfd_coff_std_swap_table): Initialize new field.
	* libcoff.h: Rebuild.
	* cofflink.c (coff_link_add_symbols): Limit alignment of a common
	symbol to the default section alignment.

	* COPYING: Update FSF address.

Thu Mar 27 00:45:57 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* elf32-d30v.c (elf_d30v_howto_table): Fix a typo in the
	21-bit absolute that made it act as a relative.

Wed Mar 26 14:50:20 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.c (_bfd_elf_create_linker_section): Don't set
	bss_section and rel_section from existing sections.

	* elf32-ppc.c (ppc_elf_check_relocs): Only create the got section
	if it is needed.

Tue Mar 25 22:26:56 1997  Stu Grossman  (grossman@critters.cygnus.com)

	* aoutx.h (some_aout_object_p):  Change executable test to fix
	problems with embedded a.out systems.

Tue Mar 25 14:35:37 1997  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (_bfd_stab_section_offset): New function.
	* libbfd-in.h (_bfd_stab_section_offset): Declare.
	* libbfd.h: Rebuild.
	* elf32-i386.c (elf_i386_relocate_section): Adjust the offset of a
	stab reloc.
	* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
	* elf32-mips.c (mips_elf_relocate_section): Likewise.
	* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
	* elf64-alpha.c (elf64_alpha_relocate_section): Likewise.

	* stabs.c (_bfd_link_section_stabs): Copy over the first header
	symbol.  Check for memory allocation failure of *psinfo.
	(_bfd_write_section_stabs): Add psinfo parameter.  Change all
	callers.  Set the value of the header symbol.
	* libbfd-in.h (_bfd_write_section_stabs): Update declaration.
	* libbfd.h: Rebuild.

Mon Mar 24 20:07:29 1997  Fred Fish  <fnf@cygnus.com>

	* coff-tic80.c (tic80_howto_table): Add R_ABS entry.
	(rtype2howto): Handle R_ABS reloc type.  Also abort on unhandled
	reloc types, rather than silently failing to generate an output file.

Mon Mar 24 13:41:00 1997  Ian Lance Taylor  <ian@cygnus.com>

	* targmatch.sed: Use the hold space to put the #ifdef around the
	the string constant.
	* targets.c (UNSUPPORTED_TARGET): Don't define.
	(find_target): Don't check for UNSUPPORTED_TARGET.
	(bfd_set_default_target): Don't try to optimize by checking for
	default.

	* Makefile.in: Rebuild dependencies.
 	(ALL_MACHINES_CFILES): Add cpu-m32r.c.
	(BFD32_BACKENDS_CFILES): Add elf32-m32r.c.
	(elf32-m32r.o): Remove explicit target.

	* config.bfd: Don't set targ_underscore for i[3456]86-*-gnu* or
	i[3456]86-*-linux*.

	* elf32-sparc.c (elf32_sparc_size_dynamic_sections): Don't
	count section symbols for sections that were created by the
	linker, or are not allocatable or not loadable.
	(elf32_sparc_finish_dynamic_sections): Output output section
	symbols for section for which we made space for them.

Fri Mar 21 13:08:26 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-sparc.c (elf32_sparc_size_dynamic_sections): If there is
	no .rela.plt section, don't output a DT_PLTGOT dynamic entry.

Fri Mar 21 12:36:46 1997  Doug Evans  <dje@canuck.cygnus.com>

	* elf32-m32r.c (m32r_elf_howto_table): Use special function for LO16.
	(m32r_hi16_list): New static local.
	(m32r_elf_hi16_reloc): Don't perform reloc, just queue it up.
	(m32r_elf_do_hi16_reloc): Delete.
	(m32r_elf_relocate_hi16): New function.
	(m32r_elf_lo16_reloc): New function.
	(m32r_elf_relocate_section): For HI16 relocs, scan for corresponding
	LO16 reloc.

	Mon Mar 10 16:03:31 1997  Doug Evans  <dje@seba.cygnus.com>

	* elf32-m32r.c (m32r_elf_create_linker_section): Delete.
	(m32r_elf_add_symbol_hook): Rewrite _SDA_BASE_ support.
	(m32r_elf_final_sda_base): New function.
	(m32r_elf_relocate_section): Rewrite sdata support.
	(m32r_elf_finish_dynamic_sections): Delete.

Thu Mar 20 12:39:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	Based on patches from Philippe De Muyter <phdm@info.ucl.ac.be>.
	* coff-svm68k.c: New file.  Just defines some macros and includes
	coff-m68k.c.
	* coff-m68k.c: Add functions to handle common addends, moved in
	from cf-m68klynx.c.  Control them using COFF_COMMON_ADDEND macro.
	Control whether relocs are visible using STATIC_RELOCS.
	* cf-m68klynx.c: Simplify greatly: just define macros to control
	coff-m68k.c.
	* coff-aux.c: Likewise.  Just leave add_one_symbol routine.
	* targets.c (m68ksysvcoff_vec): Declare.
	(bfd_target_vector): Add m68ksysvcoff_vec.
	* config.bfd (m68*-motorola-sysv*): New target.
	* configure.in (m68ksysvcoff_vec): New vector.
	* configure: Rebuild.
	* Makefile.in: Rebuild dependencies.
 	(BFD32_BACKENDS): Add coff-svm68k.o.
	(BFD32_BACKENDS_CFILES): Add coff-svm68k.c.

	* binary.c (binary_set_section_contents): Don't get misled if the
 	first section is not loadable.  From Matthew L. Martin
 	<mlm@xedia.com>.

	* elflink.h (elf_bfd_final_link): Set the value of a section
	symbol to the section address unless doing a relocateable link.

Tue Mar 18 23:03:17 1997  Richard Henderson  <rth@tamu.edu>

	* elf64-alpha.c (elf64_alpha_adjust_dynamic_symbol): Don't create
	.plt entry if we've taken the function's address.
	(elf64_alpha_merge_gots): Merge collected flags info as well.

Tue Mar 18 22:40:09 1997  H.J. Lu  <hjl@lucon.org>

	* Many files: Add function prototypes.
	* cpu-m68k.c (bfd_default_scan_num_mach): Don't declare.
	* ecofflink.c: Include "libcoff.h" and "libecoff.h".
	* elf32-ppc.c (ppc_elf_fake_sections): Make static.
	* opncls.c (bfd_openstreamr): Change stream parameter to PTR.
	* peicode.h: Change several void * parameters to PTR.
	* srec.c (srec_get_symbol_info): Make static.
	* syms.c (bfd_symbol_is_absolute): Remove.
	* Makefile.in: Rebuild dependencies.

Tue Mar 18 12:58:08 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-m32r.c (m32r_elf_is_local_label_name): Remove.
	(bfd_elf32_bfd_is_local_label): Don't define.

	* xcofflink.c (_bfd_xcoff_bfd_final_link): Call bfd_malloc rather
	than malloc.

Mon Mar 17 11:32:53 1997  Ian Lance Taylor  <ian@cygnus.com>

	* bfd-in.h: Don't include obstack.h.
	(struct bfd_hash_table): Change memory field to PTR.
	* bfd.c (struct _bfd): Change memory field to PTR.
	* bfd-in2.h: Rebuild.
	* libbfd-in.h (bfd_release): Declare as function, don't define as
	macro.
	* libbfd.h: Rebuild.
	* opncls.c: Include "objalloc.h" rather than "obstack.h".  Use
	objalloc routines rather than obstack routines.
	(obstack_chunk_alloc, obstack_chunk_free): Don't define.
	(getpagesize): Don't define.
	(_bfd_new_bfd): Don't set _bfd_chunksize.
	(bfd_openr): Free new bfd and objalloc on failure.
	(bfd_fdopenr, bfd_openstreamr, bfd_openw): Likewise.
	(bfd_alloc_size): Remove.
	(bfd_release): New function.
	* hash.c: Include "objalloc.h" rather than "obstack.h".  Use
	objalloc routines rather than obstack routines.
	(obstack_chunk_alloc, obstack_chunk_free): Don't define.
	* ecofflink.c: Include "objalloc.h" rather than "obstack.h".  Use
	objalloc routines rather than obstack routines.
	(obstack_chunk_alloc, obstack_chunk_free): Don't define.
	(struct accumulate): Change memory to struct objalloc *.
	* liboasys.h (oasys_data_type): Remove oasys_obstack field.
	* dep-in.sed: Don't remove obstack.h from dependency list.
	* Makefile.in: Rebuild dependencies.
	(BFD_H_DEPS): Remove obstack.h.
	(install): Don't install obstack.h.
	* Many files: Don't include "obstack.h".
	* VERSION: Bump.

	* opncls.c (bfd_alloc_grow, bfd_alloc_finish): Remove.
	* libbfd-in.h (bfd_alloc_grow, bfd_alloc_finish): Don't declare.
	* libbfd.h: Rebuild.
	* ieee.c (ieee_archive_p): Rewrite to not use bfd_alloc_grow.
	* sunos.c (sunos_add_dynamic_symbols): Likewise.
	* srec.c (srec_scan): Rewrite to not use obstack_1grow.

	* opncls.c (bfd_alloc): Rename from bfd_alloc_by_size_t.  Remove
	old version of bfd_alloc.
	* libbfd-in.h (bfd_alloc_by_size_t): Don't declare.
	* libbfd.h: Rebuild.
	* Several files: Call bfd_alloc rather than bfd_alloc_by_size_t.

Sat Mar 15 15:24:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_is_local_label_name): Accept the generic
	ELF local label syntax as well.

Sat Mar 15 10:16:42 1997  Fred Fish  <fnf@cygnus.com>

	* config.bfd (powerpc-*-beos*): New target.
	* configure.in (powerpc-*-beos*): Add case that explicitly
	does not set COREFILE for now.  A future BeOS version is
	expected to support core files.
	* configure: Regenerate with autoconf.

Fri Mar 14 16:43:22 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_check_relocs): Give an error if CALL16 is
 	seen with a local symbol, rather than crashing.

	* elfcode.h (elf_slurp_symbol_table): Don't try to read the
	version symbols if there aren't any.

Thu Mar 13 16:38:30 1997  Fred Fish  <fnf@cygnus.com>

	* coff-tic80.c (coff_rtype_to_howto): Define
	(coff_tic80_rtype_to_howto): Clone generic coff version and
	add code to handle the funky TI "internal relocations".

Thu Mar 13 14:08:53 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Don't warn about type
	or size changes because of a weak symbol.

	* cisco-core.c (SIGEMT): Define if not defined.

Wed Mar 12 21:36:05 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Use extsymoff when
	setting ever.  Sanity check the version number.  Sort out copying
	flags and other information when adding an indirect symbol.
	(NAME(bfd_elf,size_dynamic_sections)): Preserve any dynamic
	symbols added by the backend.  Clear the entire contents of the
	versym section.
	(elf_export_symbol): Ignore indirect symbols.
	(elf_link_output_extsym): Accept a section without an owner in an
	assert.
	* elfcode.h (elf_slurp_symbol_table): Add a sanity check on the
	version count.  Correct the allocation of x_versymp.

	* elf32-mips.c (mips_elf_add_symbol_hook): Don't set the owner of
	the magic sections used for SHN_MIPS_TEXT and SHN_MIPS_DATA.
	Don't return bfd_und_section_ptr when info->shared.
	(mips_elf_final_link): Set the alignment of .rtproc to 4, not 12.
	(mips_elf_create_dynamic_sections): Correct type: ^= for &=.
	(mips_elf_check_relocs): Resolve an indirect symbol in
	sym_hashes.
	(mips_elf_finish_dynamic_symbol): Don't change SHN_ABS into
	SHN_MIPS_TEXT or SHN_MIPS_DATA.

	* elf.c (bfd_elf_print_symbol): Tweak version output slightly.

Tue Mar 11 01:38:36 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Eric Youngdale <eric@andante.jic.com>:
	* elf-bfd.h (ELF_LINK_FORCED_LOCAL): Define.
	* elf.c (bfd_elf_print_symbol): Correct errors in last change.
	* elflink.h (elf_link_add_object_symbols): Handle cases in which a
	versioned symbol appears in both a regular and a shared object.
	(elf_link_assign_sym_version): Set ELF_LINK_FORCED_LOCAL when
	appropriate.  Improve error message.
	(struct elf_outext_info): Rename from elf_finfo_failed.  Change
	all uses.  Add localsyms field.
	(elf_bfd_final_link): When generating a shared library, call
	elf_link_output_extsym to output all local symbols.
	(elf_link_output_extsym): Handle symbols which were forced to
	become local.

Sun Mar  9 23:08:49 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Eric Youngdale <eric@andante.jic.com>:
	* elf-bfd.h (elf_symbol_type): Add version field.
	* elfcode.h (elf_slurp_symbol_table): Set version field.
	* elflink.h (elf_link_add_object_symbols): When creating an
 	indirect symbol for a default version symbol, set DEF_DYNAMIC if
 	appropriate.  Set up an indirection from the nondefault version of
	the symbol as well.
	(NAME(bfd_elf,size_dynamic_sections)): Call
	elf_link_assign_sym_version before checking whether there are any
	versions.  Always record the version name as a dynamic symbol.
	Initialize counters.
	(elf_link_assign_sym_version): After finding a version, see if a
	symbol should be forced to local scope.  Create a new version
	definition if appropriate.
	(elf_link_output_extsym): Correct indirect symbol handling.
	* elf.c (bfd_elf_print_symbol): Print version information.
	(bfd_section_from_shdr): Turn version sections into BFD sections.
	(elf_fake_sections): Only copy cverdefs and cverrefs into sh_info
	if sh_info is not already set.
	(_bfd_elf_copy_private_section_data): Copy sh_info for version
	sections.
	* elflink.c (_bfd_elf_link_record_dynamic_symbol): Tell
	_bfd_stringtab_add to copy the name into permanent memory if
	appropriate.

Fri Mar  7 11:55:31 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* elf64-alpha.c (alpha_elf_dynamic_symbol_p): Fully parenthesize.

Fri Mar  7 10:37:30 1997  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (bfd_coff_backend_data): Change
	_bfd_coff_compute_section_file_positions to return a boolean
	value.  Change all callers.
	(coff_compute_section_file_positions): Change return type to
	boolean.  If the size of the last section changed, then output a
	zero byte at the end of the file.
	* libcoff.h: Rebuild.

	* xcofflink.c (_bfd_xcoff_bfd_final_link): Always allocate space
	for at least 6 output symbols.
	(xcoff_write_global_symbol): When emitting TOC entry relocs, also
	emit a TC csect to represent the space they take up.  For an XO
	symbol, just emit a reference, not a csect.

	* Makefile.in ($(SHLINK)): Just use ln -s, not ln -sf, since
	Solaris doesn't like the combined options, and the -f is
	unnecessary.
	(stamp-tshlink, install): Likewise.

	* elf32-mips.c (mips_elf_relocate_section): Correct R_MIPS16_26
	handling when little endian.

Thu Mar  6 13:51:51 1997  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10300.c (mn10300_elf_final_link_relocate): New function.
	(mn10300_elf_relocate_section): Likewise.
	(elf_backend_relocate_section): Define.

	* elf32-mn10300.c (reloc_type): Remove PCREL{8,16,32}_{1,2}BYTE
	relocs.  Replace them with generic PCREL_{8,16,32} relocs.
	(elf32_mn10300_howto_table): Likewise.
	(elf32_mn10300_reloc_map): Likewise.
	(bfd_elf32_mn10300_reloc): Delete unused function.

Thu Mar  6 12:19:59 1997  Fred Fish  <fnf@cygnus.com>

	* coff-tic80.c (rtype2howto): If passed a relocation type we don't
	understand, just set the howto field to NULL, and the caller will
	print an appropriate error message.
	* coffcode.h (coff_slurp_reloc_table): Pull duplicate declarations and
	code fragment out of both legs of #ifdef RELOC_PROCESSING ... #endif
	block.  Use NULL for initializations of "ptr" rather than bare 0.
	* coff-h8300.c: Fix typo in comment.
	* coff-h8500.c: Ditto.
	* coff-w65.c: Ditto
	* coff-z8k.c: Ditto.

Wed Mar  5 13:59:09 1997  Doug Evans  <dje@seba.cygnus.com>

	* elf32-m32r.c (m32r_elf_do_10_pcrel_reloc): Fix overflow calc.
	(m32r_elf_relax_section, m32r_elf_relax_delete_bytes,
	m32r_elf_get_relocated_section_contents): First pass at relax support.

Mon Mar  3 13:27:09 1997  Ulrich Drepper  <drepper@rtl.cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Use correct sh_size
	entry for reading verdef records.
	Use correct braces for computing increments of extverdaux and
	exteverdef record pointers.

Sun Mar  2 22:47:54 1997  Fred Fish  <fnf@cygnus.com>

	* coff-tic80.c (COFF_DEFAULT_SECTION_ALIGNMENT_POWER): Set this to 2
	instead of 4.

Sun Mar  2 16:25:35 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_find_version_dependencies): Check that
	DEF_REGULAR is not set as well as checking that DEF_DYNAMIC is
	set.

Fri Feb 28 16:52:40 1997  Fred Fish  <fnf@cygnus.com>

	* coffcode.h (coff_set_flags): Add case for TIC80_ARCH_MAGIC.

Fri Feb 28 15:06:45 1997  Ian Lance Taylor  <ian@cygnus.com>

	* targets.c (bfd_default_vector): Make non-const.
	(find_target): New static function, broken out of
	bfd_find_target.
	(bfd_set_default_target): New function.
	(bfd_find_target): Call find_target.  When defaulting, use
	bfd_default_vector[0] if it is not NULL.
	* libbfd-in.h (bfd_default_vector): Adjust declaration.
	* bfd-in2.h, libbfd.h: Rebuild.

	* syms.c (bfd_is_local_label): Return false if the symbol has no
	name.
	* coff-i960.c (coff_i960_is_local_label_name): New function.
	(coff_bfd_is_local_label_name): Define.
	* coff-m68k.c (m68k_coff_is_local_label_name): New function.
	(coff_bfd_is_local_label_name): Define.
	* coff-rs6000.c (xcoff_is_local_label_name): New function.
	(coff_bfd_is_local_label_name): Define.
	* elf.c (_bfd_elf_is_local_label_name): Treat symbols beginning
	with .. or _.L_ as local.
	* elf32-i386.c (elf_i386_is_local_label_name): New function.
	(bfd_elf32_bfd_is_local_label_name): Define.
	* evax-alpha.c (evax_bfd_is_local_label_name): Treat symbols
	beginning with $ as local.

Thu Feb 27 18:36:23 1997  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (aout_link_write_symbols): Use bfd_is_local_label_name
	rather than comparing against info->lprefix.
	* cofflink.c (_bfd_coff_link_input_bfd): Likewise.
	* elflink.h (elf_link_input_bfd): Likewise.
	* linker.c (_bfd_generic_link_output_symbols): Likewise.
	* xcofflink.c (xcoff_link_input_bfd): Likewise.

	* elfxx-target.h (bfd_elfNN_bfd_is_local_label_name): Define as
	_bfd_elf_is_local_label_name if not already defined.
	* elf.c (_bfd_elf_is_local_label_name): New function.
	* elf-bfd.h (_bfd_elf_is_local_label_name): Declare.

	* coff-m88k.c (coff_bfd_is_local_label_name): Define.
	(m88k_is_local_label_name): New static function.

	* coffcode.h (coff_bfd_is_local_label_name): Define as
	_bfd_coff_is_local_label_name if not already defined.
	* coffgen.c (_bfd_coff_is_local_label_name): New function.
	* libcoff-in.h (_bfd_coff_is_local_label_name): Declare.
	* libcoff.h: Rebuild.

	* targets.c (BFD_JUMP_TABLE_SYMBOLS): Change _bfd_is_local_label
	to _bfd_is_local_label_name.
	(bfd_target): Likewise.
	* syms.c (bfd_is_local_label): Define as function, not macro.
	(bfd_is_local_name): Define.
	* libbfd.c (bfd_generic_is_local_label_name): Rename from
	bfd_generic_is_local_label, and take a string rather than a
	symbol.
	* libbfd-in.h (_bfd_nosymbols_bfd_is_local_label): Don't define.
	(_bfd_nosymbols_bfd_is_local_label_name): Define.
 	(bfd_generic_is_local_label): Don't declare.
	(bfd_generic_is_local_label_name): Declare.
	* bfd-in2.h, libbfd.h: Rebuild.
	* All backends: Change local_label to local_label_name.

	* elf32-mips.c (struct mips_got_info): Add assigned_gotno field.
	(mips_elf_relocate_got_local): Change return type to boolean.
	Don't assume that the first zero entry is unassigned; instead, use
	assigned_gotno.
	(mips_elf_relocate_section): Check return value of
	mips_elf_relocate_got_local.
	(mips_elf_create_got_section): Initialize assigned_gotno field.

Wed Feb 26 15:19:51 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* elf32-d30v.c (bfd_elf_d30v_reloc): Add code to do 32-bit
	relocations.

Wed Feb 26 13:33:03 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_input_bfd): Don't skip symbols from sections
	that have no contents merely because linker_mark is not set.

Tue Feb 25 18:51:35 1997  Stan Shebs  <shebs@andros.cygnus.com>

	* config.bfd (mips*-*-lnews*): New target.
	* coff-mips.c (mips_relocate_section): Make assert compare
	content byteorder instead of header byteorder.
	(ecoff_biglittle_vec): New BFD, big-endian headers, little-endian
	data.
	* targets.c (bfd_target_vector): Add ecoff_biglittle_vec.
	* configure.in (ecoff_biglittle_vec): Add case.
	* configure: Update.

Tue Feb 25 00:32:49 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (elf_fake_sections): Use SHT_NOTE for any section whose
	name begins with ".note".
	(map_sections_to_segments): Add a PT_NOTE segment for any loadable
	section whose name begins with ".note".
	(get_program_header_size): Corresponding change.

	* elf32-mips.c (mips_elf_relocate_section): Check for misaligned
	jal and for jal overflow.

Mon Feb 24 17:53:14 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Eric Youngdale <eric@andante.jic.com>:
	* elflink.h (elf_link_add_archive_symbols): If a default symbol is
	not found, try looking it up again without the version name.
	(elf_link_add_object_symbols): Always link against the dynamic
	symbol table of a dynamic object.  When linking against a dynamic
	object, include version strings in symbol names, and set up
	version information.  Add indirect symbols for default versions.
	(elf_link_create_dynamic_sections): Add special version sections.
	(struct elf_assign_sym_version_info): Define.
	(struct elf_find_verdep_info): Define.
	(NAME(bfd_elf,size_dynamic_sections)): Add verdefs parameter.  Set
	up version sections.
	(elf_adjust_dynamic_symbol): Ignore indirect symbols.
	(elf_link_find_version_dependencies): New static function.
	(elf_link_assign_sym_version): New static function.
	(elf_link_renumber_dynsyms): New static function.
	(struct elf_final_link_info): Add symver_sec field.
	(elf_bfd_final_link): Initialize finfo.symver_sec.  Don't count
	local symbols of a dynamic object.  Handle DT_VER* constants.
	(elf_link_output_extsym): Simplify BFD_ASSERT checking for a
	dynamic object.  Skip indirect symbols from ELF objects.  Remove
	the version name before choosing a hash bucket.  Write out the
	version information if appropriate.
	(elf_link_input_bfd): Check for DYNAMIC, not ET_DYN.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update declaration.
	(bfd_elf64_size_dynamic_sections): Likewise.
	* bfd-in2.h: Rebuild.
	* elf-bfd.h (struct elf_link_hash_entry): Add verinfo field.
	Change elf_link_hash_flags to unsigned short.
	(ELF_LINK_HIDDEN): Define.
	(struct elf_obj_tdata): Add fields dynversym_hdr, dynverref_hdr,
	dynverdef_hdr, dynversym_section, dynverdef_section,
	dynverref_section, cverdefs, cverrefs, verdef, verref.
	(elf_dynversym, elf_dynverdef, elf_dynverref): Define.
	(_bfd_elf_swap_verdef_in, _bfd_elf_swap_verdef_out): Declare.
	(_bfd_elf_swap_verdaux_in, _bfd_elf_swap_verdaux_out): Declare.
	(_bfd_elf_swap_verneed_in, _bfd_elf_swap_verneed_out): Declare.
	(_bfd_elf_swap_vernaux_in, _bfd_elf_swap_vernaux_out): Declare.
	(_bfd_elf_swap_versym_in, _bfd_elf_swap_versym_out): Declare.
	(_bfd_elf_slurp_version_tables): Declare.
	* elf.c (_bfd_elf_swap_verdef_in): New function.
	(_bfd_elf_swap_verdef_out): Likewise.
	(_bfd_elf_swap_verdaux_in, _bfd_elf_swap_verdaux_out): Likewise.
	(_bfd_elf_swap_verneed_in, _bfd_elf_swap_verneed_out): Likewise.
	(_bfd_elf_swap_vernaux_in, _bfd_elf_swap_vernaux_out): Likewise.
	(_bfd_elf_swap_versym_in, _bfd_elf_swap_versym_out): Likewise.
	(_bfd_elf_print_private_bfd_data): Add DT_VER* constants.  Print
	version information if there is any.
	(_bfd_elf_link_hash_newfunc): Initialize verinfo field.
	(bfd_section_from_shdr): Handle SHT_GNU_ver* section types.
	(elf_fake_sections): Handle .gnu.version* section names.
	(assign_section_numbers): Handle SHT_GNU_ver* section types.
	(_bfd_elf_slurp_version_tables): New function.
	* elflink.c (_bfd_elf_link_record_dynamic_symbol): Don't include
	version name in string entered in dynamic hash table.
	* elfcode.h: Include fnmatch.h.
	* elf32-i386.c (elf_i386_relocate_section): Handle a dynamic
	symbol which was forced to become local.
	* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
	* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
	* elf64-alpha.c (alpha_elf_dynamic_symbol_p): Likewise.

Fri Feb 21 16:15:18 1997  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10200.c (mn10200_elf_final_link_relocate): Simplify
	somewhat.
	(mn10200_elf_relax_section): Correctly compute a symbol's value
	when the symbol is local, but not in the same section as we are
	relaxing.  Implement abs24 -> abs16, imm24 -> imm16 and d24 -> d16
	relaxing.

Fri Feb 21 13:55:14 1997  Doug Evans  <dje@seba.cygnus.com>

	* elf32-m32r.c: Rewrite to use ELF backend linker.
	Store lower 16 bits of addend in R_M32R_HI16_[SU]LO insns.
	Add small data area support (R_M32R_SDA16).
	* reloc.c: Document BFD_RELOC_M32R_SDA16.
	* bfd-in2.h, libbfd.h: Regenerated.

Thu Feb 20 23:50:31 1997  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10200.c (mn10200_elf_relax_section): New function.
	(mn10200_elf_relax_delete_bytes): Likewise.
	(mn10200_elf_symbol_address_p): Likewise.
	(mn10200_elf_get_relocated_section_contents): Likewise.
	(bfd_elf32_bfd_relax_section): Define.
	(bfd_elf32_bfd_get_relocated_section_contents): Likewise.

	* elf32-mn10200.c (mn10200_elf_final_link_relocate): New function.
	(mn10200_elf_relocate_section): Likewise.
	(elf_backend_relocate_section): Define.

Tue Feb 18 17:22:59 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* Makefile.in: New target, elf-*-D30V.
	* archures.c: New target, elf-*-D30V.
	* config.bfd: New target, elf-*-D30V.
	* configure.in: New target, elf-*-D30V.
	* elf.c: New target, elf-*-D30V.
	* reloc.c: New target, elf-*-D30V.
	* targets.c: New target, elf-*-D30V.
	* bfd-in2.h: Rebuilt.
	* configure: Rebuilt.
	* libbfd.h: Rebuilt.
	* cpu-d30v.c: New files.
	* elf32-d30v.c: New files.

Tue Feb 18 15:31:48 1997  Fred Fish  <fnf@cygnus.com>

	* reloc.c (struct reloc_howto_struct): Fix typo in comment.
	* bfd-in2.h: Regenerated.
	* coff-tic80.c (RTYPE2HOWTO): Replace abort with real function.
	(rtype2howto): Add function.
	(tic80_howto_table): Add.

Tue Feb 18 11:41:00 1997  Dawn Perchik  <dawn@cygnus.com>

	* sysdep.h: Don't define errno in MSVC if error.h is included.

Tue Feb 18 10:04:13 1997  Jeffrey A Law  (law@cygnus.com)

	* elf32-v850.c (v850_elf_relocate_section): Make sure r_symndx
	is initialized before it is used.

Mon Feb 17 11:28:40 1997  Ian Lance Taylor  <ian@cygnus.com>

	* hp300hpux.c (convert_sym_type): Don't convert a secondary common
	symbol into a weak undefined symbol; leave it as a common symbol.

Fri Feb 14 19:08:03 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Don't issue a warning
	about a symbol defined in a dynamic object if it has already been
	defined in a regular object.

Thu Feb 13 20:53:22 1997  Klaus Kaempf  (kkaempf@progis.de)

	* makefile.vms: Add gcc flags to allow compiling with current gcc
	snapshot
	(targmatch.h): New dependency.

	* reloc.c (BFD_RELOC_ALPHA_CODEADDR): New relocation for
	openVMS/Alpha.
	* evax.h (ALPHA_R_CODEADDR): New relocation.
	* evax-alpha.c (ALPHA_R_CODEADDR): 64 bit procedure relocation for
	openVMS/Alpha.
	* evax-etir.c (ALPHA_R_CODEADDR): Output object code for this
	relocation.
	* bfd-in2.h, libbfd.h: Rebuild.

	Restrict symbol length to 64 bytes, case preserving:
	* evax-emh.c (_bfd_evax_write_emh): Remove case hacking.
	* evax-misc.c (_bfd_evax_case_hack_symbol): Remove.
	(_bfd_evax_length_hash_symbol): Added.
	* evax-etir.c (_bfd_evax_write_etir): Call
	_bfd_evax_length_hash_symbol before output of symbol.
	* evax-egsd.c (_bfd_evax_write_egsd): Likewise.
	* evax.h (flag_hash_long_names, flag_show_after_trunc): Remove.

	* evax-emh.c: Output filename to object file without path.

	* evax-egsd.c: New sections for local and global commons.

	* evax-alpha.c, evax-emh.c, evax-egsd.c, evax-etir.c,
	evax-misc.c, evax.h: Remove 8 bit characters from copyright
	notices.  Replace AXP with Alpha.

Wed Feb 12 18:10:30 1997  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (sunos_create_dynamic_sections): We need the dynamic
	sections if we are creating a shared library.

Tue Feb 11 15:45:43 1997  Doug Evans  <dje@canuck.cygnus.com>

	* configure.host (i386-windows): Don't set host64=true.

Tue Feb 11 15:27:32 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (reloc_type): Add R_MIPS16_GPREL.
	(elf_mips16_gprel_howto): New static variable.
	(mips16_gprel_reloc): New static function.
	(bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS16_GPREL.
	(mips_info_to_howto_rel): Handle R_MIPS16_GPREL.
	(mips_elf_relocate_section): Handle R_MIPS16_GPREL.
	* reloc.c (BFD_RELOC_MIPS16_GPREL): Define.
	* bfd-in2.h, libbfd.h: Rebuild.

Mon Feb 10 23:25:00 1997  Doug Evans  <dje@seba.cygnus.com>

	* elf32-m32r.c (elf_m32r_howto_table): Change partial_inplace to true
	for R_M32R_{16,32,24,HI16_ULO,HI16_SLO,LO16}.

Fri Feb  7 12:39:11 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_input_bfd): If we've discarded a section,
	the output section will be the absolute section; don't print an
	assertion message for that case when doing a relocateable link.

Thu Feb  6 16:55:43 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (FN_STUB, CALL_STUB, CALL_FP_STUB): Define.
	(struct mips_elf_link_hash_entry): Add new fields fn_stub,
	need_fn_sub, call_stub, and call_fp_stub.
	(struct mips_elf_link_hash_table): Add field mips16_stubs_seen.
	(mips_elf_link_hash_newfunc): Initialize new fields.
	(mips_elf_link_hash_table_create): Likewise.
	(mips_elf_relocate_section): Redirect relocations to use mips16
	stubs when appropriate.
	(mips_elf_check_relocs): Attach stub sections to the appropriate
	symbol.  Set need_fn_stub when appropriate.
	(mips_elf_always_size_sections): New static function.
	(mips_elf_check_mips16_stubs): New static function.
	(elf_backend_always_size_sections): Define.
	* elf-bfd.h (struct elf_obj_tdata): Add local_stubs field.

	* elflink.h (elf_link_input_bfd): Discard local symbols that are
	attached to sections which are not being included in the link.

Wed Feb  5 13:20:17 1997  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (_bfd_coff_generic_relocate_section): Ignore the
	symbol value when computing the addend for a pc_relative
	pcrel_offset reloc.

Mon Feb  3 11:54:06 1997  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (_bfd_coff_generic_relocate_section): If doing a
	relocateable link, just skip pc_relative pcrel_offset relocs.
	* coff-arm.c (coff_arm_rtype_to_howto): Return a different howto
	structure for an ARM26 reloc which can be resolved.
	(coff_arm_adjust_symndx): Only convert ARM26 to ARM26D if the
	reloc can be resolved.

	* coff-h8300.c (h8300_reloc16_extra_cases): Correct off by one
	error in overflow check for R_RELBYTE.

Fri Jan 31 14:07:27 1997  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_slurp_section_data): Pick up the start address.
	From Mark Rasin <mark.rasin@telrad.co.il>.

	* aoutx.h (aout_link_write_symbols): Don't apply discard_l to
	debugging symbols.

Wed Jan 29 00:00:49 1997  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10200.c (reloc_type): Add 16bit pc-relative reloc.
	(elf_mn10200_howto_table): Likewise.
	(mn10200_reloc_map): Likewise.

Mon Jan 27 12:07:35 1997  Doug Evans  <dje@seba.cygnus.com>

	* reloc.c: Add relocs BFD_RELOC_M32R_{HI16_[US]LO,LO16}.
	* bfd-in2.h, libbfd.h: Regenerated.
	* elf32-m32r.c: Add support for them.

Mon Jan 27 12:25:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	* aout-arm.c (MY_swap_std_reloc_in): Remove unused r_length.
	* elf32-ppc.c (ppc_elf_check_relocs): Remove unused plt.
	* elf32-v850.c (v850_elf_final_link_relocate): Remove used
	r_format and r_pcrel.  Always return a value.
	* riscix.c (MY_final_link_callback): Define to dummy value.

	* elf32-i386.c (elf_i386_size_dynamic_sections): When checking for
	relocations against the text segment, look up the output name of
	the reloc section.
	* elf32-m68k.c (elf_m68k_size_dynamic_sections): Likewise.
	* elf32-mips.c (mips_elf_size_dynamic_sections): Likewise.
	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Likewise.
	* elf32-sparc.c (elf32_sparc_size_dynamic_sections): Likewise.
	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Likewise.

Wed Jan 22 15:40:28 1997  Fred Fish  <fnf@cygnus.com>

	* coff-tic80.c (tic80coff_vec): Use correct data put/get
	routines for little endian data.
	* coffcode.h (coff_write_object_contents): Set magic to
 	TIC80_ARCH_MAGIC for TIc80.

Tue Jan 21 12:32:43 1997  Fred Fish  <fnf@cygnus.com>

	* coff-tic80.c (tic80coff_vec): Change to little endian data
	as the default.

Thu Jan 16 17:45:57 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (NAME(bfd_elf,size_dynamic_sections)): Change type of
	auxiliary_filters parameter to be const char * const *.  Accept a
	NULL terminated array.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update declaration.
	(bfd_elf32_size_dynamic_sections): Update declaration.
	* bfd-in2.h: Rebuild.

Wed Jan 15 11:21:32 1997  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Treat a
	NOTYPE symbol in a text section as a FUNC symbol.

	* coffcode.h (coff_compute_section_file_positions): Force
	relocbase to be aligned to COFF_DEFAULT_SECTION_ALIGNMENT_POWER.

Tue Jan 14 08:46:33 1997  Doug Evans  <dje@canuck.cygnus.com>

	* libaout.h (machine_type): Reserve several values for sparclet.

Mon Jan 13 22:39:08 1997  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config.bfd (tic80-*-*): Don't require 'coff'.

Mon Jan 13 19:36:25 1997  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-v850.c (v850_elf_howto_table): Set the special_function
	table to v850_elf_reloc for all non-standard relocations.
	(v850_elf_check_relocs): Add check for h being non-null.
	(v850_elf_reloc): Add  R_V850_ZDA_OFFSET support.  Use switch
	statement instead of multiple ifs.
	(v850_elf_relocate_section): Fix up error message, don't just call
	abort.

Mon Jan  6 13:28:35 1997  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10200.c (elf_mn10200_howto): Don't ever set partial-inplace.
	Use bfd_elf_generic_reloc as special function for all relocs.
	(bfd_elf32_mn10200_reloc): Remove unnecessary function.

	* elf32-mn10200.c (elf_mn10200_howto): Set pcrel_offset for
	24bit pc-relative reloc.

Fri Jan  3 16:33:00 1997  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (coff-tic80.o): Add coffcode.h to dependency list.
	* coff-tic80.c (tic80coff_vec): Data byte order is big endian and
	header byte order is little endian.  Use correct bfd_get and
	bfd_put routines for little endian headers.
	* coffcode.h (coff_set_arch_mach_hook): Set arch to
	bfd_arch_tic80 for TIC80_ARCH_MAGIC number.

Fri Jan  3 16:54:08 1997  Jeffrey A Law  (law@cygnus.com)

	* reloc.c: Add BFD_RELOC_24.
	* elf32-mn10200.c (enum reloc_type): Add 24bit and pcrel relocs.
	(elf_mn10200_howto, mn10200_reloc_map): Corresponding changes.
	* bfd-in2.h, libbfd.h: Rebuilt.

Fri Jan  3 16:58:31 1997  Richard Henderson  <rth@tamu.edu>

	elf64-alpha multiple .got rewrite:

	* elf-bfd.h (struct elf_backend_data): Add always_size_sections entry.
	(bfd_elf*_mkobject): Don't define here ...
	* elfxx-target.h: ... but rather here.  Default always_size_sections
	hook to NULL.
	* elf.c (elf_mkobject): Rename to bfd_elf_mkobject, since that was
	what the #defines in elf-bfd.h transmuted it to anyway.

	* section.c: Add SEC_LINKER_CREATED flag.
	* bfd-in2.h: Rebuild.
	* elf32-i386.c (elf_i386_check_relocs): Add SEC_LINKER_CREATED to
	relocation section flags.
	(elf_i386_size_dynamic_sections): Use SEC_LINKER_CREATED instead of
	SEC_IN_MEMORY to recognize generated bits.
	* elf32-m68k.c (elf_m68k_check_relocs, elf_m68k_size_dynamic_sections):
	Likewise.
	* elf32-mips.c (mips_elf_final_link, mips_elf_create_dynamic_sections,
	mips_elf_create_compact_rel_section, mips_elf_create_got_section,
	mips_elf_check_relocs, mips_elf_size_dynamic_sections): Likewise.
	* elf32-ppc.c (ppc_elf_create_linker_section,
	ppc_elf_size_dynamic_sections): Likewise.
	* elf32-sparc.c (elf32_sparc_check_relocs,
	elf32_sparc_size_dynamic_sections): Likewise.
	* elflink.c (_bfd_elf_create_got_section): Add SEC_LINKER_CREATED to
	section flags.
	(_bfd_elf_create_dynamic_sections): Likewise.
	(_bfd_elf_make_linker_section_rela): Likewise.
	* elflink.h (elf_link_create_dynamic_sections): Likewise.
	(bfd_elf,size_dynamic_sections): Call the always_size_sections hook.
	(elf_bfd_final_link): Use SEC_LINKER_CREATED instead of SEC_IN_MEMORY
	to identify generated bits.
	(elf_link_input_bfd): Likewise.

	* elf64-alpha.c: Rewrite everything touching relocations.

Fri Jan  3 11:42:53 1997  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-v850.c (all functions and static variables): Go through
	and regularize names to be of the form v850_elf_<xxx>.
	(toplevel): Include <elf/v850.h>.
	(enum reloc_type): Move to include/elf/v850.h.
	(v850_elf_check_relocs): For common variables, if the variable is
	referenced by a R_V850_{SDA,ZDA,TDA} relocation, put the variable
	into the appropriate section.
	(elf_backend_check_relocs): Define.

Tue Dec 31 15:15:28 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-v850.c (elf_v850_howto_table): Fix some spacing.

Tue Dec 31 14:44:50 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config.bfd (mips*el-*-linux*): New target.
	(mips*-*-linux*): New target.

	* elf32-mips.c (_bfd_mips_elf_merge_private_bfd_data): Clean up.
	Return a useful value.

	* Makefile.in (ALL_CFLAGS): Add -D_GNU_SOURCE.

	* configure.in: Check ac_cv_func_mmap_fixed_mapped, not
	ac_cv_func_mmap.
	* configure: Rebuild.
	* configure.host: Use ac_cv_func_mmap_fixed_mapped instead of
	ac_cv_func_mmap in bfd/configure.host.

	* elflink.h (NAME(bfd_elf,size_dynamic_sections)): Add
	filter_shlib and auxiliary_filter_shlib parameters.
	* elf.c (_bfd_elf_print_private_bfd_data): Handle DT_AUXILIARY and
	DT_FILTER.
	* bfd-in.h (bfd_elf32_size_dynamic_sections): Update declaration.
	(bfd_elf64_size_dynamic_sections): Likewise.
	* bfd-in2.h: Rebuild.

Mon Dec 30 18:48:52 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_build_ldsyms): When exporting all defined
	symbols, don't export a symbol which is defined by an object in an
	archive which contains shared objects.

Mon Dec 30 16:12:58 1996  Fred Fish  <fnf@cygnus.com>

	* archures.c (enum bfd_architecture): Add bfd_arch_tic80
	for TI TMS320c80 (MVP).
	(bfd_archures_list): Add bfd_tic80_arch.
	* bfd-in2.h: Regenerate by running "make headers".

Sun Dec 29 16:18:52 1996  Fred Fish  <fnf@cygnus.com>

	* cpu-tic80.c (bfd_tic80_arch): Add struct.
	* configure.in (case $vec): Correct typo, "tb" not "tp".
	Also add cofflink.o for tic80coff_vec.
	* configure: Regenerate with autoconf.

Mon Dec 30 11:54:56 1996  Ian Lance Taylor  <ian@cygnus.com>

	* libbfd.c: Patch up the mmap code so that it is only built if BFD
	is configured with --with-mmap.

Sun Dec 29 10:48:57 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (BFD32_BACKENDS): Add coff-tic80.o
	(ALL_MACHINES): Add cpu-tic80.o
	(cpu-tic80.o, coff-tic80.o): Add dependencies.
	* coff-tic80.c: Add skeleton, cloned from another coff config.
	* coffcode.h (coff_write_object_contents): Set magic to TIC80MAGIC
 	for TIc80.

Fri Dec 27 20:56:41 1996  Fred Fish  <fnf@cygnus.com>

	* TODO: Correct a misspelling.
	* coff-tic80.c: New file for TI TMS320C80 (MVP).
	* cpu-tic80.c: New file for TI TMS320C80 (MVP).
	* configure.in (case $vec): Add tic80coff_vec entry.
	* configure: Regenerate with autoconf.
	* archures.c (bfd_tic80_arch): Declare.
	* bfd-in2.h (enum bfd_architecture): Add bfd_arch_tic80.
	* config.bfd (case ${targ}): Add tic80*-*-coff* target.
	* targets.c (tic80coff_vec): Add decl as extern bfd_target.
	(bfd_target_vector): Add tic80coff_vec entry.

Fri Dec 27 11:48:12 1996  H.J. Lu  <hjl@lucon.org>

	* elflink.h (elf_buckets): Add some more values for larger
	binaries.

Thu Dec 26 18:36:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (install): Move subdir_do out of conditional. From
	Fred Fish <fnf@cygnus.com>.

Wed Dec 18 10:04:30 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10200.c (enum reloc_type): Enable basic 8, 16, and
	32 bit relocs.
	(elf_mn10200_howto_table): Likewise.
	(mn10200_reloc_map): Likewise.

Tue Dec 17 11:09:36 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_add_symbol_hook): Add 1 to the value of a
	mips16 symbol during the link.
	(mips_elf_finish_dynamic_symbol): Subtract 1 from the value of a
	mips16 symbol.
	(mips_elf_link_output_symbol_hook): New static function.
	(elf_backend_link_output_symbol_hook): Define.

	* elf.c (bfd_elf_print_symbol): Print the st_other field if it is
	not zero.

Mon Dec 16 14:38:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (bfd_section_from_shdr): Don't check for reloc sections
	against SEC_DEBUGGING sections here (revert patch of December 5).
	* elfcode.h (elf_object_p): Check for them here, instead.

Sun Dec 15 14:46:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elfcode.h (elf_slurp_reloc_table): Add dynamic parameter.
	* elf.c (_bfd_elf_canonicalize_reloc): Pass new argument to
	slurp_reloc_table.
	(_bfd_elf_get_dynamic_reloc_upper_bound): New function.
	(_bfd_elf_canonicalize_dynamic_reloc): New function.
	* elf-bfd.h (struct elf_size_info): Update declaration of
	slurp_reloc_table.
	(_bfd_elf_get_dynamic_reloc_upper_bound): Declare.
	(_bfd_elf_canonicalize_dynamic_reloc): Declare.
	* elfxx-target.h: Use new dynamic reloc routines by default.
	* elf64-mips.c (mips_elf64_slurp_reloc_table): Add dynamic
	parameter.

Fri Dec 13 13:18:49 1996  Dan Wilder  <dan@gasboy.com>

	* coffcode.h (coff_set_flags): Use MC68KBCSMAGIC for bfd_arch_m68k
	if NAMES_HAVE_UNDERSCORE is defined.

Fri Dec 13 11:13:23 1996  Doug Evans  <dje@canuck.cygnus.com>

	* libaout.h (enum machine_type): Change M_SPARCLET from 142 to 131.

Thu Dec 12 15:07:20 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_check_relocs): Move R_PPC_PLTREL24 into the
	supported relocs.

Thu Dec 12 14:55:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Only add a weak
	symbol if the real definition is in the dynamic symbol table.
	After finding the real definition, then, if it is dynamic, add the
	weak symbol to the dynamic symbol table.

	* coff-aux.c (coff_m68k_aux_link_add_one_symbol): Make static.

	* ppcboot.c (ppcboot_set_arch_mach): Don't define; it's a
	function.
	(ppcboot_bfd_print_private_bfd_data): Don't take the address of an
	array.

Tue Dec 10 23:23:52 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10300.c (reloc_type): Remove big endian mn10300 reloc
	variants.
	(elf32_mn10300_howto_table, mn10300_reloc_map): Likewise.
	(bfd_elf32_mn10300_reloc): Write data in little endian format.
	* reloc.c: Remove mn10300 big endian relocs.
	* bfd-in2.h, libbfd.h: Rebuilt.

	* elf32-mn10200.c: Update from elf32-mn10300.c.

Fri Dec  6 15:18:05 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10300.c (elf_symbol_leading_char): Define.

	* elf32-mn10300.c: Add some comments.

Fri Dec  6 17:16:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ihex.c (ihex_scan): Always initialize buf before jumping to
	error_return.
	(ihex_read_section): Likewise.

Thu Dec  5 22:29:18 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10300.c (elf_mn10300_howto_table): Don't set partial-
	inplace for most relocs.

Thu Dec  5 13:24:46 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Calling check_relocs
	even if SEC_ALLOC is not set.
	* elf32-i386.c (elf_i386_check_relocs): Don't check SEC_ALLOC
	when deciding whether to copy a reloc into a shared object.
	(elf_i386_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_check_relocs): Likewise.
	(elf32_sparc_relocate_section): Likewise.
	* elf32-i386.c (elf_i386_check_relocs): Don't set SEC_ALLOC in a
	reloc section if it is not set in the source section.
	* elf32-sparc.c (elf32_sparc_check_relocs): Likewise.
	* elf.c (bfd_section_from_shdr): Mark a reloc section associated
	with a SEC_DEBUGGING section as SEC_DEBUGGING.

Wed Dec  4 14:18:13 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): #if 0 code that
	expects a .got.plt until we actually create it.

Mon Dec  2 12:13:51 1996  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (_bfd_coff_generic_relocate_section): Print an error
	message for bfd_reloc_outofrange, rather than aborting.  From
	Philippe De Muyter <phdm@info.ucl.ac.be>.

	* cofflink.c (_bfd_coff_final_link): If there aren't any relocs in
	a relocateable link, don't try to process them.  From Heinz Wrobel
	<wrobel@lpr.e-technik.tu-muenchen.de>.

Mon Dec  2 00:39:24 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10300.c (mn10300_info_howto): Renamed from
	mn10300_info_howto_rel.  Tweak reloc argument to be an
	Elf32_Internal_Rela.
	(USE_RELA): Define instead of USE_REL.
	(elf_info_to_howto, elf_info_howto_rel): Corresponding changes.

Sun Dec  1 00:18:59 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* configure.in, configure:  Handle mips*-sgi-irix6*.
	* irix-core.c (irix_core_core_file_p):  Accept CORE_MAGICN32
	core files.

Wed Nov 27 12:10:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-i386.c (elf_i386_relocate_section): Warn about a
	relocation against a symbol defined in a section with no output
	section.

Tue Nov 26 11:07:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aclocal.m4 (BFD_CC_FOR_BUILD): Don't require AC_C_CROSS.
	* configure, config.in: Rebuild with autoconf 2.12.

	* elf-bfd.h (struct elf_link_hash_entry): Add other field.
	* elf.c (_bfd_elf_link_hash_newfunc): Initialize other field.
	(swap_out_syms): Set st_other from existing st_other field.
	* elflink.h (elf_link_add_object_symbols): Store st_other in hash
	table other field.
	(elf_link_output_extsym): Set the other field from the global hash
	table entry.
	* elf32-mips.c (enum reloc_type): Add R_MIPS16_26.
	(elf_mips16_jump_howto): New static variable.
	(mips16_jump_reloc): New static function.
	(bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS16_JMP.
	(mips_info_to_howto_rel): Handle R_MIPS16_26.
	(mips_elf_relocate_section): Handle R_MIPS16_26.  Handle R_MIPS_26
	to a mips16 symbol.
	* reloc.c (BFD_RELOC_MIPS16_JMP): Add to list of relocs.
	* bfd-in2.h, libbfd.h: Rebuild.
	* cpu-mips.c (arch_info_struct): Add mips:16 entry.

Mon Nov 25 11:23:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Use long long for mips-sgi-irix6*.

	* coffswap.h (coff_swap_scnhdr_out): Make line number overflow
	only a warning.  From Philippe De Muyter <phdemuyt@ulb.ac.be>.

Mon Nov 25 08:52:29 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10300.c (bfd_elf32_mn10300_reloc): New function.
	(enum reloc_type): Add more reloc types.
	(elf32_mn10300_howto_table): Update for new reloc types.
	(elf32_mn10300_reloc_map): Update for new reloc types.
	* reloc.c: Add some new relocs for the mn10300 series.
	* bfd-in2.h, libbfd.h: Rebuilt.

Sat Nov 23 13:26:18 1996  Jeffrey A Law  (law@cygnus.com)

	* som.c (setup_sections): Don't lose for a space which has
	no data, but some symbols.

Fri Nov 22 11:32:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (struct sunos_link_hash_table): Add got_needed field.
	(sunos_link_hash_table_create): Initialize got_needed.
	(sunos_create_dynamic_sections): Only set .got section size if it
	is not already set.  Set got_needed.
	(bfd_sunos_size_dynamic_sections): Check got_needed.  Only set
	sdynptr, and only handle dynamic sections, if dynamic sections are
	needed.
	(sunos_scan_std_relocs): Pass false to create_dynamic_sections.
	Initialize .got section.
	(sunos_scan_ext_relocs): Likewise.
	(sunos_write_dynamic_symbol): Set up PLT entry even if this is not
	a dynamic symbol.
	(sunos_finish_dynamic_link): Check got_needed.  Only set up
	dynamic linking information if needed.

Thu Nov 21 10:31:31 1996  Rob Savoye  (rob@cygnus.com)

	* config.bfd: Added VersaDOS format to the Ericsson configuration.

Wed Nov 20 16:31:31 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-mn10300.c: Rough cut at relocs for the mn10300.

Wed Nov 13 08:12:38 1996  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (elf32-d10v.o): Don't depend on elf/d10v.h
	anymore.

Tue Nov 12 13:30:00 1996  Dawn Perchik  <dawn@cygnus.com>

	* filemode.c: Include sysdep.h.
	* ihex.c: Add casts to eliminate compiler warnings.
	* sunos.c: Add casts to eliminate compiler warnings.

Mon Nov 11 10:37:02 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Create .got.plt
	section.
	(ppc_elf_check_relocs): Add support for R_PPC_LOCAL24PC.  Make
	appropriate relocations in the .so file if shared.
	(ppc_elf_relocate_section): Ditto.

Tue Oct 29 15:03:02 1996  Doug Evans  <dje@canuck.cygnus.com>

	* elf32-m32r.c (elf_m32r_howto_table, R_M32R_24): Use
	complain_overflow_unsigned.

Tue Oct 29 12:53:46 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* elf32-d10v.c (elf_d10v_howto_table): Don't complain on
	overflows for R_D10V_16 and R_D10V_18.

Tue Oct 29 13:23:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_write_section_part): Use LMA rather than VMA.
	(do_with_relocs): Likewise.
	(do_as_repeat): Likewise.
	(copy_expression): Likewise.

Fri Oct 25 16:56:40 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_write_external_part): Correctly record whether
	there is an external part.

Thu Oct 24 14:32:52 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-v850.c (elf32_v850_bfd_final_link_relocate): Correctly
	handle tda offsets for sld.w and sst.w instructions.
	Fix alignment check in sld.w and sst.w tda reloc handling.

Thu Oct 24 09:08:47 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* aclocal.m4, configure:  Set USE_BINARY_FOPEN for *-*-windows.

Wed Oct 23 00:53:16 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-v850.c: Add comments about assumptions about
	char, short & long sizes.
	(elf32_v850_bfd_final_link_relocate): Fix sign extension
	problems for several relocs.

	* elf32-v850.c (elf32_v850_howto_table): Fix typo in
	R_V850_SDA_OFFSET entry.

Wed Oct 23 00:20:34 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (bfd_xcoff_import_symbol): Don't allocate ldsym.
	Store import file index in ldindx.
	(xcoff_build_ldsyms): Assume that ldsym was not previously
	allocated.  For an imported symbol, copy ldindx into l_ifile.

Tue Oct 22 19:20:38 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-v850.c (elf_v850_howto_table): Fix ordering of
	R_V850_ZDA_OFFSET and R_V850_TDA_OFFSET.  Fix various
	fields in R_V850_TDA_OFFSET.
	(elf32_v850_bfd_final_link_relocate): Tweak pc-relative
	relocs to work more like other relocs.  Handle R_V850_TDA_OFFSET
	relocations.

	* elf32-v850.c: Include bfdlink.h.
	(bfd_elf32_v850_reloc): Return an error if we get a reloc
	we can't handle.
	(elf32_v850_bfd_final_link_relocate): New function.
	(v850_elf_relocation_section): Likewise.
	(elf_backend_relocate_section): Define.

Tue Oct 22 17:22:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* binary.c (binary_set_section_contents): Ignore sections which
	don't have SEC_LOAD and SEC_ALLOC set.

Mon Oct 21 12:13:05 1996  Jeffrey A Law  (law@cygnus.com)

	* linker.c (_bfd_generic_final_link): Avoid losing static
	symbols in the .bss section.

Mon Oct 21 10:54:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (elf_mips_howto_table): Describe R_MIPS_64.
	(mips32_64bit_reloc): New static function.
	(mips_reloc_map): Add entry for BFD_RELOC_64.
	(mips_elf_relocate_section): Handle R_MIPS_64.

	* linker.c (default_indirect_link_order): Print an error message
	when attempting to do a relocateable link with different object
	file formats, rather than calling abort.

Thu Oct 17 10:43:29 1996  Doug Evans  <dje@canuck.cygnus.com>

	* reloc.c (m32r relocs): Rename them.
	* bfd-in2.h, libbfd.h: Regenerated.
	* elf32-m32r.c: Update.
	(m32r_elf_10_pcrel_reloc): New function.
	(elf_m32r_howto_table, R_M32R_10_PCREL entry): Use it.
	(elf_m32r_howto_table, R_M32R_24 entry): Fix {src,dst}_masks.

Wed Oct 16 11:24:35 1996  Jeffrey A Law  (law@cygnus.com)

	* linker.c (_bfd_generic_final_link): Set "linker_mark" for
	all sections that will be included in the output file.
	(_bfd_generic_link_output_symbols): Discard symbols in sections
	which are being discarded.
	* elf32-v850.c (enum reloc_type): Add R_V850_SDA_OFFSET,
	R_V850_TDA_OFFSET and R_V850_ZDA_OFFSET.
	(elf_v850_howto_table): Corresponding changes.
	(elf_v850_reloc_map): Corresponding changes.
	* reloc.c: Add additional V850 relocations.
	* bfd-in2.h, libbfd.h: Rebuilt.

	* elf32-v850.c (bfd_elf32_v850_reloc): Mask out bits we
	no longer want in pc-relative relocs.

Tue Oct 15 22:17:37 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-v850.c (bfd_elf32_v850_reloc): Don't silently
	accept a reloc against an undefined sybmol!

Tue Oct 15 16:17:28 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* elf32-v850.c:  Define elf_symbol_leading_char to be '_'.

Tue Oct 15 12:40:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* VERSION: Bump for new relocation.

	* hosts/i386bsd.h: If NBPG is not defined, define it as
	PAGE_SIZE, for recent versions of FreeBSD.

Mon Oct 14 12:37:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Use `long long' as the 64 bit type on a Solaris
	host, since both gcc and the SunPRO compilers support it.

Mon Oct 14 11:17:24 1996  Richard Henderson  <rth@tamu.edu>

	* reloc.c: Create a new BFD_RELOC_ALPHA_ELF_LITERAL.  It was a
	mistake to have reused the ECOFF LITERAL for ELF since they have
	different semantics.
	* elf64-alpha.c (elf_reloc_map): Map from ELF_LITERAL.
	* bfd-in2.h, libbfd.h: Rebuild.

	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Trap .got
	section overflow.

	* elf64-alpha.c (elf64_alpha_relocate_section): Do not emit a
	dynamic relocation for an undefweak symbol when we are building
	a static executable.

Thu Oct 10 11:15:06 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed (config.bfd, targmatch.sed): Edit references to
	point explicitly to srcdir.
	(targmatch.h): Edit references to point explicitly to objdir.

Thu Oct 10 14:14:23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config.bfd: When setting targ_cpu, don't get confused by
	linux-gnu.

Tue Oct  8 08:51:19 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* configure.host:  Add support for windows host (a build done
	under the Microsoft build environment).

Tue Oct  8 11:40:16 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): If a symbol is a weak
	definition in a dynamic object, add it to the dynamic symbol table
	if any dynamic object mentions it.  Reverts part of last patch.

	* sunos.c (struct sunos_link_hash_table): Add got_base field.
	(sunos_link_hash_table_create): Initialize got_base.
	(bfd_sunos_size_dynamic_sections): If the .got section is more
	than 0x1000 bytes, set __GLOBAL_OFFSET_TABLE_ and got_base to
	0x1000.
	(sunos_check_dynamic_reloc): Subtract got_base from a base
	relative relocation.

	* elf32-mips.c (elf_mips_isa): New static function.
	(_bfd_mips_elf_merge_private_bfd_data): Don't warn about linking
	-mips1 and -mips2 code together, or -mips3 and -mips4 code.

Mon Oct  7 11:44:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* archive.c (do_slurp_coff_armap): Only treat archive as little
	endian for i960 COFF.

Fri Oct  4 13:49:01 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_compute_section_file_positions): Adjust sofar
 	by the change in size of the section when EXEC_P is not set.

	* coff-m68k.c (coff_rtype_to_howto): Define if not defined.
	(m68kcoff_rtype_to_howto): New static function.
	* cf-m68klynx.c (coff_m68k_lynx_rtype_to_howto): Add the section
	VMA to the addend for a PC relative reloc.

	* dep-in.sed: Rework backslash loop a bit to avoid bug in sed on
	HP/UX 10.20.
	* Makefile.in: Rebuild dependencies.

	* dep-in.sed: Remove ../bfd/sysdep.h, since it will appear when
	som.h is included.

Fri Oct  4 11:41:39 1996  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in: Remove explicit dependencies for mn10200 and
	mn10300 files.
	(ALL_MACHINE_CFILES): Add cpu-mn10200.c and cpu-mn10300.c.
	(BFD32_BACKENDS_CFILES): Add elf32-mn10200.c and elf32-mn10300.c
	(dependencies): Rebuilt.

Thu Oct  3 16:57:51 1996  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (coff_link_add_symbols): Set obj_coff_keep_syms
	during this function.

	* elflink.c (_bfd_elf_create_linker_section): Only use an existing
	section if the flags are compatible.

	* configure.in: Add havevecs, and put it in tdefaults.
	* mpw-config.in: Likewise.
	* configure: Rebuild.
	* targmatch.sed: New file; a sed script to build targmatch.h from
	config.bfd.
	* config.bfd: Add #if, #endif, and comments for targmatch.h.
	* targets.c: Include "fnmatch.h".
	(struct targmatch): Define.
	(bfd_target_match): Define by including targmatch.h.
	(bfd_find_target): If the target is not found by name, search for
	it as a configuration triplet.
	* Makefile.in: Rebuild dependencies.
 	(BFD32_BACKENDS): Add aout-arm.o, aout-sparcle.o, hp300bsd.o,
	i386dynix.o, m68k4knetbsd.o, and riscix.o.
	(BFD32_BACKENDS_CFILES): Add aout-arm.c, aout-sparcle.c,
	hp300bsd.c, i386dynix.c, m68k4knetbsd.c, and riscix.c.
	(HFILES): Add targmatch.h.  Also, alphabetize and reindent.
	(CFILES): Remove i386dynix.c and hp300bsd.c.
	(targmatch.h): New target.
	(do_clean): Remove targmatch.h.

	* configure.in: Add BFD_NEED_DECLARATION(getenv).
	* acconfig.h: Add NEED_DECLARATION_GETENV.
	* configure, config.in: Rebuild.
	* sysdep.h: If NEED_DECLARATION_GETENV, declare getenv.
	* aout-adobe.c (aout_adobe_object_p): Don't declare getenv.

Thu Oct  3 09:29:09 1996  Jeffrey A Law  (law@cygnus.com)

	* cpu-mn10x00.c, elf32-mn10x00: Removed.
	* cpu-mn10200.c, cpu-mn10300.c: New files.
	* elf32-mn10200.c, elf32-mn10300.c: New files.
	* Makefile.in: Break mn10x00 support into two separate
	configurations, mn10200 and mn10300.
	* archures.c, config.bfd, configure.in, elf.c, targets.c: Likewise.
	* bfd-in2.h, configure: Rebuilt.

Thu Oct  3 15:38:19 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (do_clean): Move config.log to do_distclean.

Wed Oct  2 21:40:55 1996  Jeffrey A Law  (law@cygnus.com)

	* cpu-mn10x00.c, elf32-mn10x00.c: New files.
	* Makefile.in (ALL_MACHINES): Add cpu-mn10x00.o.
	(BFD32_BACKENDS): Similarly for elf32-mn10x00.o.
	(elf32-mn10x00.o): Add dependencies.
	* archures.c (enum bfd_architecture): Add bfd_arch_mn10x00.
	(bfd_mn10x00_arch): Declare.
	(bfd_archures_list): Add bfd_mn10x00_arch.
	* config.bfd: Add mn10x00-*-*.
	* configure.in: Add bfd_elf32_mn10x00_vec.
	* elf.c (prep_headers): Handle bfd_arch_mn10x00.
	* targets.c (bfd_elf32_mn10x00_vec): Declare.
	(bfd_target_vector): Add bfd_elf32_mn10x00_vec.
	* bfd-in2.h, configure: Rebuilt.

Wed Oct  2 15:46:45 1996  Klaus Kaempf  <kkaempf@progis.de>

	openVMS/Alpha: Provide filename and case_hack flags via
	symbol table from gas.
	Add case_hack code for symbol output from vax/vms.
	* evax-alpha.c (evax_initialize): Remove filename handling,
	filename is provided via symbol table.
	(evax_get_symtab): Use local symbol count when setting up table.
	* evax-egsd.c (_bfd_evax_slurp_egsd): Print correct name when
	debugging.
	(_bfd_evax_write_egsd): Skip file name symbol.
	* evax-emh.c (get_vms_time_string): Local function now.
	(_bfd_evax_write_emh): Extract source filename and case_hack flags
	from symbol table.
	(_bfd_evax_write_etir): Pass all symbol names through
	_bfd_evax_case_hack_symbol.
	* evax-misc.c (hash_string, _bfd_evax_case_hack_symbol): New
	functions.
	(_bfd_evax_basename): Removed.
	(_bfd_get_vms_time_string): Moved to evax-emh.c.
	* evax.h (evax_private_data_struct): Remove filename.
	(flag_hash_long_names, flag_show_after_trunc,
	flag_no_hash_mixed_case, vms_name_mapping): New flags for
	vms_case_hack.

Wed Oct  2 12:02:02 1996  Ian Lance Taylor  <ian@cygnus.com>

	* freebsd.h (N_GET_MAGIC_NET): Don't use ntohl.
	(N_GETMID_NET, N_GETFLAG_NET): Likewise.
	(NO_SWAP_MAGIC): Don't define.
	(SWAP_MAGIC): Define.

	* cofflink.c (_bfd_coff_link_input_bfd): Don't crash if there is
	no hash table entry for a global symbol.

Tue Oct  1 16:14:22 1996  Joel Sherrill  <joel@oarcorp.com>

	* config.bfd (mips*-*-rtems*): New target, like mips*-*-elf*.

Tue Oct  1 12:31:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (coff_link_add_symbols): Don't override a meaningful
	symbol type with T_NULL.  Warn if symbol type changes.  Based on
	patch from Philippe De Muyter <phdm@info.ucl.ac.be>.

	* elflink.h (elf_link_add_object_symbols): Only put a symbol from
	a dynamic object in the dynamic symbol table if it is referenced
	or defined by a regular object.

Fri Sep 27 18:41:07 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* elf32-v850.c (bfd_elf32_v850_is_local_label):  New function to
	remove dwarf local labels.  Shrinks binaries by a factor of 3!

Mon Sep 23 13:33:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-ppc.c (ppc_elf_add_symbol_hook): Create the .sbss section
	by hand, rather than by calling bfd_make_section.

Mon Sep 23 09:23:41 1996  Doug Evans  <dje@seba.cygnus.com>

	* reloc.c: Rename m32r relocs.
	* bfd-in2.h, libbfd.h: Rebuilt.
	* elf32-m32r.c: Update.

Fri Sep 20 11:43:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (aout_link_input_section_ext): When doing a relocateable
	link, adjust the symbol index of a base relative reloc.  Don't
	change the addend of a PC relative reloc if pcrel_offset is set.
	* sunos.c (bfd_sunos_size_dynamic_sections): Don't do anything for
	a relocateable link.

	* reloc.c (bfd_perform_relocation): Apply the relocation even if
	it is zero, in case src_mask matters.
	(bfd_install_relocation): Likewise.

Thu Sep 19 11:03:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_add_symbols): Always initialize
	keep_syms.
 	(_bfd_xcoff_bfd_final_link): Don't set target_index
	to an uninitialized value.

Tue Sep 17 14:18:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_slurp_line_table): Warn about illegal symbol
	indices, rather than crashing.
	(coff_slurp_reloc_table): Likewise.  Check whether the howto field
	is NULL.
	* coff-sh.c (sh_relocate_section): Check for an illegal symbol
	index.

Mon Sep 16 12:39:36 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coff-arm.c (aoutarm_std_reloc_howto): Change dst_mask for ARM26D
 	reloc to 0.
	(coff_arm_adjust_symndx): New static function.
	(coff_adjust_symndx): Define.

	* srec.c (srec_scan): Accept multiple symbols on a single line.
	From Pascal Martin <pmartin@alsys.com>.

	* README: New file.

Fri Sep 13 14:32:42 1996  Doug Evans  <dje@canuck.cygnus.com>

	* aoutf1.h (MY_bfd_merge_private_bfd_data): Define.
	(sunos_merge_private_bfd_data): New function.

Fri Sep 13 15:50:57 1996  Ian Lance Taylor  <ian@cygnus.com>

	* bfd.c (bfd_copy_private_bfd_data): Switch on output BFD rather
	than input BFD.
	(bfd_merge_private_bfd_data): Likewise.
	* section.c (bfd_copy_private_section_data): Likewise.
	* syms.c (bfd_copy_private_symbol_data): Likewise.
	* bfd-in2.h: Rebuild.
	* aout-target.h (MY_bfd_copy_private_section_data): Check that
	both BFD's are the right flavour.
	* ecoff.c (_bfd_ecoff_bfd_copy_private_bfd_data): Likewise.
	* elf.c (_bfd_elf_copy_private_symbol_data): Likewise.
	* elf32-mips.c (_bfd_mips_elf_copy_private_bfd_data): Likewise.
	(_bfd_mips_elf_merge_private_bfd_data): Likewise.
	* elf32-ppc.c (ppc_elf_copy_private_bfd_data): Likewise.
	(ppc_elf_merge_private_bfd_data): Likewise.
	* elf32-sparc.c (elf32_sparc_merge_private_bfd_data): Likewise.
	* peicode.h (pe_bfd_copy_private_section_data): Likewise.

	* elf32-hppa.c (elf_hppa_howto_table): Fill in some fields for
	R_PARISC_DIR32, so that _bfd_stab_section_find_nearest_line passes
	its sanity check.

Thu Sep 12 11:45:57 1996  Doug Evans  <dje@seba.cygnus.com>

	* reloc.c: Add m32r relocs.
	* bfd-in2.h, libbfd.h: Rebuilt.
	* cpu-m32r.c, elf32-m32r.c: New files.

Thu Sep 12 11:10:05 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_vec): Set symbol_leading_char field to '_'.

Wed Sep 11 11:57:56 1996  Ian Lance Taylor  <ian@cygnus.com>

	* tekhex.c (first_phase): Change type parameter from char to int.
	(out): Likewise.
	(pass_over): Change func to expect int, not char.

	* elf.c (assign_file_positions_for_segments): Test SEC_ALLOC
	rather than SEC_LOAD when aligning the file offset for the first
	section in a segment.

Tue Sep 10 16:18:30 1996  Fred Fish  <fnf@cygnus.com>

	* syms.c (coff_section_type): Make arg const.
	* irix-core.c (irix_core_core_file_p): Remove extraneous extra arg
	to make_bfd_asection().
	* elf-bfd.h (bfd_section_from_phdr): Add prototype.
	* elfcode.h (bfd_section_from_phdr): Remove prototype.
	(_bfd_elf_stringtab_init): Remove prototype.

	* netbsd-core.c (swap_abort): Add prototype.
	* aix386-core.c (swap_abort): Ditto & make static
	* hpux-core.c (swap_abort): Ditto & make static.
	* irix-core.c (swap_abort): Ditto & make static.
	* ptrace-core.c (swap_abort): Ditto & make static.
	* trad-core.c (swap_abort): Ditto & make static.
	* coffswap.h (coff_swap_reloc_in): Ditto.
	(coff_swap_reloc_out): Ditto.
	(coff_swap_filehdr_in): Ditto.
	(coff_swap_filehdr_out): Ditto.
	(coff_swap_sym_in): Ditto.
	(coff_swap_sym_out): Ditto.
	(coff_swap_aux_in): Ditto.
	(coff_swap_aux_out): Ditto.
	(coff_swap_lineno_in): Ditto.
	(coff_swap_lineno_out): Ditto.
	(coff_swap_aouthdr_in): Ditto.
	(coff_swap_aouthdr_out): Ditto.
	(coff_swap_scnhdr_in): Ditto.
	(coff_swap_scnhdr_out): Ditto.
	* ihex.c (ihex_sizeof_headers): Ditto.
	* tekhex.c (getsym): Ditto.
	(find_chunk): Ditto & make static.
	(insert_byte): Ditto.
	(first_phase): Ditto.
	(pass_over): Ditto.
	(tekhex_get_symtab): Ditto & make static.
	(tekhex_get_symtab_upper_bound): Ditto & make static.
	(tekhex_mkobject): Ditto.
	(tekhex_object_p): Ditto.
	(move_section_contents): Ditto.
	(tekhex_get_section_contents): Ditto.
	(tekhex_set_arch_mach): Ditto & make static.
	(tekhex_set_section_contents): Ditto.
	(writevalue): Ditto.
	(writesym): Ditto.
	(out): Ditto.
	(tekhex_write_object_contents): Ditto.
	(tekhex_sizeof_headers): Ditto.
	(tekhex_make_empty_symbol): Ditto.
	(tekhex_get_symbol_info): Ditto.
	(tekhex_print_symbol): Ditto.
	* irix-core.c (make_bfd_asection): Ditto.
	(irix_core_core_file_p): Ditto.
	(irix_core_core_file_failing_command): Ditto.
	(irix_core_core_file_failing_signal): Ditto.
	(irix_core_core_file_matches_executable_p): Ditto.
	(irix_core_make_empty_symbol): Ditto.
	* coff-mips.c (mips_bfd_reloc_type_lookup): Ditto.
	* srec.c (srec_new_symbol): Ditto.
	(srec_get_section_contents): Ditto.
	(srec_set_arch_mach): Ditto.
	(srec_set_section_contents): Ditto.
	(internal_srec_write_object_contents): Ditto.
	(srec_write_object_contents): Ditto.
	(symbolsrec_write_object_contents): Ditto.
	(srec_sizeof_headers): Ditto.
	(srec_make_empty_symbol): Ditto.
	(srec_get_symtab_upper_bound): Ditto.
	(srec_get_symtab): Ditto.
	(srec_print_symbol): Ditto and make static.
	* elf.c (elf_read): Ditto
	(assign_section_numbers): Ditto.
	(elf_fake_sections): Ditto.
	(sym_is_global): Ditto.
	(elf_map_symbols): Ditto.
	(get_program_header_size): Ditto.
	* coffgen.c (make_a_section_from_file): Ditto.
	(coff_real_object_p): Ditto.
	(fixup_symbol_value): Ditto.
	(build_debug_section): Ditto.
	(copy_name): Ditto.
	* syms.c (coff_section_type): Ditto.

Mon Sep  9 22:36:01 1996  Jeffrey A Law  (law@cygnus.com)

	* bfd-in2.h: Rebuilt after m32r changes.

Mon Sep  9 12:31:22 1996  Doug Evans  <dje@canuck.cygnus.com>

	* config.bfd: Add m32r support.
	* configure.in: Likewise.
	* configure: Likewise.
	* Makefile.in: Likewise.
	* archures.c: Likewise.
	* elf.c: Likewise.
	* targets.c: Likewise.
	* config.bfd: Keep target list alphabetically sorted.

Mon Sep  9 11:48:41 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-v850.c (bfd_elf32_v850_reloc, case R_V850_HI16): Don't forget
	to add in the constant part found in the instruction itself.
	(case R_V850_HI16_S): Likewise.

Fri Sep  6 17:04:39 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* elf32-d10v.c (elf_d10v_howto_table): Modify the size of R_D10V_16
	and R_D10V_18 to be 1 (word).

Thu Sep  5 15:23:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (_bfd_link_section_stabs): If the output_section field
	of either section is bfd_abs_section, then the linker is
	discarding the section and we should not optimize it.

Tue Sep  3 12:16:20 1996  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (aout-sparcle.o): New target.
	* aoutf1.h (TARGET_IS_BIG_ENDIAN_P): Don't define if little endian.
	* config.bfd (sparclet-*-aout*): Add case.
	* configure.in (sparcle_aout_vec): Add case.
	* configure: Regenerated.
	* targets.c (sparcle_aout_vec): Declare.
	(bfd_target_vector): Add sparcle_aout_vec.
	* aout-sparcle.c: New file.

Tue Sep  3 00:57:02 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-v850.c (bfd_elf32_v850_reloc): Fix handling of
	low order sign bit propogation for R_V850_HI16_S.

	* elf32-v850.c (bfd_elf32_v850_reloc): New function for
	handling V850 specific relocs.
	(elf_v850_howto_table): Use the new function for some
	relocations.  Twiddle masks & shifts for some relocs.
	Set partial_inplace where needed.

Mon Sep  2 12:12:34 1996  Ian Lance Taylor  <ian@cygnus.com>

	* cpu-mips.c: Add an explicit mips:3000 entry, and change the
	default architecture to a machine number of 0.
	* elf32-mips.c (_bfd_mips_elf_object_p): Set the machine number
	for E_MIPS_ARCH_1.
	(_bfd_mips_elf_merge_private_bfd_data): If the machine number of
	the output BFD is the default, set it from the first input BFD.

Sun Sep  1 18:38:01 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-v850.c (elf_v850_howto_table): All the 16bit relocs
	insert at bitpos zero.  The HI16 relocs are shifted right
	by 16 bits.  Fix src_mask for all relocs.
	(TARGET_LITTLE_SYM, TARGET_LITTLE_NAME): Define.  The V850 is
	little endian!
	(TARGET_BIG_SYM, TARGET_BIG_NAME): Remove.  The V850 is little
	endian!

Sun Sep  1 15:41:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rs6000-core.c (rs6000coff_core_file_matches_executable_p):
	Rewrite to use BFD file read routines and to avoid using a fixed
	length for the file name.

Sat Aug 31 10:22:25 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-v850.c (enum reloc_type): Add R_V850_{32,16,8}.
	(elf_v850_howto_table): Add support for R_V850_{32,16,8}.
	(v850_reloc_map): Add translation from BFD_RELOC_{32,16,8}
	to R_V850_{32,16,8}.

Fri Aug 30 18:06:04 1996  J.T. Conklin  <jtc@hippo.cygnus.com>

	* elf32-v850.c (reloc_type): Add R_V850_HI16_S.
	(elf_v850_howto_table): Add info for HI16_S reloc.
	(v850_reloc_map): Add HI_16_S reloc.
	* reloc.c: Define BFD_RELOC_V850_* relocs.

Fri Aug 30 11:49:19 1996  Ian Lance Taylor  <ian@cygnus.com>

	Add SH ELF support.
	* elf32-sh.c: New file.
	* elf.c (prep_headers): Handle bfd_arch_sh.
	* elfcode.h (write_relocs): Handle absolute symbol.
	* elf-bfd.h (_bfd_elf32_link_read_relocs): Declare.
	(_bfd_elf64_link_read_relocs): Declare.
	* elflink.h (NAME(_bfd_elf,link_read_relocs)): Rename from
	elf_link_read_relocs.  Make globally visible.  Change all
	callers.
	(elf_link_input_bfd): Get external symbols from cache in
	symtab_hdr->contents.  Get contents from cache in
	elf_section_data.
	* elfxx-target.h (bfD_elfNN_bfd_relax_section): Only define if not
	already defined.
	* reloc.c: Define BFD_RELOC_SH_* relocs.
	* libbfd-in.h (_bfd_sh_align_load_span): Declare.
	* coff-sh.c (sh_insns_conflict): Fix a return value.
	(_bfd_sh_align_load_span): New globally visible function, broken
	out of sh_align_load.
	(sh_align_load): Call _bfd_sh_align_load_span.
	(sh_swap_insns): Change relocs parameter to PTR.
	* bfd-in2.h, libbfd.h: Rebuild.
	* targets.c (bfd_elf32_sh_vec): Declare.
	(bfd_elf32_shl_vec): Declare.
	* config.bfd (sh-*-elf*): New target.
	* configure.in (bfd_elf32_sh_vec): New target vector.
	(bfd_elf32_shl_vec): New target vector.
	* configure: Rebuild.
	* Makefile.in: Rebuild dependencies.
 	(BFD32_BACKENDS): Add elf32-sh.o.
	(BFD32_BACKENDS_CFILES): Add elf32-sh.c.

	* elf.c (map_sections_to_segments): Check that LMA does not skip a
	page before checking D_PAGED.

	* ihex.c (ihex_scan): Removed unnecessary extbase variable.
	(ihex_write_object_contents): Remove extbase; always use segbase
	instead.

Thu Aug 29 16:52:17 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (i[345]86-*-*): Recognize i686 for pentium pro.
	* configure.host (i[345]86-*-*): Ditto.
	* config.bfd (i[345]86-*-*): Ditto.
	* configure: Regenerate.

	* config.bfd (i[3456]86-*-dgux*): Recognize as a synonym for x86
	elf.

Tue Aug 27 09:18:18 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-hppa.c (hppa_elf_gen_reloc_type): Add new argument.
	* elf32-hppa.h (hppa_elf_gen_reloc_type): Update prototype.
	* som.c (hppa_som_gen_reloc_type): Add new argument.  If
	we encounter an R_DATA_ONE_SYMBOL reloc against a symbol that
	will have an ST_CODE type, change the symbol's type to ST_DATA.
	* som.c (hppa_som_gen_reloc_type): Update prototype.

Tue Aug 27 00:12:22 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_check_relocs): Set dynobj if needed for
	R_MIPS_32 and R_MIPS_REL32.  Set sgot and g as soon as possible.
	(mips_elf_size_dynamic_sections): Don't require .got to exist.
	(mips_elf_finish_dynamic_sections): Likewise.

Thu Aug 22 10:54:38 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host (HLDENV): New variable to set.  Set it for
	*-*-sysv4*, since those linkers may not support -R but they always
	support LD_RUN_PATH.

	* libieee.h (NSECTIONS): Don't define.
	(ieee_data_struct): Change section_table to asection **.  Add
	section_table_size.
	* ieee.c (get_section_entry): If the table isn't big enough, make
	it bigger.
	(ieee_slurp_sections): Remove assertion about number of sections.
	(ieee_object_p): Adjust initialization of ieee to match changes to
	the structure.

	* xcofflink.c (xcoff_mark): Don't copy relocs for undefined
	symbols merely because we are generating a shared library.
	(xcoff_build_ldsyms): Don't set up global linkage code for an
	undefined symbol merely because we are generating a shared
	library.

Tue Aug 20 15:06:05 1996  J.T. Conklin  <jtc@hippo.cygnus.com>

	* Makefile.in (ALL_MACHINES): Add cpu-v850.o.
	(BFD32_BACKENDS) Add elf32-v850.o.
	* archures.c: Add bfd_v850_arch.
	* bfd-in2.h: Add bfd_v850_arch.
	* config.bfd (v850-*-*): New target.
	* configure: (bfd_elf32_v850_vec) New vector.
	* configure.in: (bfd_elf32_v850_vec) New vector.
	* cpu-v850.c: New file.
	* elf.c (prep_headers): Added case bfd_arch_v850.
	* elf32-v850.c: New file.
	* targets.c (bfd_elf32_v850_vec): New vector.

Fri Aug 16 16:25:35 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_add_dynamic_symbols): Create and define
 	a function code symbol for an XMC_XO symbol.

Thu Aug 15 12:33:29 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: Update editing of autoconf vars to reflect
	Jul 18 configure.in change.
	* mpw-make.sed: Update editing of include pathnames to be
	more general, add @DASH_C_FLAG@ to explicit compile rule edit.

Thu Aug 15 10:35:13 1996  Richard Henderson  <rth@tamu.edu>

	* elf64-alpha.c (elf64_alpha_output_extsym): The section from
	which to offset to get the .plt entry address is ".plt".

Thu Aug 15 16:40:30 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* reloc.c: (BFD_RELOC_ARM_THUMB_ADD, BFD_RELOC_ARM_THUMB_IMM,
	BFD_RELOC_ARM_THUMB_SHIFT, BFD_RELOC_ARM_THUMB_OFFSET):
 	Added, for internal use by the ARM gas.
	* libbfd.h: Rebuilt
	* bfd-in2.h: Rebuilt

Wed Aug 14 17:02:09 1996  Richard Henderson  <rth@tamu.edu>

	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Correct typo
	in section dynidx start.

Tue Aug 13 14:35:38 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (_bfd_elf_make_section_from_shdr): Treat sections whose
	name begins with .gnu.linkonce as SEC_LINK_ONCE.  This is an
	optimization for g++.

Tue Aug 13 17:04:40 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_merge_private_bfd_data): If one module has
	the -mrelocatable-lib bit set and the other doesn't, clear the
	-mrelocatable-lib bit in the header.

Sat Aug 10 22:59:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): Do not resolve a common
	symbol against a STT_FUNC symbol in a shared library.

Fri Aug  9 12:44:57 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_add_dynamic_symbols): If a descriptor
 	symbol is found, automatically define the corresponding function
 	code.

	* cofflink.c (coff_link_add_symbols): Only set (*sym_hash)->numaux
	if sym.n_numaux is not zero.
	(_bfd_coff_link_input_bfd): Permit the symbol and the hash table
	entry to disagree about the number of aux entries if the symbol
	has zero.

	* elf32-mips.c (mips_elf_check_relocs): Create the .rel.dyn
	section if it might be needed, not just if info->shared.
	(mips_elf_adjust_dynamic_symbol): Make room for a null element at
	the start of .rel.dyn if we are going to use it.
	(mips_elf_finish_dynamic_sections): Only clear the first element
	of .rel.dyn if the size is greater than zero.

Thu Aug  8 16:24:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_input_bfd): If we already called the
	undefined_symbol callback for a symbol, then don't issue any more
	warnings about loader relocs.
	(_bfd_ppc_xcoff_relocate_section): Don't do any further processing
	after calling the undefined_symbol callback.

	* xcofflink.c (XCOFF_MULTIPLY_DEFINED): Define.
	(xcoff_link_add_symbols): Permit multiple definitions of a symbol
	as the AIX linker seems to do.

Thu Aug  8 12:21:56 1996  Klaus Kaempf  <kkaempf@progis.de>

	* evax-alpha.c (evax_alpha_vec): Corrected flags, cleanup.
	(evax_initialize): Remove evax_reloc_table.
	(evax_close_and_cleanup): Ditto.
	(reloc_nil): Ditto.
	(alpha_howto_table): Remove ALPHA_R_SWREL32 and ALPHA_R_SWREL64
	entries.
	(evax_bfd_reloc_type_lookup): Ditto.
	* evax-egsd.c (_bfd_evax_slurp_egsd): Add a few casts; set
	cooked_size == raw_size.
	* evax-emh.c (_bfd_evax_register_filename): Remove.
	* evax-etir.c (etir_stc): Allow ETIR_S_C_STC_xx commands.
	* evax-misc.c (add_new_contents): Malloc section at full size.
	(_bfd_save_evax_section): Memcpy section contents directly.
	* evax.h (ALPHA_R_SWREL32, ALPHA_R_SWREL64): Remove.
	(evax_reloc_table): Remove.

	* hosts/alphavms.h (O_ACCMODE): Define if needed.

	* makefile.vms: Add better support for DEC C compilation
	Add evax.h dependencies

	* reloc.c (bfd_get_reloc_size): Add case for 16 byte reloc.
	(BFD_RELOC_SWREL32,BFD_RELOC_SWREL64): Remove.
	(BFD_RELOC_ALPHA_BASEREG): Remove.
	* bfd-in2.h, libbfd.h: Rebuild.

Thu Aug  8 08:17:32 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* archive.c (bsd_write_armap):  Ifdef around calls to getuid and
	getgid if _WIN32 is defined.
	* opncls.c (bfd_fdopenr):  Remove unnecessary WINGDB ifdef.

Wed Aug  7 23:19:00 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* aoutx.h bfd-in.h bfd-in2.h opncls.c riscix.c som.c targets.c:
	Change NO_FLAGS to BFD_NO_FLAGS to avoid conflict with an HPUX
	include file.
	* libbfd.c:  Create dummy getpagesize() macro if HAVE_GETPAGESIZE
	isn't defined.

Wed Aug  7 14:11:44 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* configure.in: Call BFD_NEEDED_DECLARATION on strstr and
	realloc.
	* acconfig.h (NEED_DECLARATION_STRSTR): New macro.
	(NEED_DECLARATION_REALLOC): New macro.
	* configure, config.in: Rebuild.
	* sysdep.h (strstr): Declare if NEED_DECLARATION_STRSTR.
	(realloc): Declare if NEED_DECLARATION_REALLOC.

	* aclocal.m4 (BFD_NEED_DECLARATION): Include <string.h> or
	<strings.h> if they exist.

	* ieee.c (ieee_set_section_contents): Cast bfd_alloc return.

Wed Aug  7 12:12:03 1996  Ian Lance Taylor  <ian@cygnus.com>

	* cpu-i386.c (i8086_arch): Architecture info for the i8086.

	Based on patches from Eric Valette <valette@crf.canon.fr>:
	* elf32-i386.c (enum reloc_type): Add FIRST_INVALID_RELOC,
	LAST_INVALID_RELOC, R_386_16, R_386_PC16, R_386_8, R_386_PC8.
	(elf_howto_table): Add entries for new relocs.
	(elf_i386_reloc_type_lookup): Handle new relocs.
	(elf_i386_info_to_howto): Just call abort.
	(elf_i386_info_to_howto_rel): Check that the reloc type is valid.
	(elf_i386_relocate_section): Likewise.

Tue Aug  6 12:54:56 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* elf32-d10v.c (elf_d10v_howto_table): Added R_D10V_32.

Mon Aug  5 13:42:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (_bfd_elf_make_section_from_shdr): For a loadable section,
	only get the LMA from the phdr if they are in the same part of the
	file.

	* elf.c (map_sections_to_segments): Rewrite tests for starting a
	new segment to make them more comprehensible.  If the relationship
	between the LMA and the VMA changed, start a new segment.  Don't
	check dynsec when deciding whether to start a new segment for a
	writeable section; -N will now handle this.

Thu Aug  1 22:43:08 1996  Jeffrey A Law  (law@cygnus.com)

	* libhppa.h: Remove "esel" changes.  Not the right approach.
	* som.c: Corresponding changes.
	(som_bfd_derive_misc_symbol_info): Use ST_DATA for symbols
	which don't have a SOM symbol type associated with them.
	Reverses a 1994 change.

Wed Jul 31 15:50:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	Make ld -N more reasonable for ELF:
	* elf.c (map_sections_to_segments): If D_PAGED is not set, set
	phdr_in_section to false, and always use a single load segment.
	(elf_sort_sections): Sort sections by LMA after VMA.
	(assign_file_positions_for_segments): If D_PAGED is not set, don't
	align to maxpagesize.
	(assign_file_positions_except_relocs): Likewise.
	* elfcode.h (elf_object_p): If a section is loaded but not page
	aligned, clear D_PAGED.

Wed Jul 31 15:00:12 1996  James G. Smith  <jsmith@cygnus.co.uk>

	* reloc.c: (BFD_RELOC_ARM_OFFSETIMM8, BFD_RELOC_ARM_HWLITERAL):
 	Added, for internal use by the ARM gas.
	* libbfd.h: Rebuilt
	* bfd-in2.h: Rebuilt

Tue Jul 30 14:14:57 1996  Jeffrey A Law  (law@cygnus.com)

	* libhppa.h (R_HPPA_ESEL): New field selector.
	(e_esel): Similarly.
	* som.c (hppa_som_gen_reloc_type): If we encounter an e_esel,
	then generate R_COMP2 (PUSH_SYM), R_DATA_EXPR fixup stream.
	(som_write_fixups): Handle R_DATA_EXPR just like R_CODE_EXPR.

Tue Jul 30 13:31:27 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (_bfd_xcoff_bfd_link_add_symbols): Do the regular
	archive search before looking for stripped dynamic objects.

Fri Jul 26 17:51:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_build_ldsyms): Make exporting an undefined
	symbol a warning rather than an error.

Wed Jul 24 12:02:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (assign_file_positions_for_segments): Track the virtual
	memory position separately from the file position, and use it to
	compute the alignment adjustment.

Tue Jul 23 10:43:31 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* elf32-d10v.c (elf_d10v_howto_table): Changed all relocs to "long"
 	and fixed mask on R_D10V_10_PCREL_L.

Mon Jul 22 15:30:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf64-mips.c: Include "aout/ar.h".
	(mips_elf64_slurp_armap): New static function.
	(mips_elf64_write_armap): New static function.
	(bfd_elf64_archive_*): Define.
	* elfxx-target.h (bfd_elfNN_archive_p): Define if not defined.
	Use instead of bfd_generic_archive_p.
	(bfd_elfNN_write_archive_contents): Define if not defined.  Use
	instead of _bfd_write_archive_contents.
	(bfd_elfNN_mkdarchive): Define if not defined.  Use instead of
	_bfd_generic_mkarchive.
	(TARGET_BIG_SYM): If bfd_elfNN_archive_functions is defined, use
	bfd_elfNN_archive in BFD_JUMP_TABLE_ARCHIVE rather than
	_bfd_archive_coff.
	(TARGET_LITTLE_SYM): Likewise.
	* archive.c (bfd_slurp_armap): Check for and reject an archive map
	name of /SYM64/.
	* Makefile.in: Rebuild dependencies.

	* elf32-mips.c (_bfd_mips_elf_final_write_processing): Handle
	SHT_MIPS_LIBLIST, SHT_MIPS_CONTENT, SHT_MIPS_SYMBOL_LIB, and
	SHT_MIPS_EVENTS sections.
	(_bfd_mips_elf_section_from_shdr): Handle SHT_MIPS_IFACE,
	SHT_MIPS_CONTENT, SHT_MIPS_SYMBOL_LIB, and SHT_MIPS_EVENTS
	sections.
	(_bfd_mips_elf_fake_sections): Likewise.

	* libecoff.h (ecoff_data_type): Add rdata_in_text field.
	* ecoff.c (ecoff_compute_section_file_positions): Copy
	rdata_in_text from backend info to tdata.  Clear it if any data
	section comes before .rdata.
	(_bfd_ecoff_write_object_contents): Use rdata_in_text field in
	tdata rather than backend info.

Fri Jul 19 18:15:51 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Fix test for whether a compiler has a 64 bit
	type.  From Jim Wilson <wilson@cygnus.com>.

Thu Jul 18 15:39:10 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host (mips-sgi-irix6*): New host.

	* configure.in: Set and substitute VERSION, BFD_HOST_64BIT_LONG
	(replacing HOST_64BITLONG), BFD_HOST_64_BIT_DEFINED,
	BFD_HOST_64_BIT, and BFD_HOST_U_64_BIT.  Add bfd-in2.h:bfd-in2.h
	to AC_OUTPUT call.
	* configure: Rebuild.
	* bfd-in.h (BFD_ARCH_SIZE): Define as @wordsize@, not @WORDSIZE@.
	(BFD_HOST_64_BIT): Define conditionally.
	(BFD_HOST_U_64_BIT): Define when BFD_HOST_64_BIT is defined.
	(bfd_vma): Typedef as BFD_HOST_U_64_BIT.
	(symvalue, bfd_size_type): Likewise.
	* bfd-in2.h: Rebuild.
	* Makefile.in (do_clean): Remove bfd-tmp.h.
	(do_distclean): Remove bfd-in3.h.
	(stmp-bfd.h): Just do copy-if-change bfd-in3.h bfd.h.
	(bfd-in3.h): New target.

	* config.bfd (sparc-*-sysv4*): Don't build sunos_big_vec.  From
	Andrew Gierth <ANDREWG@microlise.co.uk>.

	* configure.host: Set INSTALL_SHLIB.
	* configure.in: Call AC_SUBST (INSTALL_SHLIB).
	* configure: Rebuild.
	* Makefile.in (install): Use @INSTALL_SHLIB@.

	* config.bfd (mips*-*-irix6*): New target.
	* configure.host: Handle Irix 6 shared library like Irix 5.

	* xcofflink.c (xcoff_link_add_symbols): Don't check an XMC_TD
	symbol for a magic name.
	(xcoff_link_input_bfd): Don't change the reloc symbol for an
	XMC_TD symbol.
	(_bfd_ppc_xcoff_relocate_section): Don't get the TOC offset for an
	XMC_TD symbol.

Thu Jul 18 11:36:31 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: Add ELF support to mips config, create the
	elf32-target.h file in the object dir.
	* mpw-make.sed: Edit elfXX-target.h refs at beginnings of lines.

Wed Jul 17 18:02:32 1996  Kim Knuttila  <krk@cygnus.com>

	* coff-ppc.c: Redid debug scheme - numerous fprintf's gone.
	Also removed most abort calls, in favor of using bfd reporting.

Wed Jul 17 14:51:52 1996  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* Makefile.in (ALL_MACHINES): Add cpu-d10v.o.
	(BFD32_BACKENDS) Add elf32-d10v.o.
	* archures.c: Add bfd_d10v_arch.
	* bfd-in2.h: Add bfd_d10v_arch.
	* config.bfd (d10v-*-*): New target.
	* configure: (bfd_elf32_d10v_vec) New vector.
	* configure.in: (bfd_elf32_d10v_vec) New vector.
	* cpu-d10v.c: New file.
	* elf.c (prep_headers): Added case bfd_arch_d10v.
	* elf32-d10v.c: New file.
	* libbfd.h: Rebuild.
	* reloc.c (BFD_RELOC_D10V_10_PCREL_R, BFD_RELOC_D10V_10_PCREL_L,
 	BFD_RELOC_D10V_18, BFD_RELOC_D10V_18_PCREL): Define.
	* targets.c (bfd_elf32_d10v_vec): New vector.

Wed Jul 17 10:58:55 1996  Kim Knuttila  <krk@cygnus.com>

	* coff-ppc.c (coff_ppc_relocate_section): Removed bogus fprintf

Tue Jul 16 23:49:02 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* archures.c bfd-in2.h:  Add bfd_mach_i386_i386 and
	bfd_mach_i386_i8086 machine types.

Wed Jul 10 12:42:56 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (_bfd_ecoff_new_section_hook): Set SEC_CODE for _INIT
	and _FINI sections.

Wed Jul 10 11:18:21 1996  Richard Henderson  <rth@tamu.edu>

	* coffcode.h (coff_set_section_contents): A/UX does not require
	special handling of the _LIB section.

Tue Jul  9 15:52:20 1996  Jeffrey A Law  (law@cygnus.com)

	* coff-h8300.c (h8300_reloc16_extra_cases): Use the correct
	value for R_RELBYTE.

	* reloc16.c (bfd_coff_reloc16_relax_section): Only "shrinks"
	array if one was allocated.

Tue Jul  9 12:21:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	From Kazumoto Kojima <kkojima@kk.info.kanagawa-u.ac.jp>:
	* elf32-mips.c (struct mips_elf_link_hash_table): Add new fields
	use_rld_obj_head and rld_value.
	(mips_elf_link_hash_table_create): Initialize new fields.
	(mips_elf_add_symbol_hook): Mark __rld_obj_head symbol as
	dynamic.
	(mips_elf_create_dynamic_sections): Create .rld_map section.  If
	__rld_obj_head symbol not seen, create an __rld_map symbol.
	(mips_elf_size_dynamic_sections): Make space in .rld_map section.
	Create a DT_MIPS_RLD_MAP entry rather than a DT_DEBUG entry.
	(mips_elf_finish_dynamic_symbol): Save value of __rld_map or
	__rld_obj_head symbol.
	(mips_elf_finish_dynamic_sections): Handle DT_MIPS_RLD_MAP.

Mon Jul  8 16:18:03 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_reloc_map): Remove BFD_RELOC_32_PCREL entry.

	* elf32-ppc.c (ppc_elf_howto_raw): For R_PPC_ADDR16_HA, use
	ppc_elf_addr16_ha_reloc.
	(ppc_elf_addr16_ha_reloc): New static function.

	* coff-mips.c (struct mips_hi): Define.
	(mips_refhi_list): New static variable.
 	(mips_refhi_addr, mips_refhi_addend): Remove.
	(mips_refhi_reloc): Maintain a list of unmatched REFHI relocs.
	(mips_reflo_reloc): Process mips_refhi_list.
	(mips_relhi_list): New static variable.
	(mips_relhi_addr, mips_relhi_addend): Remove.
	(mips_relhi_reloc): Maintain a list of unmatched RELHI relocs.
	(mips_rello_reloc): Process mips_relhi_list.
	(mips_relocate_section): Permit an arbitrary number of REFHI or
	RELHI relocs before the associated REFLO or RELLO reloc.

Fri Jul  5 19:27:49 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aout-target.h (MY(callback)): Set reloc_count fields.

Thu Jul  4 12:00:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (sunos_add_dynamic_symbols): Don't create dynamic
	sections unless this is a SunOS link.

	* VERSION: Set to 2.7.1.

	* Released binutils 2.7.

Wed Jul  3 14:59:47 1996  Ian Lance Taylor  <ian@cygnus.com>

	* i386aout.c: Include "aout/aout64.h".
 	(i386aout_write_object_contents): New static function.
	(MY_write_object_contents): Define.

	* netbsd.h (MY(write_object_contents)): Make sure that
	adjust_sizes_and_vmas is called before fiddling with the magic
	number.

Tue Jul  2 23:30:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (_bfd_link_section_stabs): Fix casts of psinfo.

Sun Jun 30 13:34:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* libbfd-in.h (itos, stoi): Don't define.
	* libbfd.h: Rebuild.
	* i386lynx.c (KEEPIT): Define as udata.i.
	(NAME(lynx,swap_std_reloc_out)): Don't use stoi.
	(NAME(lynx,swap_ext_reloc_out)): Likewise.
	* riscix.c (riscix_swap_std_reloc_out): Use udata.i rather than
	flags.  Don't use stoi.

	* elf32-mips.c (ELF_MAGPAGESIZE): Change definition to 0x1000.

	* elf.c (map_sections_to_segments): Don't start a new segment for
 	a writable section if it's on the same page as the previous
 	segment.  Reset the writable variable for a readonly section.

Sat Jun 29 16:18:51 1996  Kim Knuttila  <krk@cygnus.com>

	* peicode.h (coff_swap_aouthdr_in): Missing initializations of
	first_thunk_address, thunk_size, and import_table_size.
	* peicode.h: Improved some diagnostics regarding edata sections.

	* coff-ppc.c (coff_ppc_relocate_section): Earlier error check
	on IMGLUE relocs.
	(coff_ppc_relocate_section): Improved diagnostic for large TOCDEFN's.
	(TARGET_LITTLE_SYM): Added missing D_PAGED.

Fri Jun 28 13:48:45 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_check_ar_symbols): An undefined symbol
	with XCOFF_DEF_DYNAMIC set is really defined.
	(xcoff_link_check_dynamic_ar_symbols): Likewise.
	(xcoff_link_add_symbols): Only create special sections if using an
	XCOFF hash table.

	* reloc.c (bfd_perform_relocation): Handle xcoff-powermac like
	aixcoff-rs6000.
	(bfd_install_relocation): Likewise.

Fri Jun 28 11:17:00 1996  Richard Henderson  <rth@tamu.edu>

	* elf64-alpha.c (struct alpha_elf_link_hash_entry): Add flags
	field.
	(ALPHA_ELF_LINK_HASH_LU_ADDR): Define.
	(ALPHA_ELF_LINK_HASH_LU_MEM): Define.
	(ALPHA_ELF_LINK_HASH_LU_FUNC): Define.
	(elf64_alpha_link_hash_newfunc): Initialize flags field.
	(elf64_alpha_check_relocs): Record types of LITUSE entries that
	are found for LITERAL relocs.
	(elf64_alpha_adjust_dynamic_symbol): If a symbol has its address
	taken, we cannot generate a .plt entry for the symbol.

Thu Jun 27 11:24:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add AC_ISC_POSIX, and check for setitimer and
	sysconf functions (for gprof).
	* configure, config.in: Rebuild.

Wed Jun 26 16:29:02 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (_bfd_ecoff_archive_p): Check the first object file in
	an archive if it has a map.  If the object file has the wrong
	xvec, reject it.

	* coff-alpha.c (alpha_adjust_reloc_in): Set the addend for a
	BRADDR, SREL16, SREL32, or SREL64 reloc against an external
	symbol.
	(alpha_relocate_section): Likewise.

	* coffswap.h (coff_swap_reloc_out): Use RELSZ, not sizeof.
	(coff_swap_filehdr_out): Use FILHSZ, not sizeof.
	(coff_swap_sym_out): Use SYMESZ, not sizeof.
	(coff_swap_aux_out): Use AUXESZ, not sizeof.
	(coff_swap_lineno_out): Use LINESZ, not sizeof.
	(coff_swap_aouthdr_out): Use AOUTSZ, not sizeof.
	(coff_swap_scnhdr_out): Use SCNHSZ, not sizeof.
	* peicode.h: Corresponding changes.

Tue Jun 25 15:28:34 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elflink.h (elf_create_pointer_linker_section): Comment out code
	dealing with making GOT pointers negative of the GOT symbol for
	now.

Tue Jun 25 11:41:24 1996  Richard Henderson  <rth@tamu.edu>

	* elf64-alpha.c (elf64_alpha_adjust_dynamic_symbol): Don't
	increment the .rela.plt size until after we're done creating the
	.plt entry.
	(elf64_alpha_finish_dynamic_symbol): Change .plt entry to load the
	.rela.plt offset directly rather than calculating it.

Mon Jun 24 17:15:10 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

        * Makefile.in (bindir, libdir, datadir, mandir, infodir, includedir):
	Use autoconf-set values.
        * doc/Makefile.in (bindir, libdir, datadir, mandir, infodir,
	includedir, INSTALL, INSTALL_PROGRAM, INSTALL_DATA): Use autoconf-set
	values.
        (docdir): Deleted.
        * configure.in (AC_PREREQ): autoconf v2.5 or higher.
        * configure: Rebuilt.

Mon Jun 24 22:50:35 1996  Jeffrey A Law  (law@cygnus.com)

	* som.c (som_write_fixups): Fix typo in R_END_TRY for exception
	handling code > 1k away.

Mon Jun 24 18:41:06 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elflink.h (elf_create_pointer_linker_section): If DEBUG is
	defined, output whenever the symbol is updated.

Mon Jun 24 17:58:12 1996  Jouke Numan  <jnuman@bazis.nl>

	* elf.c (elf_fake_sections): Don't set sh_addr of a non SEC_ALLOC
	section to 0 if user_set_vma is set.
	* elflink.h (elf_bfd_final_link): Likewise.

Sun Jun 23 20:42:51 1996  Doug Evans  <dje@canuck.cygnus.com>

	Partially undo patch of Jun 20.
	* coffcode.h (coff_set_alignment_hook): Use COFF_IMAGE_WITH_PE.
	(coff_compute_section_file_positions): Likewise.
	(coff_write_object_contents): Likewise.  Re-add deleted code, but
	use #ifdef COFF_WITH_PE, not COFF_OBJ_WITH_PE.
	* peicode.h (pe_bfd_copy_private_bfd_data): Re-add #ifdef.

Fri Jun 21 17:38:15 1996  Joel Sherrill  <joel@merlin.gcs.redstone.army.mil>

	* config.bfd: Add support for *-*-rtems* configurations.

Fri Jun 21 15:19:59 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (prep_headers): Add bfd_arch_alpha case.

Fri Jun 21 12:35:27 1996  Richard Henderson  <rth@tamu.edu>

	* elf64-alpha.c: New file.
	* config.bfd (alpha-*-linuxecoff*): New target.
	(alpha-*-linux*, alpha-*-elf*): New targets.
	* configure.in (bfd_elf64_alpha_vec): New vector.
	* configure: Rebuild.
	* targets.c (bfd_elf64_alpha_vec): Declare.
	(bfd_target_vector): Add bfd_elf64_alpha_vec if BFD64.
	* reloc.c (BFD_RELOC_ALPHA_GPDISP): Define.
	* bfd-in2.h, libbfd.h: Rebuild.
	* Makefile.in: Rebuild dependencies.
 	(BFD64_BACKENDS): Add elf64-alpha.o.
	(BFD64_BACKENDS_CFILES): Add elf64-alpha.c.

Thu Jun 20 18:14:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (ecoff_armap_hash): If hlog is 0, just return 0, rather
	than relying on a right shift of 32.

Thu Jun 20 11:00:57 1996  Doug Evans  <dje@canuck.cygnus.com>

	* coffcode.h (coff_set_alignment_hook): Change COFF_IMAGE_WITH_PE
	ifdef to COFF_WITH_PE.
	(coff_compute_section_file_positions): Likewise.
	(coff_write_object_contents): Likewise.  Delete COFF_OBJ_WITH_PE.
	* pe-{arm,i386,ppc}.c (COFF_OBJ_WITH_PE): Delete.
	* peicode.h (pe_bfd_copy_private_bfd_data): Delete ifdef
	COFF_IMAGE_WITH_PE, always include.

	* peicode.h (coff_swap_scnhdr_out): ".drectve" doesn't have trailing 0.

Wed Jun 19 11:37:52 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (map_sections_to_segments): Fix up the test for -Ttext to
	approximate the correct answer if SIZEOF_HEADERS was not used.

	* binary.c (binary_set_section_contents): Set section file
	position based on LMA rather than VMA.

Wed Jun 19 11:19:25 1996  Manfred Hollstein KS/EIC5 60/3/142 #40283  <manfred@lts.sel.alcatel.de>

	* linker.c (_bfd_generic_link_output_symbols): Don't output any
	symbols if info->strip == strip_all.

Tue Jun 18 15:17:36 1996  Jeffrey A. Law  <law@rtl.cygnus.com>

	* coff-h8300.c: Remove #if 0 code.
	(compatable): Don't allow mixing/matching of different architectures.

	* archures.c (bfd_mach_h8300s): Add.
	* bfd-in2.h: Rebuilt.
	* coff-h8300.c (funcvec_hash_newfunc): Handle H8/S too.
	(BADMAG): Likewise.
	(h8300_reloc16_estimate): Likewise.
	(h8300_reloc16_extra_cases): Likewise.
	(h8300_bfd_link_add_symbols): Likewise.
	* coffcode.h (coff_set_arch_mach_hook): Likewise.
	(coff_set_flags): Likewise.
	* cpu-h8300.c (h8300_scan): Likewise.
	Add H8/S to bfd_h8300_arch list.

Tue Jun 18 14:42:58 1996  Klaus Kaempf  <kkaempf@progis.de>

	Added support for Alpha OpenVMS:
	* evax.h, evax-alpha.c, evax-egsd.c, evax-emh.c: New files.
	* evax-etir.c, evax-misc.c, hosts/alphavms.h: New files.
	* config.h-vms, makefile.vms: New files.
	* config.bfd (alpha-*-*vms*): New target.
	* configure.in (evax_alpha_vec): New target vector.
	* configure: Rebuild.
	* reloc.c (BFD_RELOC_SWREL32, BFD_RELOC_SWREL64): Define.
	(BFD_RELOC_ALPHA_LINKAGE, BFD_RELOC_ALPHA_BASEREG): Define.
	* targets.c (bfd_target_evax_flavour): Define.
	(evax_alpha_vec): Declare.
	(bfd_target_vector): Add ecoffalpha_little_vec and evax_alpha_vec
	if BFD64 is defined.
	* bfd-in2.h, libbfd.h: Rebuild.
	* Makefile.in: Rebuild dependencies.
	(BFD64_BACKENDS): Add evax-alpha.o, evax-egsd.o, evax-etir.o,
	evax-emh.o, and evax-misc.o.
	(BFD64_BACKENDS_CFILES): Add evax-alpha.c, evax-egsd.c,
	evax-etir.c, evax-emh.c, and evax-misc.c.
	(HFILES): Add evax.h.

Tue Jun 18 13:54:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coff-h8300.c (h8300_reloc16_extra_cases): Make name a const
	pointer.
	(h8300_bfd_link_add_symbols): Likewise.

Mon Jun 17 10:06:50 1996  Jeffrey A. Law  <law@rtl.cygnus.com>

	* som.h (R_HPPA_BEGIN_TRY, R_HPPA_END_TRY): Define.
	* som.c (som_write_fixups): Handle R_BEGIN_TRY and R_END_TRY.

Mon Jun 17 12:49:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_relocate_section): Don't create a reloc
	for R_MIPS_REL32 and R_MIPS_32 relocs if no dynamic sections were
	created.
	(mips_elf_check_relocs): Only create .rel.dyn for R_MIPS_REL32 and
	R_MIPS_32 relocs if creating a shared library.

Thu Jun 13 20:14:51 1996  Doug Evans  <dje@canuck.cygnus.com>

	* peicode.h (add_data_entry): Use pei_section_data rather than
	_cooked_size.  Corresponds to May 13 change in coffcode.h.

Thu Jun 13 10:23:40 1996  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (_bfd_coff_final_link): Handle long section names.
	* coffcode.h (coff_write_object_contents): If there are long
	section names, always set the f_symptr field, even if there are no
	symbols.
	* peicode.h (coff_swap_filehdr_in): Don't clear the f_symptr field
	if there are no symbols.

	* coffgen.c (make_a_section_from_file): Check return value of
	_bfd_coff_read_string_table.
	(coff_real_object_p): Check return value of
	make_a_section_from_file.
	(_bfd_coff_read_string_table): Check that there are some symbols
	before trying to read the string table size.

Wed Jun 12 11:16:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_add_symbols): When considering whether
	to replace a symbol in a dynamic object with a symbol from another
	dynamic object, do the replacement if the existing symbol is
	global linkage code.

	* xcofflink.c (_bfd_ppc_xcoff_relocate_section): Check explicitly
	for _ptrgl, and treat it as global linkage code.

	* aoutx.h (NAME(aout,find_nearest_line)): Notice if we find a
	filename or N_SO symbol past the offset, and use it to indicate
	that there is no line number or function when appropriate.

Tue Jun 11 15:24:48 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_build_ldsyms): Set XCOFF_DEF_REGULAR for a
	common symbol defined by the linker.  Don't export function code
	even if export_defineds is set.

Mon Jun 10 11:57:27 1996  Jeffrey A Law  (law@cygnus.com)

	* coff-h8300.c (howto_table): Add new entries for R_BCC_INV
	and R_JMP_DEL.
	(rtype2howto): Handle R_BCC_INV and R_JMP_DEL.
	(h8300_symbol_address_p): New function.
	(h8300_reloc16_estimate): Eliminate jumps made unnecessary by
	relaxing.

Sun Jun  9 16:30:20 1996  Jeffrey A Law  (law@cygnus.com)

	* coff-h8300.c (h8300_reloc16_estimate): Fix many minor spacing
	problems.
	(h8300_reloc16_estimate, cases R_JMP1, R_JMP2): Adjust "dot"
	correctly for the two variants.  Allow relaxing if the target
	is 128 bytes away since after relaxation it'll be 126 bytes away.
	(h8300_reloc16_estimate, case R_PCRWORD): Correctly adjust
	"dot" and "value".  Allow relaxing if the target is 128 bytes
	away since after relaxation it'll be 126 bytes away.
	* reloc16.c (bfd_coff_reloc16_relax_section): Keep relaxing
	the given section until nothing changes.

Thu Jun  6 15:24:45 1996  Richard Henderson  <rth@tamu.edu>

	* ecoff.c (_bfd_ecoff_new_section_hook): Remove the _PDATA
 	alignment hack--we can get the lnnoptr info another way without
 	suddenly increasing the alignment requirements.  Set the flags for
	the _PDATA section.
	(ecoff_compute_section_file_positions): Do so.

Thu Jun  6 11:24:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_write_object_contents): Put a timestamp in the file
	to keep the HP emulator database happy.

	* config.bfd: Recognize powerpc-*-linux* and powerpcle-*-linux*.
	From Kevin Buettner <kev@primenet.com>.

Wed Jun  5 15:16:04 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (translate_to_native_sym_flags): Don't try to print the
	name of a NULL section.

Tue Jun  4 18:53:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* linker.c (_bfd_generic_link_add_one_symbol): If notice_all is
	set, always call the notice callback.

	* VERSION: Increment for bfdlink.h change.

Mon Jun  3 11:01:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c (COFF_DEFAULT_SECTION_ALIGNMENT_POWER): Set to 4.
	(sh_relax_delete_bytes): Correct handling of differently sized
	trailing alignment reloc.

	* bfd-in.h: Use #error if BFD_HOST_64_BIT can not be defined.
	* bfd-in2.h: Rebuild.
	* configure.in: Warn if there is no known 64 bit type.
	* configure: Rebuild.

	* Makefile.in: Rebuild dependencies.
 	(BFD32_BACKENDS): Add ppcboot.o.
	(BFD32_BACKENDS_CFILES): Add ppcboot.c.

	* elf32-mips.c (mips_elf_size_dynamic_sections): Initialize c.
	From Per Fogelstrom <per.fogelstrom@mailbox200.swipnet.se>.

Sat Jun  1 21:49:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf64-mips.c (bfd_mips_elf64_swap_reginfo_in)
	(bfd_mips_elf64_swap_reginfo_out): Move from here...
	* elf32-mips.c (bfd_mips_elf64_swap_reginfo_in)
	(bfd_mips_elf64_swap_reginfo_out): ...to here.

Fri May 31 13:51:28 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf64-mips.c: Improve reloc special_functions and handling of
	SHT_MIPS_OPTIONS section.
	* elf32-mips.c (_bfd_mips_elf_hi16_reloc): Rename from
	mips_elf_hi16_reloc and make globally visible.
	(_bfd_mips_elf_lo16_reloc): Rename from mips_elf_lo16_reloc and
	make globally visible.
	(_bfd_mips_elf_got16_reloc): Rename from mips_elf_got16_reloc and
	make globally visible.
	(_bfd_mips_elf_gprel16_reloc): Rename from mips_elf_gprel16_reloc
	and make globally visible.
	(gprel16_with_gp): Check howto->src_mask before using value in
	insn.
	(_bfd_mips_elf_gprel32_reloc): Rename from mips_elf_gprel32_reloc
	and make globally visible.
	(gprel32_with_gp): Check howto->src_mask before fetching value.
	(bfd_mips_elf_swap_options_in): New function.
	(bfd_mips_elf_swap_options_out): New function.
	(_bfd_mips_elf_set_private_flags): Rename from
	mips_elf_set_private_flags and make globally visible.
	(_bfd_mips_elf_copy_private_bfd_data): Rename from
	mips_elf_copy_private_bfd_data and make globally visible.
	(_bfd_mips_elf_merge_private_bfd_data): Rename from
	mips_elf_merge_private_bfd_data and make globally visible.
	(_bfd_mips_elf_section_from_shdr): Accept .MIPS.options as a name
	for a SHT_MIPS_OPTIONS section.
	(mips_elf32_section_from_shdr): Handle SHT_MIPS_OPTIONS section.
	(_bfd_mips_elf_fake_sections): Consider .MIPS.options to be the
	name of a SHT_MIPS_OPTIONS section.
	(_bfd_mips_elf_set_section_contents): New function.
	(mips_elf32_section_processing): Set the GP value in a
	SHT_MIPS_OPTIONS section.
	(_bfd_mips_elf_find_nearest_line): Rename from
	mips_elf_find_nearest_line and make globally visible.
	(bfd_elf32_set_section_contents): Define.
	* elf-bfd.h (_bfd_mips_elf_hi16_reloc): Declare.
	(_bfd_mips_elf_lo16_reloc): Declare.
	(_bfd_mips_elf_gprel16_reloc): Declare.
	(_bfd_mips_elf_got16_reloc): Declare.
	(_bfd_mips_elf_gprel32_reloc): Declare.
	(_bfd_mips_elf_set_private_flags): Declare.
	(_bfd_mips_elf_copy_private_bfd_data): Declare.
	(_bfd_mips_elf_merge_private_bfd_data): Declare.
	(_bfd_mips_elf_find_nearest_line): Declare.
	(_bfd_mips_elf_set_section_contents): Declare.

	* elf32-hppa.c (elf32_hppa_info_to_howto): Rename from
	elf_info_to_howto.
	(elf_info_to_howto): Define.
	* elf32-sparc.c (elf32_sparc_info_to_howto): Rename from
	elf_info_to_howto.
	(elf_info_to_howto): Define.
	* elf64-sparc.c (sparc64_elf_info_to_howto): Rename from
	elf_info_to_howto.
	(elf_info_to_howto): Define.

	* coff-w65.c (h8300_reloc16_estimate): Rename R_MOVB[12] to
	R_MOV16B[12], to match change in coff/internal.h.

Thu May 30 12:38:49 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf64-mips.c: Extensive additions to provide better support for
	writing files and for gas.
	* elf32-mips.c (_bfd_mips_elf_object_p): New function, broken out
	of mips_elf_object_p.
	(mips_elf32_object_p): Rename from mips_elf_object_p; call
	_bfd_mips_elf_object_p.
	(_bfd_mips_elf_final_write_processing): Rename from
	mips_elf_final_write_processing and make globally visible.
	(_bfd_mips_elf_fake_sections): Rename from
	mips_elf_fake_sections and make globally visible.
	(_bfd_mips_elf_section_from_bfd_section): Rename from
	mips_elf_section_from_bfd_section and make globally visible.
	(_bfd_mips_elf_section_processing): New function, broken out of
	mips_elf_section_processing.
	(mips_elf32_section_processing): Rename from
	mips_elf_section_processing; call
	_bfd_mips_elf_section_processing.
	(_bfd_mips_elf_symbol_processing): Rename from
	mips_elf_symbol_processing and make globally visible.
	(_bfd_mips_elf_read_ecoff_info): Rename from
	mips_elf_read_ecoff_info and make globally visible.
	(mips_elf32_ecoff_debug_swap): Rename from
	mips_elf_ecoff_debug_swap.
	* elf.c (_bfd_elf_symbol_from_bfd_symbol): Use asymbol rather than
	struct symbol_cache_entry.
	(_bfd_elf_validate_reloc): New function, moved in from
	elfcode.h:validate_reloc.
	* elfcode.h (validate_reloc): Remove; moved into elf.c and renamed
	to _bfd_elf_validate_reloc.  Change all callers.
	* elf-bfd.h (bfd_section_from_shdr): Declare.
	(_bfd_elf_symbol_from_bfd_symbol): Declare.
	(_bfd_elf_validate_reloc): Declare.
	(_bfd_mips_elf_object_p): Declare.
	(_bfd_mips_elf_fake_sections): Declare.
	(_bfd_mips_elf_section_from_bfd_section): Declare.
	(_bfd_mips_elf_section_processing): Declare.
	(_bfd_mips_elf_symbol_processing): Declare.
	(_bfd_mips_elf_read_ecoff_info): Declare.
	(_bfd_mips_elf_final_write_processing): Declare.
	* elfxx-target.h (bfd_elfNN_get_reloc_upper_bound): Don't define
	if already defined.

	* elf32-mips.c (mips_elf_object_p): Handle E_MIPS_ARCH_4.
	(mips_elf_final_write_processing): Likewise.

Wed May 29 16:15:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	64-bit MIPS ELF ABI objdump support:
	* elf64-mips.c: New file.
	* Makefile.in: Rebuild dependencies.
 	(BFD64_BACKENDS): Add elf64-mips.o.
	(BFD64_BACKENDS_CFILES): Add elf64-mips.c.
	* config.bfd (mips*el-*-elf*) Add bfd_elf64_bigmips_vec and
	bfd_elf64_littlemips_vec to targ_selvecs.
	(mips*-*-elf*): Likewise.
	* configure.in: Add bfd_elf64_bigmips_vec and
	bfd_elf64_littlemips_vec to vector switch.
	* configure: Rebuild.
	* elf32-mips.c (_bfd_mips_elf_section_from_shdr): New function,
	broken out of mips_elf_section_from_shdr.
	(mips_elf32_section_from_shdr): Rename from
	mips_elf_section_from_shdr.  Call new function.
	(elf_backend_section_from_shdr): Update name of renamed function.
	* elf-bfd.h (struct elf_size_info): Change second parameter of
	write_out_phdrs to be const.  Likewise for second parameter of
	swap_symbol_out.
	(struct bfd_elf_section_data): Add rel_hdr2 field.
	(bfd_elf32_swap_symbol_in): Change second parameter to be const.
	(bfd_elf32_swap_symbol_out): Likewise.
	(bfd_elf32_swap_reloc_in): Likewise.
	(bfd_elf32_swap_reloc_out): Likewise.
	(bfd_elf32_swap_reloca_in): Likewise.
	(bfd_elf32_swap_reloca_out): Likewise.
	(bfd_elf32_swap_phdr_in): Likewise.
	(bfd_elf32_swap_phdr_out): Likewise.
	(bfd_elf32_swap_dyn_in): Likewise.
	(bfd_elf32_swap_dyn_out): Likewise.
	(bfd_elf32_slurp_symbol_table): Declare.
	(bfd_elf32_write_shdrs_and_ehdr): Declare.
	(bfd_elf32_write_out_phdrs): Declare.
	(bfd_elf64_swap_symbol_in): Change second parameter to be const.
	(bfd_elf64_swap_symbol_out): Likewise.
	(bfd_elf64_swap_reloc_in): Likewise.
	(bfd_elf64_swap_reloc_out): Likewise.
	(bfd_elf64_swap_reloca_in): Likewise.
	(bfd_elf64_swap_reloca_out): Likewise.
	(bfd_elf64_swap_phdr_in): Likewise.
	(bfd_elf64_swap_phdr_out): Likewise.
	(bfd_elf64_swap_dyn_in): Likewise.
	(bfd_elf64_swap_dyn_out): Likewise.
	(bfd_elf64_slurp_symbol_table): Declare.
	(bfd_elf64_write_shdrs_and_ehdr): Declare.
	(bfd_elf64_write_out_phdrs): Declare.
	(_bfd_mips_elf_section_from_shdr): Declare.
	* elf.c (bfd_section_from_shdr): Remove assertion requiring
	SHT_REL/SHT_RELA to match use_rela_p.  If there is already a reloc
	section for the section, add the new one to rel_hdr2.  Increment
	reloc_count rather than setting it.
	* elfcode.h (elf_slurp_symbol_table): Define name as macro.
	Remove static declaration.
	(elf_write_shdrs_and_ehdr): Define name as macro.
	(elf_write_out_phdrs): Likewise.
	(elf_swap_ehdr_in, elf_swap_ehdr_out): Declare.
	(elf_swap_shdr_in, elf_swap_shdr_out): Declare.
	(elf_swap_symbol_in): Change second parameter to be const.
	(elf_swap_symbol_out): Likewise.
	(elf_swap_ehdr_in, elf_swap_ehdr_out): Likewise.
	(elf_swap_shdr_in, elf_swap_shdr_out): Likewise.
	(elf_swap_phdr_in, elf_swap_phdr_out): Likewise.
	(elf_swap_reloc_in, elf_swap_reloc_out): Likewise.
	(elf_swap_reloca_in, elf_swap_reloca_out): Likewise.
	(elf_write_out_phdrs): Rename from write_out_phdrs.  Change second
	parameter to be const.  Make non-static.
	(elf_write_shdrs_and_ehdr): Rename from write_shdrs_and_ehdr.
	Make non-static.
	(elf_slurp_symbol_table): Make non-static.
	(NAME(_bfd_elf,size_info)): Update names of renamed functions.
	* elfxx-target.h (elf_info_to_howto): Define if not defined.
	(elf_backend_size_info): Likewise.
	(elfNN_bed): Use elf_backend_size_info.
	* targets.c (bfd_elf64_bigmips_vec): Declare.
	(bfd_elf64_littlemips_vec): Declare.
	(bfd_target_vector): Add bfd_elf64_bigmips_vec and
	bfd_elf64_littlemips_vec if BFD64 is defined.

	* libbfd.c (bfd_get_file_window): Add cast to fprintf argument.

Tue May 28 11:42:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c (sh_relax_delete_bytes): Insert nop instructions, not
	zeroes, in alignment holes.

	* configure: Rebuild with autoconf 2.10.

	* aoutx.h (NAME(aout,find_nearest_line)): Make room for the
	potential leading underscore in the allocated buffer.

Fri May 24 14:28:38 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_add_symbol_hook): Do not put small common
	symbols into .sbss if this is a relocatable link.

Thu May 23 12:26:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (_bfd_ppc_xcoff_relocate_section): Warn about
	undefined symbols when creating a shared library.

Fri May 17 13:54:15 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c: Add a bunch of new code and static const arrays to
	support aligning loads and stores on four byte memory boundaries.
	Also:
	(sh_coff_howtos): Add entries for R_SH_CODE, R_SH_DATA and
	R_SH_LABEL.
	(sh_relax_section): Look for R_SH_CODE relocs.  If we find one,
	call sh_align_loads.
	(sh_relax_delete_bytes): Don't mark R_SH_CODE or R_SH_DATA relocs
	as unused.

Thu May 16 16:34:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* cache.c (bfd_open_file): Unlink the file before opening it for
	write.  From Marty Leisner <leisner@sdsp.mc.xerox.com>.

	* opncls.c (bfd_fdopenr): Set opened_once.

Tue May 14 12:35:32 1996  Ian Lance Taylor  <ian@cygnus.com>

	* som.c (som_slurp_reloc_table): Clear external_relocs cache after
	freeing it.

	* libbfd.c: Remove #ifdef FILE_OFFSET_IS_CHAR_INDEX, and compile
	the code unconditionally.

Mon May 13 19:51:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* libcoff-in.h (struct pei_section_tdata): Define structure.
	(pei_section_data): Define macro.
	* libcoff.h: Rebuild.
	* coffcode.h (coff_set_alignment_hook): If COFF_IMAGE_WITH_PE,
	store s_paddr field in pei_section_data.
	(coff_compute_section_file_positions): Use pei_section_data rather
	than _cooked_size, and don't overwrite an existing value.
	(coff_write_object_contents): If COFF_OBJ_WITH_PE, set s_paddr to
	0.  If COFF_IMAGE_WITH_PE, set s_paddr to pei_section_data.
	* peicode.h (coff_bfd_copy_private_section_data): Define if
	COFF_IMAGE_WITH_PE.
 	(pe_bfd_copy_private_section_data): New static function if
	COFF_IMAGE_WITH_PE.

Wed May  8 16:10:38 1996  Ian Lance Taylor  <ian@cygnus.com>

	* srec.c (srec_set_arch_mach): Write as a function rather than a
	macro definition.

	* xcofflink.c (_bfd_xcoff_bfd_link_add_symbols): If an archive has
	no map, just check each member in turn to see whether it is
	required.

Wed May  8 09:17:34 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ppcboot.c (ppcboot_object_p): Check for type 0x41 in partition
	table.  Call BFD_ASSERT to validate header size, instead of
	calling fatal.
	(ppcboot_bfd_print_private_bfd_data): Put quotes around partition
	name.

Tue May  7 16:10:19 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ppcboot.c: New target for looking at PPCbug boot records.

	* config{ure.in,.bfd}: Add support for ppcboot target.
	* targets.c: Ditto.
	* configure: Regenerate.

Tue May  7 11:15:19 1996  Jeffrey A Law  (law@cygnus.com)

	* coff-h8300.c (howto_table): Update names to match recent
	changes to include/coff/internal.h.  Fix minor errors in the
	existing relocs.  Add R_MOVL1 and R_MOVL2.
	(rtype2howto): Similarly.
	(h8300_reloc16_estimate): Rewrite to simplify, fix bugs in the
	existing relaxing code  and peform more relaxing.
	(h8300_reloc16_extra_cases): Likewise.

Mon May  6 18:24:09 1996  Jeffrey A Law  (law@cygnus.com)

	* reloc16.c (bfd_coff_reloc16_get_value): Handle common
	symbols correctly.

Sat May  4 05:08:45 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elfcode.h (elf_object_p):  Reject generic ELF target if
	e_machine matches an alternate machine code in a specific backend.

	* netbsd-core.c (netbsd_core_vec):  Remove initializer for
	obsolete align_power_min field.

Fri May  3 13:07:35 1996  Jeffrey A Law  (law@cygnus.com)

	* coff-h8300.c (reloc_howto_type): Add howto entry for
	R_PCRWORD_B.
	(rtype2howto): Handle R_PCRWORD_B.
	(h8300_reloc16_extra_cases): Handle R_PCRWORD_B.
	(h8300_reloc_16_estimate): Likewise.  Try to turn a 16bit
	pc-relative branch (R_PCRWORD) into an 8bit pc-relative
	branch (R_PCWORD_B).

Fri May  3 10:47:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (translate_from_native_sym_flags): Set the section for
	BSF_CONSTRUCTOR symbols.

	* cofflink.c (_bfd_coff_link_input_bfd): Correct setting of
	last_bf_index.

Wed May  1 18:39:32 1996  Doug Evans  <dje@canuck.cygnus.com>

	* coffcode.h (coff_write_object_contents): In comdat section lookup,
	stop looking when section is found.

Wed May  1 14:17:57 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (STRING_SIZE_SIZE): Define.
	(styp_to_sec_flags): Handle long symbol names when looking for the
	section symbol.
	(bfd_coff_backend_data): Add _bfd_coff_long_section_names field.
	(bfd_coff_long_section_names): Define.
	(coff_write_object_contents): Handle long section names.
	(bfd_coff_std_swap_table): Initialize new field.
	* libcoff.h: Rebuild.
	* coffgen.c (make_a_section_from_file): Handle long section
	names.
	(coff_write_symbols): Handle long section names.
	* coff-alpha.c (alpha_ecoff_backend_data): Initialize new field.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.
	* pe-arm.c (COFF_LONG_SECTION_NAMES): Define.
	* pei-arm.c (COFF_LONG_SECTION_NAMES): Define.
	* pe-i386.c (COFF_LONG_SECTION_NAMES): Define.
	* pei-i386.c (COFF_LONG_SECTION_NAMES): Define.
	* pe-ppc.c (COFF_LONG_SECTION_NAMES): Define.
	* pei-ppc.c (COFF_LONG_SECTION_NAMES): Define.

	* bout.c (b_out_callback): Set lma of sections.
	(b_out_bfd_get_relocated_section_contents): Rename in_abfd
	parameter to output_bfd.  Used input_bfd instead of output_bfd in
	several places.

Tue Apr 30 17:56:39 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (translate_from_native_sym_flags): Don't create
	SEC_CONSTRUCTOR sections.
	* ecoff.c (ecoff_set_symbol_info): Likewise.

	* elf32-mips.c (mips_elf_copy_private_bfd_data): Copy elf_gp.
	From Don Bowman <bowman@waterloo.hp.com>.

Tue Apr 30 17:06:32 1996  Doug Evans  <dje@canuck.cygnus.com>

	* coff-arm.c (armcoff_little_vec): If COFF_WITH_PE is defined, add
	SEC_LINK_ONCE and SEC_LINK_DUPLICATES to section_flags.

Mon Apr 29 13:15:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (struct mips_elf_link_hash_entry): Add
	mips_32_relocs field.
	(mips_elf_link_hash_newfunc): Initialize mips_32_relocs field.
	(mips_elf_relocate_section): Copy R_MIPS_REL32 and R_MIPS_32
	relocs against a global symbol which is not defined in a regular
	file.
	(mips_elf_check_relocs): For a R_MIPS_REL32 or R_MIPS_32 reloc
	against a global symbol, increment mips_32_relocs.
	(mips_elf_adjust_dynamic_symbol): If mips_32_relocs is set, and
	the symbol is not defined in a regular file, make room in the
	.rel.dyn section.

Fri Apr 26 18:00:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (ecoff_compute_section_file_positions): Track the real
	file position and the virtual file position separately.  Set
	filepos information bsaed on the real file position.
	(_bfd_ecoff_set_section_contents): Handle .lib sections like the
	Jan 23 change to coffcode.h.

	* som.c (som_slurp_symbol_table): Set the symbol count to the
	number of BFD symbols created.

Fri Apr 26 12:34:29 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_check_relocs): Forward relocations to the
	output file if linking shared objects.  Loop to check all relocs,
	rather than returning false on first error.

Thu Apr 25 13:25:12 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_create_linker_section): Add PLT case.
	(ppc_elf_additional_program_headers): If .interp section, bump #
	of program headers by 1.
	(ppc_elf_adjust_dynamic_symbol): Flesh out support.
	(ppc_elf_size_dynamic_sections): Add support for .plt section.
	(ppc_elf_check_relocs): Print out filename in debug code.  Enable
	PLT support.
	(ppc_elf_finish_dynamic_symbol): Add support for PLT's, beef up
	debug output.
	(ppc_elf_relocate_section): If the output section isn't defined,
	don't abort, just give an error message.

	* elflink.c (_bfd_elf_create_dynamic_sections): If the section
	being created is .sdata or .sdata2, don't make the symbol dynamic.

Wed Apr 24 14:04:07 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (_bfd_xcoff_bfd_link_add_symbols): Look through the
	members of an archive for dynamic objects with no symbols, and
	pass them directly to check_archive_element.
	(xcoff_link_check_ar_symbols): Pass dynamic objects to
	xcoff_link_check_dynamic_ar_symbols.
	(xcoff_link_check_dynamic_ar_symbols): New static function.

	* coff-rs6000.c (rs6000coff_vec): Change BFD_JUMP_TABLE_DYNAMIC
	from _bfd_nodynamic to _bfd_xcoff.
	* libcoff-in.h (_bfd_xcoff_get_dynamic_symtab_upper_bound):
	Declare.
	(_bfd_xcoff_canonicalize_dynamic_symtab): Declare.
	(_bfd_xcoff_get_dynamic_reloc_upper_bound): Declare.
	(_bfd_xcoff_canonicalize_dynamic_reloc): Declare.
	* libcoff.h: Rebuild.
	* xcofflink.c (xcoff_swap_ldrel_in): New static function.
	(xcoff_get_section_contents): New static function.
	(_bfd_xcoff_get_dynamic_symtab_upper_bound): New function.
	(_bfd_xcoff_canonicalize_dynamic_symtab): New function.
	(_bfd_xcoff_get_dynamic_reloc_upper_bound): New function.
	(xcoff_dynamic_reloc): New static variable.
	(_bfd_xcoff_canonicalize_dynamic_reloc): New function.
	(xcoff_link_add_dynamic_symbols): Use xcoff_get_section_contents.

Tue Apr 23 12:48:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sparc.c (bfd_coff_generic_reloc): Return bfd_reloc_ok even
	if reloc_entry->addend is not 0.
	(CALC_ADDEND): Just set the addend to reloc.r_offset.

Mon Apr 22 18:29:01 1996  Doug Evans  <dje@canuck.cygnus.com>

	* elf32-sparc.c (_bfd_sparc_elf_howto_table): Fix spelling of
	R_SPARC_GLOB_JMP.
	* elf64-sparc.c (sparc64_elf_howto_table): Likewise.
	Add entries for R_SPARC_[56].
	(sparc_reloc_map): Add entries for R_SPARC_[56].

Mon Apr 22 15:07:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	Optimize linking of stabs in sections as used in ELF and COFF.
	* stabs.c: New file.
	* libbfd-in.h (_bfd_link_section_stabs): Declare.
	(_bfd_write_section_stabs): Declare.
	(_bfd_write_stab_strings): Declare.
	* libbfd.h: Rebuild.
	* libcoff-in.h (struct coff_section_tdata): Add stab_info field.
	(struct coff_link_hash_table): Add stab_info field.
	* libcoff.h: Rebuild.
	* cofflink.c (_bfd_coff_link_hash_table_init): Initialize
	stab_info field.
	(coff_link_add_symbols): Call _bfd_link_section_stabs if
	appropriate.
	(_bfd_coff_final_link): Write out stab strings hash table.
	(_bfd_coff_link_input_bfd): Handle optimized stabs sections.
	* coff-ppc.c (ppc_bfd_coff_final_link): Write out stab strings
	hash table.
	* elf-bfd.h (struct elf_link_hash_table): Add stab_info field.
	(struct bfd_elf_section_data): Add stab_info field.
	* elf.c (_bfd_elf_link_hash_table_init): Initialize stab_info
	field.
	* elflink.h (elf_link_add_object_symbols): If appropriate, call
	_bfd_link_section_stabs.
	(elf_bfd_final_link): Write out stab strings hash table.
	(elf_link_input_bfd): Handle optimized stabs sections.
	* reloc.c (_bfd_final_link_relocate): Check address against
	_raw_size rather than _cooked_size.
	* Makefile.in: Rebuild dependencies.
	(BFD_LIBS): Add stabs.o
	(BFD_LIBS_CFILES): Add stabs.c.

	* VERSION: Increment for bfdlink.h change.

	* coffgen.c (coff_renumber_symbols): Correct handling of
	BSF_NOT_AT_END common symbols.

Fri Apr 19 19:21:56 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coff-ppc.c (record_toc): Add cast to avoid warning.
	(ppc_allocate_toc_section): Likewise.
	(coff_ppc_relocate_section): Remove ANSI C string concatenation.
	(ppc_coff_reloc_type_lookup): Remove unreached code.
	* coffcode.h (coff_write_object_contents): Don't take the address
	of an array.
	* peicode.h (pe_print_idata): Add casts to avoid warning.
	(pe_print_edata): Likewise.
	(pe_print_reloc): Remove ANSI C string concatenation.

Thu Apr 18 18:51:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* libcoff-in.h (struct coff_final_link_info): Add last_bf_index
	and last_bf fields.
	* libcoff.h: Rebuild.
	* coffswap.h (coff_swap_aux_in): Swap endndx field for C_FCN
	symbols.
	(coff_swap_aux_out): Likewise.
	* peicode.h (coff_swap_aux_in): Likewise.
	(coff_swap_aux_out): Likewise.
	* coffgen.c (coff_pointerize_aux): Check endndx field for C_FCN
	symbols.
	* cofflink.c (_bfd_coff_final_link): Initialize last_bf_index
	field.
	(_bfd_coff_link_input_bfd): Check endndx field for C_FCN symbols.
	Fix up .bf endndx link fields.
	* coff-ppc.c (ppc_bfd_coff_final_link): Initialize last_bf_index
	field.
	* xcofflink.c (xcoff_link_input_bfd): Check endndx field for C_FCN
	symbols.

Wed Apr 17 12:08:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* pe{,i}-ppc.c (PPC_PE): Define instead of PPC, so that compiling
	on Solaris PowerPC systems doesn't get confused.

	* coffcode.h (coff_write_object_contents): Use #ifdef PPC_PE, not
	#ifdef PPC.

	* elfcore.h (bfd_prstatus, bfd_fpregset): Add thread argument.
	(elf_corefile_note): If HAVE_SYS_PROCFS_H is not defined, don't
	update did_reg and did_reg2.

Wed Apr 17 13:07:37 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_input_bfd): Check for TOC overflow.

	* linker.c (_bfd_generic_link_add_one_symbol): When calling the
	callback routines, pass h->root.string rather than name, in case
	copy is true and name is transient.

Tue Apr 16 16:36:38 1996  Stu Grossman  (grossman@lisa.cygnus.com)

	* elfcore.h:  Add support for core files with multiple threads.
	(Primarily for Solaris.)

Tue Apr 16 13:44:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (NAME(aout,squirt_out_relocs)): Don't do anything if
	section->orelocation is NULL.

	* coffgen.c (bfd_coff_get_syment): New function.
	(bfd_coff_get_auxent): New function.
	* bfd-in.h (bfd_coff_get_syment): Declare.
	(bfd_coff_get_auxent): Declare.
	* bfd-in2.h: Rebuild.

Mon Apr 15 19:06:59 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (struct mips_hi16): Define.
	(mips_hi16_addr, mips_hi16_addend): Remove.
	(mips_hi16_list): New static variable.
	(mips_elf_hi16_reloc): Maintain a list of unmatched HI16 relocs.
	(mips_elf_lo16_reloc): Process mips_hi16_list.
	(mips_elf_relocate_section): Permit an arbitrary number of HI16
	relocs before the associated LO16 reloc.

Wed Apr 10 00:23:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* versados.c (versados_scan): Check bfd_alloc return value.
	(versados_object_p): Check all bfd_read return values.  Require
	that lang field be less than 10, to avoid confusion with Intel Hex
	files.

	* libaout.h (WRITE_HEADERS): Write out the relocs even if there
	aren't any symbols.
	* aoutx.h (NAME(aout,swap_std_reloc_out)): Set r_index to N_ABS,
	not 0, for an absolute symbol.
	(NAME(aout,swap_ext_reloc_out)): Likewise.

	* ihex.c (ihex_scan): Accept a length of 4 for record type 5.
	(ihex_write_object_contents): For a large start address, output
	the full 32 bit address in record type 5.

	* ieee.c (ieee_write_byte): Change second parameter from bfd_byte
	to int to avoid promotion problems in prototype.

Tue Apr  9 11:44:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Use ${srcdir} when looking for picfrag.

	* configure.host: Switch on ${libdir}, not $(libdir).  From
	alan@spri.levels.unisa.edu.au (Alan Modra).

	* aoutx.h (aout_link_add_symbols): Always call add_dynamic_symbols
	entry point, not just for DYNAMIC objects.
	* sunos.c (sunos_add_dynamic_symbols): Always call
	sunos_create_dynamic_sections.  If called with a non DYNAMIC
	object, don't do anything else.
	(sunos_add_one_symbol): Don't call sunos_create_dynamic_sections.

Mon Apr  8 12:09:36 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Permit --enable-shared to specify a list of
	directories.
	* configure: Rebuild.

	* configure.host: Set HLDFLAGS and SHLIB_CFLAGS for *-dec-osf*
	host when configuring with --enable-shard.

Fri Apr  5 12:24:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config.bfd: Add i[345]86-*-freebsdelf* target; from John Polstra
	<jdp@polstra.com>.

	* linker.c (link_action): For WARN_ROW/warn, use MWARN, not CYCLE,
	to avoid crashing in bfd_hash_replace.

	* sysdep.h: Use #ifdef, not #if.

Thu Apr  4 23:32:23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config.in: Rebuild.

Thu Apr  4 18:49:09 1996  Fred Fish  <fnf@cygnus.com>

	* configure.in (mips-sony-bsd*): Fix typo in AC_DEFINE.
	(AC_CHECK_HEADERS): Check for sys/time.h
	(AC_HEADER_TIME): Add macro.
	* configure: Rebuild.
	* sysdep.h: Use TIME_WITH_SYS_TIME and HAVE_SYS_TIME_H
	to control what combination of <time> and <sys/time.h>
	get included.

Tue Apr  2 13:11:53 1996  Doug Evans  <dje@canuck.cygnus.com>

	* aoutf1.h (sunos_32_set_arch_mach): Handle M_SPARCLET.
	(aout_32_sunos4_write_object_contents): Likewise.
	* aoutx.h (NAME(aout,machine_type)): Handle
	bfd_mach_sparc_{sparclet,sparclite}.
	* archures.c (bfd_mach_sparc_{sparclet,sparclite}): Define.
	(bfd_mach_sparc_v9_p): Update.
	* cpu-sparc.c (arch_info_struct): Add entries for sparclet,sparclite.
	* libaout.h (enum machine_type): Add M_SPARCLET.
	* sunos.c (MACHTYPE_OK): Define.
	* bfd-in2.h: Regenerated.

Tue Apr  2 00:33:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf-bfd.h (struct elf_link_hash_table): Add hgot field.
	* elf.c (_bfd_elf_link_hash_table_init): Initialize hgot field.
	* elflink.c (_bfd_elf_create_got_section): Store the
	_GLOBAL_OFFSET_TABLE_ hash table entry in the hgot field.
	* elf32-sparc.c (elf32_sparc_check_relocs): If the size of the
	global offset table goes over 0x1000, set the value of
	_GLOBAL_OFFSET_TABLE_ to 0x1000 into the section.
	(elf32_sparc_relocate_section): Subtract the offset of
	_GLOBAL_OFFSET_TABLE_ when handling GOT relocations.

	* elfcode.h: Don't include <string.h>.

Mon Apr  1 10:39:24 1996  Jeffrey A Law  (law@cygnus.com)

	* linker.c (_bfd_generic_link_hash_newfunc): Renamed from
	generic_link_hash_newfunc.  All references changed.
	* genlink.h (_bfd_generic_link_hash_newfunc): Declaration
	moved here from libbfd-in.h.
	* libbfd-in.h: Corresponding changes.
	* libbfd.h: Regenerated.

Mon Apr  1 12:35:36 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (aout_link_input_section_std): When reporting an
	overflow error, use the name of the symbol in the hash table if
	available.
	(aout_link_input_section_ext): Likewise.

	* elflink.h (elf_adjust_dynamic_symbol): If a common symbol got
	defined in a regular file, set ELF_LINK_HASH_DEF_REGULAR.

Sun Mar 31 01:58:41 1996  steve chamberlain  <sac@slash.cygnus.com>

	* peicode.h (coff_swap_aouthdr_out): Delete test for .junk.
	* coffcode.h (coff_compute_section_file_positions): Likewise.
	(coff_write_object_contents): Likewise.

Fri Mar 29 12:44:36 1996  Ian Lance Taylor  <ian@cygnus.com>

	* section.c (SEC_LINK_ONCE): Define.
	(SEC_LINK_DUPLICATES): Define.
	(SEC_LINK_DUPLICATES_DISCARD): Define.
	(SEC_LINK_DUPLICATES_ONE_ONLY): Define.
	(SEC_LINK_DUPLICATES_SAME_SIZE): Define.
	(SEC_LINK_DUPLICATES_SAME_CONTENTS): Define.
	* bfd-in2.h: Rebuild.
	* coffcode.h (sec_to_styp_flags): If COFF_WITH_PE, turn
	SEC_LINK_ONCE into IMAGE_SCN_LNK_COMDAT.
	(styp_to_sec_flags): If COFF_WITH_PE, turn IMAGE_SCN_LNK_REMOVE
	into SEC_EXCLUDE.  If IMAGE_SCN_LNK_COMDAT is set, set
	SEC_LINK_ONCE, and look through the symbol table for the setting
	for SEC_LINK_DUPLICATES.
	(coff_write_object_contents): If COFF_WITH_PE, if SEC_LINK_ONCE is
	set for a section, find the section symbol in the symbol table,
	and set the aux entry based on SEC_LINK_DUPLICATES.
	* coffgen.c (coff_print_symbol): Add a space before "checksum".
	* coff-arm.c (armcoff_big_vec): If COFF_WITH_PE is defined, add
	SEC_LINK_ONCE and SEC_LINK_DUPLICATES to section_flags.
	* coff-i386.c (i386coff_vec): Likewise.
	* coff-ppc.c (TARGET_LITTLE_SYM, TARGET_BIG_SYM): Likewise.

	* VERSION: Bump to 2.6.1.
	* Makefile.in (stamp-h): Depend upon VERSION.

Thu Mar 28 23:48:49 1996  Jeffrey A Law  (law@cygnus.com)

	* libbfd-in.h (generic_link_hash_newfunc): Add declaration.
	* libbfd.h: Rebuilt.
	* linker.c (generic_link_hash_newfunc): No longer static.
	* coffcode.h (coff_bfd_link_hash_create): Allow specific targets
	to override.
	* coff-h8300.c: Add two derived hash tables and their associated
	funtions and #defines for use by the h8300 linker.
	(h8300_reloc16_extra_cases, case R_MEM_INDIRECT): Create entries in
	the function vector as needed.  Place the address of the function
	vector entry in the location specified by the R_MEM_INDIRECT reloc.
	Rewrite the vectors section contents as necessary.
	(h8300_bfd_link_add_symbols): New function for the h8300 linker.
	(coff_bfd_link_add_symbols): Define to use h8300 specific version.
	(coff_bfd_link_hash_table_create): Likewise.

Thu Mar 28 17:44:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* libhppa.h: If gcc 2.7 or higher, declare all the functions with
	__attribute__ ((__unused__)) so that -Wall doesn't warn about
	them.
	(hppa_rebuild_insn): Pass pointer to correct type to
	low_sign_unext and dis_assemble_21.

Thu Mar 28 11:00:36 1996  Doug Evans  <dje@canuck.cygnus.com>

	* config.bfd (sparc64-{sysv4*,solaris2*}): Delete.
	Stick with sparc-*-{sysv4*,solaris2*}.

Wed Mar 27 10:43:34 1996  Ian Lance Taylor  <ian@cygnus.com>

	* peicode.h (coff_swap_aux_in): Swap in extra PE x_scn fields.
	(coff_swap_aux_out): Swap out extra PE x_scn fields.
	* coffswap.h (coff_swap_aux_in): Zero out extra PE x_scn fields.
	* coffgen.c (coff_print_symbol): If any of the extra PE x_scn
	fields is non-zero, print them.

	* coff-ppc.c (ppc_record_toc_entry): Put inside COFF_IMAGE_WITH_PE
	ifdef.  Remove unused variables.
	(ppc_record_data_in_toc_entry): Ifdef out.  Removed unused
	variables.
	(ppc_mark_symbol_as_glue): Put inside COFF_IMAGE_WITH_PE ifdef.
	(get_symbol_value): Ifdef out.
	(pe_ppc_reloc): Ifdef out.  Remove unused variables.
	(coff_ppc_relocate_section): Remove unused variables.  Make
	fprintf strings and argument types correspond.  Put before_addr in
	DEBUG_RELOC ifdef.
	(dump_toc): Make fprintf strings and argument types correspond.
	(ppc_process_before_allocation): Remove unused variables.  Always
	return a value.
	(ppc_reflo_reloc): Ifdef out.
	(ppc_addr32nb_reloc): Ifdef out.
	(ppc_coff_rtype2howto): Make fprintf strings and argument types
	correspond.
	(coff_ppc_rtype_to_howto): Likewise.
	(ppc_coff_swap_sym_in_hook): Remove unused variables.

	* peicode.h (pe_print_idata): Move otherwise unused variables into
	the #ifdef where they are used.  Always return a value.
	(pe_print_edata): Make fprintf strings and argument types
	correspond.  Always return a value.
	(pe_print_pdata): Removed unused variable addr_value.  Always
	return a value.
	(pe_print_reloc): Remove unused variable onaline.  Make fprintf
	strings and argument types correspond.  Always return a value.

	* elf32-ppc.c (ppc_elf_fake_sections): Return true.
	(ppc_elf_finish_dynamic_symbol): Move definition of unused
	variable rela inside #if 0 section where it is used.

	* ns32k.h: New file.
	* cpu-ns32k.h: Include ns32k.h.  Rename externally visible
	functions to start with _bfd_.
	* aout-ns32k.c: Include ns32k.h.  Change references to renamed
	functions in cpu-ns32k.h.
	* Makefile.in: Rebuild dependencies.
	(HFILES): Add ns32k.h.

	* section.c (struct sec): Add linker_mark field.  Change
	user_set_vma and reloc_done to be single bit fields.
	(STD_SECTION): Update accordingly.
	* bfd-in2.h: Rebuild.
	* aoutx.h (NAME(aout,final_link)): Mark sections included in the
	link.
	(aout_link_input_bfd): Don't link unmarked sections.
	* cofflink.c (_bfd_coff_final_link): Mark sections included in the
	link.
	(_bfd_coff_link_input_bfd): Don't link unmarked sections.
	* coff-ppc.c (ppc_bfd_coff_final_link): Mark sections included in
	the link.
	* elflink.h (elf_bfd_final_link): Mark sections included in the
	link.
	(elf_link_input_bfd): Don't link unmarked sections.
	* xcofflink.c (_bfd_xcoff_bfd_final_link): Mark sections included
	in the link.
	(xcoff_link_input_bfd): Don't link unmarked sections.

	* coffswap.h (coff_swap_scnhdr_out): Include section name in
	overflow error messages.

Tue Mar 26 15:46:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* bfd.c (_bfd_default_error_handler): If _bfd_error_program_name
	is not set, print "BFD: " before the error message.

	* configure.in: Use AC_CHECK_TOOL to find ar and ranlib.  From
	Miles Bader <miles@gnu.ai.mit.edu>.
	* configure: Rebuild.

Fri Mar 22 12:17:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_input_bfd): Fix scan for C_BINCL/C_EINCL
	symbols.

	* config.bfd: Add ieee_vec to targ_selvecs for i960 targets and
	m68k-aout, m68k-coff, and m68k-elf targets.

Fri Mar 22 11:33:44 1996  Martin Anantharaman  <martin@goofy.imech.uni-duisburg.de>

	* ieee.c: Changed #ifdef KEEPMINUSPCININST to #if KEEPMINUSPCININST.
	(ieee_generic_stat_arch_elt): Restructured to prevent
	ieee_object_p from being called repeatedly.

Thu Mar 21 11:00:47 1996  steve chamberlain  <sac@slash.cygnus.com>

	* coffcode.h (coff_write_object_contents):  Allocate
	buffers large enough for any FILEHDR or AOUTHDR.

Thu Mar 21 16:28:17 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* ecofflink.c (lookup_line): New static function, renamed and
	slighly changed from old _bfd_ecoff_locate_line.
	(_bfd_ecoff_locate_line): Cache line number information.  Use
	lookup_line for actual lookup.

Thu Mar 21 14:59:11 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* peicode.h (pe_print_pdata): Warn if the .pdata section is not a
	multiple of 20 bytes.

Thu Mar 21 13:54:40 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ecoff.c (_bfd_ecoff_find_nearest_line): Use bfd_zalloc to
	allocate ecoff_find_line, and don't initialize by hand.
	* elf32-mips.c (mips_elf_find_nearest_line): Use bfd_zalloc for
	mips_elf_find_line, and don't call memset.

	* coffcode.h (coff_compute_section_file_positions): If not
	producing a final executable, don't consider sofar when aligning
	the section to the correct size.

Wed Mar 20 16:53:12 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_add_missing_symbols): Ifdef out.
	(coff_write_object_contents): Don't call coff_add_missing_symbols.
	* coffgen.c (coff_section_symbol): Ifdef out.

Mon Mar 18 12:54:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_gprel32_reloc): Initialize gp if
	output_bfd is not NULL.

Thu Mar 14 17:12:06 1996  Doug Evans  <dje@charmed.cygnus.com>

	* coffgen.c (coff_get_normalized_symtab): Call bfd_zalloc instead
	of bfd_alloc (fixes fix_line not being initialized).
	Delete zeroing of fix_{value,tag,end,scnlen} fields.

Thu Mar 14 16:06:06 1996  Jeffrey A Law  (law@cygnus.com)

	* coffcode.h: Allow specific backends to override the
	bfd_link_add_symbols routine.

	* coff-h8300.c: Include genlink.h.
	(howto_table): Add R_MEM_INDIRECT.
	(rtype2howto): Support R_MEM_INDIRECT.
	(h8300_reloc16_extra_cases): Handle R_MEM_INDIRECT like R_RELBYTE
	for now.

Tue Mar 12 12:41:17 1996  David Mosberger-Tang  <davidm@koala.azstarnet.com>

	* coff-alpha.c (alpha_relocate_section): Use
	info->callbacks_warning, rather than _bfd_error_handler, for
	"multiple gp" warning.

Tue Mar 12 12:10:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	* linker.c (bfd_wrapped_link_hash_lookup): New function.
	(_bfd_generic_link_add_one_symbol): Remove BFD_ASSERT on hash
	table string.  Use bfd_wrapped_link_hash_lookup.
	(_bfd_generic_link_write_global_symbol): Remove BFD_ASSERT on hash
	table string.
	* aoutx.h (aout_link_write_symbols): Use the name from the hash
	table, if any, when writing out symbols.
	(aout_link_input_section_std): Use the name from the hash table,
	if any, when reporting undefined symbols.
	(aout_link_input_section_ext): Likewise.
	(aout_link_reloc_link_order): Use bfd_wrapped_link_hash_lookup.
	* bout.c (get_value): Likewise.
	* cofflink.c (_bfd_coff_reloc_link_order): Likewise.
	* ecoff.c (ecoff_reloc_link_order): Likewise.
	* elflink.h (elf_link_add_object_symbols): Likewise.
	(elf_reloc_link_order): Likewise.
	* linker.c (_bfd_generic_link_output_symbols): Likewise.
	(_bfd_generic_reloc_link_order): Likewise.
	(default_indirect_link_order): Likewise.
	* reloc16.c (bfd_coff_reloc16_get_value): Likewise.
	* sunos.c (sunos_add_one_symbol): Likewise.
	* xcofflink.c (xcoff_link_add_symbols): Likewise.
	(bfd_xcoff_link_count_reloc): Likewise.
	(xcoff_reloc_link_order): Likewise.

	* ecoffswap.h (ecoff_swap_fdr_in): If ECOFF_64, turn 0xffffffff
	into -1 for intern->rss.

	* configure: Rebuild with autoconf 2.8.

Mon Mar 11 12:28:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* stab-syms.c (__define_stab_duplicate): Define.
	(bfd_get_stab_name): Rename from aout_stab_name.  Rewrite to use a
	switch.
	* bfd-in.h (bfd_get_stab_name): Declare.
	* bfd-in2.h: Rebuild.
	* Makefile.in: Rebuild dependencies.
	(BFD_LIBS): Add stab-syms.o.
	(BFD_LIBS_CFILES): Add stab-syms.c.
	(BFD32_BACKENDS): Remove stab-syms.o.
	(BFD32_BACKENDS_CFILES): Remove stab-syms.c.
	* configure.in: Don't list stab-syms.o in bfd_backends.
	* configure: Rebuild.
	* libaout.h (aout_stab_name): Don't declare.
	* aoutx.h (NAME(aout,get_symbol_info)): Call bfd_get_stab_name,
	not aout_stab_name.

Fri Mar  8 11:26:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (assign_file_positions_for_segments): Adjust file offset
	for section alignment even if SEC_LOAD is not set.

Tue Mar  5 12:02:23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Don't set SHLIB or SHLINK to an empty string,
	since they appear as targets in Makefile.in.
	* configure: Rebuild.

	* sunos.c (sunos_scan_ext_relocs): If not making a shared library,
	don't fiddle with a symbol which is not defined anywhere.

Mon Mar  4 12:49:16 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_mark): Treat undefined imported symbols as
	though they are defined in a shared library.
	(xcoff_build_ldsyms): Likewise.

	* coffgen.c (coff_find_nearest_line): Don't look at the line
	numbers for the section if section->lineno is NULL.

	* elf.c (_bfd_elf_symbol_from_bfd_symbol): Print a useful error
	message rather than calling BFD_ASSERT.
	* elfcode.h (write_relocs): Check return value of
	_bfd_elf_symbol_from_bfd_symbol.

Fri Mar  1 09:42:59 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_add_symbol_hook): Don't set SEC_LOAD flag
	for .sbss section.

Wed Feb 28 11:25:47 1996  Jeffrey A Law  (law@cygnus.com)

	* libhppa.h (hppa_reloc_field_selector_type): Add R_HPPA_NLSEL
	and R_HPPA_NLRSEL.
	(e_nsel, e_nlsel, e_nlrsel): Undefine.  Add to
	hppa_reloc_field_selector_type_alt.
	(hppa_field_adjust): Handle e_nlsel, e_nlrsel.  Fix e_nsel handling.
	* som.c (hppa_som_gen_reloc_type): Handle N', NL' NLR' field
	selectors.
	(som_write_fixups): Finish handling of R_N0SEL and R_N1SEL.

Wed Feb 28 11:00:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (assign_file_positions_for_segments): Adjust the segment
	memory size for the alignment of a SEC_ALLOC section, not just a
	SEC_LOAD section.

Tue Feb 27 14:17:31 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* m68klinux.c: New file.
	* hosts/m68klinux.h: New file.
	* config.bfd (m68*-*-linuxaout*, m68*-*-linux*): New targets.
	* configure.in (m68*-*-linux*): New native host.
	(m68klinux_vec): New vector.
	* configure: Rebuild.
	* targets.c (m68klinux_vec): Declare.
	* i386linux.c (bfd_i386linux_size_dynamic_sections): Renamed from
	bfd_linux_size_dynmic_sections to avoid clash with m68klinux.c.
	* bfd-in.h (bfd_i386linux_size_dynamic_sections): Rename
	declaration from bfd_linux_size_dynamic_sections.
	(bfd_m68klinux_size_dynamic_sections): Declare.
	* bfd-in2.h: Rebuild.
	* Makefile.in: Rebuild dependencies.
	(BFD32_BACKENDS): Add m68klinux.o.
	(BFD32_BACKENDS_CFILES): Add m68klinux.c.

Tue Feb 27 11:31:34 1996  Jeffrey A Law  (law@cygnus.com)

	* libhppa.h (pa_arch): Add pa20.
	(hppa_reloc_field_selector_type): Add R_HPPA_NSEL.
	(e_nsel): Undefine.  Add to hppa_reloc_field_selector_type_alt.
	(hppa_field_adjust): Handle e_nsel.
	* som.c: Provide default definitions for many new relocs found only
	in hpux10 include files.
	(som_fixup_formats): Add several new relocs from hpux10.
	(som_hppa_howto_table): Add hpux10 relocs.
	(som_write_fixups): Handle R_N0SEL and R_N1SEL hpux10 relocs.

Mon Feb 26 12:52:48 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Edit out recent shared library support, and
	rules to rebuild .h files using doc/chew.

Mon Feb 26 14:48:39 1996  David Mosberger-Tang  <davidm@AZStarNet.com>

	* ecoff.c (ecoff_compute_section_file_positions): Adjust the file
	size even of sections with no contents.

Mon Feb 26 14:01:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (_bfd_coff_link_input_bfd): When merging, skip names
	starting with '$' the way we skip names starting with '.'.  When
	updating x_endndx, don't be fooled by an index which has been
	merged.

	* cofflink.c (_bfd_coff_link_input_bfd): Don't try to optimize a
	struct/union/enum type with no elements.

Sat Feb 24 11:38:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* bfd.c (bfd_errmsg): Handle a NULL return from strerror.

	* archive.c (bfd_generic_archive_p): If the first file in the
	archive can not be recognized as an object, don't assume that this
	is the wrong format.

	* elf.c (bfd_elf_set_dt_needed_name): Don't do anything if the
	format is not bfd_object.
	(bfd_elf_get_dt_soname): Likewise.

Wed Feb 21 13:58:04 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c (sh_relax_delete_bytes): Correct range of R_SH_USES
	reloc.

Tue Feb 20 16:22:44 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* bfd.c (tdata): Add netbsd_core_data.
	* bfd-in2.h: Regenerated.

Tue Feb 20 16:50:02 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (SUNOS_CONSTRUCTOR): Define.
	(sunos_add_one_symbol): Don't let a symbol from a dynamic object
	override a constructor symbol.  Set SUNOS_CONSTRUCTOR when
	appropriate.

	* bout.c (b_out_squirt_out_relocs): Use udata.i rather than flags
	to get the symbol index, matching 14 Jul 95 change.

Tue Feb 20 08:26:27 1996  Fred Fish  <fnf@phydeaux.cygnus.com>

	* coff-alpha.c (alpha_ecoff_get_relocated_section_contents):
	Remove duplicate definition of gp.

Mon Feb 19 12:37:41 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coff-alpha.c (alpha_ecoff_get_relocated_section_contents): Don't
	assume that we can set the GP value and then get the same value,
	since it won't be true if the output file is neither ELF nor
	ECOFF.
	* coff-mips.c (mips_adjust_reloc_in): Don't bother to use
	_bfd_get_gp_value here.
	(mips_gprel_reloc): Don't assume we can set and get the GP value.
	* elf32-mips.c (mips_elf_hi16_reloc): Get gp value from
	mips_elf_final_gp.
	(mips_elf_lo16_reloc): Likewise.
	(mips_elf_final_gp): Add pgp parameter.  Set it to the GP value.
	Don't require that the BFD be ELF.
	(mips_elf_gprel16_reloc): Get gp value from mips_elf_final_gp.
	(mips_elf_gprel32_reloc): Likewise.
	(mips_elf_relocate_section): Don't assume we can set and get the
	GP value.
	(mips_elf_finish_dynamic_symbol): Don't bother to use
	_bfd_get_gp_value here.

	* elf32-mips.c (mips_elf_create_procedure_table): Initialize sv.
	Don't change epdr between malloc and free.  Be careful not to free
	NULL pointers.  Zero out the first RPDR.

	* configure.host: On Linux, only pass -rpath option if $(libdir)
	is neither /lib nor /usr/lib.  From Alan Modra
	<alan@mullet.Levels.UniSA.Edu.Au>.

	* elf-bfd.h (struct elf_obj_tdata): Rename dt_needed_name to
	dt_name.
	(elf_dt_name): Rename from elf_dt_needed_name.
	* elf.c (bfd_elf_set_dt_needed_name): Use elf_dt_name, not
	elf_dt_needed_name.
	(bfd_elf_get_dt_soname): New function.
	* elflink.h (elf_link_add_object_symbols): Use elf_dt_name, not
	elf_dt_needed_name.  Save the SONAME back in elf_dt_name.
	* bfd-in.h (bfd_elf_get_dt_soname): Declare.
	* bfd-in2.h: Rebuild.

Mon Feb 19 02:50:23 1996  Doug Evans  <dje@charmed.cygnus.com>

	* elf32-sparc.c (elf32_sparc_reloc_type_lookup): Renamed from
	_bfd_sparc_elf_reloc_type_lookup.
	(bfd_elf32_bfd_reloc_type_lookup): Update.
	* elf64-sparc.c (SPARC64_OLD_RELOCS): Define.
	(sparc64_elf_howto_table): Define.
	(sparc_reloc_map): Define.
	(sparc64_elf_reloc_type_lookup): New function.
	(sparc_elf_wdisp16_reloc): New function.
	(elf_info_to_howto): Use sparc64_elf_howto_table.
	(sparc64_elf_relocate_section): Likewise.
	(bfd_elf64_bfd_reloc_type_lookup): Update.

Sun Feb 18 15:02:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Check for 'do not mix' from native linker before
	trying to use -rpath.

Fri Feb 16 12:46:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* bfd.c (_bfd_get_gp_value): New function.
	(_bfd_set_gp_value): New function.
	* libbfd-in.h (_bfd_get_gp_value): Declare.
	(_bfd_set_gp_value): Declare.
	* libbfd.h: Rebuild.
	* coff-alpha.c (alpha_ecoff_get_relocated_section_contents): Use
	_bfd_get_gp_value and _bfd_set_gp_value rather than referring
	directly to the fields in the tdata information.
	(alpha_relocate_section): Likewise.
	* coff-mips.c (mips_adjust_reloc_in): Likewise.
	(mips_gprel_reloc): Likewise.
	(mips_relocate_section): Likewise.
	* elf32-mips.c (mips_elf_hi16_reloc): Likewise.
	(mips_elf_lo16_reloc): Likewise.
	(mips_elf_final_gp): Likewise.
	(mips_elf_gprel16_reloc): Likewise.
	(mips_elf_gprel32_reloc): Likewise.
	(mips_elf_relocate_section): Likewise.
	(mips_elf_finish_dynamic_symbol): Likewise.

	* bout.c (b_out_set_arch_mach): Recognize bfd_mach_i960_jx.

Thu Feb 15 11:29:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Call AC_PROG_CC before configure.host.
	* configure: Rebuild.
	* configure.host: Don't set information which autoconf should
	figure out, namely CC, CFLAGS, LDFLAGS, AR, and RANLIB.

	* configure.host: Remove go32 and win32 host information, since it
	should no longer be needed.

	* elf.c (map_sections_to_segments): If we have a .dynamic section,
	then start a new segment rather than put a writable section in a
	readonly segment.

	* configure.host: Set RPATH_ENVVAR.

	* Makefile.in: Rebuild dependencies.

	* elflink.c (_bfd_elf_create_linker_section): Remove unused
	zero_section variable.

Thu Feb 15 10:39:17 1996  H.J. Lu  <hjl@zoom.com>

	* Makefile.in ($(srcdir)/bfd-in2.h): Rename target from bfd-in2.h.
	($(srcdir)/libbfd.h): Rename from libbfd.h.
	($(srcdir)/libcoff.h): Rename from libcoff.h.

Wed Feb 14 16:29:07 1996  Martin Anantharaman  <martin@mail.imech.uni-duisburg.de>

	* ieee.c (ieee_write_expression): Only use an R variable for a
	local symbol.  Don't output a zero offset.  Handle a zero address.
	(SRC_MASK, PCREL_OFFSET): Define based on KEEPMINUSPCININST.
	(rel32_howto, rel16_howto, rel8_howto): Use SRC_MASK and
	PCREL_OFFSET.
	(parse_expression): Don't try to handle multiple occurrences of a
	P variable.  Handle I variables differently from X variables.  Fix
	the order of minus expressions.
	(ieee_slurp_external_symbols): Generate an I variable for an NN
	record.  Fix handling of ATI and ATX records.
	(ieee_slurp_sections): Only set minimal section attributes.
	Adjust them later, based on the section contents.
	(ieee_object_p): Read in the file until just after the ME record.
	Call ieee_slurp_section_data to set the section flags.
	(do_one): Add iterations parameter.  Only repeat the first load
	item.  Set the section and file reloc flags.
	(ieee_slurp_section_data): Set section flags.  Pass iterations to
	do_one.
	(ieee_canonicalize_reloc): Handle I variables.
	(do_with_relocs): Only emit relocation size when necessary.
	Increase MAXRUN to 127.  Change ov to be assigned, and take
	src_mask and pcrel_offset into account.
	(ieee_write_data_part): Skip sections that are not loaded.
	(ieee_write_external_part): Don't output optional last entry of WX
	records.
	(ieee_write_me_part): Make setting of me_record neater.
	(ieee_generic_stat_arch_elt): Get the size of an archive element.

	* syms.c (stt): Add entries for zerovars, vars, and code.

	* elfcode.h (validate_reloc): New static function.
	(write_relocs): Call validate_reloc for non ELF relocs.

	* elfxx-target.h (elf_symbol_leading_char): Define if not defined.
	(TARGET_BIG_SYM): Use elf_symbol_leading_char.
	(TARGET_LITTLE_SYM): Likewise.

	* config.bfd (m68*-*-psos*): New target.

Tue Feb 13 15:56:22 1996  Bryan Ford  <baford@snake.cs.utah.edu>

	* i386msdos.c: Remove some #if 0 code.
	(msdos_write_object_contents): Don't include empty sections in the
	size computation, regardless of their address.

Tue Feb 13 15:36:37 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_relocate_section): Don't segfault if dynboj
	is NULL, ie, the -r switch is used.

Tue Feb 13 14:35:15 1996  Ian Lance Taylor  <ian@cygnus.com>

	* reloc.c (BFD_RELOC_MIPS_GOT_HI16): Define.
	(BFD_RELOC_MIPS_GOT_LO16): Define.
	(BFD_RELOC_MIPS_CALL_HI16, BFD_RELOC_MIPS_CALL_LO16): Define.
	* bfd-in2.h, libbfd.h: Rebuild.
	* elf32-mips.c (mips_reloc_map): Map new relocs.

	* configure.host: Set HDLFLAGS for *-*-hpux with --enable-shared.

	* Makefile.in ($(SHLINK)): Check ts against $(SHLIB), not
	$(SHLINK).

	* ieee.c (get_symbol): Set the section to bfd_abs_section.
	(do_with_relocs): If EXEC_P is set and there are no relocs, use a
	simple number for the section address, rather than an expression.
	Limit the number of bytes between relocs to MAXRUN.
	(ieee_write_me_part): Set me_record to the file offset after the
	start address.
	(ieee_write_processor): New static function.
	(ieee_write_object_contents): Use ieee_write_processor.

Fri Feb  9 10:53:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Use ${CC-gcc} when testing for -rpath on SunOS.

	* coff-aux.c: Change include of aux.h to aux-coff.h.

Thu Feb  8 14:01:03 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf32-m68k.c (elf_m68k_relocate_section): For a R_68K_RELATIVE
	relocation put the addend both in the reloc entry and the data.
	(elf_m68k_finish_dynamic_symbol): Likewise.  Mask out marker in
	GOT offset value.

	* elf32-m68k.c (elf_m68k_relocate_section): If -Bsymbolic, resolve
	a R_68K_PCxx reloc against a defined global symbol directly.
	(elf_m68k_check_relocs): Don't count such a reloc.

	* elf32-m68k.c (elf_m68k_check_relocs): Don't record a symbol with
	a PLTxx reloc as dynamic.  Disallow PLTxxO reloc against a local
	symbol for now, otherwise always record the symbol as dynamic.
	(elf_m68k_adjust_dynamic_symbol): If a symbol with a PLTxx reloc
	is not referenced by a dynamic object, and we are not making a
	shared object, then don't make a PLT entry.  If we do make a PLT
	entry, make sure the symbol has been recorded as dynamic.

Wed Feb  7 13:56:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: When making a shared library, set HLDFLAGS to
	pass an appropriate -rpath option.  Use the make variable SONAME
	as the shared library soname, rather than computing it here.  On
	SunOS, build stamp-tshlink in place of $(SHLINK).
	* Makefile.in (SONAME): New variable.
	($(SHLINK)): Make a link to the transformed name, as well.
	(stamp-tshlink): New target.
	(install): Skip stamp-tshlink during install.

Wed Feb  7 13:37:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_add_symbol_hook): Do not assume that the
	linker sections have been set up yet.

	* elf.c (make_mapping): Add an additional argument to suppress
	making the first section include the program headers.
	(map_sections_to_segments): If the user used -Ttext such that the
	program headers are on a different page, do not set the flags
	saying that this section includes the program headers.

Tue Feb  6 14:04:49 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* configure.in (*-*-netbsd*): Set COREFILE to netbsd-core.c.
	don't define TRAD_HEADER.
	* configure: Rebuild.

	* netbsd-core.c: New file, support for NetBSD core files.
	* hosts/*nbsd.h: Removed.

Tue Feb  6 11:47:49 1996  Doug Evans  <dje@charmed.cygnus.com>

	* reloc.c (BFD_RELOC_SPARC_[567]): New reloc types.
	(BFD_RELOC_SPARC_LO7 reloc type): Deleted.
	* libbfd.h, bfd-in2.h: Regenerated.
	* elf32-sparc.c (_bfd_sparc_elf_reloc_type_lookup): Renamed from
	bfd_elf32_bfd_reloc_type_lookup.
	(reloc_type{,_names}): Deleted.
	(_bfd_sparc_elf_howto_table): Renamed from elf_sparc_howto_table.
	Add sparc64 relocs.
	(sparc_reloc_map): Add sparc64 relocs.
	(sparc_elf_notsupported_reloc): New static function.
	(sparc_elf_wdisp16_reloc): New static function.
	(elf32_sparc_check_relocs): Handle R_SPARC_WDISP{16,19}.
	(elf32_sparc_relocate_section): Likewise.
	(bfd_elf32_bfd_reloc_type_lookup): Define.
	* elf64-sparc.c (sparc64_elf_wdisp16_reloc): Deleted.
	(reloc_type{,_names}): Deleted.
	(elf_sparc_howto_table): Deleted.
	(sparc_reloc_map): Deleted.
	(_bfd_sparc_elf_howto_table): Renamed from elf_sparc_howto_table.
	(bfd_elf64_bfd_reloc_type_lookup): Change from function to #define.

Tue Feb  6 12:12:22 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.host: Make SHLIB_CFLAGS include $(PICFLAG) on a
	*-*-hpux* host.

	* Makefile.in (program_transform_name): New variable.
	(install): Transform library name before installing it.

Mon Feb  5 10:38:27 1996  Ian Lance Taylor  <ian@cygnus.com>

	* archures.c (bfd_mach_i960_hx): Define.
	* bfd-in2.h: Rebuild.
	* cpu-i960.c (scan_960_mach): Accept machine "hx".
	(MATRIX): Expand entries for HX.
	(arch_info_struct): Add i960:hx entry.
	* bout.c (b_out_set_arch_mach): Handle bfd_mach_i960_hx.
	* coffcode.h (coff_set_arch_mach_hook): Handle F_I960HX.
	(coff_set_flags): Handle bfd_mach_i960_hx.

	Support for building as a shared library, based on patches from
	Alan Modra <alan@spri.levels.unisa.edu.au>:
	* configure.in: Add AC_ARG_ENABLE for shared and commonbfdlib.
	New substitutions: ALLLIBS, PICFLAG, SHLIB, SHLIB_CC,
	SHLIB_CFLAGS, COMMON_SHLIB, PICLIST, SHLINK.
	* configure: Rebuild.
	* configure.host: If --enable-shared, adjust shared library stuff
	based on the host.  If the host is SunOS, and the linker supports
	-rpath, set HLDFLAGS to use it.
	* Makefile.in (ALLLIBS): New variable.
	(PICFLAG, SHLIB, SHLIB_CC, SHLIB_CFLAGS): New variables.
	(COMMON_SHLIB, SHLINK): New variables.
	(.c.o): If PICFLAG is set, compile twice, once PIC, once normal.
	(STAGESTUFF): Remove variable.
	(all): Depend upon $(ALLLIBS) and @PICLIST@ rather than
	$(TARGETLIB).
	(stamp-ofiles): New target, like old ofiles target, but build
	using a temporary file and move-if-change, and touch stamp-ofiles
	when done.
	(ofiles): Just depend upon stamp-ofiles.
	(stamp-piclist, piclist): New targets.
	($(SHLIB), $(SHLINK)): New targets.
	(targets.o, archures.o): Build twice if PICFLAG is set.
	(do_mostlyclean): Remove pic/*.o.
	(do_clean): Remove stamp-ofiles, $(SHLIB), $(SHLINK), piclist, and
	stamp-piclist.
	(do_distclean): Remove pic and stamp-picdir.
	(install): Install shared libraries.
	($(OFILES)): Depend upon stamp-picdir.
	(stamp-picdir): New target.

	* libcoff-in.h: Add comment reminding people that libcoff.h is a
	generated file.
	* libcoff.h: Rebuild.

	* elflink.h (elf_adjust_dynamic_symbol): Don't try to get the
	flavour of a section with no owner.

	* elf32-mips.c (mips_elf_create_dynamic_sections): Clear
	ELF_LINK_NON_ELF flag.
	(mips_elf_create_got_section): Likewise.

	* elf.c: Revert last change, since it breaks dynamic linking.
	* elf-bfd.h (struct elf_backend_data): Remove want_hdr_in_seg
	field.
	* elf32-mips.c (elf_backend_want_hdr_in_seg): Don't define.
	* elfxx-target.h (elf_backend_want_hdr_in_seg): Don't define.
	(elfNN_bed): Don't initialize want_hdr_in_seg field.

Sun Feb  4 20:45:13 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf.c (assign_file_positions_for_segments): If the backend does
	not want the elf header or the program headers in the address
	space, do not include them in the calculations.

	* elf32-ppc.c (ppc_elf_additional_program_headers): New hook
	function to determine if we need additional program headers.
	(ppc_elf_modify_segment_map): Define as a NOP function for now.
	(ppc_elf_create_linker_section): .sdata2 is a read-only section.

Sat Feb  3 23:00:03 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h: Move today's libcoff.h change into coffcode.h.

Sat Feb  3 15:43:44 1996  Fred Fish  <fnf@cygnus.com>

	* libcoff.h (bfd_coff_link_add_one_symbol): Combine macro args
	back into one line.  Some compilers (sunos 4.1.3 for example)
	won't accept args split across more than one line.

Fri Feb  2 11:42:15 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* aclocal.m4 (BFD_BINARY_FOPEN): Understand cygwin32.
	* configure: Regenerate.

Fri Feb  2 12:12:16 1996  Jeffrey A Law  (law@cygnus.com)

	* elf32-hppa.c (elf32_hppa_backend_symbol_table_processing): Don't
	try to do arithmetic on a void *, cast it to a unsigned char * first.

Thu Feb  1 16:04:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf-bfd.h (ELF_LINK_NON_ELF): Define.
	* elf.c (_bfd_elf_link_hash_newfunc): Set elf_link_hash_flags to
	ELF_LINK_NON_ELF.
	* elflink.h (elf_link_add_object_symbols): Reset ELF_LINK_NON_ELF
	flag for a newly defined symbol.
	(NAME(bfd_elf,record_link_assignment)): Likewise.
	(elf_adjust_dynamic_symbol): If ELF_LINK_NON_ELF is set, try to
	set the DEF or REF_REGULAR flags correctly.

	* Makefile.in (bfd-in2.h): Make bfd.h, not protos, in docdir.
	(libbfd.h, libcoff.h): Corresponding change.

	* elf32-i386.c (elf_i386_check_relocs): Don't record a symbol with
	a PLT32 reloc as dynamic.
	(elf_i386_adjust_dynamic_symbol): If a symbol with a PLT32 reloc
	is not referenced by a dynamic object, and we are not making a
	shared object, then don't make a PLT entry.  If we do make a PLT
	entry, make sure the symbol has been recorded as dynamic.

Wed Jan 31 17:23:32 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* coff-i386.c (coff_i386_reloc_type_lookup): Add BFD_RELOC_32_PCREL.
	* config.bfd (i[345]86-*-win32): Becomes i[345]86-*-cygwin32.
	(powerpcle-*-cygwin32): New.
	* peicode.h (add_data_entry): Get address from vma.

Wed Jan 31 16:23:57 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elflink.c (_bfd_elf_create_linker_section): If the symbol
	attached to the section has already been created as an undefined
	symbol, treat it as if it hasn't been created yet.

Wed Jan 31 16:16:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_bfd_final_link): Don't output initial dummy
	symbol or section symbols if stripping all symbols and this is not
	a relocateable link.  Don't output the symbol string table if
	there are no symbols.
	(elf_link_flush_output_syms): Don't do anything if there are no
	symbols to flush.

Wed Jan 31 12:55:49 1996  Richard Henderson  <rth@tamu.edu>

	* coff-aux.c: New file.
	* hosts/m68kaux.h: New file.
	* config.bfd (m68*-apple-aux*): New target.
	* configure.in (m68*-apple-aux*): New native host.
	(m68kaux_coff_vec): New vector.
	* configure: Rebuild.
	* targets.c (m68kaux_coff_vec): Declare.
	* coffcode.h (bfd_coff_backend_data): Add field
	_bfd_coff_link_add_one_symbol.
	(bfd_coff_link_add_one_symbol): Define.
	(compare_arelent_ptr): New static function if TARG_AUX.
	(coff_write_relocs): If TARG_AUX, sort the relocs.
	(coff_write_object_contents): Set A/UX aouthdr magic number.
	(coff_link_add_one_symbol): Define if not defined.
	(bfd_coff_std_swap_table): Initialize new field.
	* libcoff.h: Rebuild.
	* cofflink.c (coff_link_add_symbols): Call
	bfd_coff_link_add_one_symbol rather than
	_bfd_generic_link_add_one_symbol.
	* coff-m68k.c (COFF_PAGE_SIZE): Don't define if already defined.
	* coff-alpha.c (alpha_ecoff_backend_data): Initialize new field.
	* coff-mips.c (mips_ecoff_backend_data): Likewise.
	* Makefile.in: Rebuild dependencies.
	(BFD32_BACKENDS): Add coff-aux.o.
	(BFD32_BACKENDS_CFILES): Add coff-aux.c.

Wed Jan 31 11:37:46 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf32-m68k.c (elf_m68k_relocate_section): Fix R_68K_GOT*
	relocation; ignore addend with R_68K_{GOT,PLT}*O relocation.

Tue Jan 30 12:09:04 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (do_maintainer_clean): Remove $(srcdir)/bfd-in2.h,
	$(srcdir)/libbfd.h and $(srcdir)/libcoff.h.
	(maintainer-clean): Warn about deleting special files.
	(bfd-in2.h, libbfd.h, libcoff.h): New targets.

	* elf32-hppa.c (elf32_hppa_relocate_section): Handle indirect and
	warning symbols correctly.
	* elf32-i386.c (elf_i386_relocate_section): Likewise.
	* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
	* elf32-mips.c (mips_elf_relocate_section): Likewise.
	* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
	* elf64-sparc.c (sparc64_elf_relocate_section): Likewise.

	* syms.c (_bfd_stab_section_find_nearest_line): Add casts to avoid
	warnings.

Mon Jan 29 14:27:24 1996  Kim Knuttila  <krk@cygnus.com>

	* libcoff-in.h: aligned newly exported names with bfd naming
	conventions. Removed an erroneous define of POWERPC_LE_PE.
 	* libcoff.h: Rebuild.
	* cofflink.c, coff-ppc.c: the above function name changes

Mon Jan 29 13:06:28 1996  Ian Lance Taylor  <ian@cygnus.com>

	From Basim Kadhim <kadhim@spock.cs.colorado.edu>:
	* ecoff.c (struct extsym_info): Define.
	(_bfd_ecoff_bfd_final_link): Pass a pointer to struct extsym_info
	to ecoff_link_write_external.
	(ecoff_link_write_external): Accept a struct extsym_info pointer.
	Strip symbols when appropriate.

	Based on patches from Ronald F. Guilmette <rfg@monkeys.com>:
	* syms.c (BSF_OBJECT): Define.
	(bfd_print_symbol_vandf): Print 'O' for BSF_OBJECT.
	* bfd-in2.h: Rebuild.
	* elfcode.h (elf_slurp_symbol_table): Set BSF_OBJECT for an
	STT_OBJECT symbol.
	* elf.c (swap_out_syms): Only set type to STT_OBJECT if BSF_OBJECT
	is set.

	* elf32-i386.c (elf_i386_relocate_section): If -Bsymbolic, when
	copying relocs into a shared object, treat a defined global symbol
	as a local symbol.
	* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
	* elf32-mips.c (mips_elf_relocate_section): Likewise.
	* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.

	* elflink.h (elf_link_add_object_symbols): Only set weakdef to a
	real defined symbol, not to a weak defined symbol.

Mon Jan 29 11:34:36 1996  Kim Knuttila  <krk@cygnus.com>

	* cofflink.c: removed the POWERPC_LE_PE hack, promoted some types
	and made a few static functions externs.

	* coff-ppc.c (ppc_bfd_coff_final_link): new function, replaces the
	POWERPC_LE_PE hack in cofflink.

	* libcoff-in.h: promoted the following from cofflink.c to allow
	_bfd_coff_final_link to be overridden -  STRING_SIZE_SIZE,
	coff_debug_merge_element, struct coff_debug_merge_type,
	coff_debug_merge_hash_entry, coff_debug_merge_hash_table,
	coff_debug_merge_hash_table_init,  coff_debug_merge_hash_table_free,
	coff_debug_merge_hash_lookup, coff_link_section_info,
	coff_final_link_info, coff_debug_merge_hash_newfunc,
	coff_write_global_sym, coff_link_input_bfd, coff_reloc_link_order.

	* libcoff.h: re-gen'd

Fri Jan 26 18:33:35 1996  Ian Lance Taylor  <ian@cygnus.com>

	* syms.c: Include "bfdlink.h".
	(struct stab_find_info): Define.
	(_bfd_stab_section_find_nearest_line): New function.
	* libbfd-in.h (_bfd_stab_section_find_nearest_line): Declare.
	* libbfd.h: Rebuild.
	* elf-bfd.h (struct elf_obj_tdata): Add line_info field.
	* elf.c (_bfd_elf_find_nearest_line): Try calling
	_bfd_stab_section_find_nearest_line before searching the ELF
	symbol table.  Find the closest STT_FUNC symbol, not the last one.
	* libcoff-in.h (coff_data_type): Add line_info field.
 	* libcoff.h: Rebuild.
	* coffgen.c (coff_find_nearest_line): Try calling
	_bfd_stab_section_find_nearest_line before searching the COFF
	symbol table.
	* Makefile.in: Rebuild dependencies.

Fri Jan 26 16:11:19 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (R_PPC_EMB_SDA21 relocations): Make relocation size
	4 bytes, so we get the correct value when updating the register
	field in little endian mode.

Thu Jan 25 12:14:16 1996  Ian Lance Taylor  <ian@cygnus.com>

	* libcoff-in.h (struct xcoff_tdata): Remove toc_section and
	entry_section fields.  Add sntoc and snentry fields.
	* libcoff.h: Rebuild.
	* coffcode.h (coff_mkobject_hook): Initialize sntoc and snentry,
	not toc_section and entry_section (the COFF file does not have any
	sections at this point).
	(coff_write_object_contents): Set o_snentry and o_sntoc from
	snentry and sntoc rather than entry_section and toc_section.
	* coff-rs6000.c (xcoff_copy_private_bfd_data): Copy sntoc and
	snentry, not toc_section and entry_section.
	* xcofflink.c (bfd_xcoff_size_dynamic_sections): Don't set
	entry_section from hentry.
	(xcoff_link_input_bfd): If a defined symbol has XCOFF_ENTRY set,
	set snenty.
	(xcoff_link_input_bfd): Set sntoc, not toc_section.
	(xcoff_write_global_symbol): Get toc_section from sntoc, rather
	than using toc_section directly.

	* archures.c: Add missing `.' in enum bfd_architecture.
	* bfd-in2.h: Rebuild.

	* config.bfd (i[345]86-*-sco*elf*): Use bfd_elf32_i386_vec.  From
	Robert Lipe <robertl@arnet.com>.

Thu Jan 25 12:08:51 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Add .rela.sdata{,2}
	to sections we allocate.  Use bfd_zalloc to allocate initialial
	sections, not bfd_alloc.
	(ppc_elf_check_relocs): Remove BFD_ASSERTs for !shared from
	SDA{,2}I16 relocations.
	(ppc_elf_add_symbol_hook): Use the value of -G nn to determine
	whether to put something in .sbss or not.
	(ppc_elf_relocate_section): Add support for more relocations.  Add
	in sec->output_offset where appropriate.  Make error messages
	include the symbol name.

	* elflink.c (_bfd_elf_create_linker_section): Lookup symbol before
	trying to add it to the symbol table, so _GLOBAL_OFFSET_TABLE_
	doesn't get redefined messages if -shared.

	* elflink.h (elf_create_pointer_linker_section) Only bump RELA
	section if the rel_section field has been set up.

Wed Jan 24 20:40:26 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_relocate_section): Fix typo in eabi
	relocations.

Wed Jan 24 10:38:34 1996  Doug Evans  <dje@charmed.cygnus.com>

	* elf32-sparc.c (elf32_sparc_merge_private_bfd_data): Delete checking
	of flags, only flags used are controlled by mach number.  Bump up
	output file mach number to highest of input file mach numbers.
	(elf32_sparc_object_p): Watch for EF_SPARC_SUN_US1.
	(elf32_sparc_final_write_processing): Set EF_SPARC_SUN_US1 if v8plusa.

	* config.bfd (sparc64-*-{sysv4*,solaris2*}): Comment out
	bfd_elf64_sparc_vec support.

Tue Jan 23 14:33:05 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_copy_private_bfd_data): Don't complain if
	the embedded bit is set on some objects and not on others.  Just
	or it together.
	(ppc_elf_relocate_section): Implement R_PPC_EMB_{SDA21,RELSDA}
	relocations.

Tue Jan 23 14:22:45 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_new_section_hook): Don't try to align the
	.stabstr section.

	* coffcode.h (coff_set_section_contents): Fix the handling of the
	.lib section to work even if the entire section contents are
	written at once.  From Gvran Uddeborg <gvran@uddeborg.pp.se> and
	Robert Lipe <robertl@arnet.com>.

Mon Jan 22 18:45:51 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elflink.h (elf_finish_pointer_linker_section): Don't allocate
	memory here for contents.

	* elf32-ppc.c (ppc_elf_relocate_section): Bump up _SDA_BASE_ and
	_SDA2_BASE_ by 32768.
	(ppc_elf_size_dynamic_sections): #if out PLT code which we haven't
	started using.  Allocate contents for .sdata and .sdata2 sections
	also.
	(ppc_elf_check_relocs): Use bfd_get_section_name in debug message,
	rather than _name.
	(ppc_elf_finish_dynamic_symbol): Remove code that attempted to
	size _SDA{,2}_BASE_.
	(ppc_elf_relocate_section): Change how sdata{,2} relocations are
	done.

Mon Jan 22 08:52:04 1996  Doug Evans  <dje@charmed.cygnus.com>

	* elflink.h (elf_finish_pointer_linker_section): Fix typo.

	* archures.c (bfd_mach_sparc_v9): Renamed from bfd_mach_sparc64.
	(bfd_mach_sparc_{v8plus,v8plusa}): Define.
	(bfd_mach_sparc_v9a): Define.
	(bfd_mach_sparc_v9_p): Define.
	* bfd-in2.h: Regenerated.
	* aoutx.h (aout,machine_type): bfd_mach_sparc64 renamed to
	bfd_mach_sparc_v9.
	* elf64-sparc.c (sparc64_elf_object_p): Likewise.
	* config.bfd (sparc64-*-sysv4*,sparc64-*-solaris2*): Set targ_defvec
	to bfd_elf32_sparc_vec.
	* cpu-sparc.c (arch_info_struct): Renamed from sparc_arch_info.
	Add v8plus{,a} support.
	Add v9a support.
	(sparc_compatible): New function.
	* elf32-sparc.h: #include "elf/sparc.h".
	(elf32_sparc_merge_private_bfd_data, elf32_sparc_object_p,
	elf32_sparc_final_write_processing): New functions.
	(bfd_elf32_bfd_merge_private_bfd_data, elf_backend_object_p,
	elf_backend_final_write_processing): Define.

Mon Jan 22 11:21:51 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf-bfd.h (struct elf_link_hash_entry): Add
	linker_section_pointer field.
	(enum elf_linker_section_enum): Enumeration for new way of
	creating linker dynamic sections and symbols.
	(elf_linker_section{,_pointers}): New structures for creating
	dynamic sections and symbols.
	(elf_obj_tdata): Add linker_section_pointers and linker_section
	fields.
	(elf_local_ptr_offsets,elf_linker_section): New accessor macros.
	(_bfd_elf_create_linker_section): New declarations.
	(_bfd_elf_find_pointer_linker_section): Ditto.
	(bfd_elf{32,64}_{create,finish}_pointer_linker_section): Ditto.
	(_bfd_elf_make_linker_section_rela): Ditto.

	* elf.c (_bfd_elf_link_hash_newfunc): Initialize new fields.

	* elf32-ppc.c (ppc_elf_create_dynamic_sections): Delete.
	(ppc_elf_create_linker_section): New function to create the
	sections .got, .sdata, and .sdata2.
	(ppc_elf_size_dynamic_sections): Zap .rela.{sdata,sdata2} if
	needed.
	(ppc_elf_check_relocs): Support more of the eabi relocations.
	(ppc_elf_relocate_section): Ditto.
	(ppc_elf_finish_dynamic_symbols): Adjust _SDA{,2}_BASE_ by 32768
	if the .sdata{,2} + .sbss{,2} section size is > 32k.

	* elflink.h (elf_create_pointer_linker_section): New function to
	create initialized pointers in dynamic linker sections.
	(elf_finish_pointer_linker_section): Actually intialize the
	pointers created above.

	* elfcode.h (bfd_elf{32,64}_create_pointer_linker_section): New
	macros to provide both 32 and 64 bit versions of
	elf_create_pointer_linker_section.
	(bfd_elf{32,64}_finish_pointer_linker_section): New macros to
	provide both 32 and 64 bit versions of
	elf_finish_pointer_linker_section.

	* elflink.c (_bfd_elf_create_linker_section): New function to
	create a linker section.
	(_bfd_elf_find_pointer_linker_section): Find a unique pointer to a
	given address in the linker pointer offsets created for a given
	symbol.
	(_bfd_elf_make_linker_section_rela): Make a RELA section
	corresponding to the generated linker section.

Sat Jan 20 08:36:10 1996  Doug Evans  <dje@canuck.cygnus.com>

	* elf32-sparc.c (ELF_MACHINE_ALT1): Define.

Thu Jan 18 18:25:34 1996  Kim Knuttila  <krk@cygnus.com>

	* coff-ppc.c (coff_ppc_relocate_section): changed TOCDEFN relocs.
	(coff_ppc_relocate_section): Handle special values for gcc built dlls.
	(dump_toc): fix diagnosing code to identify out-of-toc-bounds entries.
	Also begin the toc at 4 as an eye catcher ('31313131' marks the first
	toc entry in an objdump) for now.
	(ppc_do_last, ppc_get_last): New function - needed to save processing
	the toc owner to the end.
	(ppc_coff_swap_sym_in_hook): Removed an incorrect hack for doing the
	toc owner last.

	* cofflink.c (_bfd_coff_final_link): Added a new hack to keep the
	toc owner from being done till last. Must define POWERPC_LE_PC
	to enable it.

	* coffcode.h (coff_set_alignment_hook): alignment setting for .stab

	* peicode.h (coff_swap_scnhdr_out): set section flags for stab/str
	to INFO.
	(coff_swap_aouthdr_out): Removed a non-working hack for computing the
	SizeOfImage for PowerPC. Ignore the size of the .junk section.

Thu Jan 18 17:42:12 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elfcore.h: Include <signal.h> before <sys/procfs.h>.

Wed Jan 17 12:40:14 1996  Ian Lance Taylor  <ian@cygnus.com>

	* cpu-powerpc.c (arch_info_struct): Change last entry to not point
	back to first.
	(bfd_powerpc_arch): Point at first entry in arch_info_struct.

Tue Jan 16 15:10:49 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (assign_file_positions_for_segments): Don't increment file
	offset for a segment which contains no loadable sections.

Mon Jan 15 17:46:27 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* reloc.c: Add new PowerPC relocations.
	* {bfd-in2,libbfd}.h: Regenerate.

	* elf32-ppc.c (ppc_elf_howto_raw): Add more PPC relocations.
	(ppc_elf_reloc_type_lookup): Lookup new relocations.

Mon Jan 15 14:29:44 1996  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (howto_table_ext): Fix RELOC_BASE10 and RELOC_BASE22
	entries.

	* sunos.c (sunos_scan_ext_relocs): Don't fail assert if
        info->shared.

	* coffgen.c (coff_find_nearest_line): Don't try to cache
	information in sections that are not owned by a BFD.  From Richard
	Henderson <richard@atheist.tamu.edu>.

	* elf32-mips.c: Numerous changes to dynamic linking code, mostly
	from Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>.
	* elflink.h (elf_link_output_extsym): Remove special check for
	_rld_new_interface.

	* ecoffswap.h: Add prototypes for static functions.

Sun Jan 14 21:36:08 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_{unsupported,std}_reloc): Remove functions.
	(ppc_elf_howto_raw): Remove ppc_elf_{unsupported,std}_reloc
	references.
	(ppc_elf_relocate_section):  No longer allow .sdata/.sbss sections
	to satisfy a TOC16 relocation. 	Rewrite unsupported relocation
	support.  Begin support for R_PPC_SDA{2,}REL.

Sat Jan 13 09:36:52 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_create_dynamic_sections): New function to
	create the .got and .got.neg sections.
	(ppc_elf_size_dynamic_sections): Call it.
	(ppc_elf_check_relocs): Call it.
	(ppc_elf_size_dynamic_sections): Support .got.neg, just like .got.
	(ppc_elf_check_relocs): Add error messages for relocations we
	don't yet support.  Do not include R_PPC_SDAREL16 like a GOT
	relocation.

Fri Jan 12 15:27:59 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf32-ppc.c (ppc_elf_fake_sections): Define, and handle the new
	section flags for V.4 and eabi.

Fri Jan 12 13:59:16 1996  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (assign_file_positions_for_segments): If a segment
	contains no sections, don't mark it as readable.

	* elf-bfd.h (_bfd_elf_section_from_bfd_section): Declare.
	* elfcode.h (_bfd_elf_section_from_bfd_section): Don't declare.

	* elf.c (_bfd_elf_print_private_bfd_data): Dump contents of
	dynamic section, if there is one.
	* elf-bfd.h (struct elf_size_info): Add swap_dyn_in field.
	(bfd_elf32_swap_dyn_in): Change type of second parameter to PTR.
	(bfd_elf64_swap_dyn_in): Likewise.
	* elfcode.h (elf_swap_dyn_in): Change type of second parameter to
	PTR.
	(NAME(_bfd_elf,size_info)): Initialize swap_dyn_in field.

	* elf32-i386.c (elf_i386_size_dynamic_sections): Don't create a
	DT_TEXTREL entry because of .rel.plt.  From Martin Pirker
	<pirker@eiunix.tuwien.ac.at>.

Thu Jan 11 17:06:14 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* section.c (SEC_{EXCLUDE,SORT_ENTRIES}): New section flags for
	PowerPC V.4 and eabi.
 	* bfd-in2.h: Regenerate.
	* libfd.h: Regenerate.

	* elfxx-target.h (TARGET_{BIG,LITTLE}_SYM): Add new flags.

	* elf32-ppc.c (ppc_elf_section_from_shdr): Support SHT_ORDERED
	section type and SHF_EXCLUDE section flag, turning them into the
	appropriate bfd section flag.

Thu Jan 11 11:23:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	* xcofflink.c (xcoff_link_add_symbols): Create the special
	sections if we see a DYNAMIC object, in case that is the only
	XCOFF input object we see.

	* elf32-mips.c: Extensive changes for a start at dynamic linking
	support, from Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>.

	* elf-bfd.h (struct elf_backend_data): Add type_change_ok field.
	(struct elf_backend_data): Remove
	elf_backend_create_program_headers field.  Add
	elf_backend_additional_program_headers and
	elf_backend_modify_segment_map fields.
	* elfxx-target.h (elf_backend_type_change_ok): Define if not
	defined.
	(elf_backend_additional_program_headers): Likewise.
	(elf_backend_modify_segment_map): Likewise.
	(elf_backend_create_program_headers): Don't define.
	(elfNN_bed): Change to account for field changes.
	* elf.c (assign_file_positions_for_segments): Call new
	modify_segment_map backend function.  Don't call old
	create_program_headers backend function.
	(get_program_header_size): Call additional_program_headers rather
	than create_program_headers.
	* elflink.h (elf_link_add_object_symbols): Initialize
	type_change_ok from new backend field.
	(elf_link_output_extsym): Don't warn if _rld_new_interface is
	defined.
	(elf_reloc_link_order): Treat a reloc against a defined symbol as
	a reloc against the appropriate section.

	* elf-bfd.h (struct bfd_elf_section_data): Add tdata field.
	(struct elf_obj_tdata): Rename ppc_flags_init field to flags_init.
	(elf_flags_init): Rename from elf_ppc_flags_init.
	* elf32-ppc.c (ppc_elf_set_private_flags): Use elf_flags_init, not
	elf_ppc_flags_init.
	(ppc_elf_copy_private_bfd_data): Likewise.
	(ppc_elf_merge_private_bfd_data): Likewise.

	* elf32-m68k.c (howto_table): Change src_mask to 0 for all
	relocation entries.

Tue Jan  9 15:22:53 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* coff-alpha.c (alpha_relocate_section): During final link, allow
 	output .lita section to be bigger than 64k by adjusting gp value
 	on a per-input section basis.
	* libecoff.h (struct ecoff_tdata): Add issued_multiple_gp_warning
	field.
	(struct ecoff_section_tdata): Add gp field.

Tue Jan  9 12:00:36 1996  Ian Lance Taylor  <ian@cygnus.com>

	Handle Alpha ECOFF changes in OSF/1 3.2.
	* libecoff.h (struct ecoff_backend_data): Add get_elt_at_filepos
	field.
	* coff-alpha.c: Include "aout/ar.h".
	(alpha_ecoff_get_relocated_section_contents): Don't require an
	ALPHA_R_IGNORE reloc after an ALPHA_R_GPDISP reloc, since OSF/1
	3.2 doesn't generate one.
	(alpha_relocate_section): Likewise.
	(alpha_ecoff_slurp_armap): Define.
	(alpha_ecoff_slurp_extended_name_table): Define.
	(alpha_ecoff_construct_extended_name_table): Define.
	(alpha_ecoff_truncate_arname): Define.
	(alpha_ecoff_write_armap): Define.
	(alpha_ecoff_generic_stat_arch_elt): Define.
	(alpha_ecoff_update_armap_timestamp): Define.
	(ARFZMAG): Define.
	(alpha_ecoff_read_ar_hdr): New static function.
	(alpha_ecoff_get_elt_at_filepos): New static function.
	(alpha_ecoff_openr_next_archived_file): New static function.
	(alpha_ecoff_get_elt_at_index): New static function.
	(alpha_ecoff_backend_data): Initialize get_elt_at_filepos field.
	(ecoffalpha_little_vec): Change BFD_JUMP_TABLE_ARCHIVE from
	_bfd_ecoff to alpha_ecoff.
	* ecoff.c (ecoff_link_add_archive_symbols): Use get_elt_at_filepos
	field from backend structure, rather than always calling
	_bfd_get_elt_at_filepos.
	* coff-mips.c (mips_ecoff_backend_data): Initialize
	get_elt_at_filepos field.
	* archive.c (_bfd_generic_read_ar_hdr_mag): New function, copied
	from _bfd_generic_read_ar_hdr with minor changes.
	(_bfd_generic_read_ar_hdr): Use _bfd_generic_read_ar_hdr_mag.
	* libbfd-in.h (_bfd_generic_read_ar_hdr_mag): Declare.
	* libbfd.h: Rebuild.

	* bfd-in.h (BFD_IN_MEMORY): Define.
	* libbfd-in.h (struct bfd_in_memory): Define.
	* libbfd.c (bfd_read): Handle BFD_IN_MEMORY flag.
	(bfd_get_file_window): Don't try to map a BFD_IN_MEMORY file.
	(bfd_write, bfd_stat): Abort if BFD_IN_MEMORY is set.
	(bfd_tell, bfd_flush, bfd_seek): Handle BFD_IN_MEMORY flag.
	* bfd.c (struct _bfd): Change iostream field from char * to PTR.
	(bfd_get_size): Handle BFD_IN_MEMORY flag.
	* cache.c (bfd_cache_close): Ignore BFD_IN_MEMORY files.
	(bfd_open_file): Cast to PTR, not char *, when setting iostream.
	(bfd_cache_lookup_worker): Abort if BFD_IN_MEMORY is set.
	* opncls.c (bfd_fdopenr): Cast to PTR, not char *, when setting
	iostream.
	(bfd_openstreamr): Likewise.
	* aoutx.h (NAME(aout,some_aout_object_p)): Only fstat iostream if
	BFD_IN_MEMORY is not set.
	* riscix.c (riscix_some_aout_object_p): Likewise.
	* bfd-in2.h, libbfd.h: Rebuild.

	* targets.c (bfd_target): Add _bfd_get_elt_at_index field.
	(BFD_JUMP_TABLE_ARCHIVE): Add _get_elt_at_index.
	(bfd_get_elt_at_index): Define.
	* archive.c (_bfd_generic_get_elt_at_index): Rename from
	bfd_get_elt_at_index.  Change index parameter from int to
	symindex.
	* libbfd-in.h (_bfd_generic_get_elt_at_index): Declare.
	(_bfd_noarchive_get_elt_at_index): Define.
	(_bfd_archive_bsd_get_elt_at_index): Define.
	(_bfd_archive_coff_get_elt_at_index): Define.
	* bfd-in2.h, libbfd.h: Rebuild.
	* aout-target.h (MY_get_elt_at_index): Define if not defined.
	* coff-rs6000.c (xcoff_get_elt_at_index): Define.
	* ieee.c (ieee_get_elt_at_index): Define.
	* libecoff.h (_bfd_ecoff_get_elt_at_index): Define.
	* oasys.c (oasys_get_elt_at_index): Define.
	* som.c (som_get_elt_at_index): Define.

	* ecoff.c (_bfd_ecoff_find_nearest_line): Don't restrict line
	numbers to the .text section.

Mon Jan  8 17:00:57 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_write_debug_part): Change return type to boolean.
	If there is a SEC_DEBUGGING section, get the contents of the debug
	information part from it.
	(ieee_set_section_contents): Store the contents of a SEC_DEBUGGING
	section in memory.
	(ieee_write_object_contents): Check ieee_write_debug_part return.

Thu Jan  4 17:12:37 1996  Fred Fish  <fnf@cygnus.com>

	* config.bfd (i[345]86-*-freebsd*): Add target.
	* configure.in (i386freebsd_vec): Add vec.
	* configure: Regenerate.
	* Makefile.in (BFD32_BACKENDS): Add i386freebsd.o.
	(BFD32_BACKENDS_CFILES): Add i386freebsd.c.
	Rebuild dependencies..
	* freebsd.h: New file.
	* i386freebsd.c: New file.
	* targets.c (i386freebsd_vec): Declare.
	(bfd_target_vector): Add i386freebsd_vec.
	* i386linux.c (SEGMENT_SIZE): Define as TARGET_PAGE_SIZE
	* i386netbsd.c (SEGMENT_SIZE):  Define as TARGET_PAGE_SIZE

Thu Jan  4 16:27:46 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_slurp_debug): New static function.
	(ieee_object_p): Call it.
	(ieee_slurp_section_data): Skip debugging sections.
	(ieee_get_reloc_upper_bound): Likewise.
	(ieee_get_section_contents): Likewise.
	(ieee_canonicalize_reloc): Likewise.
	(ieee_write_section_part): Likewise.
	(ieee_write_debug_part): Likewise.
	(ieee_write_data_part): Likewise.
	(init_for_output): Likewise.

Wed Jan  3 19:42:47 1996  Michael Meissner  <meissner@wogglebug.tiac.net>

	* elf32-ppc.c (ppc_elf_relocate_section): Make @GOT relocations
	work.
	(ppc_elf_howto_raw): Just use bfd_elf_generic_reloc for all howto
	relocs, since ppc_elf_relocate_section handles the linker case.
	(ppc_elf_{addr16_ha,got16,toc16,brtaken}_reloc): Delete, no longer
	used.
	(ppc_elf_{addr16_ha,got16,toc16,brtaken}_inner): Merge these into
	ppc_elf_relocate_section since that is now the only caller.
	(ppc_elf_relocate_section): Ditto.

Wed Jan  3 15:11:30 1996  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_write_object_contents): If we don't know the
	section of the entry point for an XCOFF executable, always set the
	entry address to -1.

Tue Jan  2 14:17:15 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* elf.c (bfd_section_from_shdr): Add support for note sections.

Tue Jan  2 13:10:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* bfd-in.h (struct _symbol_info): Add stab_type field.
	* bfd-in2.h: Rebuild.
	* aoutx.h (NAME(aout,get_symbol_info)): Set stab_type.

	* elf32-ppc.c: Remove trailing newline from calls to
        _bfd_error_handler.
	(ppc_elf_merge_private_bfd_data): Only warn about endianness
	difference if target endianness is known.

For older changes see ChangeLog-9495

Copyright (C) 1996-1997 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:
