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])
diff --git a/lib/ExecutionEngine/MCCacheReader.h b/lib/ExecutionEngine/MCCacheReader.h
index d1f230e..e826b36 100644
--- a/lib/ExecutionEngine/MCCacheReader.h
+++ b/lib/ExecutionEngine/MCCacheReader.h
@@ -57,7 +57,7 @@
public:
MCCacheReader()
: mObjFile(NULL), mInfoFile(NULL), mInfoFileSize(0), mpHeader(NULL),
- mpCachedDependTable(NULL), mpPragmaList(NULL), mpFuncTable(NULL),
+ mpCachedDependTable(NULL), mpPragmaList(NULL),
mIsContextSlotNotAvail(false) {
}
@@ -88,7 +88,6 @@
bool readExportVarList();
bool readExportFuncList();
bool readPragmaList();
- bool readFuncTable();
bool readObjectSlotList();
bool readObjFile();
bool readRelocationTable();
diff --git a/lib/ExecutionEngine/MCCacheWriter.cpp b/lib/ExecutionEngine/MCCacheWriter.cpp
index 499a82b..c2d0d04 100644
--- a/lib/ExecutionEngine/MCCacheWriter.cpp
+++ b/lib/ExecutionEngine/MCCacheWriter.cpp
@@ -44,7 +44,6 @@
CHECK_AND_FREE(mpExportVarListSection);
CHECK_AND_FREE(mpExportFuncListSection);
CHECK_AND_FREE(mpPragmaListSection);
- CHECK_AND_FREE(mpFuncTableSection);
CHECK_AND_FREE(mpObjectSlotSection);
#undef CHECK_AND_FREE
@@ -62,7 +61,6 @@
bool result = prepareHeader(libRS_threadable)
&& prepareDependencyTable()
- && prepareFuncTable()
&& preparePragmaList()
&& prepareStringPool()
&& prepareExportVarList()
@@ -142,42 +140,6 @@
return true;
}
-
-bool MCCacheWriter::prepareFuncTable() {
- size_t funcCount = mpOwner->getFuncCount();
-
- size_t tableSize = sizeof(OBCC_FuncTable) +
- sizeof(OBCC_FuncInfo) * funcCount;
-
- OBCC_FuncTable *tab = (OBCC_FuncTable *)malloc(tableSize);
-
- if (!tab) {
- LOGE("Unable to allocate for function table section.\n");
- return false;
- }
-
- mpFuncTableSection = tab;
- mpHeaderSection->func_table_size = tableSize;
-
- tab->count = static_cast<size_t>(funcCount);
-
- // Get the function informations
- vector<FuncInfo> funcInfoList(funcCount);
- mpOwner->getFuncInfoList(funcCount, &*funcInfoList.begin());
-
- for (size_t i = 0; i < funcCount; ++i) {
- FuncInfo *info = &funcInfoList[i];
- OBCC_FuncInfo *outputInfo = &tab->table[i];
-
- outputInfo->name_strp_index = addString(info->name, strlen(info->name));
- outputInfo->cached_addr = info->addr;
- outputInfo->size = info->size;
- }
-
- return true;
-}
-
-
bool MCCacheWriter::preparePragmaList() {
size_t pragmaCount = mpOwner->getPragmaCount();
@@ -381,7 +343,6 @@
WRITE_SECTION_SIMPLE(export_var_list, mpExportVarListSection);
WRITE_SECTION_SIMPLE(export_func_list, mpExportFuncListSection);
WRITE_SECTION_SIMPLE(pragma_list, mpPragmaListSection);
- WRITE_SECTION_SIMPLE(func_table, mpFuncTableSection);
WRITE_SECTION_SIMPLE(object_slot_list, mpObjectSlotSection);
#undef WRITE_SECTION_SIMPLE
diff --git a/lib/ExecutionEngine/MCCacheWriter.h b/lib/ExecutionEngine/MCCacheWriter.h
index 9970dfb..962ef06 100644
--- a/lib/ExecutionEngine/MCCacheWriter.h
+++ b/lib/ExecutionEngine/MCCacheWriter.h
@@ -46,7 +46,6 @@
OBCC_ExportVarList *mpExportVarListSection;
OBCC_ExportFuncList *mpExportFuncListSection;
OBCC_PragmaList *mpPragmaListSection;
- OBCC_FuncTable *mpFuncTableSection;
OBCC_ObjectSlotList *mpObjectSlotSection;
public:
@@ -54,7 +53,7 @@
: mpHeaderSection(NULL), mpStringPoolSection(NULL),
mpDependencyTableSection(NULL), mpExportVarListSection(NULL),
mpExportFuncListSection(NULL), mpPragmaListSection(NULL),
- mpFuncTableSection(NULL), mpObjectSlotSection(NULL) {
+ mpObjectSlotSection(NULL) {
}
~MCCacheWriter();
@@ -77,7 +76,6 @@
bool prepareExportVarList();
bool prepareExportFuncList();
bool preparePragmaList();
- bool prepareFuncTable();
bool prepareObjectSlotList();
bool writeAll();