Code drop from //branches/cupcake/...@124589
diff --git a/tools/dexpreopt/dexpreopt.py b/tools/dexpreopt/dexpreopt.py
index 74523b1..8a80e06 100755
--- a/tools/dexpreopt/dexpreopt.py
+++ b/tools/dexpreopt/dexpreopt.py
@@ -520,7 +520,11 @@
buf.fromfile(ep.stdout, 4)
(adler32,) = struct.unpack('>i', buf) # adler32 wants a signed int ('i')
data_adler32 = zlib.adler32(data)
- if adler32 != data_adler32:
+ # Because of a difference in behavior of zlib.adler32 on 32-bit and 64-bit
+ # systems (one returns signed values, the other unsigned), we take the
+ # modulo 2**32 of the checksums, and compare those.
+ # See also http://bugs.python.org/issue1202
+ if (adler32 % (2**32)) != (data_adler32 % (2**32)):
Trace('adler32 does not match: calculated 0x%08x != expected 0x%08x' %
(data_adler32, adler32))
return False