Use 20-byte libbcc.so.sha1 to store checksum
Change-Id: I1e66e559918426e995b92785666beb7b6a49869d
diff --git a/Android.mk b/Android.mk
index 8b2f11a..ba1ea82 100644
--- a/Android.mk
+++ b/Android.mk
@@ -86,27 +86,19 @@
# Calculate SHA1 checksum for libbcc.so and libRS.so
# ========================================================
include $(CLEAR_VARS)
-LOCAL_MODULE := libbcc_sha1
+LOCAL_MODULE := libbcc.so.sha1
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-CONVERT_ASM := frameworks/compile/libbcc/tools/dataconvert.py
-
-intermediates := $(local-intermediates-dir)
-libbcc_CHECKSUM_FILE := $(intermediates)/checksum.S
-LOCAL_GENERATED_SOURCES += $(libbcc_CHECKSUM_FILE)
-
+include $(BUILD_SYSTEM)/base_rules.mk
libbcc_SHA1_SRCS := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/libbcc.so \
$(TARGET_OUT_INTERMEDIATE_LIBRARIES)/libRS.so
-$(libbcc_CHECKSUM_FILE): PRIVATE_SHA1_SRCS := $(libbcc_SHA1_SRCS)
-$(libbcc_CHECKSUM_FILE) : $(libbcc_SHA1_SRCS) \
- $(HOST_OUT_EXECUTABLES)/sha1sum
+$(LOCAL_BUILT_MODULE): PRIVATE_SHA1_SRCS := $(libbcc_SHA1_SRCS)
+$(LOCAL_BUILT_MODULE) : $(libbcc_SHA1_SRCS) \
+ $(HOST_OUT_EXECUTABLES)/sha1sum
$(hide) mkdir -p $(dir $@) && \
- cat $(PRIVATE_SHA1_SRCS) | $(HOST_OUT_EXECUTABLES)/sha1sum | \
- python $(CONVERT_ASM) libbcc_checksum > $@
-
-include $(BUILD_SHARED_LIBRARY)
+ cat $(PRIVATE_SHA1_SRCS) | $(HOST_OUT_EXECUTABLES)/sha1sum -B $@
#
# Shared library for target
@@ -246,8 +238,8 @@
$(LOCAL_STATIC_LIBRARIES)
endif
-# This makes libclcore.bc get installed if and only if the target libbcc.so is installed.
-LOCAL_REQUIRED_MODULES := libclcore.bc libbcc_sha1
+# Modules that need get installed if and only if the target libbcc.so is installed.
+LOCAL_REQUIRED_MODULES := libclcore.bc libbcc.so.sha1
# -Wl,--exclude-libs=ALL would hide most of the symbols in the shared library
# and reduces the size of libbcc.so by about 800k.
diff --git a/CleanSpec.mk b/CleanSpec.mk
index adf2982..d2a917e 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -47,6 +47,8 @@
$(call add-clean-step, rm -rf $(HOST_OUT)/obj/SHARED_LIBRARIES/libbcc_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib/libruntime.bc)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libclcore.bc_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libbcc_sha1_intermediates)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/lib/libbcc_sha1.so)
# ************************************************
diff --git a/helper/sha1.c b/helper/sha1.c
index 4141c55..e7d9f81 100644
--- a/helper/sha1.c
+++ b/helper/sha1.c
@@ -434,12 +434,7 @@
char ext[MAXEXT];
#endif
unsigned char err;
-
- // Read from STDIN
- sha1file(NULL, digest);
- for (j = 0; j < HASHSIZE; j++)
- printf("%02x", digest[j]);
- return 0;
+ const char *binary_output_file = 0;
for (i = 1; i < argc; i++)
{
@@ -447,6 +442,10 @@
{
switch (argv[i][1])
{
+ case 'B':
+ ++i;
+ binary_output_file = argv[i];
+ break;
case 'c':
case 'C':
check = 1;
@@ -461,6 +460,22 @@
}
}
+ // Read from STDIN
+ sha1file(NULL, digest);
+ if (binary_output_file) {
+ FILE *fout = fopen(binary_output_file, "wb");
+ if (!fout) {
+ fprintf(stderr, "Error: Can not write to %s.\n", binary_output_file);
+ return 1;
+ }
+ fwrite(digest, 1, HASHSIZE, fout);
+ fclose(fout);
+ return 0;
+ }
+ for (j = 0; j < HASHSIZE; j++)
+ printf("%02x", digest[j]);
+ return 0;
+
for (i=1; i<argc; i++)
{
if (argv[i][0] != '-')
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