1999-04-29  Nick Clifton  <nickc@cygnus.com>

	* coff-mcore.c (coff_mcore_relocate_section): Fix typos.

Fri Apr 28 16:36:19 1999  Stan Cox  <scox@cygnus.com>

	* elf32-sh.c (sh_elf_relocate_section): Include relocation addend
	in relocation calculation.

1999-04-26  Tom Tromey  <tromey@cygnus.com>

	* aclocal.m4, configure: Updated for new version of libtool.

1999-04-21  Nick Clifton  <nickc@cygnus.com>

	* coff-mcore.c: Add support for mcore relocs.

1999-04-20  Gavin Romig-Koch  <gavin@cygnus.com>

	* elf32-mips.c (_bfd_mips_elf_print_private_bfd_data): Scrap the
	incorrect use EF_MIPS_xxBITPTRS.

1999-04-18  Ian Lance Taylor  <ian@zembu.com>

	* elf64-alpha.c (elf64_alpha_relax_section): Remove unused local
	variable insn.

	* bfd-in2.h: Rebuild.
	* libbfd.h: Rebuild.

Sat Apr 17 20:55:15 1999  Catherine Moore  <clm@cygnus.com>
 
	* coff-arm.c (coff_arm_rtype_to_howto): Remove ARM26D transform.
	(coff_arm_relocate_section):  Add ARM26D transform.  Only
	change to ARM26D for relocateable links.

1999-04-16  Gavin Romig-Koch  <gavin@cygnus.com>

	* elf32-mips.c (_bfd_mips_elf_print_private_bfd_data): New.
	(bfd_elf32_bfd_print_private_bfd_data): New.

1999-04-15  Doug Evans  <devans@casey.cygnus.com>

	* elf32-arm.h (elf32_arm_final_link_relocate):  For R_ARM_THM_ABS5,
	refetch addend if USE_REL, add many comments regarding current state.
	For R_ARM_THM_PC22, refetch addend if USE_REL, simplify.
	* elfarm-nabi.c (elf32_arm_howto_table): For R_ARM_THM_ABS5, fix
	size and rightshift.  For R_ARM_THM_PC22, fix bitsize.
	* elfarm-oabi.c (elf32_arm_howto_table): Ditto.

