Thu Jul 15 22:44:21 1999  Hans-Peter Nilsson  <hp@bitrange.com>

	* readelf.c (process_abbrev_section): Handle standard-conforming
	single zero at the end of the section.

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

	* objdump.c (exit_status): New static variable.
	(nonfatal): New static function.
	(disassemble_data): Set exit_status on error.
	(read_section_stabs): Likewise.
	(display_bfd): Likewise.  Call nonfatal rather than bfd_nonfatal.
	(display_file): Call nonfatal rather than bfd_nonfatal.
	(display_target_list, display_info_table): Likewise.
	(main): Return exit_status rather than 0.

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

	* objdump.c (dump_section_header): Update for renaming of
	SEC_SHORT to SEC_SMALL_DATA.  Print SEC_SHARED flag.

	From Eli Zaretskii <eliz@gnu.org>:
	* binutils.texi: Document cxxfilt as MS-DOS name for c++filt.

	* configure.in: Define and substitute DEMANGLER_NAME.
	* Makefile.am (DEMANGLER_PROG): Set to cxxfilt.
	(man_MANS): Use DEMANGLER_NAME rather than DEMANGLER_PROG.
	(bin_PROGRAMS): Remove $(DEMANGLER_PROG).
	(noinst_PROGRAMS): Add $(DEMANGLER_PROG).
	(cxxfilt_SOURCES): Rename from c__filt_SOURCES.
	(cxxfilt_LDADD): Rename from c__filt_LDADD.
	($(DEMANGLER_NAME).1): Rename from $(DEMANGLER_PROG).1.  Use
	DEMANGLER_NAME rather than DEMANGLER_PROG in substitution.
	(MOSTLYCLEANFILES): Use DEMANGLER_NAME rather than
	DEMANGLER_PROG.
	(install-exec-local): When installing noinst_PROGRAMS, change
	cxxfilt to $(DEMANGLER_NAME).
	* configure, Makefile.in: Rebuild.

	* Makefile.am: Rename .dep* files to DEP*.  Change DEP variable to
	MKDEP.
	* Makefile.in: Rebuild.

1999-08-05  Donn Terry  <donn@interix.com>

	* Makefile.am (YACC): If bison is not in the source tree, use
	@YACC@ rather than bison -y.
	(LEX): If flex is not in the source tree, use @LEX@ rather than
	flex.
	* configure.in: Build dlltool for i[3-6]86-*-interix.
	* Makefile.in, configure: Rebuild.

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

	From Mark Elbrecht:
	* configure.bat: Remove; obsolete.

1999-07-16  Jakub Jelinek  <jj@ultra.linux.cz>

	* readelf.c (get_machine_flags): Print EF_SPARC_SUN_US3.

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

	* configure.in: Bump version number to 2.9.5.
	* configure: Rebuild.

1999-07-14  Richard Henderson  <rth@cygnus.com>

	* objdump.c (dump_section_header): Print SEC_SHORT.

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

	* Many files: Changes to avoid gcc warnings: Add ATTRIBUTE_UNUSED
	as appropriate.  Add variable initializations.  Add casts.
	* objdump.c (disassemble_bytes): Change j to bfd_vma.
	* readelf.c (process_syminfo): Change i to unsigned int.
	(display_debug_info): Change abbrev_number to unsigned long.
	(process_mips_specific): Change fcnt to size_t.

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

	* readelf.c: Only support decoding 64bit ELF files if the compiler
	supports a 64 bit data type.
	Add -I equivalent for --histogram.
	Add -A command-line option to display architecture specific information.

1999-07-08  Jakub Jelinek  <jj@ultra.linux.cz>

	* readelf.c (guess_is_rela): Sparcv9 and v8plus use rela.
	(dump_relocations): Use ELF64_R_TYPE_ID for Sparc, for R_SPARC_OLO10
	print the secondary addend.
	(get_machine_flags): Print Sparc machine flags.
	(get_symbol_type): Print STT_REGISTER.

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

	* stabs.c (parse_stab_type): Fix handling of template names with
	template parameters containing `::'.
	(stab_demangle_type): Handle a qualified name in a pointer to
	member.

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

	* Makefile.am (dlltool_SOURCES): Add dyn-string.c.
	* Makefile.in: Rebuild.

1999-06-23  Mumit Khan  <khan@xraylith.wisc.edu>

	* configure.in (HAVE_EXECUTABLE_SUFFIX): Define.
	* dlltool.c (look_for_prog): Use HAVE_EXECUTABLE_SUFFIX.
	* dllwrap.c (look_for_prog): Likewise.
	* resrc.c (look_for_default): Likewise.
	* configure, config.in: Rebuild.

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

	Based on patches from Mumit Khan <khan@xraylith.wisc.EDU>:
	* configure.in: Define EXECUTABLE_SUFFIX.
	* dlltool.c: Include "dyn-string.h".  Include <stdarg.h> based on
	ANSI_PROTOTYPES, not __STDC__.
	(outfile): Remove.
	(gen_exp_file): Change uses of outfile to use alloca.
	(make_one_lib_file, make_head, make_tail): Likewise.
	(gen_lib_file): Likewise.
	(look_for_prog): New static function.
	(deduce_name): Rewrite to use look_for_prog.
	(mcore_elf_gen_out_file): Use dyn_string_t rather than outfile.
	* dllwrap.c: Don't include <stdio.h>, <errno.h>, <string.h>,
	<stdlib.h>, or <unistd.h>.  Include <sys/stat.h> and either
	<stdarg.h> or <varargs.h>.
	(driver_name): Initialize to NULL, not "gcc".
	(dlltool_name): Initialize to NULL, not "dlltool".
	(display, inform, look_for_prog, deduce_name): New static
	functions.
	(usage): Mention -mno-cygwin.
	(OPTION_MNO_CYGWIN): Define.
	(main): Handle -mno-cygwin.  Deduce driver_name and dlltool_name.
	* resrc.c (look_for_default): Make static.  Remove unused local
	path.  Check using EXECUTABLE_SUFFIX.
	(read_rc_file): Allocate enough space to hold EXECUTABLE_SUFFIX.
	* Makefile.am: Rebuild dependencies.
	(dllwrap_LDADD): Add $(INTLLIBS).
	* configure, Makefile.in, config.in: Rebuild.

Mon Jun 21 16:49:11 1999  Jeffrey A Law  (law@cygnus.com)

        * readelf.c (dump_relocations): Use elf_hppa_reloc_type instead of
        elf32_hppa_reloc_type.

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

	* dlltool.c (mcore_elf_gen_out_file): Link object files with the
	.exp file, not the .lib file.

Fri Jun 18 20:17:51 1999  Mumit Khan  <khan@xraylith.wisc.edu>

	* deflex.l: Accept single-character symbol names.

1999-06-16  Nick Clifton  <nickc@cygnus.com>

	* readelf.c (get_symbol_type): Detect ARM symbols typed as Thumb
	functions. 

1999-06-14  Nick Clifton  <nickc@cygnus.com>

	* objdump.c (disassembler_options): New variable.
	(usage): Document new -M/--disassembler-options option.
	(long_options): Add --disassembler-options.
	(disassemble_data): Initialise disassembler_options field of
	disassembler_info structure.
	(main): Add parsing of -M option.
	
	* binutils.texi: Document new command line switch to objdump.

	* NEWS: Describe new command line switch to objdump.


Mon Jun 14 10:27:54 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* binutils.texi: Fix typos.

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

	* objdump.c (disassemble_bytes): If the disassembler returns an
	error, print out anything it may have printed to the buffer.  From
	H.J. Lu <hjl@gnu.org>.

	* defparse.y (explist): Remove separate expline to eliminate
	shift/reduce conflict.

	From Kai-Uwe Rommel <rommel@ars.de>:
	* defparse.y: Add tokens NONSHARED, SINGLE, MULTIPLE,
	INITINSTANCE, INITGLOBAL, TERMINSTANCE, and TERMGLOBAL.
	(command): Add option_list after LIBRARY.
	(attr): Accept and ignore NONSHARED, SINGLE, and MULTIPLE.
	(option_list, option): New nonterminals.
	* deflex.l: Recognize NONSHARED, SINGLE, MULTIPLE, INITINSTANCE,
	INITGLOBAL, TERMINSTANCE, and TERMGLOBAL.

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

	* ar.c (O_BINARY): Define as 0 if not defined.
	(ranlib_touch): Open file with O_BINARY.

	* rename.c (O_BINARY): Define as 0 if not defined.
	(simple_copy): Open files with O_BINARY.

	Based on patch from H. Peter Anvin <hpa@transmeta.com>:
	* objcopy.c (struct section_list): Add copy field.
	(sections_copied): New static variable.
	(copy_options): Add "only-section".
	(copy_usage): Mention -j and --only-section.
	(find_section_list): Initialize copy field.
	(is_strip_section): Check for copying sections.
	(copy_object): Check sections_copied when calling filter_symbols.
	(setup_section): Check for copying sections.
	(copy_section): Likewise.
	(copy_main): Handle -j/--only-section.
	* binutils.texi, objcopy.1: Document -j/--only-section.

	* configure.in: If frexp is not available, check in -lm.
	* configure: Rebuild.

	* readelf.c (get_elf_class): Use correct printf format for type.
	(get_data_encoding): Likewise.
	(get_osabi_name): Likewise.
	(process_file_header): Don't pass an extra argument to printf.
	(process_dynamic_segment): Cast dynamic_size to long before
	printing.
	(decode_location_expression): Cast byte_get to long before
	printing.

Wed Jun  9 11:40:16 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* readelf.c (dump_section): Cast values from byte_get to
 	[unsigned] long for printing, in case it is wider than long.
	(display_block): Likewise.
	(read_and_display_attr): Likewise.
	(decode_location_expression): Likewise.  Don't depend on
 	evaluation order.

Mon Jun  7 12:14:57 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* windres.c (usage): Fix typo.

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

	* readelf.c: Use 64bit wide fields in internal strcutures even if
	targetting a 32bit architecture.
	(dump_relocations): Take a new parameter - the number of symbols
	in the symbol table.

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

	* readelf.c: Add support for 64bit ELF files.

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

	* dlltool.c (mcore_elf_gen_out_file): Use constants for temporary
	file names. 

Wed Jun  2 12:34:36 1999  Richard Henderson  <rth@cygnus.com>

	* dlltool.c (gen_exp_file): Revert 19990411 change.

Mon May 31 09:56:22 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* readelf.c (process_relocs): Determine type of reloc from
	DT_PLTREL and from section type.

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

	* readelf.c (get_elf_class): Display unknown class number.
	(get_data_encoding): Display unknown encoding number.
	(get_osabi_name): Display unknown ABI number.
	(process_file_header): Display unknown version number.

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

	* readelf.c (dump_relocations): Fix typo.

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

	* readelf.c (dump_relocations): Add extra parameter: is_rela to
	specify the kind of relocations to be dumped.  Call guess_is_rela
	if this parameter has a value of UNKNOWN.
	(guess_is_rela): New function:  Guess the kind of reloc being used
	baced on the machine number.
	(process_relocs): Determine type of reloc before calling
	dump_relocations.

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

	* readelf.c: Include "elf/i960.h".
	(dump_relocations): Handle EM_960.

Thu May 27 11:58:33 1999  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* objcopy.c (copy_archive): Preserve dates of archive members if
	requested.

	* readelf.c (dump_relocations): Always print the addend on RELA
	systems even if there is no symbol.
	(process_program_headers): Reset dynamic_size before looping
	through the program headers.
	(process_version_sections): Cast sh_offset to unsigned long for
	printing in case bfd_vma is wider.
	(process_symbol_table): Use get_symbol_index_type when printing
	st_shndx.

1999-05-17  DJ Delorie  <dj@cygnus.com>

	* windres.c: add verbose option
	(main): process verbose option
	* resrc.c (look_for_default): new.  Look for the default
	preprocessor in a given location.
	(read_rc_file): for foo/bar-windres, look for foo/bar-gcc,
	foo/gcc (in case of foo/windres), and then gcc (the old default).

1999-05-16  Nick Clifton  <nickc@cygnus.com>

	* dlltool.c (deduce_name): New function: Deduce name of program to
	run.
	(mcore_elf_out_file): New variable: Name of mcore-elf output file.
	(mcore_elf_linker): New variable: Name of linker to use.
	(mcore_elf_linker_flags): New variable: Linker flags to pass.
	(scan_obj_file): Cache filenames if necessary.
	(usage): Document new command line options.
	(main): Support new command line options: -M (generate an
	mcore-elf output file) -L (name of linker to use) -F (flags to
	pass to linker). 
	(mcore_elf_cache_filename): Store a filename in a cache.
	(mcore_elf_gen_out_file): New function: Generate an output file
	per the mcore-elf spec.

1999-05-15  Nick Clifton  <nickc@cygnus.com>

	* configure.in (BUILD_MISC): Build dlltool for mcore
	* configure: Regenerate.
	* dlltool.c: Update example in comment.
	(DLLTOOL_MCORE): Define.
	(DLLTOOL_MCORE_ELF): Define.
	(DRECTVE_SECTION_NAME): Define.
	(mcore_be_jtab, mcore_le_jtab): Binary for performing an mcore
	jump to address.
	(mtable): Add entries for mcore variants.
	(rvaafter, rvabefore, asm_prefix): Add mcore suppport.
	(scan_drectve_symbols): Use DRECTVE_SECTION_NAME.
	(make_head, make_tail): Cope if file cannot be created.
	(usage): Improve layout.
	
1999-05-13  DJ Delorie  <dj@cygnus.com>

	* rclex.l: add code to suppress certain output from cpp, replace
	all returns with MAYBE_RETURN
	(MAYBE_RETURN): new, implement the suppression by returning
	IGNORED_TOKEN as needed.
	(cpp_line): remember which file we're in, mark data from included
	*.h files for suppression.
	* rcparse.y (input): allow IGNORED_TOKEN outside of known constructs

1999-05-10  DJ Delorie  <dj@cygnus.com>

	* windres.c (quot): Quote shell metacharacters in a string
	(main): quote parameters to cpp that might have metacharacters in
	them.  Allow -D as an alias for --define to allow for sharing make
	macros with gcc.

	* objdump.c (dump_reloc_set): don't core if howto->name is NULL

	* Makefile.am: Give rescoff.c a cpu-specific -D so it can set
	the correct BFD.
	* Makefile.in: ditto
	* rescoff.c (write_coff_file): Set the correct BFD

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

	* rename.c (smart_rename): Fix test of whether file exists.

1999-05-06  Nick Clifton  <nickc@cygnus.com>

	* objdump.c (disassemble_data): Set display_endian based on target
	endianism.

1999-05-05  Catherine Moore  <clm@cygnus.com>

	* dlltool.c (interwork): Remove.
	(arm_interwork_jtab): Use bx insn.
	(thumb_jtab): Likewise.
	(MARM_INTERWORK): New machine type.
	(rvaafter): Handle it.
	(rvabefore) Likewise.
	(asm_prefix): Likewise.
	(gen_exp_type): Check machine type instead of
	interwork flag.
	(make_one_lib_file): Likewise.
	(make_head): Likewise.
	(make_tail): Likewise.
	(usage): Update machine types.
	(main): Remove -interwork support.

1999-05-05  Catherine Moore  <clm@cygnus.com>
 
        * readelf.c (get_machine_flags):  Check for EF_CPU32.
        (get_data_encoding): Fix typo.
 
1999-04-26  Tom Tromey  <tromey@cygnus.com>

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

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

	* stabs.c (parse_stab_range_type): Correct parenthesization in
	BFD64 case.

	* readelf.c (get_section_type_name): Use correct types in printf
	formats.
	(process_relocs): Likewise.
	(process_dynamic_segment): Likewise.
	(process_symbol_table): Likewise.
	(process_mips_specific): Likewise.

Tue Apr 13 21:22:00 1999  Catherine Moore  <clm@cygnus.com>

	* dlltool.c (make_one_lib_file): Mark thumb functions as
	C_THUMBEXTFUNC.

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

	* bucomm.h (environ): Declare it, if needed.
	(alloca) [C_ALLOCA]: Don't use gcc's builtin or <alloca.h>.
	* configure.in (environ): Detect declaration.
	* nm.c (main): Don't declare environ.
	* configure, config.in: Rebuild.

	* dlltool.c (gen_exp_file): Pad out the .reloc section to a
	32-byte boundary with dummy relocations, to make the BeOS loader
	happy.  Patch from Bob Manson <manson@charmed.cygnus.com>.

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

	* binutils.texi (c++filt): Updated for -j/--java, and hp/edg
	formats.

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

	* readelf.c: Add ability to decode new constants found in April 25
	1998 Draft of System V ABI spec.

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

	* bucomm.h (LC_MESSAGES): Never define.
	* addr2line.c (main): Don't pass LC_MESSAGES to setlocale if the
	system does not define it.
	* ar.c (main): Likewise.
	* coffdump.c (main): Likewise.
	* dlltool.c (main): Likewise.
	* nlmconv.c (main): Likewise.
	* nm.c (main): Likewise.
	* objcopy.c (main): Likewise.
	* objdump.c (main): Likewise.
	* size.c (main): Likewise.
	* srconv.c (main): Likewise.
	* strings.c (main): Likewise.
	* sysdump.c (main): Likewise.
	* windres.c (main): Likewise.
	* readelf.c (main): Call locale setting functions.

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

	* readelf.c (decode_location_expression): Fix DW_OP_const8{s|u}
	decodes. 

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

	* rename.c: New file, copied out of objcopy.c with a few changes.
	* bucomm.h (set_times, smart_rename): Declare.
	* ar.c: Don't include <utime.h>.
	(extract_file): Call set_times rather than utime.
	(write_archive): Call smart_rename rather than unlink and rename.
	* objcopy.c: Don't include <utime.h>.
	(simple_copy, smart_rename, set_times): Move to rename.c.
	(strip_main): Update smart_rename call for new parameter.
	(copy_main): Likewise.
	* Makefile.am: Rebuild dependencies.
	(CFILES): Add rename.c.
	(objcopy_SOURCES, strip_new_SOURCES): Add rename.c.
	(ar_SOURCES, ranlib_SOURCES): Add rename.c.
	* Makefile.in: Rebuild.

	* Makefile.am: Rebuild dependencies.
	(EXTRA_PROGRAMS): Remove backslash which troubles current version
	of automake.
	* Makefile.in: Rebuild.

	* dllwrap.c (main): Expect correct type in format string.
	* resres.c: Include "bfd.h", "bucomm.h", "libiberty.h", and
	<time.h>.  Don't include <stdio.h> and <errno.h>.
	(write_res_file): Remove unused locals e and i.
	(read_resource_entry): Remove unused locals rtype and n.
	(read_unistring): Remove unused local n.

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

	* arparse.y: Declare yylex.
	* objdump.c (disassemble_bytes): Initialize bytes.  Add comment
	for incorrect use of bytes.
	* readelf.c: Change many formats to avoid warnings.

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

	* readelf.c (reset_state_machine): New function.  Resets the
	registers of the source line number state machine.
	(process_extended_line_op): Use state machine.
	(display_debug_lines): Use state machine.  Handle multiple line
	number blocks within the same section.

1999-03-29  Jason Merrill  <jason@yorick.cygnus.com>

	* readelf.c (process_extended_line_op): end_sequence also resets
	the line number.
	(display_debug_lines): advance_line takes a signed operand.
	(read_and_display_attr): Print refs as <%x>, addresses as %#x,
	others as %d.  Handle other location expression attributes.
	(display_debug_info): Handle nesting.  Always print the	offset.

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

	* objcopy.c (filter_symbols): When checking whether to keep a
	symbol, check the BFD section symbol for a symbol with
	BSF_SECTION_SYM set.

1999-03-10  Ulrich Drepper  <drepper@cygnus.com>

	* readelf.c (process_dynamic_segment): Print new Solaris dynamic
	section entries.  Correct printing of DT_POSFLAG_1 and DT_FLAGS_1.

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

	* readelf.c (request_dump): New function.
	Removed arbitary limit on the number of sections that can be
	dumped.

Wed Mar 10 15:10:14 1999  Stan Cox  <scox@cygnus.com>

	* dlltool.c (make_one_lib_file): Use %05d to output the stub name so
	order in the import library is preserved.

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

	* readelf.c: Fix compile time warings.

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

        * resbin.c (res_to_bin_versioninfo): Instead of entering a value
	length of zero in a version info string, enter the appropriate
	length.

Tue Feb 16 16:00:33 1999  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Require autoconf 2.13.  Change AM_PROG_INSTALL to
	AC_PROG_INSTALL.  Add comments for AC_DEFINE calls.
	* acconfig.h: Remove.
	* aclocal.m4: Rebuild.
	* configure: Rebuild.
	* Makefile.in: Rebuild.
	* config.in: Rebuild.

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

	* readelf.c (read_and_display_attr): Add display of basic type
	encodings.
	(display_debug_aranges): New function: Display the contents of a
	.debug_aranges section.
	(display_debug_info): Dump tags found after compunit entry.

	* binutils.texi: Fixed bug in readelf documentation.

Mon Feb  1 12:38:01 1999  Catherine Moore  <clm@cygnus.com>

        * readelf.c (dump_relocations):  Handle EM_ARM as REL.

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

	* readelf.c (process_symbol_table): Do not produce a histogram of
	bucket chains if none were found.

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

	* version.c: Add 1999 copyright.

	* binutils.texi (readelf): Document new command line options
	--debug-dump and --histogram.

	* readelf.c: Add ability to display contents of some or all of the
	Dwarf2 debug sections.  {Work only partially completed}.
	(display_debug_section): New function.
	(display_debug_info): New function.
	(display_debug_not_supported): New function.
	(display_debug_line): New function.
	(display_debug_abbrev): New function.
	(process_abbrev_section): New function.
	(read_leb128): New function.
	(process_extended_line_op): New function.
	(get_TAG_name): New function.
	(get_AT_name): New function.
	(get_FORM_name): New function.
	(free_abbrevs): New function.
	(add_abbrev): New function.
	(add_abbrev_attr): New function.
	(read_and_display_attr): New function.
	(display_block): New function.

Thu Jan 14 23:36:11 1999  Jeffrey A Law  (law@cygnus.com)

	* coffdump.c (xcalloc): Remove, in libiberty now.
	* srconv.c (xcalloc): Likewise.
	* sysdump.c (xcalloc): Likewise.

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

	* readelf.c (process_section_headers): Omit trailing space at end
	of section header contents line.

Wed Dec 16 17:20:05 1998  Doug Evans  <devans@canuck.cygnus.com>

	* aclocal.m4: Regenerate.

Mon Dec 14 12:55:36 1998  Jim Wilson  <wilson@cygnus.com>

	* dllwrap.c: Include bfd.h and bucomm.h.  Move getopt.h include
	after libiberty.h include.

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

	* objdump.1: Fix typo (-d to -D).  From Nokubi Hirotaka
	<hnokubi@yyy.or.jp>.

Sun Dec  6 13:28:09 1998  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (SFILE): Add size field.
	(objdump_sprintf): Merge both versions into one.  Increase buffer
	size as needed to avoid overflow.
	(disassemble_bytes): Change buf from 1000 bytes to 50.  Change
	initialization and use of sfile to match changes to
	objdump_sprintf.

	* strip.1: Fix typo (-V to -v).  From Issei Hirayama
	<iss@mail.wbs.or.jp>.

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

	* readelf.c (process_dynamic_segment): Improve output format for
	various DT_* values.

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

	* readelf.c (process_mips_specific): Print .conflict section
	content.

	* readelf.c (process_mips_specific): Print l_flags in liblist in
	textual form.

1998-11-30  Nick Clifton  <nickc@cygnus.com>

	* ar.c (extract_file): Add some paranoia checks for negatively
	sized files.

Tue Nov 24 09:39:24 1998  Nick Clifton  <nickc@cygnus.com>

	* stabs.c (DIR_SEPARATOR): Define as '\\' if WIN32 is defined.

Tue Nov 17 10:25:26 1998  Nick Clifton  <nickc@cygnus.com>

	* Makefile.in: Regenerate.

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

	* po/binutils.pot: Regenerate.

Mon Nov 16 10:18:53 1998  Nick Clifton  <nickc@cygnus.com>

	* Makefile.am: Regernated dependencies.
	* aclocal.m4: Regenerated.
	* configure: Regenerated.

Sat Nov 14 14:50:56 1998  Ian Lance Taylor  <ian@cygnus.com>

	* debug.c (debug_name_type): Correct return type from false to
	DEBUG_TYPE_NULL.

Sat Nov 14 14:48:21 1998  Andreas Schwab  <schwab@issan.cs.uni-dortmund.de>

	* objdump.c (disassemble_data): Skip over relocs below start
	address.

Tue Nov 10 15:31:52 1998  Nick Clifton  <nickc@cygnus.com>

	* Makefile.am: Add dependency of readelf.c on elf/fr30.h
	* Makefile.in: Regenerate.

Wed Nov  4 16:25:55 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c: Add support for the FR30.

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

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

Fri Oct 30 15:14:49 1998  Geoffrey Noer  <noer@cygnus.com>

        * dllwrap.c: change all references to cygwin32_ to cygwin_,
	change Cygwin target def to CYGWIN.

Wed Oct 28 10:31:19 1998  Nick Clifton  <nickc@cygnus.com>

	* objdump.c (disassemble_data): Replace 'unsigned long' with
	'bfd_vma'.

Tue Oct 27 14:39:00 1998  Nick Clifton  <nickc@cygnus.com>

	* objdump.c (disassemble_bytes): Applied this patch from Philip
	Blundell <pb@nexus.co.uk>:  Make address variables unsigned to
	avoid problems when disassembling code at high-bit-set addresses.

Mon Oct 26 14:07:59 1998  Mumit Khan  <khan@xraylith.wisc.edu>

        * dllwrap.c (strhash): New function.
        (main): Use it to supply image base if not supplied by user.
        (program_version): Up to 0.2.4.

Mon Oct 26 14:07:59 1998  Mumit Khan  <khan@xraylith.wisc.edu>

        * dlltool.c (add_stdcall_alias): New global.
        (long_options): Add --add-stdcall-alias option.
        (main): Handle it.
        (scan_drectve_symbols): Add alias if --add-stdcall-alias is
        specified.
        (scan_filtered_symbols): Likewise.
        (gen_def_file): Output alias for stdcall syms if appropriate.

        * binutils.texi (dlltool): Document --add-stdcall-alias option.

        * dllwrap.c (long_options): Add --add-stdcall-alias option.
        (main): Handle it.

        * defparse.y (opt_name): Allow "." in name.
        * dlltool.c (def_name): Set dll_name from NAME entry in def file.
        (def_library): Set dll_name from LIBRARY entry in def file.

Mon Oct 26 14:07:59 1998  Mumit Khan  <khan@xraylith.wisc.edu>

        * dllwrap.c (long_options): --implib synonym for --output-lib.
        (main): Pass --export-all to dlltool only if specified.
        (program_version): Up to 0.2.3.

Mon Oct 26 14:07:59 1998  Mumit Khan  <khan@xraylith.wisc.edu>

        * dllwrap.c (mybasename): New function.
        (main): Run dlltool to create export definition file and import
        library file if necessary.
        Change exp_file_name so that it's based on the dll name.

Sun Oct 25 10:37:45 1998  Mumit Khan  <khan@xraylith.wisc.edu>

        * dlltool.c (scan_all_symbols): Fix patch error.

Fri Oct 16 22:56:20 1998  Felix Lee  <flee@cygnus.com>

	* nm.c (display_rel_file): fix "no symbols" messages.
	* objdump.c (slurp_symtab): ditto.
	* po/POTFILES.in, po/binutils.pot: rebuilt

Mon Oct 12 14:28:03 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c (dump_relocations): Rename field from Value to Info to
	match name of field in ELF structures.

Thu Oct  8 15:33:08 1998  Geoffrey Noer  <noer@cygnus.com>

	* configure.in: call AC_EXEEXT instead of AM_EXEEXT and
	AM_CYGWIN32.
	* aclocal.m4: remove local AM_EXEEXT/AM_CYGWIN32 macros.
	* configure: regenerate

Thu Oct  8 15:33:08 1998  Geoffrey Noer  <noer@cygnus.com>

	From Mumit Khan  <khan@xraylith.wisc.edu>:
        * dlltool.c (scan_all_symbols): Don't re-export symbols exported
        by other DLLs.

Thu Oct  8 15:33:08 1998  Geoffrey Noer  <noer@cygnus.com>

	* Makefile.am (BUILD_DLLWRAP): Add.
	(BUILD_DLLWRAP, DLLWRAP_PROG): Add.
	(bin_PROGRAMS): Add dllwrap.
	* Makefile.in: regenerate with automake

	From Mumit Khan  <khan@xraylith.wisc.edu>:
        * dllwrap.c: New file from dllhelpers v0.2.1.
	(print_version): New function.
	(long_options): Add --version.
	(main): Handle.
        * dyn-string.h, dyn-string.c: New files from egcs-1.1/gcc.
        * configure.in (BUILD_DLLWRAP): Add.
        * configure: Regenerate.

Tue Oct  6 18:20:10 1998  Geoffrey Noer  <noer@cygnus.com>

	* Makefile.am (windres_SOURCES): Add resres.c.
	(windres_OBJECTS): Add resres.o.
	* Makefile.in: regenerate with automake

        From Anders Norlander <anorland@hem2.passagen.se>.
        * resres.c: New file.  Implementation of read_res_file and
        write_res_file functions for windres.
        * rcparse.y: Handle CONTROL's with named classes.
        * resbin.c: Bug in res_to_bin_dialog and bin_to_res_dialog
        when dialog is extended: The version and signature fields should
        be reversed (despite what the docs say). Id is 32 bits long in
        extended dialogs.
        * resrc.c (write_rc_dialog): properly print controls with named
        classes.
        * windres.c (read_res_file, write_res_file): Remove stubs.
        * resres.c (write_res): Rename RT_ACCELERATORS to RT_ACCELERATOR.

Sun Oct  4 20:34:42 1998  Ian Lance Taylor  <ian@cygnus.com>

	From Nokubi Hirotaka <hnokubi@yyy.or.jp>:
	* objcopy.1: Fix typo in --remove-leading-char docs.
	* objdump.1: Fix formatting in --stabs docs.

Sat Sep 19 23:33:56 1998  Ian Lance Taylor  <ian@cygnus.com>

	* rcparse.y (memflags_move): Correct recursion.

1998-09-10  Ulrich Drepper  <drepper@cygnus.com>

	* readelf.c (process_symbol_table): Print in histogram how many
	symbols are covered by the current chain length.

Sun Sep  6 16:15:47 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c (process_section_contents): Do not try to dump empty
	sections.

Sat Sep  5 19:17:10 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* dlltool.c (scan_all_symbols): Don't re-export symbols exported
	by other DLLs.

1998-09-02 14:50  Ulrich Drepper  <drepper@cygnus.com>

	* readelf.c (process_dynamic_segment): Print DT_* value only if
	do_dynamic.
	(do_histogram): New variable.
	(options): New long option histogram.  Set do_histogram if this
	option is used.
	(usage): Document --histogram.
	(parse_args): Handle 0 return value from getopt_long.  Enable
	do_histogram for -a.
	(process_symbol_table): Read hash table also if only do_histogram.
	Add code to print hash table histogram.

1998-08-25 16:45  Ulrich Drepper  <drepper@cygnus.com>

	* readelf.c (process_dynamic_segment): Read syminfo section if
	available.
	(process_syminfo): New function.  Print syminfo information.
	(process_file): Call process_syminfo and free syminfo data at the end.

Wed Aug 19 16:19:51 1998  Ian Lance Taylor  <ian@cygnus.com>

	* dlltool.c (usage): Add file parameter.  Change all callers.
	(main): Don't treat '?' as a special case in getopt return.

	* binutils.texi (dlltool): Document new options.  Add some uses of
	@var.

Wed Aug 19 16:19:07 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* dlltool.c (gen_def_file): Plug memory leak.  Don't print
	demangled name if it is NULL.

	Support for exporting all symbols to an output export def file:
	* dlltool.c ({export_all_symbols, no_default_excludes,
	no_default_excludes, excludes}): New file static variables.
	(struct string_list): Type to hold list of symbols to exclude.
	(scan_drectve_symbols): Renamed from scan_open_obj_file.
	(scan_filtered_symbols): New static function.
	(add_excludes): New static function.
	(match_exclude): New static function.
	(set_default_excludes): New static function.
	(filter_symbols): New static function.
	(scan_all_symbols): New static function.
	(scan_open_obj_file): New static function.
	(usage): Document new options.
	(long_options): Add new options.
	(main): Handle new options.

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

	* readelf.c (process_program_headers): Print p_offset value with
	six hex digits.
	(dynamic_segment_mips_val): Add support for DT_MIPS_FLAGS,
	DT_MIPS_IVERSION, and DT_MIPS_TIME_STAMP.
	(process_mips_specific): Also print seconds of time stamp.

Fri Jul 31 10:04:23 1998  Catherine Moore  <clm@cygnus.com>

        * readelf.c (dump_relocations):  EM_ARM uses rela relocs.

1998-07-30 16:25  Ulrich Drepper  <drepper@cygnus.com>

	* readelf.c (get_dynamic_type): Don't used gettext on the names.
	Add new DT_* values from Solaris.  Don't print nuemric value in
	case of an unknown entry.
	(process_dynamic_segment): Handle new DT_* entries.  Print numeric
	values in decimal, not hex.

Fri Jul 24 16:28:57 1998  Jeff Holcomb  <jeffh@cygnus.com>

	* readelf.c (get_dynamic_type): Remove empty default from switch
	statement.

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

	* Makefile.am (install-exec-local): Don't remove the file before
	checking whether $(bindir) == $(tooldir)/bin.  From Maciej
	W. Rozycki <macro@ds2.pg.gda.pl>.
	* Makefile.in: Rebuild.

Fri Jul 24 09:38:59 1998  Nick Clifton  <nickc@cygnus.com>

	* objcopy.c: Removed spurious inclusion of elf/internal.h and
	elf-bfd.h.

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

	* readelf.c: Consistantly use elf_ prefix for *_reloc_type
	functions.

Wed Jul 22 16:29:12 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c (dump_relocations): Add dumps of HPPA and ARC
	relocations.

	(process_relocs): Do not abort if no string table can be found.

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

	* readelf.c: Remove definition of functions to return relocation
	symbol strings.  They now get implicitly defined when include the
	system specific ELF header.

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

	* readelf.c: Before include system specific ELF header define
	START_RELOC_NUMBERS, RELOC_NUMBER, and END_RELOC_NUMBERS.  For now
	used for ppc, mips, and mn10300.

Wed Jul 22 10:26:32 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c (dump_relocations): Display number of unrecognised
	relocations.

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

	* readelf.c: Use symbolic names of relocation entries for the various
	architectures.  Correct more layout details.
	Print names of MIPS specific section types.  Print Alpha, ARM, and
	MIPS relocation type names.

1998-07-20  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* objcopy.c (filter_symbols): Add code for strip all symbols case.
        (copy_objects): Strip all case is now processed also through
	filter_symbols.  No marking symbols used in relocations when strip
	all symbols case.
	(copy_section): When strip all symbols case, remove relocations
	which are not in keep strip specific list.
	(strip_main): Remove guard `strip_specific_list == NULL' for
	setting up strip all symbols by default.

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

	* addr2line.c (find_address_in_section): Only consider a section
	if the pc value is completely contained within it.
	(translate_addresses): Don't crash if functionname or filename are
	null.

