[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