Wed Apr 14 14:33:08 1999  Richard Henderson  <rth@cygnus.com>

	* elf32-mips.c (_bfd_mips_elf_read_ecoff_info): Zero `debug'.
	* elf64-alpha.c (elf64_alpha_read_ecoff_info): Likewise.

1999-04-13  David Mosberger  <davidm@hpl.hp.com>

	* dwarf2.c (decode_line_info): Don't truncate address to least
	significant 32 bits (breaks 64 bit targets).
	(lookup_address_in_function_table): Ditto.
	(comp_unit_contains_address): Ditto.

Tue Apr 13 21:27:19 1999  Catherine Moore  <clm@cygnus.com>

	* coff-arm.c (arm_emit_base_file_entry): New routine.
	(A2T3_OFFSET): Define.
	(T2A3_OFFSET): Define.
	(coff_arm_relocate_section):  Emit base file entries for interworking
	stubs.

1999-04-13  Philip Blundell  <philb@gnu.org>

	* elfarm-nabi.c (elf32_arm_howto_table): Add dummy entries for
	relocs 17 through 19.

Sun Apr 11 01:25:17 1999  Richard Henderson  <rth@cygnus.com>

	* elfcode.h: Remove fnmatch.h.
	* elflink.h (elf_link_assign_sym_version): Call back to ld
	instead of calling fnmatch.

	* config.bfd (i?86-*-beoself): Include pe vecs.

Sun Apr 11 01:14:06 1999  Richard Henderson  <rth@cygnus.com>

	* elf32-i386.c (elf_i386_finish_dynamic_sections): Allow .plt
	to go missing.

1999-04-10  Richard Henderson  <rth@cygnus.com>

	* elf32-i386.c (elf_i386_relocate_section): Mind no_undefined
	when trying to resolve dynamic symbol references.
	* 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.
	* elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
	* elflink.h (elf_link_output_extsym): Likewise.

Sat Apr 10 15:12:09 1999  Richard Henderson  <rth@cygnus.com>

	* section.c (_bfd_strip_section_from_output): New function moved from
	* elf64-alpha.c (elf64_alpha_strip_section_from_output): ... here.
	* elf32-i386.c (elf_i386_size_dynamic_sections): Use it.
	* 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-sparc.c (sparc64_elf_size_dynamic_sections): Likewise.
	* bfd-in2.h: Update.

1999-04-09  Ian Lance Taylor  <ian@zembu.com>

	* elf64-sparc.c: Fix incorrect calls to bfd_check_overflow.

1999-04-08  Nick Clifton  <nickc@cygnus.com>

	* coff-mcore.c: New File: Support for mcore-pe targets.
	* cpu-mcore.c: New File: Support for mcore targets.
	* elf32-mcore.c: New File: Support for mcore-elf target.
	* pe-mcore.c: New File: Definitions for mcore-pe target.
	* pei-mcore.c: New File: Definitions for mcore-pei target.
	* Makefile.am: Add support for MCore targets.
	* Makefile.in: Regenerate.
	* config.bfd: Add support for MCore targets.
	* configure.in: Add support for MCore targets.
	* configure: Regenerate.
	* archures.c: Add support for MCore architecture.
	* bfd-in2.h: Regenerate. 
	* coffcode.h: Add support for mcore-pe targets.
	* elf.c: Add support for mcore-elf target.
	* reloc.c: Add support for MCore relocs.
	* targets.c: Add support for MCore targets.

1999-04-07  Nick Clifton  <nickc@cygnus.com>

	* elfarm-nabi.c (elf32_arm_howto_table): Add entries for
	R_ARM_XPC25 and R_ARM_THM_XPC22.
	(elf32_arm_reloc_map): Remove redundant entries.

1999-04-06  Ian Lance Taylor  <ian@zembu.com>

	* sysdep.h (LC_MESSAGES): Never define.

1999-04-06  Chris Torek  <torek@bsdi.com>

	* reloc.c (bfd_check_overflow): Add addrsize parameter.  Change
	all callers.  Rewrite completely.
	(_bfd_relocate_contents): Rewrite overflow checking.
	* bfd-in2.h: Rebuild.

1999-04-05  Ian Lance Taylor  <ian@zembu.com>

	From Gabriel Paubert <paubert@iram.es>:
	* elf32-ppc.c (ppc_elf_howto_raw): Set R_PPC_GOT16_LO,
	R_PPC_PLT16_LO and R_PPC_SECTOFF_LO to be complain_overflow_dont.
	Set R_PPC_PLT16_HA, R_PPC_SECTOFF_HA and R_PPC_EMB_NADDR16_HA to
	have a rightshift of 16 and use ppc_elf_addr16_ha_reloc.
	* ppcboot.c (ppcboot_vec): Use little endian routines for
	headers.

	* elf.c (elfcore_strndup): Only define if it will be used.
	* elf32-ppc.c (ppc_elf_relax_section): Remove unused locals irel
	and irelend.
	(ppc_elf_check_relocs): Remove unused local i.
	(ppc_elf_gc_mark_hook): Add default case to switch.

	From Bernd Nitzler <nitzler@kagcpd01.ag01.kodak.COM>:
	* srec.c (srec_scan): Accept \r in symbol definitions.
	(srec_object_p): Set HAS_SYMS if we saw any symbols.
	(symbolsrec_object_p): Likewise.

1999-04-04  Don Bowman <don@pixsci.com>

	* config.bfd: Add mips*el-*-vxworks* and mips*-*-vxworks*.

1999-04-04  Ian Lance Taylor  <ian@zembu.com>

	* dwarf1.c (parse_line_table): Remove unused locals last_pc and
	last_line.
	* elf-bfd.h (_bfd_elfcore_section_from_phdr): Declare.
	* elf32-i386.c (elf_i386_gc_mark_hook): Add default case to
	switch.
	* elflink.h (NAME(bfd_elf,size_dynamic_sections)): Remove unused
	local i.
	* syms.c (_bfd_stab_section_find_nearest_line): Remove unused
	local val.

1999-03-31  Nick Clifton  <nickc@cygnus.com>

	* config.bfd: Add support for arm-epoc-pe target.
	* configure.in: Add support for arm-epoc-pe target.
	* configure: Regenerate.
	* targets.c: Add support for arm-epoc-pe target.
	* coff-arm.c: Allow header files to override definition of
	TARGET_UNDERSCORE and USER_LABEL_PREFIX.
	* pe-arm.h: Allow previous header files to override definition of
	TARGET_LITTLE_SYM and TARGET_BIG_SYM.
	* pei-arm.h: Allow previous header files to override definition of 
	TARGET_LITTLE_SYM and TARGET_BIG_SYM.
	* epoc-pe-arm.c: New file.  Support arm-epoc-pe target.
	* epoc-pei-arm.c: New file.  Support arm-epoc-pei target.
	
1999-03-30  Nick Clifton  <nickc@cygnus.com>

	* elf.c (elf_map_symbols): Handle the case where section
	symbols are generated for content-less sections which are
	not mapped to the output file.

	* linker.c: Replace direct references to fields in BFD structure
	with accessor macros.

	* elflink.h: Replace direct references to fields in BFD structure
	with accessor macros.

1999-03-25  Philip Blundell  <pb@nexus.co.uk>

	* config.bfd: Eliminate redundancy in checks for Linux/ARM.
	
	* elf32-arm.h (elf32_arm_relocate_section): Take the rightshift into 
	account when adjusting section symbols during a partial link.

1999-03-24  Nick Clifton  <nickc@cygnus.com>

	* coff-sparc.c (struct coff_reloc_map): Change type of field
	  'bfd_reloc_val' to bfd_reloc_code_real_type.
	* elf-m10200.c (struct mn10200_reloc_map): Ditto.
	* elf-m10300.c (struct mn10300_reloc_map): Ditto.
	* elf32-arc.c (struct arc_reloc_map): Ditto.
	* elf32-d10v.c (struct d10v_reloc_map): Ditto.
	* elf32-d30v.c (struct d30v_reloc_map): Ditto.
	* elf32-fr30.c (struct fr30_reloc_map): Ditto.
	* elf32-m32r.c (struct m32r_reloc_map): Ditto.
	* elf32-sh.c (struct elf_reloc_map): Ditto.
	* elf32-sparc.c (struct elf_reloc_map): Ditto.
	* elf32-v850.c (struct v850_reloc_map): Ditto.
	* elf64-sparc.c (struct elf_reloc_map): Ditto.
	* elfarm-nabi.c (struct elf32_arm_reloc_map): Ditto.
	* elfarm-oabi.c (struct elf32_arm_reloc_map): Ditto.

1999-03-17  Martin Hunt  <hunt@cygnus.com>

	* syms.c (_bfd_stab_section_find_nearest_line): Changed this
	function so source-level assembly works.  If multiple N_SOs
	are seen without and N_FUNs, create an indextable entry with
	a NULL function name.

1999-03-16  Gavin Romig-Koch  <gavin@cygnus.com>

	* elf32-mips.c (_bfd_mips_elf_merge_private_bfd_data) Allow merging
	of certian similar cpus.

1999-03-16  Gavin Romig-Koch  <gavin@cygnus.com>

	* elf32-mips.c (_bfd_mips_elf_final_write_processing):
	Add the 5000.  Change the architecture for the 5400 to mips4.
	(elf_mips_mach): Add r5000.

1999-03-11  Doug Evans  <devans@casey.cygnus.com>

	* cpu-i960.c (scan_i960_mach): Recognize i960:ka_sa and i960:kb_sb.

1999-03-11  Nick Clifton  <nickc@cygnus.com>

	* binary.c (binary_set_section_contents): Generate warning about
	huge file offsets for any section that will occupy file space, not
	just those that are loadable.

1999-02-24  Jim Blandy  <jimb@zwingli.cygnus.com>

	* libbfd.h: Regenerate after Nick Clifton's Feb 17 changes.

1999-02-22  Jim Lemke  <jlemke@cygnus.com>

	* elf32-ppc.c: Add ppc_elf_relax_section() for the ld option mpc860c0.

Mon Feb 22 18:26:51 1999  Ian Lance Taylor  <ian@cygnus.com>

	* elf-bfd.h (ELF_LINK_HASH_REF_REGULAR_NONWEAK): Define.
	* elflink.h: Revert all changes since Feb 16.  Instead:
	(elf_link_add_object_symbols): Set REF_REGULAR_NONWEAK flag if
	appropriate.  Copy it to version symbols.
	(elf_fix_symbol_flags): Set REF_REGULAR_NONWEAK for non ELF
	symbols if appropriate.
	(elf_adjust_dynamic_symbol): Set REF_REGULAR_NONWEAK for weakdef
	symbol if appropriate.
	(elf_link_output_extsym): If symbol is marked as undefined, and
	has no nonweak references, mark it as weak undefined.

Fri Feb 19 16:01:12 1999  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_merge_symbol): When overriding a dynamic
	definition with a weak undefined symbol, set NEEDS_PLT if it is a
	function.
	(elf_link_add_object_symbols): Don't copy the other field if we
	are overridding.

Thu Feb 18 18:07:43 1999  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_merge_symbol): Do not merge any symbol from a
	shared object with a weak undefined symbol.

1999-02-18  Nick Clifton  <nickc@cygnus.com>

	* elfarm-nabi.c: Set partial_inplace back to false.

1999-02-17  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (TARGET_UNDERSCORE): Re-enable.
	(USER_LABEL_PREFIX): Set to "_".

	The following patches are from: Scott Bambrough
	<scottb@corelcomputer.com>
	
	* libaout.h (M_ARM6_NETBSD): Set to 143.

	* reloc.c: Add ARM PIC relocs:   BFD_RELOC_ARM_GOT12,
	BFD_RELOC_ARM_GOT32, BFD_RELOC_ARM_JUMP_SLOT, BFD_RELOC_ARM_COPY,
	BFD_RELOC_ARM_GLOB_DAT, BFD_RELOC_ARM_PLT32,
	BFD_RELOC_ARM_RELATIVE, BFD_RELOC_ARM_GOTOFF, BFD_RELOC_ARM_GOTPC.
	* bfd-in2.h: Regenerate.

	* elfarm-nabi.c (elf32_arm_howto_table): Set partial_inplace to
	'true' as REL relocs are now being used.  Add new PIC relocs:
	R_ARM_COPY, R_ARM_GLOB_DAT, R_ARM_JUMP_SLOT, R_ARM_RELATIVE,
	R_ARM_GOTOFF, R_ARM_GOTPC, R_ARM_GOT32, R_ARM_PLT32.

	* elf32-arm.h (elf32_arm_merge_private_bfd_data): Check byte order
	of targets.
	(elf32_arm_final_link_relocate): Change parameters so that entire
	reloc is passed.  Add support for PIC relocs.
	(elf32_arm_relocate_section): Pass entire reloc to
	elf32_arm_final_link_relocate. 
	(elf32_arm_check_relocs): Handle new PIC relocs.
	(elf32_arm_adjust_dynamic_symbol): New function.
	(elf32_arm_size_dynamic_sections): New function.
	(elf32_arm_discard_copies): New function.
	(elf32_arm_finish_dynamic_symbol): New function.
	(elf32_arm_finish_dynamic_sections): New function.
	(ELF_MAXPAGE_SIZE): Define.
	(bfd_elf32_bfd_reloc_type_lookup): Define.
	(elf_backend_relocate_section): Define.
	(elf_backend_adjust_dynamic_symbol): Define.
	(elf_backend_create_dynamic_sections): Define.
	(elf_backend_finish_dynamic_symbol): Define.
	(elf_backend_finish_dynamic_sections): Define.
	(elf_backend_size_dynamic_sections): Define.
	(elf_backend_plt_readonly): Define.
	(elf_backend_want_got_plt): Define.
	(elf_backend_want_plt_sym): Define.
	
Wed Feb 17 12:02:26 1999  Stan Cox  <scox@cygnus.com>

	* elf32-mips.c (_bfd_mips_elf_section_from_shdr): Make reginfo
	sections SEC_LINK_ONCE and SEC_LINK_DUPLICATES_SAME_SIZE.
	(_bfd_mips_elf_fake_sections): Likewise.

Wed Feb 17 12:07:23 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>
 
        * elfarm-oabi.c (bfd_elf32_arm_allocate_interworking_sections,
        bfd_elf32_arm_get_bfd_for_interworking,
        bfd_elf32_arm_process_before_allocation): Define to avoid clash
        with elfarm-nabi.c.
 
        * elf32-arm.h: Don't declare elf32_arm_info_to_howto.
        (elf32_thumb_to_arm_stub, elf32_arm_to_thumb_stub,
        elf32_arm_find_nearest_line): Make them static.

Tue Feb 16 22:44:37 1999  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_merge_symbol): Add pflags parameter.  Change all
	callers.  Do not merge a definition from a shared object with a
	weak undefined symbol.
	(elf_link_add_object_symbols): Do not change the symbol type or
	size if the old symbol overrides the new one.

1999-02-08  Nick Clifton  <nickc@cygnus.com>

	* config.bfd: Add support for strongarm target.

Mon Feb  8 11:18:14 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* elf32-m68k.c (reloc_map): Use the correct types for the struct
	fields instead of unsigned char.

Fri Feb  5 00:22:36 1999  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am: Rebuild dependencies.
	* Makefile.in: Rebuild.

Thu Feb  4 22:30:13 1999  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Change AC_PREREQ to 2.13.  Remove AM_CYGWIN32.
	Change AM_EXEEXT to AC_EXEEXT and AM_PROG_INSTALL to
	AC_PROG_INSTALL.  Add comments to uses of AC_DEFINE.
	* acinclude.m4: Add comments to uses of AC_DEFINE.
	* acconfig.h: Remove.
	* configure: Rebuild with current autoconf/automake.
	* aclocal.m4: Likewise.
	* config.in: Likewise.
	* Makefile.in: Likewise.

1999-02-04  DJ Delorie  <dj@cygnus.com>

	* libbfd.c (real_read): don't call fread for zero bytes.  This
	covers up a bug (or misuse of bfd) that's exposed by Solaris.

Thu Feb  4 12:38:10 1999  Stan Cox  <scox@cygnus.com>

	* elf32-mips.c (mips_elf_relocate_section): Insure that the target
	of a jump is in the current 256 MB region.

Thu Feb  4 12:15:38 1999  Ian Lance Taylor  <ian@cygnus.com>

	* format.c (bfd_check_format_matches): Change last patch to only
	take effect for the binary target.

Wed Feb  3 19:40:12 1999  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-i386.c (elf_i386_reloc_type_lookup): Add BFD_RELOC_CTOR.

Wed Feb  3 15:02:44 1999  Catherine Moore  <clm@cygnus.com>

	* elf32-fr30.c (fr30_elf_check_relocs):  New routine.

Tue Feb  2 21:38:28 1999  Ian Lance Taylor  <ian@cygnus.com>

	* format.c (bfd_check_format_matches): If the target was
	previously specified, don't check other targets when checking for
	an archive file.

Tue Feb  2 18:16:43 1999  Catherine Moore  <clm@cygnus.com>

        * elf32-arm.h (elf32_arm_reloc_map):  Removed.
        (elf32_arm_reloc_type_lookup):  Removed
        * elfarm-nabi.c (elf32_arm_reloc_map):  New.
        (elf32_arm_reloc_type_lookup):  New.
        * elfarm-oabi.c (elf32_arm_reloc_map):  New.
        (elf32_arm_reloc_type_lookup):  New.

Mon Feb  1 19:49:21 1999  Catherine Moore  <clm@cygnus.com>

        * elfarm-nabi.c:  Renamed from elf32-arm-newabi.c.
        * elfarm-oabi.c:  Renamed from elf32-arm-oldabi.c
        * Makefile.am:  Use new files.
        * Makefile.in:  Regenerate.
        * configure.in:  Use new files.
        * configure:  Regenerate.       

1999-02-01  Nick Clifton  <nickc@cygnus.com>

	* elf32-fr30.c (fr30_elf_gc_mark_hook): New function.
	(fr30_elf_gc_sweep_hook): New function.
	(elf_backend_can_gc_sections): Define.

Mon Feb  1 12:21:47 1999  Catherine Moore  <clm@cygnus.com>

        * targets.c (bfd_target_vector):  Add bfd_elf32_littlearm_oabi_vec
        and bfd_elf32_bigarm_oabi_vec.

Mon Feb  1 11:46:31 1999  Catherine Moore  <clm@cygnus.com>

        * Makefile.am (elf32-arm-oldabi.lo):  New.
        (elf32-arm-newabi.lo):  New.
        * Makefile.in:  Regenerate.
        * config.bfd (thumb-*-elf):  Remove definition of targ_underscore.
        (arm-*-elf):  Likewise.
        (arm-*-oabi):  New.
        (thumb-*-oabi):  New.
        * configure:  Regenerate.
        * configure.in (bfd_elf32_littlearm_oabi_vec):  New.
        (bfd_elf32_bigarm_oabi_vec):  New.
        * elf32-arm-newabi.c:  New.
        * elf32-arm-oldabi.c:  New.
        * elf32-arm.c:  Removed.
        * elf32-arm.h:  New.

Mon Feb  1 11:52:12 1999  Frank Ch. Eigler  <fche@cygnus.com>

	* binary.c (binary_set_section_contents): Omit warnings for
	unloadable sections.

1999-01-31  Michael Meissner  <meissner@cygnus.com>

	* config.bfd (powerpc{,le}-*-vxworks*): Add aliases to
	powerpc{,le}-*-eabi.

1999-01-29  Nick Clifton  <nickc@cygnus.com>

	* dwarf2.c (read_unsigned_leb128): Remove unused variables.
	* dwarf2.c (read_signed_leb128): Remove unused variables.

Fri Jan 29 00:47:21 1999  H.J. Lu  <hjl@gnu.org>

	* elf.c (assign_file_positions_for_segments): Only adjust
	p_align when needed.

Thu Jan 28 20:05:22 1999  Ian Lance Taylor  <ian@cygnus.com>

	* binary.c (binary_set_section_contents): Don't return early for a
 	non-loadable section, in case the first section is non-loadable.
  	Don't set the low lma for a SEC_NEVER_LOAD section.  From Maciej
	W. Rozycki <macro@ds2.pg.gda.pl>.

1999-01-28  Nick Clifton  <nickc@cygnus.com>

	* elf32-fr30.c (fr30_reloc_map): Add R_FR30_GNU_VTINHERIT and
	R_FR30_GNU_VTENTRY relocs.

Thu Jan 28 11:08:16 1999  Catherine Moore  <clm@cygnus.com>

       * elflink.h (elf_link_output_sym):  Zero syms which are
       part of sections which have been excluded.

Wed Jan 27 13:35:35 1999  Stan Cox  <scox@cygnus.com>

	* coff-arm.c (_bfd_coff_arm_set_private_flags): Changed F_PIC
	to F_PIC_INT.
	* coffcode.h (coff_set_arch_mach_hook): Removed F_ARM_2a and
	F_ARM_3M labels.  Changed F_PIC to F_PIC_INT.
	
1999-01-27  Nick Clifton  <nickc@cygnus.com>

	* elf32-fr30.c (fr30_elf_howto_table): Fix name of R_FR30_48
	relocation. 
	(fr30_final_link_relocate): Use computed value as result of
	relocation. 

1999-01-26  Frank Ch. Eigler  <fche@cygnus.com>

	* binary.c (binary_set_section_contents): Emit warning for
	huge file offsets due to widely-dispersed section LMAs.

Mon Jan 18 03:35:35 1999  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (assign_file_positions_for_segments): If not D_PAGED,
	align first section to largest section alignment, not first
	section alignment.

1999-01-04  Jason Molenda  (jsm@bugshack.cygnus.com)

	* configure.in: Require autoconf 2.12.1 or higher.

Tue Dec 22 15:21:41 1998  Catherine Moore  <clm@cygnus.com>

        * archures.c (bfd_mach_i386_i386_intel_syntax):  Define.
        * bfd-in2.h:  Likewise.
        * cpu-i386.c (bfd_i386_arch_intel_syntax):  New.

1998-12-16  Gavin Romig-Koch  <gavin@cygnus.com>

	* archures.c,bfd-in2.h (bfd_mach_mips4111): New.
	* cpu-mips.c: Add support for and independent 4111.
	* elf32-mips.c (elf_mips_mach): E_MIPS_MACH_4111 -> bfd_mach_mips4111.
	(_bfd_mips_elf_final_write_processing): 
	bfd_mach_mips4111 -> E_MIPS_ARCH_3 | E_MIPS_MACH_4111.

1998-12-15  Gavin Romig-Koch  <gavin@cygnus.com>

	* elf32-mips.c (elf_mips_abi_name): New.
	(_bfd_mips_elf_merge_private_bfd_data): Compare EF_MIPS_ABI flags.

1998-12-12  Gavin Romig-Koch  <gavin@cygnus.com>

	* elf32-mips.c (_bfd_mips_elf_final_write_processing): 
	Handle bfd_mach_mips4300.

1998-12-11  Ulrich Drepper  <drepper@cygnus.com>

	* elf32-i386.c: Remove leaked development code from patch
	1998-12-10 by Richard Henderson.

1998-12-10  Richard Henderson  <rth@cygnus.com>

	* elf32-i386.c (elf_i386_relocate_section): Don't fail relocations
	in debug sections for symbol defined externally.

Thu Dec 10 10:58:38 1998  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* targets.c (bfd_target_vector): Remove duplicate entry for
	tekhex_vec.

1998-12-09  Nick Clifton  <nickc@cygnus.com>

	* elf32-fr30.c (fr30_elf_howto_table): Set src_mask fields to 0
	since we are using RELAs.

Tue Dec  8 22:15:48 1998  Ian Lance Taylor  <ian@cygnus.com>

	SCO Open Server Release 5 core file support, from Jouke Numan
	<jnuman@hiscom.nl>:
	* sco5-core.c: New file.
	* configure.in (i[3456]86-*-sco3.2v5*): Use sco5-core.lo.
	(sco5-core.lo): Define SCO5_CORE in COREFLAG.
	* Makefile.am: Rebuild dependencies.
	(OPTIONAL_BACKENDS): Add sco5-core.lo.
	(OPTIONAL_BACKENDS_CFILES): Add sco5-core.c.
	* bfd.c (struct _bfd): Add sco5_core_data field to tdata.
	* targets.c (sco5_core_vec): Add to target list if SCO5_CORE.
	* bfd-in2.h, configure, Makefile.in: Rebuild.

Tue Dec  8 19:38:42 1998  Mark Klein  <mklein@dis.com>

	* config.bfd (hppa*-*-mpeix*): New target.
	* configure.in: Add AC_HEADER_DIRENT.
	(hppa*-*-mpeix*): New target.
	* configure.host (hppa*-*-mpeix*): New host.
	* hpux-core.c: Check HOST_HPPAMPEIX.  Use HAVE_DIRENT_H and
	friends rather than just including <sys/dir.h>.
	* som.h (struct som_symbol): Add hppa_priv_level and apto
	tc_data.  Change all users.
	(struct somdata): Add comp_unit field.
	(obj_som_compilation_unit): Define.
	(bfd_som_attach_compilation_unix): Declare.
	* som.c: Check HOST_HPPAMPEIX.
	(struct som_misc_symbol_info): Add new field priv_level.
	(som_object_setup): Add current_offset parameter.  Change all
	callers.
	(setup_sections): Likewise.
	(som_object_p): For EXECLIBMAGIC, read the lst header.
	(som_write_symbol_strings): Add compilation_unit parameter.
	Change all callers.
	(som_finish_writing): Write out compilation_unit.
	(som_bfd_derive_misc_symbol_info): Set priv_level.
	(som_build_and_write_symbol_table): Set xleast field to 3.
	(som_slurp_symbol_table): Set symbol priv_level.
	(bfd_som_attach_compilation_unit): New function.
	(som_bfd_ar_write_symbol_stuff): Set xleast field to 3.  Set
	priv_level into symbol_value.
	* configure, config.in: Rebuild.

Tue Dec  8 16:21:35 1998  Ian Lance Taylor  <ian@cygnus.com>

	* hpux-core.c (hpux_core_core_file_p): Change call to nonexistent
	warning function to call _bfd_error_handler instead.

	* libbfd.c (COERCE32): Cast through unsigned long and long to
	avoid bug in old version of gcc.

	* elf64-alpha.c (elf64_alpha_additional_program_headers): Remove.
	(elf_backend_additional_program_headers): Don't define.

1998-12-08  Nick Clifton  <nickc@cygnus.com>

	* elf32-fr30.c (fr30_final_link_relocate): Fix PC relative
	relocations to include offset of 2 included in the insns, and the
	offset of the relocs within the section.

Wed Dec  2 15:03:59 1998  David Taylor  <taylor@texas.cygnus.com>

	The following changes were made by David Taylor
 	<taylor@texas.cygnus.com>, Edith Epstein
 	<eepstein@sophia.cygnus.com>, Jim Blandy
 	<jimb@zwingli.cygnus.com>, and Elena Zannoni
 	<ezannoni@kwikemart.cygnus.com> as part of the project to merge in
 	changes originally made by HP; HP did not create ChangeLog
 	entries.

	* aclocal.m4, configure, Makefile.in: Rebuilt using latest
 	automake macro library.

	* hpux-core.c (hpux_core_core_file_p): this function now
 	understands HPUX 10.30 thread info. Yes, the thread stacks can be
 	found in the corefile! Also, in hpux_core_core_file_p, if we
 	encounter a section with an unknown type, don't punt.  Instead,
 	just skip it.  Also, count the number of sections of known type
 	that we encounter.  If we encounter at least one good one, then
 	we'll declare that the file is a core file.  If we encounter any
 	unknown ones but some known ones, then we'll issue a warning (but
 	still declare it to be a core file). Also, correctly decide when a
 	file is not a core.
	(PROC_INFO_HAS_THREAD_ID): define if CORE_ANON_SHMEM defined.
	(CORE_ANON_SHMEM): define if not defined.
	(hpux_core_struct): add members lwpid and user_tid.
	(core_kernel_thread_id, core_user_thread_id): new macros.
	(make_bfd_asection): use bfd_alloc to allocate room for a copy of
 	the name before storing it in the bfd.
	(hpux_core_core_file_p): handle threads.

	* libhppa.h (GET_FIELD): protect against redefinition.
	(HPPA_WIDE): define.
	(GET_FIELD): define.
	(GET_BIT): define.
	(MASK): define.
	(CATENATE): define.
	(ELEVEN): define.
	(sign_extend): redefine.
	(assemble_6): define.
	(assemble_12): rewrite.
	(assemble_16): define.
	(assemble_16a): define.
	(assemble_17): rewrite.
	(assemble_22): define.

1998-12-07  Nick Clifton  <nickc@cygnus.com>

	* elf32-fr30.c (fr30_final_link_relocate): Using signed
	relocations for signed values.

Sun Dec  6 16:30:33 1998  Ian Lance Taylor  <ian@cygnus.com>

	* mipsbsd.c (MY(set_arch_mach)): Make static.
	* aoutx.h (NAME(aout,machine_type)): For bfd_arch_mips, use
	bfd_mach_mips* macros rather than simple numbers.

	COFF weak symbol support, based on patches from Mark Elbrecht
	<snowball3@usa.net>:
	* coffcode.h (coff_slurp_symbol_table): Handle C_WEAKEXT.
	* coffgen.c (coff_renumber_symbols): Handle weak symbols.
	(coff_write_alien_symbol): Likewise.
	* cofflink.c (coff_link_check_ar_symbols): Likewise.
	(coff_link_add_symbols): Likewise.
	(_bfd_coff_link_input_bfd): Likewise.
	(_bfd_coff_write_global_sym): Likewise.

	* elf.c (copy_private_bfd_data): Always initialize the
	includes_phdrs field.

	* elflink.h (elf_fix_symbol_flags): Check for case where a non-ELF
	file defines a symbol first mentioned in an ELF file.

	* bfd-in.h: Always define BFD_HOST_64_BIT and BFD_HOST_U_64_BIT if
	possible, rather than only if BFD64.
	* elflink.h (compute_bucket_count): Just check BFD_HOST_U_64_BIT,
	not __GNUC__.
	* bfd-in2.h: Rebuild.

	* srec.c (srec_set_section_contents): Correct test to avoid
	switching to 4 byte addresses after seeing a second section which
	requires 3 byte addresses.  From Joel Schantz
	<joel.schantz@argosys.boeing.com>.

	* config.bfd (m68*-*-gnu*): New target.  From Aymeric Vincent
	<aymeric.vincent@emi.u-bordeaux.fr>.

1998-12-04  Jim Blandy  <jimb@zwingli.cygnus.com>

	* elf32-ppc.c (ppc_elf_merge_private_bfd_data): Fix logic to
	decide whether the output file is -mrelocatable-lib,
	-mrelocatable, or neither.  (gdb.base/nodebug.exp)

1998-12-03  Nick Clifton  <nickc@cygnus.com>

	* elf32-fr30.c: Add support for R_FR30_48 reloc.
	* reloc.c: Add BFD_RELOC_FR30_48 relocation.
	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate

Wed Dec  2 00:58:37 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_adjust_dynamic_symbol): Warn on an attempt to
	link against a dynamic symbol with no type or size.

1998-12-01  Ulrich Drepper  <drepper@cygnus.com>

	* elf32-i386.c (i386_check_relocs) [R_386_32]: Don't emit
	relocation for section which does not get loaded.
	(elf_i386_relocate_section) [R_386_32]: Likewise.

Tue Dec  1 11:33:33 1998  Jim Wilson  <wilson@cygnus.com>

	* coff-h8300.c (h8300_bfd_link_add_symbols): Make reloc_size,
	reloc_count and i long instead of unsigned long.  Handle error
	return from bfd_canonicalize_reloc.

1998-12-01  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_relocate_section): Detect the absence of
	a hash table.

Mon Nov 30 15:28:09 1998  J"orn Rennecke <amylaar@cygnus.co.uk>

	* elf32-sh.c (elf/sh.h): Include.
	sh_reloc_type: Delete.  Changed all references to elf_sh_reloc_type.
	(sh_elf_howto_tab): Add HOWTO for R_SH_SWITCH8.
	(sh_reloc_map): Map BFD_RELOC_8_PCREL to R_SH_SWITCH8.
	(sh_elf_relax_delete_bytes): Handle R_SH_SWITCH8.
	* Makefile.in: Add dependency of elf32-sh.lo on $(INCDIR)/elf/sh.h.

Fri Nov 27 17:51:38 1998  Geoff Keating  <geoffk@ozemail.com.au>

	* elflink.h (compute_bucket_count): Don't allow minsize==0, it
	causes division by zero later on.

Thu Nov 26 11:19:35 1998  Dave Brolley  <brolley@cygnus.com>

	* elf32-fr30.c (fr30_elf_pc9_reloc,fr30_elf_pc12_reloc): Not
	needed.

1998-11-25  DJ Delorie  <dj@cygnus.com>

	* coff-i386.c (i3coff_object_p): Remove hack.  Use new emulation
	hook now.

Tue Nov 24 10:25:27 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-fr30.c (fr30_elf_relocate_section): Call
	fr30_final_link_relocate.
	(fr30_final_link_relocate): New function: Handle I20 and I32
	relocs.
	(fr30_elf_i32_reloc): New function: Handle I32 relocs.
	(fr30_elf_pc9_reloc): New function: Handle 9_PCREL relocs.
	(fr30_elf_pc12_reloc): New function: Handle 12_PCREL relocs.

	* elf32-v850.c (v850_elf_relocate_section): Reset hi16s reloc
	chain to empty.

	The following changes are based on a patch submitted by Gianluca
	Moro <glctr@abc.it>:

	(v850_elf_perform_relocation): Only update a hi16s reloc if it has
	not already been updated.
	(find_remembered_hi16s_reloc): New parameter 'already_found'
	returns state of remembered hi16s reloc.
	(remember_hi16s_reloc): Set 'found' field to false.
	(hi16s_location): Add 'found' field.

1998-11-23  DJ Delorie  <dj@cygnus.com>

	* coff-i386.c (bfd_pe_dll_not_recognized_hack): the linker wants
	to see .DLL files as unrecognized.
	(i3coff_object_p): Sorry, had to hack it to not recognize these
	files (pei-i386) on request.

1998-11-23  DJ Delorie  <dj@cygnus.com>

	* opncls.c (bfd_make_readable): need more cleanup for symbols and
	relents.  Call bfd_check_format to reinitialize.

Fri Nov 20 14:21:36 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-fr30.c (fr30_elf_relocate_section): Remove spurious
	warnings.

Thu Nov 19 14:42:15 1998  Geoffrey Noer  <noer@cygnus.com>

	* aclocal.m4: regenerate
	* configure: regenerate

Tue Nov 17 20:23:35 1998  Richard Henderson  <rth@cygnus.com>

	* elf-bfd.h (struct elf_link_hash_entry): Add vtable_entries_size.
	* elf.c (_bfd_elf_link_hash_newfunc): Clear it.
	* elflink.h (elf_gc_propagate_vtable_entries_used): Copy it, and
	respect it as an upper bound on what memory to reference.
	(elf_gc_smash_unused_vtentry_relocs): Likewise.
	(elf_gc_record_vtentry): Handle as-yet undefined vtables.  Set and
	update vtable_entries_size appropriately.

Tue Nov 17 15:28:31 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-fr30.c (fr30_reloc_type_lookup): Used integers to hold
	reloc number.

Mon Nov 16 22:19:21 1998  DJ Delorie  <dj@cygnus.com>

	* archive.c (bfd_ar_hdr_from_filesystem): support BFD_IN_MEMORY
 	bfds; they have no "file" so we fake it.
	* bfd-in2.h: add bfd_make_writable and bfd_make_readable (regen)
	* libbfd.c (bfd_write): Allow writing to BFD_IN_MEMORY bfds by
 	resizing the memory buffer.
	* opncls.c (bfd_make_writable): New function; lets you write a
 	bfd_create'd bfd to an in-memory buffer.
	(bfd_make_readable): New function; lets you read back that buffer
 	as if it were from bfd_openr.  Used to build generated archive
 	members (winsup's ld's dlltool)

Mon Nov 16 19:15:19 1998  Dave Brolley  <brolley@cygnus.com>

	* po/bfd.pot: Regenerated.

Mon Nov 16 10:57:06 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (hi16s_location): Replaced fixed size array with
	linked list.

Sun Nov 15 20:28:25 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (elf64_alpha_relax_section): Search for the proper
	element of the gotentry list for local symbols too.
	(elf64_alpha_relocate_section): Unify local and global handling.
	Assert that gotent->use_count > 0.

Sat Nov 14 15:16:01 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in (vms_alpha_vec): Rename from evax_alpha_vec, and
	update for file name changes of July 2, 1998.
	(vms_vax_vec): New.
	* configure: Rebuild.

Thu Nov 12 19:19:54 1998  Dave Brolley  <brolley@cygnus.com>

	* po/bfd.pot: Regenerated.

Tue Nov 10 16:17:06 1998  Geoffrey Noer  <noer@cygnus.com>

	* acinclude.m4, config.bfd: detect cygwin* instead of cygwin32*.
	* aclocal.m4, configure: regenerate

Tue Nov 10 15:13:59 1998  Nick Clifton  <nickc@cygnus.com>

	* elf.c (prep_headers): Add support for bfd_arch_fr30.

Tue Nov 10 13:37:36 1998  Felix Lee  <flee@cygnus.com>

	* acinclude.m4 (BFD_HAVE_SYS_PROCFS_TYPE,
 	BFD_HAVE_SYS_PROCFS_TYPE_MEMBER): didn't define macro when value
 	was cached.
	* aclocal.m4, configure: regenerated.

Tue Nov 10 14:31:01 1998  Catherine Moore  <clm@cygnus.com>

        * elf32-d10v.c (reloc_type):  Add R_D10V_GNU_VTINHERIT and
        R_D10V_GNU_VTENTRY relocs.
        (elf_d10v_howto_table):  Likewise.
        (d10v_reloc_map d10v_reloc_map):  Likewise.
        (elf32_d10v_gc_mark_hook):  New.
        (elf32_d10v_gc_sweep_hook):  New.
        (elf32_d10v_check_relocs):  New.
        (elf32_d10v_relocate_section):  New.
        (elf_backend_relocate_section):  Define.
        (elf_backend_can_gc_sections):  Define.

Sat Nov  7 18:07:51 1998  Peter Schauer  <peter.schauer@regent.e-technik.tu-muenchen.de>

	* Makefile.am (BFD32_BACKENDS): Move vms files here...
	(BFD64_BACKENDS): ...from here.
	(BFD32_BACKENDS_CFILES): Move vms files here...
	(BFD64_BACKENDS_CFILES): ...from here.
	* Makefile.in: Rebuild.

Wed Nov  4 15:58:48 1998  Nick Clifton  <nickc@cygnus.com>

	* Makefile.am: Add FR30 target.
	* Makefile.in: Add FR30 target.
	* archures.c: Add support for FR30.
	* config.bfd: Add support for FR30.
	* configure.in: Add support for FR30.
	* reloc.c: Add support for FR30 relocations.
	* targets.c: Add support for FR30 relocations.
	* bfd-in2.h: Regenerate.
	* configure: Regenerate.
	* libbfd.h:  Regenerate.
	* cpu-fr30.c: New file.
	* elf32-fr30.c: New file.

Mon Nov  2 14:59:33 1998  Geoffrey Noer  <noer@cygnus.com>

	* configure.in: detect cygwin* instead of cygwin32*
	* configure: regenerate

Sun Nov  1 19:32:28 1998  Jeffrey A Law  (law@cygnus.com)

	* elf-m10300.c (mn10300_elf_relax_section): Do not use alloca,
	use bfd_malloc and free instead and check return value from bfd_malloc.

Sun Nov  1 16:20:35 1998  Ian Lance Taylor  <ian@cygnus.com>

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

	* elf32-mips.c (mips_elf_dynsym_sec_names): Comment out.
	(SIZEOF_MIPS_DYNSYM_SECNAMES): Likewise.
	(MIPS_TEXT_DYNSYM_SECN): Likewise.
	(_bfd_mips_elf_fake_sections): Don't set sh_info field of a .hash
	section.
	(struct mips_elf_link_hash_table): Remove dynsym_sec_strindex
	field.
	(mips_elf_link_hash_table_create): Don't initialize
	dynsym_sec_strindex.
	(mips_elf_gc_mark_hook): Add default case to avoid warning.
	(mips_elf_size_dynamic_sections): Generate a section symbol for
	every output section.
	(mips_elf_finish_dynamic_sections): Count all sections for
	DT_MIPS_UNREFEXTNO.
	(mips_elf_finish_dynamic_sections): Use dynamic symbols for all
	output sections.

Sun Nov  1 12:46:53 1998  Geoff Keating  <geoffk@ozemail.com.au>

	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Allocate two slots
	for later PLT entries in large PLTs.
	(ppc_elf_finish_dynamic_symbol): Allow for the extra slots.

Sat Oct 31 20:10:09 1998  Jeffrey A Law  (law@cygnus.com)

	* elf32-ppc.c (ppc_elf_reload_section): Fix typo.

1998-10-26 15:58  Ulrich Drepper  <drepper@cygnus.com>

	* elf-bfd.h (struct elf_link_hash_entry): Add new field elf_hash_value.
	* elflink.h (elf_collect_hash_codes): New function.  This function is
	called for each exported symbol and we compute the ELF hash value for
	it.
	(compute_bucket_value): New function.  It is called from
	size_dynamic_sections to determine the hash table size.  When we are
	optimizing a better, but slower, algorithm is used.
	(size_dynamic_sections): Call compute_bucket_value.

	* elf.c (bfd_elf_hash): Optimize the hash function a bit.

Mon Oct 19 20:03:21 1998  Catherine Moore  <clm@cygnus.com>

        * elf32-sh.c:  Add HOWTO entries for R_SH_GNU_VTINHERIT and
        R_SH_GNU_VTENTRY.
        (sh_elf_gc_mark_hook):  New.
        (sh_elf_gc_sweep_hook):  New.
        (sh_elf_check_relocs):  New.
        (elf_backend_can_gc_sections):  Define.

Mon Oct 19 16:57:05 1998  Felix Lee  <flee@cygnus.com>

	* acinclude.m4: undo previous gettext change
	* aclocal.m4: rebuild with right version of aclocal.

Mon Oct 19 01:47:21 1998  Felix Lee  <flee@cygnus.com>

	* acinclude.m4, aclocal.m4: move gettext-related fragments from
 	aclocal.m4 to acinclude.m4, so they don't get lost.

	* elfcore.h: rewrite for better corefile support.
	* elf.c (elfcore_*): new functions.
	* elf-bfd.h (elf_obj_tdata): new structure members.
	* acconfig.h, acinclude.m4, configure.in: add feature-tests for
 	flavor of procfs.
	* aclocal.m4, config.in, configure, Makefile.in: regenerated.

Fri Oct 16 14:07:45 1998  Catherine Moore  <clm@cygnus.com>

        * elf32-m32r.c:  Add HOWTO entries for R_M32R_GNU_VTINHERIT
        and R_M32R_GNU_VTENTRY.
        (elf_backend_can_gc_sections):  Define.
        (m32r_elf_check_relocs):  New.
        (m32r_elf_gc_mark_hook):  New.
        (m32r_elf_gc_sweep_hook):  New.
        (m32r_elf_relocate_section):  Handle VT relocs.

Mon Oct 12 14:18:40 1998  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (arm_relocate_section): Remove redundant test.

	* bfd-in2.h (struct reloc_howto_struct): Improve comment to make
	cleat that the 'bitsize' field is the size of the bitfield AFTER
	relocation not before.

	* elf32-m32r.c (R_M32R_18_PCREL): Fix size of bitfield.

	* coff-mips.c (mips_relocate_hi): Cope with missing refhi or reflo
	relocs.

Tue Oct  6 09:20:44 1998  Catherine Moore  <clm@cygnus.com>

        * elf32-sparc.c:  Add HOWTO entries for R_SPARC_GNU_VTINHERIT and
        R_SPARC_GNU_VTENTRY.
        (elf32_sparc_check_relocs):  Handle them.
        (elf32_sparc_reloc_type_lookup):  Likewise.
        (elf32_sparc_relocate_section):  Likewise.
        (elf32_sparc_gc_mark_hook):  New.
        (elf32_sparc_gc_sweep_hook):  New.

Mon Oct  5 14:55:30 1998  Jeffrey A Law  (law@cygnus.com)

	* som.c (som_finish_writing): Perform some sanity checks when
	writing an executable or shared library.

Mon Oct  5 12:02:31 1998  Gavin Romig-Koch  <gavin@cygnus.com>

	* dwarf1.c : New file.  Adds _bfd_dwarf1_find_nearest_line.
	* configure.in (elf): Add dwarf1.lo.
	* elf_bfd.h (elf_ob_tdata): Add dwarf1_find_line_info.
	* elf.c (_bfd_elf_find_nearest_line): Add call to
	_bfd_dwarf1_find_nearest_line.
	* elf32-mips.c (_bfd_mips_elf_find_nearest_line):
	Add call to _bfd_dwarf1_find_nearest_line.
	* configure: Rebuilt.

Mon Oct  5 10:06:22 1998  Catherine Moore  <clm@cygnus.com>

        * elflink.h (elf_gc_sections):  Do not allow garbage
        collection if dynamic sections have been created.

Mon Oct  5 09:07:37 1998  Catherine Moore  <clm@cygnus.com>

        * elf32-v850.c: Add HOWTO entries for R_V850_GNU_VTINHERIT and
        R_V850_GNU_VTENTRY.
        (v850_elf_check_relocs):  Handle VTINHERIT and VTENTRY relocs.
        (v850_elf_perform_relocation):  Likewise.
        (v850_elf_final_link_relocate):  Likewise.
        (v850_elf_relocate_section):  Likewise.
        (v850_elf_gc_sweep_hook):  New routine.
        (v850_elf_gc_mark_hook):  New routine.
        (elf_backend_can_gc_sections):  Define.

Mon Oct  5 09:04:25 1998  Catherine Moore  <clm@cygnus.com>

        * elf32-m68k.c (elf_m68k_gc_sweep_hook):  Don't assume
        that dynobj exists.

Sun Oct  4 23:29:34 1998  David Edelsohn  <edelsohn@mhpcc.edu>

	* rs6000-core.c (rs6000coff_core_file_matches_executable_p):
	Declare size as bfd_size_type.
	(rs6000coff_get_section_contents): Declare count as bfd_size_type.

Sun Oct  4 20:38:29 1998  Jeffrey A Law  (law@cygnus.com)

	* cpu-hppa.c (bfd_hppa20_arch): Define.  Link it into the bfd_hppa_arch
	structure.
	* som.c (CPU_PA_RISC2_0): Define.
	(_PA_RISC2_0_ID): Likewise.
	(som_finish_writing): Use CPU_PA_RISC2_0 for the system_id as needed.

Sun Oct  4 21:19:09 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_link_add_object_symbols): When a versioned symbol
	has a base which is already defined, only add the referenced
	symbol to the dynamic symbol table if it is defined or referenced
	by a regular file.

	* elf32-i386.c (elf_i386_info_to_howto_rel): Handle vtable relocs
	correctly.

1998-09-27  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

        * elflink.h (elf_link_add_object_symbols): Undo last change.

Wed Sep 23 16:09:31 1998  Richard Henderson  <rth@cygnus.com>

        * elflink.h (elf_link_add_object_symbols): Don't record a dynamic
        symbol for the indirect alias to a versioned symbol.

Mon Sep 21 12:15:22 1998  Catherine Moore  <clm@cygnus.com>

        * elf32-i386.c (elf32_i386_vtinherit_howto): New.
        (elf32_i386_vtentry_howto): New.
        (elf_i386_reloc_type_lookup):  Return elf32_i386_vtentry_howto
        or elf32_i386_vtinherit_howto  on lookup.

Sun Sep 20 00:48:07 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf32-m68k.c: Include "elf/m68k.h".  Remove definition of enum
	reloc_type.  Rename R_68K__max to R_68K_max.
	(howto_table): Use _bfd_elf_rel_vtable_reloc_fn for a VTENTRY
	reloc.

Sun Sep 20 00:09:25 1998  Chris Torek  <torek@bsdi.com>

	* libbfd.c (bfd_getb32): Rewrite expression to get better code.
	(bfd_getl32, bfd_getb_signed_32, bfd_getl_signed_32): Likewise.

	* libbfd.c (bfd_log2): Cast to bfd_vma before shifting, not
	after.

Sat Sep 19 22:42:23 1998  Doug Rabson  <dfr@nlsystems.com>

	* elflink.h (elf_link_add_object_symbols): Ensure that the warning
	message has a null byte terminator.

Fri Sep 18 14:35:29 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_perform_relocation): Ignore contents of
	word subject to R_V850_32 relocation.

Thu Sep 17 17:20:36 1998  Nick Clifton  <nickc@cygnus.com>

	* dwarf2.c: Add comment describing problem computing line numbers
	for undefined symbols at link time.

Thu Sep 17 16:03:28 1998  Richard Henderson  <rth@cygnus.com>

        * elf64-alpha.c (elf64_alpha_adjust_dynamic_symbol): Don't
        transform a defweak into a plt entry.
        (elf64_alpha_calc_dynrel_sizes): Allow room for secondary
        plt entry references to receive a RELATIVE reloc.
        (elf64_alpha_finish_dynamic_symbol): Fill them in.
        (elf64_alpha_relocate_section): Assert we don't overrun
        the allocated relocation space.

Wed Sep 16 18:03:13 1998  Nick Clifton  <nickc@cygnus.com>

	* elf.c (swap_out_syms): Always treat section symbols as
	special, even if they are attached to a common section.

Wed Sep 16 10:34:13 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_symbol_processing): Move symbols in
	sections with v850 common section attributes into named v850
	common sections.
	(v850_elf_add_symbol_hook): Move symbols in sections with v850
	common section attributes into named v850 common sections.

Wed Sep 16 11:26:49 CDT 1998  Catherine Moore  <clm@cygnus.com>

        * elf32-arm.c (elf32_arm_gc_mark_hook):  Remove print
        statement.

1998-09-15  Geoff Keating  <geoffk@ozemail.com.au>

	* elf32-ppc.c (ppc_elf_relocate_section): Reverse output_offset
	part of Vladimir's change of 1998-08-19.  Make a R_PPC_SDAREL16
	reloc to the wrong section a warning, not an error.  .dynsbss
	is not an output section, so there is no need to check for it.

Tue Sep 15 12:40:05 1998  Catherine Moore  <clm@cygnus.com>

       * elf-bfd.h:  Add argument to elf_backend_get_symbol_type.

Tue Sep 15 08:34:40 1998  Catherine Moore  <clm@cygnus.com>

       * elf.c (swap_out_syms):  Pass type to elf_backend_get_symbol_type.
       * elf32-arm.c:  Add HOWTO entries for R_ARM_GNU_VTINHERIT and
       R_ARM_GNU_VTENTRY.
       (elf32_arm_gc_mark_hook): New.
       (elf32_arm_gc_sweep_hook): New.
       (elf32_arm_check_relocs): New.
       (elf32_arm_final_link_relocate):  Handle VTINHERIT and VTENTRY
       relocations.
       (elf32_arm_relocate_section): Handle VTINHERIT and VTENTRY
       relocations.

1998-09-10  Geoff Keating  <geoffk@ozemail.com.au>

        * elf32-ppc.c (ppc_elf_relocate_section): If dynobj is NULL,
        assume there is no PLT or GOT.

Wed Sep  9 14:24:12 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-arm.c (elf32_arm_find_nearest_line): New function:  just
	like _elf_bfd_find_nearest_line() except that STT_ARM_TFUNC is
	also accepted as a function symbol type.

Mon Sep  7 13:24:03 1998  Peter Schauer  <pes@regent.e-technik.tu-muenchen.de>

	* rs6000-core.c (_LONG_LONG):  Define for AIX 4.x only.

Sat Sep  5 20:40:18 1998  Ian Lance Taylor  <ian@cygnus.com>

	* libbfd-in.h (_bfd_nolink_bfd_gc_sections): Correct definition to
	match definition of _bfd_gc_sections field.
	* libbfd.h: Rebuild.

Fri Sep  4 13:54:23 1998  David Miller  <davem@dm.cobaltmicro.com>

	* elf32-sparc.c (elf32_sparc_relocate_section): Properly adjust
	the addend of a dynamic relocation referencing a section.
	* elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
	(sparc64_elf_finish_dynamic_symbol): Fix the PLT relocation offset.

Thu Sep  3 17:28:50 1998  Richard Henderson  <rth@cygnus.com>

	* elflink.h (bfd_elfNN_size_dynamic_sections): Verify that the
	bed has a size_dynamic_sections routine before trying to use it.

Mon Aug 31 14:49:22 1998  Richard Henderson  <rth@cygnus.com>

	* elf32-mips.c (elf_mips_gnu_vtentry_howto): Use
	_bfd_elf_rel_vtable_reloc_fn.

Mon Aug 31 10:23:40 1998  Catherine Moore  <clm@cygnus.com>

        * Makefile.am:  Add elf32-arm.c.
        * Makefile.in:  Rebuild.
        * elf-bfd.h:  Add elf_backend_get_symbol_type.
        * elf.c (swap_out_syms):  If defined, call
        elf_backend_get_symbol_type.
        * elf32-arm.c: Define elf_backend_get_symbol_type.
        (elf32_arm_get_symbol-type):  New routine.
        (record_thumb_to_arm_glue):  Change to use STT_ARM_TFUNC.
        (bfd_elf32_arm_process_before_allocation):  Change to
        check for STT_ARM_TFUNC.
        (elf32_arm_final_link_relocate):  Likewise.
        * elfxx-target.h:  Add elf_backend_get_symbol_type.

Fri Aug 28 19:44:07 1998  Richard Henderson  <rth@cygnus.com>

	* archures.c (bfd_mach_alpha_ev[456]): New.
	* cpu-alpha.c: Rework to match these types.
	* bfd-in2.h: Rebuild.

Fri Aug 28 19:38:53 1998  Richard Henderson  <rth@cygnus.com>

	* elf-bfd.h (_bfd_elf_rel_vtable_reloc_fn): Declare.
	* elf.c (_bfd_elf_rel_vtable_reloc_fn): New.

	* elf32-i386.c (elf_howto_table): Add vtable relocs.
	(elf_i386_reloc_type_lookup): Recognize them.
	(elf_i386_check_relocs): Pass them off to generic code.
	(elf_i386_relocate_section): Ignore them.
	(elf_i386_gc_mark_hook, elf_i386_gc_sweep_hook): New.
	(elf_backend_can_gc_sections): True.

Thu Aug 20 15:03:45 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-arm.c (elf32_thumb_to_arm_stub): Check sym_sec is not NULL
	before looking at owner field.
	(elf32_arm_to_thumb_stub): Ditto.
	(elf32_arm_relocate_section): Compute name before calling
	elf32_arm_final_link_relocate().

Thu Aug 20 11:30:17 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* elf.c: comment and formatting cleanups.
	* elfcore.h: ditto.

Wed Aug 19 15:43:26 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* elfcode.h (elf_object_p): Reject files of header type ET_CORE
	(core files are treated differently than object files).
	* elf-bfd.h (_bfd_elf_write_corefile_contents,
	bfd_elf_mkcorefile): declare.
	* elfxx-target.h (_bfd_elf_write_corefile_contents,
	bfd_elf_mkcorefile): add to bfd_target vector.
	* elfcore.h (elf_core_file_p): save the program header table,
	and set the bfd architecture from the elf file header.
	* elf.c (bfd_elf_mkcorefile): new function.
	(_bfd_elf_write_corefile_contents): new function.
	(assign_file_positions_for_segments): add cases for handling
	PT_NOTE segments.  (assign_file_positions_except_relocs):
	core files should be handled the same as exec files.
	(prep_headers): identify core files as type ET_CORE.
	(copy_private_bfd_data): identify the sections belonging to
	the PT_NOTE segment.

	* elf32-sparc.c (elf32_sparc_final_write_processing):
	add break statement to default case.

1998-08-19  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* elf32-ppc.c (ppc_elf_relocate_section): Check that output
	section (not input) will be in sections ".sbss", ".sbss2",
	".sdata", and ".sdata" for R_PPC_SDAREL16, R_PPC_EMB_SDA2REL,
	R_PPC_EMB_SDA21, R_PPC_EMB_RELSDA.  In all these cases also ignore
	output_offset for correct evaluation of addend.

Tue Aug 18 11:48:12 1998  Catherine Moore  <clm@cygnus.com>

        * elf32-arm.c: Add prefix bfd_ to elf32_arm_get_bfd_for_interworking,
        elf32_arm_allocate_interworking_sections and
        elf32_arm_process_before_allocation.

Tue Aug 18 11:46:00 1998  Nick Clifton  <nickc@cygnus.com>

        * bfd-in.h: Ammend prototype for
        elf32_arm_process_before_allocation to remove surplus third
        argument.

        * bfd-in2.h: Regenerate.

Sat Aug 15 20:55:08 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (elf64_alpha_relax_section): Handle indirect symbols.

Fri Aug 14 09:12:28 1998  Stan Cox  <scox@cygnus.com>

	* aoutx.h (aout_link_input_section_ext): Use the relocation already
	calculated for RELOC_SPARC_REV32 case.

Thu Aug 13 14:02:02 1998  Catherine Moore  <clm@cygnus.com>

       * bfd-in.h:  Add prototypes for elf32_arm_get_bfd_for_interworking,
       elf32_arm_allocate_interworking_sections and
       elf32_arm_process_before_allocation.
       * bfd-in2.h:  Regenerated.
       * elf32-arm.c Define elf32_arm_link_hash_table.
       (insert_thumb_branch): New routine.
       (find_thumb_glue): New routine.
       (find_arm_glue): New routine.
       (record_arm_to_thumb_glue): New routine.
       (record_thumb_to_arm_glue): New routine.
       (elf32_arm_link_hash_table_create): New routine.
       (elf32_arm_get_bfd_for_interworking): New routine.
       (elf32_arm_allocate_interworking_sections) New routine.
       (elf32_arm_process_before_allocation) New routine.
       (elf32_thumb_to_arm_stub): New routine.
       (elf32_arm_to_thumb_stub): New routine.
       (elf32_print_private_bfd_data): Fix typo.
       (elf32_arm_final_link_relocate):  Add argument sym_sec.
       Check for branches to thumb symbols in case R_ARM_PC24.
       Check for branches to arm symbols in case R_ARM_THM_PC22.
       (elf32_arm_relocate_section):  Pass symbol section to
       elf32_arm_final_link_relocate.

Wed Aug 12 19:00:39 1998  Geoff Keating  <geoffk@ozemail.com.au>

	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Generate PLT
	entries unless the symbol is defined in the executable; in
	particular, undefined weak symbols get a PLT entry.

Wed Aug 12 14:48:33 1998  Ian Lance Taylor  <ian@cygnus.com>

	* libaout.h: Remove nested comment to avoid warning.

Wed Aug 12 08:10:11 1998 Catherine Moore  <clm@cygnus.com>

       * elf32-arm.c (elf32_arm_final_link_relocate):  Rework
       R_ARM_PC24 relocation.

Tue Aug 11 14:42:26 1998  Catherine Moore  <clm@cygnus.com>

       * elf32-arm.c (elf32_arm_final_link_relocate):  Remove unused
       argument is_local.  Add argument sym_flags.  Check sym_flags
       in R_ARM_ABS32 case.  Include addend for R_ARM_THM_PC22 case.
       (elf32_arm_relocate_section):  Don't pass local sym and pass
       sym_flags to elf32_arm_final_link_relocate.

Mon Aug 10 20:38:39 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (elf64_alpha_calc_dynrel_sizes): Correct last change
	to not count too few relocs for dynamicly linked executables.

Mon Aug 10 15:35:34 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (alpha_elf_dynamic_symbol_p): Never consider
	symbols without a dynamic index dynamic.  Consider all weak
	symbols dynamic.
	(elf64_alpha_strip_section_from_output): Don't assume 1-1
	correspondance between input and output sections.

Mon Aug 10 15:31:39 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elflink.h (elf_gc_common_finalize_got_offsets): For backends
	that use a .got.plt section start the got offset at zero.

Mon Aug 10 17:31:21 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_write_processor): Correct the processor ID written
	out for bfd_arch_m68k, accommodating change of March 25.

Sun Aug  9 20:55:44 1998  Catherine Moore  <clm@cygnus.com>

        * elf32-arm.c (elf32_arm_final_link_relocate):  Rework
        R_ARM_THM_RPC22 relocations.

Sat Aug  8 15:15:30 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (alpha_elf_dynamic_symbol_p): Undef weak symbols
	are always dynamic.
	(elf64_alpha_calc_dynrel_sizes): Allow enough room for RELATIVE
	.got relocs in -Bsymbolic shared objects.

Wed Aug  5 15:48:08 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-arm.c: Add private flags to ELF header.
	(elf32_arm_print_private_bfd_data): New Function.
	(elf32_arm_set_private_flags): New Function.
	(elf32_arm_copy_private_flags): New Function.
	(elf32_arm_merge_private_bfd_data): New Function.

Mon Aug  3 17:10:15 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-sparc.c (elf32_sparc_check_relocs): Permit WPLT30 against
	a local symbol.
	(elf32_sparc_relocate_section): Likewise.

Sun Aug  2 03:19:23 1998  Richard Henderson  <rth@cygnus.com>

	* elf32-ppc.c (ppc_elf_check_relocs): Init sgot to NULL.  Create the
	.got if any relocation referrs to _GLOBAL_OFFSET_TABLE_.
	(ppc_elf_relocate_section): Pull sgot and splt search to the start
	of the function.  Recognize no .plt as static linking.

1998-08-01  Ulrich Drepper  <drepper@cygnus.com>

	* elf32-mips.c (_bfd_mips_elf_section_from_shdr): Don't pass
	".liblist" string through gettext.

Fri Jul 31 16:38:14 1998  Catherine Moore  <clm@cygnus.com>

        * Makefile.am: Add support for elf32-arm.lo.
        * Makefile.in: Rebuild.
        * config.bfd (arm-*-elf):  Define targ_defvec and targ_selvecs.
        (thumb-*-elf): Define targ_defvec and targ_selvecs.
        * configure.in:  Handle bfd_elf32_littlearm_vec and bfd_elf32_bigarm_vec.
        * configure: Regenerate.
        * elf.c: (prep_headers):  Support arch_type of EM_ARM.
        * targets.c:  Support new targets bfd_elf32_bigarm_vec and
        bfd_target bfd_elf32_littlearm_vec.
        * elf32-arm.c:  New file.

Tue Jun 28 19:05:28 1998  Stan Cox  <scox@cygnus.com>

	* libaout.h (M_SPARCLITE_LE): New machine.
	* sunos.c (MACHTYPE_OK): Add machine M_SPARCLITE_LE.
	* aoutf1.h (sunos_set_arch_mach): Add machine M_SPARCLITE_LE.
	(sunos_write_object_contents): Add machine bfd_mach_sparc_sparclite_le
	* aoutx.h (howto_table_ext): Add relocation R_SPARC_REV32.
	(NAME(aout,machine_type)) Add machine bfd_mach_sparc_sparclite_le
	(aout_link_input_section_ext): Add RELOC_SPARC_REV32 support.
	* elf32-sparc.c (_bfd_sparc_elf_howto_table, sparc_reloc_map,
	elf32_sparc_relocate_section): Rename R_SPARC_32LE to be R_SPARC_REV32
	* libbfd.h (bfd_reloc_code_real_names): Rename BFD_RELOC_SPARC_32LE to
	be BFD_RELOC_SPARC_REV32.
	* reloc.c: Ditto.
	* config.bfd (sparc86x-*-aout): New

Fri Jul 24 13:54:19 1998  Nick Clifton  <nickc@cygnus.com>

	* linker.c (_bfd_generic_final_link): Allocate NULL symbol before
	actually mapping the output sections.

Fri Jul 24 11:24:29 1998  Jeffrey A Law  (law@cygnus.com)


	* elf-m10300.c (mn10300_elf_howto): Add R_MN10300_24 entry.
	(mn10300_elf_reloc_map): Similarly.
	(mn10300_elf_final_link_relocate): Handle R_MN10300_24.

Fri Jul 24 12:36:04 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (elf_mips_howto_table): Add reloc types used on
	Irix 6.
	(bfd_elf32_bfd_reloc_type_lookup): Add default case.
	* elf64-mips.c: Replace all uses of mips_elf64_reloc_type with
	elf_mips_reloc_type defined in elf/mips.h.

1998-07-24  Ulrich Drepper  <drepper@cygnus.com>

	* elf64-mips.c: Remove reloc_type definition completely.  It's now
	in elf/mips.h.

Thu Jul 23 13:33:19 1998  Doug Evans  <devans@canuck.cygnus.com>

	* elf64-mips.c (mips_elf64_reloc_type): #if 0 out more relocations
	as they are defined in elf/mips.h now.

Thu Jul 23 11:29:43 1998  Jeffrey A Law  (law@cygnus.com)


	* Re-add lost change:
        * 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.

Thu Jul 23 11:38:05 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-sparc.c (elf_backend_got_header_size): Define as 4.
	* elf64-sparc.c (elf_backend_got_header_size): Define as 8.

1998-07-22  Ulrich Drepper  <drepper@cygnus.com>

	* elf32-ppc.c: Change use of pp_reloc_type to elf_ppc_reloc_type.

Wed Jul 22 16:27:18 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-hppa.h: Let ELF header define the enum containing the
	external reloc numbers.
	* elf32-i386.h: Likewise.

1998-07-22 14:57  Ulrich Drepper  <drepper@cygnus.com>

	* elf-m10300.c: Let ELF header now define the macros to get the enum.
	* elf32-mips.c: Likewise.
	* elf32-ppc.c: Likewise.

Wed Jul 22 13:53:52 1998  Nick Clifton  <nickc@cygnus.com>

	* bfd-in2.h: Change type of 'class' parameter to 'unsigned int' in
	bfd_coff_set_symbol_class(), in order to avoid K&R compatability
	prblems.
	* bfd-in.h: Regenerate.
	* coffgen.c (bfd_coff_set_symbol_class): Change type of 'class'
	parameter to 'unsigned int' to avoid K&R compatability problems.

Wed Jul 22 16:43:24 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_find_nearest_line): Change filename_ptr and
	functionname_ptr to be const.  Change line_ptr to be unsigned.

	* coffcode.h (coff_link_output_has_begun): Simplify handling when
	macro is not defined.  Change second parameter from bfd_link_info
	to coff_final_link_info.  Add prototype.
	(coff_final_link_postscript): Simplify handling when macro is not
	defined.  Add prototype.

1998-07-22 13:08  Ulrich Drepper  <drepper@cygnus.com>

	* elf-mn10300.c: Before include system specific ELF header define
	START_RELOC_NUMBERS, RELOC_NUMBER, and END_RELOC_NUMBERS.
	* elf32-mips.c: Likewise.
	* elf32-ppc.c: Likewise.

Wed Jul 22 13:46:51 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf64-mips.c (mips_elf64_reloc_type): Copy Ulrich's elf32-mips.c
	temporary patch over to elf64-mips.c as well.

1998-07-21  Ulrich Drepper  <drepper@cygnus.com>

	* elf32-mips.c (reloc_type): Temporarily disable definition of
	standard relocation since they are now defined in elf/mips.h.

Tue Jul 21 09:47:00 1998  Catherine Moore  <clm@cygnus.com>

        * elf-m10200.c (mn10200_elf_final_link_relocate):
        Modify range test for case R_MN10200_8.

        * elf-m10300.c (mn10300_elf_final_link_relocate):
        Modify range test for case R_MN10300_8.

Mon Jul 20 18:50:54 1998  Richard Henderson  <rth@cygnus.com>

	* elf-bfd.h (struct elf_backend_data): Add got_ & plt_header_size.
	* elf32-i386.c (elf_backend_got_header_size): Define.
	(elf_backend_plt_header_size): Define.
	* elf32-m68k.c, elf32-mips.c, elf32-ppc.c: Likewise.
	* elf32-sparc.c, elf64-alpha.c, elf64-sparc.c: Likewise.
	* elfxx-target.h: Provide a default of zero.
	* elflink.c (_bfd_elf_create_got_section): Use got_header_size.
	* elflink.h (elf_gc_common_finalize_got_offsets): Likewise.

	* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Don't remove a PLT
	entry from an executable, even if the plt refcount goes to 0.

Mon Jul 20 12:47:26 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* aoutx.h (NAME(aout,find_nearest_line)): Also remember the
	directory name at the line number.

	* elf.c (_bfd_elf_find_nearest_line): Also consider symbols
	with an unspecified type.

Wed Jul 15 11:20:01 1998  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c: Add undef of valid to avoid problem on SunOS.

Tue Jul 14 15:30:59 1998  Richard Henderson  <rth@cygnus.com>

	* config.bfd (i?86-pc-beos{pe,elf,}*): Recognize.

Tue Jul 14 11:22:21 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf32-m68k.c (elf_m68k_check_relocs): Also reference count
	R_68K_PCxx and R_68K_xx relocations.  Make sure that
	ELF_LINK_HASH_NEEDS_PLT is always set for a PLT reloc reference.
	(elf_m68k_gc_sweep_hook): Also reference count R_68K_PCxx and
	R_68K_xx relocations.
	(elf_m68k_adjust_dynamic_symbol): Reset the plt offset of a symbol
	that has no plt entry.
	(elf_m68k_relocate_section): Ignore the plt offset in a static
	link.
	* elflink.h (elf_adjust_dynamic_symbol): Reset the plt offset for
	an ignored symbol.
	(elf_gc_common_finalize_got_offsets): Set the got offsets also in
	a static link.

	* elf32-m68k.c (R_68K_GNU_VTINHERIT, R_68K_GNU_VTENTRY): New reloc
	types.
	(howto_table, reloc_map): Add entries for them.
	(elf_m68k_check_relocs): Handle them.  Implement reference
	counting for got and plt entries.
	(elf_m68k_gc_mark_hook, elf_m68k_gc_sweep_hook): New functions.
	(elf_m68k_adjust_dynamic_symbol): Handle unreferenced plt
	symbols.
	(rtype_to_howto_rel, elf_info_to_howto_rel): Delete.
	(elf_m68k_relocate_section): Handle the new reloc types.
	(bfd_elf32_bfd_final_link, elf_backend_gc_mark_hook,
	elf_backend_gc_sweep_hook, elf_backend_can_gc_sections): Define.
	* elflink.h (elf_link_add_object_symbols): When creating an
	indirect reference for symbol versioning also copy the plt
	offset.
	(elf_fix_symbol_flags): When clearing the ELF_LINK_HASH_NEEDS_PLT
	flag also reset the plt offset.
	(elf_link_assign_sym_version): Likewise.
	(elf_gc_common_finalize_got_offsets): Increment the got offset by
	the size of the entry in bytes.
	(elf_gc_allocate_got_offsets): Likewise.

Tue Jul 14 11:18:14 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_gc_sections): Return true rather than falling off
	the bottom.

	* coffgen.c (bfd_coff_set_symbol_class): Call bfd_alloc, not
	xmalloc.

Mon Jul 13 11:06:31 1998  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c: Supress definition of TARGET_UNDERSCORE and add a
	comment describing when it should be enabled.
	Changed definition of USER_LABEL_PREFIX to "", to fall into line
	with GCC sources.

Mon Jul 13 13:06:54 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_slurp_external_symbols): Handle call optimization
	information ATN records.

Fri Jul 10 16:31:06 1998  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_slurp_external_symbols): Select an appropriate
	section for an absolute symbol in a fully linked file.  Based on
	patch from Christian Holland <CHolland@de.lucent.com>.

Wed Jul  8 11:29:56 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* coff-m88k.c (m88k_special_reloc): Don't lose the information
	that a symbol is undefined.

Tue Jul  7 21:47:02 1998  Jeffrey A Law  (law@cygnus.com)

	* som.c (som_bfd_gc_sections): Define.

Mon Jul  6 11:35:50 1998  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (aoutarm_std_reloc_howto): Do not complain about
	overflows in ARM_26D patches, since they have already been
	implmented.  Patch submitted by Dr. R.J. Black <rjb@dcs.gla.ac.uk>

Sat Jul  4 12:25:36 1998  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_write_object_contents): If we have any long
	section names, call coff_write_symbols even if there are no
	symbols.

Fri Jul  3 13:11:35 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (copy_private_bfd_data): Only set phdr_included once for a
	PT_LOAD segment, rather than only setting it once for the entire
	file.

	* elf.c (_bfd_elf_make_section_from_shdr): When setting the LMA,
	rather than ignoring every phdr with a p_paddr of 0, ignore all
	the phdrs if they all have a p_paddr of 0.

	* stabs.c (_bfd_write_stab_strings): Check whether the .stabstr
	section was discarded from the link.

Fri Jul  3 14:39:05 1998  J"orn Rennecke <amylaar@cygnus.co.uk>

	* coff-sh.c (sh_insn_uses_freg): Ignore lowest bit of register number.

Fri Jul  3 14:35:48 1998  J"orn Rennecke <amylaar@cygnus.co.uk>

	* coff-sh.c (sh_insns_conflict): Load of fpscr conflicts with
	floating point operations.

Thu Jul  2 18:37:25 1998  Ian Lance Taylor  <ian@cygnus.com>

	* cofflink.c (_bfd_coff_link_input_bfd): Skip undefined global
	function symbols.

Thu Jul  2 14:59:42 1998  Klaus Kaempf  <kkaempf@rmi.de>

	Merge of vax/vms (read-only) support
	* configure.com: Support Vax target.
	* makefile.vms: Support Vax target.
        * vms.h: Renamed from evax.h, merged vax/vms (read-only) support.
	* vms.c: Renamed from evax-alpha.c, merged vax/vms (read-only)
	support.
	* vms-hdr.c: Renamed from evax-emh.c, merged vax/vms (read-only)
	support.
	* vms-gsd.c: Renamed from evax-egsd.c, merged vax/vms (read-only)
	support.
	* vms-tir.c: Renamed from evax-etir.c, merged vax/vms (read-only)
	support.
	* vms-misc.c: Renamed from evax-misc.c, merged vax/vms (read-only)
	support.
	* libbfd.c (real_read): Use unbuffered read on VMS/Vax.
	* targets.c (bfd_target_ovax_flavour): New flavour.
	(vms_alpha_vec): Renamed from evax_alpha_vec.
	(vms_vax_vec): New.
	(target_vector): Update accordingly.
	* config.bfd (alpha*-*-*vms*): Use vms_alpha_vec, not
	evax_alpha_vec.
	(vax*-*-*vms*): New target.
	* Makefile.am: Update for renamed files.  Rebuild dependencies.
	* bfd-in2.h: Rebuild.
	* configure.in, Makefile.in, aclocal.m4: Rebuild.

Thu Jul  2 13:31:55 1998  Ian Lance Taylor  <ian@cygnus.com>

	Based on patch from Matt Semersky <matts@scd.hp.com>:
	* linker.c (_bfd_generic_final_link): Force a trailing NULL
	pointer on abfd->outsymbols.
	(generic_add_output_symbol): Handle NULL sym parameter.

Wed Jul  1 17:05:53 1998  Nick Clifton  <nickc@cygnus.com>

	* elf.c (copy_private_bfd_data): Add support for changing VMA or
	LMA of sections.

Wed Jul  1 16:58:50 1998  Ian Lance Taylor  <ian@cygnus.com>

	* coff-sh.c (sh_relax_delete_bytes): Correct address comparisons
 	when handling 32 bit immediate relocs.
	* elf32-sh.c (sh_elf_relax_delete_bytes): Likewise.

Tue Jun 30 09:55:03 1998  Jeffrey A Law  (law@cygnus.com)

	* section.c (STD_SECTION): Account for recently added gc_mark
	field in struct asection.

	* elf-m10300.c (bfd_mn10300_elf_merge_private_bfd_data): New function.
	(bfd_elf32_bfd_merge_private_bfd_data): Define.

Thu Jun 25 18:31:41 1998  Richard Henderson  <rth@cygnus.com>

	ELF Section-level Garbage Collection:
	* bfd.c (bfd_gc_sections): New.
	* aout-adobe.c: Hook to default implementation.
	* aout-target.h, aout-tic30.c, binary.c, bout.c: Likewise.
	* coff-alpha.c, coff-mips.c, coff-rs6000.c, coffcode.h: Likewise.
	* evax-alpha.c, i386msdos.c, i386os9k.c, ieee.c: Likewise.
	* ihex.c, nlm-target.h, oasys.c, ppcboot.c, srec.c: Likewise.
	* tekhex.c, versados.c: Likewise.
	* libbfd-in.h (_bfd_nolink_bfd_gc_sections): New.
	* targets.c (BFD_JUMP_TABLE_LINK): Add _bfd_gc_sections.

	* reloc.c (BFD_RELOC_VTABLE_INHERIT, BFD_RELOC_VTABLE_ENTRY): New.
	(bfd_generic_gc_sections): New.
	* section.c (SEC_KEEP): New.
	(asection): Add gc_mark member.

	* elfcode.h (elf_gc*): New name remappings.
	* elflink.h (elf_link_input_bfd): Don't set contents on stabs
	sections to be excluded.
	(elf_gc_mark, elf_gc_sweep, elf_gc_sweep_symbol): New.
	(elf_gc_propogate_vtable_entries_used): New.
	(elf_gc_smash_unused_vtentry_relocs): New.
	(elf_gc_sections, elf_gc_record_vtinherit, elf_gc_record_vtentry): New.
	(elf_gc_common_finalize_got_offsets): New.
	(elf_gc_allocate_got_offsets, elf_gc_common_final_link): New.
	* elfxx-target.h: Add and default gc hooks.

	* elf-bfd.h (struct elf_link_hash_entry): Swap got_offset/plt_offset
	for unions.
	(struct elf_obj_tdata): Likewise for local_got_offsets.
	* elf.c, elf-i386.c, elf32-m68k.c, elf32-mips.c: Update all uses.
	* elf32-ppc.c, elf32-sparc.c, elf64-alpha.c: Likewise.
	* elf64-sparc.c, elflink.h: Likewise.

	* elf-bfd.h (struct elf_link_hash_entry): Add vtable members.
	(ELF_LINK_HASH_MARK): Define.
	(struct elf_backend_data): Add GC hooks.
	* elf.c (_bfd_elf_link_hash_newfunc): Zero vtable members.

	* elf-m10300.c (mn10300_elf_check_relocs): New.
	(mn10300_elf_gc_mark_hook): New.
	(R_MN10300_GNU_VTINHERIT, R_MN10300_GNU_VTENTRY): New.
	(elf_mn10300_howto, mn10300_reloc_map): Handle them.
	(mn10300_elf_final_link_relocate): Likewise.
	(mn10300_elf_relocate_section): Likewise.
	(elf_backend_can_gc_sections): Define.
	* elf32-mips.c (R_MIPS_GNU_VTINHERIT, R_MIPS_GNU_VTENTRY): New.
	(elf_mips_gnu_vtinherit_howto, elf_mips_gnu_vtentry_howto): New.
	(bfd_elf32_bfd_reloc_type_lookup): Handle them.
	(mips_info_to_howto_rel): Likewise.
	(mips_elf_relocate_section): Likewise.
	(mips_elf_check_relocs): Likewise.
	(mips_elf_gc_mark_hook, mips_elf_gc_sweep_hook): New.
	(elf_backend_can_gc_sections): Define.
	* elf32-ppc.c (R_PPC_GNU_VTINHERIT, R_PPC_GNU_VTENTRY): New.
	(ppc_elf_howto_raw): Handle them.
	(ppc_elf_reloc_type_lookup): Likewise.
	(ppc_elf_relocate_section): Likewise.
	(ppc_elf_check_relocs): Reference count .got and .plt entires.
	Handle new vtable relocs.
	(ppc_elf_adjust_dynamic_symbol): Recognize unused .plt entries.
	(ppc_elf_gc_mark_hook, ppc_elf_gc_sweep_hook): New.
	(elf_backend_can_gc_sections): Define.

Fri Jun 26 10:48:23 1998  Jeffrey A Law  (law@cygnus.com)

	* archures.c (bfd_mach_mn10300): Define.
	* elf-m10300.c: Include elf/mn10300.h
	(elf_mn10300_mach): New function.
	(_bfd_mn10300_elf_final_write_processing): Likewise.
	(_bfd_mn10300_elf_object_p): Likewise.
	(elf_backendfinal_write_processing): Define.
	(elf_backend_object_p): Likewise.

Thu Jun 25 18:31:08 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_perform_relocation): Fix HI16_S
	relocation.

Wed Jun 24 17:17:57 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_bfd_final_link): Loop over input_bfds using the
	link_next field, not the next field.

Sun Jun 21 19:38:39 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (map_sections_to_segments): Check the section address
	against the phdr size both with and without a modulo of
	maxpagesize.

Fri Jun 19 17:08:18 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_size_dynamic_sections): Only strip a
	linker created empty input section if the output section has the
	same name.

	* elflink.h (elf_link_output_extsym): Print an error message if
	_bfd_elf_section_from_bfd_section fails.

	* elf.c (_bfd_elf_section_from_bfd_section): Call bfd_set_error on
	failure.

Tue Jun 16 11:55:55 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (copy_private_bfd_data): Improve handling of Solaris
 	native linker output.  Avoid putting an empty section in more than
 	one segment.

Fri Jun 12 13:30:17 1998  Tom Tromey  <tromey@cygnus.com>

	* po/Make-in (all-yes): If maintainer mode, depend on .pot file.
	($(PACKAGE).pot): Unconditionally depend on POTFILES.

Fri Jun 12 13:34:02 1998  Doug Evans  <devans@canuck.cygnus.com>

	* elf.c (swap_out_syms): New arg relocatable_p.
	Don't add section VMA to symbols for relocatable output.
	(_bfd_elf_compute_section_file_positions): Update call to
	swap_out_syms.

Mon Jun  8 15:20:57 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_perform_relocation): Make comparisons
	against 'addend' be signed rather than unsigned.

Sat Jun  6 00:31:21 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-m32r.c: Add prototyps for static functions.

	* coff-arm.c: Add prototypes for static functions.

Fri Jun  5 17:21:51 1998  Nick Clifton  <nickc@cygnus.com>

	* elf.c (elf_sort_sections): Sort by LMA first then VMA, since the
	LMA is used to order sections in a segment.

	* elf32-v850.c: Add prototypes for static functions.
	Change type of addend parameter to bfd_vma in various functions.

Fri Jun  5 18:09:58 1998  Ian Lance Taylor  <ian@cygnus.com>

	* aoutx.h (howto_table_ext): Change RELOC_BASE13 to use
	complain_overflow_signed instead of complain_overflow_bitfield.

Fri Jun  5 15:11:11 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf.c (elf_map_symbols): Don't add section VMA to symbol value
	when comparing against 0.

Wed Jun  3 17:52:49 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (config.status): New target.
	* Makefile.in: Rebuild.

Wed Jun  3 12:18:24 1998  Stan Cox  <scox@equinox.cygnus.com>

	* elf32-sparc.c (elf32_sparc_merge_private_bfd_data): Give an
	error if previous object endianness doesn't match current object.

Tue Jun  2 17:50:59 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_print_private_bfd_data): Call
	_bfd_elf_print_private)bfd_data ().

Tue Jun  2 15:29:35 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elflink.h (elf_merge_symbol): Don't always set type_change_ok
	and size_change_ok.
 	(elf_link_add_object_symbols): Set type_change_ok and
	size_change_ok before calling elf_merge_symbol.

	* elf32-mips.c (mips_elf_relocate_section): If we issue an
	undefined symbol error, don't also issue an overflow error.

Tue Jun  2 13:51:00 1998  Geoff Keating  <geoffk@ozemail.com.au>

	* elf32-ppc.c (ppc_elf_relocate_section): The target of an
	R_PPC_LOCAL24PC relocation should be local; if not, print an error
	message instead of crashing.

Mon Jun  1 18:23:12 1998  Yuli Barcohen  <yuli.barcohen@telrad.co.il>

	* archures.c (bfd_mach_cpu32): Define.
	(bfd_default_scan): Add case for 68060.  Fix 68332 case to use
	bfd_mach_cpu32.
	* cpu-m68k.c (arch_info_struct): Add m68k:cpu32.
	* ieee.c: Include <ctype.h>.
	(ieee_object_p): Parse out process ID string to make it more
	likely to be acceptable for bfd_scan_arch.
	* bfd-in2.h: Rebuild.

Mon Jun  1 11:12:02 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-m32r.c (m32r_elf_print_private_bfd_data): Also call
	_bfd_elf_print_private_bfd_data() so that the program header will
	be displayed.

Mon Jun  1 12:14:28 1998  Ian Lance Taylor  <ian@cygnus.com>

	* peicode.h (coff_swap_sym_in): Check for C_SECTION rather than
	0x68.  Reindent.  Add some comments.

Fri May 29 09:58:08 1998  Nick Clifton  <nickc@cygnus.com>

	* elf.c (copy_private_bfd_data): Adjust physical address of
	segment in output BFD to contain LMAs of its sections.

Tue May 26 19:37:47 1998  Stan Cox  <scox@equinox.cygnus.com>

	* elf32-sparc.c (_bfd_sparc_elf_howto_table, sparc_reloc_map,
	elf32_sparc_relocate_section): Added R_SPARC_32LE for little
	endian data 32 bit relocations.
	(elf32_sparc_merge_private_bfd_data): Check if linking little
	endian objects with big endian objects.
	(elf32_sparc_object_p): Set bfd_mach_sparc_sparclite_le.
	(elf32_sparc_final_write_processing): Set EF_SPARC_LEDATA in e_flags.
	* libbfd.h (bfd_reloc_code_real_names): Added BFD_RELOC_SPARC_32LE.
	* reloc.c: Same.
	* cpu-sparc.c (arch_info_struct): Added sparc:sparclite_le
	* archures.c (bfd_mach_sparc_sparclite_le): New.
	* bfd-in2.h (BFD_RELOC_SPARC_32LE, bfd_mach_sparc_sparclite_le): New.

Thu May 21 16:59:28 1998  Nick Clifton  <nickc@cygnus.com>

	* peicode.h (add_data_entry): Fix precedence of operators in if ()
	statement.

Tue May 19 18:41:19 1998  Ian Lance Taylor  <ian@cygnus.com>

	* bfd-in.h: Move over patch to bfd-in2.h.

	* reloc.c (bfd_check_overflow): Add casts before shifts which may
 	not fit in 32 bits.
	(_bfd_relocate_contents): Likewise.

Mon May 18 14:44:15 1998  Nick Clifton  <nickc@cygnus.com>

	* peicode.h (add_data_entry): If the section has no private data
	then do not create a Data Dictionary entry for it.

Mon May 18 00:09:28 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (elf64_alpha_relax_section): Set again on changes.
	(elf64_alpha_can_merge_gots, elf64_alpha_merge_gots,
	elf64_alpha_size_got_sections): Rewrite, handling multiple got
	subsections during relaxation more correctly.

Thu May 14 14:22:58 1998  Nick Clifton  <nickc@cygnus.com>

	* bfd-in2.h: Add new prototype: bfd_coff_set_symbol_class ().
	Add extra argument to bfd_arm_process_before_allocation ().
	* bfd-in.h: Reflect changes made in bfd-in2.h.
	* coffgen.c (bfd_coff_set_symbol_class): New function.  Set the
	coff class of a BFD symbol.
	* coff-arm.c: Add support for interworking between Thumb code and
	non-interworking aware ARM code.

Sun May 10 22:33:59 1998  Jeffrey A Law  (law@cygnus.com)

	* po/Make-in (install-info): New target.

Thu May  7 17:40:56 1998  Ian Lance Taylor  <ian@cygnus.com>

	* filemode.c: Remove; not used.

	If sysdep.h includes a header file, don't include it again:
	* aix386-core.c: Don't include <stdio.h>, <stddef.h>, or
	<errno.h>.
	* aoutx.h: Don't include <string.h>.  Use "sysdep.h" rather than
	<sysdep.h>.
	* archive.c: Don't include <string.h> or <errno.h>.
	* evax-alpha.c; Don't include <stdio.h>.
	* evax-egsd.c: Likewise.
	* evax-etir.c: Likewise.
	* evax-misc.c: Likewise.
	* evax-emh.c: Likewise.  Also, don't include <sys/types.h>.
	* hppabsd-core.c: Don't include <stdio.h>, <sys/types.h>, or
	<errno.h>.
	* hpux-core.c: Likewise.
	* netbsd-core.c: Likewise.
	* som.c: Likewise.
	* libbfd.c: Don't include <sys/types.h>.
	* nlmcode.h: Don't include <string.h>.
	* osf-core.c: Don't include <string.h> or <stdio.h>.
	* ptrace-core.c: Don't include <stdio.h>, <sys/types.h>,
	<errno.h>, or <unistd.h>.
	* trad-core.c: Don't include <stdio.h> or <sys/types.h>.

Thu May  7 13:12:50 1998  Klaus Kaempf  <kkaempf@progis.de>

	* configure.com: If the version number can not be found in
	configure.in, set it to "unknown" rather than "2.8.1".

Wed May  6 09:46:05 1998  Gavin Koch  <gavin@cygnus.com>

	* elf32-mips.c (elf_mips_mach): New.
	(_bfd_mips_elf_object_p): Use elf_mips_mach.
	(_bfd_mips_elf_final_write_processing): Use the names
	of machines, rather than the numbers.  Set both the ARCH
	and MACH in e_flags.  Handle a few more specific machines.
	(_bfd_mips_elf_merge_private_bfd_data): Merge both
	EF_MIPS_ARCH and EF_MIPS_MACH.

Tue May  5 21:01:53 1998  Richard Henderson  <rth@cygnus.com>

	* syms.c (bfd_is_local_label): Revert last change.
	* srec.c (srec_write_symbols): Discard debugging symbols.

Tue May  5 23:36:06 1998  Ian Lance Taylor  <ian@cygnus.com>

	* som.c: Include <ctype.h>.
	* som.h: Don't include sysdep.h.

Tue May  5 18:29:24 1998  Tom Tromey  <tromey@cygnus.com>

	* libbfd.h: Rebuilt.
	* libbfd-in.h: Removed gettext includes and defines.
	* sysdep.h: Moved gettext-related includes and defines here.

Tue May  5 16:47:54 1998  Richard Henderson  <rth@cygnus.com>

	* srec.c (srec_write_symbols): Use bfd_is_local_label rather than
	an ad-hoc test.  Kill bogus #if 0 code.
	* syms.c (bfd_is_local_label): Consider BSF_DEBUGGING symbols local.

Mon May  4 16:10:33 1998  Ian Lance Taylor  <ian@cygnus.com>

	* sunos.c (sunos_check_dynamic_reloc): Don't use the PLT address
	when generating a normal executable for a symbol defined in a
	regular file.  When copying a reloc into the output file, adjust
	the addend for a PC relative reloc against a global symbol.

Mon May  4 10:08:18 1998  Tom Tromey  <tromey@cygnus.com>

	* libbfd.h: Rebuilt.
	* libbfd-in.h (_): Define as dgettext.

Mon May  4 11:02:23 1998  Ian Lance Taylor  <ian@cygnus.com>

	* coff-arm.c (coff_arm_relocate_section): Cast to bfd_signed_vma,
	not signed.
	* peicode.h (pe_saved_coff_bfd_print_private_bfd_data): Use PARAMS
	when declaring parameter types.
	(pe_saved_coff_bfd_copy_private_bfd_data): Likewise.

Wed Apr 29 15:35:03 1998  Ian Lance Taylor  <ian@cygnus.com>

	* config.bfd: If we include any ELF targets in targ_defvec and/or
	targ_selvecs, then add the generic ELF targets to targ_selvecs.
	* elf32-gen.c (dummy): New static const variable.
	(elf_generic_info_to_howto): New static function.
	(elf_generic_info_to_howto_rel): New static function.
	(elf_info_to_howto): Define as elf_generic_info_to_howto.
	(elf_info_to_howto_rel): Define as elf_generic_info_to_howto_rel.
	* elf64-gen.c: Same changes as elf32-gen.c.
	* elfcode.h (elf_object_p): For the generic target, ignore a
	failure of bfd_default_set_arch_mach.  Fix indentation a bit.

Tue Apr 28 20:05:52 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in (WIN32LIBADD): Add -lintl on cygwin32.
	* configure: Rebuild.

Tue Apr 28 12:16:57 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* config.bfd:  Update OSR5/Unixware patterns.

Mon Apr 27 18:02:24 1998  Richard Henderson  <rth@cygnus.com>

	* elf.c (assign_file_positions_for_segments): Allow for holes
	between sections added by a link script.

Mon Apr 27 11:49:55 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Change version number to 2.9.4
	* configure: Rebuild.

	Based on patch from H.J. Lu <hjl@gnu.org>:
	* elf.c (bfd_elf_get_bfd_needed_list): New function.
	* bfd-in.h (bfd_elf_get_bfd_needed_list): Declare.
	* bfd-in2.h: Rebuild.

Sat Apr 25 20:07:53 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (struct alpha_relax_info): Replace elfsym with other.
	Change all users.

Sat Apr 25 18:29:07 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (struct alpha_relax_info): Add tsec & elfsym members.
	(elf64_alpha_relax_section): Fill them in.
	(elf64_alpha_relax_opt_call): Implement more than a stub.
	(elf64_alpha_add_symbol_hook): Don't set SEC_LOAD or default
	alignment on .scommon.
	(elf64_alpha_merge_gots): Merge use counts as well.

Sat Apr 25 14:07:29 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (elf64_alpha_relax_section): Use the proper section
	for calculating a local symbol's address.
	(elf64_alpha_calc_got_offsets): Skip entries with 0 use count.
	Set the .got's cooked size as well as the raw size.

Fri Apr 24 09:16:00 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_print_private_bfd_data): Add
	internationalisation of printed information.

	* coff-arm.c (coff_arm_print_private_bfd_data): Add
	internationalisation of printed information.

Fri Apr 24 12:09:18 1998  Ian Lance Taylor  <ian@cygnus.com>

	* syms.c (struct indexentry): Change directory_name, file_name,
	and function_name fields to char *.
	(struct stab_find_info): Change cached_file_name field to char *.

Thu Apr 23 08:13:04 1998  Nick Clifton  <nickc@cygnus.com>

	* peicode.h (dir_names): Add missing N_() macros to dir_names array.

Wed Apr 22 13:06:15 1998  Tom Tromey  <tromey@cygnus.com>

	* po/Make-in (MKINSTALLDIRS): Don't look in $(top_srcdir).

Wed Apr 22 17:48:48 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (install-data-local): Make $(includedir).
	* Makefile.in: Rebuild.

Wed Apr 22 13:06:15 1998  Tom Tromey  <tromey@cygnus.com>

	* libbfd-in.h: Use `gettext' and not `dgettext' for now.