1998-07-20 07:45  Ulrich Drepper  <drepper@cygnus.com>

	* readelf.c (process_symbol_table): Fix little alignment problem
	in printed table header.

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

	* readelf.c: Correct reading of .dynamic section.
	(dynamic_section): Now a global variable.
	(process_mips_fpe_exception, process_mips_specific,
	process_arch_specific): New functions.
	(get_file_header): Call process_arch_specific.

1998-07-19 15:15  Ulrich Drepper  <drepper@cygnus.com>

	* readelf.c: Fix several versioning related bugs.  Produce nicer
	output.
	Add support for processor specific information on MIPS.

Fri Jul 10 15:57:58 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c: Switch prototypes from unsigned short to unsigned
	int.

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

	From Christian Holland <CHolland@de.lucent.com>:
	* ieee.c (parse_ieee): Initialize info.global_vars and
	info.global_types.
	(parse_ieee_atn): Ignore register lifetime information reportedly
	emitted by MRI compiler.

Thu Jul  9 13:08:01 1998  Ian Lance Taylor  <ian@cygnus.com>

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

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

	* readelf.c (byte_get): Use PARAMS in prototype.
	(error): Make it work with non-ANSI compilers.
	(warn): Likewise.
	(get_ver_flags): Don't use an ANSI prototype in the definition.

Tue Jul  7 13:26:13 1998  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (filter_bytes): Set size correctly if the size of the
	section is not an even multiple of the interleave.  Based on patch
	from Brion Stone <Brion.Stone@attws.com>.

Thu Jul  2 14:01:34 1998  Klaus Kaempf  <kkaempf@rmi.de>

	* configure.com: Add vax/vms support.
	* makefile.vms-in: Renamed from makefile.vms.  Add substitutions
	now done by configure.com.

Wed Jul  1 20:43:52 1998  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (parse_stab_range_type): Handle 4 and 8 byte signed
 	integers with real upper bounds.  Handle a lower bound one larger
 	than the upper bound as a signed integer.  Handle 8 byte signed
	integers.
	(stab_demangle_template): Optionally return the demangled name of
	the template.
	(stab_demangle_qualified): Treat a template name as a tagged
	type.
	(stab_demangle_fund_type): Likewise.

Wed Jul  1 16:29:50 1998  Nick Clifton  <nickc@cygnus.com>

	* objcopy.c: Minor formatting improvements.
	* readelf.c: Minor output formatting improvement.

Wed Jul  1 14:23:48 1998  Ian Lance Taylor  <ian@cygnus.com>

	* rclex.l: Add casts and change types to avoid warnings.
	* rcparse.y: Likewise.
	* resbin.c: Likewise.
	* rescoff.c: Likewise.
	* resrc.c: Likewise.

	* Makefile.am: Rebuild dependencies.
 	(HFILES): Remove readelf.h.
	* Makefile.in: Rebuild.

	Based on patches from Andrew Kozin
	<Andrew.Kozin@p14.f960.n5020.z2.fidonet.org>:
	* winduni.h: New file, from windres.h.
	* winduni.c: New file, from windres.c.
	* windres.c: Move Unicode functions into winduni.c.
	* windres.h: Move Unicode declarations into winduni.h.  Include
	winduni.h.
 	(RT_ACCELERATOR): Rename from RT_ACCELERATORS to match Windows
	macro.  Change all uses.
	(RT_PLUGPLAY, RT_VXD): Correct values.
	* Makefile.am (HFILES): Add windres.h.
	(CFILES): Add winduni.c.
	(windres_SOURCES): Add winduni.c.

Mon Jun 29 17:01:21 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c: Use BFD Internal and External Elf structures.
	* readelf.h: Removed - no longer needed.
	* Makefile.in: Remove readelf.c's dependency upon readelf.h.

1998-06-26  Vladimir N. Makarov  <vmakarov@cygnus.com>

	* objcopy.c (strip_main): keep_specific_list == NULL as additional
	condition to set up strip all symbols by default.
	(copy_archive): don't change archive when error in object files of
	the archive.

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

	* stabs.c (parse_number): Sign extend negative values correctly if
	bfd_vma is larger than unsigned long.

Tue Jun 23 14:55:05 1998  Mike Stump  <mrs@wrs.com>

	* Makefile.am (install-exec-local): Don't let EXEEXT interfere
	with the program transform name.
	* Makefile.in: Rebuild.

Tue Jun 23 11:08:53 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c: Rewrite to use fopen/fread ratehr than mmap.

	Add --section-headers command line switch, which is an alias for
	--sections.

	Incorporate improvemnts made by Andreas Schwab
	<schwab@issan.informatik.uni-dortmund.de> including output
	formatting and version info display.

	* binutils.texi: Document --section-headers switch to readelf.

Mon Jun 22 18:28:19 1998  Ian Lance Taylor  <ian@cygnus.com>

	* readelf.c: Include bfd.h and bucomm.h before system header
	files.
	(parse_args): Change type of c from char to int.

Sun Jun 14 14:26:28 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c (usage): Write to stdout, not stderr.

Fri Jun 12 13:33:51 1998  Tom Tromey  <tromey@cygnus.com>

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

Fri Jun 12 16:06:15 1998  Michael Meissner  <meissner@cygnus.com>

	* readelf.c (get_ppc_rel_type): New PowerPC support.
	(dump_relocations): PowerPC uses RELA relocations.
	(get_machine_name): Spell PowerPC correctly.
	(get_file_type): Change unsigned short parameter to unsigned.
	(get_machine_name): Ditto.
	(get_machine_data): Return whether big endian or little endian.
	(get_machine_flags): Interpret PowerPC, M32R, and MIPS flags.
	(process_elf_header): Print endian-ess.  Convert all numeric
	formats to long or unsigned long.  Print out machine specific flag
	bits.
	(process_section_headers): Increase name by 3 columns and decrease
	type by the same so that .gcc_except_table fits in the space.

	* readelf.h: Include elf/ppc.h, elf/mips.h, and elf/m32r.h to get
	machine specific flag bits.

Thu Jun 11 17:54:26 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c: Remove extraneous #includes.  Fix warnings produced
	by -Wall when compiling under Linux.

	* Makefile.am (readelf_LDADD): Add $(LIBIBERTY).

Thu Jun 11 18:30:20 1998  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (struct stab_handle): Add self_crossref field.
	(parse_stab_string): If a tag is a cross reference to itself,
	don't define it in the tags list.
	(parse_stab_type): Set info->self_crossref.

	* debug.c (struct debug_type_real_list): Define.
	(debug_get_real_type): Add list parameter.  Change all callers.
	Check for circularity to avoid crashing when it occurs.

Thu Jun 11 14:48:32 1998  Nick Clifton  <nickc@cygnus.com>

	* readelf.c: New file: Display contents of ELF format file.
	* readelf.h: New file: Header file for readelf.c
	* Makefile.am: Add rules to build readelf.
	* Makefile.in: Rebuilt.
	* binutils.texi: Document readelf.
	* NEWS: Mention inclusion of readelf into binutils.
	* po/POTFILES.in; Rebuilt.

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

	* objcopy.c (setup_section): Adjust the section size if copy_byte
	is >= 0.
	(copy_section): Do not call bfd_set_section_size.

Thu Jun  4 09:12:27 1998  Nick Clifton  <nickc@cygnus.com>

	* objcopy.c (copy_usage): Add missing \n\ from help description.

Wed Jun  3 19:31:33 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (YACC): Correct bison -L option.
	* Makefile.in: Rebuild.

	* binutils.texi, objdump.1: Document -p/--private-headers.

Wed Jun  3 12:09:40 1998  Nick Clifton  <nickc@cygnus.com>

	* objcopy.c: Add new command line options: --change-section-lma
	and --change-section-vma.  Rename old command line option
	--adjust-section-vma to --change-section-address.  Rename
	--adjust-vma to --change-addresses and --adjust-start to
	--change-start.  Provide aliases to support the old versions of
	these command line options.

	Change the names of macros and enum elements to upper case to
	match the GNU coding standard.

	Replace calls to fprintf (stderr,...) with calls to fatal () or
	non_fatal () as appropriate.

	* objcopy.1: Document command line option changes.
	* binutils.texi: Document command line option changes.

	* bucomm.h: New exported funtion from bucomm.c: non_fatal().
	* bucomm.c (non_fatal): New exported function.  Just like fatal()
	except that it returns rather than calling xexit().

	(bfd_check_format_matches): Call fatal() rather than bfd_fatal().

	(check_matching_formats): Fix C formating.

	(parse_vma): Call fatal().

Mon Jun  1 18:26:40 1998  Ian Lance Taylor  <ian@cygnus.com>

	From Yuli Barcohen <yuli.barcohen@telrad.co.il>:
	* debug.c (debug_type_samep): Avoid endless loops comparing
	function and method parameter types.

Fri May 22 14:02:42 1998  Ian Lance Taylor  <ian@cygnus.com>

	* dlltool.c (dump_iat): Comment out; not used.
	(display): Rename from tell.  Change all callers.

Thu May 14 14:00:56 1998  Nick Clifton  <nickc@cygnus.com>

	* dlltool.c: Add support for Thumb DLLs.  Add support for
	interworking between ARM and Thumb programs and DLLs.  Tidy the
	code.

	* binutils.texi: Document dlltool.

	* configure: Build dlltool for thumb-pe targets.

	* version.c (print_version): Include 1998 in copyright strings.

	* stabs.c (parse_stab): Support Win32 style directory separators.

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

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

Fri May  8 10:33:13 1998  Nick Clifton  <nickc@cygnus.com>

	* ar.c (usage): Extend information provided about command line
	options.

Wed May  6 15:28:51 1998  Klaus Kaempf  <kkaempf@progis.de>

	* makefile.vms: Run dec c with /nodebug.  Pass CC value when
	calling make.

Tue May  5 15:19:00 1998  Nick Clifton  <nickc@cygnus.com>

	* configure: Build dlltool for thumb-pe target.
	* configure.in: Build dlltool for thumb-pe target.

Sun May  3 22:04:49 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (EXTRA_PROGRAMS): Change $(SRCONV_PROG) to sysconf
	sysdump coffdump to avoid extra $(EXEEXT).
	* Makefile.in: Rebuild.

Wed Apr 29 22:22:55 1998  Geoffrey Noer <noer@cygnus.com>

	* configure.in: Stop appending EXEEXT to the end of
	SRCONV_PROG (wrong because that variable may contain multiple
	programs)
	* Makefile.am: instead, add EXEEXTs to each SRCONV_PROG
	program
	* Makefile.in: regenerate
	* configure: regenerate

Tue Apr 28 19:14:34 1998  Tom Tromey  <tromey@cygnus.com>

	* addr2line.c (main): Conditionally call setlocale.
	* windres.c (main): Likewise.
	* sysdump.c (main): Likewise.
	* strings.c (main): Likewise.
	* srconv.c (main): Likewise.
	* size.c (main): Likewise.
	* objdump.c (main): Likewise.
	* objcopy.c (main): Likewise.
	* nm.c (main): Likewise.
	* nlmconv.c (main): Likewise.
	* dlltool.c (main): Likewise.
	* coffdump.c (main): Likewise.
	* ar.c (main): Likewise.
	* bucomm.h: Include <locale.h> if HAVE_LOCALE_H.
	(LC_MESSAGES): Now can be defined even when ENABLE_NLS.

Tue Apr 28 10:33:07 1998  Bill Moyer  <ttk@cygnus.com>

	Add support for IMPORTS:
	* defparse.y (impline): Add IMPORTS syntaxes.
	* dlltool.c (ifunctype, iheadtype): New typedefs.
	(import_list): New static variable.
	(append_import): New static function.
	(def_import): Add an entry to import_list.
	(generate_idata_ofile): New static function.
	(gen_exp_file): Call generate_idata_ofile.
	* dlltool.h (def_import): Update declaration.

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

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

Wed Apr 22 16:00:35 1998  Tom Tromey  <tromey@cygnus.com>

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

Wed Apr 22 00:33:56 1998  Tom Tromey  <tromey@scribbles.cygnus.com>

	* Makefile.am (INCLUDES): Search intl dirs for headers; define
	LOCALEDIR.
	* addr2line.c (main): Call setlocale, bindtextdomain, textdomain.
	* ar.c (main): Likewise.
	* coffdump.c (main): Likewise.
	* dlltool.c (main): Likewise.
	* nlmconv.c (main): Likewise.
	* nm.c (main): Likewise.
	* objcopy.c (main): Likewise.
	* objdump.c (main): Likewise.
	* size.c (main): Likewise.
	* srconv.c (main): Likewise.
	* strings.c (main): Likewise.
	* sysdump.c (main): Likewise.
	* windres.c (main): Likewise.

Tue Apr 21 22:13:08 1998  Tom Tromey  <tromey@scribbles.cygnus.com>

	* Many files: Added gettext invocations around user-visible
	strings.
	* bucomm.h: Added gettext-related 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.  Use AM_PROG_LEX.
	* Makefile.am (SUBDIRS): New macro.
	(POTFILES): Likewise.
	(po/POTFILES.in): New target.
	(LDADD): Added INTLLIBS.
	(objdump_LDADD): Likewise.
	(c__filt_LDADD): Likewise.
	(ar_LDADD): Likewise.
	(ranlib_LDADD): Likewise.
	(dlltool_LDADD): Likewise.
	(windres_LDADD): Likewise.
	* po/Make-in, po/POTFILES.in, po/binutils.pot: New files.

Tue Apr 21 16:07:18 1998  Stanislav Brabec  <utx@k332.feld.cvut.cz>

	* objcopy.c (preserve_dates): New file static variable.
	(smart_rename): If preserve_dates, call set_times when copying.
	(strip_main): Remove preserve_dates local variable.
	(copy_main): Likewise.

Tue Apr  7 15:41:15 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (DISTSTUFF): Add defparse.h, defparse.c, rclex.c,
	rcparse.h, and rcparse.c
	* Makefile.in: Rebuild.

Mon Apr  6 16:24:35 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (PROGS): Move $(ADDR2LINE_PROG) to end, so that
	Makefile.in doesn't have an empty continuation line.
	(bin_PROGRAMS): Likewise.
	* Makefile.in: Rebuild.

Fri Apr  3 14:48:42 1998  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (DISTCLEANFILES): Add site.exp and site.bak.
	(MOSTLYCLEANFILES): Add binutils.log, binutils.sum, and abcdefgh*.
	(mostlyclean-local): New target.
	* Makefile.in: Rebuild.

Wed Apr  1 15:54:16 1998  Ian Lance Taylor  <ian@cygnus.com>

	From Zack Weinberg <zack@rabi.phys.columbia.edu> and H.J. Lu
	<hjl@gnu.org>:
	* ar.c (usage): Mention S modifier.
	(main): Add S modifier.
	* ar.1, binutils.texi: Document S modifier.

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

	* binutils.texi: Use @itemx for a secondary item in a table.

Tue Mar 31 18:44:13 1998  Ian Lance Taylor  <ian@cygnus.com>

	* dep-in.sed: Add rule to remove @OBJDIR@.
	* Makefile.am (dep.sed): Substitute for @OBJDIR@.
	* Makefile.in: Rebuild.

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

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

	* Branched binutils 2.9.

	* Makefile.am (DISTCLEANFILES): Remove defparse.h, arparse.h,
	rcparse.h, and nlmheader.h.
	* Makefile.in: Rebuild.

Sat Mar 28 17:39:27 1998  Ian Lance Taylor  <ian@cygnus.com>

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

	Fix some gcc -Wall warnings:
	* nlmconv.c (main): Add casts to avoid warnings.
	(alpha_mangle_relocs): Likewise.
	* objdump.c (dump_section_stabs): Likewise.
	* size.c (print_sysv_format): Likewise.
	* srcconv.c (wr_ob): Likewise.
	* wrstabs.c (stab_modify_type): Likewise.
	(stab_variable): Likewise.
	* nlmconv.c (main): Initialize variables to avoid warnings.
	* nm.c (sort_symbols_by_size): Likewise.
	* objdump.c (disassemble_bytes): Likewise.
	* wrstabs.c (stab_end_class_type): Likewise.
	* coffgrok.c (do_sections_p2): Change j to unsigned int.
	(do_lines): Change l to unsigned int.
	* nlmheader.y (yylex): Change i to unsigned int.
	* nm.c (print_symbol): Change j to long.
	* size.c (lprint_number): Comment out.
	* srconv.c (wr_ob): Change i to bfd_size_type.
	* sysdump.c (unit_info_list): Comment out.
	(object_body_list, program_structure, debug_list): Likewise.
	* sysinfo.y (yyerror): Return value.

Thu Mar 26 17:06:51 1998  Richard Henderson  <rth@cygnus.com>

	* defparse.y (explist): Allow epsilon.
	Suggestion from Jonathan-Harris@psion.com.

Thu Mar 26 16:59:09 1998  Richard Henderson  <rth@cygnus.com>

	* coffgrok.c (do_sections_p1): Use the section's lma instead of vma
	for the benefit of prom loaders.

Wed Mar 25 13:05:39 1998  Ian Lance Taylor  <ian@cygnus.com>

	Based on patch from H.J. Lu  <hjl@gnu.org>:
	* Makefile.am (DISTSTUFF): New variable.
	(diststuff): New target.
	(DISTCLEANFILES): New variable.
	* Makefile.in: Rebuild.

Tue Mar 24 19:33:08 1998  Ian Lance Taylor  <ian@cygnus.com>

	* rclex.l: Accept { and } as synonyms for BEGIN and END.

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

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

Tue Feb 24 13:07:50 1998  Doug Evans  <devans@canuck.cygnus.com>

	* objdump.c (disassemble_data): Delete "++place" after call to
	find_symbol_for_address.  Set disasm_info.symbols to array of
	symbols at the current address.

Wed Feb 18 23:39:46 1998  Richard Henderson  <rth@cygnus.com>

	* Makefile.am (install-exec-local): Install properly when ln
	fails or tooldir == prefix.

Tue Feb 17 18:40:55 1998  Richard Henderson  <rth@cygnus.com>

	* objcopy.c (compare_section_lma): Rename from _vma.
        (copy_object): Gap fill based on LMA not VMA.
	* binutils.texi: Update and clarify.
	* objcopy.1: Likewise.

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

	* dlltool.c (gen_exp_file): Generate _imp__%s as well as __imp_%s,
	for Microsoft compatibility.
	(make_one_lib_file): Likewise.

	* dlltool.c (make_one_lib_file): Don't add 1 to hint.

Fri Feb 13 16:37:44 1998  Ian Lance Taylor  <ian@cygnus.com>

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

Thu Feb 12 14:13:46 1998  Ian Lance Taylor  <ian@cygnus.com>

	* deflex.l: Accept '?' in symbol names, for VC++ mangled names.
	From Mikey <jeffdb@netzone.com>.

	* addr2line.c (usage): Update bug-gnu-utils address.
	* ar.c (usage): Likewise.
	* nlmconv.c (show_usage): Likewise.
	* nm.c (usage): Likewise.
	* objcopy.c (copy_usage): Likewise.
	(strip_usage): Likewise.
	* objdump.c (usage): Likewise.
	* size.c (usage): Likewise.
	* strings.c (usage): Likewise.
	* windres.c (usage): Likewise.
	* binutils.texi (Bug Reporting): Likewise.

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

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

Thu Feb  5 12:21:13 1998  Ian Lance Taylor  <ian@cygnus.com>

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

Fri Jan 30 19:16:28 1998  Doug Evans  <devans@canuck.cygnus.com>

	* Makefile.am (CC_FOR_TARGET,nlmcomv.o): Change program_transform_name
	to transform.
	* Makefile.in: Regenerate.

Thu Jan 29 16:24:04 1998  Mumit Khan  <khan@xraylith.wisc.edu>

	* dlltool.c: Define exit status macros for _WIN32 but not
	__CYGWIN32__.
	(gen_lib_file): Check for exit status of unlink.
	* resrc.c: Define popen and pclose if _WIN32 but not
	__CYGWIN32__.

Wed Jan 28 17:45:46 1998  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Remove vfork check.
	* nlmconv.c: Never include vfork.h.
	* aclocal.m4, configure, Makefile.in, config.in: Rebuild.

Wed Jan 28 17:43:02 1998  J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl>

	* objcopy.c (copy_archive): Only pass one argument to mkdir if
	_WIN32 but not __CYGWIN32__.
	(smart_rename): Add code for _WIN32 (not __CYGWIN32__), to cope
	with different rename behaviour and lack of chown.

	* configure.in: Check for mingw32 when deciding whether to build
	dlltool.
	* dlltool.c: Never include vfork.h.
	(run): Use pexecute rather than vfork.
	(gen_lib_file): Check for errors from bfd_set_archive_head and
	bfd_close.  Close all the BFDs in the archive before deleting the
	temporary files.

Thu Jan 22 16:22:55 1998  Fred Fish  <fnf@cygnus.com>

	* objdump.c (disassemble_bytes): Add flag INSN_HAS_RELOC to tell
	disassembly function there is a reloc on this line.

Wed Jan 14 15:29:43 1998  Richard Henderson  <rth@cygnus.com>

	* srconv.c (sh, h8300): Delete variables.
	(addrsize, toolname, rnames): New variables.
	(writeINT): Use addrsize.
	(wr_un): Use toolname.
	(wr_hd): Set up addrsize et al properly for h8300[hs].
	(walk_tree_symbol): Zero dsy.  Use rnames.
	(wr_un, wr_hd, wr_ob, wr_du): Use proper bfd access macros.
	* sysdump.c (sh, h8300): Delete variables.
	(addrsize): New variable.
	(getINT): Use it.
	(getone): Initialize it.
	(getBITS): Range check on MAX.

Mon Dec 29 16:58:05 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Matthew Bellantoni <matthew@chrysalis.com>:
	* ar.c (get_pos_bfd): Add default_posname parameter.  Change all
	callers.
	(replace_members): Default to replacing in the same position.

Mon Dec 22 11:27:22 1997  Ian Lance Taylor  <ian@cygnus.com>

	* rclex.l: Don't permit a comma in a STRING.
	* rcparse.y (acc_entry): Warn if an inappropriate modifier is used
	with a non VIRTKEY.
	(acc_event): For a control character, set VIRTKEY, and force the
	character to uppercase.
	(acc_options): Don't require a comma separator.

Tue Dec  9 13:25:42 1997  Michael Meissner  <meissner@cygnus.com>

	* size.c (size_number): New function to provide size of field.
	({l,r}print_number): For octal and hex fields, print field using
	'0' and '0x' suffixes.  Do not include following tab.
	(sysv_internal_sizer): Size section name, section size, and vma
	address fields.
	(sysv_internal_printer): Use calculated sizes for the columns.
	(print_sysv_format): Size columns before printing.
	(print_berkeley_format): Print tabs between numbers now that
	{l,r}print_number doesn't.  Print fields right justified.

Mon Dec  8 11:22:04 1997  Nick Clifton  <nickc@cygnus.com>

	* objdump.c (objdump_print_addr_with_sym): Remove call to
	disasm_symaddr() as this function no longer exists.

Tue Dec  2 10:23:50 1997  Nick Clifton  <nickc@cygnus.com>

	* objdump.c (objdump_print_addr_with_sym): Call disasm_symaddr()
	to allow backend to know which symbol has just been displayed.

Tue Dec  2 13:06:46 1997  Ian Lance Taylor  <ian@cygnus.com>

	* windres.h (ESCAPE_*): Define standard escape sequences.
	* rclex.l (handle_quotes): Handle standard escape sequences.  Warn
	about an unrecognized escape character.
	* windres.c (unicode_print): Print standard escape sequences.
	* rcparse.y (acc_event): Initialize $$.next.
	* resbin.c (bin_to_res_menuitems): Don't set MENUITEM_POPUP or
	MENUITEM_ENDMENU in the menu item flags.
	(bin_to_res_accelerators): Allocate a structure (the old code
	never worked).
	(res_to_bin_accelerator): Correct the test for setting ACC_LAST.
	(res_to_bin_dialog): Save the extended style rather than saving
	the style twice.  Remove useless shadowing length variable.  Set
	the length of control data correctly.
	* resrc.c (write_rc_dialog): Don't print the class or menu if the
	string length is zero.

Mon Nov 24 18:52:43 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stabs.c (parse_stab_argtypes): Don't try to parse the name of a
	destructor as mangled argument types.

Mon Nov 10 17:51:41 1997  Gavin Koch  <gavin@cygnus.com>

	* addr2line.c (translate_addresses): Use bfd_scan_vma rather
	than strtol to scan addresses.

Sun Nov  9 11:01:31 1997  Jeffrey A Law  (law@cygnus.com)

	* Makefile.am (bin_PROGRAMS): Don't use line continuations here.

Tue Nov  4 11:56:14 1997  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (copy_section): Don't crash if there is no particular
	information for a section.

