[sanitizer] trying to fix sancov.py with 32-bit python

llvm-svn: 232754
This commit is contained in:
Kostya Serebryany 2015-03-19 19:52:30 +00:00
parent 56376ef58f
commit eaec5b67e7
1 changed files with 18 additions and 7 deletions

View File

@ -29,11 +29,28 @@ def TypeCodeForBits(bits):
kMagic64 = 0xC0BFFFFFFFFFFF64 kMagic64 = 0xC0BFFFFFFFFFFF64
kMagic32 = 0xC0BFFFFFFFFFFF32 kMagic32 = 0xC0BFFFFFFFFFFF32
kMagic32SecondHalf = 0xFFFFFF32;
kMagic64SecondHalf = 0xFFFFFF64;
kMagicFirstHalf = 0xC0BFFFFF;
def MagicForBits(bits): def MagicForBits(bits):
CheckBits(bits) CheckBits(bits)
return kMagic64 if bits == 64 else kMagic32 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): def ReadOneFile(path):
with open(path, mode="rb") as f: with open(path, mode="rb") as f:
f.seek(0, 2) f.seek(0, 2)
@ -41,13 +58,7 @@ def ReadOneFile(path):
f.seek(0, 0) f.seek(0, 0)
if size <= 8: if size <= 8:
raise Exception('File %s is short (> 8 bytes)' % path) raise Exception('File %s is short (> 8 bytes)' % path)
magic_word = struct.unpack('L', f.read(8))[0]; bits = ReadMagicAndReturnBitness(f)
if magic_word == kMagic64:
bits = 64
elif magic_word == kMagic32:
bits = 32
else:
raise Exception('Bad magic word in %s' % path)
size -= 8 size -= 8
s = array.array(TypeCodeForBits(bits), f.read(size)) 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) print >>sys.stderr, "%s: read %d %d-bit PCs from %s" % (prog_name, size * 8 / bits, bits, path)