Wed Apr 22 12:53:40 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (INCLUDES): Add -I$(srcdir)/../intl -I../intl.
	* Makefile.in: Rebuild.

	* bfd-in2.h: Rebuild for Nick's changes.

Tue Apr 21 23:11:51 1998  Richard Henderson  <rth@cygnus.com>

	* archive.c (_bfd_generic_read_ar_hdr_mag): Fix lossage in last
	change wrt length == max_namelen.

Tue Apr 21 21:19:36 1998  Tom Tromey  <tromey@scribbles.cygnus.com>

	* Many files: Added gettext invocations around user-visible
	strings.
	* libbfd-in.h: Added gettext includes and defines.
	* acconfig.h (ENABLE_NLS, HAVE_CATGETS, HAVE_GETTEXT, HAVE_STPCPY,
	HAVE_LC_MESSAGES): Define.
	* configure.in: Call CY_GNU_GETTEXT.  Create po/Makefile.in and
	po/Makefile.
	* Makefile.am (SUBDIRS): Added po.
	(POTFILES): New macro.
	(po/POTFILES.in): New target.
	(SOURCE_HFILES): New macro.
	(HFILES): Use it.
	* po/Make-in, po/POTFILES.in, po/bfd.pot: New files.

Tue Apr 21 13:38:18 1998 Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elfcore.h (bfd_prstatus):  Copy core_prstatus from the first
	NT_PRSTATUS note section encountered, it contains the status of
	the currently executing thread when the core file was written.

