1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ANDROID_BCC_BCC_H 18#define ANDROID_BCC_BCC_H 19 20#include <stddef.h> 21#include <stdint.h> 22 23/*-------------------------------------------------------------------------*/ 24 25/* libbcc script opaque type */ 26typedef struct BCCOpaqueScript *BCCScriptRef; 27 28 29/* Symbol lookup function type */ 30typedef void *(*BCCSymbolLookupFn)(void *context, char const *symbolName); 31 32 33/* llvm::Module (see <llvm>/include/llvm-c/Core.h for details) */ 34typedef struct LLVMOpaqueModule *LLVMModuleRef; 35 36 37/*-------------------------------------------------------------------------*/ 38 39 40#define BCC_NO_ERROR 0x0000 41#define BCC_INVALID_ENUM 0x0500 42#define BCC_INVALID_OPERATION 0x0502 43#define BCC_INVALID_VALUE 0x0501 44#define BCC_OUT_OF_MEMORY 0x0505 45 46 47/*-------------------------------------------------------------------------*/ 48 49 50/* Optional Flags for bccReadBC, bccReadFile, bccLinkBC, bccLinkFile */ 51#define BCC_SKIP_DEP_SHA1 (1 << 0) 52 53 54/*-------------------------------------------------------------------------*/ 55 56 57#ifdef __cplusplus 58extern "C" { 59#endif 60 61BCCScriptRef bccCreateScript(); 62 63void bccDisposeScript(BCCScriptRef script); 64 65int bccRegisterSymbolCallback(BCCScriptRef script, 66 BCCSymbolLookupFn pFn, 67 void *pContext); 68 69int bccGetError(BCCScriptRef script); /* deprecated */ 70 71 72 73int bccReadBC(BCCScriptRef script, 74 char const *resName, 75 char const *bitcode, 76 size_t bitcodeSize, 77 unsigned long flags); 78 79int bccReadModule(BCCScriptRef script, 80 char const *resName, 81 LLVMModuleRef module, 82 unsigned long flags); 83 84int bccReadFile(BCCScriptRef script, 85 char const *path, 86 unsigned long flags); 87 88int bccLinkBC(BCCScriptRef script, 89 char const *resName, 90 char const *bitcode, 91 size_t bitcodeSize, 92 unsigned long flags); 93 94int bccLinkFile(BCCScriptRef script, 95 char const *path, 96 unsigned long flags); 97 98void bccMarkExternalSymbol(BCCScriptRef script, char const *name); 99 100int bccPrepareSharedObject(BCCScriptRef script, 101 char const *cacheDir, 102 char const *cacheName, 103 unsigned long flags); 104 105int bccPrepareExecutable(BCCScriptRef script, 106 char const *cacheDir, 107 char const *cacheName, 108 unsigned long flags); 109 110void *bccGetFuncAddr(BCCScriptRef script, char const *funcname); 111 112void bccGetExportVarList(BCCScriptRef script, 113 size_t varListSize, 114 void **varList); 115 116void bccGetExportFuncList(BCCScriptRef script, 117 size_t funcListSize, 118 void **funcList); 119 120char const *bccGetBuildTime(); 121 122char const *bccGetBuildRev(); 123 124char const *bccGetBuildSHA1(); 125 126#ifdef __cplusplus 127}; 128#endif 129 130/*-------------------------------------------------------------------------*/ 131 132#endif 133