33ffced5cc
This adds sanitizer-coverage compilation, test-runner features and post processing. Sanitizer coverage is expected to be used together with asan. During test runner execution, the produced sancov files are disambiguated and match the pattern: <executable name>.test.<test id>.sancov. Two additional scripts are added for merging raw sancov files and for generating json data containing all instrumented lines + all covered lines from merged sancov files. Both scripts use multiprocessing for speed. The json data will later be uploaded to google storage for further use, e.g. to show coverage data in rietveld. Sancov documentation: http://clang.llvm.org/docs/SanitizerCoverage.html BUG=chromium:568949 LOG=n NOTRY=true TEST=python -m unittest sancov_formatter_test TEST=python -m unittest sancov_merger_test Review URL: https://codereview.chromium.org/1737263003 Cr-Commit-Position: refs/heads/master@{#34578}
37 lines
952 B
Python
Executable File
37 lines
952 B
Python
Executable File
#!/usr/bin/env python
|
|
# Copyright 2016 the V8 project authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
# CC/CXX wrapper script that excludes certain file patterns from coverage
|
|
# instrumentation.
|
|
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
|
|
exclusions = [
|
|
'buildtools',
|
|
'src/third_party',
|
|
'third_party',
|
|
'test',
|
|
'testing',
|
|
]
|
|
|
|
def remove_if_exists(string_list, item):
|
|
if item in string_list:
|
|
string_list.remove(item)
|
|
|
|
args = sys.argv[1:]
|
|
text = ' '.join(sys.argv[2:])
|
|
for exclusion in exclusions:
|
|
if re.search(r'\-o obj/%s[^ ]*\.o' % exclusion, text):
|
|
remove_if_exists(args, '-fprofile-arcs')
|
|
remove_if_exists(args, '-ftest-coverage')
|
|
remove_if_exists(args, '-fsanitize-coverage=func')
|
|
remove_if_exists(args, '-fsanitize-coverage=bb')
|
|
remove_if_exists(args, '-fsanitize-coverage=edge')
|
|
break
|
|
|
|
sys.exit(subprocess.check_call(args))
|