diff options
author | dim <dim@FreeBSD.org> | 2014-11-06 22:49:13 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2014-11-06 22:49:13 +0000 |
commit | c3f67e1dc21025f1026cbf72628b19fb37f7b53d (patch) | |
tree | 3467f3372c1195b1546172d89af2205a50b1866d /lib/sanitizer_common/scripts/sancov.py | |
parent | 2f7fa77a0a85c00fd0cce298851e9577b98ccfe8 (diff) | |
download | FreeBSD-src-c3f67e1dc21025f1026cbf72628b19fb37f7b53d.zip FreeBSD-src-c3f67e1dc21025f1026cbf72628b19fb37f7b53d.tar.gz |
Import compiler-rt release_34 branch r197381.
https://llvm.org/svn/llvm-project/compiler-rt/branches/release_34@197381
Diffstat (limited to 'lib/sanitizer_common/scripts/sancov.py')
-rwxr-xr-x | lib/sanitizer_common/scripts/sancov.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/sanitizer_common/scripts/sancov.py b/lib/sanitizer_common/scripts/sancov.py new file mode 100755 index 0000000..aa791bc --- /dev/null +++ b/lib/sanitizer_common/scripts/sancov.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# Merge or print the coverage data collected by asan's coverage. +# Input files are sequences of 4-byte integers. +# We need to merge these integers into a set and then +# either print them (as hex) or dump them into another file. +import array +import sys + +prog_name = ""; + +def Usage(): + print >> sys.stderr, "Usage: \n" + \ + " " + prog_name + " merge file1 [file2 ...] > output\n" \ + " " + prog_name + " print file1 [file2 ...]\n" + exit(1) + +def ReadOneFile(path): + f = open(path, mode="rb") + f.seek(0, 2) + size = f.tell() + f.seek(0, 0) + s = set(array.array('I', f.read(size))) + f.close() + print >>sys.stderr, "%s: read %d PCs from %s" % (prog_name, size / 4, path) + return s + +def Merge(files): + s = set() + for f in files: + s = s.union(ReadOneFile(f)) + print >> sys.stderr, "%s: %d files merged; %d PCs total" % \ + (prog_name, len(files), len(s)) + return sorted(s) + +def PrintFiles(files): + s = Merge(files) + for i in s: + print "0x%x" % i + +def MergeAndPrint(files): + if sys.stdout.isatty(): + Usage() + s = Merge(files) + a = array.array('I', s) + a.tofile(sys.stdout) + +if __name__ == '__main__': + prog_name = sys.argv[0] + if len(sys.argv) <= 2: + Usage(); + if sys.argv[1] == "print": + PrintFiles(sys.argv[2:]) + elif sys.argv[1] == "merge": + MergeAndPrint(sys.argv[2:]) + else: + Usage() |