[svn:parrot] r39495 - in trunk: . tools/dev
Infinoid at svn.parrot.org
Infinoid at svn.parrot.org
Wed Jun 10 15:23:27 UTC 2009
Author: Infinoid
Date: Wed Jun 10 15:23:27 2009
New Revision: 39495
URL: https://trac.parrot.org/parrot/changeset/39495
Log:
[cage] Update parrot.supp with some GNU ld suppressions.
These are the bogus hits I was getting on x86-64. Most of the "Value8" suppressions should probably have similar "Value4" entries for 32 bit platforms.
Also include a little tool I used to create those suppressions.
Added:
trunk/tools/dev/gen_valgrind_suppressions.pl
Modified:
trunk/MANIFEST
trunk/tools/dev/parrot.supp
Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST Wed Jun 10 15:23:20 2009 (r39494)
+++ trunk/MANIFEST Wed Jun 10 15:23:27 2009 (r39495)
@@ -2098,6 +2098,7 @@
tools/dev/gen_charset_tables.pl []
tools/dev/gen_class.pl []
tools/dev/gen_makefile.pl [devel]
+tools/dev/gen_valgrind_suppressions.pl []
tools/dev/install_dev_files.pl []
tools/dev/install_files.pl []
tools/dev/lib_deps.pl []
Added: trunk/tools/dev/gen_valgrind_suppressions.pl
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/tools/dev/gen_valgrind_suppressions.pl Wed Jun 10 15:23:27 2009 (r39495)
@@ -0,0 +1,68 @@
+#! perl
+
+# Copyright (C) 2009, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use IO::File;
+
+# This is written with unix-like systems very much in mind. Feel free to
+# update this if/when valgrind is ported to other platforms.
+die "Must be run in (built) parrot source directory.\n" unless -f 'parrot';
+
+# create t/op/say_1.pir if necessary
+`prove t/op/say.t` unless -f 't/op/say_1.pir';
+
+my $pipe = IO::File->new( "valgrind --suppressions=tools/dev/parrot.supp"
+ ." --freelist-vol=1000000000 --num-callers=500"
+ ." --leak-check=full --leak-resolution=high"
+ ." --show-reachable=yes ./parrot --leak-test"
+ ." t/op/say_1.pir 2>&1 |" );
+
+# simple state machine.
+my ($line, $type);
+while(defined($line = $pipe->getline)) {
+ chomp($line);
+ if($line =~ /^==(\d+)== (.+)$/) {
+ my ($pid, $message) = ($1, $2);
+ if($message eq 'Conditional jump or move depends on uninitialised value(s)') {
+ $type = 'Cond';
+ }
+ if($message eq 'Use of uninitialised value of size 8') {
+ $type = 'Value8';
+ }
+ if($message eq 'Use of uninitialised value of size 4') {
+ $type = 'Value4';
+ }
+ elsif($message =~ / at (0x[0-9A-F]+): (\S+) \((.+)\)$/) {
+ my ($offset, $symbol, $object) = ($1, $2, $3);
+ if($object =~ m|in /lib[^/]*/ld-.+\.so$|) {
+ # suppress GNU ld error.
+ my $supp_name = lc("gnuld-$symbol-$type");
+ $supp_name =~ s/[-_]+/-/g;
+ emit($supp_name, $symbol, "Memcheck:$type", '/lib*/ld-*.so');
+ }
+ }
+ }
+}
+
+my %already_emitted;
+sub emit {
+ my ($name, $symbol, $type, $object) = @_;
+ return if exists($already_emitted{$name});
+ print("{\n");
+ print(" $name\n");
+ print(" $type\n");
+ print(" fun:$symbol\n");
+ print(" obj:$object\n");
+ print("}\n");
+ $already_emitted{$name} = 1;
+}
+
+# Local Variables:
+# mode: cperl
+# cperl-indent-level: 4
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
Modified: trunk/tools/dev/parrot.supp
==============================================================================
--- trunk/tools/dev/parrot.supp Wed Jun 10 15:23:20 2009 (r39494)
+++ trunk/tools/dev/parrot.supp Wed Jun 10 15:23:27 2009 (r39495)
@@ -78,7 +78,6 @@
fun:trace_children
fun:trace_active_PMCs
}
-
{
trace_children
Memcheck:Cond
@@ -86,3 +85,262 @@
fun:trace_active_PMCs
}
+# strip out the system library nonsense
+{
+ gnuld-index-cond
+ Memcheck:Cond
+ fun:index
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-strlen-cond
+ Memcheck:Cond
+ fun:strlen
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-libc-memalign-cond
+ Memcheck:Cond
+ fun:__libc_memalign
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-memcpy-cond
+ Memcheck:Cond
+ fun:memcpy
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-calloc-cond
+ Memcheck:Cond
+ fun:calloc
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-new-object-cond
+ Memcheck:Cond
+ fun:_dl_new_object
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-new-object-value8
+ Memcheck:Value8
+ fun:_dl_new_object
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-memcpy-value8
+ Memcheck:Value8
+ fun:memcpy
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-mempcpy-value8
+ Memcheck:Value8
+ fun:mempcpy
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-map-object-from-fd-cond
+ Memcheck:Cond
+ fun:_dl_map_object_from_fd
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-map-object-from-fd-value8
+ Memcheck:Value8
+ fun:_dl_map_object_from_fd
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-setup-hash-value8
+ Memcheck:Value8
+ fun:_dl_setup_hash
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-main-cond
+ Memcheck:Cond
+ fun:dl_main
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-main-value8
+ Memcheck:Value8
+ fun:dl_main
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-map-object-deps-value8
+ Memcheck:Value8
+ fun:_dl_map_object_deps
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-map-object-cond
+ Memcheck:Cond
+ fun:_dl_map_object
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-map-object-value8
+ Memcheck:Value8
+ fun:_dl_map_object
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-name-match-p-value8
+ Memcheck:Value8
+ fun:_dl_name_match_p
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-name-match-p-cond
+ Memcheck:Cond
+ fun:_dl_name_match_p
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-open-path-cond
+ Memcheck:Cond
+ fun:open_path
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-local-strdup-cond
+ Memcheck:Cond
+ fun:local_strdup
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-map-object-deps-cond
+ Memcheck:Cond
+ fun:_dl_map_object_deps
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-openaux-value8
+ Memcheck:Value8
+ fun:openaux
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-check-map-versions-cond
+ Memcheck:Cond
+ fun:_dl_check_map_versions
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-check-map-versions-value8
+ Memcheck:Value8
+ fun:_dl_check_map_versions
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-check-all-versions-cond
+ Memcheck:Cond
+ fun:_dl_check_all_versions
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-check-all-versions-value8
+ Memcheck:Value8
+ fun:_dl_check_all_versions
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-init-tls-cond
+ Memcheck:Cond
+ fun:init_tls
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-init-tls-value8
+ Memcheck:Value8
+ fun:init_tls
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-do-lookup-x-value8
+ Memcheck:Value8
+ fun:do_lookup_x
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-do-lookup-x-cond
+ Memcheck:Cond
+ fun:do_lookup_x
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-relocate-object-cond
+ Memcheck:Cond
+ fun:_dl_relocate_object
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-relocate-object-value8
+ Memcheck:Value8
+ fun:_dl_relocate_object
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-lookup-symbol-x-value8
+ Memcheck:Value8
+ fun:_dl_lookup_symbol_x
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-check-match.8513-value8
+ Memcheck:Value8
+ fun:check_match.8513
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-protect-relro-value8
+ Memcheck:Value8
+ fun:_dl_protect_relro
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-call-init-value8
+ Memcheck:Value8
+ fun:call_init
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-fixup-cond
+ Memcheck:Cond
+ fun:_dl_fixup
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-fixup-value8
+ Memcheck:Value8
+ fun:_dl_fixup
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-fini-cond
+ Memcheck:Cond
+ fun:_dl_fini
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-fini-value8
+ Memcheck:Value8
+ fun:_dl_fini
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-sort-fini-value8
+ Memcheck:Value8
+ fun:_dl_sort_fini
+ obj:/lib*/ld-*.so
+}
+{
+ gnuld-dl-sort-fini-cond
+ Memcheck:Cond
+ fun:_dl_sort_fini
+ obj:/lib*/ld-*.so
+}
More information about the parrot-commits
mailing list