diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2014-12-23 14:38:46 +0000 |
---|---|---|
committer | <> | 2015-05-26 15:48:41 +0000 |
commit | 5500a97a2ad1735db5b35bc51cfb825c1f4c38df (patch) | |
tree | cc6e777c26142b88456ff03a672e1cb69215fc32 /gprof/bbconv.pl | |
download | binutils-tarball-master.tar.gz |
Imported from /home/lorry/working-area/delta_binutils-tarball/binutils-2.25.tar.bz2.HEADbinutils-2.25master
Diffstat (limited to 'gprof/bbconv.pl')
-rwxr-xr-x | gprof/bbconv.pl | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/gprof/bbconv.pl b/gprof/bbconv.pl new file mode 100755 index 0000000..123218a --- /dev/null +++ b/gprof/bbconv.pl @@ -0,0 +1,55 @@ +#! /usr/bin/perl + +# This script converts a "bb.out" file into a format +# suitable for processing by gprof +# +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is part of GNU Binutils. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. + +# 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); + } +} |