Mon Nov  3 12:36:19 1997  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (parse_flags): Make flag check case insensitive.
	Check for `contents' flag.  Give an error for unrecognized flags.
	(copy_section): If the contents flag was set for a section that
	had no contents, zero out the new contents.
	* binutils.texi (objcopy): Document contents section flag.

Sun Nov  2 14:49:56 1997  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c: Move new struct and variable definitions to top of
	file.  Remove obsolete add_strip_symbol and is_strip_symbol
	declarations.  Add prototype declarations for add_specific_symbol
	and is_specified_symbol.

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

	* configure.com (HAVE_SBRK): Undefine.

Tue Oct 14 16:14:35 1997  Nick Clifton  <nickc@cygnus.com>

	* objdump.c (objdump_symbol_at_address): New function.  Returns
	true if a symbol can be found at the address passed in.
	(disassemble_data): Set the symbol_at_address_func field to point
	to objdump_symbol_at_address.

Fri Oct 10 14:13:09 1997  Richard Henderson  <rth@cygnus.com>

	* objcopy.c, objcopy.1, binutils.texi: "localize" is a better name
	than "privatize".  Update all references.

Thu Oct  9 15:57:29 1997  Ian Lance Taylor  <ian@cygnus.com>

	* binutils.texi (strip): Remove duplicate --target.  From Marty
	Leisner <leisner@sdsp.mc.xerox.com>.

	* nm.c (lineno_cache_bfd): New file static variable.
	(lineno_cache_rel_bfd): New file static variable.
	(display_archive): Clear lineno_cache_bfd and lineno_cache_rel_bfd
	when closing a BFD.
	(display_file): Likewise.
	(print_symbol): Use lineno_cache_bfd and lineno_cache_rel_bfd
	instead of cache_bfd and cache_rel_bfd.  Make seccount static, and
	only set it when setting relocs.

Wed Oct  8 21:19:11 1997  Richard Henderson  <rth@cygnus.com>

	* objcopy.c (keep_specific_list, privatize_specific_list,
	weaken_specific_list): New variables.
	(keep_symbols): Removed.
	(add_specific_symbol): New function from the carcas of
	add_strip_symbol.  Takes a list as an argument.
	(is_specified_symbol): Likewise from is_strip_symbol.
	(filter_symbols): Honor the new privatize and weaken lists.
	Optimize bfd_asymbol_name handling.
	(copy_object, copy_options, copy_usage): Add privatize-symbol &
	weaken-symbol options.

	* objcopy.1, binutils.texi: Update docs.

Sun Oct  5 09:05:44 1997  Frank Ch. Eigler  <fche@cygnus.com>

	* objdump.c (disassemble_data): Make "--prefix-addresses"
 	disassembly adjust to mixed-length instructions.
	(objdump_print_addr_with_sym): Add "0x" prefix for hexadecimal
 	symbol-offsets in disassembly.

Fri Oct  3 12:04:25 1997  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (set_times): New static function, replacing
	make_same_dates.
	(strip_main): If preserve_dates, stat the input file before
	copying it, and call set_times afterward.
	(copy_main): Likewise.

	* wrstabs.c (write_stabs_in_sections_debugging_info): Cast p to
	char * when calling strcpy and strlen.

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

	* binutils.texi	(ar cmdline): Document that q now works like r.
	From Marty Leisner <leisner@sdsp.mc.xerox.com>.

	* binutils.texi (size): The object file argument is optional.
	From Marty Leisner <leisner@sdsp.mc.xerox.com>.

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

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

	* Makefile.am (EXEEXT_FOR_BUILD): New variable.  Use it in all
	references to the sysinfo program.
	* configure.in: Rebuild with new bfd/acinclude.m4.
	* Makefile.in: Rebuild.

Fri Aug  8 15:32:49 1997  Ian Lance Taylor  <ian@cygnus.com>

	* windres.c: Include <time.h>.
	(define_resource): Set a timestamp for the resource.

Wed Aug  6 13:37:58 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Define TARGET in header file.
	* acconfig.h (TARGET): Add #undef.
	* Makefile.am (version.o, bucomm.o): Remove special targets.
	* bucomm.c (target): Remove.
	* nm.c (program_name): Don't declare.
	(target): Make static.
	* size.c (target): Make static.
	* configure, config.in, Makefile.in: Rebuild.

Tue Aug  5 00:01:41 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am (check-DEJAGNU): Export r.
	(.dep1): Use $(INCLUDES) rather than $(ALL_CFLAGS).
	* Makefile.in: Rebuild.

	* nlmheader.y: Use VERSIONK rather than VERSION.

	* Makefile.am (STRIP_PROG): Change from strip.new to strip-new.
	(NM_PROG): Change from nm.new to nm-new.
	(TOOL_PROGS, install-exec-local): Adjust accordingly.
	* Makefile.in: Rebuild.

Mon Aug  4 11:47:31 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Remove AC_ARG_PROGRAM; it's invoked by
	AM_INIT_AUTOMAKE.
	* configure: Rebuild.

	* Makefile.am (install-exec-local): Create $(tooldir)/bin before
	trying to install anything into it.
	* Makefile.in: Rebuild.

	* Makefile.am (TOOL_PROGS): Use an explicit $(EXEEXT).
	(install-exec-local): When handling $(noinst_PROGRAMS), only use
	$(EXEEXT) on the installed file.  When handling $(TOOL_PROGS),
	handle $(EXEEXT) correctly.
	* configure.in: Add an explicit $(EXEEXT) when substituting for
	the name of a program to build.
	* Makefile.in, configure: Rebuild.

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

	* deflex.l, defparse.y: Use VERSIONK rather than VERSION.
	* rclex.l, rcparse.y: Likewise.
	* Makefile.am (windres_SOURCES): Add $(BULIBS).
	* Makefile.in: Rebuild.

Fri Aug  1 13:08:39 1997  Ian Lance Taylor  <ian@cygnus.com>

	* acinclude.m4: Include bfd/acinclude.m4, not bfd/acmacros.m4.
	* aclocal.m4, configure: Rebuild with new libtool.

Thu Jul 31 11:51:35 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.am: New file, based on old Makefile.in.
	* acinclude.m4: New file, from old aclocal.m4.
	* configure.in: Call AM_INIT_AUTOMAKE and AM_PROG_LIBTOOL.  Remove
	shared library handling; now handled by libtool.  Replace
	AC_CONFIG_HEADER with AM_CONFIG_HEADER.  Call AC_PROG_YACC,
	AC_PROG_LEX, AC_DECL_YYTEST, AM_MAINTAINER_MODE, AM_CYGWIN32, and
	AM_EXEEXT.  Replace AC_PROG_INSTALL with AM_PROG_INSTALL.  Remove
	stamp-h handling in AC_OUTPUT.
	* acconfig.h: Mention PACKAGE and VERSION.
	* stamp-h.in: New file.
	* Makefile.in: Now built with automake.
	* aclocal.m4: Now built with aclocal.
	* config.in, configure: Rebuild.

	From Ton van Overbeek <tvoverbe@wk.estec.esa.nl>:
	* rcparse.y (dialog): Default menu and class to be named.
	(styles): If FONT is seen, set DS_SETFONT in dialog style.
	* resbin.c (res_to_bin_dialog): Correct computation of font
	information length.

Wed Jul 30 11:21:06 1997  Ian Lance Taylor  <ian@cygnus.com>

	From Ton van Overbeek <tvoverbe@wk.estec.esa.nl>:
	* resbin.c (res_to_bin_menu): Correct computation of menu
	vs. menuex length.
	* resrc.c (define_stringtable): Add 1 to resource ID.

Tue Jul 29 11:06:03 1997  Ian Lance Taylor  <ian@cygnus.com>

	* resbin.c (bin_to_res_string): Correct adjustment of data and
	length.  From Ton van Overbeek <tvoverbe@wk.estec.esa.nl>.

Tue Jul 22 18:01:23 1997  Ian Lance Taylor  <ian@cygnus.com>

	* nlmconv.c (link_inputs): Call libiberty pexecute function.
	(pexecute) [multiple versions]: Remove.

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

	* bucomm.c (make_tempname): If we might be using a DOS filesystem,
	check for a backslash as well as a slash.

Thu Jun 26 13:53:17 1997  Ian Lance Taylor  <ian@cygnus.com>

	* windres.c (main): Quit if we didn't get any resources.
	(usage): Fix --yydebug usage message.
	* rescoff.c (write_coff_file): Don't free the relocation array
	until after we've closed the BFD.
	(read_coff_rsrc): Quit rather than try to read standard input.
	(write_coff_file): Quit rather than try to write to standard
	output.
	* rcparse.y: Add a couple of missing semicolons (accepted by bison
	but not byacc).
	* binutils.texi: Document windres.

Wed Jun 25 20:57:06 1997  Ian Lance Taylor  <ian@cygnus.com>

	* resbin.c: New file.
	* rclex.l, rcparse.y, rescoff.c, resrc.c, windres.c, windres.h:
	Numerous fixes and improvements.
	* Makefile.in: Rebuild dependencies.
 	(CFILES): Add resbin.c.
	(WINDRES_OBJS): Add resbin.o.

Sun Jun 22 17:29:41 1997  Ian Lance Taylor  <ian@cygnus.com>

	First stab at Windows resource compiler:
	* windres.h: New file.
	* windres.c: New file.
	* resrc.c: New file.
	* rcparse.y: New file.
	* rclex.l: New file.
	* rescoff.c: New file.
	* configure.in: Define and substitute BUILD_WINDRES.
	* configure: Rebuild.
	* Makefile.in: Rebuild dependencies.
 	(WINDRES_PROG): New variable.
	(PROGS): Add @BUILD_WINDRES@.
	(HFILES): Add dlltool.h and windres.h.
	(CFILES): Add windres.c and resrc.c.
	(GENERATED_CFILES): Add rcparse.c and rclex.c.
	(WINDRES_OBJS): New variable.
	$(WINDRES_PROG): New target.
	(rcparse.c, rcparse.h, rclex.c): New targets.

Thu Jun 12 12:27:51 1997  Ian Lance Taylor  <ian@cygnus.com>

	* dlltool.c (export_type): Add data field.
	(def_exports): Add data parameter.  Change all callers.
	(dump_def_info): Print data field.
	(gen_def_file): Likewise.
	(make_one_lib_file): Handle data field by not emitting simple
	label and not emitting anything in SEC_TEXT.
	(dtab): Print data field.
	(process_duplicates): Merge data field.
	* dlltool.h (def_exports): Update declaration.
	* defparse.y (expline): Accept opt_DATA.  Pass it to def_exports.
	(opt_DATA): New non-terminal.

Wed Jun 11 17:15:47 1997  Ian Lance Taylor  <ian@cygnus.com>

	* dlltool.h: New file.
	* deflex.l: Include dlltool.h and libiberty.h.  Don't declare
	strdup.  Use xstrdup rather than strdup.
	* defparse.y: Include bfd.h, bucomm.h, and dlltool.h.
	* dlltool.c: Include dlltool.h and time.h.  Make a lot of
	variables and functions static.  Make a lot of char * variables
	and parameters const.  Add declarations for static functions.  Do
	some reindenting.  Hide more PowerPC stuff inside DLLTOOL_PPC.

Wed Jun 11 12:05:52 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* ar.c (bfd_special_undocumented_glue): Add const.

Mon May 12 22:09:35 1997  Bob Manson  <manson@charmed.cygnus.com>

	* Makefile.in (check): Pass CC_FOR_TARGET and CFLAGS_FOR_TARGET
	to runtest.

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

	* configure.in: Don't clear OPCODES when --enable-commonbfdlib is
	used on HP/UX.
	* configure: Rebuild.

Fri Apr 25 14:22:08 1997  H.J. Lu  <hjl@gnu.ai.mit.edu>

	* Makefile.in (maintainer-clean realclean): Change *.info*
	to binutils.info* to save sysroff.info.

Tue Apr 15 13:42:22 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (INSTALL): Set to @INSTALL@.
	(INSTALL_XFORM, INSTALL_XFORM1): Remove.
	(install): Depend upon installdirs.  Use $(program_transform_name)
	directly, rather than using $(INSTALL_XFORM) and
	$(INSTALL_XFORM1).
	(installdirs): New target.
	(install-info): Run mkinstalldirs.

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

	* Makefile.in (INSTALL): Change install.sh to install-sh.

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

Fri Apr  4 13:28:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add AC_FUNC_ALLOCA.
	* configure, config.in: Rebuild.
	* bucomm.h: Add alloca handling, copied from gas/as.h.
	* dlltool.c: Add #pragma alloca for AIX to start of file.
	* nlmconv.c: Likewise.

	* Makefile.in (distclean): Remove site.exp and site.bak.  Remove
	everything that clean removes.

Thu Apr  3 13:18:39 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (VERSION): Set to 2.8.1.

	* Branched binutils 2.8.

Tue Apr  1 16:21:44 1997  Klaus Kaempf  <kkaempf@progis.de>

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

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

	* objcopy.c (make_same_dates): Use statbuf, not buf, if not
	HAVE_GOOD_UTIME_H.

Fri Mar 28 17:57:53 1997  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* Makefile.in ($(OBJDUMP_PROG)): Don't link against BFDLIB twice.
	* configure.in: Add AC_ARG_ENABLE for commonbfdlib.  If it is set,
	set OPCODES to empty.
	* configure: Rebuild.

Thu Mar 27 16:03:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	Based on patch from Marty Leisner <leisner@sdsp.mc.xerox.com>:
	* objcopy.c: Include <utime.h> or <sys/time.h>.
	(strip_options): Add "preserve-dates".
	(copy_options): Likewise.
	(copy_usage): Mention -p and --preserve-dates.
	(strip_usage): Likewise.
	(make_same_dates): New static function.
	(strip_main): Handle -p.
	(copy_main): Likewise.
	* binutils.texi, strip.1, objcopy.1: Document new option.

	addr2line.c contributed by Ulrich Lauther
	<Ulrich.Lauther@zfe.siemens.de>:
	* addr2line.c: New file.
	* Makefile.in: Rebuild dependencies.
 	(ADDR2LINE_PROG): New variable.
	(MANPAGES): Add addr2line.
	(PROGS): Add $(ADDR2LINE_PROG).
	(CFILES): Add addr2line.c.
	($(ADDR2LINE_PROG)): New target.
	* binutils.texi: Document addr2line.
	* addr2line.1: New file.

	* version.c (print_version): Update copyright date.

Mon Mar 24 10:52:45 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* objdump.c (disassemble_data): Don't exit if a file cannot be
	disassembled, instead just return.

Thu Mar 20 21:16:51 1997  Jeffrey A Law  (law@cygnus.com)

	* size.c (usage): Make definition match its prototype.
	(display_bfd, lprint_number, rprint_number): Likewise.
	(print_berkeley_format, sysv_internal_printer): Likewise.
	(print_sysv_format): Likewise.
	* nm.c (set_print_radix, set_output_format): Likewise.
	* objcopy.c (filter_bytes): Likewise.

Tue Mar 18 16:39:55 1997  H.J. Lu  <hjl@lucon.org>

	* Many files: Add function prototypes.
	* ar.c (mri_emul, get_pos_bfd): Make static.
	* arlex.l: Include "libiberty.h".  Don't declare strdup.  Use
	xstrdup rather than strdup.
	* arparse.y (yyerror): Make argument const.  Correct typo.
	* arsup.c (strdup): Don't declare.
	(ar_save): Use xstrdup rather than strdup.
	* filemode.c: Include "bucomm.h".
	* nm.c (usage): Make static.
	(print_symname): Make format and name const.
	* objcopy.c (cat): Remove.
	(copy_archive): Make output_target const.  Use concat, not cat.
	(copy_file, simple_copy, smart_rename): Make arguments const.
	* objdump.c (read_section_stabs): Likewise.
	(print_section_stabs): Likewise.
	(display_target_tables): Don't declare getenv.
	* strings.c (strings_object_file): Change file to const.
	(print_strings): Change filename to const.
	* Makefile.in: Rebuild dependencies.

Tue Mar 18 11:37:24 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add BFD_NEED_DECLARATION(getenv).
	* acconfig.h: Add NEED_DECLARATION_GETENV.
	* bucomm.h (getenv): Declare if NEED_DECLARATION_GETENV.
	* configure, config.in: Rebuild.
	* nlmconv.c (getenv): Don't declare.

	* Makefile.in: Rebuild dependencies.

Sat Mar 15 15:35:56 1997  Ian Lance Taylor  <ian@cygnus.com>

	Based on patches from Jamie Lokier <jamie@rebellion.co.uk>:
	* objdump.c: Include "demangle.h".
	(do_demangle): New static variable.
	(usage): Mention -C/--demangle.
	(long_options): Add "demangle".
	(objdump_print_symname): New static function.
	(objdump_print_addr_with_sym): Use objdump_print_symname.
	(disassemble_bytes): Likewise.
	(dump_reloc_set): Likewise.
	(dump_symbols): Demangle symbol name.
	(main): Handle -C.
	* binutils.texi, objdump.1: Document -C/--demangle.

	* objdump.c (usage): Mention --no-show-raw-insn.
	(long_options): Add "no-show-raw-insn".
	(disassemble_bytes): Handle --no-show-raw-insn.
	* binutils.texi, objdump.1: Document --no-show-raw-insn.

Wed Mar 12 11:42:00 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* rddbg.c (free_saved_stabs): Set the strings to NULL after being
	freed.

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

	* bucomm.c (set_default_bfd_target): New function.
	* bucomm.h (set_default_bfd_target): Declare.
	* ar.c (main): Call set_default_bfd_target.
	* nlmconv.c (main): Likewise.
	* nm.c (main): Likewise.
	* objcopy.c (main): Likewise.
	* objdump.c (main): Likewise.
	* size.c (main): Likewise.
	* strings.c (main): Likewise.
	* Makefile.in (bucomm.o): New target, to define TARGET.

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

	* objdump.c (adjust_section_vma): New static variable.
	(usage): Mention --adjust-section-vma.
	(OPTION_ADJUST_VMA): Define.
	(long_options): Add "addjust-vma".
	(display_bfd): If adjust_section_vma is not 0, add it to all the
	section addresses.
	(main): Handle OPTION_ADJUST_VMA.
	* binutils.texi, objdump.1: Document --adjust-vma.

Fri Feb 14 18:46:47 1997  Ian Lance Taylor  <ian@cygnus.com>

	* nm.c (print_symbol): Cache the BFD as well as the symbols and
 	relocs, and don't try to use the symbols or relocs with a
 	different BFD.

Thu Feb 13 21:34:43 1997  Klaus Kaempf  (kkaempf@progis.de)

	* config.h-vms: sbrk() is provided on openVMS/Alpha.
	* makefile.vms: allow compiling with current gcc snapshot.

Thu Feb 13 20:14:40 1997  Ian Lance Taylor  <ian@cygnus.com>

	* arsup.c, coffgrok.c, dlltool.c, nlmconv.c: Use xmalloc rather
	than malloc.

Wed Feb 12 16:12:02 1997  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (disassemble_data): Correct VMA argument to
	find_symbol_for_address.  Improve handling of code with no symbol
	followed by code with a symbol.

Wed Feb 12 12:16:47 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* objdump.c (disassemble_bytes): Make output of raw instructions
	work better for non-standard values of bytes_per_chunk and
	bytes_per_line.

Thu Feb  6 14:14:59 1997  Martin M. Hunt  <hunt@pizza.cygnus.com>

	* objdump.c (disassemble_bytes): Added code to allow some control
 	over the way raw instructions are displayed.

Thu Feb  6 12:36:03 1997  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (struct bincl_file): Add next_stack field.
	(push_bincl): Put the new file on both bincl_list and
	bincl_stack.  Clear the file_types field.
	(pop_bincl): Use the next_stack field when popping the stack.
	Don't put the file on bincl_list.
	(find_excl): Include the file name when warning about an unfound
	N_EXCL.

	* debug.c (debug_type_samep): Don't crash if we are passed NULL.

Thu Feb  6 11:54:24 1997  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* objcopy.1: Add missing space after .B.

Fri Jan 31 10:33:07 1997  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* objdump.c (disassemble_data): Initialize `aux.require_sec'.

Wed Jan 29 13:21:21 1997  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (objdump_print_value): Add skip_zeroes parameter.
	Change all callers.
	(objdump_print_addr_with_sym): Likewise.  Call objdump_print_value
	to print address.
	(objdump_print_addr): New static function.
	(objdump_print_address): Just call objdump_print_addr.
	(disassemble_bytes): Print real address, not function offset.
	Skip a certain number of leading zeroes.

	* objdump.c (disassemble_zeroes): New static variable.
	(usage): Mention --disassemble-zeroes.
	(long_options): Add "disassemble-zeroes".
	(disassemble_bytes): Check disassemble_zeroes.

Tue Jan 28 16:47:26 1997  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (disassemble_bytes): Don't skip zeroes if the
	disassembler has told us that we are in a branch delay slot.

Mon Jan 20 14:24:04 1997  Ian Lance Taylor  <ian@cygnus.com>

	* size.c (berkeley_sum): Rewrite.  Skip sections which are not
	SEC_ALLOC.  Count SEC_READONLY sections as text.

Tue Jan 14 15:14:14 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (maintainer-clean realclean): Remove *.info*, not
	just *.info.  From H.J. Lu <hjl@lucon.org>.

Tue Dec 31 15:42:54 1996  Ian Lance Taylor  <ian@cygnus.com>

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

Fri Dec 27 11:19:26 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Work around bug in AC_FUNC_VFORK in autoconf 2.12.
	* configure: Rebuild.

Thu Dec 19 13:11:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	Based on patch from Andrew J Klossner <andrew@pogo.wv.tek.com>:
	* objcopy.c (OPTION_WEAKEN): Define.
	(copy_options): Add "weaken".
	(copy_usage): Mention --weaken.
	(weaken): New static variable.
	(filter_symbols): Handle weaken.
	(copy_object): Call filter_symbols if weaken.
	(copy_main): Handle OPTION_WEAKEN.
	* binutils.texi, objcopy.1: Document --weaken.

Wed Dec 18 22:49:13 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Use NewFolderRecursive for installation.

Sat Dec  7 10:17:25 1996  Jeffrey A Law  (law@cygnus.com)

	* Makefile.in (install): Add "else true" clause to cater to
	broken "make" on some systems.

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

	* ieee.c (parse_ieee_bb): Always initialize namcopy to avoid gcc
	warning about uninitialized variable.
	(ieee_read_cxx_class): Likewise, for pf.
	(ieee_enum_type): Likewise, for i.

Tue Nov 26 17:01:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* wrstabs.c (stab_array_type): Add casts when printing
	bfd_signed_vma values.

	* configure: Rebuild with autoconf 2.12.

Mon Nov 25 16:53:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (disassemble_data): Don't crash if there is no
	symbol.

Fri Nov 22 17:29:14 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* ar.c (open_inarch): Don't call bfd_openr with a null name.

Fri Nov  1 12:08:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* binutils.texi: Add section on reporting bugs.

Thu Oct 31 18:20:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (struct stab_handle): Add bincl_list field.
	(parse_stab): Pass value to push_bincl.  Call find_excl for
	N_EXCL.
	(struct bincl_file): Add hash, file and file_types fields.
	(push_bincl): Add hash parameter.  Save it in the new hash field.
	Save the file number in the new file field.
	(pop_bincl): Put the bincl_file on bincl_list, rather than freeing
	it.  Save the file types in the new file_types field.
	(find_excl): New static function.

	* ieee.c (ieee_lineno): Don't compare line number addresses to
	info->highaddr (undo part of October 28 patch).

Tue Oct 29 16:40:22 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (objdump_print_value): Don't print the empty string
	for zero.

Mon Oct 28 16:58:14 1996  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (struct stab_handle): Add function_end field.
	(start_stab): Initialize function_end.
	(finish_stab): Pass info->function_end to debug_end_function.
	(parse_stab): If info->function_end is set, use it as the address
	which ends a function.

	* ieee.c (ieee_array_type): Remember the correct size.

	* ieee.c (ieee_finish_compilation_unit): Permit coalescing ranges
	that are up to 0x1000 bytes apart, not just 64.
	(ieee_add_bb11_blocks): Don't bother to emit a BB11 that is less
	than 0x100 bytes.
	(ieee_lineno): Only emit line numbers that are less than
	info->highaddr.

Fri Oct 25 12:12:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (struct ieee_defined_enum): Add defined field.
	(ieee_enum_type): If the enum tag has been seen before but not
	defined, reuse the same type index, and define it.
	(ieee_tag_type): If this enum has not been defined, add an
	undefined entry to the list of enums.

	* objdump.c (disassemble_bytes): Let the disassembler override the
	number of bytes printed on a line.

Thu Oct 24 16:42:10 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (prefix_addresses): New static variable.
	(long_options): Add "prefix-addresses".
	(compare_symbols): Sort BSF_FUNCTION symbols before other
	symbols.
	(find_symbol_for_address): New static function, broken out of
	objdump_print_address.
	(objdump_print_addr_with_sym): New static function, broken out of
	objdump_print_address.
	(objdump_print_address): Call new functions.
	(disassemble_bytes): New static function, broken out of
	disassemble_data.  Change disassembly format, unless
	prefix_addresses is set.
	(disassemble_data): Call disassemble_bytes.  Unless
	prefix_addresses is set, disassemble in chunks headed by a
	symbol.
	* binutils.texi, objdump.1: Document --prefix-addresses.

	* rddbg.c (read_section_stabs_debugging_info): Preserve the
	backslash when concatenating multiple stabs strings.

Thu Oct 10 11:36:31 1996  Doug Evans  <dje@canuck.cygnus.com>

	* dlltool.c (scan_open_obj_file): Fix loop exit test.
	Add missing parameter to def_exports.

Tue Oct  8 12:06:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (LEX_OPTIONS): Set to empty string.  -I -Cem is the
	default for flex, and is not recognized by lex.

Thu Oct  3 17:41:23 1996  Ian Lance Taylor  <ian@cygnus.com>

	* binutils.texi (Target Selection): Document that you can now
	specify targets using configuration triplets.

	* ar.c (usage): Declare.  Make sure all callers pass an argument.

Thu Oct  3 15:39:42 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (clean): Remove config.log.

Wed Oct  2 15:49:16 1996  Klaus Kaempf  <kkaempf@progis.de>

	* makefile.vms: Bump version date.

Tue Oct  1 15:00:59 1996  Ian Lance Taylor  <ian@cygnus.com>

	* version.c (print_version): New function.
	* bucomm.h (print_version): Declare.
	* ar.c (program_version): Don't declare.
	(do_show_version): Remove.
	(usage): Add help parameter.  Print bug report address.
	(main): Set is_ranlib at start.  Check for --help and --version.
	Call print_version, not do_show_version.
	* nlmconv.c (program_version): Don't declare.
	(main): Call print_version.
	(show_usage): Print bug report address.
	* nm.c (program_version, print_version): Don't declare.
	(usage): Print bug report address.
	(main): Call print_version.
	* objcopy.c (program_version): Don't declare.
	(copy_usage): Print bug report address.
	(strip_usage): Likewise.
	(strip_main): Call print_version.
	(copy_main): Likewise.
	* objdump.c (program_version): Don't declare.
	(usage): Print bug report address.
	(main): Call print_version.
	* size.c (program_version): Don't declare.
	(usage): Print bug report address.
	(main): Call print_version.
	* strings.c (program_version): Don't declare.
	(main): Call print_version.
	(usage): Print bug report address.
	* Makefile.in: Update dependencies.

Thu Sep 19 14:53:15 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c: Revert Monday's reflocalp patch, and apply this patch
	instead:
 	(write_ieee_debugging_info): Write a dummy type at the end of the
	global type block.

Mon Sep 16 15:30:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (struct ieee_write_type): Add reflocalp field.
	(ieee_pointer_type): Set reflocalp after pushing type.
	(ieee_function_type): If reflocalp is set, make this type local.
	(ieee_range_type, ieee_array_type, ieee_set_type): Likewise.
	(ieee_const_type, ieee_volatile_type): Likewise.
	(ieee_struct_field, ieee_class_baseclass): Likewise.

	* ieee.c (struct ieee_info): Add global_types field.
	(parse_ieee_bb): When starting a BB1, initialize the types field
	to the global_types field.
	(parse_ieee_be): When ending a BB2, copy the types field to the
	global_types field.

Fri Sep 13 17:32:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (change_leading_char): New static variable.
	(OPTION_CHANGE_LEADING_CHAR): Define.
	(copy_options): Add "change-leading-char".
	(copy_usage): Mention --change-leading-char.
	(filter_symbols): Add obfd parameter.  Change all callers.
	Implement change_leading_char.
	(copy_object): Call filter_symbols if change_leading_char.
	(copy_main): Handle OPTION_CHANGE_LEADING_CHAR.
	* binutils.texi, objcopy.1: Document --change-leading-char.

Tue Sep  3 14:05:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_enum_type): Don't check index into a NULL names
	array.
	* nm.c (sort_symbols_by_size): Always initialize next.
	* rdcoff.c (parse_coff_type): Warn about an incomprehensible
	type rather than crashing.
	* rddbg.c (read_symbol_stabs_debugging_info): Initialize f.
	* stabs.c (parse_stab_members): Set context in all cases.

Thu Aug 29 16:56:52 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (i[345]86-*-*): Recognize i686 for pentium pro.
	* configure: Regenerate.

Thu Aug 29 11:29:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (L_tmpnam): Never define.
	(display_target_list): Use choose_temp_base instead of tmpnam.
	(display_info_table): Likewise.

Tue Aug 27 18:15:01 1996  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (parse_stab): An N_FUN symbol with an empty string
	indicates the end of a function.

Thu Aug 22 17:08:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* wrstabs.c (struct string_hash_entry): Add next field.
	(struct stab_write_handle): Change strings to a pointer to
	string_hash_entry.  Add last_strings field.  Remove strings_alloc
	field.
	(string_hash_newfunc): Initialize next field.
	(stab_write_symbol): Copy string into hash table rather than into
	buffer.  Keep a list of hash table entries.
	(write_stabs_in_sections_debugging_info): Initialize last_string.
	Copy strings from list of hash table entries in memory.
	(stab_modify_type): If the entry on the stack is a definition,
	make a new definition rather than failing an assert.
	(stab_array_type): The size is only zero if high is strictly less
	than low.

	* ieee.c (struct ieee_info): Add saw_filename field.
	(parse_ieee): Initialize saw_filename.
	(parse_ieee_bb): Set saw_filename for a BB1 or BB2.  In a BB1,
	discard the current variables and types.  In a BB10, if no
	filename has been seen, call debug_set_filename.
	(parse_ieee_ty): In case 'g', the type is optional.

	* prdbg.c (pr_fix_visibility): Don't abort on
	DEBUG_VISIBILITY_IGNORE.

	* debug.c (debug_name_type): Correct error message.

	* configure.in: Substitute HLDENV.
	* configure: Rebuild.
	* Makefile.in (HLDENV): New variable.  Use it whenever linking a
	program.

Thu Aug 15 19:30:41 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Add symbolic doublequotes around the version
	number.

Thu Aug  8 12:27:52 1996  Klaus Kaempf  <kkaempf@progis.de>

	* makefile.vms: Add better support for DEC C compilation.
	Add new macros as in Makefile.in.

Wed Aug  7 14:27:33 1996  Philippe De Muyter  <phdm@info.ucl.ac.be>

	* configure.in: Call BFD_NEED_DECLARATION on strstr and sbrk.
	* acconfig.h (NEED_DECLARATION_STRSTR): New macro.
	(NEED_DECLARATION_SBRK): New macro.
	* configure, config.in: Rebuild.
	* bucomm.h (strstr): Declare if NEED_DECLARATION_STRSTR.
	(sbrk): Declare if HAVE_SBRK and NEED_DECLARATION_SBRK.

	* prdbg.c (pr_end_struct_type): Avoid using a string constant in
	assert, for the benefit of broken assert macros.

Fri Jul 26 14:06:50 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (disassemble_data): Set disasm_info.flavour from
	abfd.

Tue Jul 23 13:59:54 1996  Ian Lance Taylor  <ian@cygnus.com>

	* dlltool.c (secdata): In non DLLTOOL_PPC case, change alignment
	of .text section to 2.

Mon Jul 22 08:46:15 1996  Stu Grossman  (grossman@lisa.cygnus.com)

	* objdump.c (dump_section_stabs):  Fix test for stabs sections
	ending with numbers.  This fixes a problem with .stab being
	confused with .stab.index.

Wed Jul 10 13:32:28 1996  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (stab_demangle_fund_type): Return a void * for a
	template, rather than simply aborting.

Mon Jul  8 15:28:05 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ar.c (open_inarch): Add file parameter.  Change all callers.  If
	this is a newly created archive, set the target based on the
	file.
	* arsup.h (open_inarch): Update declaration.

Thu Jul  4 12:00:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (VERSION): Set to cygnus-2.7.1.

	* Released binutils 2.7.

	* rdcoff.c (parse_coff): Get address to pass to debug_end_function
	from function size, not value of .ef symbol.  From Ning
	Mosberger-Tang <ning@AZStarNet.com>.

Sat Jun 29 21:18:09 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (strip_main): Add -o option, and handle it.
	(strip_usage): Mention -o.
	* binutils.texi, strip.1: Mention -o.

Mon Jun 24 17:19:02 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (bindir, libdir, datadir, mandir, infodir, includedir,
	INSTALL_PROGRAM, INSTALL_DATA): Use autoconf set values.
	(docdir): Removed.
	* configure.in (AC_PREREQ): Autoconf 2.5 or higher.

Mon Jun 24 11:59:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (endian): New static variable.
	(usage): Mention -EB/-EL/--endian.
	(long_options): Add "endian".
	(disassemble_data): If endianness was specified, replace
	abfd->xvec with a copy of itself with the given endianness.
	(main): Handle -EB/-EL/--endian.
	* binutils.texi, objdump.1: Mention -EB/-EL/--endian.

	* objdump.c: Make most variables and functions static.

	* configure.in: On alpha*-*-osf*, link against libbfd.a if not
	using shared libraries.
	* configure: Rebuild with autoconf 2.10.

