Use 20-byte libbcc.so.sha1 to store checksum

Change-Id: I1e66e559918426e995b92785666beb7b6a49869d
diff --git a/lib/ExecutionEngine/Compiler.cpp b/lib/ExecutionEngine/Compiler.cpp
index 9d13039..b849505 100644
--- a/lib/ExecutionEngine/Compiler.cpp
+++ b/lib/ExecutionEngine/Compiler.cpp
@@ -246,8 +246,8 @@
      llvm::createLinearScanRegisterAllocator);
 
 #if USE_CACHE
-  // Calculate the SHA1 checksum of libbcc and libRS.
-  calcFileSHA1(sha1LibBCC_SHA1, pathLibBCC_SHA1);
+  // Read in SHA1 checksum of libbcc and libRS.
+  readSHA1(sha1LibBCC_SHA1, sizeof(sha1LibBCC_SHA1), pathLibBCC_SHA1);
 #endif
 
   GlobalInitialized = true;
diff --git a/lib/ExecutionEngine/Sha1Helper.cpp b/lib/ExecutionEngine/Sha1Helper.cpp
index e7e7932..4e9ee07 100644
--- a/lib/ExecutionEngine/Sha1Helper.cpp
+++ b/lib/ExecutionEngine/Sha1Helper.cpp
@@ -30,7 +30,7 @@
 namespace bcc {
 
 unsigned char sha1LibBCC_SHA1[20];
-char const *pathLibBCC_SHA1 = "/system/lib/libbcc_sha1.so";
+char const *pathLibBCC_SHA1 = "/system/lib/libbcc.so.sha1";
 
 void calcSHA1(unsigned char *result, char const *data, size_t size) {
   SHA1_CTX hashContext;
@@ -81,4 +81,14 @@
   SHA1Final(result, &hashContext);
 }
 
+void readSHA1(unsigned char *result, int result_size, char const *filename) {
+  FileHandle file;
+  if (file.open(filename, OpenMode::Read) < 0) {
+    LOGE("Unable to read binary sha1 file %s\n", filename);
+    memset(result, '\0', result_size);
+    return;
+  }
+  file.read((char *)result, result_size);
+}
+
 } // namespace bcc
diff --git a/lib/ExecutionEngine/Sha1Helper.h b/lib/ExecutionEngine/Sha1Helper.h
index f53c0ce..08e0cda 100644
--- a/lib/ExecutionEngine/Sha1Helper.h
+++ b/lib/ExecutionEngine/Sha1Helper.h
@@ -28,6 +28,9 @@
   void calcSHA1(unsigned char *result, char const *data, size_t size);
 
   void calcFileSHA1(unsigned char *result, char const *filename);
+
+  // Read binary representation of sha1 from filename.
+  void readSHA1(unsigned char *result, int resultsize, char const *filename);
 }
 
 #endif // BCC_SHA1HELPER_H