From 496dc253474878ac84a5151ffc3e94674974f1a1 Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Thu, 19 Mar 2015 19:52:30 +0000 Subject: [sanitizer] trying to fix sancov.py with 32-bit python git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@232754 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/sanitizer_common/scripts/sancov.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) (limited to 'lib/sanitizer_common/scripts') diff --git a/lib/sanitizer_common/scripts/sancov.py b/lib/sanitizer_common/scripts/sancov.py index a09dabbe1..c552c5a07 100755 --- a/lib/sanitizer_common/scripts/sancov.py +++ b/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) -- cgit v1.2.3