Tue Apr 21 10:00:12 1998  Nick Clifton  <nickc@cygnus.com>

	* libcoff.h: Add extra parameter to
	bfd_coff_link_output_has_begun overrideable function.
	* cofflink.c: Pass extra parameter to
	bfd_coff_link_output_has_begun function.
	* bfd-in.h: Add prototypes for exported ARM interworking
	functions.
	* peicode.h: ARM specific code reorganised to conform to BFD
	coding conventions.
	* coffcode.h: ARM specific code reorganised to conform to BFD
	coding conventions.
	* coff-arm.c: Code reorganised to conform to the BFD coding
	conventions.  Global variables have been moved into an ARM
	specific hash table structure and a new function:
	bfd_arm_get_bfd_for_interworking() has been created which is
	called from the linker scripts.

Tue Apr 21 00:11:51 1998  Richard Henderson  <rth@cygnus.com>

	* archive.c (_bfd_generic_read_ar_hdr_mag): Simplify end-of-name test.

	* elf64-alpha.c (elf64_alpha_find_reloc_at_ofs): Renamed from
	elf64_alpha_relax_find_reloc_ofs.  Changed all callers.
	(elf64_alpha_add_symbol_hook): Put small commons in .scommon not .sbss.
	(elf64_alpha_size_got_sections): Don't merge .got sections twice.

