2003-03-27  Chris Demetriou  <cgd@broadcom.com>

	* gmon_io.c (enum gmon_ptr_size, enum gmon_ptr_signedness): New.
	(gmon_get_ptr_size, gmon_get_ptr_signedness): New.
	(gmon_io_read_vma, gmon_io_write_vma, gmon_read_raw_arc)
	(gmon_write_raw_arc, gmon_out_read, gmon_out_write): Adjust to
	use new functions and enums.

2003-02-21  K Schutte  <schutte@fel.tno.nl>

	* corefile.c (core_create_line_syms): Check for a NULL sentinel
	value before using it.

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

	* configure.in (LINGUAS): Add pt_BR.
	* configure: Regenerate.
	* po/pt_BR: New Brazillian Portugese translation.

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

	* basic_blocks.c, basic_blocks.h, cg_arcs.c, cg_dfn.c, cg_print.c,
	corefile.c, gmon_io.c, gprof.c, gprof.h, hist.c, mips.c, source.c,
	source.h, sym_ids.c, sym_ids.h, symtab.h, tahoe.c, vax.c: Replace
	boolean with bfd_boolean, true with TRUE, false with FALSE.
	Formatting.

2002-11-12  Nick Clifton  <nickc@redhat.com>

	* configure.in (ALL_LINGUAS): Add da.
	* configure: Regenerate.
	* po/da.po: New Danish translation.

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)
