summaryrefslogtreecommitdiff
path: root/Porting
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>2002-05-14 16:09:59 +0000
committerJarkko Hietaniemi <jhi@iki.fi>2002-05-14 16:09:59 +0000
commita7a6c8b10a9aa6a3798dada669f7b74961355ab6 (patch)
tree3182a8c7420f963cf2c2ecc85a42fff596526cc4 /Porting
parent147f47de4cf0d8224e5bba0fda69d1a6523548a2 (diff)
downloadperl-a7a6c8b10a9aa6a3798dada669f7b74961355ab6.tar.gz
Add a script for cleaning out the "known noise"
from Third Degree reports: either noise caused by libc itself, or Perl_yyparse leaks. p4raw-id: //depot/perl@16593
Diffstat (limited to 'Porting')
-rw-r--r--Porting/thirdclean51
1 files changed, 51 insertions, 0 deletions
diff --git a/Porting/thirdclean b/Porting/thirdclean
new file mode 100644
index 0000000000..de1946b880
--- /dev/null
+++ b/Porting/thirdclean
@@ -0,0 +1,51 @@
+local $/;
+$_ = <ARGV>;
+
+my @accv = /(^-+ \w+ -- \d+ --(?:.(?!^-))+)/msg;
+my @leak = /(\d+ bytes? in \d+ leaks? .+? created at:(?:.(?!^\d))+)/msg;
+
+$leak[ 0] =~ s/.* were found:\n\n//m; # Snip off totals.
+$leak[-1] =~ s/^-+.*//ms; # Snip off final memory layout.
+
+# Weed out the known access violations.
+
+@accv = grep { ! /-- ru[hs] --.+setlocale.+Perl_init_i18nl10n/s } @accv;
+@accv = grep { ! /-- (?:fon|ris) --.+__strxfrm_sb/s } @accv;
+@accv = grep { ! /-- rih --.+memmove.+sv_catpv.+moreswitches/s } @accv;
+@accv = grep { ! /-- (?:rih|rus) --.+strcpy.+gv_fetchfile/s } @accv;
+@accv = grep { ! /-- rus --.+_doprnt_dis/s } @accv;
+@accv = grep { ! /-- rih --.+strcmp.+doopen_pmc/s } @accv;
+@accv = grep { ! /-- rih --.+memmove.+my_setenv/s } @accv;
+
+# Weed out the known memory leaks.
+
+@leak = grep { ! /setlocale.+Perl_init_i18nl10n/s } @leak;
+@leak = grep { ! /setlocale.+set_numeric_standard/s } @leak;
+@leak = grep { ! /_findiop.+fopen/s } @leak;
+@leak = grep { ! /_findiop.+__fdopen/s } @leak;
+@leak = grep { ! /Perl_new\w+.+Perl_yyparse/s } @leak;
+
+# Output the cleaned up report.
+
+# Access violations.
+
+for (my $i = 0; $i < @accv; $i++) {
+ $_ = $accv[$i];
+ s/\d+/$i/;
+ print;
+}
+
+# Memory leaks.
+
+my ($leakb, $leakn, $leaks);
+
+for (my $i = 0; $i < @leak; $i++) {
+ $_ = $leak[$i];
+ print $_, "\n";
+ /^(\d+) bytes? in (\d+) leak/;
+ $leakb += $1;
+ $leakn += $2;
+ $leaks += $1 if /including (\d+) super/;
+}
+
+print "Bytes $leakb Leaks $leakn Super $leaks\n" if $leakb;