Use SHA1 to verify libbcc is consistent with cache
Modify Android.mk to build a host version of sha1sum.
Modify bcc and MCCacheReader/Writer to check for sha1 on runtime.
Change-Id: I0aa32e2efd85e21f67cd46a20a9e55a430c41f30
diff --git a/lib/ExecutionEngine/CacheReader.cpp b/lib/ExecutionEngine/CacheReader.cpp
index f748452..408b1f7 100644
--- a/lib/ExecutionEngine/CacheReader.cpp
+++ b/lib/ExecutionEngine/CacheReader.cpp
@@ -149,10 +149,10 @@
return false;
}
- if (memcmp(mpHeader->libbcc_build_time, libbcc_build_time, 24) != 0) {
- mpHeader->libbcc_build_time[24 - 1] = '\0'; // ensure terminated
- LOGW("Build time mismatch: lib %s cached %s\n", libbcc_build_time,
- mpHeader->libbcc_build_time);
+ if (memcmp(mpHeader->libbcc_build_checksum, libbcc_build_checksum, 41) != 0) {
+ mpHeader->libbcc_build_checksum[41 - 1] = '\0'; // ensure terminated
+ LOGW("Build checksum mismatch: lib %s cached %s\n", libbcc_build_checksum,
+ mpHeader->libbcc_build_checksum);
return false;
}
diff --git a/lib/ExecutionEngine/CacheWriter.cpp b/lib/ExecutionEngine/CacheWriter.cpp
index 67def9b..ab8dd03 100644
--- a/lib/ExecutionEngine/CacheWriter.cpp
+++ b/lib/ExecutionEngine/CacheWriter.cpp
@@ -93,7 +93,7 @@
// Magic word and version
memcpy(header->magic, OBCC_MAGIC, 4);
memcpy(header->version, OBCC_VERSION, 4);
- memcpy(header->libbcc_build_time, libbcc_build_time, 24);
+ memcpy(header->libbcc_build_checksum, libbcc_build_checksum, 41);
// Machine Integer Type
uint32_t number = 0x00000001;
diff --git a/lib/ExecutionEngine/Compiler.cpp b/lib/ExecutionEngine/Compiler.cpp
index 6f54dbc..4595d41 100644
--- a/lib/ExecutionEngine/Compiler.cpp
+++ b/lib/ExecutionEngine/Compiler.cpp
@@ -153,7 +153,7 @@
if (GlobalInitialized)
return;
- LOGI("LIBBCC BUILD: %s\n", libbcc_build_time);
+ LOGI("LIBBCC BUILD CHECKSUM: %s\n", libbcc_build_checksum);
// if (!llvm::llvm_is_multithreaded())
// llvm::llvm_start_multithreaded();
diff --git a/lib/ExecutionEngine/MCCacheReader.cpp b/lib/ExecutionEngine/MCCacheReader.cpp
index 35a006a..aac7be7 100644
--- a/lib/ExecutionEngine/MCCacheReader.cpp
+++ b/lib/ExecutionEngine/MCCacheReader.cpp
@@ -151,10 +151,10 @@
return false;
}
- if (memcmp(mpHeader->libbcc_build_time, libbcc_build_time, 24) != 0) {
- mpHeader->libbcc_build_time[24 - 1] = '\0'; // ensure terminated
- LOGW("Build time mismatch: lib %s cached %s\n", libbcc_build_time,
- mpHeader->libbcc_build_time);
+ if (memcmp(mpHeader->libbcc_build_checksum, libbcc_build_checksum, 41) != 0) {
+ mpHeader->libbcc_build_checksum[41 - 1] = '\0'; // ensure terminated
+ LOGW("Build checksum mismatch: lib %s cached %s\n", libbcc_build_checksum,
+ mpHeader->libbcc_build_checksum);
return false;
}
diff --git a/lib/ExecutionEngine/MCCacheWriter.cpp b/lib/ExecutionEngine/MCCacheWriter.cpp
index dc42cf0..499a82b 100644
--- a/lib/ExecutionEngine/MCCacheWriter.cpp
+++ b/lib/ExecutionEngine/MCCacheWriter.cpp
@@ -92,7 +92,7 @@
// Magic word and version
memcpy(header->magic, OBCC_MAGIC, 4);
memcpy(header->version, OBCC_VERSION, 4);
- memcpy(header->libbcc_build_time, libbcc_build_time, 24);
+ memcpy(header->libbcc_build_checksum, libbcc_build_checksum, 41);
// Machine Integer Type
uint32_t number = 0x00000001;
diff --git a/lib/ExecutionEngine/ScriptCached.h b/lib/ExecutionEngine/ScriptCached.h
index 147c935..39cf663 100644
--- a/lib/ExecutionEngine/ScriptCached.h
+++ b/lib/ExecutionEngine/ScriptCached.h
@@ -17,6 +17,8 @@
#ifndef BCC_SCRIPTCACHED_H
#define BCC_SCRIPTCACHED_H
+#include "Config.h"
+
#include <bcc/bcc.h>
#include <bcc/bcc_cache.h>
#include <bcc/bcc_mccache.h>
diff --git a/lib/ExecutionEngine/bcc.cpp b/lib/ExecutionEngine/bcc.cpp
index 30415d8..f0501cf 100644
--- a/lib/ExecutionEngine/bcc.cpp
+++ b/lib/ExecutionEngine/bcc.cpp
@@ -30,14 +30,10 @@
using namespace bcc;
-char const libbcc_build_time[24] = __DATE__ " " __TIME__;
-
-
namespace llvm {
class Module;
}
-
extern "C" BCCScriptRef bccCreateScript() {
BCC_FUNC_LOGGER();
return wrap(new bcc::Script());