/* * Copyright (C) 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 ANDROID_BCC_BCC_H #define ANDROID_BCC_BCC_H #include <stddef.h> #include <stdint.h> /*-------------------------------------------------------------------------*/ /* libbcc script opaque type */ typedef struct BCCOpaqueScript *BCCScriptRef; /* Symbol lookup function type */ typedef void *(*BCCSymbolLookupFn)(void *context, char const *symbolName); /* llvm::Module (see <llvm>/include/llvm-c/Core.h for details) */ typedef struct LLVMOpaqueModule *LLVMModuleRef; /*-------------------------------------------------------------------------*/ #define BCC_NO_ERROR 0x0000 #define BCC_INVALID_ENUM 0x0500 #define BCC_INVALID_OPERATION 0x0502 #define BCC_INVALID_VALUE 0x0501 #define BCC_OUT_OF_MEMORY 0x0505 /*-------------------------------------------------------------------------*/ /* Optional Flags for bccReadBC, bccReadFile, bccLinkBC, bccLinkFile */ #define BCC_SKIP_DEP_SHA1 (1 << 0) /*-------------------------------------------------------------------------*/ /* * Relocation model when prepare object, it provides 1-1 mapping to the enum * llvm::Reloc::Model in llvm/Support/CodeGen.h */ typedef enum bccRelocModelEnum { bccRelocDefault, // Use default target-defined relocation model bccRelocStatic, bccRelocPIC, bccRelocDynamicNoPIC } bccRelocModelEnum; /*-------------------------------------------------------------------------*/ #ifdef __cplusplus extern "C" { #endif BCCScriptRef bccCreateScript(); void bccDisposeScript(BCCScriptRef script); int bccRegisterSymbolCallback(BCCScriptRef script, BCCSymbolLookupFn pFn, void *pContext); int bccGetError(BCCScriptRef script); /* deprecated */ int bccReadBC(BCCScriptRef script, char const *resName, char const *bitcode, size_t bitcodeSize, unsigned long flags); int bccReadModule(BCCScriptRef script, char const *resName, LLVMModuleRef module, unsigned long flags); int bccReadFile(BCCScriptRef script, char const *path, unsigned long flags); int bccLinkBC(BCCScriptRef script, char const *resName, char const *bitcode, size_t bitcodeSize, unsigned long flags); int bccLinkFile(BCCScriptRef script, char const *path, unsigned long flags); void bccMarkExternalSymbol(BCCScriptRef script, char const *name); int bccPrepareRelocatable(BCCScriptRef script, char const *objPath, bccRelocModelEnum RelocModel, unsigned long flags); int bccPrepareSharedObject(BCCScriptRef script, char const *objPath, char const *dsoPath, unsigned long flags); int bccPrepareExecutable(BCCScriptRef script, char const *cacheDir, char const *cacheName, unsigned long flags); void *bccGetFuncAddr(BCCScriptRef script, char const *funcname); void bccGetExportVarList(BCCScriptRef script, size_t varListSize, void **varList); void bccGetExportFuncList(BCCScriptRef script, size_t funcListSize, void **funcList); void bccGetExportForEachList(BCCScriptRef script, size_t forEachListSize, void **forEachList); char const *bccGetBuildTime(); char const *bccGetBuildRev(); char const *bccGetBuildSHA1(); #ifdef __cplusplus }; #endif /*-------------------------------------------------------------------------*/ #endif