Sat Apr 18 01:21:04 1998  Stan Cox  <scox@cygnus.com>

	* config.bfd: Added sparc86x support.

Fri Apr 17 22:29:04 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf32-mips.c (mips_elf_relocate_section): Do not complain about
	an out of range pc-relative jump/call to an undefined weak symbol.

Thu Apr 16 13:49:00 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c (elf64_alpha_do_reloc_gpdisp): Do all gpdisp
	comparisons signed.

Thu Apr 16 11:43:33 1998  Ian Lance Taylor  <ian@cygnus.com>

	* archive.c (bfd_generic_archive_p): If a slurp subroutine returns
 	an error other than bfd_error_system_call, set the error to
 	bfd_error_wrong_format.

	* targets.c (bfd_target_vector) [SELECT_VECS not defined]: Add
	bfd_elf32_powerpcle_vec.

	* elf.c (copy_private_bfd_data): If all the p_paddr fields in the
	program segments are zero, don't set p_paddr_valid.

Wed Apr 15 22:15:16 1998  Richard Henderson  <rth@cygnus.com>

	* elf64-alpha.c: Initial implementation of relaxation --
	(struct alpha_elf_link_hash_entry): Add use_count member.
	(elf64_alpha_check_relocs): Initialize and increment it.
	(elf64_alpha_can_merge_gots): Check it when considering merging.
	(elf64_alpha_merge_gots): Drop entries with zero use.
	(elf64_alpha_calc_got_offsets_for_symbol): Likewise.
	(elf64_alpha_always_size_sections): Split out got sizing ...
	(elf64_alpha_size_got_sections): ... here.  New function.
	(elf64_alpha_relax_find_reloc_ofs): New function.
	(elf64_alpha_relax_with_lituse): Likewise.
	(elf64_alpha_relax_without_lituse): Likewise.
	(elf64_alpha_relax_opt_call): Likewise.
	(elf64_alpha_relax_section): Likewise.
	(elf64_alpha_add_symbol_hook): Likewise.
	(elf64_alpha_howto_table): Implement GPRELHIGH/LOW & IMMED_GP_16.
	(elf64_alpha_relocate_section): Likewise.
	(bfd_elf64_bfd_relax_section): Define.
	(elf_backend_add_symbol_hook): Likewise.

