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:
