/* * Copyright 2010-2012, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef BCC_SCRIPTCACHED_H #define BCC_SCRIPTCACHED_H #include "Config.h" #include #include #include "bcc_internal.h" #include "librsloader.h" #include #include #include #include #include #include namespace llvm { class Module; } namespace bcc { class Script; class ScriptCached { friend class CacheReader; friend class MCCacheReader; private: enum { SMALL_VECTOR_QUICKN = 16 }; typedef llvm::SmallVector, SMALL_VECTOR_QUICKN> PragmaList; typedef std::map > FuncTable; private: Script *mpOwner; MCO_ExportVarList *mpExportVars; MCO_ExportFuncList *mpExportFuncs; MCO_ExportForEachList *mpExportForEach; PragmaList mPragmas; MCO_ObjectSlotList *mpObjectSlotList; FuncTable mFunctions; RSExecRef mRSExecutable; llvm::SmallVector mCachedELFExecutable; MCO_StringPool *mpStringPoolRaw; std::vector mStringPool; bool mLibRSThreadable; public: ScriptCached(Script *owner) : mpOwner(owner), mpExportVars(NULL), mpExportFuncs(NULL), mpExportForEach(NULL), mpObjectSlotList(NULL), mpStringPoolRaw(NULL), mLibRSThreadable(false) { } ~ScriptCached(); void *lookup(const char *name); size_t getExportVarCount() const { return mpExportVars->count; } size_t getExportFuncCount() const { return mpExportFuncs->count; } size_t getExportForEachCount() const { return mpExportForEach->count; } size_t getPragmaCount() const { return mPragmas.size(); } size_t getFuncCount() const { return mFunctions.size(); } size_t getObjectSlotCount() const { return mpObjectSlotList->count; } void getExportVarList(size_t varListSize, void **varList); void getExportFuncList(size_t funcListSize, void **funcList); void getExportForEachList(size_t forEachListSize, void **forEachList); void getPragmaList(size_t pragmaListSize, char const **keyList, char const **valueList); void getFuncInfoList(size_t funcInfoListSize, FuncInfo *funcNameList); void getObjectSlotList(size_t objectSlotListSize, uint32_t *objectSlotList); const char *getELF() const { return &*mCachedELFExecutable.begin(); } size_t getELFSize() const { return mCachedELFExecutable.size(); } // Dirty hack for libRS. // TODO(all): This should be removed in the future. bool isLibRSThreadable() const { return mLibRSThreadable; } #if 0 void registerSymbolCallback(BCCSymbolLookupFn pFn, BCCvoid *pContext) { mCompiler.registerSymbolCallback(pFn, pContext); } #endif }; } // namespace bcc #endif // BCC_SCRIPTCACHED_H