Make loader() seek to the beginning first. Focus on BCC_CODE_ADDR path.
Change-Id: I871c22d9a9026a8636ffeed3927414e928ffff4c
diff --git a/bcc.cpp b/bcc.cpp
index 358005b..d44d241 100644
--- a/bcc.cpp
+++ b/bcc.cpp
@@ -17,7 +17,9 @@
// Bitcode compiler (bcc) for Android:
// This is an eager-compilation JIT running on Android.
-//#define BCC_CODE_ADDR 0x7e00000
+// Fixed BCC_CODE_ADDR here only works for 1 cached EXE.
+// So when mLoaded == 1, will set mCacheNever to true.
+#define BCC_CODE_ADDR 0x7e00000
#define LOG_TAG "bcc"
#include <cutils/log.h>
@@ -2625,6 +2627,10 @@
goto giveup;
}
+ if (lseek(mCacheFd, 0, SEEK_SET) != 0) {
+ LOGE("Unable to seek to 0: %s\n", strerror(errno));
+ goto giveup;
+ }
// Read File Content
{
@@ -2636,6 +2642,8 @@
PROT_READ | PROT_EXEC | PROT_WRITE,
MAP_PRIVATE | MAP_FIXED,
mCacheFd, heuristicCodeOffset);
+ LOGE("sliao@Loader: mCacheSize=%x, heuristicCodeOffset=%x", mCacheSize, heuristicCodeOffset);
+ LOGE("sliao@Loader: mCodeDataAddr=%x", mCodeDataAddr);
if (mCodeDataAddr == MAP_FAILED) {
LOGE("unable to mmap .oBBC cache code/data: %s\n", strerror(errno));
@@ -2664,6 +2672,11 @@
}
mCacheHdr = reinterpret_cast<oBCCHeader *>(mCacheMapAddr);
+ LOGE("sliao: mCacheHdr->cachedCodeDataAddr=%x", mCacheHdr->cachedCodeDataAddr);
+ LOGE("mCacheHdr->rootAddr=%x", mCacheHdr->rootAddr);
+ LOGE("mCacheHdr->initAddr=%x", mCacheHdr->initAddr);
+ LOGE("mCacheHdr->codeOffset=%x", mCacheHdr->codeOffset);
+ LOGE("mCacheHdr->codeSize=%x", mCacheHdr->codeSize);
if (mCacheHdr->codeOffset != (uint32_t)heuristicCodeOffset) {
LOGE("assertion failed: heuristic code offset is not correct.\n");