summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/sanitizer_common/scripts/sancov.py
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2015-03-19 21:01:27 +0000
committerKostya Serebryany <kcc@google.com>2015-03-19 21:01:27 +0000
commitdcb54db8090f8e2a10ef3b86b193f3e6b28265cf (patch)
tree0666c8a1b8bfc0d485edea3c015a743f7b231001 /compiler-rt/lib/sanitizer_common/scripts/sancov.py
parent237b6ed9e42742c3a74578220636b30b79b1fd06 (diff)
downloadbcm5719-llvm-dcb54db8090f8e2a10ef3b86b193f3e6b28265cf.tar.gz
bcm5719-llvm-dcb54db8090f8e2a10ef3b86b193f3e6b28265cf.zip
[sanitizer] fix 'sancov.py merge' and add a test for it
llvm-svn: 232763
Diffstat (limited to 'compiler-rt/lib/sanitizer_common/scripts/sancov.py')
-rwxr-xr-xcompiler-rt/lib/sanitizer_common/scripts/sancov.py20
1 files changed, 11 insertions, 9 deletions
diff --git a/compiler-rt/lib/sanitizer_common/scripts/sancov.py b/compiler-rt/lib/sanitizer_common/scripts/sancov.py
index c552c5a07aa..fc886c6f7e0 100755
--- a/compiler-rt/lib/sanitizer_common/scripts/sancov.py
+++ b/compiler-rt/lib/sanitizer_common/scripts/sancov.py
@@ -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):
OpenPOWER on IntegriCloud