Return-Path: Message-ID: <4C447CD1.5000402@aircable.net> Date: Mon, 19 Jul 2010 13:26:57 -0300 From: Manuel Naranjo MIME-Version: 1.0 To: BlueZ Subject: [PATCH 2/2] Add function tracer formatter Content-Type: multipart/mixed; boundary="------------040607000703050101000606" Sender: linux-bluetooth-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------040607000703050101000606 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit This patch adds the script available at http://www.logix.cz/michal/devel/CygProfiler to the tools folder, I don't know if it makes sense to install this into somewhere as this is only developers only intendeed. The way to use it is: perl tools/cyg-resolve.pl src/.libs/bluetoothd bluetoothd-log. Signed-off-by: Manuel Naranjo --------------040607000703050101000606 Content-Type: text/plain; name="0002-added-perl-script-to-resolve-symbols-on-tracing.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0002-added-perl-script-to-resolve-symbols-on-tracing.patch" >From 43691108561e8e39226ccd9064a05690ba48bd66 Mon Sep 17 00:00:00 2001 From: Manuel Francisco Naranjo Date: Mon, 19 Jul 2010 13:18:43 -0300 Subject: [PATCH 2/2] added perl script to resolve symbols on tracing --- tools/cyg-resolve.pl | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 111 insertions(+), 0 deletions(-) create mode 100644 tools/cyg-resolve.pl diff --git a/tools/cyg-resolve.pl b/tools/cyg-resolve.pl new file mode 100644 index 0000000..5d56bd3 --- /dev/null +++ b/tools/cyg-resolve.pl @@ -0,0 +1,111 @@ +#!/usr/bin/perl + +# +# cyg-resolve.pl - CygProfiler resolver +# +# Michal Ludvig +# http://www.logix.cz/michal/devel +# +# Use this script to parse the output of the CygProfile suite. +# + +use strict; +use warnings; +no warnings 'portable'; +use diagnostics; +use English; + +my %symtab; +my ($binfile, $textfile, $levelcorr); + +$OUTPUT_AUTOFLUSH=1; + +&help() if($#ARGV < 1); +$binfile=$ARGV[0]; +&help() if($binfile =~ /--help/); +$textfile=($#ARGV > 0 ? $ARGV[1] : "cygprof.log"); +$levelcorr=($#ARGV > 1 ? $ARGV[2] : -1); + +&main(); + +# ==== Subs + +sub help() +{ + printf("CygProgile parser, Michal Ludvig , 2002-2003\n"); + printf("Usage: %s []\n", $0); + printf("\t Program that generated the logfile.\n"); + printf("\t Logfile generated by the profiled program.\n"); + printf("\t Correction of the nesting level.\n"); + exit; +} + +sub main() +{ + my($offset, $type, $function); + my($nsym, $nfunc); + + $nsym=0; + $nfunc=0; + + open(NM, "nm $binfile|") or die("Unable to run 'nm $binfile': $!\n"); + printf("Loading symbols from $binfile ... "); + + while() + { + $nsym++; + next if(!/^([0-9A-F]+) (.) (.+)$/i); + $offset=hex($1); $type=$2; $function=$3; + next if($type !~ /[tT]/); + $nfunc++; + $symtab{$offset}=$function; + } + printf("OK\nSeen %d symbols, stored %d function offsets\n", $nsym, $nfunc); + close(NM); + + open(TEXT, "$textfile") + or die("Unable to open '$textfile': $!\n"); + + if ($levelcorr == -1) + { + $levelcorr = 0; + while() + { + if ((/^.*[+-] (-*\d+)/) && ($1 < -$levelcorr)) + { $levelcorr = -$1; } + } + printf("Level correction set to %d\n", $levelcorr); + seek(TEXT, 0, 0); + } + + while() + { + # Change the pattern if the output format + # of __cyg_...() functions has changed. + if(!/(.*)([+-]) (-*\d+) 0x([[:xdigit:]]+) 0x([[:xdigit:]]+)\s*(\d*)/) + { print $_; next; } + else + { + my $prolog=$1; + my $type=$2; + + my $level=$3 + $levelcorr; + my $off1=hex($4); + my $off2=hex($5); + my $pid=$6; + + printf("$prolog\n") if ($prolog); + + # Don't print exits + next if($type eq "-"); + my $sym=(defined($symtab{$off1})?$symtab{$off1}:"???"); + + printf("\t%s %2d 0x%x (from 0x%x) %*s%s\n", + $type, $level, $off1, $off2, + $level+1, " ", "$sym()"); + } + } + close(TEXT); + + printf("done\n"); +} -- 1.6.4.4 --------------040607000703050101000606--