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.
core.h gmon.h gmon_io.h gmon_out.h gprof.h hertz.h hist.h \
search_list.h source.h sym_ids.h symtab.h utils.h
-EXTRA_DIST = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
+EXTRA_DIST = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c bbconv.pl
BUILT_SOURCES = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
core.h gmon.h gmon_io.h gmon_out.h gprof.h hertz.h hist.h \
search_list.h source.h sym_ids.h symtab.h utils.h
-EXTRA_DIST = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
+EXTRA_DIST = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c bbconv.pl
BUILT_SOURCES = flat_bl.c bsd_callg_bl.c fsf_callg_bl.c
--- /dev/null
+#! /usr/bin/perl
+
+# This script converts a "bb.out" file into a format
+# suitable for processing by gprof
+
+# Write a new-style gmon header
+
+print pack("A4Ix12", "gmon", 1);
+
+
+# The input file format contains header lines and data lines.
+# Header lines contain a count of how many data lines follow before
+# the next header line. $blockcount is set to the count that
+# appears in each header line, then decremented at each data line.
+# $blockcount should always be zero at the start of a header line,
+# and should never be zero at the start of a data line.
+
+$blockcount=0;
+
+while (<>) {
+ if (/^File .*, ([0-9]+) basic blocks/) {
+ print STDERR "Miscount: line $.\n" if ($blockcount != 0);
+ $blockcount = $1;
+
+ print pack("cI", 2, $blockcount);
+ }
+ if (/Block.*executed([ 0-9]+) time.* address= 0x([0-9a-fA-F]*)/) {
+ print STDERR "Miscount: line $.\n" if ($blockcount == 0);
+ $blockcount-- if ($blockcount > 0);
+
+ $count = $1;
+ $addr = hex $2;
+
+ print pack("II",$addr,$count);
+ }
+}