ScriptC's mEnvironment.mIsThreadable needs to survive caching and then caching-reloading.
Change-Id: Id79931ce1a15c7c81aefee8b963958d97e76e6de
diff --git a/lib/bcc/CodeEmitter.h b/lib/bcc/CodeEmitter.h
index 7096bcf..6cb0a07 100644
--- a/lib/bcc/CodeEmitter.h
+++ b/lib/bcc/CodeEmitter.h
@@ -147,11 +147,11 @@
llvm::MCInstPrinter *mpIP;
#endif
+ public:
// Resolver to undefined symbol in CodeEmitter
BCCSymbolLookupFn mpSymbolLookupFn;
void *mpSymbolLookupContext;
- public:
// Will take the ownership of @MemMgr
explicit CodeEmitter(CodeMemoryManager *pMemMgr);
diff --git a/lib/bcc/Compiler.cpp b/lib/bcc/Compiler.cpp
index 01c513a..1c903d8 100644
--- a/lib/bcc/Compiler.cpp
+++ b/lib/bcc/Compiler.cpp
@@ -1309,8 +1309,13 @@
memcpy(hdr->magicVersion, OBCC_MAGIC_VERS, 4);
// Timestamp
- hdr->sourceWhen = 0; // TODO(all)
- hdr->rslibWhen = 0; // TODO(all)
+ // TODO(sliao): Should be .bc's ModifyTime. Now just use it to store
+ // threadable
+ hdr->sourceWhen = (uint32_t) mCodeEmitter->mpSymbolLookupFn(
+ mpSymbolLookupContext,
+ "__isThreadable");
+
+ hdr->rslibWhen = 0; // TODO(sliao)
hdr->libRSWhen = statModifyTime(libRSPath);
hdr->libbccWhen = statModifyTime(libBccPath);
@@ -1798,11 +1803,16 @@
*/
val = optHdr.sourceWhen;
- if (val && (val != sourceWhen)) {
- LOGI("bcc: source file mod time mismatch (%08x vs %08x)\n",
- val, sourceWhen);
- goto bail;
+ // TODO(sliao): Shouldn't overload sourceWhen in the future.
+ if (!val) {
+ mpSymbolLookupFn(mpSymbolLookupContext, "__clearThreadable");
}
+ // if (val && (val != sourceWhen)) {
+ // LOGI("bcc: source file mod time mismatch (%08x vs %08x)\n",
+ // val, sourceWhen);
+ // goto bail;
+ // }
+
val = optHdr.rslibWhen;
if (val && (val != rslibWhen)) {
LOGI("bcc: rslib file mod time mismatch (%08x vs %08x)\n",