| Index: tools/valgrind/tsan_analyze.py
|
| ===================================================================
|
| --- tools/valgrind/tsan_analyze.py (revision 111579)
|
| +++ tools/valgrind/tsan_analyze.py (working copy)
|
| @@ -9,7 +9,7 @@
|
|
|
| import gdb_helper
|
|
|
| -import common
|
| +from collections import defaultdict
|
| import hashlib
|
| import logging
|
| import optparse
|
| @@ -19,6 +19,8 @@
|
| import sys
|
| import time
|
|
|
| +import common
|
| +
|
| # Global symbol table (ugh)
|
| TheAddressTable = None
|
|
|
| @@ -48,7 +50,8 @@
|
| 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 @@
|
| 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 @@
|
| 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,17 +230,9 @@
|
| 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:
|
| logging.error("FAIL! Found %i report(s)" % len(reports))
|
| @@ -249,12 +241,14 @@
|
| 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
|
|
|
|
|