14a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines/* 24a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * Copyright 2010-2012, The Android Open Source Project 34a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * 44a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 54a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * you may not use this file except in compliance with the License. 64a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * You may obtain a copy of the License at 74a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * 84a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 94a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * 104a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * Unless required by applicable law or agreed to in writing, software 114a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 124a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * See the License for the specific language governing permissions and 144a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines * limitations under the License. 154a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines */ 164a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 174a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines#include "ScriptCompiled.h" 184a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 194a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines#include "bcc_internal.h" 204a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines#include "DebugHelper.h" 214a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 224a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesnamespace bcc { 234a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 244a68b1cb89df9507584a51c3444aff99347afb74Stephen HinesScriptCompiled::~ScriptCompiled() { 254a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 264a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 274a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesvoid ScriptCompiled::getExportVarList(size_t varListSize, void **varList) { 284a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (varList) { 294a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines size_t varCount = getExportVarCount(); 304a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 314a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (varCount > varListSize) { 324a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines varCount = varListSize; 334a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 344a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 354a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines for (ExportVarList::const_iterator 364a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I = mExportVars.begin(), E = mExportVars.end(); 374a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I != E && varCount > 0; ++I, --varCount) { 384a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines *varList++ = *I; 394a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 404a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 414a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 424a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 434a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesvoid ScriptCompiled::getExportVarNameList(std::vector<std::string> &varList) { 444a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines varList = mExportVarsName; 454a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 464a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 474a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 484a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesvoid ScriptCompiled::getExportFuncNameList(std::vector<std::string> &funcList) { 494a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines funcList = mExportFuncsName; 504a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 514a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 524a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 534a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesvoid ScriptCompiled::getExportForEachNameList(std::vector<std::string> &forEachList) { 544a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines forEachList = mExportForEachName; 554a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 564a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 574a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 584a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesvoid ScriptCompiled::getExportFuncList(size_t funcListSize, void **funcList) { 594a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (funcList) { 604a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines size_t funcCount = getExportFuncCount(); 614a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 624a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (funcCount > funcListSize) { 634a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines funcCount = funcListSize; 644a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 654a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 664a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines for (ExportFuncList::const_iterator 674a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I = mExportFuncs.begin(), E = mExportFuncs.end(); 684a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I != E && funcCount > 0; ++I, --funcCount) { 694a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines *funcList++ = *I; 704a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 714a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 724a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 734a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 744a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 754a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesvoid ScriptCompiled::getExportForEachList(size_t forEachListSize, 764a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines void **forEachList) { 774a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (forEachList) { 784a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines size_t forEachCount = getExportForEachCount(); 794a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 804a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (forEachCount > forEachListSize) { 814a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines forEachCount = forEachListSize; 824a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 834a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 844a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines for (ExportForEachList::const_iterator 854a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I = mExportForEach.begin(), E = mExportForEach.end(); 864a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I != E && forEachCount > 0; ++I, --forEachCount) { 874a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines *forEachList++ = *I; 884a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 894a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 904a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 914a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 924a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 934a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesvoid ScriptCompiled::getPragmaList(size_t pragmaListSize, 944a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines char const **keyList, 954a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines char const **valueList) { 964a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines size_t pragmaCount = getPragmaCount(); 974a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 984a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (pragmaCount > pragmaListSize) { 994a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines pragmaCount = pragmaListSize; 1004a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 1014a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1024a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines for (PragmaList::const_iterator 1034a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I = mPragmas.begin(), E = mPragmas.end(); 1044a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I != E && pragmaCount > 0; ++I, --pragmaCount) { 1054a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (keyList) { *keyList++ = I->first.c_str(); } 1064a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (valueList) { *valueList++ = I->second.c_str(); } 1074a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 1084a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 1094a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1104a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1114a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesvoid *ScriptCompiled::lookup(const char *name) { 1124a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines return mCompiler.getSymbolAddress(name); 1134a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 1144a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1154a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1164a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesvoid ScriptCompiled::getFuncInfoList(size_t funcInfoListSize, 1174a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines FuncInfo *funcInfoList) { 1184a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (funcInfoList) { 1194a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines size_t funcCount = getFuncCount(); 1204a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1214a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (funcCount > funcInfoListSize) { 1224a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines funcCount = funcInfoListSize; 1234a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 1244a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1254a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines FuncInfo *info = funcInfoList; 1264a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines for (FuncInfoMap::const_iterator 1274a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I = mEmittedFunctions.begin(), E = mEmittedFunctions.end(); 1284a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I != E && funcCount > 0; ++I, ++info, --funcCount) { 1294a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines info->name = I->first.c_str(); 1304a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines info->addr = I->second->addr; 1314a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines info->size = I->second->size; 1324a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 1334a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 1344a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 1354a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1364a68b1cb89df9507584a51c3444aff99347afb74Stephen Hinesvoid ScriptCompiled::getObjectSlotList(size_t objectSlotListSize, 1374a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines uint32_t *objectSlotList) { 1384a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (objectSlotList) { 1394a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines size_t objectSlotCount = getObjectSlotCount(); 1404a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1414a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines if (objectSlotCount > objectSlotListSize) { 1424a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines objectSlotCount = objectSlotListSize; 1434a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 1444a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1454a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines for (ObjectSlotList::const_iterator 1464a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I = mObjectSlots.begin(), E = mObjectSlots.end(); 1474a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines I != E && objectSlotCount > 0; ++I, --objectSlotCount) { 1484a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines *objectSlotList++ = *I; 1494a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 1504a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines } 1514a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1524a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} 1534a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines 1544a68b1cb89df9507584a51c3444aff99347afb74Stephen Hines} // namespace bcc 155