diff --git a/cpu_ref/rsCpuCore.cpp b/cpu_ref/rsCpuCore.cpp
index 75fc3f1..06e5ce7 100644
--- a/cpu_ref/rsCpuCore.cpp
+++ b/cpu_ref/rsCpuCore.cpp
@@ -46,8 +46,8 @@
 }
 
 RsdCpuReference * RsdCpuReference::create(Context *rsc, uint32_t version_major,
-                                          uint32_t version_minor, sym_lookup_t lfn,
-                                          script_lookup_t slfn) {
+        uint32_t version_minor, sym_lookup_t lfn, script_lookup_t slfn,
+        bcc::RSLinkRuntimeCallback pLinkRuntimeCallback) {
 
     RsdCpuReferenceImpl *cpu = new RsdCpuReferenceImpl(rsc);
     if (!cpu) {
@@ -57,6 +57,9 @@
         delete cpu;
         return NULL;
     }
+
+    cpu->setLinkRuntimeCallback(pLinkRuntimeCallback);
+
     return cpu;
 }
 
@@ -71,6 +74,7 @@
     return tls->mScript;
 }
 
+pthread_key_t RsdCpuReference::getThreadTLSKey(){ return gThreadTLSKey; }
 
 ////////////////////////////////////////////////////////////
 ///
@@ -84,6 +88,7 @@
     memset(&mWorkers, 0, sizeof(mWorkers));
     memset(&mTlsStruct, 0, sizeof(mTlsStruct));
     mExit = false;
+    mLinkRuntimeCallback = NULL;
 
 }
 
diff --git a/cpu_ref/rsCpuCore.h b/cpu_ref/rsCpuCore.h
index 79b9681..4c43a8d 100644
--- a/cpu_ref/rsCpuCore.h
+++ b/cpu_ref/rsCpuCore.h
@@ -110,6 +110,14 @@
         return mScriptLookupFn(mRSC, s);
     }
 
+    void setLinkRuntimeCallback(
+            bcc::RSLinkRuntimeCallback pLinkRuntimeCallback) {
+        mLinkRuntimeCallback = pLinkRuntimeCallback;
+    }
+    bcc::RSLinkRuntimeCallback getLinkRuntimeCallback() {
+        return mLinkRuntimeCallback;
+    }
+    virtual bool getInForEach() { return mInForEach; }
 
 protected:
     Context *mRSC;
@@ -135,6 +143,8 @@
     script_lookup_t mScriptLookupFn;
 
     ScriptTLSStruct mTlsStruct;
+
+    bcc::RSLinkRuntimeCallback mLinkRuntimeCallback;
 };
 
 
diff --git a/cpu_ref/rsCpuScript.cpp b/cpu_ref/rsCpuScript.cpp
index e79a675..257655a 100644
--- a/cpu_ref/rsCpuScript.cpp
+++ b/cpu_ref/rsCpuScript.cpp
@@ -91,7 +91,8 @@
     mCompilerDriver->setRSRuntimeLookupContext(this);
 
     exec = mCompilerDriver->build(*mCompilerContext, cacheDir, resName,
-                                  (const char *)bitcode, bitcodeSize, NULL);
+                                  (const char *)bitcode, bitcodeSize, NULL,
+                                  mCtx->getLinkRuntimeCallback());
 
     if (exec == NULL) {
         ALOGE("bcc: FAILS to prepare executable for '%s'", resName);
diff --git a/cpu_ref/rsCpuScript.h b/cpu_ref/rsCpuScript.h
index 2197a20..53835bd 100644
--- a/cpu_ref/rsCpuScript.h
+++ b/cpu_ref/rsCpuScript.h
@@ -78,6 +78,7 @@
 
     virtual Allocation * getAllocationForPointer(const void *ptr) const;
 
+    virtual  void * getRSExecutable() { return mExecutable; }
 
 protected:
     RsdCpuReferenceImpl *mCtx;
diff --git a/cpu_ref/rsd_cpu.h b/cpu_ref/rsd_cpu.h
index d96d2d1..c9b8a71 100644
--- a/cpu_ref/rsd_cpu.h
+++ b/cpu_ref/rsd_cpu.h
@@ -19,6 +19,18 @@
 
 #include "rsAllocation.h"
 
+namespace llvm {
+
+class Module;
+
+}  // end namespace llvm
+
+namespace bcc {
+
+class RSScript;
+typedef llvm::Module* (*RSLinkRuntimeCallback) (bcc::RSScript *, llvm::Module *, llvm::Module *);
+
+}  // end namespace bcc;
 
 namespace android {
 namespace renderscript {
@@ -66,6 +78,9 @@
 
         virtual Allocation * getAllocationForPointer(const void *ptr) const = 0;
         virtual ~CpuScript() {}
+
+        virtual  void * getRSExecutable()  = 0;
+
     };
     typedef CpuScript * (* script_lookup_t)(Context *, const Script *s);
 
@@ -79,9 +94,11 @@
 
     static Context * getTlsContext();
     static const Script * getTlsScript();
+    static pthread_key_t getThreadTLSKey();
 
     static RsdCpuReference * create(Context *c, uint32_t version_major,
-                                    uint32_t version_minor, sym_lookup_t lfn, script_lookup_t slfn);
+                                    uint32_t version_minor, sym_lookup_t lfn, script_lookup_t slfn,
+                                    bcc::RSLinkRuntimeCallback pLinkRuntimeCallback = NULL);
     virtual ~RsdCpuReference();
     virtual void setPriority(int32_t priority) = 0;
 
@@ -90,6 +107,8 @@
                                      uint32_t flags) = 0;
     virtual CpuScript * createIntrinsic(const Script *s, RsScriptIntrinsicID iid, Element *e) = 0;
     virtual CpuScriptGroup * createScriptGroup(const ScriptGroup *sg) = 0;
+    virtual bool getInForEach() = 0;
+
 };
 
 