Wed Apr 15 16:08:46 1998  Richard Henderson  <rth@cygnus.com>

	* elf.c (prep_headers): Use new EM_SPARCV9 symbol.
	* elf64-sparc.c (ELF_MACHINE_CODE): Likewise.
	(ELF_MACHINE_ALT1): New.  Set to EM_OLD_SPARC64.

Wed Apr 15 11:34:33 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add -lkernel32 to WIN32LIBADD on cygwin32.
	* configure: Rebuild.

Mon Apr 13 16:46:27 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (libbfd_la_LIBADD): Add @WIN32LIBADD@.
	(libbfd_la_LDFLAGS): Add @WIN32LDFLAGS@.
	* configure.in: Define and substitute WIN32LDFLAGS and
	WIN32LIBADD.
	* aclocal.m4: Rebuild with new libtool.
	* configure, Makefile.in: Rebuild.

Fri Apr 10 13:44:27 1998  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_write_object_contents): Move a PE COMDAT symbol
	before any other symbols in the same section.

Wed Apr  8 14:50:23 1998  Michael Meissner  <meissner@cygnus.com>

	* config.bfd (powerpc*-*-*): Remove PowerPC NT support from ELF
	systems.

Tue Apr  7 16:25:31 1998  Gavin Romig-Koch  <gavin@cygnus.com>

	* dwarf2.c (comp_unit): Move it earlier in the source. Add
	addr_size.
	(read_address): Replace 'bdf*' argument with 'comp_unit*' argument.
        Use addr_size for address size, rather than sizeof(bfd_vma).
	(read_attribute): Replace bdf* argument with 'comp_unit*' argument.
	Fix call to read_address.
	(decode_line_info): Replace bdf* argument with 'comp_unit*' argument.
	Scrap other unneeded arguments.  Fix call to read_address.
	(scan_unit_for_functions): Fix call to read_attribute.
	(parse_comp_unit): We now handle more values for addr_size.
	Set addr_size in unit.  Fix call to read_attribute and
	decode_line_info.

