examine-relay
eric pouech
eric.pouech at wanadoo.fr
Sat Jun 23 09:11:06 CDT 2001
since the format of the relay traces has been changed, the modification
to tools/examine-relay haven't been done
this is now done. I also added a bit of thread separation in the script
A+
--
---------------
Eric Pouech (http://perso.wanadoo.fr/eric.pouech/)
"The future will be better tomorrow", Vice President Dan Quayle
-------------- next part --------------
Name: relay
ChangeLog: fixed for new relay format. added thread knowledge
GenDate: 2001/06/23 14:08:37 UTC
ModifiedFiles: tools/examine-relay
AddedFiles:
===================================================================
RCS file: /usr/share/cvs/cvsroot/wine/wine/tools/examine-relay,v
retrieving revision 1.1.1.1
diff -u -u -r1.1.1.1 examine-relay
--- tools/examine-relay 1998/09/24 03:43:39 1.1.1.1
+++ tools/examine-relay 2001/06/23 14:05:58
@@ -8,63 +8,74 @@
# list might be incorrect. (It could be something else also.)
#
# Copyright 1997-1998 Morten Welinder (terra at diku.dk)
+# 2001 Eric Pouech
#
# -----------------------------------------------------------------------------
+use strict;
+
my $srcfile = $ARGV[0];
-my @callstack = ();
+my %tid_callstack = ();
my $newlineerror = 0;
my $indentp = 1;
open (IN, "<$srcfile") || die "Cannot open $srcfile for reading: $!\n";
LINE:
while (<IN>) {
- if (/^Call ([A-Za-z0-9]+\.\d+): .*\)/) {
- my $func = $1;
+
+ if (/^([0-9a-f]+):Call ([A-Za-z0-9]+\.[A-Za-z0-9_]+)\((.*\)) .*/) {
+ my $tid = $1;
+ my $func = $2;
+
if (/ ret=(........)$/ ||
- / ret=(....:....) (ds=....)$/ ||
- / ret=(........) (fs=....)$/) {
+ / ret=(....:....) (ds=....)$/) {
my $retaddr = $1;
my $segreg = $2;
$segreg = "none" unless defined $segreg;
- push @callstack, [$func,$retaddr, $segreg];
+
+ push @{$tid_callstack{$tid}}, [$func, $retaddr, $segreg];
next;
} else {
# Assume a line got cut by a line feed in a string.
$_ .= scalar (<IN>);
if (!$newlineerror) {
- print "Error: string probably cut by newline.\n";
+ print "Err[$tid] string probably cut by newline.\n";
$newlineerror = 1;
}
# print "[$_]";
redo;
}
}
-
- if (/^Ret ([A-Za-z0-9]+\.\d+): .* ret=(........)$/ ||
- /^Ret ([A-Za-z0-9]+\.\d+): .* ret=(....:....) (ds=....)$/ ||
- /^Ret ([A-Za-z0-9]+\.\d+): .* ret=(........) (fs=....)$/) {
- my $func = $1;
- my $retaddr = $2;
- my $segreg = $3;
+ if (/^([0-9a-f]+):Ret ([A-Za-z0-9]+\.[A-Za-z0-9_]+)\(.*\) .* ret=(........)$/ ||
+ /^([0-9a-f]+):Ret ([A-Za-z0-9]+\.[A-Za-z0-9_]+)\(.*\) .* ret=(....:....) (ds=....)$/) {
+ my $tid = $1;
+ my $func = $2;
+ my $retaddr = $3;
+ my $segreg = $4;
my ($topfunc,$topaddr,$topseg);
+ if (!defined($tid_callstack{$tid}))
+ {
+ print "Err[$tid]: unknown tid\n";
+ next;
+ }
+
$segreg = "none" unless defined $segreg;
POP:
while (1) {
- if ($#callstack == -1) {
- print "Error: Return from $func to $retaddr with empty stack.\n";
+ if ($#{$tid_callstack{$tid}} == -1) {
+ print "Err[$tid]: Return from $func to $retaddr with empty stack.\n";
next LINE;
}
- ($topfunc,$topaddr,$topseg) = @{pop @callstack};
+ ($topfunc,$topaddr,$topseg) = @{pop @{$tid_callstack{$tid}}};
if ($topfunc ne $func) {
- print "Error: Return from $topfunc, but call from $func.\n";
- next POP
+ print "Err[$tid]: Return from $topfunc, but call from $func.\n";
+ next POP;
}
last POP;
}
@@ -72,20 +83,22 @@
my $addrok = ($topaddr eq $retaddr);
my $segok = ($topseg eq $segreg);
if ($addrok && $segok) {
- print "OK: ", ($indentp ? (' ' x (1 + $#callstack)) : '');
+ print "Ok [$tid]: ", ($indentp ? (' ' x (1 + $#{$tid_callstack{$tid}})) : '');
print "$func from $retaddr with $segreg.\n";
} else {
- print "Error: Return from $func is to $retaddr, not $topaddr.\n"
+ print "Err[$tid]: Return from $func is to $retaddr, not $topaddr.\n"
if !$addrok;
- print "Error: Return from $func with segreg $segreg, not $topseg.\n"
+ print "Err[$tid]: Return from $func with segreg $segreg, not $topseg.\n"
if !$segok;
}
}
}
-while ($#callstack != -1) {
- my ($topfunc,$topaddr) = @{pop @callstack};
- print "Error: leftover call to $topfunc from $topaddr.\n";
+foreach my $tid (keys %tid_callstack) {
+ while ($#{$tid_callstack{$tid}} != -1) {
+ my ($topfunc,$topaddr,$topseg) = @{pop @{$tid_callstack{$tid}}};
+ print "Err[$tid]: leftover call to $topfunc from $topaddr.\n";
+ }
}
close (IN);
More information about the wine-patches
mailing list