2001-06-11  Alan Modra  <amodra@bigpond.net.au>

	Merge from mainline.
	2001-05-16  Alexandre Oliva  <aoliva@redhat.com>
	* gmon_io.c (gmon_io_read, gmon_io_write_vma,
	gmon_io_write_32, gmon_io_write_8, gmon_io_write): Adjust
	argument list for K&R C.

	2001-03-13  David Mosberger  <davidm@hpl.hp.com>
	* hist.c (hist_dimension): Declare as an array of 16 characters.
	(hist_read_rec): If SAMPLEDEBUG, print each histogram bin count.
	* basic_blocks.c: Whitespace and formatting changes.
	* bb_exit_func.c: Ditto.
	* call_graph.c: Ditto.
	* call_graph.h: Ditto.
	* cg_arcs.c: Ditto.
	* cg_print.c: Ditto.
	* cg_print.h: Ditto.
	* corefile.c: Ditto.
	* corefile.h: Ditto.
	* gmon_io.c: Ditto.
	* gmon_io.h: Ditto.
	* gmon_out.h: Ditto.
	* gprof.c: Ditto.
	* hist.c: Ditto.
	* hist.h: Ditto.
	* i386.c: Ditto.
	* search_list.c: Ditto.
	* search_list.h: Ditto.
	* source.c: Ditto.
	* source.h: Ditto.
	* sym_ids.c: Ditto.
	* sym_ids.h: Ditto.
	* symtab.c: Ditto.
	* symtab.h: Ditto.
	* tahoe.c: Ditto.
	* utils.c: Ditto.
	* vax.c: Ditto.
	* gmon_out.h (gmon_hist_hdr): Delete.
	(gmon_cg_arc_record): Delete.
	* gmon_io.c (put_vma): Declare "static".
	(get_vma): Ditto.
	(gmon_io_write): New function.
	(gmon_io_write_8): Ditto.
	(gmon_io_write_32): Ditto.
	(gmon_io_write_vma): Ditto.
	(gmon_io_read): Ditto.
	(gmon_io_read_32): Ditto.
	(gmon_io_read_vma): Ditto.
	* basic_blocks.c (bb_read_rec): Use gmon_io_read* / gmon_io_write*
	to read/write data file in a more portable fashion.
	(bb_write_blocks): Ditto.
	* call_graph.c (cg_read_rec): Ditto.
	(cg_write_arcs): Ditto.
	* hist.c (hist_read_rec): Ditto.
	(hist_write_hist): Ditto.
	From Jes Sorensen  <jes@linuxcare.com>
	* gmon_out.h: Use GMON_PTR_SIZE instead of sizeof(char*).
	* gmon.h: Ditto.
	* configure.in: Get GMON_PTR_SIZE from existing <sys/gmon_out.h>
	if it exists.
	* acconfig.h: New file. Mention and document GMON_PTR_SIZE.
	* gconfig.h: Regenerate.
	* configure: Regenerate.
	* Makefile.in: Regenerate.

	2001-02-27  Alan Modra  <alan@linuxcare.com.au>
	* configure.in (BFD_VERSION): New.
	(AM_INIT_AUTOMAKE): Use $BFD_VERSION.
	* configure: Regenerate.
	* gconfig.in: Regenerate.
	* Makefile.am: Run "make dep-am"
	* Makefile.in: Regenerate.

2001-06-10  Philip Blundell  <philb@gnu.org>

	* configure.in: Set version to 2.11.1.
	* configure: Regenerate.

2001-06-07  Alan Modra  <amodra@bigpond.net.au>

	* Many files: Update copyright notices.

2001-03-16  Philip Blundell  <philb@gnu.org>

	* configure: Regenerate.

2001-03-11  Philip Blundell  <philb@gnu.org>

	* configure.in: Set version to 2.11.

2001-01-27  Michael Sokolov  <msokolov@ivan.Harhan.ORG>

	* basic_blocks.c: #include <unistd.h> only if it exists.

2000-11-06  Nick Clifton  <nickc@redhat.com>

	* gprof.texi: Add GNU Free Documentation License.

2000-09-07  H.J. Lu  <hjl@gnu.org>

	* configure.in (AC_ISC_POSIX): Put after AC_CANONICAL_SYSTEM.
	* configure: Rebuild.

2000-09-06  Alexandre Oliva  <aoliva@redhat.com>

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

2000-09-02  Nick Clifton  <nickc@redhat.com>

	* configure.in: Increase version number to 2.10.91.
	* configure: Regenerate.
	* aclocal.m4: Regenerate.
	* config.in: Regenerate.
	
2000-08-31  Alexandre Oliva  <aoliva@redhat.com>

	* acinclude.m4: Include libtool and gettext macros from the
	top level.
	* aclocal.m4, configure: Rebuilt.

2000-07-26  Nick Clifton  <nickc@cygnus.com>

	* bb_exit_func.c: Assign copyright to FSF.  Note that David 
	Mosberger-Tang <David.Mosberger@acm.org> continuted this code.

2000-07-24  Nick Clifton  <nickc@cygnus.com>

	* basic_blocks.c: Add copyright notice.
	* basic_blocks.h: Add copyright notice.
	* call_graph.c: Add copyright notice.
	* call_graph.h: Add copyright notice.
	* cg_print.c: Add copyright notice.
	* cg_print.h: Add copyright notice.
	* corefile.c: Add copyright notice.
	* corefile.h: Add copyright notice.
	* gmon_io.c: Add copyright notice.
	* gmon_io.h: Add copyright notice.
	* gmon_out.h: Add copyright notice.
	* hist.c: Add copyright notice.
	* hist.h: Add copyright notice.
	* search_list.c: Add copyright notice.
	* search_list.h: Add copyright notice.
	* source.c: Add copyright notice.
	* source.h: Add copyright notice.
	* sym_ids.c: Add copyright notice.
	* sym_ids.h: Add copyright notice.
	* symtab.c: Add copyright notice.
	* symtab.h: Add copyright notice.

2000-07-05  Kenneth Block  <krblock@computer.org>

        * gprof.c: Add optional style to demangle switch
        * gprof.texi: Document optional style to demangle switch.

2000-06-05  DJ Delorie  <dj@redhat.com>

	* MAINTAINERS: new

2000-07-01  Alan Modra  <alan@linuxcare.com.au>

	* Makefile.am (DEP): Fix 2000-06-22.  grep after running dep.sed
	(CLEANFILES): Add DEPA.
	* Makefile.in: Regenerate.

2000-06-22  Alan Modra  <alan@linuxcare.com.au>

	* Makefile.am (DEP): grep for leading `/' in DEP1, and fail if we
	find one.
	* Makefile.in: Regenerate.

2000-06-20  Alan Modra  <alan@linuxcare.com.au>

	* source.c (annotate_source): Correct pointer comparison when
	checking for backslashes.

2000-06-13  H.J. Lu  <hjl@gnu.org>

	* configure: Regenerate.

2000-06-08  David O'Brien  <obrien@FreeBSD.org>

	* configure.in (VERSION): Update to show this is the CVS mainline.

2000-06-07  Philippe De Muyter  <phdm@macqel.be>

	* source.c: Remove direct inclusion of sys/stat.h.

2000-05-31  Nick Clifton  <nickc@cygnus.com>

	* gprof.h (_): Revert previous delta.  We want to use gettext,
	not dgettext in the _ macro.

2000-05-29  Alan Modra  <alan@linuxcare.com.au>

	* gprof.h (_): Use BFD version.

2000-05-26  Nick Clifton  <nickc@cygnus.com>

	* gprof.c (main): When calling getopt_long indicate that the 'd'
	switch takes an optional argument, whereas the 'D' switch takes no
	argument at all.

2000-05-26  Alan Modra  <alan@linuxcare.com.au>

	* dep-in.sed: Copy from ../binutils.
	* Makefile.am: Update dependencies with "make dep-am"
	* Makefile.in: Regenerate.

	* gprof.h: Remove most nls defines.  They are pulled in by
	bfd/sysdep.h.  #include "ansidecl.h" not <ansidecl.h>

2000-05-26  Eli Zaretskii  <eliz@is.elta.co.il>

	* gprof.texi: Fix numerous typos. Mention some DOS/Windows related
	issues.

	* configure.in: Check for setmode function.
	* configure: Regenerate.

	* gmon_io.h (SET_BINARY) [HAVE_SETMODE]: Define.

	* gmon_io.c (gmon_out_read) [SET_BINARY]: Switch stdin into binary
	mode.

	* source.c: Include filenames.h and sys/stat.h.
	(source_file_lookup_path, source_file_lookup_name): Use
	FILENAME_CMP to compare file names.
	(annotate_source) [__MSDOS__]: If "filename-ann" would overwrite
	"filename", replace the extension with ".ann".
	[HAVE_DOS_BASED_FILE_SYSTEM]: Support file names with
	backslashes and drive letters.
	Use IS_ABSOLUTE_PATH.

	* search_list.h (PATH_SEP_CHAR): Define.

	* search_list.c (search_list_append): Use PATH_SEP_CHAR.

	* hertz.c (HERTZ) [__MSDOS__]: Don't define unless they have
	neither HAVE_SETITIMER nor HAVE_SYSCONF.
	[HAVE_SETITIMER]: If they define both HAVE_SETITIMER and
	HAVE_SYSCONF, try setitimer and fall back on sysconf.

Fri Apr  7 15:56:57 2000  Andrew Cagney  <cagney@b1.cygnus.com>
 
	* configure.in (WARN_CFLAGS): Set to -W -Wall by default.  Add
 	--enable-build-warnings option.
	* Makefile.am (AM_CFLAGS, WARN_CFLAGS): Add definitions.
	* Makefile.in, configure, aclocal.m4: Re-generate.

2000-04-05  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* gprof.c (copyright): Do not use N_ in array initializer.

2000-04-04  Alan Modra  <alan@linuxcare.com.au>

	* po/gprof.pot: Regenerate.

	* gprof.c (usage): Restore translated part of bug string.

	* Makefile.am (BASEDIR): Define.
	(BFDDIR): Define.
	(INCDIR): Define.
	(MKDEP): Define.
	(INCLUDES): Add "-I."
	(DEP, DEP1, dep.sed, dep, dep-in, dep-am): New targets.
	(CLEANFILES): Define.
	Update dependencies.
	* Makefile.in: Regenerate.

2000-04-03  Alan Modra  <alan@linuxcare.com.au>

	* gprof.h: #include "bin-bugs.h".
	* gprof.c (usage): Use REPORT_BUGS_TO.

2000-03-31  Alan Modra  <alan@linuxcare.com.au>

	* symtab.c (symtab_finalize): Don't use post-increment on
	structure copy, to work around a ppc gcc bug.

1999-09-29  Mark Kettenis  <kettenis@gnu.org>

        * hertz.h [MACH] (hertz): Remove macro.  The
        <machine/mach_param.h> include doesn't exist on al Mach based
        systems, and the definition of hertz breaks compilation of hertz.c
        anyway.

2000-02-22  Ian Lance Taylor  <ian@zembu.com>

	From Brad Lucier <lucier@math.purdue.edu>:
	* i386.c (i386_find_call): Add cast to ensure that printf argument
	matches format.
	* tahoe.c (tahoe_find_call): Likewise.
	* vax.c (vax_find_call): Likewise.

2000-01-27  Alan Modra  <alan@spri.levels.unisa.edu.au>

	* utils.c (print_name_only): Don't pass error strings to
	printf as format arg.

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

	* gmon_io.c (gmon_out_read): Make sure that sensible values
	are extracted from a raw header.

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

	From Brad Lucier <lucier@math.purdue.edu>:
	* corefile.c (core_create_line_syms): Add cast for printf.

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

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

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

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

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

	* corefile.c (core_create_function_syms): Add ATTRIBUTED_UNUSED.
	* sym-ids.c (non_existent_file): Fully initialize structure.

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

	* Many files: Add casts in many print statements to cast bfd_vma
	values to unsigned long when calling printf.
	* Makefile.am ($(OBJECTS)): Add gmon.h.
	* Makefile.in: Rebuild.

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

	* gprof.texi: Fix typo.

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

	From Bob Byrnes <byrnes@curl.com>:
	* cg_dfn.c: Include "libiberty.h"
	(DFN_INCR_DEPTH): Define instead of DFN_DEPTH.
	(dfn_stack): Define as pointer rather than array.
	(pre_visit): Reallocate dfn_stack as needed.

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

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

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

	* gprof.h (LC_MESSAGES): Never define.
	* gprof.c (main): Don't pass LC_MESSAGES to setlocale if the
	system does not define it.

1999-04-05  H.J. Lu  <hjl@gnu.org>

	* corefile.c (core_create_line_syms): Don't use fixed size array
	for prev_name and prev_filename.

1999-04-04  Michael Hohmuth  <hohmuth@innocent.com>

	* gprof.h (FF_BSD44): Define.
	* gmon.h (struct raw_phdr): Add version, profrate, and spare
	fields unconditionally.
	(struct old_raw_phdr): New struct.
	* gprof.c (main): Handle -O 4.4bsd.
	* gmon_io.c (gmon_out_read): Handle BSD 4.4 format, either
	automatically or by user specification.
	(gmon_out_write): Handle BSD 4.4 format.
	* configure.in: Don't set BSD44_FORMAT.
	* gprof.texi (Miscellaneous Options): Document -O 4.4bsd.
	* configure, gconfig.in: Rebuild.

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

	* configure.in: Change AC_PREREQ to 2.13.  Change AM_PROG_INSTALL
	to AC_PROG_INSTALL.  Remove AM_CYGWIN32.  Change AM_EXEEXT to
	AC_EXEEXT.  Add comment to AC_DEFINE.
	* acconfig.h: Remove.
	* aclocal.m4: Rebuild.
	* configure: Rebuild.
	* Makefile.in: Rebuild.
	* gconfig.in: Rebuild.

Sun Dec  6 21:57:50 1998  Ian Lance Taylor  <ian@cygnus.com>

	* gprof.texi (Symspecs): Mention that you have to add any
	underscore yourself when naming a symbol.

Mon Nov  2 15:05:33 1998  Geoffrey Noer  <noer@cygnus.com>

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

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

	Avoid some overflow cases:
	* basic_blocks.h (bb_min_calls): Change to unsigned long.
	* call_graph.h (cg_tally): Change count parameter to unsigned
	long.
	* cg_arcs.h (Arc): Change count field to unsigned long.
	(arc_add): Change count parameter to unsigned long.
	* source.h (Source_File): Change ncalls field to unsigned long.
	* symtab.h (Sym): Change fields ncalls, bb_calls, and
	cg.self_calls to unsigned long.
	* Many files: Update accordingly.

	* configure, Makefile.in, aclocal.m4: Rebuild with current tools.

Fri Jul 10 17:29:49 1998  Stan Cox  <scox@equinox.cygnus.com>

	* configure.in (BSD44_FORMAT): Define for cygwin32, win32, mingw32
	* configure: Rebuild.

Fri Jun 12 13:40:05 1998  Tom Tromey  <tromey@cygnus.com>

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

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

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

Tue May  5 18:28:40 1998  Tom Tromey  <tromey@cygnus.com>

	* gprof.h (_): Undefine BFD's version.

Tue Apr 28 19:17:33 1998  Tom Tromey  <tromey@cygnus.com>

	* gprof.c (main): Conditionally call setlocale.
	* gprof.h: Include <locale.h> if HAVE_LOCALE_H.
	(LC_MESSAGES): Now can be defined even when ENABLE_NLS.

Tue Apr 28 19:50:09 1998  Ian Lance Taylor  <ian@cygnus.com>

	* corefile.c: Rename from core.c.
	* corefile.h: Rename from core.h.
	* Many .c files: Include corefile.h rather than core.h.
	* Makefile.am (sources): Change core.c to corefile.c.
	(noinst_HEADERS): Change core.h to corefile.h.
	($(OBJECTS)): Depend upon corefile.h rather than core.h.
	(corefile.o): Rename target from core.o, depend upon corefile.c.
	* Makefile.in, po/POTFILES.in: Rebuild.

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

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

Wed Apr 22 16:01:17 1998  Tom Tromey  <tromey@cygnus.com>

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

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

	* gprof.h: Added includes and defines for gettext.
	* configure.in (ALL_LINGUAS): New macro.
	Call CY_GNU_GETTEXT.  Create po/Makefile.in and po/Makefile.
	* acconfig.h (ENABLE_NLS, HAVE_CATGETS, HAVE_GETTEXT, HAVE_STPCPY,
	HAVE_LC_MESSAGES): Define.
	* gprof.c (main): Call setlocale, bindtextdomain, textdomain.
	* Makefile.am (SUBDIRS): New macro.
	(INCLUDES): Look in intl dirs for headers.  Define LOCALEDIR.
	(gprof_DEPENDENCIES): Added INTLDEPS.
	(gprof_LDADD): Added INTLLLIBS.
	(POTFILES): New macro.
	(po/POTFILES.in): New target.
	* Many files: Wrap user-visible strings with gettext invocation.

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

	From hjl@lucon.org <H.J. Lu>:
	* Makefile.am (diststuff): New target.
	* Makefile.in: Rebuild.

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

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

	* Branched binutils 2.9.

Sat Mar 28 23:09:08 1998  Ian Lance Taylor  <ian@cygnus.com>

	Fix some gcc -Wall warnings:
	* cg_arcs.c (num_cycles): Change to unsigned int.
	(numarcs): Likewise.
	(arc_add): Change maxarcs to unsigned int.
	(cg_assemble): Change index to unsigned int.
	* cg_arcs.h (num_cycles, numarcs): Update declarations.
	* cg_print.c (cg_print): Change index to unsigned int.
	(cg_print_index): Change index, nnames, todo, i, and j to unsigned
	int.
	(cg_print_file_ordering): Change symbol_count and index2 to
	unsigned int.
	* core.c (symbol_map_count): Change to unsigned int.
	(core_create_function_syms): Change j to unsigned int.
	(core_create_line_syms): Add cast to avoid warning.
	* hist.c (hist_assign_samples): Change j to unsigned int.
	(hist_print): Change index to unsigned i nt.  Add cast to avoid
	warning.
	* sym_ids.c (parse_spec): Add casts to avoid warning.
	* symtab.c (symtab_finalize): Change j to unsigned int.
	(sym_lookup): Update printf format strings.
	* symtab.h (Sym_Table): Change len to unsigned int.
	* tahoe.c (tahoe_reladdr): Add casts to avoid warnings.

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

	Add --demangle and --no-demangle options:
	* gprof.h (demangle): Declare.
	* gprof.c (demangle): New global variable.
	(OPTION_DEMANGLE, OPTION_NO_DEMANGLE): Define.
	(long_options): Add "demangle" and "no-demangle".
	(usage): Mention --demangle and --no-demangle.
	(main): Handle OPTION_DEMANGLE and OPTION_NO_DEMANGLE.
	* utils.c (print_name_only): Only demangle symbol name if demangle
	is true.
	* gprof.texi (Output Options): Document new options.

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

	* Makefile.in: Rebuild with automake 1.2e.
	* aclocal.m4, configure: Rebuild with libtool 1.2.

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

	* gprof.c (usage): Update bug-gnu-utils address.

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

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

Fri Feb  6 12:02:28 1998  Ian Lance Taylor  <ian@cygnus.com>

	* alpha.c (alpha_Instruction): Use int, not signed.

Fri Feb  6 02:00:19 1998  Jeffrey A Law  (law@cygnus.com)

	* core.c (core_init): Adding missing "break".

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

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

Tue Feb  3 14:25:25 1998  Brent Baccala  <baccala@freesoft.org>

	* bbconv.pl: New file.
	* Makefile.am (EXTRA_DIST): Add bbconv.pl.
	* Makefile.in: Rebuild.

	* gprof.texi: Extensive additions to document all arguments and
	output formats.

	* symtab.c (symtab_finalize): Prefer function symbols over line
	symbols.
	(dbg_sym_lookup): Correct debugging messages.

	* gprof.c (main): --sum implies --line.

	* cg_print.c (cg_print): When doing line by line profiling, don't
	use a non-function as a main listing item.

	* call_graph.c (cg_tally): When using line by line profiling, use
 	the function symbol as the child.

	* symtab.h (NBBS): Define.
	(Sym): Add bb_addr and bb_calls fields.
	* basic_blocks.c (bb_read_rec): Save multiple basic blocks per
	symbol.
	(bb_write_blocks): Adjust for multiple basic blocks per symbol.
	(print_exec_counts): Don't check whether a symbol is the start of
	a basic block.  Print all basic blocks for a symbol.
	(annotate_with_count): Rewrite to print all basic block counts and
	to pay attention to width argument.
	(print_annotated_source): Don't check whether symbol is the start
	of a basic block.

	Make it possible to build a cross gprof, although a few cases are
	still not handled:
	* configure.in: Don't set MY_TARGET.
	* gprof.h: Don't include MACHINE_H.  Don't define FOPEN_RB or
	FOPEN_WB; just get them from sysdep.h.
	* core.h (min_insn_size, offset_to_code): Declare.
	* core.c (MIN_INSN_SIZE): Don't define.
	(min_insn_size, offset_to_code): New variables.
	(core_init): Initialize min_insn_size and offset_to_code.
	(find_call): New function.
	(core_create_line_syms): Don't use min_dist.  Set is_static in
	pass 2.
	* hist.c (UNITS_TO_CODE): Define.
	* gprof.c (default_excluded_list): Add "__mcount_internal".
	* gmon.h: Change TARGET_alpha to __alpha__.
	* hertz.h: Ifdef MACH, define hertz as HZ.
	* alpha.c (alpha_Instruction): Rename from Instruction.  Change
	all references.
	(alpha_find_call): Rename from find_call.
	* alpha.h: Remove.
	* dummy.c, dummy.h: Remove.
	* i386.c (i386_iscall): Rename from iscall.  Change all
	references.  Check for call instruction, not jump or lcall.
	(i386_find_call): Rename from find_call.  Correct for VMA.
	Correct call destination computation.  Don't dereference symbol if
	it is NULL.
	* i386.h: Remove.
	* ns532.c, ns532.h: Remove.
	* sparc.c (CALL): Define.
	(sparc_find_call): Rename from find_call.
	* sparc.h: Remove.
	* tahoe.c: Include cg_arcs.h, core.h, hist.h, and symtab.h.  Don't
	include time_host.h.
	(CALLF, PC): Define.
	(enum tahoe_opermodes, tahoe_operandenum): Define.  Rename all
	references to opermodes or operandenum to these.
	(tahoe_operandmode): Rename from operandmode.  Call abort if
	switch does not return.
	(tahoe_operandname): Rename from operandname.  Call abort if
	switch does not return.
	(tahoe_operandlength): Rename from operandlength.  Call abort if
	switch does not return.
	(tahoe_reladdr): Rename from reladdr.
	(tahoe_find_call): Rename from find_call.  Use core_text_space
	rather than textspace.
	* tahoe.h: Remove.
	* vax.c (CALLS, PC): Define.
	(enum opermodes, operandenum, struct modebyte): Define.
	(vax_operandmode): Rename from operandmode.  Call abort if switch
	does not return.
	(vax_operandname): Rename from operandname.  Call abort if switch
	does not return.
	(vax_operandlength): Rename from operandlength.  Call abort if
	switch does not return.
	(vax_reladdr): Rename from reladdr.
	(vax_find_call): Rename from find_call.
	* vax.h: Remove.
	* Makefile.am (AUTOMAKE_OPTIONS): Set to cygnus.
	(MY_TARGET): Remove.
	(INCLUDES): Remove -DTARGET_$(MY_TARGET) and -DMACHINE_H=
	\"$(MY_TARGET).h\".
	(gprof_SOURCES): Add i386.c, alpha.c, vax.c, tahoe.c, sparc.c.
	(gprof_DEPENDENCIES): Remove $(MY_TARGET).o.
	(gprof_LDADD): Likewise.
	(noinst_HEADERS): Remove alpha.h, i386.h, ns532.h, sparc.h,
	tahoe.h, vax.h, dummy.h.
	(EXTRA_DIST): Remove alpha.c, i386.c, ns532.c, sparc.c, tahoe.c,
	vax.c, dummy.c.
	($(OBJECTS)): Don't depend upon $(MY_TARGET).h.
	($(MY_TARGET).o): Remove target.
	(i386.o, alpha.o, vax.o, tahoe.o, sparc.o): New targets.
	* configure, Makefile.in, aclocal.m4: Rebuild.

Mon Dec 29 14:17:08 1997  Ian Lance Taylor  <ian@cygnus.com>

	* core.c (core_sym_class): Treat weak symbols as text symbols.
	From Dean Gaudet <dgaudet@arctic.org>.

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

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

Sat Aug  9 16:25:01 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Change version number to 2.8.2.  Call
	AM_PROG_LIBTOOL.  Remove shared library handling; now handled by
	libtool.  Add AM_CONFIG_HEADER.  Change AC_PROG_INSTALL to
	AM_PROG_INSTALL.  Add AM_EXEEXT.
	* Makefile.am (LINK): Remove.
	(gprof_LDFLAGS): Remove
	(gprof_DEPENDENCIES): Change libbfd.a to libbfd.la.
	(gprof_LDADD): Likewise.
	($(OBJECTS)): Depend upon gconfig.h and ../bfd/config.h.
	* gprof.h: Undefine PACKAGE and VERSION after including BFD
	sysdep.h file, then include new gconfig.h file.
	* gprof.c (VERSION): Don't define.
	* acconfig.h: New file.
	* stamp-h.in: New file.
	* gconfig.in: New file, created by autoheader.
	* Makefile.in, configure, aclocal.m4: Rebuild.

Sat Jun 28 23:20:42 1997  Ian Lance Taylor  <ian@cygnus.com>

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

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

	* Makefile.am (INCLUDES): Add -DDEBUG.
	* Makefile.in: Rebuild.

Tue Apr 15 14:19:30 1997  Ian Lance Taylor  <ian@cygnus.com>

	Change to use automake:
	* Makefile.am: New file.
	* configure.in: Run AM_INIT_AUTOMAKE, AM_MAINTAINER_MODE, and
	AM_CYGWIN32.
	* aclocal.m4: New file, created by aclocal.
	* Makefile.in: Replace with file created by automake --cygnus.
	* configure: Rebuild.

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

	* gprof.c (VERSION): Define as "2.8.1".

	* Branched binutils 2.8.

Thu Mar 27 17:15:23 1997  Ian Lance Taylor  <ian@cygnus.com>

	* gprof.c (main): Correct copyright message.

Mon Mar 24 11:12:26 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (.c.o): Define TARGET_$(MY_TARGET) when compiling.
  	* gmon.h: Use bytes counts rather than sizeof in struct raw_phdr
 	and struct raw_arc.

Mon Mar 17 10:54:47 1997  David Mosberger-Tang  <davidm@azstarnet.com>

	* cg_arcs.c (arc_add): memset() newly alloced arc to ensure
	all fields are initialized with 0.

Sat Mar 15 19:17:31 1997  H.J. Lu  <hjl@lucon.org>

	* symtab.h (find_call): Declare.
	* cg_arcs.c (cg_assemble): Don't declare find_call.
	* hist.c (scale_and_align_entries): Declare.

Thu Feb 27 12:46:53 1997  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Define BSD44_FORMAT if the target looks like a
	BSD4.4 derived system.
	* configure: Rebuild.
	* Makefile.in (.c.o): Add @DEFS@.
	* gmon_io.c (gmon_out_read): In BSD44_FORMAT code, get profrate
	from profrate field, not version field.

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

	* dummy.c (find_call): Clear ignore_direct_calls.

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

	* Makefile.in (.c.o): Add -D_GNU_SOURCE.  Put $(CFLAGS) at the
	end.
	(gprof): Put $(CFLAGS) after the other options.

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

	* configure: Rebuild with autoconf 2.12.

Wed Oct  2 15:23:16 1996  Ian Lance Taylor  <ian@cygnus.com>

	* sparc.c (find_call): Align p_lowpc to avoid bus error.

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

	* gprof.c (usage): Print bug report address.
	(main): Change version printing to match current GNU standards.

Fri Aug 30 12:16:11 1996  Ian Lance Taylor  <ian@cygnus.com>

	* gmon.h: Replace #elif with #else/#endif.

Thu Aug 29 17:04:10 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

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

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

	* configure.in: Set and substitute HLDENV.
	* configure: Rebuild.
	* Makefile.in (HLDENV): New variable.
	(gprof): Use $(HLDENV).

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

	* core.c (read_function_mappings): Cast xmalloc return.

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

	* gprof.c (VERSION): Define as "2.7.1".

	* Released binutils 2.7.

	* bb_exit_func.c: Rename from __bb_exit_func.c, so that it can be
	stored on a System V file system.

Thu Jun 27 11:36:22 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Call AC_ISC_POSIX.
	* configure: Rebuild.
	* Makefile.in (gprof): Pass $(CFLAGS) during link.
	* hertz.c: Don't include <sys/time.h>; let sysdep.h handle that.
	If HAVE_SETITIMER is not defined, try using sysconf.

Mon Jun 24 18:27:28 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (exec_prefix, bindir, libdir, mandir, infodir, datadir,
	INSTALL_PROGRAM, INSTALL_DATA): Use autoconf-set values.
	* configure.in (AC_PREREQ): autoconf 2.5 or higher.
	(AC_PROG_INSTALL): added.
	* configure: Rebuilt.

Mon Jun 24 12:03:09 1996  Ian Lance Taylor  <ian@cygnus.com>

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

Tue Jun 18 17:35:58 1996  Ian Lance Taylor  <ian@cygnus.com>

	* core.c (core_create_line_syms): Use xstrdup rather than strdup.
	* source.c (source_file_lookup_path): Likewise.

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

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

Thu Mar 21 17:18:25 1996  Ian Lance Taylor  <ian@cygnus.com>

	* core.c (core_create_function_syms): Move filename and func_name
	inside ifdef where they are used.

	* core.c (core_sym_class): Parenthesize && within ||.
	* symtab.c (symtab_finalize): Correct parenthesization.

	* cg_print.h (cg_print_file_ordering): Declare.
	(cg_print_function_ordering): Declare.

	* __bb_exit_func.c (__bb_exit_func): Replace bcopy with memcpy.
	* cg_arcs.c (arc_add): Likewise.
	* cg_print.c (cg_print_function_ordering): Likewise.

Thu Mar 21 17:02:02 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* gprof.c (default_excluded_list): Add "__mcount".

	* gprof.c (main): Change ifdef __osf__ to __alpha__.

	* gmon_io.c (gmon_out_read): If BSD44_FORMAT is defined, get the
	profiling rate from the header.

	* gmon.h (struct raw_phdr): Only include pad if both __alpha__ and
	__osf__ are defined.  Add new fields if BSD44_FORMAT is defined.

	* alpha.h (MIN_INSN_SIZE): Define.
	* core.c (MIN_INSN_SIZE): If not defined, define as 1.
	(core_sym_class): Ignore debugging symbols.
	(core_create_line_syms): Use MIN_INSN_SIZE when gathering line
	information.

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

	* cg_print.c (cg_print_function_ordering): Fix __GNUC__ misspelled
	as __GNU_C__.
	(order_and_dump_functions_by_arcs): Likewise.

Tue Mar 12 12:19:50 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure: Rebuild with autoconf 2.8.

Sun Feb 18 15:06:18 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Check for 'do not mix' from native linker before
 	trying to use -rpath.
	* configure: Rebuild.

Tue Feb 13 15:32:53 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Set HDLFLAGS for *-*-hpux with --enable-shared.
	* configure: Rebuild.

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

	* configure.in: Don't set CC.  Look for --enable-shared.  Set
	BFDLIB and HLDFLAGS and substitute them.
	* configure: Rebuild.
	* Makefile.in (LIBS): Use @BFDLIB@.
	(HLDFLAGS): New variable.
	(gprof): Use $(HLDFLAGS).

Mon Feb  5 16:34:44 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>:
	* Makefile.in (LIBDEPS): New variable.
	(LIBS): Use -L../bfd -lbfd.
	(gprof): Depend upon $(LIBDEPS) rather than $(LIBS).

Sat Dec 30 10:11:03 1995  Jeffrey A Law  (law@cygnus.com)

	* gprof.c (long_options): Add "--function-ordering" and
	"--file-ordering" options.
	(usage): Add new options to usage message.
	(main): Handle new options.
	* gprof.h (STYLE_FUNCTION_ORDER): Define.
	(STYLE_FILE_ORDER): Define.
	(function_mapping_file): Declare.
	* cg_arcs.c (arcs, numarcs): New globals.
	(arc_add): Put new arcs into the arc array so the function/file
	ordering code can examine them.
	* cg_arcs.h (struct arc): New field "has_been_placed".
	(arcs, numarcs): Declare new globals.
	* core.c (symbol_map, symbol_map_count): New globals.
	(read_function_mappings): New function to read in a function
	to object map file.
	(core_init): Call read_function_mappings if a function mapping
	file exists.
	(core_create_function_syms): Handle function to object file
	mappings.
	* symtab.h (struct sym): New fields "mapped", "has_been_placed",
	"nuses", "prev".
	* cg_print.c (cmp_arc_count): New function for sorting arcs.
	(cmp_fun_nuses): Likewise for functions.
	(cg_print_function_ordering): New function to print a suggested
	function ordering.
	(cg_print_file_ordering): Likewise for ordering .o files.
	(order_and_dump_functions_by_arcs): Helper function for function
	and object file ordering code.

Sun Dec 24 21:32:27 1995  Jeffrey A Law  (law@cygnus.com)

	* core.c (core_sym_class): Ignore symbols without BSF_FUNCTION
	set if ignore_non_function is set.
	* gprof.h (ignore_non_functions): Declare.
	* gprof.c (ignore_non_functions): Define.
	(long_options): Add "ignore-non-functions".
	(usage): Add new options.
	(main): Recognize "-D" and "--ignore-non-functions" option.

Tue Nov 21 13:24:39 1995  Ken Raeburn  <raeburn@cygnus.com>

	* Makefile.in (.m.c): Strip out directory name from function
	name.

	* hist.c (scale_and_align_entries): Don't use DEFUN_VOID.  Do
	UNITS_TO_CODE adjustment unconditionally; compiler can optimize
	away zero-offset case.  Refer to scaled_addr, not aligned_addr.

	* vax.c: Don't include vax.h here.

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

	Version 2.6 released.

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

	* gprof.c (main): Cast getenv return value.

Mon Nov  6 15:05:00 1995  Ken Raeburn  <raeburn@cygnus.com>

	* Makefile.in (TAGS): New target.

Wed Nov  1 12:51:21 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* Makefile.in (DISTSTUFF):  Rename to GEN_FILES, to avoid confusion.
	(all):  Depend on $(GEN_FILES), not diststuff (which also depends
	on info).

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

	* sym_ids.c: Include <ctype.h>.

Wed Oct 25 13:24:31 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* Makefile.in (diststuff):  Also make info.
	(mostlyclean):  Don't remove gprof.info*.
	(maintainer-clean realclean):  Also remove *.info*.

Fri Oct  6 16:25:32 1995  Ken Raeburn  <raeburn@cygnus.com>

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

	* Makefile.in: Add dependecies for $(OBJS) on header files.

	* cg_print.c (print_cycle, print_members, cg_print_index): Fix new
	style output format to make it consistent.
	* dummy.c (find_call): Fix typo in error message.

Wed Sep 20 13:21:02 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (maintainer-clean): New target, synonym for
	realclean.

Fri Sep  8 14:38:08 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (install): Don't install in $(tooldir).

Fri Aug 25 15:30:05 1995  Ken Raeburn  <raeburn@cygnus.com>

	NS32K changes from Ian Dall:
	* configure.in: Use ns32k, not ns532.
	* ns532.c: Include symtab.h.
	(find_call): Renamed from findcall.  Print a message.
	* ns532.h: Remove dummy.h comments.

Tue Aug 22 10:00:45 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* Makefile.in (install): Remove "brokensed" hack, unnecessary now
	that we're using autoconf.

Wed Jul 19 18:46:13 1995  Fred Fish  <fnf@cygnus.com>

	* core.c (get_src_info): Cast arg 7 of bfd_find_nearest_line
	to proper type of "unsigned int *".

Fri Jun 16 15:29:36 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* configure.in: Use changequote around use of [].

Mon Jun 12 12:14:52 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* Makefile.in (distclean, realclean): Remove config.cache and
	  config.log.

Wed May 17 17:56:53 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* Makefile.in (Makefile): Added config.status to dependency list.
	  (config.status): New target.
	  (SHELL): New definition.

Tue Apr 25 21:11:12 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in (install): Depend on "all".

Thu Apr 20 17:29:07 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Makefile.in: Change all references to MY_MACHINE to MY_TARGET,
	to match configure script.

Wed Apr 19 11:19:37 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* gen-c-prog.awk: Changed reference to "make-c-prog.awk" in
	  comment emitted by this script to gen-c-prog.awk.

	* Makefile.in, configure.in: Converted to use autoconf.
	* configure: New file, generated with autoconf 2.3.
	* config/{mt-alpha, mt-dummy, mt-i386, mt-ns532, mt-sparc,
	  mt-tahoe, mt-vax}: Removed.

Mon Mar 13 21:44:24 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* __bb_exit_func.c: New file, from David Mosberger-Tang.

	Thu Feb  9 16:56:07 1995  David Mosberger-Tang  <davidm@piston.cs.arizona.edu>

	* All *.c: More cleanup towards GNU format.

	* gmon_out.h (struct gmon_hist_hdr, struct gmon_cg_arc_record): 
	replaced sizeof (bfd_vma) by size (char*) because Ken tells me
	that bfd_vma is only guaranteed to be at least as big as a pointer.

	(GMON_Record_tag): added explicit enumeration values to ensure
	compatibility across compilers.

	* gmon_io.c (get_vma, put_vma): replaced sizeof(bfd_vma) by
	sizeof(char*).

Tue Feb  7 17:24:12 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* All *.c and *.h files: Ran "indent -gnu".  Cleaned up a couple
	of constructs GNU indent couldn't handle.  Block comments not yet
	rewritten in GNU format.

	* gprof.c (VERSION): Changed to 2.6, to get in sync for next
	binutils release.

Sun Feb  5 16:19:46 1995  David Mosberger-Tang  <davidm@piston.cs.arizona.edu>

	* symtab.c (symtab_finalize): ensure globals symbols really
	are favored over static ones---even if their name looks less
	preferable; this is important for HP-UX; for example, there
	is a static label Ltext_something that aliases the global
	symbol _start

	* hist.c (hist_print): auto-scaling is now in effect for FSF-style
	output only; also, auto-scaling is now performed based on
	per-call, rather than total execution time, which is what it was
	meant to be.

	* gprof.h (File_Format): new type.

	* gprof.c (VERSION): upped to 2.7---seems to be completely out of
	sync with Cygnus version numbers though...

	(long_options): renamed --gmon-info to --file-info, --width added,
	renamed --old-file-format to --file-format
	(main): dito; also added support to read prof files, but as
	mon_out_read() is not implemented, it's #ifdef'd out for now

	(usage): update to reflect new options.

	* gmon_io.c: replaced "old_file_format" by more general
        "file_format" option

	* gmon.h (struct raw_phdr): fixed declaration for OSF/1.

	* core.c (core_sym_class): added back check for __gnu_compiled and
	___gnu_compiled for the benefit of systems without
	bfd_find_nearest_line() support

	(get_src_info): now the libbfd is fixed, invoke bfd_find_nearest_line()
	with section-relative addresses

	(core_create_function_syms): get_src_info() calls are currently
	enabled for OSF/1 only.  It appears to work allright for SunOS
        4.1.x as well, but on SPARCs it gets painfully slow with the
        current implementation of aout_32_find_nearest_line();
        unfortunately, this means that static functions will not have their
	filename printed in the call-graph function index; line-level
	profiling should still work, but requires some patience

	* cg_print.c (cg_print_index): sanitised printing of index when
	using FSF-style output; in particular, output width is now controlled
	via option --width and the function tries hard to keep columns
	aligned even in the presence of (occasional) long names

	* NOTES: a first shot at updating the documentation.

Wed Feb  1 19:07:44 1995  David Mosberger-Tang  <davidm@piston.cs.arizona.edu>

	* core.c (core_create_function_syms): fixed computation of min_vma
	and max_vma.

	* *.c: removed rcsid.

Tue Jan 31 16:18:18 1995  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* Lots of changes from David Mosberger-Tang:

	Tue Oct 25 19:20:14 1994  David Mosberger-Tang	<davidm@piston.cs.arizona.edu>

	* gprof.c (main): put parentheses around & within &&.

	* basic_blocks.c (bb_read_rec): print warning message (once) when
	ignoring basic-block execution counts.

	* source.c (source_file_lookup_name): corrected second argument to
	strcmp().

	* hist.c (print_header): merged Fri Oct 21 18:58:02 1994 change by
	Ken Raeburn <raeburn@cujo.cygnus.com> from binutils-2.5.1.

	* gmon_io.c (gmon_out_read): the output stule STYLE_GMON_INFO is now
	supported both for old and new (versioned) gmon.out files.  Old
	files are identified as version 0.

	* gmon.h (struct raw_arc): count field is now sizeof(long) bytes
	long (instead of 4) because that is what OSF/1 v3.0 uses.

	* core.c: minor fixes and debugging info changes.

	Sun Sep 11 18:47:47 1994  David Mosberger-Tang	(davidm@piston.cs.arizona.edu)

	* core.c (core_init): if .text cannot be found, try $CODE$ (the
	name of the text-section under HP-UX).

	* hist.c (hist_assign_samples): fixed off-by-one bug: highpc
	points one past the last sampling bin, so hist_scale should be
	computed as "hist_scale /= hist_num_bins", not "hist_scale /=
	hist_num_bins - 1".

	* gmon_io.c, hist.c, hist.h: renamed hist_num_samples to
	hist_num_bins.

	* configure.in: added alpha-*-*) for per-target config.

	* alpha.c, alpha.h: created.

	* gprof.c (default_excluded_list): <locore>, <hicore> added.

	* core.c (core_create_function_syms, core_create_line_syms):
	explicitly keep two sentinels "<locore>" and "<hicore>" that catch
	all addresses outside the text-space.  Thus, sym_lookup(&symtab,
	addr) continues to guarantee not to return 0 on any address.  It
	also avoids incorrectly crediting the first/last symbol in the
	text-space.

	* core.c (core_create_line_syms): always create function symbols
	first, then merge in line symbols; this is so that if parts of the
	program were compiled without -g, function-level symbols are
	available still.

	* utils.c (print_name_only): support for print_path added.

	* symtab.c (cmp_addr): also use is_func flag in comparison.
	(symtab_finalize): return immediately when table empty; now
	more careful about getting rid of the right duplicate symbol.

	* sparc.c (find_call): many fixes---this function was rather
	botched in binutils-2.4 already; it should work again.

	* source.c (source_file_lookup_path): PATH is now strdup'ed (it is
	not good to rely on get_src_info() to return distinct string
	pointers).

	* search_list.c (search_list_append): added cast for xmalloc().

	* hist.c: added explicit initialization to some of the global
	variables; fixed SItab (scales were off by a factor of 10).

	* hist.h: include of bfd.h added.

	* gprof.c, gprof.h (print_path): added.

	* gprof.h (MAX): fixed.

	* gmon_out.h: renamed gmon_time_hist_hdr to gmon_hist_hdr.

	* gmon_io.c: added some casts to (long) so we can always print as %lx

	* core.c (core_get_text_space): fixed to make it work.

	* cg_print.c (cg_print_index): added support for print_path option.

	* cg_dfn.h (cg_dfn): wrap prototype in PARAMS().

	* call_graph.c, gmon_io.c, hist.c: avoid taking address of array
	as some compilers complain (e.g., DEC's OSF/1 compiler)

	* basic_blocks.c, gmon_io.c, hist.c, source.c, sym_ids.c,
	symtab.c: calls to memset() had 2nd and 3rd args reversed.

	Sat Sep 10 21:53:13 1994  David Mosberger-Tang	(davidm@piston.cs.arizona.edu)

	* gprof.c: added "_mcount" to default_excluded_list.
	(main): if output_style==0 and there is either a histogram or a
	call-graph, always generate flat and call-graph, no matter what
	line_granularity is set to.

	* source.c (source_file_lookup_name): if searching for sf->name
	fails, try again with filename obtained after stripping off any
	partial path from sf->name.

	* gprof.h (SRCDEBUG): added.

	* search_list.c (search_list_append): directories were added in wrong
	order.

	* reimplemented selection mechanism from ground up; it is now possible
	to accurately control what gets included/excluded in each of the
	output styles;	a "symbol-specification" (spec) is the basic means
	to select a set of symbols; a spec has the syntax:

	  spec == (FILENAME:(FUNCNAME|LINE_NUM) | NAME).
	  arc == spec/spec.

	any of the terminal symbols can be empty, in which case they
	match anything (wildcards).  NAME is interpreted as a FILENAME
	if it contains a dot (e.g., foo.c), as LINE_NUM if it starts
	with a digit, and as FUNCNAME otherwise.

	For example, to get a call-graph display that ignores arcs
	from foo() to bar(), you'd say "--no-graph=foo/bar"; to
	show only arcs into bar() (no matter what the caller),
	you'd say "--graph=/bar"; and to get a call-graph without
	any arc info, you'd say "--graph=/";  similarly, to
	get a flat profile without mcount, you'd say "--no-flat=mcount"
	and to get a flat profile that shows includes all functions
	you'd say "--flat=""" (i.e., an empty spec)

	* hist.c (hist_print): top_time wasn't initialized to 0.0.

	Fri Sep	 9 01:10:21 1994  David Mosberger-Tang	(davidm@piston.cs.arizona.edu)

	* gmon_out.h: all headers now declared in terms of characters
	  to avoid getting into trouble with different compilers introducing
	  different amount of padding; the code already accessed the fields
	  through bfd functions, so that didn't have to change.

	* hist.c (hist_read_rec, hist_write_rec): added support for
	  collection pc histograms measuring quantities other than time;
	  the histogram header now includes a field that specifies the
	  dimension of the quantity measured by the histogram bins
	  (normally, this is "seconds", but other meaningful dimensions
	   include such things as "I-cache misses", "instruction issue stalls"
	   etc.); there is also a field to specify a one-character
	  abbreviation for the dimension; in the case of time, this would
	  be 's'; in most other cases it probably would be '1' (not a physical
	  dimension).

	Thu Sep	 8 16:05:08 1994  David Mosberger-Tang	(davidm@piston.cs.arizona.edu)

	* gprof.c, gmon_io.[ch]: BSD_COMPATIBLE is gone and new_file_version
	  has become old_file_version; gmon_io.c now always supports old-style
	  gmon.out files; it first tries to read gmon.out as a new version
	  file, if that fails, it tries to read it in the old format;
	  although not very likely, it is possible for gprof to mistake an
	  old-style file as a new one (the first 4 bytes would have to
	  be "gmon"---including the trailing '\0'); in that case, it is
	  necessary to specify --old-file-version

	* gprof.h: removed dependency on SYSV; the code now always uses
	  strrchr(), memset(), and memcpy() and does not include either
	  of string.h or strings.h; this should make gprof compile on
	  any (Unix) system without configuration (per suggestion of
	  raeburn@cygnus.com)

	* gprof.c (usage): fixed location of --new-file-format option.

	* cg_arcs.c (propagate_flags): fixed typo in declaration.

	* flat_bl.m: removed formfeed at end of file; the form-feed
	  is now printed cg_print.c only when necessary.

	* major rewrite of gprof---too many changes to mention all of
	  them.	 new features:

	+ -l now requests profiling at the line level (as opposed
	  to function level); in this mode, gprof creates a "symbol"
	  (aka name-list entry) for each line of source code, instead
	   of one per function)

	+ support for a new gmon.out file format; the new format 
	  consists of a header with a magic and a version number,
	  followed by a sequence of profile data; profile data
	  can any of: (a) PC histogram, (b) call-graph arcs, or
	  (c) basic-block execution counts; the version number makes
	  it possible to extend gmon.out in a backwards compatible
	  fashion

	+ support for tcov style annotated output: if the gmon.out file
	  contains basic-block execution counts, the user can request
	  the generation of annotated source files, much like Sun's
	  tcov used to do

	+ long options

	+ new scheme to suppress symbols that aren't function names
	  (e.g., avoids mistaking a goto label as a function)

	+ reorganized source code to make it more managable; as a
	  side effect, gprof now compiles cleanly with "gcc -Wall"

	Thu Sep	 1 15:46:49 1994  David Mosberger-Tang	(davidm@piston.cs.arizona.edu)

	* gprof.c (funcsymbol): bfd_find_nearest_line() is now used as a
	final cross-check to determine whether a static symbol should be
	considered as a function-name.

	Fri Aug	 5 19:32:36 1994  David Mosberger-Tang	(davidm@piston.cs.arizona.edu)

	* gmon_io.c (gmon_out_read): recognize "-" as the filename for
	stdin; this is useful if you wanna keep gmon.out files compressed;
	this way you can "gzcat" the compressed file into gprof.

	* gprof.c: flag_min_count now initialized with 1 instead of 0.

	* basic_blocks.c (bb_annotate_source): added support for creating
	.tcov files when option flag_annotate_make_files is TRUE.
	(annotate_with_count): all counts less than the minimum count
	specified by -m are now annotated with hash-marks.

	* gprof.c (main): -A is now followed by a string of option chars.

	* basic_blocks.c (annotate_with_count): replaced b->count with
	cnt.

	* source.c: flag_annotate_source replaced by source_lock_map.

	* source.h: source_lock_map added.

	* gprof.c (main): new command-line syntax: -S simply specifies
	which source-files user is interested in; -A requests annotated
	source files and -AA requests that all lines in a source file
	are annotated.

	Thu Aug	 4 23:27:03 1994  David Mosberger-Tang	(davidm@piston.cs.arizona.edu)

	* basic_blocks.c (PATH_MAX): if undefined, define as 1024.

	* sparc.c, i386.c, tahoe.c, vax.c: added include of "time_hist.h"
	so s_lowpc etc. get declared.

	* arcs.h (doarcs): created.

	* arcs.c: reordered static functions such that they get defined
	before use.

	* gprof.c (main): added options:
	   -A: request annotation of all source lines (with -S)
	   -m: minimum execution count (with default basic-block display)
	   -N: force new file format (only if BSD_COMPATIBLE is defined)
	   -S: annotate source file
	   -t: set table length (with -S)

	* Makefile.am (OBJS): added basic_blocks.o call_graph.o gmon_io.o
	source.o time_hist.o

	Fri Jul	 1 15:23:50 1994  David Mosberger-Tang	(davidm@piston.cs.arizona.edu)

	* gprof.c (asgnsamples): computation of "pcl" and "pch" depended
	on the fact being able to store a long in a double without loss of
	precision; this does not hold on machines with 64 bit longs and 64
	bit doubles.

Fri Oct 21 18:58:02 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* printgprof.c (flatprofheader): Always set totime to 1.0 if not
	greater than 0.0.  Suggested by Harold Assink
	<carlo@sg.tn.tudelft.nl>.

Fri Sep 23 15:06:45 1994  Ken Raeburn  <raeburn@cujo.cygnus.com>

	* printgprof.c (printprof): Use free, not cfree.
	(printgprof, printindex): Ditto.

Thu Sep  1 10:40:45 1994  Jeff Law  (law@snake.cs.utah.edu)

	* gprof.h (kfromlist, ktolist, flist, Flist, elist, Elist): Make
	decls extern to keep native HP compiler quiet.

Tue Aug 30 11:12:13 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* gprof.c (funcsymbol): Ignore ___gnu_compiled as well as
	__gnu_compiled, for the benefit of systems which add a leading
	underscore.

Wed Aug 24 12:49:13 1994  Ian Lance Taylor  (ian@sanguine.cygnus.com)

	* configure.in: Change i386-*-* to i[345]86-*-*.

Sun Jul 10 00:35:31 1994  Ian Dall  (dall@hfrd.dsto.gov.au)

	* ns532.c, ns532.h: New Files. ns532 support.

	* config/mt-ns532: New File. ns532 support.

	* gprof.c: user register int i instead of defaulting the int.
	Allows compilation with -Dregister= for debugging.

	* configure.in: Add ns532 support.

Thu Jun 23 11:22:41 1994  Jeff Law  (law@snake.cs.utah.edu)

	* Makefile.in (gprof): Depend on $(LIBS).

Fri May 27 12:24:57 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	From binutils-2.4 release:

	Wed May 11 22:32:00 1994  DJ Delorie (dj@ctron.com)

	* configure.bat: [new] build makefile from makefile.in (dos)
	* hertz.c: allow static HERTZ (msdos needs it)
	* gprof.c: allow target to select "r" or "rb" for fopen
	* gprof.c: ignore __gnu_compiled symbols
	* i386.h: dfine FOPEN_RB to "rb" for dos.

Tue May 17 15:30:22 1994  E. Michael Smith (ems@cygnus.com)

	* Makefile.in (.m.c:):  Added .SUFFIXES : .m 
	so flat_bl.c would make from flat_bl.m file.

Thu May  5 19:23:24 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* Makefile.in (install-info): Check for gprof.info in build dir,
	fall back to srcdir.  Depend on it.

	* gprof.h (TRUE, FALSE): Always use undef before defining them.

Mon Apr  4 23:47:30 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Makefile.in (MY_MACHINE): Renamed from MACHINE to avoid losing
	makes (osf1) in which the value of MACHINE can not be changed.
	* config/*.mt: Changed appropriately.

Wed Mar 30 16:12:40 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* gprof.c (getsymtab): Change nosyms to long.  Rename
	get_symtab_upper_bound to bfd_get_symtab_upper_bound.  Check for
	errors from bfd_get_symtab_upper_bound and
	bfd_canonicalize_symtab.

Tue Mar 22 10:50:52 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* gprof.c (funcsymbol): Use bfd_get_symbol_info instead of
	bfd_decode_symclass.

Sun Mar 20 15:40:21 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* Makefile.in: Avoid bug in hpux sed.

Wed Dec 15 20:16:40 1993  david d `zoo' zuhn  (zoo@andros.cygnus.com)

	* gprof.texi (Invoking): add text about -v flag

	* gprof.1: add text about -v flag

Wed Dec  8 16:55:06 1993  david d `zoo' zuhn  (zoo@andros.cygnus.com)

	* gprof.c (VERSION): defined a version macro, print the value 
	when the -v option is used

Tue Jul  6 10:11:56 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* Makefile.in: Install correctly.

Thu Jun 24 14:43:22 1993  David J. Mackenzie  (djm@thepub.cygnus.com)

	* gprof.c (main): Get whoami from argv, instead of hardcoding.
	Use it in usage message.  Split usage message to fit in 80 cols.

Sun Jun 20 20:58:02 1993  Ken Raeburn  (raeburn@poseidon.cygnus.com)

	* Makefile.in: Undo 15 June change.

Wed Jun 16 12:54:53 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* gmon.h, gprof.h: structs of chars used to hold external
	representations.
	* gprof.c (getpfile, openpfile, readsamples): Swap data in using
	new structures.

Tue Jun 15 23:09:17 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* Makefile.in (.c.o): Look in ../include, not ../bfd, for bfd.h.

Mon Jun 14 16:22:59 1993  david d `zoo' zuhn  (zoo at rtl.cygnus.com)

	* Makefile.in: remove parentdir support

Mon Jun  7 12:56:17 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.

Tue May 18 21:44:11 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in (install): should not depend on install-info

Mon Apr 26 12:37:46 1993  Ian Lance Taylor  (ian@cygnus.com)

	* gprof.h: Include ansidecl.h before sysdep.h.  Undefine hz.

Tue Apr 13 16:14:03 1993  Per Bothner  (bothner@cygnus.com)

	* Makefile.in:  Add -g to CFLAGS.
	Ads LDFLAGS and use in place of CFLAGS where appropriate.
	* configure.in:  Make a sysdep.hlink in the same way other
	bfd-based directories do.
	* gprof.h (UNIT):  Replace non-standard 'u_short' by 'unsigned
	short'.
	* gprof.h:  #include sysdep.h instead of a bunch of stuff.
	* gprof.c (main):  Fix typo gproff->gprof.

Thu Mar 25 19:00:37 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* gprof.texi: add INFO-DIR-ENTRY

Tue Mar 23 00:03:11 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: add installcheck target

Sat Feb 27 18:17:10 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* gprof.c (funcsymbol):  Invert test for aflag.

Thu Feb 25 16:01:50 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* printgprof (xmalloc, xrealloc):  Cast results of malloc
	and realloc to PTR.

Wed Feb  3 13:55:33 1993  Jeffrey Osier  (jeffrey@fowanton.cygnus.com)

	* Makefile.in: created info, install-info, dvi

Wed Jan  6 00:58:09 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: fix install rule for $(PROG)

Fri Oct  9 11:25:41 1992  Mark Eichin  (eichin@cygnus.com)

	* gprof.1: updated SYNOPSIS to match actual behavior.

Mon Oct  5 17:50:16 1992  Per Bothner  (bothner@cygnus.com)

	* gen-c-prog.awk:  New awk script, lightly changed from
	previously deleted make-c-prog.awk.  Converts a text file
	to a c function that prints that text.
	* flat_bl.m, fsf_callg_bl.m, bsd_callg_bl.m:  New files.
	Inputs to gen-c-prog.awk, containing text describing
	gprof output.
	* blurbs.c:  Removed.  Use *_bl.c instead.
	* Makefile.in: Use gen-cprog.awk to generate *_bl.c files
	from *_bl.m files.  Also, improve *clean rules.
	* printgprof.c (printgprof):  Usw new function names from *_bl.c.
	

Sun Aug 30 19:54:53 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* gprof.h, gprof.c, printfgprof.c:  Add support for two
	output styles:  The default is similar to the old FSF gprof,
	while -T sets the variable bsd_style_output, which causes
	output matching Berkeley's gprof.  The biggest differences
	are that with the FSF style output, the flat profile comes
	before the call graph; numbers come before explanations;
	and there is less gratuitous white space.
	* gprof.h, gprof.c, printfgprof.c:  New discard_underscores
	variable causes discarding of initial underscores when
	printing symbol names.  It is set unless there is a "main"
	symbol (without an underscore).
	* printfgprof.c:  New function printnameonly(), called
	by printname().  It handles stripping of initial '_',
	as well as C++ name-demangling.
	* gprof.callg, gprof.flat, make-c-prog.awk:  Removed.
	It is just as convenient to edit blurbs.c directly.
	* Makefile.in:  Removed rule for making blurbs.c.
	* blurbs.c:  This is now a true source file (as opposed
	to being generated from gprof.callg and gprof.flat).
	Change style to use one long string literal, instead of
	one literal per output line.  Add FSF-style blurb for call graph.