Tue Apr  7 15:44:47 1998  Gavin Romig-Koch <gavin@cygnus.com>

	* dwarf2.c (parse_comp_unit): Drop use of unit->name when it is null.

Tue Apr  7 12:35:18 1998  Ian Lance Taylor  <ian@cygnus.com>

	* archures.c (bfd_default_scan): Add m68k cases back to default
	switch, reverting patch of March 25, since IEEE support depends
	upon them.

Mon Apr  6 14:06:40 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (diststuff): New target.
	* Makefile.in: Rebuild.

Sun Apr  5 16:21:44 1998  Jeffrey A Law  (law@cygnus.com)

	* som.c (som_bfd_ar_write_symbol_stuff): Fix computation of
	som_offset when we have an extended name table.

Sun Apr  5 16:04:39 1998  H.J. Lu  <hjl@gnu.org>

	* Makefile.am (stamp-lib): Check that .libs/libbfd.a exists before
	trying to copy it.
	* Makefile.in: Rebuild.

Fri Apr  3 11:09:42 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf32-m68k.c (elf_m68k_size_dynamic_sections): Generate section
	symbols when creating a shared library.
	(elf_m68k_adjust_dynindx): New function, used by above code.
	(elf_m68k_finish_dynamic_sections): Initialize the section
	symbols.
	(elf_m68k_relocate_section): Change abort to BFD_ASSERT.

Wed Apr  1 16:04:02 1998  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (in_reloc_p): Use ARM_RVA32 in place of constant
	value 11.

Wed Apr  1 13:36:58 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf32-m68k.c (elf_m68k_relocate_section, case R_68K_PLT*O): Fix
	assertion.

Tue Mar 31 00:12:12 1998  Jeffrey A Law  (law@cygnus.com)

	* elf-m10300.c (mn10300_elf_relax_section): Correctly handle
	absolute symbols.

Mon Mar 30 12:46:15 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Set version to 2.9.1.
	* configure: Rebuild.

	* Branched binutils 2.9.

Mon Mar 30 12:20:50 1998  Brent Baccala  <baccala@freesoft.org>

	* syms.c (ENABLE_CACHING): Define.
	(struct indexentry): Define.
	(struct stab_cache): Remove.
	(cmpindexentry): New static function.
	(struct stab_find_info): Add new fields: indextable,
	indextablesize, cached_indexentry, cached_offset, cached_stab, and
	cached_file_name.  Remove fields: file_cache, function_cache, and
	line_cache.
	(_bfd_stab_section_find_nearest_line): Rewrite to build a sorted
	index table and search it.

Mon Mar 30 10:39:34 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (_bfd_elf_copy_private_section_data): Call
	copy_private_bfd_data once we've seen the last SEC_ALLOC section.

	* cpu-mips.c: Remove trailing comma at end of enumeration list.

Sat Mar 28 16:33:02 1998  Ian Lance Taylor  <ian@cygnus.com>

	* coff-arm.c: Define all globally visible variables and functions
	only when COFF_WITH_PE is not defined.
	* configure.in (armpe_little_vec, armpe_big_vec): Add
	coff-arm.lo.
	* configure: Rebuild.

Fri Mar 27 16:06:02 1998  Ian Lance Taylor  <ian@cygnus.com>

	Fix some gcc -Wall warnings:
	* aout-arm.c (MY(fix_pcrel_26)): Add casts to avoid warnings.
	* archive.c (_bfd_generic_read_ar_hdr_mag): Likewise.
	* archures.c (bfd_default_scan): Likewise.
	* bfd.c (bfd_scan_vma): Likewise.
	* binary.c (mangle_name): Likewise
	* coff-arm.c (aoutarm_fix_pcrel_26): Likewise.
	* coff-sh.c (sh_relocate_section): Likewise.
	* coff-stgo32.c (create_go32_stub): Likewise.
	* coffcode.h (coff_slurp_line_table): Likewise.
	* ecoff.c (_bfd_ecoff_write_armap): Likewise.
	* elf.c (_bfd_elf_make_section_from_shdr): Likewise.
	(assign_file_positions_for_segments): Likewise.
	* elf32-mips.c (mips_elf_relocate_section): Likewise.
	* elf32-ppc.c (ppc_elf_add_symbol_hook): Likewise.
	* oasys.c (oasys_write_sections): Likewise.
	* ppcboot.c (ppcboot_object_p): Likewise.
	(mangle_name): Likewise.
	* riscix.c (riscix_fix_pcrel_26): Likewise.
	* srec.c (srec_scan): Likewise.
	* stabs.c (_bfd_write_section_stabs): Likewise.
	* sunos.c (sunos_add_dynamic_symbols): Likewise.
	* aout-ns32k.c (_bfd_ns32k_relocate_contents): Add default case to
	switch.  Declare parameters for function pointers.
	* archures.c (bfd_default_scan): Add braces to avoid ambiguous if
	warning.
	* elf.c (elf_sort_sections): Likewise.
	* coff-arm.c (coff_thumb_pcrel_common): Initialize relocation.
	Add default cases to switches.
	(coff_arm_relocate_section): Remove unused local variables.
	Always set rstat.
	(coff_arm_bfd_set_private_flags): Change flag variable to type
	flagword.
	* coff-mips.c (mips_relocate_section): Initialize use_lo.
	* coff-ppc.c (ppc_record_toc_entry): Change i to unsigned int.
	(dump_toc): Change cat to const, and initialize it.
	* coff-sh.c (sh_relax_delete_bytes): Initialize start and voff.
	* elf32-sh.c (sh_elf_relax_delete_bytes): Likewise.
	(sh_elf_relocate_section): Initialize r_symndx.
	* coffcode.h (coff_compute_section_file_positions): Only declare
	old_sofar if ALIGN_SECTIONS_IN_FILE.
	(coff_write_object_contents): Initialize csym.
	* coffgen.c (coff_pointerize_aux): Make type and class unsigned.
	* cpu-ns32k.c (_bfd_ns32k_get_displacement): Add default case to
	switch.
	* dwarf2.c: Include libiberty.h.
	(read_2_signed_bytes, read_4_signed_bytes): Comment out.
	(decode_line_info): Remove unused local variables.
	* elf32-m32r.c (m32r_elf_sda16_reloc): Likewise.
	(m32r_elf_relocate_section): Likewise.
	* elf32-v850.c (v850_elf_store_addend_in_insn): Likewise.
	(v850_elf_reloc): Likewise.
	* elf-bfd.h (elf_linker_section_t): Make alignment unsigned.
	(struct elf_obj_tdata): Make cverdefs and cverrefs unsigned.
	* elf.c (assign_file_positions_for_segments): Always set adjust.
	* elf32-d30v.c (bfd_elf_d30v_reloc): Initialize tmp_addr.  Fully
	parenthesize expression.
	* elf32-m32r.c (m32r_elf_relocate_section): Always initialize h.
	(m32r_elf_object_p): Return a value.
	(m32r_elf_print_private_bfd_data): Change fprintf format string.
	* elf32-mips.c (mips_elf_final_link): Initialize last.
	(mips_elf_finish_dynamic_sections): Initialize last and dindx.
	* elf32-v850.c (v850_elf_object_p): Return a value.
	(v850_elf_print_private_bfd_data): Change fprintf format string.
	* elfcode.h (elf_slurp_symbol_table): Change symcount and i to
	unsigned long.
	* elflink.h (elf_link_add_object_symbols): Change vernum to
	unsigned int, and initialize it.  Change fprintf format string.
	(NAME(bfd_elf,size_dynamic_sections)): Cast -1 to bfd_size_type
	when setting or comparing to soname_indx.
	(elf_create_pointer_linker_section): Change num_symbols to
	unsigned int.
	* libcoff-in.h (coff_data_type): Change flags to flagword.
	* peicode.h (pe_print_idata): Initialize idx.  Change j to
	bfd_size_type.  Initialize hint_member.  Remove useless test to
	time_stamp.
	(pe_print_edata): Change num_functions and num_names in struct
	EDT_type to unsigned long.  Remove cast.  Change fprintf format
	string.
	* ppcboot.c (ppcboot_object_p): Change i to size_t.
	* reloc.c (bfd_get_reloc_size): Change return type to unsigned
	int.
	* reloc16.c (bfd_coff_reloc16_relax_section): Change shrinks to
	int *.  Update uses.  Change j to long.
	* bfd-in2.h, libcoff.h: Rebuild.

Fri Mar 27 10:10:46 1998  Catherine Moore <clm@cygnus.com>

	* elf32-v850.c Remove definition of USE_REL.
	(v850_elf_info_to_howto_rela): New function.
	(v850_elf_perform_relocation):  Renamed from
	v850_elf_store_addend_in_insn.  Removed replace argument.
	(v850_elf_reloc): store the relocation in the addend field instead
	of the insn.
	(v850_elf_final_link_relocate):  Now calls
	v850_elf_perform_relocation.
	(v850_elf_relocate_section):  Remove code to generate REL
	relocations.

Thu Mar 26 13:32:17 1998  Ian Lance Taylor  <ian@cygnus.com>

	* coffcode.h (coff_new_section_hook): Set the type and storage
	class in the native symbol information allocated for a new section
	symbol.

Thu Mar 26 10:13:41 1998  Nick Clifton  <nickc@cygnus.com>

	* peicode.h: Chain together calls to
	coff_bfd_copy_private_bfd_data and
	coff_bfd_print_private_bfd_data.

	* coff-arm.c: Add prototypes for
	coff_arm_bfd_print_private_bfd_data and
	coff_arm_bfd_copy_private_bfd_data.

Wed Mar 25 15:45:55 1998  Nick Clifton  <nickc@cygnus.com>

	* coffcode.h (coff_mkobject_hook): Set private falgs even for a PE
	build.

	* peicode.h: Call arm-coff private data functions after handling
	pe private data.

	* coff-arm.c: Turn statics into globals so that they can be shared
	both pe and pei backends.

Wed Mar 25 15:19:38 1998  Ian Lance Taylor  <ian@cygnus.com>

	* aoutf1.h (sunos_set_arch_mach): Use bfd_mach_m68* rather than
	plain numbers.
	(sunos_write_object_contents): Likewise.
	* aoutx.h (NAME(aout,machine_type)): Likewise.
	* coffcode.h (coff_set_arch_mach_hook): Likewise.

Wed Mar 25 13:59:24 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* archures.c (bfd_mach_m68*): Add definitions for various m68k
	variants.
	(bfd_default_scan): Remove m68k special cases.
	* bfd-in2.h: Rebuild.
	* mipsbsd.c (MY(write_object_contents)): Use bfd_mach_m68* rather
	than plain numbers.
	* sparclynx.c (NAME(lynx,set_arch_mach)): Likewise.
	* cpu-m68k.c (arch_info_struct): Likewise.  Add entry for
	m68k:68000.
	(bfd_m68k_arch): Set mach field to zero to signal no explicit
	selection, change printable_name to just "m68k" and make that the
	default instead of m68k:68020.

	* aout-tic30.c (NAME): Define this to avoid multiple definitions
	from aoutx.h.
	(MY_get_section_contents): Define as aout_32_get_section_contents
	rather than NAME(aout,get_section_contents).

	* elf-m10300.c (elf32_mn10300_link_hash_table_create): Fix cast.

	* evax-alpha.c (evax_set_arch_mach): Only accept bfd_arch_alpha
	and call bfd_default_set_arch_mach to do the real work.

Wed Mar 25 10:41:35 1998  Richard Henderson  <rth@cygnus.com>

	* bout.c (BALX): Include return register g14 as part of the insn.
	(BALX_MASK): New.
	(calljx_callback): Use it.

Wed Mar 25 11:19:28 1998  Ian Lance Taylor  <ian@cygnus.com>

	* libbfd-in.h (BFD_ALIGN): Cast this parameter to bfd_vma.
	* libbfd.h: Rebuild.

	* elf-m10300.c (elf32_mn10300_finish_hash_table_entry): Change
	byte_count to unsigned int.
	(mn10300_elf_relax_section): Initialize internal_relocs.  Remove
	unused local variables.

	* evax-alpha.c (evax_close_and_cleanup): Remove unused local
	variables er and er1.

	* cpu-v850.c: Include <ctype.h>.
	(scan): Case isdigit argument to unsigned char.

	From Yan Meroth <YAN.MEROTH@st.com>:
	* ihex.c (ihex_scan): Add extbase variable so that getting an
 	extended linear address record does not ignore any previous
 	extended address.
	(ihex_write_object_contents): When writing out an extended linear
 	address record, zero out any previous extended address.

Tue Mar 24 16:09:43 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* ieee.c (do_one): Check section before dereferencing it.
	(ieee_canonicalize_reloc): Likewise with src->relent.sym_ptr_ptr.
	(ieee_generic_stat_arch_elt): Likewise with abfd->my_archive.

Mon Mar 23 18:51:47 1998  Joel Sherrill  <joel@OARcorp.com>

	* config.bfd: (sh*-*-rtems*): Switched from ELF to COFF.

Mon Mar 23 14:23:36 1998  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c: Add interworking functions to pe backends.

Fri Mar 20 18:47:20 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Use AM_DISABLE_SHARED.
	* aclocal.m4, configure: Rebuild with libtool 1.2.

Fri Mar 20 11:25:41 1998  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (coff_arm_relocate_section): Better error messages
	when interowrking conflucts occur.  Courtesy of Jonathan Walton
	and Tony Thompson.
	(aoutarm_std_reloc_howto): Fixed bitsize fields of rightshifted
	relocations.  Patch courtesy of Jonathan Walton and Tony
	Thompson.

