[compiler-rt] r232763 - [sanitizer] fix 'sancov.py merge' and add a test for it
Kostya Serebryany
kcc at google.com
Thu Mar 19 14:01:28 PDT 2015
Author: kcc
Date: Thu Mar 19 16:01:27 2015
New Revision: 232763
URL: http://llvm.org/viewvc/llvm-project?rev=232763&view=rev
Log:
[sanitizer] fix 'sancov.py merge' and add a test for it
Modified:
compiler-rt/trunk/lib/sanitizer_common/scripts/sancov.py
compiler-rt/trunk/test/asan/TestCases/Linux/coverage.cc
Modified: compiler-rt/trunk/lib/sanitizer_common/scripts/sancov.py
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/scripts/sancov.py?rev=232763&r1=232762&r2=232763&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/scripts/sancov.py (original)
+++ compiler-rt/trunk/lib/sanitizer_common/scripts/sancov.py Thu Mar 19 16:01:27 2015
@@ -35,9 +35,10 @@ kMagicFirstHalf = 0xC0BFFFFF;
def MagicForBits(bits):
CheckBits(bits)
- return kMagic64 if bits == 64 else kMagic32
+ # Little endian.
+ return [kMagic64SecondHalf if bits == 64 else kMagic32SecondHalf, kMagicFirstHalf]
-def ReadMagicAndReturnBitness(f):
+def ReadMagicAndReturnBitness(f, path):
magic_bytes = f.read(8)
magic_words = struct.unpack('II', magic_bytes);
bits = 0
@@ -48,7 +49,7 @@ def ReadMagicAndReturnBitness(f):
elif magic_words[0] == kMagic32SecondHalf:
bits = 32
if bits == 0:
- raise Exception('Bad magic word in %s' % path)
+ raise Exception('Bad magic word in %s' % path)
return bits
def ReadOneFile(path):
@@ -56,9 +57,9 @@ def ReadOneFile(path):
f.seek(0, 2)
size = f.tell()
f.seek(0, 0)
- if size <= 8:
- raise Exception('File %s is short (> 8 bytes)' % path)
- bits = ReadMagicAndReturnBitness(f)
+ if size < 8:
+ raise Exception('File %s is short (< 8 bytes)' % path)
+ bits = ReadMagicAndReturnBitness(f, path)
size -= 8
s = array.array(TypeCodeForBits(bits), f.read(size))
print >>sys.stderr, "%s: read %d %d-bit PCs from %s" % (prog_name, size * 8 / bits, bits, path)
@@ -77,6 +78,8 @@ def PrintFiles(files):
s = Merge(files)
else: # If there is just on file, print the PCs in order.
s = ReadOneFile(files[0])
+ print >> sys.stderr, "%s: 1 file merged; %d PCs total" % \
+ (prog_name, len(s))
for i in s:
print "0x%x" % i
@@ -85,10 +88,9 @@ def MergeAndPrint(files):
Usage()
s = Merge(files)
bits = 32
- magic = kMagic32
if max(s) > 0xFFFFFFFF:
bits = 64
- magic = kMagic64
+ array.array('I', MagicForBits(bits)).tofile(sys.stdout)
a = array.array(TypeCodeForBits(bits), s)
a.tofile(sys.stdout)
@@ -164,7 +166,7 @@ def UnpackOneRawFile(path, map_path):
arr = array.array(TypeCodeForBits(bits))
arr.fromlist(sorted(pc_list))
with open(dst_path, 'ab') as f2:
- array.array('L', [MagicForBits(bits)]).tofile(f2)
+ array.array('I', MagicForBits(bits)).tofile(f2)
arr.tofile(f2)
def RawUnpack(files):
Modified: compiler-rt/trunk/test/asan/TestCases/Linux/coverage.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Linux/coverage.cc?rev=232763&r1=232762&r2=232763&view=diff
==============================================================================
--- compiler-rt/trunk/test/asan/TestCases/Linux/coverage.cc (original)
+++ compiler-rt/trunk/test/asan/TestCases/Linux/coverage.cc Thu Mar 19 16:01:27 2015
@@ -1,11 +1,18 @@
// RUN: %clangxx_asan -fsanitize-coverage=1 -DSHARED %s -shared -o %T/libcoverage_test.so -fPIC
// RUN: %clangxx_asan -fsanitize-coverage=1 %s -o %t -Wl,-R,\$ORIGIN -L%T -lcoverage_test
// RUN: export ASAN_OPTIONS=coverage=1:verbosity=1
-// RUN: mkdir -p %T/coverage && cd %T/coverage
+// RUN: rm -rf %T/coverage && mkdir -p %T/coverage && cd %T/coverage
// RUN: %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-main
+// RUN: %sancov print coverage.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV1
// RUN: %run %t foo 2>&1 | FileCheck %s --check-prefix=CHECK-foo
+// RUN: %sancov print coverage.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
// RUN: %run %t bar 2>&1 | FileCheck %s --check-prefix=CHECK-bar
+// RUN: %sancov print coverage.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
// RUN: %run %t foo bar 2>&1 | FileCheck %s --check-prefix=CHECK-foo-bar
+// RUN: %sancov print coverage.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
+// RUN: %sancov print libcoverage_test.*sancov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV1
+// RUN: %sancov merge coverage.*sancov > merged-cov
+// RUN: %sancov print merged-cov 2>&1 | FileCheck %s --check-prefix=CHECK-SANCOV2
// RUN: not %run %t foo bar 4 2>&1 | FileCheck %s --check-prefix=CHECK-report
// RUN: not %run %t foo bar 4 5 2>&1 | FileCheck %s --check-prefix=CHECK-segv
// RUN: cd .. && rm coverage -r
@@ -69,3 +76,6 @@ int main(int argc, char **argv) {
//
// CHECK-segv: AddressSanitizer: SEGV
// CHECK-segv: PCs written
+//
+// CHECK-SANCOV1: 1 PCs total
+// CHECK-SANCOV2: 2 PCs total
More information about the llvm-commits
mailing list