Code drop from //branches/cupcake/...@124589
diff --git a/tools/dexpreopt/Android.mk b/tools/dexpreopt/Android.mk
index 3988387..40aeee2 100644
--- a/tools/dexpreopt/Android.mk
+++ b/tools/dexpreopt/Android.mk
@@ -14,6 +14,7 @@
 # limitations under the License.
 #
 ifneq ($(TARGET_SIMULATOR),true)
+ifneq ($(DISABLE_DEXPREOPT),true)
 
 LOCAL_PATH := $(my-dir)
 include $(CLEAR_VARS)
@@ -33,4 +34,5 @@
 		$(LOCAL_PATH)/afar/Android.mk
 include $(subdir_makefiles)
 
+endif # !disable_dexpreopt
 endif # !sim
diff --git a/tools/dexpreopt/Config.mk b/tools/dexpreopt/Config.mk
index be9876f..58891fa 100644
--- a/tools/dexpreopt/Config.mk
+++ b/tools/dexpreopt/Config.mk
@@ -91,7 +91,7 @@
 	$(hide) \
 	    PATH=$(HOST_OUT_EXECUTABLES):$$PATH \
 	    $(DEXPREOPT) \
-		    --kernel prebuilt/android-arm/kernel-qemu \
+		    --kernel prebuilt/android-arm/kernel/kernel-qemu \
 		    --ramdisk $(BUILT_DEXPREOPT_RAMDISK) \
 		    --image $(BUILT_SYSTEMIMAGE_UNOPT) \
 		    --system $(PRODUCT_OUT) \
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