Sun Jun 23 14:47:36 1996  Kim Knuttila  <krk@cygnus.com>

	* dlltool.c (secdata): Changed .rdata to .reldata so .reloc will work.
	(make_one_lib_file): Removed cruft. (#if 1)

Wed Jun 19 14:46:38 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (stabs): Change from struct internal_nlist * to
	bfd_byte *.
	(print_section_stabs): Fetch stabs information directly, rather
	than assuming that struct internal_nlist is the right size.

	* binutils.texi: Document change to binary format: file position
	based on load address, not section VMA.

	* bucomm.h: Define SEEK_SET, SEEK_CUR, and SEEK_END if they are
	not already defined.

Tue Jun 18 18:25:00 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (DISTSTUFF): Add deflex.c.

Tue Jun 18 15:03:44 1996  Klaus Kaempf  <kkaempf@progis.de>

	* config.h-vms, makefile.vms: New files.

Mon Jun 17 09:47:31 1996  Ian Lance Taylor  <ian@cygnus.com>

	* dlltool.c (make_one_lib_file): Use BFD_RELOC_RVA rather than
	BFD_RELOC_32 in IDATA7.

Wed Jun 12 11:52:06 1996  Ian Lance Taylor  <ian@cygnus.com>

	* nm.c (struct get_relocs_info): Define.
	(line_numbers): New static variable.
	(long_options): Add "line-numbers".
	(usage): Mention -l and --line-numbers.
	(main): Handle -l.
	(print_symbol): Print line numbers if requested.
	(get_relocs): New static function.
	* binutils.texi, nm.1: Document -l/--line-numbers.

Tue Jun 11 20:12:15 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (dump_reloc_set): Add sec parameter.  Change all
	callers.  If with_line_numbers is set, display line numbers of
	relocation entries.
	* binutils.texi, objdump.1: Document -l with -r.

Mon Jun 10 23:42:59 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ar.c (open_inarch): Report BFD error message if an archive can
	not be recognized.  List matching formats if the file is
	ambiguously recognized.
	(ranlib_touch): Likewise.

Thu Jun  6 13:56:14 1996  Ian Lance Taylor  <ian@cygnus.com>

	* README: Add notes on how to build if you don't have ar.

	* Makefile.in: Remove old incorrect setting of CC.

Tue Jun  4 10:52:49 1996  Tom Tromey  <tromey@csk3.cygnus.com>

	* Makefile.in (install): Don't check to see if tooldir exists.
	Make $(tooldir) and $(tooldir)/bin.

Mon Jun  3 17:40:23 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* strings.c (main): Make main an int function, not void.

Fri May 31 13:59:24 1996  Ian Lance Taylor  <ian@cygnus.com>

	* nm.c (filter_symbols): Check for BSF_WEAK as well as
	BSF_GLOBAL.
	* objcopy.c (filter_symbols): Likewise.

Wed May  8 16:57:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (copy_object): Make clear that it is only a warning
	when the output file can not represent the architecture.

Fri May  3 11:30:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (disassemble_data): Don't refer to bytes past the end
	of data.

Wed Apr 24 14:10:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rddbg.c (read_symbol_stabs_debugging_info): Move call to
	free_saved_stabs outside the loop over the symbols.

Tue Apr 23 12:56:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (compare_symbols): Sort symbols whose names start with
 	`.' after other symbols.  If no other decision can be made, sort
	symbols by name.

Thu Apr 18 16:02:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* dep-in.sed: Substitute $(BFDDIR) for @BFDDIR@.
	* Makefile.in: Rebuild dependencies.
	(dep.sed): Substitute $(BFDDIR) for @BFDDIR@.

Tue Apr 16 13:50:22 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rdcoff.c: New file.
	* rddbg.c (read_debugging_info): Read COFF symbols if COFF flavour
	and no stabs were found.
	* budbg.h (parse_coff): Declare.
	* Makefile.in: Rebuild dependencies.
	(CFILES): Add rdcoff.c.
	(DEBUG_OBJS): Add rdcoff.o.

Mon Apr 15 15:55:01 1996  Doug Evans  <dje@canuck.cygnus.com>

	* nlmconv.c (choose_temp_base{,_try}): Delete, in libiberty now.
	(link_inputs): Update call to choose_temp_base.

Mon Apr  8 14:40:05 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Permit --enable-shared to specify a list of
	directories.
	* configure: Rebuild.

Fri Mar 29 16:11:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (dump_section_header): Print the SEC_LINK_ONCE flag
	and the SEC_LINK_DUPLICATES field.

Fri Mar 29 11:35:55 1996  J.T. Conklin  (jtc@lisa.cygnus.com)

	* nlmconv.1: Changed to be recognized by catman -w on Solaris.

Thu Mar 28 14:17:02 1996  Ian Lance Taylor  <ian@cygnus.com>

	* wrstabs.c (stab_enum_type): Set buf before using it.

Fri Mar 22 15:49:08 1996  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (struct stab_handle): Add field abfd.
	(start_stab): Add abfd parameter.
	(parse_stab_string): Skip the symbol leading char when searching
	for the value of a global symbol.
	* budbg.h (start_stab): Update declaration.
	* rddbg.c (read_section_stabs_debugging_info): Pass abfd to
	start_stab.
	(read_symbol_stabs_debugging_info): Likewise.

Thu Mar 21 12:40:48 1996  Ian Lance Taylor  <ian@cygnus.com>

	* wrstabs.c (stab_function_type): Output an empty typedef for an
	unused argument, rather than making up a meaningless name.
	(stab_variable): Use N_RSYM for a DEBUG_REGISTER variable.

	* ieee.c (struct ieee_info): Add global_vars field.
	(parse_ieee_be): When ending the global typedef block, copy the
	variables into info->global_vars.
	(parse_ieee_atn): Don't require an NN record for a pmisc ATN.
	(ieee_read_reference): Search the global variables after the local
	variables.

Wed Mar 20 18:08:19 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* objdump.c (disassemble_data): Make sure sym_name is always set.
	(dump_section_header): Always put a space after the section name.
	(dump_bfd_header): Terminate output with newline.

Wed Mar 20 16:35:20 1996  Ian Lance Taylor  <ian@cygnus.com>

	* wrstabs.c: New file.
	* budbg.h (write_stabs_in_sections_debugging_info): Declare.
	* objcopy.c (write_debugging_info): For COFF or ELF, output stabs
	in sections.
	* Makefile.in: Rebuild dependencies.
	(CFILES): Add wrstabs.c.
	(WRITE_DEBUG_OBJS): New variable.
	($(OBJCOPY_PROG)): Use $(WRITE_DEBUG_OBJS), not $(DEBUG_OBJS).
	($(STRIP_PROG)): Likewise.

	* stabs.c (parse_stab_members): Make type stub detection more like
	gdb.

	* ieee.c (struct ieee_handle): Add fields complex_float_index and
	complex_double_index.
	(ieee_complex_type): Cache type index in complex_float_index and
	complex_double_index, depending upon size.  Set size on type stack
	to size * 2.

	* ieee.c (ieee_empty_type): Use builtin_unknown, not 0.
	(ieee_void_type): Use builtin_void, not 1.

	* ieee.c (parse_ieee_ty): Handle 'V' type code.
	(parse_ieee_atn): Don't require two numbers for type 10.

	* ieee.c (parse_ieee_be): Add one to offset at end of function or
	block.

	* ieee.c (struct ieee_block): Add field skip.
	(parse_ieee_bb): Don't call debug_record_function for __XRYCPP
	function, and set skip field.
	(parse_ieee_be): Don't call debug_end_function if skip is set.

	* debug.c (struct debug_handle): Add fields current_write_lineno
	and current_write_lineno_index.
	(debug_write): Initialize current_write_lineno and
	current_write_lineno_index for each unit.  Call
	debug_write_linenos rather than writing out the line numbers
	directly.
	(debug_write_function): Call debug_write_linenos.
	(debug_write_block): Likewise.
	(debug_write_linenos): New static function.

	* debug.c (debug_write_type): For DEBUG_KIND_FUNCTION, push return
	type before arguments.

Mon Mar 18 18:05:33 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Add AC_FUNC_VFORK.
	* configure, config.in: Rebuild.
	* dlltool.c, nlmconv.c: Include <vfork.h> if HAVE_VFORK_H is
	defined.

	* stabs.c (parse_stab_range_type): A complex type is defined as a
	subrange of itself with the high bound zero.
	* ieee.c (ieee_complex_type): Don't crash on sizes of 12 or 16.

Tue Mar 12 12:09:43 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_write_undefined_tag): Switch to global_types even
	if it is not empty.
	(ieee_tag_type): For an enum, look through info->enums.

	* configure: Rebuild with autoconf 2.8.

	* debug.c (debug_type_samep): Don't loop endlessly in
	DEBUG_KIND_ENUM case.  From Eric Baur <ecb@nexen.com>.

Mon Mar 11 12:35:03 1996  Ian Lance Taylor  <ian@cygnus.com>

	* rddbg.c (read_section_stabs_debugging_info): Call save_stab for
	each stab entry, call stab_context on an error, and call
	free_saved_stabs before rturning.
	(read_symbol_stabs_debugging_info): Likewise.
	(SAVE_STABS_COUNT): Define.
	(struct saved_stab): Define.
	(saved_stabs, saved_stabs_index): New static variables.
	(save_stab, stab_context, free_saved_stabs): New static functios.

	* objdump.c (stab_name): Remove.
	(struct stab_print): Remove.
	(stab_print): Remove.
	(dump_stabs): Don't initialize stab_name.
	(print_section_stabs): Call bfd_get_stab_name rather than using
	the stab_name array.

Tue Feb 27 19:52:01 1996  Ian Lance Taylor  <ian@cygnus.com>

	* prdbg.c (pr_int_constant): Initialize info correctly.
	(pr_float_constant): Likewise.

Mon Feb 26 18:11:37 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Update to handle shared library support.

Sat Feb 24 11:21:49 1996  Alan Modra  <alan@spri.levels.unisa.edu.au>:

	* Makefile.in ($(OBJDUMP_PROG)): Search $(BFDLIB) before
	$(OPCODES).

Thu Feb 15 12:44:45 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Don't tamper with LDFLAGS.  Call AC_PROG_CC before
	configure.host.
	* configure: Rebuild.

	* configure.in: Substitute RPATH_ENVVAR.
	* configure: Rebuild.
	* Makefile.in (RPATH_ENVVAR): New variable.
	(check): Use $(RPATH_ENVVAR) rather than LD_LIBRARY_PATH.

	* objcopy.c (smart_rename): Rather than doing chmod then chown, do
	chmod without setuid, then chown, then chmod with setuid.

Wed Feb 14 16:46:42 1996  Martin Anantharaman  <martin@mail.imech.uni-duisburg.de>

	* arsup.c (map_over_list): Reindent.  Don't assume that the
	function does not delete the BFD.
	(ar_addlib_doer): Don't set prev->next if prev is NULL.

Wed Feb 14 15:12:17 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_regno_to_genreg): Convert register numbers for m68k
	and i960.
	(ieee_genreg_to_regno): Likewise.

Mon Feb 12 14:19:59 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c: Extensive changes to write code to put types in the
	global type block when possible, to output ranges for all memory
	occupied by the module, and to improve efficiency.

	* debug.c (struct debug_handle): Remove class_mark field.  Add
	id_list and compare_list fields.
	(struct debug_class_id): Define.
	(struct debug_type_compare_list): Define.
	(debug_write): Initialize info->id_list
	(debug_write_name): Remove reference to info->class_mark.
	(debug_write_type): Get id for all structs and classes.  Simplify
	test for whether struct has already been written.
	(debug_write_class_type): Get id for all classes.  Simplify test
	for whether class has already been written.
	(debug_write_block): Don't write out blocks other than the top
	level block if they have no local variables.
	(debug_set_class_id): New static function.
	(debug_type_samep): New static function.
	(debug_class_type_samep): New static function.
	* prdbg.c (pr_start_struct_type): Always print id.
	(pr_start_class_type): Likewise.
	(pr_tag_type): Likewise.

	* stabs.c (struct stab_handle): Add syms and symcount fields.
	(start_stab): Add syms and symcount parameters.  Change all
	callers.
	(parse_stab_string): Look up global variables in the symbol table
	to get the right value.
	* budbg.h (start_stab): Update declaration.
	* rddbg.c (read_section_stabs_debugging_info): Add syms and
	symcount parameters.  Change all callers.

	* stabs.c (parse_stab_array_type): If the index type is 0, use
	int.

Wed Feb  7 14:17:45 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c (ieee_start_compilation_unit): Clear modified and
	modified_alloc fields of info.

	* configure.in: Check for --enable-shared.  Substitute new
	variables BFDLIB and OPCODES.
	* configure: Rebuild.
	* Makefile.in (BFDLIB): Set to @BFDLIB@.
	(OPCODES): Set to @OPCODES@.

Mon Feb  5 16:18:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	Support for building bfd and opcodes as shared libraries, based on
	patches from Alan Modra <alan@spri.levels.unisa.edu.au>:
	* configure.in (HLDFLAGS): New substitution.
	* configure: Rebuild.
	* Makefile.in (HLDFLAGS): New variable.  Make all links use
	$(HLDFLAGS) before $(CFLAGS) and $(LDFLAGS).
	(BFDLIB_DEP): New variable.  Replace all occurrences of $(BFD) as
	a dependency with $(BFDLIB_DEP).  Remove $(BFD) as a dependency if
	there is also a dependency on $(ADDL_DEPS).
	(BFDLIB): Rename from BFD; change all uses; set to -L../bfd -lbfd.
	(OPCODES_DEP): New variable.  Replace all occurrends of $(OPCODES)
	as a dependency with $(OPCODES_DEP).
	(OPCODES): Set to -L../opcodes -lopcodes.
	(ADDL_DEPS): New variable.  Replace all occurrences of
	$(ADDL_LIBS) as a dependency with $(ADDL_DEPS).
	(check): Set LD_LIBRARY_PATH in the environment.
	(config.status): Depend upon BFD configure.host and config.bfd.

Fri Feb  2 17:02:59 1996  Doug Evans  <dje@charmed.cygnus.com>

	* objdump.c: #include stdarg.h or varargs.h.
	(objdump_print_value): Change FILE* arg to struct disassemble_info*.
	All callers updated.  Use fprintf_func.
	(objdump_print_address): Consistently use fprintf_func.
	(objdump_sprintf): New function.
	(disassemble_data): Print insn into a buffer, print raw insn ourselves,
	then print insn mnemonic.

Fri Feb  2 16:48:55 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Regenerate.

Thu Feb  1 09:38:18 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* configure.in (i[3-6]86-*-win32): Becomes i[3-6]86-*-cygwin32.
	(powerpc*-*-cygwin32): New.
	* configure: Regenerated.

Wed Jan 31 13:22:03 1996  Richard Henderson  <rth@tamu.edu>

	* Makefile.in (distclean): Remove $(DEMANGLER_PROG).1.

Mon Jan 29 17:36:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	Based on patches from H J Lu <hjl@zoom.com>:
	* objcopy.c (remove_leading_char): New static variable.
	(OPTION_REMOVE_LEADING_CHAR): Define.
	(copy_usage): Mention --remove-leading-char.
	(filter_symbols): If remove_leading_char, and the first character
	of a global symbol matches the symbol leading char of the BFD,
	remove the first character.
	(copy_object): Filter the symbols if remove_leading_char is set.
	(copy_main): Handle --remove-leading-char.
	* binutils.texi, objcopy.1: Document --remove-leading-char.

Sat Jan 27 15:40:13 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* objdump.c (fprintf): Add prototype to avoid compiler warning on
	SunOS.

Fri Jan 26 11:53:42 1996  Ian Lance Taylor  <ian@cygnus.com>

	* binutils.texi (nm): Improve documentation on symbol types.
	(objdump): Reference the stabs manual from the discussion of the
	--stabs option.

Thu Jan 25 11:21:46 1996  Raymond Jou  <rjou@mexican.cygnus.com>

	* mpw-make.sed: Add a "stamps" target.

Thu Jan 25 13:51:44 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (dump_headers, dump_section_header): Change objdump -h
	output to be simpler and to include section file offsets.

Wed Jan 24 12:06:05 1996  Ian Lance Taylor  <ian@cygnus.com>

	* stabs.c (parse_stab_members): Don't adjust voffset.

	* ieee.c (ieee_read_cxx_class): Don't multiply voffset by 4.
	(struct ieee_write_type): Add name field.
	(struct ieee_type_class): Remove name field.  Change all uses to
	use new name field in type instead.
	(struct ieee_name_type): Likewise.
	(ieee_start_struct_type): Initialize name field of type.
	(ieee_start_class_type): Don't initialize classdef entry of tag.
	(ieee_class_method_var): Don't adjust voffset.
	(ieee_end_class_type): Likewise.
	(ieee_tag_type): Initialize new name field of type.
	(ieee_typdef): Set name after copying in type information.

	* debug.c (VOFFSET_STATIC_METHOD): Define as -1, not 1.

	* ieee.c (struct ieee_modified_type): Define.
	(struct ieee_handle): Add modified and modified_alloc fields.
	(ieee_get_modified_info): New static function.
	(ieee_pointer_type): Cache type index.
	(ieee_const_type): Likewise.
	(ieee_volatile_type): Likewise.

	* ieee.c (ieee_define_named_type): When creating a tag for an
	anonymous struct, copy the name into memory.
	(ieee_tag_type): Likewise.
	* debug.c (debug_write_type): Only check and set id field for an
	unnamed object.
	(debug_write_class_type): Likewise.

	* ieee.c: Various changes to write out types for functions and
	references, and to not write out unnecessary function types.

	* ieee.c (struct ieee_var): Remove variable field.  Add kind
	field, and define some enum constants for it.
	(parse_ieee_ty): Set kind field of variable for 'x' and 'X' types.
	(parse_ieee_atn): Make an indirect slot for an external variable,
	although we otherwise don't record it.  Set kind field rather than
	variable field of pvar.
	(ieee_read_cxx_class): Try to get the type of a static member.
	(ieee_read_reference): Check kind field rather than variable
	field.

Tue Jan 23 15:54:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c: Various changes to handle reading C++ reference type
	information.

	* debug.h (enum debug_var_kind): Add DEBUG_VAR_ILLEGAL.
	(enum debug_parm_kind): Add DEBUG_PARM_ILLEGAL.
	* debug.c (debug_get_parameter_types): Handle DEBUG_KIND_FUNCTION.

	* ieee.c: Various changes to write out definitions of C++ classes.

	* debug.c (debug_append_filename): Remove.
	* debug.h (debug_append_filename): Don't declare.

	* stabs.c (struct stab_handle): Remove last_type field.  Add
	so_string and so_value fields.
	(finish_stab): Call stab_emit_pending_vars before calling
	debug_end_function.  Don't warn about pending variables.
	(parse_stab): Accumulate N_SO strings until a non N_SO symbol is
	seen, rather than calling debug_append_filename.  Call
	stab_emit_pending_vars before calling debug_end_function.  Don't
	set info->last_type.

Tue Jan 23 09:53:54 1996  Doug Evans  <dje@charmed.cygnus.com>

	* objdump.c (disassemble_data): Handle unknown endianness.
	Pass fprintf to INIT_DISASSEMBLE_INFO.

Mon Jan 22 16:46:43 1996  Doug Evans  <dje@charmed.cygnus.com>

	Add new option --show-raw-insn.
	* objdump.c (show_raw_insn): New global.
	(usage): Update.
	(long_options): Update.
	(disassemble_data): Set disasm_info.flags if --show-raw-insn.

	* objdump.c (disassemble_data): Set new arch,mach,endian fields in
	disasm_info.

Mon Jan 22 19:29:36 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c: Extensive changes to pass a single info argument around
	in the reading routines, rather than several arguments.  Add code
	to read C++ debugging records.

	* debug.h (debug_get_type_size): Declare.
	(debug_get_field_name): Declare.
	(debug_get_field_bitpos): Declare.
	(debug_get_field_bitsize): Declare.
	(debug_get_field_visibility): Declare.
	(debug_get_field_physname): Declare.
	* debug.c (debug_get_real_type): Handle DEBUG_KIND_TAGGED.
	(debug_get_type_size): New function.
	(debug_get_field_name): New function.
	(debug_get_field_bitpos): New function.
	(debug_get_field_bitsize): New function.
	(debug_get_field_visibility): New function.
	(debug_get_field_physname): New function.
	(debug_write_type): Make sure we pass the real kind, not INDIRECT,
	to tag_type.  Pass the name recursively for INDIRECT.

Fri Jan 19 12:31:57 1996  Ian Lance Taylor  <ian@cygnus.com>

	* debug.h (struct debug_write_fns): Remove ellipsis_type.  Add int
	and boolean parameters to function_type.  Add boolean parameter to
	method_type.
	(debug_make_ellipsis_type): Don't declare.
	(debug_make_function_type): Add debug_type * and boolean
	parameters.  Change all callers.
	(debug_make_method_type): Add boolean parameter.  Change all
	callers.
	(debug_get_parameter_types): Add boolean * parameter.  Change all
	callers.
	(debug_get_target_type): Declare.
	* debug.c (struct debug_function_type): Add fields arg_types and
	varargs.
	(struct debug_method_type): Add field varargs.
	(debug_ellipsis_type, ELLIPSIS_P): Remove.
	(debug_make_ellipsis_type): Remove.
	(debug_make_function_type): Add arg_types and varargs parameters.
	(debug_make_method_type): Add varargs parameter.
	(debug_get_parameter_types): Add pvarargs parameter.
	(debug_get_target_type): New function.
	(debug_write_type): In case DEBUG_KIND_FUNCTION, push argument
	types and pass count to function_type.  In DEBUG_KIND_METHOD, use
	a signed int for the count, don't call ellipsis_type, and pass
	varargs to method_type.
	* stabs.c (struct stab_demangle_info): Add varargs field.
	(stab_demangle_argtypes): Add pvarargs parameter.  Change all
	callers.
	(stab_demangle_args): Likewise.
	(stab_demangle_type): In case 'F', pick up argument types.
	* prdbg.c (pr_ellipsis_type): Remove.
	(pr_function_type): Add argcount and varargs parameters.
	(pr_method_type): Add varargs parameter.
	* ieee.c (ieee_ellipsis_type): Remove.
	(ieee_function_type): Add argcount and varargs parameters.
	(ieee_method_type): Add varargs parameter.  Remove most of
	function body, and just call ieee_function_type.

	* stabs.c: Include "demangle.h".  Added several new static
	functions not listed below to demangle argument types; they are
	all called via stab_demangle_argtypes.
	(finish_stab): If the kind of an undefined tag is
	DEBUG_KIND_ILLEGAL, use DEBUG_KIND_STRUCT instead.  Warn if there
	are any pending variable.
	(parse_stab): Don't close the function when the block depth goes
	to zero.  Pass value to debug_end_function.
	(parse_stab_string): In case 'T', pass the name to
	parse_stab_type.
	(parse_stab_type): In case 'x', use stab_find_tagged_type.  In
	case '#', handle functions with variable numbers of arguments.
	(parse_stab_struct_type): Add tagname parameter.  Change all
	callers.
	(parse_stab_members): Add tagname and typenums parameters.  Change
	all callers.  If the type of a method is a stub, call
	parse_stab_argtypes to demangle the argument types and get the
	physical name of the function.
	(parse_stab_argtypes): New static function.
	(stab_record_variable): For a DEBUG_GLOBAL or DEBUG_STATIC
	variable, call debug_record_variable immediately.
	(stab_find_tagged_type): New static function.

	* debug.h (enum debug_type_kind): Add DEBUG_KIND_ILLEGAL.
	(struct debug_write_fns): Add field ellipsis_type.  Add id
	parameter to start_struct_type, start_class_type, and tag_type.
	(debug_make_ellipsis_type): Declare.
	(debug_find_named_type): Declare.
	(debug_get_type_kind): Declare.
	(debug_get_return_type): Declare.
	(debug_get_parameter_types): Declare.
	(debug_get_fields): Declare.
	(debug_get_field_type): Declare.
	* debug.c (struct debug_handle): Add fields class_id and base_id.
	(struct debug_class_type): Add field id.
	(struct debug_method_variant): Rename argtypes to physname.
	Change all uses.
	(debug_ellipsis_type): New static variable.
	(ELLIPSIS_P): New macro.
	(debug_make_ellipsis_type): New function.
	(debug_make_method_variant): Rename argtypes to physname.
	(debug_make_static_method_variant): Likewise.
	(debug_name_type): Always put types in the global namespace.
	(debug_find_named_type): New function.
	(debug_find_tagged_type): Treat DEBUG_KIND_ILLEGAL specially,
	rather than DEBUG_KIND_VOID.
	(debug_get_real_type): New static function.
	(debug_get_type_kind): New function.
	(debug_get_return_type): New function.
	(debug_get_parameter_types): New function.
	(debug_get_fields): New function.
	(debug_get_field_type): New function.
	(debug_write): Initialize base_id.
	(debug_write_type): Pass new id argument to tag_type.  Handle
	DEBUG_KIND_ILLEGAL.  Use id for	DEBUG_KIND_STRUCT and
	DEBUG_KIND_UNION.  Handle ellipsis for method arguments.
	(debug_write_class_type): Don't dereference kclass if it is NULL.
	Use id.
	* prdbg.c (pr_fns): Add pr_ellipsis_type.
	(pr_ellipsis_type): New static function.
	(pr_pointer_type): If this is a pointer to an array, parenthesize
	it correctly.
	(pr_start_struct_type): Add id parameter.
	(pr_start_class_type): Likewise.
	(pr_tag_type): Likewise.
	(pr_fix_visibility): Add the visibility to the top of the stack,
	not the second element on the stack.
	(pr_struct_field): Pop the stack before calling pr_fix_visibility.
	(pr_class_static_member): Likewise.
	(pr_class_start_method): Don't push a type, just set the method
	name in the type on the top of the stack.
	(pr_class_end_method): Don't pop the stack.
	(pr_class_method_variant): Rename argtypes parameter to physname.
	Append const and volatile rather than prepending them.  Add a
	space after the physname.
	(pr_class_static_method_variant): Likewise.
	* ieee.c (ieee_fns): Add ieee_ellipsis_type.
	(ieee_define_named_type): Use DEBUG_KIND_ILLEGAL rather than
	DEBUG_KIND_VOID.
	(write_ieee_debugging_info): Likewise.
	(ieee_typdef): Likewise.
	(ieee_ellipsis_type): New static function.
	(ieee_start_struct_type): Add id parameter.
	(ieee_start_class_type): Likewise.
	(ieee_tag_type): Likewise.
	(ieee_class_method_variant): Rename name to physname.
	(ieee_class_static_method_variant): Likewise.

	* Makefile.in (DEBUG_OBJS): Remove prdbg.o.
	($(OBJDUMP_PROG)): Depend upon, and link against, prdbg.o.

Thu Jan 18 17:35:06 1996  Kim Knuttila  <krk@cygnus.com>

	* dlltool.c (make_tail): Changed the order of the sections to avoid
	an alignment problem.

Wed Jan 17 14:23:00 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* srconv.c (wr_du): Set du.stackfrmt to 0.
	(wr_un, wr_sc): Emit all sections, even those with 0 size.

Tue Jan 16 16:15:49 1996  J.T. Conklin  <jtc@rtl.cygnus.com>

	* srconv.c (wr_hd): Space size within segment was being
	stored in segment identifier field.

Tue Jan 16 12:07:25 1996  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in (BUILD_NLMCONV, BUILD_SRCONV, SYSINFO_PROG,
	BUILD_DLLTOOL): Put definitions for these into makefile when
	configuring, instead of always clearing in mpw-make.sed.
	* mpw-make.sed: Edit out any host_alias or target_alias settings,
	fix pathname to BFD internal include files, remove dependency
	calculation rules.

Thu Jan 11 17:31:38 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* objdump.c (dump_section_header): Add new section flags
	SEC_{EXCLUDE,SORT_ENTRIES}.

Thu Jan 11 11:45:34 1996  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (filter_symbols): NULL terminate the output symbols.
	(copy_object): Allocate space for a possible extra NULL pointer.

	* debug.c (debug_make_undefined_tagged_type): Make sure we are
	given a kind of type we can handle.
	(debug_write_type): Handle undefined enums and structs.
	(debug_write_class_type): Handle undefined classes.
	* prdbg.c (pr_enum_type): Handle an undefined enum.
	* ieee.c (ieee_enum_type): Likewise.

Wed Jan 10 15:33:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in: Updated dependencies.
	(ALLOCA, MALLOC): Remove variables.
	(ADDL_LIBS): Remove $(MALLOC) from definition.
	* alloca.c, gmalloc.c: Remove.

Mon Jan  8 18:02:29 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c: Add global function write_ieee_debugging_info and a
	bunch of static functions and structs used to write out IEEE
	debugging information.
	* budbg.h (write_ieee_debugging_info): Declare.

	* ieee.c (struct ieee_type): Add pslot field.
	(enum builtin_types): Define.
	(ieee_builtin_type): For a pointer, return a pointer to the named
	type.  Use enum values rather than numbers.
	(ieee_alloc_type): New static function.
	(ieee_read_type_index): Use ieee_alloc_type.
	(parse_ieee_bb): Likewise.
	(parse_ieee_ty): Likewise.  Use ieee_builtin_type for array range,
	rather than making a new integer type.  Store the new type in the
	slot, if there is one.
	(parse_ieee_atn): Treat ATN10 as defining a register variable.
	(ieee_regno_to_genreg): Rename from ieee_regno_to_gen.  Change all
	callers.
	(ieee_genreg_to_regno): New static function.

	* stabs.c (parse_stab_type): Add new typename parameter.  Change
	all callers.
	(parse_stab_range_type): Add new typename parameter.  Change all
	callers.

	* debug.h (struct debug_write_fns): Add tag parameter to
	enum_type, start_struct_type, and start_class_type.
	* debug.c (debug_write_type): Pass any tag name to
	start_struct_type, debug_write_class_type, and enum_type.  If
	DEBUG_KIND_TAGGED, pass the name in the recursive call.
	(debug_write_class_type): Accept a new tag parameter, and pass it
	to start_class_type.
	* prdbg.c (pop_type): Don't remove '+' character.
	(pr_enum_type): Accept and use tag parameter.
	(pr_start_struct_type): Likewise.
	(pr_start_class_type): Likewise.
	(pr_class_baseclass): Adjust algorithm used to find where to put
	the baseclass name.
	(pr_tag): Don't bother to insert the tag name.

	* objcopy.c: Include budbg.h.
	(convert_debugging): New static variable.
	(OPTION_DEBUGGING): Define.
	(copy_options): Add "debugging".
	(copy_usage): Mention --debugging.
	(is_strip_section): Skip debugging sections if convert_debugging.
	(setup_section, copy_section): Likewise.
	(filter_symbols): Skip debugging symbols if convert_debugging.
	(copy_object): If convert_debugging, read and write debugging
	information.
	(write_debugging_info): New static function.
	(copy_main): Handle --debugging.
	* Makefile.in (DEBUG_OBJS): New variable.
	($(OBJCOPY_PROG)): Depend upon and link against $(DEBUG_OBJS).
	($(STRIP_PROG)): Likewise.
	(OBJDUMP_OBJS): Remove variable.
	($(OBJDUMP_PROG)): Use objdump.o $(DEBUG_OBJS) rather than
	$(OBJDUMP_OBJS).
	* binutils.texi, objcopy.1: Document --debugging.

Thu Jan  4 16:31:21 1996  Ian Lance Taylor  <ian@cygnus.com>

	* ieee.c: New file with code to read IEEE debugging information.
	* budbg.h (parse_ieee): Declare.
	* rddbg.c (read_debugging_info): Handle IEEE flavour files.
	(read_ieee_debugging_info): New static function.
	* Makefile.in: Rebuild dependencies.
	(CFILES): Add ieee.c.
	(OBJDUMP_OBJS): Add ieee.o.

	* bucomm.h (xrealloc): Change type of first parameter from char *
	to PTR.

Tue Jan  2 17:44:07 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in: Add targets to automatically rebuild dependencies.
	Remove targets which just listed dependencies of .o files.
	(DEP): New variable.
	(HFILES, GENERATED_HFILES): New variables.
	(CFILES, GENERATED_CFILES): New variables.
	(underscore.c): Don't do anything, just depend upon stamp-under.
	(stamp-under): New target; do what underscore.c used to do.
	(nlmconv.o): Depend upon sym.h and ecoff.h.
	(.dep, .dep1, dep.sed, dep, dep-in): New targets.
	(stage1, stage2, stage3, against, comparison): Remove.
	(de-stage1, de-stage2, de-stage3): Remove.
	(clean, distclean): Remove stamp-under and dep.sed.
	* dep-in.sed: New file.

	Implement generic debugging support.  Implement a stabs reader and
	a generic printer.
	* budbg.h, debug.c, debug.h, prdbg.c, rddbg.c, stabs.c: New files.
	* objdump.c: Include "debug.h" and "budbg.h".
	(dump_debugging): New global variable.
	(usage): Mention --debugging.
	(long_options): Add "debugging".
	(display_bfd): Handle --debugging.
	* Makefile.in (OBJDUMP_OBJS): New variable.
	($(OBJDUMP_PROG)): Use $(OBJDUMP_OBJS).
	* binutils.texi, objdump.1: Document --debugging.

Sat Dec 30 09:59:51 1995  Jeffrey A Law  (law@cygnus.com)

	* nm.c ( long_options): Add "--defined-only" option.
	(usage): Update for new "--defined-only" option.
	(filter_symbols): Handle "--defined-only".

Fri Dec 29 16:04:56 1995  Ian Lance Taylor  <ian@cygnus.com>

	* arparse.y: Include "bucomm.h", not <sysdep.h>.
	* nlmheader.y: Don't include "sysdep.h".

Tue Dec 26 18:23:18 1995  Ian Lance Taylor  <ian@cygnus.com>

	* nm.c (print_symdef_entry): Check return value of
	bfd_get_elt_at_index.

Sat Dec 23 11:03:16 1995  Michael Meissner  <meissner@tiktok.cgynsu.com>

	* configure.in (DLLTOOL_DEFS): Build dlltool for PowerPC if target
	is powerpc*-*-win* in addition to powerpc*-*-*pe*.

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

	* objdump.c (endian_string): New static function.
	(display_target_list): Use it.
	* nlmconv.c (main): Use new bfd_big_endian macro.

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

	* dlltool.c (fill_ordinals): Start from 1 if no other instructions
 	given.

Tue Dec 12 12:05:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (clean): Remove $(DEMANGLER_PROG).1.  From Ronald
	F. Guilmette <rfg@monkeys.com>.

Mon Dec 11 14:33:05 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mac-binutils.r: Fix copyright and version strings.

	* Makefile.in (version): Remove, no longer used.

Fri Dec  1 14:41:56 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed (install, install-only): Edit in Mac-specific
	install procedure.

Thu Nov 30 20:26:02 1995  Kim Knuttila  <krk@cygnus.com>

	* dlltool.c (ppc_jtab): The binary glue for PowerPC dll linkage,
	including the return instruction.
	sinfo: added a preferred alignment field.
	(secdata): section data for the PowerPC version.
	(make_one_lib_file): More symbols, More sections (pdata, rdata)
	(make_tail): Use idata$6 instead of idata$7 for ppc. Also added a
	NULL idata$3 descriptor (temporary).

Tue Nov 28 17:23:44 1995  Doug Evans  <dje@canuck.cygnus.com>

	* dlltool.c (fill_ordinals): Don't reference d_export_vec if
	there are no exported functions.

Mon Nov 27 13:05:59 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Regenerate with autoconf 2.7.

Wed Nov 22 13:17:15 1995  Ian Lance Taylor  <ian@cygnus.com>

	* dlltool.c (fill_ordinals): Start assigning ordinals at 1.

	* Makefile.in (EXPECT): Use $$r, not $${rootme}.
	(check): Set r, not rootme.

Tue Nov 21 18:04:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Use BFD_NEED_DECLARATION.
	* acconfig.h: Put NEED_DECLARATION_FPRINTF in @TOP@ section.
	* configure, config.in: Rebuild with autoconf 2.6.

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

	* Makefile.in (CC_FOR_TARGET): Use @host@ and @target@, not
	$(host_canonical) and $(target_canonical).

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

	Version 2.6 released.
	* Makefile.in (VERSION): Update to 2.6.

Wed Nov 15 12:14:17 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (CC_FOR_TARGET): Define.
	(check): Pass CC and CFLAGS to runtest.

	* nm.c (display_rel_file): Don't require a DYNAMIC object when
	dumping the dynamic symbol table.

	* objdump.c (compare_symbols): Sort global symbols before local
	symbols before debugging symbols.
	(objdump_print_address): Don't futz around looking for a global
	symbol with the same value.

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

	* dlltool.c: Use FOPEN_* macros rather than "r" or "w".

	* dlltool.c (fill_ordinals): Correct memset call.

Sun Nov 12 12:56:05 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed (DEMANGLER_PROG): Edit out attempts to do anything
 	with the man page.

Fri Nov 10 11:41:22 1995  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (setup_section): Copy the section lma independently of
	the vma.

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

	* arsup.c (ar_open): Cast malloc return value.

Tue Nov  7 09:01:26 1995  Kim Knuttila  <krk@cygnus.com>

	* configure.in, configure (DLLTOOL_DEFS): Added ppc target.
	* dlltool.c (MPPC): Added basic PPC definitions.

Tue Nov  7 14:02:57 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Don't treat rs6000-*-lynx* specially.
	* configure: Rebuild.
	* config/rslynx: Remove.
	* Makefile.in: Remove @target_makefile_fragment@.

Mon Nov  6 15:00:50 1995  Ian Lance Taylor  <ian@cygnus.com>

	* bucomm.h: Include <sys/types.h>.
	* ar.c: Don't include <sys/types.h> or <stdio.h>.
	* bucomm.c, dlltool.c, nlmconv.c, objcopy.c, objdump.c: Likewise.

Fri Nov  3 12:38:09 1995  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c: Include <sys/types.h>.

	Permit user to override DEMANGLER_PROG from command line.  From
	Manfred Hollstein <manfred@lts.sel.alcatel.de>.
	* Makefile.in ($(DEMANGLER_PROG)): Depend upon
	$(DEMANGLER_PROG).1.
	(install): Don't depend upon $(DEMANGLER_PROG).1.  Only install
	$(DEMANGLER_PROG).1 if $(DEMANGLER_PROG) is not empty.

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

	* Makefile.in (syslex.o): add -I$(srcdir) if compiling in a
	separate directory.

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

	* objdump.c (objdump_print_value): New static function.
	(objdump_print_address): Use it.  If we need the right section for
	the symbol, and we can't find it, print an offset from the section
	rather than using a symbol from some other section.

Thu Oct 26 10:23:14 1995  steve chamberlain  <sac@slash.cygnus.com>

	* dlltool.c (no_idata4, no_idata5): New.
	(arm_jtab): Use correct encoding of jump instruction.
	(usage, main, make_head, make_tail): Act on no_idata4, no_idata5.

Wed Oct 25 12:10:07 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Edit paths to generated y.tab.[ch] files.

Fri Oct 20 18:40:34 1995  Ian Lance Taylor  <ian@cygnus.com>

	* binutils.texi: Change --with-targets to --enable-targets.

Thu Oct 19 17:47:41 1995  Fred Fish  <fnf@cygnus.com>

	* Makefile.in:  Remove extraneous tab on otherwise empty line,
	which confuses many non-GNU versions of "make".

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

	* dlltool.c (i386_jtab, arm_jtab): New
	(gen_lib_file): Rewritten to use bfd.

Fri Oct 13 16:10:07 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (install): Don't give error message if dlltool
	wasn't built.

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

	* deflex.l: Allow quoting of IDs.
	* defparse.y (%union): string deleted.
	(command): DESCRIPTION takes ID.
	* dlltool.c (gen_def_file): Quote outgoing name if
	necessary.  Preserve NONAME.
	(gen_lib_file): Run ranlib.
	(workout_prefix): Deleted.
	(main, usage, long_options): Add --as, --ranlib, --ar options.

Wed Oct 11 13:36:13 1995  steve chamberlain  <sac@slash.cygnus.com>

	* dlltool.c (mtable): HOW_ALIGN_LONG, new.
	(d_ord): Deleted.
	(d_low_ord, d_high_ord, d_named_funcs): New.
	(gen_exp_file): Create noname entries correctly.
	(gen_lib_file): Dump exports alphabetically.
	(process_duplicates):  Count nonamed functions.
	(fill_ordinals): Keep track of highest ord too.
	(mangle_defs): Create alphabetically ordered list of names.

Tue Oct 10 09:39:09 1995  steve chamberlain  <sac@slash.cygnus.com>

	* Makefile.in (TOOL_PROGS): Include DLLTOOL_PROG.

Mon Oct  9 13:06:31 1995  steve chamberlain  <sac@slash.cygnus.com>

	* dlltool.c (add_underscore): New.
	(xlate): Use new name.
	(main, usage): Update.

Fri Oct  6 14:08:51 1995  Ken Raeburn  <raeburn@cygnus.com>

	* sysinfo.y: Eliminate unused terminals "[" and "]" and unused
	nonterminal "name".  One s/r conflict remains.

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

	* nm.c (print_symname): Don't try to demangle an empty
	name.
	* objdump.c (slurp_symtab): Reset symcount if there are
	no symbols.
	(slurp_dynamic_symtab): Likewise, for dynsymcount.
	(disassemble_data): Fix memory leak: free sorted_syms when done.
	(display_bfd): Likewise, for syms and dynsyms.
	(dump_relocs): Don't print header before possibly generating an
	error message.
	(dump_dynamic_relocs): Likewise.

	* ar.1, nm.1, objdump.1, size.1, strings.1, strip.1: Fix typos and
	formatting bugs.

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

	* ar.c (do_quick_append): Comment out.
	(replace_members): Add quick argument.
	(main): Don't call do_quick_append.
	(open_inarch): Don't call quick_append to create an empty archive.
	Instead call bfd_openw/bfd_set_format/bfd_close.

Thu Oct  5 20:53:08 1995  Ken Raeburn  <raeburn@cygnus.com>

	* bucomm.c: Always include time.h.

Thu Oct  5 17:25:21 1995  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (compare_symbols): Sort gnu_compiled and gcc2_compiled
	symbols after other symbols with the same value.  Likewise for
	symbols which look like file names.
	(objdump_print_address): Always chose the first reasonable symbol
	with a given value.

Tue Oct  3 22:38:55 1995  Ian Lance Taylor  <ian@cygnus.com>

	* arsup.c (ar_save): Use rename, not unlink/link/unlink.

Mon Oct  2 12:10:25 1995  Ian Lance Taylor  <ian@cygnus.com>

	* strings.c (main): Exit with zero status if no files are given
	and standard input is read.

Thu Sep 28 20:03:07 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: Calculate underscore and put into makefile
	fragment, generate config.h.
	* mpw-make.sed: New file, sed commands to edit Unix makefile
	into MPW syntax.
	* mpw-make.in: Remove.
	* mac-binutils.r: New file, Mac resources.

Thu Sep 28 15:49:00 1995  steve chamberlain  <sac@slash.cygnus.com>

	* dlltool.c: (gen_exp_file): Always emit a .reloc section if
	relocatable.
	(imp_name_lab): New.
	(gen_def_file): New.
	(gen_lib_file): Use imp_name_lab.
	(main): Initialize imp_name_lab.

Mon Sep 25 12:05:34 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Call AC_HEADER_SYS_WAIT.
	* configure: Rebuild.
	* config.in: Rebuild.
	* dlltool.c: Include "libiberty.h" and "bucomm.h".  Don't include
	<stdio.h>, <stdlib.h>, or <string.h>.  Don't include <wait.h>.
	Include <sys/types.h>.  Use HAVE_SYS_WAIT_H to control whether to
	include <sys/wait.h> or define the wait macros by hand.  Don't
	declare xmalloc.
	(gen_lib_file): Don't assume that sprintf returns the number of
	characters; use strlen instead.

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

	* objdump.c (disassemble_data): Don't use the old BFD based
	disassembler interface.  Make info a const pointer.

Wed Sep 13 18:33:44 1995  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (start_address): New variable.
	(stop_address): New variable.
	(usage): Mention --start-address and --stop-address.
	(OPTION_START_ADDRESS, OPTION_STOP_ADDRESS): Define.
	(long_options): Add "start-address" and "stop-address".
	(disassemble_data): Handle start_address and stop_address.
	(dump_data, dump_reloc_set): Likewise.
	(main): Don't set seenflag for -l.  Handle OPTION_START_ADDRESS
	and OPTION_STOP_ADDRESS.
	* objcopy.c (parse_vma): Move to bucomm.c.
	* bucomm.c (parse_vma): New function, moved in from objcopy.c.
	* bucomm.h (parse_vma): Declare.
	* binutils.texi, objdump.1: Document new objdump options.

Tue Sep 12 12:37:39 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (maintainer-clean): New target.

	* ar.c (replace_members): Don't call write_archive if nothing
	changed.

	* objdump.c (disassemble_data): Add casts to avoid gcc warnings.

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

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

	* Makefile.in (distclean): Remove config.h, stamp-h, and
        config.log.

	* nm.c (value_format): Initialize based on BFD64 and
	BFD_HOST_64BIT_LONG.
	(print_radix): New static variable.
	(set_print_radix): Set print_radix.  Adjust changes to
	value_format.
	(print_value): New static function, to print 64 bit octal and
	decimal values correctly.
	(print_symbol_info_bsd): Check BFD64, not BFD_HOST_64_BIT.  Use
	print_value.
	(print_symbol_info_sysv): Use print_value.
	(print_symbol_info_posix): Likewise.

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

	* Makefile.in (*.o): Remove incorrect dependencies on
	$(BFDDIR)/hosts/std-host.h.

	* Makefile.in (INSTALL_DATA): Add -m 644.
	(INSTALL_XFORM1): Likewise.
	(CC_FOR_BUILD): Set to @CC_FOR_BUILD@ rather than $(CC).
	(mostlyclean): Remove config.log.
	(distclean): Remove config.cache.

	* configure.in: Call BFD_CC_FOR_BUILD and BFD_BINARY_FOPEN.
	* configure: Rebuild.

Tue Sep  5 20:22:42 1995  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Rewrite to use autoconf.
	* aclocal.m4: New file.
	* configure: New file, built by autoconf.
	* acconfig.h: New file.
	* config.h.in: New file, built by autoheader.
	* Makefile.in: Various changes for new configure script.  Also:
	(PROGS): Remove $(SYSINFO_PROG).
	(ALL_CFLAGS): Remove $(TDEFINES).
	(version.o): Use $(ALL_CFLAGS).
	(cplus-dem.o, dlltool.o, nlmconv.o): Likewise.
	(sysdump.o): Depend upon bucomm.h and config.h.
	(srconv.o, arsup.o, strings.o): Depend upon config.h.
	(filemode.o): Don't depend upon ../bfd/sysdep.h.
	(bucomm.o): Depend upon config.h, not ../bfd/sysdep.h.
	(size.o, objdump.o, nm.o, ar.o, objcopy.o): Likewise.
	(nlmheader.o, nlmconv.o): Likewise.
	(distclean): Don't remove sysdep.h.
	* bucomm.h: Include "ansidecl.h", <stdio.h>, and "config.h".
  	Include "fopen-same.h" or "fopen-bin.h", based on
 	USE_BINARY_FOPEN.  Include <errno.h>, and declare errno if it is
 	not a macro.  Include <unistd.h>, <string.h>, <strings.h>,
 	<stdlib.h>, and <fcntl.h> if they are present.  Declare strchr,
 	strrchr, and strstr if no string header file exists.  Include
	<sys/file.h> if it exists and <fcntl.h> does not.  Define
	O_RDONLY and O_RDWR if necessary.
	* ar.c:  Don't include "sysdep.h".  Do include <sys/types.h> and
	<sys/stat.h>.  Use HAVE_GOOD_UTIME_H rather than POSIX_UTIME.  Use
	HAVE_UTIMES rather than !USE_UTIME.  Don't include <errno.h>, and
	don't declare errno.
	* arsup.c: Don't include <sysdep.h>.
	* bucomm.c: Don't include "sysdep.h".  Include <stdio.h>,
	<sys/types.h>, and <sys/stat.h>.  Include <time.h> if it defines
	time_t.  Define time_t if necessary.
	* coffdump.c: Don't include "sysdep.h".
	* coffgrok.c, filemode.c, nlmconv.c, size.c: Likewise.
	* srconv.c, strings.c: Likewise.
	* nm.c: Don't include "sysdep.h".  Don't try to define HAVE_SBRK.
	* objcopy.c: Don't include "sysdep.h".  Include <sys/types.h> and
	<sys/stat.h>.
	(simple_copy): Use creat rather than assuming that O_CREAT is
	defined.
	* objdump.c: Don't include "sysdep.h".  Use
	NEED_DECLARATION_PRINTF rather than !FPRINTF_ALREADY_DECLARED.
	* sysdump.c: Include "bfd.h" and "bucomm.h".  Don't include
	"sysdep.h" or <stdlib.h>.
	(dump_symbol_info): Rename from symbol_info.  Change all callers.

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

	* configure.in (host_makefile_frag): Don't set.  Substitute for
	@CC@, @CFLAGS@, @HDEFINES@ and @LDFLAGS@ in Makefile.
	* Makefile.in (AR_FLAGS): Set to rc rather than qv.
	(CC): Define as @CC@.
	(CFLAGS): Set to @CFLAGS@.
	(LDFLAGS): Define as @LDFLAGS@.
	(ALL_CFLAGS): Use @HDEFINES@ rather than $(HDEFINES).

	* configure.in: Don't bother to call config.bfd for each target.
	Just call it for the default target, and use the shell variable to
	decide whether underscores are used.

Thu Aug 31 19:21:48 1995  Jason Molenda    (crash@phydeaux.cygnus.com)

	* configure.in: match i[3-6]86-*-win32, not just i386-*-win32.

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

	* dlltool.c (add_indirect): New.
	(asm_prefix): New
	(gen_exp_file): Timestamp should be 0. Insert prefix when
	needed. New code for indirection.
	(gen_lib_file): Timestamp should be 0. Insert prefix
	when needed.
	(usage): Document --add-indirect.
	(main): Cope with new option.

	* objdump.c (dump_private_headers): New.
	(usage): Document new option.
	(long_option): Add private-headers.
	(dump_bfd_private_header): New.
	(main): Cope with new option.

Thu Aug 31 04:09:16 1995  Doug Evans  <dje@canuck.cygnus.com>

	* dlltool.c (run): Add missing 3rd arg to waitpid.

Wed Aug 30 11:02:11 1995  steve chamberlain  <sac@slash.cygnus.com>

	* Makefile.in (TOOL_PROGS): Include dlltool if needed.

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

	* dlltool.c (rva): Deleted.
	(rvaafter, rva_before): Use new assembler pseudo.
	(flush_page, gen_exp_file, gen_lib_file): Use new way of RVAing.
	(gen_exp_file): Don't generate .edata if no need.
	(gen_lib_file): Don't make timestamp.
	Put _iname in idata$7.
	(workout_prefix): Fix memory initialization bug.
	(usage): Tidy up, delete many single char options.
	(main): rva option is gone.

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

	* dlltool.c (options): image-base is a synonym for rva.
	(gen_lib_file): Put dll name into ibase$7.

Sun Aug 20 09:59:00 1995  steve chamberlain  <sac@slash.cygnus.com>

	Modified to generate archives and objects rather than .s files.
	* dlltool.c (run) New function.
 	(gen_exp_file, gen_lib_file): Use run.
	(workout_prefix): New.
	(usage): Document new options.
	(main): Parse new options.

Wed Aug 16 16:26:52 1995  steve chamberlain  <sac@slash.cygnus.com>

	* dlltool.c (gen_exp_file): Fix RVA handling.
	(rva_s, rva_n): Delete.

Fri Aug 11 18:27:18 1995  Ian Lance Taylor  <ian@cygnus.com>

	* nm.c (main): Ignore -e.

Thu Aug 10 17:35:00 1995  Ken Raeburn  <raeburn@cygnus.com>

	* Makefile.in (config.texi): New target.  Write out a setting for
	texinfo variable VERSION.
	(binutils.dvi, binutils.info): Depend on it.
	* binutils.texi: Include it, and reference @value{VERSION} instead
	of explicitly specifying 2.2(!).

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

	* coffgrok.c (do_type): Handle array dimensions the same way gdb
	does.

Tue Aug  8 17:10:42 1995  steve chamberlain  <sac@slash.cygnus.com>

	* dlltool.c (mtable): New fields.
	(ASM_RVA_BEFORE, ASM_RVA_AFTER): New.
	(flush_page): Use new macros.

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

	* objcopy.c (mark_symbols_used_in_relocations): Handle sections
	with no relocations.
	* coffgrok.c (do_sections_p1): Likewise.

Mon Jul 31 12:51:06 1995  Ian Lance Taylor  <ian@cygnus.com>

	* strings.c (print_strings): For compatibility with existing
	strings programs, print strings which are not terminated with a
	null byte or a newline.
	* binutils.texi, strings.1: Update documentation accordingly.

	* ar.c (replace_members): For compatibility with existing ar
	programs, permit users to add the same file multiple times.

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

	* strings.c (DATA_FLAGS): Remove SEC_DATA.
	(main): If no file names are given, scan standard input.
	* binutils.texi, strings.1: strings now scans non-data sections by
	default.

Mon Jul 24 13:52:28 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* srconv.c (wr_hd): Set afl field to 4 for bfd_arch_sh.
	(writeINT): When size == -2, use 2 bytes for the h8300 and 4 bytes
	for the	sh.

	* sysdump.c (fillup): Return size - 1, the last byte is a checksum
	and shouldn't be counted.
	* sysroff.info (hd): Changed segment identifier from a byte to a 1
	bit field.  The sysroff 2.0-01 specification seems to be in error
	here.  Reduce width of following "spare" field from 4 to 3 bits.
	(rl): Changed order and width of first 4 bitfields to correspond
	to sysroff specification.
	(dln_head, dln_inside, dln_tail): Removed.

Tue Jul 18 23:00:03 1995  Fred Fish  <fnf@cygnus.com>

	* nm.c (sort_symbols_by_size):  Enclose expression being casted
	in parens so result is casted, not just first operand.  Can't
	do pointer arithmetic on void* pointers.

Fri Jul 14 13:42:42 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* sysdump.c (dh): Changed format of output to be 16 hex digits
	followed by 16 ascii characters, similar to Emacs' hexl-mode,
	to make it easier to read.
	(xcalloc): fix typo.

Thu Jul 13 15:27:44 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* srconv.c (wr_tr): Write out handcrafted tr block.
	(walk_tree_symbol): Use evallen and evalue instead of
	vallen & value because of corresponding changes in
	sysroff.info.

	* sysdump.c (sysroff_swap_tr_in, sysroff_print_tr_out): New
	functions.

	* sysroff.info (tr): the tr block is a special case --- a block
	without contents --- which can't be handled by generated code.
	(den, dpp): only first byte is present for DENend, DPPend.
	(dsy): describe a conditional portion of block, rename some fields.
	(dps): describe a conditional portion of block.
	(dfl): removed.

	* sysinfo.y (yyerror): write error message to standard error.

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

	* Makefile.in (DISTSTUFF): Add arparse.h and sysinfo.h.
	(mostlyclean): Remove y.output.
	(clean): Remove sysroff, sysroff.c, sysroff.h, and sysinfo.

	* nlmconv.c (powerpc_mangle_relocs): Cast memset arg to size_t.
	* objcopy.c (copy_object): Likewise.

	* nm.c (HAVE_SBRK): Define execpt on amigados and WINDOWS_NT.
	(struct size_sym): Define.
	(show_stats): New static variable.
	(long_options): Add undocumented option "stats".
	(main): Print memory stats if requested.
	(sort_bfd, sort_dynamic, sort_x, sort_y): New static variables.
	(numeric_forward): Use minisymbols rather than asymbols.
	(non_numeric_forward): Likewise.
	(size_forward1): Rename from size_forward.  Use minisymbols.
	(size_forward2): New static function.
	(sort_symbols_by_size): Take new arguments dynamic, size, and
	symsizep.  Use minisymbols.  Don't store the size back in the
	symbol; store in a newly allocate struct size_sym array.
	(display_rel_file): Read minisymbols rather than asymbols.  Set
	sort_* variables.  Call print_size_symbols if sorting by size.
	(filter_symbols): Take new arguments dynamic and size.  Use
	minisymbols.
	(print_symbols): Likewise.  Call print_symbol for actual printing.
	(print_size_symbols): New static function.
	(print_symbol): New static function.

Wed Jul 12 10:43:05 1995  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (dump_section_stabs): Only print each stabs section
	once.
	(compare_relocs): Make it clear to gcc that this always returns a
	value.

Wed Jul 12 10:40:23 1995  H.J. Lu  <hjl@nynexst.com>

	* objcopy.c (simple_copy): Preserve errno on failure.
	(smart_rename): Print error mesage if simple_copy fails.

Tue Jul 11 13:10:52 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* sysdump.c: re-indented file.
	(module): read blocks sequentially instead of trying to parse
	them, as that would require changing the parser recognize the
	difference between a DPSstart and DPSend block.
	(getone): Add break's between switch blocks as appropriate.
	(object_body_list): parse blocks according to sysroff spec.

Mon Jul 10 12:37:25 1995  J.T. Conklin  <jtc@poseidon.cygnus.com>

	* sysroff.info: re-indented file, prior formatting was confusing
	because it was indentation did not reflect nesting of conditional
	records.  Change "space size within segment" record in hd record
	from bit to byte.

	* sysinfo.y (cond_it_field): Use xcalloc instead of calloc.

	* srconv.c (wr_cs): Reformatted cs header array, tag each byte
	with a comment describing the field.
	(wr_unit_info): Use SEEK_SET macro instead of constant 0.
	(main): Use FOPEN_WB macro instead of literal "wb".
	* sysroff.info: Remove fdl (dfl) field from cs block.  Compare
	ptr->type with ED_TYPE_CONST instead of constant 2 in ed block.

Tue Jul  4 14:48:42 1995  Ian Lance Taylor  <ian@cygnus.com>

	* nm.c (size_forward): Check yf against yn, not xn.

	* objcopy.c (copy_archive): Record all output BFD's, and close
	them before unlinking them and removing the temporary directory,
	to avoid NFS problems.

	* ar.c (replace_members): In verbose messages, use 'r' when
        replacing a member, and 'a' when adding one.

	* ar.c (ar_truncate): New static variable.
	(normalize): Change return type to const char *.  Add abfd
	argument.  Change all callers.  If ar_truncate, chop the filename
	to abfd->ar_max_namelen.
	(main): For the 'f' modifier, set ar_truncate to true.  Don't
	change quick_append to replace if ar_truncate is true.
	(do_quick_append): If ar_truncate, set BFD_TRADITIONAL_FORMAT.
	(write_archive): Likewise.
	* binutils.texi, ar.1: Document 'f' modifier.

	* objcopy.c (enum strip_action): Define strip_unneeded.
	(OPTION_STRIP_UNNEEDED): Define.
	(strip_options): Add "strip-unneeded".
	(copy_options): Likewise.
	(copy_usage): Mention --strip-unneeded.
	(strip_usage): Likewise.
	(is_strip_section): Strip debugging sections if strip_unneeded.
	(filter_symbols): If strip_unneeded, only keep BSF_KEEP symbols.
	(copy_object): If strip_all, discard symbols without checking
	discard_locals.
	(copy_object): Call filter_symbols if strip_unneeded.
	(setup_section): Strip debugging sections if strip_unneeded.
	(copy_section): Likewise.
	(strip_main): Handle OPTION_STRIP_UNNEEDED.
	(copy_main): Likewise.
	* binutils.texi, objcopy.1, strip.1: Document --strip-unneeded.

Mon Jul  3 14:16:47 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* configure.in (i386-*-win32): New configuration.
	* dlltool.c (killat, xlate, usage, long_options, main):
	Understand and cope with -k option.

Sat Jul  1 12:25:15 1995  Fred Fish  <fnf@cygnus.com>

	* ar.c: (extract_file):  Change "#if POSIX_UTIME" to
	"#ifdef POSIX_UTIME" to match other tests of POSIX_UTIME
	and avoid lossage when POSIX_UTIME is not defined at all.

Wed Jun 28 17:51:24 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* ar.c: (print_contents.c, extract_file, do_quick_append):
	Malloc buffers rather than allocate on stack (so it works
	on NT).
	* deflex.l: Names can have an @ in them.
	* dlltool.c: Loads of stuff. Can now generate .imp files which
	work with NT .dlls.

Thu Jun 22 19:10:50 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.in (demangle.c.o): Remove.
	(arparse.h): Depend on arparse.c instead of arparse.y.

Wed Jun 21 17:32:45 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (DISTSTUFF): Don't include info here.
	(diststuff): Include it here.
	(realclean): Remove *.info.

	* objdump.c (compare_relocs): If relocation entries have the same
	address, keep them in file order.

Mon Jun 19 09:06:49 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* dlltool.c: Change names of generated files. .*.s-> -*.s

	* objdump.c (dump_section_stabs):  Check for names
	which are supersets of selected names.

Wed Jun 14 19:43:52 1995  Doug Evans  <dje@canuck.cygnus.com>

	* dlltool.c (mtable, ARM jump): Must redirect via pc offsetable ptr.

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

	* deflex.l, defparse.y, dlltool.c: New files.
	* Makefile.in, configure.in: Support for them.

Mon Jun 12 11:27:54 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* sysdump.c: Include sysdep.h
	(main): Open input with FOPEN_RB.

Fri Jun  9 17:26:11 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* objdump.c (wide_output): New flag variable.
	(usage): Print new -w, --wide options.
	(long_options): Add --wide support.
	(dump_section_header): If --wide, don't print a newline between
	the section's first line and the flags.
	(objdump_print_address): Use unsigned comparisons for the binary
	search, not signed.
	(disassemble_data): If --wide, don't put a \n between the
	disassembly output and relocation information.
	(main): Support -w option being the same as --wide.

Thu Jun  1 17:09:27 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	Sat May  6 08:52:24 1995  H.J. Lu (hjl@nynexst.com)

	* objcopy.c (smart_rename): make it smarter, clean up
	  if rename () fails.

Tue May 30 14:24:15 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in: Delete lines with lots of #### because four or more
	indicate a point for makefile fragment substitution.

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

	* configure.in: Don't build nlmconv on PowerPC eabi any more, it
	is not needed.

Thu Apr 27 20:21:24 1995  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (EXPECT): Define.
	(RUNTEST): Use one in source tree if present.
	(check): Set `rootme' for $(EXPECT).

Wed Apr 26 18:26:21 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* srconv.c (main): Add support for -n option which disables
	prescan of common symbols.
	(wr_ob): If reading past the end of a section, fill with zeros.

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

	* objdump.c (dump_section_header): Display load address after
	virtual memory (run-time) address.

Wed Apr 19 09:44:06 1995  Jason Merrill  <jason@phydeaux.cygnus.com>

	* Makefile.in (cplus-dem.o): Pass -DVERSION='"$(VERSION)"' to the
        compile.
	(DEMANGLER_PROG): No longer uses version.o.

Mon Apr 10 13:29:49 1995  Stan Shebs  <shebs@andros.cygnus.com>

	Merge in support for Mac MPW as a host.
	(Old change descriptions retained for informational value.)

	* mpw-config.in (TDEFINES): Define as empty in makefile frag.

	* mpw-config.in: Create mk.tmp, define ARCHDEFS in it.

	* mpw-config.in: New file, MPW configure fragment for binutils.
	* mpw-make.in (install-only): New target.
	(install): Also depend on install-only.

	* mpw-make.in (cplusfilt): Renamed from c++filt.
	(INCLUDES): Add more paths.

	* mpw-make.in: New file, MPW makefile fragment for binutils.
	(Normally automatically generated from Makefile.in.)

Mon Mar 27 11:52:57 1995  Ian Lance Taylor  <ian@cygnus.com>

	* ar.c (write_archive): Call make_tempname to get output file
	name, rather than using a fixed name based on the input file.

	* objcopy.c (make_tempname): Copy from here...
	* bucomm.c (make_tempname): ...to here, and make global.
	* bucomm.h (make_tempname): Declare.

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

	* strings.c: Include "bfd.h" before other headers.  Include
	"sysdep.h".
	* bucomm.c (print_arelt_descr): Cast st_uid and st_gid to long,
	and print them with %ld.

Fri Mar 10 13:09:42 1995  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (strip_options): Add --keep-symbol.
	(copy_options): Likewise.
	(copy_usage): Mention --keep-symbol and -K.
	(strip_usage): Likewise.
	(keep_symbols): New static variable.
	(is_strip_symbol): Adjust the return value according to
	keep_symbols.
	(strip_main): Handle -K.  For -N, check that -K was not given.
	(copy_main): Likewise.
	* binutils.texi, objcopy.1, strip.1: Document -K.

Mon Mar  6 13:33:47 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* objcopy.c (copy_archive): Check result of mkdir.
	(copy_main): Cast an xmalloc result.

	* objdump.c (usage): Break long format string into shorter ones.

Mon Mar  6 13:46:12 1995  Ian Lance Taylor  <ian@cygnus.com>

	* bucomm.c (list_supported_targets): New function.
	* bucomm.h (list_supported_targets): Declare.
	* ar.c (usage): Call list_supported_targets.
	* nm.c (usage): Likewise.
	* objcopy.c (copy_usage, strip_usage): Likewise.
	* objdump.c (usage): Likewise.
	* size.c (usage): Likewise.
	* strings.c (usage): Likewise.

Tue Feb 28 15:13:58 1995  Ian Lance Taylor  <ian@cygnus.com>

	* bucomm.c (print_arelt_descr): Cast st_size to long before
	passing it to fprintf.

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

	* objcopy.c (struct section_list): Add fields remove, set_flags,
	and flags.  Change adjust from boolean to enum.
	(remove_sections): Remove static variable.
	(sections_removed): New static variable.
	(copy_options): Add --set-section-flags.
	(copy_usage): Mention --set-section-flags.
	(parse_flags): New static function.
	(find_section_list): New static function.
	(is_strip_symbol): Change return type from int to boolean.
	(is_strip_section): New static function.
	(filter_symbols): Call is_strip_section.
	(copy_object): When adding sections, check for specified flags or
	VMA.  Call filter_symbols if any sections are being removed.
	(setup_section): Use find_section_list function rather than
	looking through remove_sections and adjust_sections.  Handle
	--set-section-flags.
	(copy_section): Use find_section_list rather than looking through
	remove_sections.
	(strip_main): Use find_section_list instead of adding items to
	sections_removed.
	(copy_main): Use find_section_list instead of adding items to
	sections_removed and adjust_sections.  Handle --set-section-flags.
	* binutils.texi, objcopy.1: Document --set-section-flags.

Tue Feb 14 18:03:03 1995  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (with_source_code): New global variable.
	(usage): Mention -S/--source.
	(long_options): Add --source.
	(prev_functionname, prev_line): New static variables.
	(struct print_file_list): Define.
	(print_files): New static variable.
	(skip_to_line, show_line): New static functions.
	(disassemble_data): Call show_line to handle -l and -S.
	(main): Handle -S.
	* binutils.texi, objdump.1: Document -S/--source.

Thu Feb  9 16:11:53 1995  Ian Lance Taylor  <ian@cygnus.com>

	* objcopy.c (copy_usage): Rename parameter to avoid shadowing.
	(strip_usage): Likewise.

	* objcopy.c (struct section_add): Define.
	(add_sections): New static variable.
	(copy_options): Accept --add-section.
	(copy_usage): Mention --add-section.
	(copy_object): Add sections from the add_sections list.
	(copy_main): Handle --add-section.
	* binutils.texi, objcopy.1: Document --add-section.

Wed Feb  1 15:04:57 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* objdump.c (disassemble_data): Pass section offset, not absolute
	address, to bfd_find_nearest_line.

	* nlmconv.c (powerpc_mangle_relocs): Don't use const with
	reloc_howto_type.

Thu Jan 26 18:50:06 1995  Ian Lance Taylor  <ian@cygnus.com>

	* objdump.c (compare_symbols): Use bfd_asymbol_value (VAR) rather
	than VAR->value.
	(objdump_print_address): Likewise.
	(disassemble_data): Don't change the symbol values.  It can
	confuse bfd_canonicalize_reloc.

Thu Jan 26 12:03:56 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in: Add support for powerpc-*-ebai.

Wed Jan 18 10:02:12 1995  Steve Chamberlain  <sac@splat>

	* coffdump.c: Include sysdep.h.
	(dump_coff_type): Handle coff_secdef_type.
	* coffgrok.c : Include sysdep.h.
	* srconv.c: Include libiberty.h
	(absolute_p, dty_start, dty_end, dump_tree_structure): Remove.

Wed Jan 18 12:24:14 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* coffdump.c (dump_coff_scope): Cast pointer to unsigned long for
	printf.
	* coffgrok.c: Include bucomm.h.  Don't declare xmalloc.
	(push_scope): Declare type of parameter link.
	* size.c: Include libiberty.h.
	* srconv.c: Include bucomm.h.
	(find_base): Declare at top of file.
	(wr_hd): Add default case to architecture switch.
	(wr_dps_start): Declare type of parameter nest.
	(wr_du): Comment out variables used only in commented out blocks.
	(wr_dus): Remove unused variable i.
	(wr_sc): Remove unused variables myinfo, low, and high.
	* strings.c: Include libiberty.h.
	* sysdump.c: Include <ctype.h>.

Tue Dec 20 19:13:44 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ar.c (main): Ignore 'f' modifier used on HP/UX 9.

Thu Dec 15 17:34:12 1994  Stan Shebs  <shebs@andros.cygnus.com>

	* ar.c, nm.c, objcopy.c, objdump.c: Include progress.h.
	* ar.c, nm.c, objcopy.c, objdump.c (main): Add START_PROGRESS
	and END_PROGRESS.
	* ar.c (map_over_members, open_inarch): Call PROGRESS.
	* nm.c (main, display_archive, filter_symbols, print_symbols):
	Call PROGRESS.

	* objcopy.c (copy_usage): Break up long usage string.

Wed Dec 14 15:51:56 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* objcopy.c (copy_object): Don't bother setting status after
	nonfatal() "call", because it won't return.

Fri Dec  9 00:22:54 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (powerpc_mangle_relocs): Don't switch a reloc to use
	the section symbol if the symbol is undefined.

Thu Dec  8 14:45:50 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* objcopy.c (add_strip_symbol): Cast return value of xmalloc.

Wed Nov 30 11:05:43 1994  Ian Lance Taylor  <ian@rtl.cygnus.com>

	* ar.c (replace_members): Pass current->filename to normalize when
	checking for duplicates, because the filename of a newly added
	file will not have been normalized yet.

Thu Nov 17 15:00:13 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ar.c (main): Don't call do_quick_append if any of the archive
	names are longer than 14 characters.

	* objcopy.c (main): Fix is_strip test.  From
	pirker@eiunix.tuwien.ac.at (Martin Pirker).

Thu Nov 17 15:37:19 1994  Mark W. Eichin  <eichin@cygnus.com>

	* objcopy.c (add_strip_symbol): New function, adds a name to an
	explicit list of symbols to strip.
	(is_strip_symbol): New function, reports whether the name argument
	is in the explicit list.
	(filter_symbols): Check against is_strip_symbol above all.
	(strip_main): Recognize -N option. If used, don't default to
	strip_all.
	(copy_main): Recognize -N option.
	(strip_usage): Document -N and --strip-symbol options.
	(copy_usage): Ditto.
	* objcopy.1, strip.1, binutils.texi: Document -N and
	--strip-symbol options.

Tue Nov  8 13:12:54 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* objdump.c (display_target_list, display_info_table): Pass an
	array to tmparg, rather than NULL, since some systems can't handle
	NULL.

	* objcopy.c (copy_archive): Keep a list of the names of the
        temporary files we created.  Close each input BFD after we open
        its successor.

Mon Nov  7 15:48:39 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (VERSION): Bump to 2.5.3.

Thu Nov  3 19:04:34 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (install-info): Install info files from whatever
	directory they were found in.

	Patch from DJ Delorie:
	* configure.bat: do c++filt -> cxxfilt right

	* sysinfo.y: Include system header files early, so any potential
	declaration of abort() occurs before its use.

	* strings.c (strings_file): Try opening the file in binary mode
	first.

Wed Nov  2 15:44:13 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* ar.c (main): Treat ar qs like ar rs.

Tue Oct 25 16:19:25 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* objcopy.c (gap_fill): Explicitly initialize, for clarity.
	(pad_to_set, pad_to): New static variables.
	(copy_options): Accept --pad-to.
	(copy_usage): Mention --pad-to.
	(copy_object): Support --pad-to.
	(compare_section_vma): Sort non loadable sections to the front.
	Sort sections with the same VMA by size.
	(copy_main): Handle --pad-to.
	* binutils.texi, objcopy.1: Document --pad-to.

Thu Oct 20 13:51:31 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objcopy.c (gap_fill_set, gap_fill): New static variables.
	(copy_options): Accept --gap-fill.
	(copy_usage): Mention --gap-fill.
	(copy_object): Support --gap-fill.
	(get_sections, compare_section_vma): New static functions.
	(copy_main): Handle --gap-fill.
	* binutils.texi, objcopy.1: Document --gap-fill.

Wed Oct 19 14:09:16 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* Makefile.in (check): Add a dummy else clause to the if
	statement.

	* objcopy.c (copy_object): Revert yesterday's change.
	* binutils.texi, objcopy.1: Remove special mention of --set-start
	and `binary' output format.

Tue Oct 18 11:12:01 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* objcopy.c (copy_object): If the output file format is `binary',
	and the start address was not set using --set-start, default the
	start address to zero.  This hack is because the `binary' output
	file format uses the start address to set the virtual address of
	the first byte in the file.
	* binutils.texi, objcopy.1: Add some notes on generating S-records
	and binary files.

	* nm.c (print_symdef_entry): Call print_symname to print the
	symbol name, so that --demangle works.

	* Makefile.in (mostlyclean): Remove tmpdir.

	* objcopy.c (struct section_list): Add fields used, adjust, val.
	(adjust_start, set_start_set, set_start): New static variables.
	(adjust_section_vma, adjust_sections): New static variables.
	(copy_options): Add --adjust-start, --adjust-vma,
	--adjust-section-vma, --adjust-warnings, --no-adjust-warnings,
	--set-start.
	(parse_vma): New static function.
	(copy_usage): Mention new options.
	(copy_object): Handle --set-start and --adjust-start.
	(setup_section): Correct type of last argument to PTR.  Set used
	field if section is removed.  Handle --adjust-vma and
	--adjust-section-vma.
	(copy_section): Correct type of last argument to PTR.
	(mark_symbols_used_in_relocations): Likewise.
	(strip_main): Clear used field when handling -R.
	(copy_main): Handle new options.
	* binutils.texi (objcopy): Document new options.
	* objcopy.1: Document new options.

Fri Oct 14 14:38:13 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* configure.in (configdirs): Remove definition--testsuite is no
	longer configured.
	* Makefile.in (testsuite): Remove target.
	(site.exp): New target.
	(check): Rewrite.
	(clean, distclean): Don't recur into testsuite directory.

Thu Oct 13 19:24:09 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (VERSION): Updated to 2.5.
	* Version 2.5 released.

Tue Oct 11 15:26:42 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* Makefile.in (sysdump.o): Depends upon sysroff.c.

Mon Oct 10 13:50:30 1994  J.T. Conklin  (jtc@rtl.cygnus.com)

	* nlmconv.c (link_inputs): Pass -Ur flag to ld so that the
	  ctor/dtor tables needed by C++ programs are built.

Sun Oct  9 18:04:00 1994  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* Makefile.in (srconv.o): Add dependence on sysroff.c.

Tue Oct  4 12:19:51 1994  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* configure.in: Use ${config_shell} when running config.bfd.

	* Makefile.in (sysroff.h): Split target away from sysroff.c.
	(srconv.o, sysdump.o): New targets.
	(srconv, sysdump): Don't depend upon sysroff.c.

Wed Sep 28 13:04:34 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* Makefile.in (arparse.c): Don't ignore errors from mv.
	(sysinfo.c): Likewise.  Also, depend upon arparse.c, to prevent a
	parallel make from trying to build both arparse.c and sysinfo.c
	simultaneously.
	(nlmheader.c): Similar change.
	(arparse.h): Separate target from arparse.c, so that a parallel
	make does not try to build both at once.  Depend upon arparse.c.
	(sysinfo.h): Similar change.

	* objdump.c (disassemble_data): Pass the reloc buffer to free, not
	the pointer used to loop over the relocs.

Sat Sep 24 16:16:57 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* objdump.c (disassemble_data): Cast result of xmalloc.

Wed Sep 21 19:30:35 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* objdump.c (sorted_syms, sorted_symcount): New global variables.
	(objdump_print_address): Use sorted_syms and sorted_symcount
	instead of syms and symcount.
	(disassemble_data): Don't bother to get the relocs before looping
	over the sections.  Before filtering and sorting the symbol table,
	copy it into sorted_syms.

Fri Sep 16 11:27:39 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* objdump.c (struct objdump_disasm_info): Add field require_sec.
	(objdump_print_address): If aux->require_sec, require that the
	symbol be in aux->sec even if HAS_RELOC is not set.  If we can't
	find a smaller symbol in the right section, look for a larger one.
	(disassemble_data): Set aux.require_sec around the
	objdump_print_address call for the instruction address.

Thu Sep 15 21:43:17 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ar.c: Call xexit rather than exit.
	(output_filename, output_file, output_bfd): New static variables.
	(remove_output): New static function.
	(main): Call xatexit (remove_output).  Call xexit rather than
	returning.
	(extract_file): Set output_filename and output_file while output
	file is open.
	(write_archive): Likewise, but use output_bfd, not output_file.
	* arsup.c: Include libiberty.h.  Call xexit rather than exit.
	* bucomm.c: Likewise.

	* objdump.c (disassemble_all): New global variable.
	(usage): Document --disassemble-all.
	(long_options): Add disassemble-all as a synonym for -D.
	(compare_symbols): Make pointers const.
	(compare_relocs): New static function.
	(disassemble_data): Rename disassemble to disassemble_fn to avoid
	shadowing.  If dump_reloc_info, print relocs along with
	disassembly.  Skip sections which are not SEC_CODE unless
	disassemble_all or only is set.
	(display_bfd): Don't call dump_relocs if disassemble is set.
	(main): Accept and handle -D.
	* binutils.texi: Document -D/--disassemble-all.
	* objdump.1: Likewise.

Wed Sep 14 12:19:07 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* objdump.c (disassemble_data): Initialize prevline to 0.  Make
	prev_function non const.  Copy functionname into an malloc buffer
	when setting prev_function, instead of assuming that the string
	will last forever.

	* nm.c: Include libiberty.h.
	(sort_by_size): New static variable.
	(long_options): Add --size-sort.
	(usage): Mention --size-sort.
	(numeric_forward): Make static.  Change from void * to PTR.
	(numeric_reverse): Likewise.
	(non_numeric_forward, non_numeric_reverse): Likewise.
	(sorters): Change declaration from void * to PTR.
	(size_forward, sort_symbol_by_size): New static functions.
	(display_rel_file): Handle sort_by_size.
	(filter_symbols): If sort_by_size, discard absolute and undefined
	symbols.
	* binutils.texi (nm): Document --size-sort.
	* nm.1: Document --size-sort.

Tue Sep 13 21:06:06 1994  Jeff Law  (law@snake.cs.utah.edu)

	* objcopy.c (copy_main): Initialize input_filename and
	output_filename to NULL.

Tue Sep 13 14:17:24 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* Makefile.in (version.o): Depend upon Makefile, so that version.o
	gets rebuilt when make variable VERSION is changed.

	* objdump.c (dump_section_header): Print the SEC_NEVER_LOAD flag.

Wed Aug 24 12:40:09 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* configure.in: Change i[34]86 to i[345]86.

Tue Aug 23 11:00:40 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ar.c (ranlib_touch): Don't update the archive map if there isn't
	one.

Mon Aug 22 16:02:18 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* ar.c: Include libiberty.h.
	(inarch): Remove variable.
	(map_over_members): Make static.  Add arch argument, and use it
	instead of inarch.  Change all callers.
	(main): Treat --version as -v.  Accept -t argument.  Accept any
	number of archive arguments.  Catch and use open_inarch return
	value, rather than using inarch.
	(open_inarch): Return newly opened BFD, rather than using inarch.
	(do_quick_append): Make archive_filename const.
	(write_archive): Add iarch argument, and use it instead of inarch.
	Change all callers.
	(delete_members, move_members, replace_members): Likewise.
	(ranlib_only): Don't exit on success.  Catch and use open_inarch
	return value.
	(ranlib_touch): New function.
	* arsup.h (map_over_members): Don't declare.
	(ar_end, ar_extract): Declare.
	(open_inarch): Change return value in declaration to bfd *.
	* arsup.c (map_over_list): Make static. Always pass two arguments
	to function.  Add arch argument, and use it instead of inarch.
	Change all callers.
	(ar_directory_doer): Make static.  Add ignored second argument.
	Change all callers.
	(ar_directory): Use open_inarch return value rather than inarch.
	(ar_addlib_doer): Make static.
	(ar_addlib): Use open_inarch return value rather than inarch.
	(ar_extract): Remove unused local variable abfd.

Thu Aug 11 14:55:57 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	Add support for removing named sections to objcopy and strip.
	* objcopy.c (struct section_list): Define.
	(remove_sections): New static variable.
	(strip_options, copy_options): Add remove-section.
	(copy_usage, strip_usage): Mention -R and --remove-section.
	(setup_section): If section is in remove_sections list, ignore it.
	(copy_section): Likewise.
	(strip_main, copy_main): Handle -R.
	* binutils.texi, objcopy.1, strip.1: Document new options.

Wed Aug 10 10:19:55 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* nlmconv.c (powerpc_mangle_relocs): Rename symvalue to sym_value,
	so as not to conflict with the symvalue typedef in bfd.h.

Mon Aug  1 13:19:09 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* nlmheader.y: Per current NetWare docs, accept a revision number
	of 0 and treat a revision number greater than 26 as 0.

Mon Jul 25 12:58:36 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* objdump.c (objdump_print_address): Correct handling of end of
	symbols when looking for next symbol with a different value.

Fri Jul 22 16:48:34 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* nm.c (numeric_forward): Treat undefined symbols as "less than"
	defined symbols with zero values.  If numeric values are equal, or
	both symbols are undefined, sort alphabetically.  Don't assume
	that the difference of two bfd_vma values will truncate to "int"
	and still have the same sign.
	(numeric_reverse): Call numeric_forward and negate the result.
	(print_symbol_info_bsd): For undefined symbols, print leading
	spaces equivalent to the width of a printed bfd_vma, rather than
	assuming that 8 will look right.

Fri Jul 22 10:36:50 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coffgrok.c (doit):  Zero all fields of new structure.
	* srconv.c (sysroff_swap_*_out): Remove redundant trailing arg.
	* sysinfo.y: Generate sysroff_swap_*_out without requiring extra
	arg.

Fri Jul 22 10:09:53 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* nlmheader.y: Make "stack" and "stacksize" synonyms in the lexer
	  rather than the parser.

Thu Jul 21 10:25:09 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* config/mh-alphaosf, config/mh-apollo68v, config/mh-delta88:
	Remove; obsolete.

Sat Jul 16 22:34:39 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* objdump.c (slurp_dynamic_symtab): Try to get the dynamic symbols
	even if the bfd is not marked DYNAMIC.  ELF executables are not
	marked DYNAMIC, but do have dynamic symbols.

Fri Jul 15 01:41:35 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coffgrok.c (do_where): Make data with no type 'int'.
	(do_define):  Keep info on source file of a symbol.
	* coffgrok.h (coff_symbol): New field.
	* srconv.c (PROGRAM_VERSION): Now 1.3
	(wr_rl): Use external ref number for symbol.
	(wr_dus): Only keep one source file per debug unit.
	(wr_dln): Always emit line numbers for first source file,
	(wr_globals):  Emit globals in the du of their owning source file.

Mon Jul 11 15:59:03 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* nlmheader.y: Null terminate var_hdr->threadName.

Fri Jul  8 17:33:22 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* Makefile.in (syslex.o, sysinfo.o): Permit C source files to be
	in $(srcdir), as they will be for FSF releases.

Wed Jul  6 01:13:14 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (setup_sections): Preserve existing section flags when
	copying in flags from a new section.

Tue Jul  5 15:56:01 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* objcopy.c: Include libiberty.h.
	(copy_file): If output_target is NULL, set it to the target of the
	input file.

Wed Jun 29 17:17:14 1994  J.T. Conklin  (jtc@phishhead.cygnus.com)

	* nlmconv.c (link_inputs): Fixed memory allocation bug.

Thu Jun 23 12:52:46 1994  David J. Mackenzie  (djm@rtl.cygnus.com)

	* configure.in: Change --with-targets to --enable-targets.

Tue Jun 21 12:53:21 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* Makefile.in (sysinfo): Does not depend upon $(ADDL_LIBS).

	* nlmconv.c (powerpc_build_stubs): Don't generate the PowerPC
	NetWare custom header; no longer needed.
	(powerpc_mangle_relocs): Convert relocs against the uninitialized
	data section into relocs against the data section.

	* configure.in: Set nlmconv_defs to -DNLMCONV_cputype for all the
	netware targets.  Write it into Makefile as NLMCONV_DEFS.
	* Makefile.in (nlmconv.o): Pass $(NLMCONV_DEFS) to $(CC).
	* nlmconv.c: Only compile code for specific CPU types if
	NLMCONV_cputype is defined.

	* nlmconv.c (main): Change uses of bfd_abs_section, etc., to use
	bfd_abs_section_ptr or bfd_is_abs_section, etc.
	(i386_mangle_relocs, alpha_mangle_relocs): Likewise.
	(powerpc_build_stubs): Likewise.
	* nm.c (filter_symbols, print_symbols): Likewise.
	* objcopy.c (filter_symbols): Likewise.
	(mark_symbols_used_in_relocations): Likewise.
	* objdump.c (remove_useless_symbols, dump_relocs): Likewise.
	* size.c (sysv_internal_printer): Likewise.

Mon Jun 20 16:43:03 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* Makefile.in (MANPAGES): Remove $(DEMANGLER_PROG).
	(install): Install it explicitly, from build dir, not srcdir.

Mon Jun 20 16:29:54 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* objdump.c: Don't include elf/internal.h.
	(bfd_elf_find_section): Don't declare.
	(read_section_stabs): No special handling for ELF.  Always read
	using BFD sections.

Thu Jun 16 17:25:20 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in: Set UNDERSCORE in Makefile based on result of
	invoking config.bfd with a second argument of ``_''.
	* Makefile.in (underscore.c): Depend upon Makefile.  Don't try to
	run $(CC) and $(NM), just use $(UNDERSCORE).  Create via temporary
	file.
	(demangle.o): Remove target.
	($(NM_PROG)): Don't depend upon demangle.o, and	don't link against
	demangle.o.  It's in libiberty anyhow.
	(cplus-dem.o): Don't depend upon demangle.o.
	* binutils.texi: Mention -n and --no-strip-underscores arguments
	to c++filt.

Wed Jun 15 12:10:31 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nm.c (long_options): Add --no-demangle to turn off --demangle,
	and --no-cplus for Linux compatibility.
	(usage): Mention --no-demangle.
	* binutils.texi: Document --no-demangle.

Fri Jun 10 15:41:25 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nm.c: HOST_64_BIT was renamed to BFD_HOST_64_BIT.

	* objcopy.c (copy_archive): Make the temporary directory in the
	same directory as the output BFD, since we may not have write
	permission on the current directory.  Set the permissions of the
	new directory to 0700, not 0777.

Mon Jun  6 21:36:43 1994  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* configure.in: if this is an rs6000 (and we're not building for
	any other bfd targets) then build only nm (collect needs it on
	rs6000-lynx).

	* Makefile.in: define TOOL_PROGS which the list of programes to
	install in $tooldir -- replaces a hard-coded list.

Fri Jun  3 10:59:18 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objdump.c (display_target_list): Remove unused local ok.

Thu May 26 18:05:52 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config/mh-alphaosf (CFLAGS): Don't specify both -g and -O;
	they're not compatible under native cc.  Use -O1 instead.

	* Makefile.in (VERSION): Updated to cygnus-2.4.1.

	Changes from binutils-2.4 net release:

	* Makefile.in (MANPAGES): Use $(DEMANGLER_PROG).
	($(DEMANGLER_PROG).1): Build from cxxfilt.man, using sed.
	* cxxfilt.man: Renamed from c++filt.1, replaced "c++filt" with
	magic token to be replaced by sed.

	Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)

	* configure.bat: update for latest makefile.in

Fri May 13 23:25:13 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* bucomm.c: Check ANSI_PROTOTYPES rather than __STDC__.

Tue May 10 18:22:06 1994  Jason Molenda    (crash@sendai.cygnus.com)

	* objcopy.c (copy_section): Set section size correctly if using
	interleave.

Sat May  7 16:49:36 1994  Steve Chamberlain  (sac@cygnus.com)

	* Makefile.in: Add rule for sysinfo.h

Fri May  6 12:18:33 1994  Steve Chamberlain  (sac@cygnus.com)

	* Makefile.in (SRCONV_PROG): Define.
	(PROGS): Use $(SRCONV_PROG) too.

Thu May  5 19:41:43 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* Makefile.in (DISTSTUFF): Add sysinfo.c, syslex.c, in case
	someone configures with `targets=all'.
	(distclean): Remove y.*.
	(syslex.o): Depend on sysinfo.h.
	(sysinfo.c): Rename y.tab.h to sysinfo.h.
	(install-info): Don't try to install into $(infodir)/$(srcdir).
	* syslex.l: Include sysinfo.h, not y.tab.h.

Thu May  5 11:50:55 1994  Ken Raeburn  (raeburn@kr-pc.cygnus.com)

	* syslex.l (yywrap): Define as function if not defined as a macro.

	* Makefile.in (objdump.o): Deleted special rule.
	* configure.in: Don't bother building ARCHDEFS variable for
	Makefile.
	* objdump.c (ARCH_*): Deleted handling.
	(disassemble_data): Call `disassembler' from opcodes library.

Thu May  5 13:28:42 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (install): Correct handling of $(tooldir) and
	$(bindir) being on different devices.

Fri Apr 29 09:50:38 1994  Steve Chamberlain  (sac@cygnus.com)

	* sysdump.c (h8300, sh): Add declarations.

Wed Apr 27 11:25:18 1994  Steve Chamberlain  (sac@cygnus.com)

	* Makefile.in (syslex, sysinfo): Use CC_FOR_BUILD.
	* coffdump.c, coffgroc.c, coffgrog.h, srconv.c, sysdump.c,
	sysroff.info: Major changes.

Tue Apr 26 18:18:24 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* objdump.c (print_section_stabs): Indicate the stab header symbol
	more clearly, print numbers of unrecognized stab n_type values.

Tue Apr 26 16:22:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (copy_sections): Copy arelent pointers, not arelents.

Mon Apr 25 16:14:32 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (distclean): Remove $(PROGS) and underscore.c.

Fri Apr 22 11:14:19 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (setup_sections): Remove special handling of .reginfo
	section.
	(copy_sections): Likewise.
	(alpha_mangle_relocs): Use bfd_ecoff_get_gp_value rather than the
	special ECOFF .reginfo section.

	* objcopy.c (copy_object): Call bfd_copy_private_bfd_data after
	copying everything else, to let it fiddle with the file in its
	final state.

	* objdump.c: Include libiberty.h.
	(display_target_list): If a format fails, just go on to the next
	one.  Check return value of bfd_set_format.
	(display_info_table): Likewise.  Don't increment loop variable in
	for loop test, since that skips the first element.
	(display_target_tables): Rewrite loop for clarity.  Ensure that it
	always prints at least one element.

	* nlmconv.c (main): Use CyGnUsEx rather than CyGnUsSeCs for
	sections header.  Rename from cygnus_sections to cygnus_ext.

Thu Apr 21 12:12:26 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objdump.c (_DUMMY_NAME_): Don't define.
	(display_target_list): Use tmpnam to get a file name rather than
	using _DUMMY_NAME_.  Unlink it when done.
	(display_info_table): Likewise.

	* nlmconv.c (secsec): New static variable.
	(main): Create .nlmsections section in output BFD.  Store
	information about it in sections header.
	(setup_sections): Allocate space in sections header.
	(copy_sections): Copy zero sized sections.  Put information about
	each section in the sections header.

Wed Apr 20 14:34:51 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (powerpc_build_stubs): Take new outbfd argument.
	Change caller.  Create custom header for new PowerPC NetWare
	format.

	* Makefile.in (nlmheader.o, nlmconv.o): Update dependencies.
	* nlmconv.c: Include bfd.h and libiberty.h with "", not <>.
	* nlmheader.y: Include bfd.h with "", not <>.

Wed Apr 13 10:52:50 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objdump.c: Do an ifdef on __GO32__, not unix.

Wed Apr  6 21:54:49 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Added -D (--dynamic) option to nm and -T (--dynamic-syms) and -R
	(--dynamic-reloc) arguments to objdump.
	* nm.c (dynamic): New static variable.
	(long_options): Added "dynamic".
	(usage): Mention -D and --dynamic.
	(main): Add D to getopt string.  Handle -D by setting dynamic.
	(display_rel_file): If dynamic is non-zero, read dynamic symbols
	rather than normal symbols.
	* nm.1: Updated for -D (--dynamic) option.
	* objdump.c (dump_dynamic_symtab): New global variable.
	(dump_dynamic_reloc_info): New global variable.
	(dynsyms, dynsymcount): New global variables.
	(usage): Mention -R, -T, --dynamic-syms and --dynamic-reloc.
	(long_options): Added "dynamic-reloc" and "dynamic-syms".
	(slurp_symtab): If no symbols, return rather than exit.
	(slurp_dynamic_symtab): New function.
	(display_bfd): Handle dump_dynamic_symtab and
	dump_dynamic_reloc_info.
	(dump_symbols): Take new dynamic argument, indicating whether to
	display dynamic symbols.
	(dump_relocs): Move most printing into dump_reloc_set.
	(dump_dynamic_relocs): New function.
	(dump_reloc_set): New function, extracted from dump_relocs.
	(main): Add R and T to getopt string.  Handle -T by setting
	dump_dynamic_symtab and -R by setting dump_dynamic_reloc_info.
	* objdump.1: Updated for -R (--dynamic-reloc) and -T
	(--dynamic-syms) options.
	* binutils.texi: Updated for new nm and objdump options.

Wed Mar 30 15:52:40 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Update for recent BFD changes to symbol and reloc reading.  Rename
	all uses of get_symtab_upper_bound to bfd_get_symtab_upper_bound.
	Also:
	* coffgrok.c (symcount): Change to long.
	(do_sections_p1): Check for error return from
	bfd_get_reloc_upper_bound.  Change relcount to long, and check for
	error from bfd_canonicalize_reloc.
	(coff_grok): Change storage to long.  Check for error from
	bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
	* nlmconv.c (main): Change symcount, newsymalloc, newsymcount, and
	i to long.  Check for error from bfd_get_symtab_upper_bound and
	bfd_canonicalize_symtab.
	(copy_sections): Change reloc_size and reloc_count to long.  Check
	for error from bfd_get_reloc_upper_bound and
	bfd_canonicalize_reloc.
	(mangle_relocs, i386_mangle_relocs, alpha_mangle_relocs): Change
	reloc_count_ptr argument to long *.  Make corresponding changes to
	variables loaded from *reloc_count_ptr.
	* nm.c (display_rel_file): Change storage and symcount to long.
	Check for errors from bfd_get_symtab_upper_bound and
	bfd_canonicalize_symtab.
	* objcopy.c (filter_symbols): Change symcount, src_count and
	dst_count to long.
	(copy_object): Change symcount to long.  Pass another argument to
	fprintf.  Check for errors from bfd_get_symtab_upper_bound and
	bfd_canonicalize_symtab.
	(copy_section): Change relcount to long.  Check for errors from
	bfd_get_reloc_upper_bound and bfd_canonicalize_reloc.
	(mark_symbols_used_in_relocations): Change relcount and i to long.
	Check for errors form bfd_get_reloc_upper_bound and
	bfd_canonicalize_reloc.
	* objdump.c (storage): Remove global variable.
	(symcount): Changed to long.
	(slurp_symtab): New local variable storage.  Check for errors from
	bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
	(remove_useless_symbols): Change return value and count to long.
	(objdump_print_address): Change min, max, thisplace and i to long.
	(disassemble_data): Change i to long.
	(dump_symbols): Change count to long.
	(dump_relocs): Change relcount to long.  Check for errors from
	bfd_ret_reloc_upper_bound and bfd_canonicalize_reloc.
	(display_info_table): Add casts when passing LONGEST_ARCH for
	printf %* argument.

Tue Mar 29 14:59:04 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nm.c (display_archive): Close each archive element after it has
	been displayed.
	* objdump.c (display_file): Likewise.

Mon Mar 28 13:04:08 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in: Change error message to refer to bfd/config.bfd
	rather than bfd/configure.in.

Sun Mar 27 16:23:39 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* More fixes for object formats which allow multiple sections
	with the same name:
	* objcopy.c (setup_section): Make a new output section even if
	one already exists with the given name.
	(copy_section): Use isection->output_section rather than trying
	to look the output section up by its (possibly non-unique) name.

	* Makefile.in (install-info): Look for binutils.info in the
	current directory, then in $(srcdir).  Don't use $<.

Mon Mar 21 12:55:45 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objdump.c (objdump_print_address): Make static.  Declare with
	prototype.  Change vardiff from int to bfd_signed_vma.  Correct
	binary search termination condition.  When looking for same
	section symbol in relocatable file, handle final symbol correctly.

Sun Mar 20 11:26:36 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Makefile.in: Avoid bug in hpux sed.

	* objcopy.c: Changes to keep it from stripping symbols used
	in output relocations.
	(mark_symbols_used_in_relocations): New function.  Mark symbols
	used in output relocations with BSF_KEEP.
	(filter_symbols): Do not strip symbols marked with BSF_KEEP.
	(copy_object): Reorder actions.  First setup sections, then
	build the output symbol table, then copy the section contents.

Fri Mar 18 10:53:55 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ar.c (write_archive): Allocate space for the null byte.  From
	Robert Lipe <robertl@arnet.com>.

Thu Mar 17 16:20:28 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in: Built nm.new and strip.new to avoid problems with
	collect when . is in PATH.
	(STRIP_PROG): Change from strip to strip.new.
	(NM_PROG): Change from nm to nm.new.
	(install): Remove the .new when installing.

Wed Mar 16 16:27:05 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (powerpc_build_stubs): Set BSF_DYNAMIC flag for each
	symbol for which we build a stub.
	(powerpc_mangle_relocs): Only reset TOC pointer for a call to a
	symbol with BSF_DYNAMIC flag set.

Tue Mar 15 23:04:13 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* objcopy.c (filter_symbols): Use bfd_is_local_label to determine
	if a symbol represents a compiler-generated local label.
	(copy_object): Give the BFD backends a chance to copy any private
	bfd data from the input BFD to the output BFD.
	(setup_section): Give the BFD backends a chance to copy any private
	section data from the input section to the output section.

Mon Mar 14 11:15:58 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* objcopy.c (mangle_section): Delete unused function.
	(setup_section): Set osection here instead of calling
	mangle section to do it.

Mon Mar 14 12:11:01 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* ar.c (write_archive): Close inarch before unlinking it.

Fri Mar 11 22:20:48 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (main): For PowerPC, call powerpc_build_stubs and
	powerpc_resolve_stubs.  Use __GOT0, not __toc_start.  Handle it if
	the start and end symbols are not in the text section.
	(struct powerpc_stub): New struct definition.
	(powerpc_stubs, powerpc_stub_insns): New static variables.
	(powerpc_initial_got_size): New static variable.
	(powerpc_build_stubs): New function.
	(powerpc_resolve_stubs): New function.
	(powerpc_mangle_relocs): Clear extraneous data in .got section.
	Rearrange reloc handling to handle ELF relocs that are not
	partial_inplace.  Resolve PC relative relocs.

Wed Mar  9 13:48:11 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* ar.c (move_members): Fix it so that the abi positional modifiers
	don't delete all archive members following the insert point.

Tue Mar  8 13:14:43 1994  Steve Chamberlain  (sac@jonny.cygnus.com)

	* coffgrok.[ch]: New files, understand coff objects.
	* coffdump.c: Uses coffgrok to dump out the debug info of a coff
	file.
	* sysroff.info: Description of a SYSROFF object file.
	* sysinfo.y, syslex.l: Parse info file, generate a reader, writer,
	header files and a printer.
	* srconv.c: Uses coffgrok.c and sysroff.info to convert a coff
	file to a SYSROFF file.

Sat Feb 26 13:35:26 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* ar.c (do_quick_append): Pad with a genuine character 10,
	rather than whatever '\n' might happen to be.

Tue Feb 22 18:25:52 1994  Ian Lance Taylor  (ian@cygnus.com)

	* nlmconv.c (main): Ignore debugging symbols when looking for
	special symbols by name.

Sun Feb 20 18:47:42 1994  Ian Lance Taylor  (ian@lisa.cygnus.com)

	* nlmconv.c: Include libiberty.h.

	Support for PowerPC NetWare.
	* nlmconv.c (main): For PowerPC NetWare, automatically define the
	special symbols __toc_start.
	(select_output_format): Handle bfd_arch_powerpc.
	(mangle_relocs): Likewise.
	(powerpc_mangle_relocs): New function.

Thu Feb 17 09:28:23 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ar.c, bucomm.c, nlmconv.c, nm.c, objcopy.c, objdump.c,
	size.c: Use bfd_get_error and bfd_set_error and new error names.

Fri Feb 11 15:54:51 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* objcopy.c (strip_main, copy_main): Add missing 'break' in switch.

Mon Feb  7 19:45:52 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objdump.c (disassemble_data): Handle bfd_arch_powerpc.

Sun Feb  6 22:08:20 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* strings.c objdump.c nlmconv.c objcopy.c nm.c ar.c size.c (main):
	Call xmalloc_set_program_name.

Fri Feb  4 10:46:01 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* objcopy.c (filter_bytes): Make MEMHUNK a char *, not PTR, so we
	can do arithmetic on it.

Thu Feb  3 14:06:41 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* objdump.c (dump_section_stabs, read_section_stabs,
	print_section_stabs): Functions broken out of dump_stabs_1.
	Free the stabs and strings when done with them.

Wed Feb  2 13:42:23 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* nlmconv.c (main): Use bfd_get_flavour instead of struct member.
	* ar.c (print_contents, extract_file), size.c
	(print_berkeley_format, print_sysv_format): Use bfd_get_filename and
	bfd_my_archive instead of dereferencing the structs directly.

	* ar.c: Use bfd_fatal and bfd_nonfatal instead of bfd_perror and exit.
	Indent.  Remove DEFUNs.

	* nlmconv.c (main), objcopy.c (copy_file): Print matching formats
	if ambiguous match.
	* nm.c (display_file, display_archive), size.c (display_bfd):
	Eliminate gotos.
	Print matching formats if there is an ambiguous match.  Use
	bfd_nonfatal instead of hardcoded error message if nothing matches.

	* arsup.c, ar.c, objdump.c: Use bfd_get_filename instead of
	abfd->filename.

	* nm.c (display_archive): New function, from code in display_file.
	(display_rel_file): Renamed from do_one_rel_file.

	* size.c: Indent.
	(display_archive): New function from code in display_file.
	(display_file): Check bfd_close error return.

	* strings.c (strings_object_file): Check bfd_check_format
	error return.

	* strings.c, objdump.c, size.c: Use bfd_nonfatal instead of bfd_perror.

	* bucomm.c: Delete references to exit_handler.  It wasn't set
	anywhere, and now that we're using the libiberty xmalloc, it
	wouldn't always get called before exiting.
	(list_matching_formats): Function moved from objdump.c.
	* bucomm.h: Declare it.

	* objdump.c (disassemble_data): Move some variable decls closer to
	their use.  Add some comments.  Replace a nested block with a
	return.

Mon Jan 31 18:50:41 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* objdump.c (display_target_list, display_info_table): Check that
	the bfd of the dummy output file is not null.

Wed Jan 26 13:13:18 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* objcopy.c (filter_bytes): New function.
	(copy_section): Call it.
	(copy_options, copy_usage, copy_main): Add --byte option to
	activate it.  Appropriate the -b option (which was an undocumented
	synonym for -F) for it, also.  Add --interleave, -i option for
	additional control.
	(setup_section, copy_section, mangle_section): Renamed with no `s'
	on the end.
	* objcopy.1, binutils.texi: Document the new options.

	* objdump.c (display_target_tables, display_target_list):
	New functions broken out of display_info.
	Eliminate some magic constants.  Use more meaningful variable names.
	(dump_bfd_header): New function broken out of display_bfd.
	(dump_section_header): New function broken out of dump_headers.
	(remove_useless_symbols): Don't shadow global variable name with
	parameter.
	(objdump_print_address): Fix backward test.

Tue Jan 25 19:40:54 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* bucomm.c (print_arelt_descr): Change decl of `when' to time_t.
	* objdump.h: Removed.

Mon Jan 24 13:29:02 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* objdump.c (display_file): Remove call to list_matching_formats.
	It would never be called.
	(list_matching_formats): Take an arg giving the list of matching
	formats.
	(display_bfd): Pass the arg, and get it filled in by calling
	bfd_check_format_matches instead of bfd_check_format.
	(display_info, display_info_table): target_vector was renamed to
	bfd_target_vector.

	* binutils.texi (objdump): Note some limitations of -h section
	address printing.

Sat Jan 22 16:20:46 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* Makefile.in (MALLOC): Set to emptiness by default.
	(ALL_CFLAGS): Add and use.
	(arparse.h): Make it depend on arparse.y.
	* ar.c (libbfd.h): Don't require to be in ../bfd.
	* objdump.c (comp): Rename to compare_symbols.

Fri Jan 21 20:22:30 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* objdump.c (list_matching_formats): If the file format is ambiguous,
	print the matching names so the user can choose one.
	(display_bfd): Call it.
	(display_file): Call it.

Fri Jan 21 19:17:25 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objdump.c (disassemble_data): Support bfd_arch_rs6000.

Mon Jan 17 13:57:25 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* objdump.c (stab_name): Allocate dynamically.
	(stab_print): Use pointers to strings instead of char arrays.
	(dump_stabs): Change alloc and init of arrays appropriately.
	(dump_stabs_1): Always decide whether to print stab_name or
	the stab's type number, if unnamed.

Fri Jan 14 14:42:48 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objcopy.c (strip_main, copy_main): Don't clobber the input file
	if copy_file fails.

	* nlmconv.c (main): Warn about an attempt to use a shared library
	with uninitialized data.

	* nlmconv.c (setup_sections): Make sure that we align the
	output_offset of each input section appropriately.

Thu Jan 13 17:32:44 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objdump.c (dump_relocs): Don't crash if section name is NULL.

Tue Jan 11 19:46:33 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* filemode.c (filemodestring): Commented out; not used.
	(mode_string): Use POSIX definitions.
	(ftypelet): Likewise.
	(rwx): Removed; no longer used.
	* bucomm.c: Include bucomm.h.
	(bfd_nonfatal, bfd_fatal): Argument is const.
	(fatal): Make __STDC__ version.
	* bucomm.h (mode_string): Declare.
	* Makefile.in (bucomm.o): Depend upon bucomm.h

Sun Jan  9 12:03:20 1994  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* bucomm.c (xmalloc, xrealloc): Deleted.
	* bucomm.h (xmalloc, xrealloc): Fix prototypes, to correspond to
	libiberty version of functions.

Thu Jan  6 06:18:15 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* binutils.texi: Add a chapter summarizing the ways to select
	aspects of the target for each program.

	* objdump.c (long_options, usage): Add long equivalents for all
	remaining short options that lacked them.
	* binutils.texi objdump.1: Document them.

	* size.c (usage): Tweak usage message.
	* size.1: Add missing `=' in examples.

	* binutils.texi strip.1 objcopy.1 nlmconv.1 objcopy.c nlmconv.c:
	Use "--target=bfdname" as the option to select the BFD target,
	like nm and size already do.
	Reserve "--format=format" for textual output selection options, but
	for now keep old option names as obsolete for backward compatibility.

	* strings.c (main, strings_object_file, usage): Add --target option.
	* binutils.texi strings.1: Document it.

Sat Jan  1 13:58:24 1994  David J. Mackenzie  (djm@thepub.cygnus.com)

	* ar.c (main): Add \n in error message.

Thu Dec 23 12:23:11 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	gcc -Wall lint:
	* ar.c (main): Put parens around assignment used as truth value.
	* objcopy.c (strip_main): Remove unused variables.  Return 0.
	(copy_main): Remove unused variables.  Return 0.
	* objdump.c (display_bfd): Declare return value as void.
	(stab_print): Use "" instead of 0 to initialize array.
	(dump_stabs_1): Print vma using printf_vma.
	(display_info): Put parens around assignment used as truth value.
	* strings.c (print_strings): Cast printf arguments.

	* objcopy.c (copy_main): Use copy_options, not strip_options.

	* nlmheader.y (command): Warn about illegal date values.

Wed Dec 15 11:18:03 1993  David J. MacKenzie  (djm@frosty.eng.umd.edu)

	* bucomm.c bucomm.h: Run through indent.  De-ansidecl-ify.
	(bfd_nonfatal): New function.
	(bfd_fatal): Call it.

	* objcopy.c (smart_rename): Do a copy if the dest file has
	multiple hard links.  Remove source file on successful copy.
	Try to preserve mode and owner on successful rename.

	* objcopy.c: Run through indent.  Clean up a bit.
	Make global variables static.
	Make {input,output}_{target,filename}, show_version local
	to various functions.
	New global variable `status' for exit status.
	(strip_main, copy_main): New functions with code from main.
	(nonfatal): New macro.  Use it globally instead of bfd_perror and
	bfd_fatal.

	(copy_object): Call mangle_sections with bfd_map_over_sections.
	(mangle_sections): Adjust for new calling convention.

Fri Dec 10 11:28:11 1993  Ian Lance Taylor  (ian@deneb.cygnus.com)

	* nlmheader.y (command): Accept MAP and FULLMAP without arguments.
	* nlmconv.c (main): Change error message for MAP and FULLMAP.

Thu Dec  9 17:47:19 1993  Ian Lance Taylor  (ian@deneb.cygnus.com)

	* nlmconv.c (main): Warn about imported symbols that are not in
	the IMPORT list even if the IMPORT keyword is not used.

	* nlmconv.c (debug, unlink_on_exit): New static variables.
	(long_options): Add "debug" and "linker".
	(main): Handle -d and -l arguments.  Make command line input and
	output files optional.  Parse the command file before opening the
	BFD's, which requires storing more information in local variables.
	If INPUT names multiple files, link them together.  Use OUTPUT for
	the output file name if not named on command line.
	(show_usage): Changed for new options.
	(link_inputs): New function to automatically invoke linker to
	handle multiple INPUT files.
	(choose_temp_base_try, choose_temp_base, pexecute): New functions,
	mostly copied from gcc/gcc.c.
	* nlmconv.h (input_files, output_file): Declare.
	* nlmheader.y (input_files, output_file): Define.
	(command): Support INPUT with a string_list argument.  Support
	OUTPUT.
	(string_list): Renamed from module_list.
	* Makefile.in (nlmconv.o): Define LD_NAME based on
	program_transform_name.

Wed Dec  8 10:09:04 1993  Ian Lance Taylor  (ian@deneb.cygnus.com)

	* nlmheader.y (nlmheader_identify): New function.  Use it to print
	the program name just once, instead of with every error message.

Mon Dec  6 16:11:32 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (long_options): Changed --header-info to --header-file
	to match documentation and usage message.

Sun Dec  5 01:31:01 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* objdump.c (dump_relocs): Avoid dereferencing a NULL sym_ptr_ptr
	in a relocation.

Thu Dec  2 16:00:06 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (main): Change various types from bfd_size_type to
	size_t, since they have to be arguments to fread and fwrite.
	Change set from char * to unsigned char *.
	(select_output_format): Make mach argument unsigned.  Handle
	bfd_arch_alpha.
	(setup_sections): Don't copy the .reginfo section of an ECOFF
	file.  Call bfd_set_reloc to initialize the relocation fields.
	(copy_sections): Don't copy the .reginfo section of an ECOFF file.
	Combine all relocs for a section.
	(mangle_relocs): Change type of relocs to permit specific
	functions to change it.  Call alpha_mangle_relocs for alpha,
	default_mangle_relocs for other architectures.
	(default_mangle_relocs): New function.  Adjust the address of all
	relocs by the output_offset.
	(i386_mangle_relocs): Change type of relocs argument.  Cast length
	argument to memmove to size_t.
	(alpha_mangle_relocs): New function.

Wed Nov 17 17:38:58 1993  Sean Eric Fagan  (sef@cygnus.com)

	* nlmconv.c (select_output_format): Use nlm32-sparc for
	bfd_arch_sparc.

Wed Nov 17 14:41:35 1993  Jeffrey Osier  (jeffrey@thepub.cygnus.com)

        * nlmconv.1:   added man page
	* objcopy.1:   fixed format errors

Wed Nov 17 12:03:41 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in: Use CFLAGS as well as LDFLAGS when linking.

Wed Nov 17 04:50:55 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* strings.1: Fix typo.

Mon Nov 15 12:03:20 1993  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* Makefile.in (DISTSTUFF): Build "info".
	(VERSION): Updated to cygnus-2.3.1; 2.3 has gone out.

Sun Nov 14 00:27:24 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* objdump.c (dump_stabs): Handle stabs-in-som as implemented
	by the new BFD SOM assembler.

Sat Nov 13 07:14:05 1993  David J. Mackenzie  (djm@rtl.cygnus.com)

	* ar.1 c++filt.1 nm.1 objcopy.1 objdump.1 ranlib.1 size.1
	strings.1 strip.1: Replace \(em in NAME section with \- so
	makewhatis can grok it.

Tue Nov  9 15:22:12 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (i386_mangle_relocs): Adjust reloc address by
	section output_offset.

Fri Nov  5 12:11:52 1993  Jeffrey Osier  (jeffrey@thepub.cygnus.com)

	* binutils.texi:  added nlmconv chapter

Wed Nov  3 16:10:50 1993  Jeffrey Wheat  (cassidy@cygnus.com)

	* Makefile.in: Change RUNTESTFLAGS to RUNTEST_FLAGS

Wed Nov  3 15:09:23 1993  Ken Raeburn  (raeburn@rover.cygnus.com)

	* Makefile.in (distclean): Don't get rid of dvi or info files.

Tue Nov  2 13:29:59 1993  David J. Mackenzie  (djm@rtl.cygnus.com)

	* objcopy.c (S_ISLNK): Define as 0 if there's no S_IFLNK.

Fri Oct 29 16:02:34 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* binutils.texi: Move objcopy docs into alphabetical order.

	* objdump.c: Use xmalloc instead of malloc.

Fri Oct 29 11:11:14 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* objdump.c (info): Rename to formats_info.
	(dump_stabs_1): Better comments and formatting.

Thu Oct 28 19:43:16 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* ar.c (main): Always create the archive when quick appending,
	even if no input files have been given.

Wed Oct 27 12:03:06 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (main): Set sharedDebugRecordOffset and
	sharedDebugRecordCount fields in extended header.

	* nlmconv.c (main): Force moduleName field to upper case.

Mon Oct 25 16:45:42 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objcopy.c (main): Give a usage message if there are too many
	arguments.

Mon Oct 25 10:37:08 1993  Ken Raeburn  (raeburn@rover.cygnus.com)

	* Makefile.in (install-info): Rewrite to take advantage of VPATH,
	so FSF distributions (with info files in $(srcdir)) install
	properly.
	(DISTSTUFF): Build nlmheader.c too.

Fri Oct 22 11:43:23 1993  Ken Raeburn  (raeburn@rover.cygnus.com)

	* ar.c (program_name): Don't define here.
	* objdump.c: Include "bucomm.h".
	(xmalloc): Don't declare here.
	(program_name): Don't define here.
	(program_version): Fixed type in declaration.
	* size.c: Include "bucomm.h".
	(program_name): Don't declare here.

Fri Oct 22 14:10:41 1993  Mark Eichin  (eichin@cygnus.com)

	* objdump.c (fprintf): hide declaration in FPRINTF_ALREADY_DECLARED

Fri Oct  1 12:43:00 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (i386_mangle_relocs): Resolve and remove PC relative
	relocs against defined symbols in the same section.

Thu Sep 30 16:46:26 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* Makefile.in (binutils.dvi): use TEXIDIR to find texinfo.tex

Sat Sep 25 18:09:29 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* objcopy.c (simple_copy, smart_rename): New functions.
	(main): Use them.

Fri Sep 24 15:38:29 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (clean, distclean): Recurse into testsuite.

Thu Sep 23 01:05:06 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objcopy.c (setup_sections, copy_sections): If stripping, don't
	copy SEC_DEBUGGING sections.
	* objdump.c (dump_headers): Print SEC_DEBUGGING flag.

	* objdump.c (usage): Mention --stabs.

	* objcopy.c (copy_object): Copy all applicable file flags.
	(copy_file): Don't copy EXEC_P specially here.

Mon Sep 20 19:28:57 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (main): Adjust data section size to correspond to bss
	alignment adjustment.  Clear BSF_SECTION_SYM if symbol is moved to
	a different section.  Use time_t for time variable.
	(setup_sections): Only put sections with contents in output NLM.
	(i386_mangle_relocs): No symbols are common at this point.  Add
	casts to avoid warnings.

Fri Sep 10 11:00:40 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* objdump.c: Made the --stabs option work for stabs-in-coff.
	(ELF_STAB_DISPLAY): Removed.
	(dump_elf_stabs): Renamed to dump_stabs, changed to run for
	any object file format.
	(dump_elf_stabs_1): Renamed to dump_stabs_1, added calls to
	generic BFD routines for non-ELF case, changed format of message
	for no-section-found case.
	(display_bfd): Always call dump_stabs if requested.
	(dump_data): Call bfd_section_size to get section size.

Fri Sep 10 08:12:23 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* Makefile.in (install): Don't put strings in tooldir/bin.

Mon Sep  6 15:39:04 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (total_bss_size): Removed.
	(main): Set the bss vma to always follow the data section.  Move
	symbols into new sections, and adjust values by output_offset.
	(setup_sections): Don't copy all sections, but instead point all
	text sections to .text, all data sections to .data, and all bss
	sections to .bss.
	(copy_sections): Adjust accordingly.

Thu Sep  2 12:34:03 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	Only build nlmconv if configured for a NetWare target.
	* configure.in: If we have some *-*-netware* target, or are using
	all targets, set BUILD_NLMCONV to $(NLMCONV_PROG) in Makefile.
	* Makefile.in (PROGS): Use $(BUILD_NLMCONV) rather than
	$(NLMCONV_PROG).

Tue Aug 31 14:13:35 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* objdump.c (ARCH_all): Define ARCH_hppa too.
	(dump_headers): Don't test for SEC_BALIGN if it's not defined by
	bfd.h.

Tue Aug 31 13:29:12 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* nlmconv.c (main): Force creation of .bss section.  Set up the
	sections before looking at the symbols.  Move all common symbols
	into .bss section.  Automatically define _edata and _end.  Only
	export symbols in the export list, with multiple prefixes if
	necessary.  Warn if no version.  Always create extended header.
	Set date automatically if not already set.
	(setup_sections): Count size of bss sections.
	(mangle_relocs, i386_mangle_relocs): Accept section argument, and
	take reloc_count as a changeable pointer; changed callers.
	(i386_mangle_relocs): Remove PC relative relocs within a section,
	as they require no adjustment.
	* nlmheader.y: Fixed memory allocation throughout: token STRING is
	now allocated on the heap, and freed if not needed.  Null
	terminated copyright message.  Accept version with only two
	strings.
	(symbol_list_opt): New nonterminal, either symbol_list or empty.
	(symbol_list): Use left recursion to avoid overflowing parser
	stack.
	(yylex): Rearranged beginning of line check.  Accept quoted
	strings using single quotes.  End generic argument at comment
	character or parentheses.
	(string_list_append): Fixed.
	(string_list_append1): New function.

	* bucomm.h: The first argument to xrealloc is PTR, not char *.
	* bucomm.c (xrealloc): Use PTR rather than char *.
	* Makefile.in (objdump.o): Depend upon config.status to notice
	--with-targets changes.
	(nlmconv.o): Depend upon bucomm.h.

Tue Aug 17 09:46:01 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* configure.in: Don't pass cpu to config.bfd.

Thu Aug 12 16:43:04 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* Makefile.in ($(NM_PROG)): Depend on demangle.o.
	(demangle.o): New target.
	(cplus-dem.o): Depend on it, to force compilation order when doing
	parallel compiles.

	* nm.c (print_symbol_info_{bsd,sysv,posix}): Take a bfd arg.
	(struct output_fns print_symbol_info): Ditto.
	(long_options, usage, main): Add -C --demangle option.
	(print_symname): New function, demangling if requested.
	(print_symbols, print_symbol_info_{bsd,sysv,posix}): Use it.

Wed Aug 11 22:57:23 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* Makefile.in: Put CFLAGS last in compilation rules and omit from
	linking rules.  Use ARCHDEFS to compile objdump.c.
	Update dependencies.
	* configure.in: Construct ARCHDEFS based on the BFD target makefile
	fragments.
	* objdump.c: Conditionalize calls to the print_insn_ARCH functions
	according to ARCHDEFS.

Thu Aug 12 08:06:15 1993  Ian Lance Taylor  (ian@cygnus.com)

	* ar.c: Removed obsolete and non-functional GNU960 code.

Wed Aug 11 13:08:26 1993  Ian Lance Taylor  (ian@cygnus.com)

	* size.c (berkeley_sum): New function.
	(bsssize, datasize, textsize): New global variables.
	(bss_section_name, data_section_name, text_section_name): Removed.
	(print_berkeley_format): Map berkeley_sum over all the sections,
	rather than only reporting sizes of specifically named sections.
	* Makefile.in ($(OBJDUMP_PROG)): Removed dependency on size.o.

Tue Aug 10 10:46:01 1993  Ian Lance Taylor  (ian@cygnus.com)

	* nlmconv.c, nlmconv.h, nlmheader.y: New files for program to
	convert object files into NetWare Loadable Modules.
	* Makefile.in (NLMCONV_PROG): New macro, define to be nlmconv.
	(PROGS): Add NLMCONV_PROG.
	(nlmheader.c, nlmheader.o, nlmconv.o, $(NLMCONV_PROG)): New
	targets.

Thu Aug  5 15:48:32 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* Makefile.in: define MAKEOVERRIDES to an empty string

Wed Aug  4 17:08:08 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* objcopy.c (copy_file): Make failures to process a file nonfatal.

Mon Aug  2 11:28:23 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* nm.c: Add -B option, like --format=bsd.

Tue Jul 27 16:29:54 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objcopy.c (copy_file): If the file is neither an object nor an
	archive, give an error rather than returning success.

Mon Jul 19 16:13:40 1993  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* objdump.c (objdump_print_address): Prefer non-local symbols over
	local ones, and especially discriminate against debugging symbols.
	Also, for relocateable files, try to find a symbol in the current
	section, instead of picking one from some random section with a
	convenient value (read, section offset).
	(disassemble_data): Cast argument to malloc to size_t first.
	(dump_data): Likewise.
	(dump_relocs): If a single section name is specified, show relocs
	only for that section.  Otherwise, silently omit sections without
	relocs.  Format table nicely even if values are printed using 16
	digits instead of 8.

Fri Jul 16 15:19:59 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* nm.c: Changes for final version of POSIX.2.
	(print_symbol_filename_{bsd,sysv,posix}): New functions.
	(formats): Add an element for a pointer to them.
	(print_symbols): Call it.
	(print_object_filename_posix, print_archive_member_posix): Produce
	output according to new POSIX.2 spec.

	* strings.c (print_strings): Handle STREAM being NULL.
	(strings_a_section): Pass a NULL.
	(main): Don't open /dev/null.

Thu Jul 15 12:44:09 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objdump.c (disassemble_data): Handle the m88k.
	(display_bfd): Use bfd_errmsg, rather than just claiming that the
	bfd is not an object file.

Mon Jul 12 17:55:34 1993  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in (TAGS): make work again by naming directories
	  explicitly rather than depending on undefined macros.
	  (INSTALL_XFORM): correct bad install target.

Fri Jul  2 16:58:34 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* strings.c: Doc fixes.

Sun Jun 27 13:35:24 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* Makefile.in: Note dependencies on bucomm.h.
	(cplus-dem.o): Link c++filt with version.o.

	* strings.c: Include bucomm.h and add prototypes to other decls.
	Remove -h option.

	* bucomm.h: Declare xrealloc.

	* nm.c, objcopy.c, objdump.c, size.c, strings.c (main, usage): Add
	--help option.  Put "GNU" in the version message.
	(usage): Take stream and exit status as args.
	(main): Pass new args to usage.

Fri Jun 25 23:12:12 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* strings.c, strings.1: New files.
	* binutils.texi: Document strings.
	* Makefile.in: Add rules for it.

Fri Jun 25 20:44:43 1993  Ken Raeburn  (raeburn@poseidon.cygnus.com)

	* objdump.c: Use size-independent bfd elf section names.

Sun Jun 20 23:09:06 1993  Ken Raeburn  (raeburn@poseidon.cygnus.com)

	* objdump.c (objdump_print_address): Handle wide offsets by
	calling sprintf_vma.

Fri Jun 18 14:29:12 1993  Per Bothner  (bothner@deneb.cygnus.com)

	* objdump.c (syms2):  Removed unused variable.
	* objdump.c (remove_useless_symbols):  New function.
	* objdump.c (comp):  Simplify.
	* objdump.c (dis-assemble_data):  Make simpler and more
	efficient how we filter out useless symbols:  Just filter
	BEFORE the sort (using remove_useless_symbols).
	* objdump.c (objdump_print_address):  Simplify.
	Change output syntax to match gdb.

Thu Jun 17 16:53:56 1993  david d `zoo' zuhn (zoo@cygnus.com)

	* Makefile.in: canonicalize install.sh; for use within
	this directory (and subdirs)

Mon Jun 14 12:13:22 1993  david d `zoo' zuhn  (zoo at rtl.cygnus.com)

	* Makefile.in (install, install-info): remove parentdir support,
	use INSTALL_XFORM; define INSTALL_XFORM

Thu Jun 10 17:29:21 1993  Per Bothner  (bothner@cygnus.com)

	* objcopy.c (copy_object):  Fix bad size passed to xmalloc().

Mon Jun  7 12:41:12 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in (INCLUDES):  Add -I../bfd for sysdep.h and bfd.h.
	* configure.in:  No longer need to configure to get sysdep.h.
	* objcopy.c (copy_object):  Fix symbol table handling.

Fri Jun  4 17:20:03 1993  Per Bothner  (bothner@cygnus.com)

	* objcopy.c (filter_symbols):  Cannot filter the symbols
	in place, because that confuses the relocs, so take separate
	parameter for output array.
	* objcopy.c (sympp):  Make two variables: isympp and osympp.
	* objcopy.c (copy_object):  Allocate separate array (osympp)
	for filtered symbols.

Fri Jun  4 10:51:44 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: change recursion test to presence of a configured
	testsuite directory

Thu Jun  3 14:05:57 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* Makefile.in (underscore.c): Hack the backquoted command so it
	doesn't cause Solaris make to bomb.

Thu Jun  3 10:40:19 1993  Jeffrey Osier  (jeffrey@cygnus.com)

	* Makefile.in:  added c++filt and objcopy to MANPAGES variable

Thu Jun  3 00:32:52 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: rename LOADLIBES to EXTRALIBS

Wed Jun  2 18:30:24 1993  Jeffrey Osier  (jeffrey@cygnus.com)

	* c++filt.1, objcopy.1:  new man pages

Fri May 28 15:01:24 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in (install):  Also install ar and ranlib in
	$(tooldir)/bin;  needed for building libgcc.a.
	* objdump.c (objdump_print_address):  Fix the check
	"coincidental" label matches by dis-allowing undefined
	or com symbols.

Thu May 27 16:58:31 1993  Jeffrey Osier  (jeffrey@cygnus.com)

        * biutils.texi:  revised c++filt chapter

Wed May 26 17:24:17 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (FLAGS_TO_PASS): Pass down CC and CFLAGS.

Tue May 25 00:26:47 1993  Ken Raeburn  (raeburn@cygnus.com)

	* objdump.c (slurp_symtab): Print warning for bad symbol table.
	(bfd_elf32_find_section, Elf32_Internal_Shdr): Updated
	declarations and uses.

	* Makefile.in (DISTSTUFF): Don't build binutils.mm.

Fri May 21 10:51:19 1993  David J. Mackenzie  (djm@rtl.cygnus.com)

	* nm.c: Add -f/--format, -P/--portability, -t/--radix options.
	Make global variables static.
	(main): Make -v like -n, not -V, and make -A like -o, for POSIX.2.
	(set_print_radix, set_output_format,
	print_{object_filename,archive_filename,archive_member,symbol_info}
	{bsd,sysv,posix}): New functions.
	(display_file, print_symbols): Call them.

	* ar.c: Improve error messages.

	* nm.c (main): Handle long options that just set a flag.

	* nm.c (main), ar.c (do_show_version), objcopy.c (main), size.c
	(main): Exit after printing the version number, per the GNU coding
	standards.

Mon May 17 13:20:25 1993  Per Bothner  (bothner@cygnus.com)

	* README, Makefile.in:  Minor updates for 2.2.

Fri May 14 11:12:26 1993  Per Bothner  (bothner@cygnus.com)

	* Makefile.in (underscore.c):  Automatically generate
	(using nm) a file with the variable prepends_underscore.
	* Makefile.in (c++filt):  Link underscore.o with cplus-dem.o
	so that initial underscores get removed iff appropriate.
	* binutils.texi:  Preliminary documentation for c++filt.
	* Makefile.in, binutils.texi:  Set to version 2.2.

	* NEWS:  Mention copy->objcopy renaming and new c++filt program.

Wed May 12 12:05:36 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (cplus-dem.o, $(DEMANGLER_PROG)): Build the
	demangler via cplus-dem.o, rather than directly from the .c file.

	* objcopy.c: Renamed from copy.c, updated comments accordingly.
	* Makefile.in, binutils.texi: Renamed copy to objcopy.
	* is-strip.c, maybe-strip.c, not-strip.c: Updated comments for
	rename of copy to objcopy.

Mon May 10 17:20:18 1993  Per Bothner  (bothner@cygnus.com)

	* binutils.texi (strip, -v option):  Fix typo.

Fri May  7 13:57:50 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (RUNTEST): Define.
	(FLAGS_TO_PASS): Pass down RUNTEST.

Tue May  4 10:06:50 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (DEMANGLER_PROG): Name it c++filt.
	(PROG): Also build and install COPY_PROG.

Mon May  3 19:11:48 1993  Per Bothner  (bothner@cygnus.com)

	* Makefile.in:  Change definition of $(tooldir) to match FSF.

Wed Apr 28 23:41:32 1993  David J. Mackenzie  (djm@rtl.cygnus.com)

	* size.c (usage): Add missing options.
	(main): Clean up option parser.

	* objdump.c (usage): Add missing options.
	(display_file): Print program name before calling
	bdf_perror.

	* nm.c (usage): Add missing options.
	(main): Clean up option parser.
	(display_file): Print program name before calling
	bdf_perror.

	* copy.c (copy_usage, strip_usage): Add missing options.

	* ar.c (usage): New function.
	(main): Call it.
	(open_inarch, do_quick_append): Print program name before calling
	bdf_perror.

Thu Apr 22 15:01:35 1993  Ian Lance Taylor  (ian@cygnus.com)

	* nm.c (main): Accept and ignore -A and -B for MIPS compatibility.

Mon Apr 19 14:06:59 1993  Rob Savoye  (rob@cygnus.com)

	* Makefile.in: Added FLAGS_TO_PASS so tests get run on freshly
	built binaries if they exist. (otherwise the path)

Wed Apr  7 22:22:50 1993  Rob Savoye  (rob@cygnus.com)

	* Makefile.in: Changed check target to use DejaGnu.

Thu Apr  1 12:37:13 1993  Jim Kingdon  (kingdon@cygnus.com)

	* Makefile.in: Remove am29k-pinsn.c, i960-pinsn.c.
	objdump.c: a29k and i960 are `disassemble' not `print'.

	* objdump.c: Rename print_address to objdump_print_address
	and change parameters.
	(disassemble_data): Use objdump_print_address.

Wed Mar 31 10:25:29 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* objdump.c (disassemble_data): print_insn_sparc is now a
	`disassemble' not a `print'.
	Makefile.in: Remove sparc-pinsn.c (now in libopcodes.a).

	* objdump.c (disassemble_data): Use new read_memory_func stuff.

Thu Mar 25 10:38:11 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* objdump.c (fprintf): Declaration of variadic function had better
	be a prototype for ANSI C systems.

Mon Mar 22 23:19:46 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: rename test-install to install-check

Fri Mar 19 14:40:08 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* objdump.c (disassemble_data): Add H8500.

Fri Mar 19 10:56:51 1993  Jim Kingdon  (kingdon@cygnus.com)

	* objdump.c (usage): Mention long options.

Thu Mar 18 14:22:17 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* nm.c:  Modify behavior of -o flag for archives to match
	BSD4.4 and Sunos 4:  Prefix archive name before each line.

	* m68k-pinsn.c:  Removed.  Subsumed by ../opcodes/m68k-dis.c.
	* i386-pinsn.c:  Removed.  Subsumed by ../opcodes/i386-dis.c.
	* Makefile.in:  Adjust accordingly.
	* objdump.c:  Support new-style disassemblers (ones that use
	the interface of ../include/dis-asm.h).

Thu Feb 25 15:57:00 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in:  When making tar file, remove texinfo/*,
	except for texinfo/texinfo.tex.
	* ardup.c:  Add extern declaration of strdup.
	* Makefile.in (testsuite):  Add 'else true' since otherwise
	Ultrix /bin/sh complains.

Wed Feb 24 19:44:18 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in:  Set VERSION to 2.1.
	* README, NEWS: Updates.
	* nm.c:  Add -v as a synonym for -V.

Tue Feb 23 19:00:50 1993  Mike Werner  (mtw@poseidon.cygnus.com)

	* configure.in: added testsuite to configdirs.
	* Makefile.in: added support for building testsuite.

Mon Feb 22 22:52:10 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* objdump.c (disassemble_data):  Print function names when
	given by bfd_find_nearest_line.  If not - still print
	line numbers.

Mon Feb 22 07:54:03 1993  Mike Werner  (mtw@poseidon.cygnus.com)

	* binutils/testsuite: made modifications to testcases, etc., to allow
        them to work properly  given the reorganization of deja-gnu and the
	relocation of the testcases from deja-gnu to a "tool" subdirectory.

Mon Feb 22 10:27:24 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* objdump.c (dump_data): Free up section contents each time
	through the loop.  Reported by minyard@bnr.ca.

Sun Feb 21 10:55:55 1993  Mike Werner  (mtw@poseidon.cygnus.com)

	* binutils/testsuite: Initial creation of binutils/testsuite.
	Migrated dejagnu testcases and support files for testing nm to
	binutils/testsuite from deja-gnu.  These files were moved "as is"
	with no modifications.	This migration is part of a major overhaul
	of dejagnu.  The modifications to these testcases, etc., which
	will allow them to work with the new version of dejagnu will be
	made in a future update.

Fri Feb 12 10:05:20 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (LIBIBERTY_SRC_DIR, LIBIBERTY_BIN_DIR): New macros.
	* Makefile.in (LIBIBERTY):  Use LIBIBERTY_BIN_DIR.
	* Makefile.in (DEMANGLER_PROG):  New program to build.  Add macro
	and rule.
	* Makefile.in (PROGS):  Add DEMANGLER_PROG.

Tue Jan 26 11:56:33 1993  Ian Lance Taylor  (ian@cygnus.com)

	* copy.c, nm.c, objdump.c, size.c: Use new bfd_is_com_section
	macro rather than checking for equality to bfd_com_section.

Fri Jan  8 15:50:05 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objdump.c (disassemble_data): Fix code to find first useless
	symbol.

Thu Jan  7 13:13:31 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* objdump.c (disassemble_data): Use mips_print_insn for MIPS.
	Don't core dump if bfd_find_nearest_line returns false.

Wed Jan  6 17:14:01 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* objdump.c (disassemble_data): know how to disassemble z8000s
	too.

Wed Jan  6 15:16:27 1993  Per Bothner  (bothner@cygnus.com)

	* arsup.h (interactive), bucomm.h (program_name):  Prefix
	with 'extern', to avoid warnings from some compilers.

Wed Jan  6 15:14:11 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* arparse.y: fix unnecessary shift/reduce

Tue Dec 22 15:46:56 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in:  Make check depend on all.
	* Makefile.in (distclean): Remove sysdep.h.
	* size.c:  Use %u format where appropriate.
	* objdump.c:  Standardize:  L_SET -> SEEK_SET.
	* objdump.c:  Use new macro bfd_asymbol_bfd.
	* configure.in:  Allow std-host as the default ${mys_host}.

Thu Dec 17 19:38:19 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: added dvi target, define and use TEXI2DVI

Tue Dec 15 18:05:07 1992  Per Bothner  (bothner@cygnus.com)

	* Makefile.in (dist):  Fix permissions before release.
	* size.c:  Use bfd_size_type (and long) where appropriate.
	* ar.c:  Make writing a map the default, to be compatible
	with SYSV and Posix.2.  Remove some bogus kludges that
	handled __.SYMDEF directly.
	* NEWS:  New file.

Mon Nov  9 13:36:53 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: flex no longer needs the -S flag

Sat Nov  7 15:06:13 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

        * ar.c (extract_file): utime needs a pointer to a utimbuf

	* Makefile.in: handle -I includes better, adding $(BASEDIR)/bfd to
	the list (since some of the bfd/hosts/*.h files include other
	files from that directory)

Fri Nov  6 00:12:51 1992  John Gilmore  (gnu@cygnus.com)

	* i960-pinsn.c (MEM_MAX, MEM_SIZ):  Set upper bound properly.

Thu Nov  5 03:37:15 1992  John Gilmore  (gnu@cygnus.com)

	Clean up some old BFD ansification macros.

	* arsup.h, bucomm.h, objdump.h:  Remove EXFUN from binutils.
	It still remains as a local macro in gmalloc.c, which is derived
	from some other copy of GNU Malloc somewhere (FIXME).

	* ar.c, objdump.c, size.c:  Replace EXFUN with PROTO.  Make static
	fns really static.
	* arsup.h:  Declare extract_files.

Mon Nov  2 12:42:11 1992  Ian Lance Taylor  (ian@cygnus.com)

	* ar.c (extract_file): instead of checking USG: if POSIX_UTIME,
	use utime and utimbuf structure, otherwise if USE_UTIME use utime
	and array of two longs, otherwise use utimes.

Thu Oct 15 13:57:35 1992  Per Bothner  (bothner@cygnus.com)

	* binutils.tex:  Document yesterday's changes to strip and copy.

Wed Oct 14 13:22:14 1992  Per Bothner  (bothner@cygnus.com)

	* copy.c:  Re-do command-line parsing to use getopt_long().
	Add long option names.  Re-think option letters to be more
	consistent.
	* copy.c:  New function filter_symbols() for stripping only
	debug-symbols and/or local symbols.  Use these to support
	the previously-missing options of the old FSF strip.

Tue Oct 13 01:24:20 1992  John Gilmore  (gnu@cygnus.com)

	* configure.in (host):  Use ${srcdir}/../bfd/configure.host rather
	than repeating a copy of it here.

Wed Oct  7 12:53:52 1992  Ken Raeburn  (raeburn@cygnus.com)

	* copy.c (main): Even if is_strip, accept -d argument indicating
	alternate output format.  Needed by gdb for Nindy.

	* m68k-pinsn.c (print_insn_arg): Handle new "`" operand type.

Tue Oct  6 16:33:56 1992  Jeffrey Osier  (jeffrey@cygnus.com)

	* binutils.texi:  added documentation for "copy"

Tue Oct  6 14:22:56 1992  Per Bothner  (bothner at PersSony)

	* Makefile.in (*clean rules): Some cleaning up.
	* Makefile.in (dist): Make diststuff in gprof for a dist.

	* ar.c (do_show_version):  New function.
	* ar.c (main):  Fix so "ar -V" works.

Thu Oct  1 22:44:45 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: now uses the cpu-vendor-os triple instead of
	nested cases.

Fri Sep 25 22:41:08 1992  John Gilmore  (gnu@cygnus.com)

	* i960-pinsn.c:  Change bzero to memset.
	* sparc-pinsn.c:  Change index to strchr.

Mon Sep 21 14:39:56 1992  Ian Lance Taylor  (ian@cygnus.com)

	* m68k-pinsn (print_insn_arg, fetch_arg): added support for
	operands to memory management instructions, from WRS.

Tue Sep 15 15:26:38 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (install): if $(tooldir) exists, install nm and
	strip in $(tooldir)/bin.

Thu Sep  3 11:57:40 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in:  Let's call it version 2.0.

Wed Sep  2 00:25:13 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in:  Bump to version 0.98.
	* TODO, README:  Minor updates.

	* Makefile.in:  Added mostlyclean, distclean rules,
	and cleaned up clean, realclean.

Sun Aug 30 21:18:59 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: map program names through program_transform_name
	when installing.

Sun Aug 30 18:09:03 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in:  Bump to versions 1.97.90.
	* cplus-dem.c:  Removed.  Was nowhere used - and if some
	programs are changed to to demangling should now use the
	versions in libiberty.

Thu Aug 27 12:58:09 1992  Brendan Kehoe  (brendan@cygnus.com)

	* configure.in: add we32k

Mon Aug 24 14:53:42 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* ar.c (map_over_members): if the element of the archive has a
	null name, fill it in.

	* nm.c (do_one_rel_file): only warn if a bfd's flags say there
	will be symbols and there aren't any.

Wed Aug 19 11:20:25 1992  Ian Lance Taylor  (ian@cygnus.com)

	* m68k-pinsn.c: handle new operand type 'r', introduced for cas2.

Tue Aug 18 20:45:48 1992  Rob Savoye  (rob@cygnus.com)

	* nm.c objdump.c: Added support for a +version (-V)
	to print the version number.

	* ar.c, copy.c: Added support for a -V option to print
	the version number.

Tue Aug 18 13:28:44 1992  Ian Lance Taylor  (ian@cygnus.com)

	* config/mh-apollo68v: removed -g from CC definition.

	* Makefile.in: always create installation directories.

Mon Aug 17 18:33:41 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* m68k-pinsn.c:  Minor fix in style of output (don't use
	range to indicate floating point control registers).

Tue Aug 11 23:42:21 1992  Per Bothner  (bothner@cygnus.com)

	* ar.c (main):  Don't *always* set the verbose flag!

Wed Aug  5 11:25:27 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* copy.c:  When is_strip (because it is invoked as the strip
	program), follow traditional argv processing:
	'strip file1 file2' now strips file1 and file2, rather
	than stripping file1 (as input), leaving output in file2.

Mon Jul 27 16:28:08 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* objdump.c (display_info, display_info_table):  Call
	bfd_set_format() on dummy bfd before using it (twice).
	* ar.c:  Make sure archive is created on command 'r'
	even when no elements are inserted.  (Clean up and
	simplify some non-working related code.)

Mon Jul 20 02:48:38 1992  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* configure.in: hppa support doesn't assume hp OS (from sef).

Sat Jul 18 14:35:22 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: recognize hppa hosts (bsd & hpux), error messages
	to stderr, not stdout

Fri Jul 17 18:39:44 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* ar.1, binutils.texi, i960-pinsn.c, nm.1, objdump.1, ranlib.1,
	  size.1, sparc-pinsn.c, strip.1: removed rcsid's.

Thu Jul 16 16:55:24 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.dos: removed rcsid.

Thu Jul 16 08:23:07 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* objdump.c (display_bfd): print state of BFD_IS_RELAXABLE too

Tue Jun 30 20:26:15 1992  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* Makefile.in: Add program_suffix (parallel to program_prefix)

Thu Jun 25 04:52:45 1992  John Gilmore  (gnu at cygnus.com)

	* nm.c (sorters):  Lint.  Remove excess whitespace.

Wed Jun 24 13:48:07 1992  Per Bothner  (bothner@cygnus.com)

	* nm.c (valueof macro):  Add missing parentheses.
	(Their lack screwed up numeric_forward().)

Sun Jun 14 10:33:27 1992  John Gilmore  (gnu at cygnus.com)

	* objdump.c (dump_elf_stabs):  Also dump .stab.index and
	.stab.excl sections.
	(dump_elf_stabs_1):  Split out main body of old dump_elf_stabs.
	* objdump.1, binutils.texi:  Document new sections dumped.

Fri Jun 12 22:23:35 1992  John Gilmore  (gnu at cygnus.com)

	* size.c, objdump.c, bucomm.c:  Lint.

Thu Jun 11 01:19:06 1992  John Gilmore  (gnu at cygnus.com)

	* objdump.c (dump_elf_stabs): New feature: --stabs prints out a
	.stab section from an ELF file.  Installed under #ifdef
	ELF_STAB_DISPLAY so it can be easily disabled, since it requires
	bfd-internals header files and such.
	* objdump.1, binutils.texi:  Update for --stabs.  Also fix
	objdump's doc to use -- rather than + for long options.
	(FIXME:  Not yet fixed everywhere in binutils.texinfo.)

Wed Jun 10 07:53:24 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* objdump.c(display_info), patches from
	mohring@informatik.tu-muenchen.de to print the table much more
	nicely.

Thu May 28 13:36:16 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* objdump.c:  Add another enum->int cast, for the sake of
	old compilers (such as PCC).

Wed May 27 13:01:44 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* arlex.l:  Don't include <sysdep.h> (unneeded conflicts).
	Add declaration of strdup().

Fri May 22 13:40:37 1992  Per Bothner  (bothner@cygnus.com)

	* Makefile.in:  Use srcdir instead of VPATH in ldgram/ldlex
	rules, since these are used when building a distribution.
	* Makefile.in (arlex.c):  Don't re-direct output, since that
	leaves a bogus output files if it fails.

	* arlex.l:  Make work with lex, for what it's worth.
	* Makefile.in:  Better lex support.
	* Makefile.in (dist):  Generate flex and bison outputs
	for distribution.

Thu May 14 17:17:59 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: get BISON definition right.

Fri May  8 07:47:08 1992  K. Richard Pixley  (rich@cygnus.com)

	* sanity.sh: default TMPDIR to ".".

Thu May  7 12:34:50 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* binutils.texi: add doc for ar command language.

Wed May  6 18:05:36 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* arparse.y: make END call ar_end
	* arsup.c (ar_end): added, deletes temp file if archive session
	aborted.


Wed May  6 11:08:53 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: use bison & flex from ../ if they exist.  Also,
	  FLEX->LEX.

	* sanity.sh: remove temporary directory when finished.

Tue May  5 12:00:58 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* Makefile.in:  Bump to version 1.97.
	* ar.c:  Declare errno for machines that need it.

Mon May  4 23:29:51 1992  John Gilmore  (gnu@cygnus.com)

	* objdump.c (display_info):  Handle error cases without coredump.
	Close the dummy temporary file we open in the loop.
	* Makefile.in (arsup.o):  Add kludge to build with Sun Make.

Fri May  1 16:20:23 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: added test-install target.

	* sanity.sh: new file.

	* Makefile.in: use sanity test on make check.

Tue Apr 21 13:38:37 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: rework CFLAGS so that they can be passed on the
	  command line to make.  Remove MINUS_G.  Default CFLAGS to -g.

Wed Apr 15 14:33:07 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* arsup.c, arsup.h, arparse.y, arlex.l: support for archive
	scripting language.

Fri Mar  6 21:54:53 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: added check target.

Thu Mar  5 21:35:49 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: added clean-info target.

Tue Mar  3 15:36:37 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: remove $(COPY_PROG) from PROGS.  It shouldn't be
	  installed. added tooldir and program_prefix.

Wed Feb 26 18:04:40 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in, configure.in: removed traces of namesubdir,
	  -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
	  copyrights to '92, changed some from Cygnus to FSF.

Sun Feb 16 12:53:02 1992  Per Bothner  (bothner at cygnus.com)

	* Makefile.in:  Bump version to 1.96, and remove -beta
	suffix from distribution name.
	* m68k-pinsn.c:  New macro COERCE_SIGNED_CHAR to extract
	the signed value of a character (even if chars are unsigned).
	* sparc-pinsn.c:  Add new operand types.

Thu Feb  6 12:14:19 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* objdump.c (disassemble_data): don't print a section's contents
	if it's not loadable (eg bss)

Tue Jan 28 11:11:06 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* m68k-pinsn.c (print_insn_arg): fixed so that -ve branch
	displacements don't get printed as large +ve ones.

Fri Jan 24 14:47:53 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* copy.c, nm.c, objdump.c, size.c : changed to use the
	new reloc scheme.


Mon Dec 30 18:34:41 1991  Per Bothner  (bothner at cygnus.com)

	* bucomm.c (print_arelt_descr):  Tweek the output format
	so that 'ar tv' output follows Posix 1003.2/D11.
	Output is now also identical to Sun's (except __.SYMDEF).

Mon Dec 30 06:09:53 1991  John Gilmore  (gnu at cygnus.com)

	* Makefile.in:  Make `make' output more readable.

Wed Dec 18 15:04:45 1991  Per Bothner  (bothner at cygnus.com)

	* Makefile.in:  Bump to version 1.94.

Wed Dec 11 16:48:09 1991  Steve Chamberlain  (sac at cygnus.com)

	* ar.c: added "b" to fopens for dos
	* configdj.bat, makefile.dos new files from DJ

Tue Dec 10 04:07:26 1991  K. Richard Pixley  (rich at rtl.cygnus.com)

	* Makefile.in: infodir belongs in datadir.

Sat Dec  7 17:09:37 1991  Steve Chamberlain  (sac at rtl.cygnus.com)

	* bucomm.h: created to hold prototypes of bucomm.c
	* objdump.h: created to hold prototyes of objdump.c
	* am29k-pinsn.c: include objdump.h
	* ar.c: include bucomm.h, get ar.h from the right place and
	include libbfd.h
	* bucomm.c: defunize bfd_fatal
	* copy.c: include bucomm.h, lint.
	* i960-pinsn.h: include bucomm.h
	* m68k-pinsn.h: lint
	* nm.c: include bucomm.h, lint
	* objdump.c: lint
	* sparc-pinsn.c: include objdump.h



Fri Dec  6 23:02:14 1991  K. Richard Pixley  (rich at rtl.cygnus.com)

	* Makefile.in: added standards.text support.  install using
	  INSTALL_PROGRAM and INSTALL_DATA.

	* configure.in: configure now does all of it's work from objdir so
	  make file existence tests against ${srcdir}.

Thu Dec  5 22:46:22 1991  K. Richard Pixley  (rich at rtl.cygnus.com)

	* Makefile.in: idestdir and ddestdir go away.  Added copyrights
	  and shift gpl to v2.  Added ChangeLog if it didn't exist. docdir
	  and mandir now keyed off datadir by default.

Wed Dec  4 22:42:03 1991  Per Bothner  (bothner at cygnus.com)

	* Makefile.in:  Bump to version 1.93.
	* Makefile.in:  Add make-strip.o:maybe-strip.c dependency
	for make versions that provide half-baked VPATH-support (e.g. Sun's).
	* size.c:  Improvements suggested by
	"david d [zoo] zuhn" <zoo@aps1.spa.umn.edu>:
	- Don't emit (Berkeley) headers if no files were found.
	- Return a non-zero return code on failure.

Sat Nov 30 21:34:19 1991  Steve Chamberlain  (sac at rtl.cygnus.com)

	Changes due to include file renaming:
	* am29k-pinsn.c: a29k-opcode.h	-> opcode/a29k.h
	* sparc-pinsn.c: sparc-opcode.h	-> opcode/sparc.h
	* m68k-pinsn.c:	 m68k-opcode.h	-> opcode/m68k.h
	* nm.c:		 stab.gnu.h	-> aout/stab_gnu.h

Tue Nov 19 19:20:43 1991  Per Bothner  (bothner at cygnus.com)

	* README:  Mention MINIMIZE flag for bfd's make.

Mon Nov 18 12:05:37 1991  Per Bothner  (bothner at cygnus.com)

	* README:  Various improvements.

Sun Nov 17 23:40:59 1991  Per Bothner  (bothner at cygnus.com)

	* Makefile.in:  Bump to version 1.92.
	* version.c, Makefile.in:  Get version string from Makefile.
	* copy.c, is-strip.c, not-strip.c, maybe-strip.c, Makefile.in:
	Make the same change that we earlier did for ar/ranlib:
	Generate two different binaries for strip and copy and use
	a global variable with different values to distinguish
	ostrip from copy.  (-1 means to use argv[0] to decide,
	so you can get the old behavior, but it is no longer the default).
	* copy.c (copy_file):  Set EXEC_P of output bfd if input is so.
	* copy.c (main):  If is_strip==-1, compare last 5 chars
	of argv[0], not the whole path.
	* copy.c (main): Return 0, not 1.
	* copy.c (setup_sections):  Fix due to change in bfd_make_section
	now failing if asked for a duplicate section.
	* strip.c, ostrip.c:  Removed obsolete files.
	* ar.c, not-ranlib.c, maybe-ranlib.c:
	Change encoding of is_ranlib variable to be consistent
	with is_strip for strip.copy (i.e -1 to means use argv[0]).

Thu Nov 14 20:11:02 1991  Per Bothner  (bothner at cygnus.com)

	* version.c (program_version): Update to version 1.92.

Tue Nov 12 16:17:53 1991  Per Bothner  (bothner at cygnus.com)

	* ar.c (get_pos_bfd):  Previous fix was missing a "break".

Thu Nov  7 08:55:56 1991  Steve Chamberlain  (sac at cygnus.com)

	* am29k-pinsn.c: Fixed bug in mtacc, dmac and fmac instruction
	encodings. (Thaks to David Wood)

Sun Nov  3 14:50:23 1991  Per Bothner  (bothner at cygnus.com)

	* Makefile.in ($(DIST_NAME).tar.Z), TODO:  Various fixes.
	* ar.c (get_pos_bfd): Fix to handling of before/after
	positioning options.
	* bucomm.c (fatal):  MISSING_VFPRINTF is no longer an issue,
	since libiberty contains vfprintf etc if otherwise missing.
	* m68k-pinsn.c (print_insn_arg):  Support BB/BW/BL
	type operands, as used by branch instructions.
	* nm.c:  Delegate printing of symbols to BFD,
	by using bfd_print_symbol to do the formatting.

Mon Oct 28 11:20:47 1991  Steve Chamberlain  (steve at cygnus.com)

	* ar.c (write_archive.c): added unlink before rename since some
	systems can't rename onto an existant file.

Mon Oct 21 09:47:23 1991  Steve Chamberlain  (steve at rtl.cygnus.com)

	* nm.c: now doesn't crash if a symbol with no section and no
	SEC_ABS appears.

Thu Oct 17 15:25:50 1991  Per Bothner  (bothner at cygnus.com)

	* Makefile.in, version.c:  Bump to version 1.91.

Wed Oct 16 11:45:36 1991  Per Bothner  (bothner at cygnus.com)

	* Makefile.in, ar.c, bucomm.c, copy.c, cplus-dem.c, filemode.c,
	i960-pinsn.c, m68k-pinsn.c, nm.c, objdump.c, size.c, sparc-pinsn.c,
	* strip.c: Add or update Copyright notice.
	* TODO:  Add note on 'nm -a'.
	* version.c: Update version number to 1.90.
	* Makefile.in: Fix making of documentation for dist.

Tue Oct 15 00:17:17 1991  Per Bothner  (bothner at cygnus.com)

	* README: New file.
	* Makefile.in: New kludgy rules for making a tarfile.
	* Makefile.in: Fix bindir path.

Mon Oct 14 17:34:29 1991  Roland H. Pesch  (pesch at cygnus.com)

	* Makefile.in: add targets binutils.mm, binutils.me

Fri Oct 11 22:44:21 1991  John Gilmore  (gnu at cygnus.com)

	* Makefile.in:  Avoid Sun Make VPATH bugs by adding dependencies.

Fri Oct 11 12:51:33 1991  Roland H. Pesch  (pesch at cygnus.com)

	* Makefile.in: add target "binutils.ms"

	* binutils.texinfo: minor restructuring for texi2roff comfort.

Fri Oct 11 04:12:28 1991  John Gilmore  (gnu at cygnus.com)

	Restructure configuration scheme for bfd, binutils, ld.

	* include/sys/h-*.h:  Move to bfd/hosts/h-*.h.
	* configure.in:  Revise to symlink sysdep.h to ../bfd/hosts/h-xxx.h.
	Change some config names to match other dirs.
	* *.c:  Include bfd.h before sysdep.h, so ansidecl and PROTO()
	get defined first.
	* Makefile.in:  Use -I. to get sysdep.h.

Wed Oct  9 22:42:56 1991  Per Bothner  (bothner at cygnus.com)

	* nm.c (print_symbols):  Handle NULL name field of symbol.
	* Makefile.in: Removed spurious comment.

Tue Oct  8 16:55:03 1991  Roland H. Pesch  (pesch at cygnus.com)

	* binutils.texinfo: minor typos, phrasing, formatting fixes.

Tue Oct  8 15:13:20 1991  Per Bothner  (bothner at cygnus.com)

	* configure.in: Get host file from ../bfd/config, not config.
	* config/*: Remove config directory and its files.

Tue Oct  8 13:58:59 1991  Roland H. Pesch  (pesch at cygnus.com)

	* Makefile.in: new targets binutils.dvi, binutils.info

	* binutils.texinfo: remove most remaining FIXME's, delete
	references to __.SYMDEF by name


Tue Oct  8 10:23:44 1991  Steve Chamberlain  (steve at cygnus.com)

	* objdump.c (print_address) Print addresses nicely.

Mon Oct  7 11:31:05 1991  Per Bothner  (bothner at cygnus.com)

	* ar.c, Makefile.in, new files {is,not,maybe}-ranlib.c:
	Make two different binaries for ar and ranlib, instead of
	distinguishing them at run time using argv[0].
	(Old behavior is still available if you "make ar_with_ranlib",
	but it is not the default.)
	* ranlib.sh (new):  An alternative one-line
	shell implementation of ranlib.

Fri Oct  4 21:49:44 1991  John Gilmore  (gnu at cygnus.com)

	* objdump.c:  Cope with renames of a few BFD types & enums.

Fri Oct  4 19:08:09 1991  Roland H. Pesch  (pesch at cygnus.com)

	* binutils.texinfo: add new file (rudimentary docn)

Mon Sep 30 12:30:39 1991  Per Bothner  (bothner at cygnus.com)

	* config/hmake-news: Add new file (for Sony NEWSOS3).
	* bucomm.c (fatal):  Conditionally compile fatal() depending on
	MISSING_VFPRINTF, and don't confuse the issue with NO_VARARGS.
	* objdump.c (dump_headers):  Trivial output format change.
	* objdump.c (display_info): Loop over integers, not enums,
	to appease old compilers.

Mon May 20 16:14:07 1991  Steve Chamberlain  (steve at cygint.cygnus.com)

        *objdump.c *nm.c *copy.c :hanged some types to work with 64 bit object files

Thu May 16 16:06:55 1991  Steve Chamberlain  (steve at cygint.cygnus.com)
     from bother
	* objdump.c (print_address): Make disasembled output more
	consistent with gdb and as: Add 0x when printing hex.
	Don't print extra leading zeros.
	Attempt to not print "filename.o".
	* objdump.c: Add some enum-to-int casts to accomodate old compilers.


Fri May  3 22:21:44 1991  John Gilmore  (gnu at cygint.cygnus.com)

	* copy.c:  Change =& constructs to = &, since they confuse older
	C compilers.


Local Variables:
mode: change-log
left-margin: 8
fill-column: 74
version-control: never
End:
