2002-08-22  Nick Clifton  <nickc@redhat.com>

	* gprof.c (main): Turn off default excluded functions in FLAT
	profile.

2002-08-21  John David Anglin  <dave@hiauly1.hia.nrc.ca>

	* gmon_io.c (gmon_io_read_64, gmon_io_write_64): Define only if
	BFD_HOST_U_64_BIT is defined.
	(gmon_io_read_vma, gmon_io_write_vma): Add ifdefs.

2002-07-30  Nick Clifton  <nickc@redhat.com>

	* po/tr.po: Updated Turkish translation.

2002-07-30  Nick Clifton  <nickc@redhat.com>

	* alpha.c, cg_arcs.c, cg_dfn.c, gmon.h, gprof.c, gprof.h, hertz.c,
	i386.c, mips.c, sparc.c, tahoe.c, utils.c, vax.c: Update Copyright
	notice so that it applies even if the sources are modified.

2002-07-29  Ulrich Drepper  <drepper@redhat.com>

	* gprof.texi (Executing the Program): Add documentation on how to use
	bbconv.pl.  Patch by Eric Hanchrow.

2002-07-25  Nick Clifton  <nickc@redhat.com>

	* po/es.po: Updated Spanish translation.
	* po/fr.po: Updated French translation.

2002-07-24  Dave Brolley  <brolley@redhat.com>

	* corefile.c (core_create_function_syms): Use the end of the section
	containing the symbol to compute max_vma.

2002-07-24  Nick Clifton  <nickc@redhat.com>

	* po/sv.po: Updated Swedish translation.
	* po/es.po: Updated Spanish translation.

2002-07-23  Nick Clifton  <nickc@redhat.com>

	* po/fr.po: Updated French translation.
	* po/id.po: New Indonesian translation.
	* configure.in (LINGUAS): Add id.
	* configure: Regenerate.

2002-05-02  Nick Clifton  <nickc@cambridge.redhat.com>

	* po/Make-in (.po.gmo): Do not attempt to create a .gmo file if
	the sources are read-only.

2002-04-04  Alan Modra  <amodra@bigpond.net.au>

	* dep-in.sed: Cope with absolute paths.
	* Makefile.am (dep.sed): Subst TOPDIR.
	Run "make dep-am".
	* Makefile.in: Regenerate.

2002-03-21  Alan Modra  <amodra@bigpond.net.au>

	* Makefile.am: Run "make dep-am".
	* Makefile.in: Regenerate.

2002-03-18  Nick Clifton  <nickc@cambridge.redhat.com>

	* po/fr.po: Updated version.

2002-03-13  Nick Clifton  <nickc@cambridge.redhat.com>

	* po/fr.po: Updated version.

2002-03-07  Daniel Jacobowitz  <drow@mvista.com>

	* gprof.texi: Wrap @menu in @ifnottex, not @ifinfo.

2002-02-19  Frank Ch. Eigler  <fche@redhat.com>

	* hist.c (hist_print): Rewrite log_scale calculation loop.

2002-02-11  Alan Modra  <amodra@bigpond.net.au>

	* Makefile.am: "make dep-am".
	* Makefile.in: Regenerate.

2002-02-10  Daniel Jacobowitz  <drow@mvista.com>

	* gprof.c: Include "getopt.h" after other includes, so that
	the proper macros are defined.
	* gen-c-prog.awk: Emit a prototype for the generated function.

2002-02-01  Alan Modra  <amodra@bigpond.net.au>

	* configure.in (build_warnings): Add -Wstrict-prototypes
	-Wmissing-prototypes.
	* aclocal.m4: Regenerate.
	* gconfig.in: Regenerate.
	* configure: Regenerate.
	* Makefile.am: Run "make dep-am".
	* Makefile.in: Regenerate.

	* alpha.c (alpha_find_call): Warning fixes.
	* mips.c (mips_find_call): Likewise.
	* sparc.c (sparc_find_call): Likewise.
	* basic_blocks.c: Warning fixes.  Eliminate DEFUN.
	* call_graph.c: Likewise.
	* cg_arcs.c: Likewise.
	* cg_dfn.cp: Likewise.
	* gprof.c: Likewise.
	* gprof.h: Likewise.
	* hist.c: Likewise.
	* search_list.c: Likewise.
	* source.c: Likewise.
	* source.h: Likewise.
	* sym_ids.c: Likewise.
	* symtab.c: Likewise.
	* symtab.h: Likewise.
	* utils.c: Likewise.
	* cg_print.c: Likewise.
	(struct function_map, symbol_map, symbol_map_count): Move
	declaration to..
	* corefile: ..here.
	* corefile.c: Warning fixes.  Eliminate DEFUN.
	(struct function_map): Remove declaration.
	* gmon_io.c: Warning fixes.  Eliminate DEFUN.
	(gmon_io_read_64): Make static.
	(gmon_io_write_64): Likewise.
	(gmon_read_raw_arc): Likewise.
	(gmon_write_raw_arc): Likewise.
	(gmon_io_write_8): Don't pass char, pass int param.
	* gmon_io.h (gmon_io_write_8): Likewise.

	* Makefile.am: Run "make dep-am"
	* Makefile.in: Regenerate.

	* basic_blocks.c: Replace bool with boolean, TRUE with true and
	FALSE with false throughout.
	* basic_blocks.h: Likewise.
	* cg_arcs.c: Likewise.
	* cg_dfn.c: Likewise.
	* cg_print.c: Likewise.
	* corefile.c: Likewise.
	* gmon_io.c: Likewise.
	* gprof.c: Likewise.
	* hist.c: Likewise.
	* mips.c: Likewise.
	* source.c: Likewise.
	* source.h: Likewise.
	* sym_ids.c: Likewise.
	* sym_ids.h: Likewise.
	* symtab.h: Likewise.
	* tahoe.c: Likewise.
	* vax.c: Likewise.
	* gprof.h: Likewise.
	(TRUE): Don't define.
	(FALSE): Don't define.

2002-01-31  Jason R Thorpe <thorpej@wasabisystems.com>

	* TODO: Remove "host architecture pointer size" item.
	* acconfig.h: Remove.
	* gconfig.in: Regenerate.
	* configure.in: Remove check for gmon pointer size.
	* configure: Regenerate.
	* gmon.h (GMON_HDRSIZE_BSD44_32): Define.
	(GMON_HDRSIZE_BSD44_64): Ditto.
	(GMON_HDRSIZE_OLDBSD_32): Ditto.
	(GMON_HDRSIZE_OLDBSD_64): Ditto.
	(struct raw_phdr): Wrap in #if 0, keeping it for
	documentation purposes only.
	(struct old_raw_phdr): Likewise.
	(struct raw_arc): Likewise.  Change type/size of
	"count" member to long match 4.4BSD.
	* gmon_io: Update copyright years.
	(gmon_io_read_64): New function.
	(gmon_io_read_vma): Use bfd_arch_bits_per_address to
	determine target pointer size.  Use gmon_io_read_32
	and gmon_io_read_64.
	(gmon_io_write_64): New function.
	(gmon_io_write_vma): Use bfd_arch_bits_per_address to
	determine target pointer size.  Use gmon_io_write_32
	and gmon_io_write_64.
	(get_vma): Remove.
	(put_vma): Ditto.
	(gmon_read_raw_arc): New function.
	(gmon_write_raw_arc): New function.
	(gmon_out_read): Do not use struct raw_phdr or
	struct old_raw_phdr to read the gmon header.  Use
	gmon_read_raw_arc to read call graph records.
	(gmon_out_write): Do not use struct raw_phdr or
	struct old_raw_phdr to write the gmon header.  Use
	gmon_write_raw_arc to write call graph records.
	* po/gprof.pot: Regenerate.
	* Makefile.in: Regenerate.

2002-01-31  Alan Modra  <amodra@bigpond.net.au>

	* alpha.c (alpha_Instruction): Don't use.
	(alpha_find_call): Avoid use of bitfields and casts between
	pointers and integers of different sizes.  Avoid endian problems
	when cross-compiling.
	* vax.c (vax_find_call): Likewise.
	(struct modebyte): Don't use.
	(vax_operandmode): Pass in an unsigned char *.
	(vax_operandlength): Likewise.
	(vax_reladdr): Rename to vax_offset and return relative offset
	rather than address.
	* i386.c (i386_find_call): Avoid casts between pointers and
	integers of different sizes.
	* sparc.c (sparc_find_call): Likewise.  Avoid endian problems.
	* tahoe.c (tahoe_find_call): Likewise.
	(tahoe_reladdr): Rename to tahoe_offset and return relative offset
	rather than address.

	* basic_blocks.h: Don't include headers here.
	* call_graph.h: Likewise.
	* cg_arcs.h: Likewise.
	* cg_print.h: Likewise.
	* corefile.h: Likewise.
	* gmon_io.h: Likewise.
	* gmon_out.h: Likewise.
	* hertz.h: Likewise.
	* hist.h: Likewise.
	* source.h: Likewise.
	* sym_ids.h: Likewise.
	* symtab.h: Likewise.
	* gprof.h: Don't include ansidecl.h, do include bfd.h.
	(bool): Don't typedef.
	* alpha.c: Adjust #include's for above header changes.
	* basic_blocks.c: Likewise.
	* call_graph.c: Likewise.
	* cg_arcs.c: Likewise.
	* cg_dfn.c: Likewise.
	* cg_print.c: Likewise.
	* corefile.c: Likewise.
	* gmon_io.c: Likewise.
	* gprof.c: Likewise.
	* hertz.c: Likewise.
	* hist.c: Likewise.
	* i386.c: Likewise.
	* mips.c: Likewise.
	* sparc.c: Likewise.
	* sym_ids.c: Likewise.
	* symtab.c: Likewise.
	* tahoe.c: Likewise.
	* utils.c: Likewise.
	* vax.c: Likewise.

	* po/POTFILES.in: Regenerate.

2002-01-27  Daniel Jacobowitz  <drow@mvista.com>

	* configure: Regenerated.

2002-01-26  Richard Henderson  <rth@redhat.com>

	* i386.c (i386_iscall): Static.
	* tahoe.c (indirectchild, tahoe_operandmode): Static.
	(tahoe_operandlength, tahoe_reladdr): Static.
	* vax.c (indirectchild): Static.

2002-01-26  Hans-Peter Nilsson  <hp@bitrange.com>

	* Makefile.am (install): Depend on install-info.
	* Makefile.in: Regenerate.

2002-01-26  Jason Thorpe  <thorpej@wasabisystems.com>

	* mips.c: New file.
	* Makefile.am (sources): Add mips.c. 
	(mips.o): New rule.
	* Makefile.in: Regenerate. 
	* corefile.c: Update copyright years.
	(find_call): Call mips_find_call for bfd_arch_mips.

2002-01-26  Nick Clifton  <nickc@cambridge.redhat.com>

	* po/fr.po: Updated version.

2002-01-25  Nick Clifton  <nickc@cambridge.redhat.com>

	* po/es.po: Updated version.

2002-01-17  Nick Clifton  <nickc@cambridge.redhat.com>

	* po/gprof.pot: Regenerate.

2002-01-07  Nick Clifton  <nickc@cambridge.redhat.com>

	* po/es.po: New file: Spanish translation.
	* configure.in (ALL_LINGUAS): Add es.
	* configure: Regenerate.

2002-01-03  Nick Clifton  <nickc@cambridge.redhat.com>

	* gmon_io.c (gmon_out_read): Remove use of ngettext().  It is not
	present under AIX.

2002-01-02  Nick Clifton  <nickc@cambridge.redhat.com>

	* cg_print.c (print_header): Fix spelling typo.

	* gmon_io.c (gmon_out_read): Fix formatting of text messages to
	allow easier translation into other languages.

2001-12-21  Nick Clifton  <nickc@cambridge.redhat.com>

	* configure.in (ALL_LINGUAS): Add sv.
	* configure: Regenerate.
	* po/sv.po: Import from translation project web site.

2001-12-03  Nick Clifton  <nickc@cambridge.redhat.com>

	* configure.in (LINGUAS): Add tr.
	* configure: Regenerate.
	* po/tr.po: Import from translation project's web site.

2001-11-02  Nick Clifton  <nickc@cambridge.redhat.com>

	* configure.in (ALL_LINGUAS): Add 'fr'.
	* configure: Regernate.
	* po/fr.po: New file.

2001-10-03  Alan Modra  <amodra@bigpond.net.au>

	* configure: Regenerate.

2001-10-02  Alan Modra  <amodra@bigpond.net.au>

	* Makefile.am (Makefile): Depend on bfd/configure.in.
	Run "make dep-am".
	* Makefile.in: Regenerate.

2001-09-18  Bruno Haible  <haible@clisp.cons.org>

	* gprof.c (main): For gettext, also set the LC_CTYPE locate facet.
	* sym_ids.c: Include "safe-ctype.h" instead of <ctype.h>.
	(parse_spec): Use ISDIGIT instead of isdigit.

2001-09-18  Alan Modra  <amodra@bigpond.net.au>

	* sparc.c (sparc_find_call): Warning fix.
	* alpha.c (alpha_find_call): Likewise.

2001-08-09  Alan Modra  <amodra@bigpond.net.au>

	* alpha.c: Add missing prototypes.
	* sparc.c: Likewise.
	* tahoe.c: Likewise.
	* vax.c: Likewise.
	* i386.c: Likewise.
	(i386_iscall): Don't use DEFUN.

2001-07-19  Nick Clifton  <nickc@cambridge.redhat.com>

	* NOTES: Rename to README for consistency with other binutils.

2001-06-18  H.J. Lu <hjl@gnu.org>

        * Makefile.am (diststuff): Add $(MANS).
        (gprof.1): Remove the prefix `$(srcdir)/'.
        * Makefile.in: Regenerated.

        * gprof.1: Removed.

2001-06-12  Ben Elliston  <bje@redhat.com>

	* gprof.texi (File Format): Profile data files are stored in
	target byte order, not host byte order.

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-04-06  Stephane Carrez  <Stephane.Carrez@worldnet.fr>

	* gprof.texi: Put @c man begin and @c man end indications
	to generate man page using texi2pod and pod2man.  Added SEEALSO,
	SYNOPSIS, BUGS, FILES and DESCRIPTION from original gprof.1
	enclosed in @ifset man condition.
	* Makefile.am (MANCONF, TEXI2POD, POD2MAN): New variable.
	Generate gprof.1 from gprof.texi.
	* gprof.1: Generate from gprof.texi.
	* Makefile.in: Regenerate.

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-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.

2000-04-07  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.

1999-06-14  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.

1998-12-06  Ian Lance Taylor  <ian@cygnus.com>

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

1998-11-02  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)