Fri Mar 20 02:26:43 1998  Richard Henderson  <rth@cygnus.com>

	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Revert
	part of Feb 22 change controling when to override the existing
	symbol with the .plt entry.

Wed Mar 18 09:26:25 1998  Nick Clifton  <nickc@cygnus.com>

	* config.bfd (targ_cpu): Add thumb-pe target.

	* coffcode.h (OTHER_GLOBAL_CLASS): Support thumb external
	functions in PE build.

Sun Mar  8 23:37:26 1998  Stan Cox  <scox@equinox.cygnus.com>

	* config.bfd (sparclite-*-elf*): Added.

Mon Feb 23 19:31:19 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add elf.lo to elf shell variable.
	* Makefile.am (BFD_LIBS): Remove elf.lo.
	(BFD_LIBS_CFILES): Remove elf.c.
	(BFD32_BACKENDS): Add elf.lo.
	(BFD32_BACKENDS_CFILES): Add elf.c.
	* configure, Makefile.in: Rebuild.

1998-02-23 15:53  Richard Henderson  <rth@cygnus.com>

	* elf32-i386.c (elf_i386_relocate_section): A pc-relative
	relocation against a now-local symbol should not have a dynamic
	relocation.

Mon Feb 23 16:17:08 1998  Ian Lance Taylor  <ian@cygnus.com>

	* peicode.h (coff_swap_filehdr_in): Don't set BFD flag HAS_SYMS in
	COFF filehdr flags.
	(pe_print_private_bfd_data): Print PE flags.  From Mikey
	<jeffdb@netzone.com>.

Sun Feb 22 20:39:00 1998  Richard Henderson  <rth@cygnus.com>

	* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Don't create
 	a plt entry when we can determine that we authoritatively define
 	the symbol.

Sun Feb 22 20:33:05 1998  Richard Henderson  <rth@cygnus.com>

	* configure.in (COREFILE selection): Remove sparc-*-linux*.  They
	don't actually use trad-core, but a SunOS-style core file handled
	by gdb directly.
	* hosts/sparclinux.h: Remove.

Wed Feb 18 15:31:06 1998  Ian Lance Taylor  <ian@cygnus.com>

	* peicode.h (pe_print_idata): If there is no .idata section, look
	for the import tables in some other section.  Make the initial
	label line up better with the data.  Print the import address
	table even if there is no import name table.  If the import
	address table holds actual addresses, print them.

Tue Feb 17 12:58:34 1998  Ian Lance Taylor  <ian@cygnus.com>

	* libbfd.c (bfd_seek): If fseek fails, save errno around call to
	bfd_tell.  If errno is EINVAL, set bfd_error_file_truncated, not
	bfd_error_system_call.

Fri Feb 13 13:11:33 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (AUTOMAKE_OPTIONS): Define.
	* configure, Makefile.in, aclocal.m4: Rebuild with automake 1.2e.

	From H.J. Lu <hjl@gnu.org>:
	* Makefile.am (libbfd_la_LDFLAGS): Define.
	* Makefile.in: Rebuild.

Thu Feb 12 17:31:11 1998  Ian Lance Taylor  <ian@cygnus.com>

	NetBSD patches from Gordon W. Ross <gwr@mc.com>:
	* netbsd.h (MACHTYPE_OK): Define.
	(MY(write_object_contents)): Use DEFAULT_ARCH and DEFAULT_MID when
	calling N_SET_MACHTYPE, rather than having a switch.
	* libaout.h (enum machine_type): Add M_PMAX_NETBSD, M_VAX_NETBSD,
	and M_ALPHA_NETBSD.
	* i386netbsd.c (MACHTYPE_OK): Don't define.
	(DEFAULT_MID): Define.
	* m68k4knetbsd.c (SEGMENT_SIZE): Don't define.
	(MACHTYPE_OK): Don't define.
	(DEFAULT_MID): Define.
	* m68knetbsd.c: (MACHTYPE_OK): Don't define.
	(DEFAULT_MID): Define.
	* ns32knetbsd.c (MACHTYPE_OK): Don't define.
	(DEFAULT_MID): Define.
	* sparcnetbsd.c (MACHTYPE_OK): Don't define.
	(DEFAULT_MID): Define.

	NetBSD patches from Gordon W. Ross <gwr@mc.com>:
	* vaxnetbsd.c: New file.
	* netbsd-core.c: Clean up.  Remove unused macros.  Use netbsd
	rather than netbsd_core.
	* targets.c (vaxnetbsd_vec): Declare.
	(bfd_target_vector): Add vaxnetbsd_vec.  If NETBSD_CORE is
	defined, add netbsd_core_vec.
	* configure.in: Set COREFILE for alpha*-*-netbsd* and
	powerpc-*-netbsd* to netbsd-core.lo.  If COREFILE is
	netbsd-core.lo, set COREFLAG to -DNETBSD_CORE.
	* config.bfd (alpha*-*-netbsd*): New target.
	* Makefile.am: Rebuild dependencies.
 	(BFD32_BACKENDS): Add vaxnetbsd.lo.
	(BFD32_BACKENDS_CFILES): Add vaxnetbsd.c.
	* configure, Makefile.in: Rebuild.

	* configure.host: Remove the old shared library build stuff.  We
	now use libtool instead.

Wed Feb 11 17:13:09 1998  Richard Henderson  <rth@cygnus.com>

	* tekhex.c (tekhex_write_object_contents): Call tekhex_init.

Tue Feb 10 19:23:28 1998  H.J. Lu  <hjl@gnu.org>

	* configure.in: Take stab-syms.lo out of sparclinux_vec list.
	* configure: Rebuild.

Tue Feb 10 15:16:38 1998  Nick Clifton  <nickc@cygnus.com>
	* elf32-v850.c (remember_hi16s_reloc): New function.
	(find_remembered_hi16s_reloc): New function.
	(v850_elf_store_addend_in_insn): Use the above new functions to
	match up HI6S relocs with LO16 relocs.

Tue Feb 10 15:01:39 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Change -linux* to -linux-gnu*.
	* config.bfd, configure.host: Likewise.
	* configure: Rebuild.

Mon Feb  9 19:40:59 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_store_addend_in_insn): Fix another
	LO16/HI16S bug and improve comments about what is going on.

Sat Feb  7 15:27:03 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure, aclocal.m4: Rebuild with new libtool.

Fri Feb  6 14:48:20 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_merge_private_bfd_data): Do not complain
	when merging v850 code into v850e/v850ea code.  Do not initialise
	output flags if the input is the default architecture.
	
Fri Feb  6 11:50:22 1998  Jeffrey A Law  (law@cygnus.com)

	* elf32-mips.c (bfd_elf32_bfd_reloc_type_lookup): For BFD_RELOC_CTOR
	get the size from bfd_arch_bits_per_address instead of directly
	from the isa.

Thu Feb  5 14:21:34 1998  Michael Meissner  <meissner@cygnus.com>

	* libbfd-in.h (BFD_ALIGN): If rounding up would cause the address
	to wrap, just return all 1's bits instead.
	* libbfd.h: Regenerate.

Thu Feb  5 11:51:05 1998  Ian Lance Taylor  <ian@cygnus.com>

	* coff-i386.c (coff_pe_i386_relocate_section): New static function
	if COFF_WITH_PE.
	(coff_relocate_section): If COFF_WITH_PE, define as
	coff_pe_i386_relocate_section.
	* coffcode.h (coff_write_object_contents): If COFF_IMAGE_WITH_PE,
	skip empty sections, to match coff_write_object_contents.

	* elf64-mips.c (mips_elf64_swap_reloca_out): Swap out r_addend,
 	rather than swapping out r_offset twice.  From Luke Deller
 	<luked@cse.unsw.edu.au>.

Wed Feb  4 19:11:28 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Set libtool_enable_shared rather than
	libtool_shared.  Remove diversion hack.
	* configure, Makefile.in, doc/Makefile.in, aclocal.m4: Rebuild
	with new libtool.

Wed Feb  4 16:10:21 1998  Brent Baccala  <baccala@freesoft.org>

	* syms.c (struct stab_cache): Define.
	(struct stab_find_info): Remove cached_offset, cached_stab,
	cached_str, and cached_stroff fields.  Add file_cache,
	function_cache, and line_cache fields.
	(_bfd_stab_section_find_nearest_line): Use extensive caching to
	speed up searches.

Wed Feb  4 13:34:22 1998  Ian Lance Taylor  <ian@cygnus.com>

	* peicode.h (pe_print_idata): Check for import of ordinal rather
	than name.
	(pe_print_edata): If there is no .edata section, look for the
	export data in some other section.

Mon Feb  2 20:05:42 1998  Jason Molenda  (crash@bugshack.cygnus.com)

	* configure.in: Change version to 2.8.4.
	* configure: Regenerated.

Mon Feb  2 17:39:39 1998  Steve Haworth  <steve@pm.cse.rmit.EDU.AU>

	Add tms320c30 support:
	* cpu-tic30.c: New file.
	* aout-tic30.c: New file.
	* coff-tic30.c: New file.
	* archures.c (bfd_arch_tic30): Define.
	(bfd_tic30_arch): Declare.
	(bfd_archures_list): Add bfd_tic30_arch.
	* targets.c (bfd_target_vector): Add tic30_aout_vec and
	tic30_coff_vec.
	* reloc.c (BFD_RELOC_TIC30_LDP): Define.
	* coffcode.h (coff_set_arch_mach_hook): Add tic30 case.
	(coff_set_flags): Likewise.
	* config.bfd (tic30-*-*aout*, tic30-*-*coff*): New targets.
	* configure.in (tic30_aout_vec, tic30_coff_vec): New vectors.
	* Makefile.am: Rebuild dependencies.
	(ALL_MACHINES): Add cpu-tic30.lo.
	(ALL_MACHINES_CFILES): Add cpu-tic30.c.
	(BFD32_BACKENDS): Add aout-tic30.lo and coff-tic30.lo.
	(BFD32_BACKENDS_CFILES): Add aout-tic30.c and coff-tic30.c.
	* configure, Makefile.in, bfd-in2.h, libbfd.h: Rebuild.

Mon Feb  2 12:25:12 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-v850.c (v850_elf_store_addend_in_insn): Allow HI16_S reloc
	to lag behind LO16 reloc by a couple of instructions.

Mon Feb  2 14:09:46 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am ($(srcdir)/bfd-in2.h): Add dummy command to force
	make to reexamine the file timestamp.
	($(srcdir)/libbfd.h, $(srcddir)/libcoff.h): Likewise.

	* elf64-alpha.c (ELF_MAXPAGESIZE): Change to 0x10000 from
	0x100000.

Fri Jan 30 19:07:07 1998  Geoff Keating  <geoffk@ozemail.com.au>

	* elf32-ppc.c (ppc_elf_create_dynamic_sections): New procedure
	to create .dynsbss and .rela.sbss sections.
	(ppc_elf_adjust_dynamic_symbol): Put space for small data to be
	copied from dynamic objects into .sbss.
	(ppc_elf_size_dynamic_sections): Strip .rela.sbss if we don't
	use it.  Correct typo of .rela.sdata2.
	(ppc_elf_finish_dynamic_symbol): Generate reloc to where we
	put the data, which may now be in .sbss.
	(ppc_elf_relocate_section): A SDAREL16 reloc can be in dynsbss.
	(elf_backend_create_dynamic_sections): Define as
	ppc_elf_create_dynamic_sections.

	* elf32-ppc.c (ppc_elf_check_relocs): Don't emit R_PPC_REL* relocs
	against _GLOBAL_OFFSET_TABLE_.
 	(ppc_elf_relocate_section): Don't emit R_PPC_REL32 relocs in
	shared libraries which refer to local symbols.  Make sure that the
	test for allocating space for a reloc in a shared object is the
	same as the test for emitting a reloc.

Thu Jan 29 15:55:35 1998  J.J. van der Heijden  <J.J.vanderHeijden@student.utwente.nl>

	* config.bfd (i[3456]-*-mingw32*): New target.
	* acinclude.m4 (BFD_BINARY_OPEN): Check for mingw32.
	* aclocal.m4, configure: Rebuild.

Wed Jan 28 13:41:26 1998  Ian Lance Taylor  <ian@cygnus.com>

	* elf.c (_bfd_elf_close_and_cleanup): Only check the strtab if we
	have a bfd_object.

Tue Jan 27 21:43:55 1998  Richard Henderson  <rth@cygnus.com>

	Sparc v9 ABI compliant PLT:
	* elf64-sparc.c (PLT_HEADER_SIZE): V9 ABI uses 4 entries.
	(plt_templates, sparc64_elf_build_plt_entry): Delete.
	(LARGE_PLT_THRESHOLD): New define.
	(GOT_RESERVED_ENTRIES): V9 ABI only uses 1.
	(sparc64_elf_build_plt): New function.
	(sparc64_elf_plt_entry_offset): Likewise.
	(sparc64_elf_plt_ptr_offset): Likewise.
	(sparc64_elf_adjust_dynamic_symbol): Change h->plt_offset to
	contain the index for convenience.  Skip the initial entries
	in .rela.plt.
	(sparc64_elf_size_dynamic_sections): Zero the allocated contents
	memory for the benefit of .rela.plt.
	(sparc64_elf_relocate_section): Call sparc64_elf_plt_entry_offset.
	(sparc64_elf_finish_dynamic_symbol): Kill template stuff.  Use
	sparc64_elf_plt_entry_offset & sparc64_elf_plt_ptr_offset for reloc.
	(sparc64_elf_finish_dynamic_sections): DT_PLTGOT points to .plt.
	Call sparc64_elf_build_plt.
	(elf_backend_want_got_plt): No.
	(elf_backend_plt_readonly): No.
	(elf_backend_plt_alignment): 8.

	* elf.c (_bfd_elf_close_and_cleanup): New function; free the shstrtab.
	* elf-bfd.h (_bfd_elf_close_and_cleanup): Declare it.
	* elfxx-target.h (bfd_elfNN_close_and_cleanup): Arrange for it
	to be called.

Tue Jan 27 21:45:15 1998  Jeffrey A Law  (law@cygnus.com)

	* archures.c (bfd_mach_mips*): Add definitions for various MIPS
	processors.
	* cpu-mips.c (arch_info_struct): Add mips variants.
	* bfd-in2.h: Rebuilt.

Tue Jan 27 15:06:04 1998  Nick Clifton  <nickc@cygnus.com>

	* coff-arm.c (coff_arm_relocate_section): Preserve the contents of
	t2a3_b_insn.

Tue Jan 27 12:47:27 1998  Robert Lipe  <robertl@dgii.com>

	* config.bfd (i[3456]86-sco3.2v5*): ELF now the default.
	(i[3456]86sco3.2v5*coff): New target.

Mon Jan 26 15:41:30 1998  Ian Lance Taylor  <ian@cygnus.com>

	* bfd-in2.h: Rebuild with changes to chew--tab expansion.

Thu Jan 22 21:26:48 1998  Richard Henderson  <rth@cygnus.com>

	* bfd.c (bfd_get_error_handler): Add orthogonal function.
	* bfd-in2.h: Regenerate.

Thu Jan 22 21:13:39 1998  Richard Henderson  <rth@cygnus.com>

	* tekhex.c (tekhex_write_object_contents): Check for no symbols.

Wed Jan 21 21:19:03 1998  Ian Lance Taylor  <ian@cygnus.com>

	* coff-i386.c (coff_i386_rtype_to_howto): If COFF_WITH_PE, don't
 	adjust addend for an output common symbol (from Jimmy Blair
 	<jimmyb@wrs.com>).  If COFF_WITH_PE, adjust addend for PC relative
 	defined symbol to counteract adjustment made in generic relocation
 	code.

	* dwarf2.c: Include sysdep.h, not stdio.h and stdlib.h.

Wed Jan 21 21:16:06 1998  Manfred Hollstein  <manfred@s-direktnet.de>

	* coff-m88k.c (GET_SCNDHR_NRELOC): Fix typo in macro name.
	(GET_SCNDHR_NLNNO): Likewise.

Mon Jan 19 12:49:52 1998  Ian Lance Taylor  <ian@cygnus.com>

	* cpu-sh.c (arch_info_struct): Correct next field of sh3e.

Wed Jan 14 17:23:27 1998  Nick Clifton  <nickc@cygnus.com>

	* elf32-m32r.c: Add macros to handle NOP insertion.

Wed Jan 14 16:15:22 1998  Richard Henderson  <rth@cygnus.com>

	* xcofflink.c (xcoff_mark_symbol): Don't mark the absolute section.
	(xcoff_mark): Likewise.
	(xcoff_build_ldsyms): Mark absolute symbols.

Wed Jan 14 16:03:11 1998  Richard Henderson  <rth@cygnus.com>

	* bout.c (b_out_write_object_contents): Sort symbols before output
	to keep {CALL,BAL}NAME symbols adjacent.
	(b_out_symbol_cmp): New function.

For older changes see ChangeLog-9697

Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
