Fixbug libbcc cache variable relocation.

Change-Id: I18f98e366dfc57b5e81dfdcfadcf5d99fbf9ffd2
diff --git a/lib/ExecutionEngine/MCCacheReader.cpp b/lib/ExecutionEngine/MCCacheReader.cpp
index aac7be7..2034317 100644
--- a/lib/ExecutionEngine/MCCacheReader.cpp
+++ b/lib/ExecutionEngine/MCCacheReader.cpp
@@ -48,7 +48,6 @@
   if (mpHeader) { free(mpHeader); }
   if (mpCachedDependTable) { free(mpCachedDependTable); }
   if (mpPragmaList) { free(mpPragmaList); }
-  if (mpFuncTable) { free(mpFuncTable); }
 }
 
 ScriptCached *MCCacheReader::readCacheFile(FileHandle *objFile,
@@ -82,7 +81,6 @@
              && readExportVarList()
              && readExportFuncList()
              && readPragmaList()
-             && readFuncTable()
              && readObjectSlotList()
              && readObjFile()
              && relocate()
@@ -410,20 +408,6 @@
   return true;
 }
 
-bool MCCacheReader::readFuncTable() {
-  CACHE_READER_READ_SECTION(OBCC_FuncTable, mpFuncTable, func_table);
-
-  vector<char const *> &strPool = mpResult->mStringPool;
-  ScriptCached::FuncTable &table = mpResult->mFunctions;
-  for (size_t i = 0; i < func_table_raw->count; ++i) {
-    OBCC_FuncInfo *func = &func_table_raw->table[i];
-    table.insert(make_pair(strPool[func->name_strp_index],
-                           make_pair(func->cached_addr, func->size)));
-  }
-
-  return true;
-}
-
 #undef CACHE_READER_READ_SECTION
 
 bool MCCacheReader::readRelocationTable() {
@@ -437,6 +421,9 @@
   int mRootOffset = reinterpret_cast<char *>(rootPtr) -
                     reinterpret_cast<char *>(mpHeader->root_base_addr);
   for (size_t i = 0; i < mpResult->getExportVarCount(); ++i) {
+    // Variable is optimized out by libbcc. Don't relocate.
+    if (mpResult->mpExportVars->cached_addr_list[i] == 0x00) continue;
+
     mpResult->mpExportVars->cached_addr_list[i] =
     reinterpret_cast<void *>(
         reinterpret_cast<char *>(mpResult->mpExportVars->cached_addr_list[i])