summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/sanitizer_common/scripts/sancov.py
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2015-03-19 19:52:30 +0000
committerKostya Serebryany <kcc@google.com>2015-03-19 19:52:30 +0000
commiteaec5b67e7c36a656b778bc53bc9101615bcf099 (patch)
tree75e97755721d7bb92eff5ced70e4432a062f990a /compiler-rt/lib/sanitizer_common/scripts/sancov.py
parent56376ef58fc4b139752e3c850da4547b8a551992 (diff)
downloadbcm5719-llvm-eaec5b67e7c36a656b778bc53bc9101615bcf099.tar.gz
bcm5719-llvm-eaec5b67e7c36a656b778bc53bc9101615bcf099.zip
[sanitizer] trying to fix sancov.py with 32-bit python
llvm-svn: 232754
Diffstat (limited to 'compiler-rt/lib/sanitizer_common/scripts/sancov.py')
-rwxr-xr-xcompiler-rt/lib/sanitizer_common/scripts/sancov.py25
1 files changed, 18 insertions, 7 deletions
diff --git a/compiler-rt/lib/sanitizer_common/scripts/sancov.py b/compiler-rt/lib/sanitizer_common/scripts/sancov.py
index a09dabbe198..c552c5a07aa 100755
--- a/compiler-rt/lib/sanitizer_common/scripts/sancov.py
+++ b/compiler-rt/lib/sanitizer_common/scripts/sancov.py
@@ -29,11 +29,28 @@ def TypeCodeForBits(bits):
kMagic64 = 0xC0BFFFFFFFFFFF64
kMagic32 = 0xC0BFFFFFFFFFFF32
+kMagic32SecondHalf = 0xFFFFFF32;
+kMagic64SecondHalf = 0xFFFFFF64;
+kMagicFirstHalf = 0xC0BFFFFF;
def MagicForBits(bits):
CheckBits(bits)
return kMagic64 if bits == 64 else kMagic32
+def ReadMagicAndReturnBitness(f):
+ magic_bytes = f.read(8)
+ magic_words = struct.unpack('II', magic_bytes);
+ bits = 0
+ # Assuming little endian.
+ if magic_words[1] == kMagicFirstHalf:
+ if magic_words[0] == kMagic64SecondHalf:
+ bits = 64
+ elif magic_words[0] == kMagic32SecondHalf:
+ bits = 32
+ if bits == 0:
+ raise Exception('Bad magic word in %s' % path)
+ return bits
+
def ReadOneFile(path):
with open(path, mode="rb") as f:
f.seek(0, 2)
@@ -41,13 +58,7 @@ def ReadOneFile(path):
f.seek(0, 0)
if size <= 8:
raise Exception('File %s is short (> 8 bytes)' % path)
- magic_word = struct.unpack('L', f.read(8))[0];
- if magic_word == kMagic64:
- bits = 64
- elif magic_word == kMagic32:
- bits = 32
- else:
- raise Exception('Bad magic word in %s' % path)
+ bits = ReadMagicAndReturnBitness(f)
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)
OpenPOWER on IntegriCloud