Wed Aug 19 14:36:39 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: always create installation directories.

Wed Aug 12 15:14:14 1992  Mark Eichin  (eichin@cygnus.com)

	* Makefile.in: change ${MACHINE} to $(MACHINE).

Sun Jul 19 17:34:01 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in:  removed installation of the now useless
	call.{flag,callg} files.  

	* gprof.1: now uses the standard man macros instead of the new BSD
	mandoc macros. 

Sun Jul 12 19:06:00 1992  John Gilmore  (gnu at cygnus.com)

	* configure.in:  Remove host section, expand target section.
	* config/mt-{tahoe,vax}:  Add, to match existing support files.
	* config/tmake-*:  Remove leftover crud.

	* blurbs.c:  New file, created from gprof.flat and gprof.callg by
	* make-c-prog.awk:  which processes text files into C programs.
	* printgprof.c (flatprofheader, gprofheader):  Call new functions
	to print blurbs.
	(printblurb):  Remove.
	* Makefile.in:  Infrastructure to build blurbs.
	* pathnames.h:  has been removed.  Gprof now has no filename
	dependencies in it.
	* gprof.c:  Lint.

Sat Jul 11 18:07:21 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: define man1dir and install the man page

Fri Jul 10 21:14:08 1992  david d `zoo' zuhn (zoo@cygnus.com)

	* Makefile.in: added dummy info and install-info targets

Thu Jun  4 11:34:02 1992  Mark Eichin  (eichin at cygnus.com)

	* lookup.c: fixed fencepost in nllookup and added dbg_nllookup for
	help in debugging the problem (with -DDEBUG)
	* gprof.c: symbol values are now real values, don't add the vma
	anymore. (done for solaris; should verify this on other platforms)
	* ChangeLog: created.
