summaryrefslogtreecommitdiffstats
path: root/tools/valgrind/tsan_analyze.py
diff options
context:
space:
mode:
authortimurrrr@chromium.org <timurrrr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-25 10:06:54 +0000
committertimurrrr@chromium.org <timurrrr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-25 10:06:54 +0000
commitb16980cf94fe618d9e3481812700494d1739289d (patch)
tree8f5d117fbc3f6893b99d7c07e9406bbc6073c3c0 /tools/valgrind/tsan_analyze.py
parente32205279fa14bee66c01f8e5410102d5e1a08fc (diff)
downloadchromium_src-b16980cf94fe618d9e3481812700494d1739289d.zip
chromium_src-b16980cf94fe618d9e3481812700494d1739289d.tar.gz
chromium_src-b16980cf94fe618d9e3481812700494d1739289d.tar.bz2
Refactor "Suppressions used" printing code in memcheck and tsan analyzer scripts
The code was added yesterday while improving drmemory_analyze.py, we want to have exactly the same format of used suppressions to simplify the code of the suppression dashboard parser TBR=glider TEST=./tools/valgrind/chrome_tests.sh --tool {tsan,memcheck} -t base --gtest_filter="*Sanity*" with and without the suppression files Review URL: http://codereview.chromium.org/8702004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@111580 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/valgrind/tsan_analyze.py')
-rw-r--r--tools/valgrind/tsan_analyze.py30
1 files changed, 12 insertions, 18 deletions
diff --git a/tools/valgrind/tsan_analyze.py b/tools/valgrind/tsan_analyze.py
index 195ec1b..af2d143 100644
--- a/tools/valgrind/tsan_analyze.py
+++ b/tools/valgrind/tsan_analyze.py
@@ -9,7 +9,7 @@
import gdb_helper
-import common
+from collections import defaultdict
import hashlib
import logging
import optparse
@@ -19,6 +19,8 @@ import subprocess
import sys
import time
+import common
+
# Global symbol table (ugh)
TheAddressTable = None
@@ -48,7 +50,8 @@ class TsanAnalyzer(object):
THREAD_CREATION_STR = ("INFO: T.* "
"(has been created by T.* at this point|is program's main thread)")
- SANITY_TEST_SUPPRESSION = "ThreadSanitizer sanity test"
+ SANITY_TEST_SUPPRESSION = ("ThreadSanitizer sanity test "
+ "(ToolsSanityTest.DataRace)")
TSAN_RACE_DESCRIPTION = "Possible data race"
TSAN_WARNING_DESCRIPTION = ("Unlocking a non-locked lock"
"|accessing an invalid lock"
@@ -186,10 +189,7 @@ class TsanAnalyzer(object):
if match:
count, supp_name = match.groups()
count = int(count)
- if supp_name in self.used_suppressions:
- self.used_suppressions[supp_name] += count
- else:
- self.used_suppressions[supp_name] = count
+ self.used_suppressions[supp_name] += count
self.cur_fd_.close()
return ret
@@ -207,7 +207,7 @@ class TsanAnalyzer(object):
else:
TheAddressTable = None
reports = []
- self.used_suppressions = {}
+ self.used_suppressions = defaultdict(int)
for file in files:
reports.extend(self.ParseReportFile(file))
if self._use_gdb:
@@ -230,16 +230,8 @@ class TsanAnalyzer(object):
reports = self.GetReports(files)
self._cur_testcase = None # just in case, shouldn't be used anymore
- is_sane = False
- print "-----------------------------------------------------"
- print "Suppressions used:"
- print " count name"
- for item in sorted(self.used_suppressions.items(), key=lambda (k,v): (v,k)):
- print "%7s %s" % (item[1], item[0])
- if item[0].startswith(TsanAnalyzer.SANITY_TEST_SUPPRESSION):
- is_sane = True
- print "-----------------------------------------------------"
- sys.stdout.flush()
+ common.PrintUsedSuppressionsList(self.used_suppressions)
+
retcode = 0
if reports:
@@ -249,12 +241,14 @@ class TsanAnalyzer(object):
retcode = -1
# Report tool's insanity even if there were errors.
- if check_sanity and not is_sane:
+ if (check_sanity and
+ TsanAnalyzer.SANITY_TEST_SUPPRESSION not in self.used_suppressions):
logging.error("FAIL! Sanity check failed!")
retcode = -3
if retcode != 0:
return retcode
+
logging.info("PASS: No reports found")
return 0