177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* 2932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * Copyright (C) 2010 The Android Open Source Project 377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License"); 577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * you may not use this file except in compliance with the License. 677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * You may obtain a copy of the License at 777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * http://www.apache.org/licenses/LICENSE-2.0 977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * Unless required by applicable law or agreed to in writing, software 1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS, 1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * See the License for the specific language governing permissions and 1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * limitations under the License. 1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao */ 1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifndef ANDROID_BCC_BCC_H 1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define ANDROID_BCC_BCC_H 1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 20f340bf71ff377979d279132dcf5a801d76747d1fLogan#include <stddef.h> 214dcd6798f3db374a056ea6acc6b425f544c5207cLogan#include <stdint.h> 2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 23f340bf71ff377979d279132dcf5a801d76747d1fLogan/*-------------------------------------------------------------------------*/ 24f340bf71ff377979d279132dcf5a801d76747d1fLogan 25f340bf71ff377979d279132dcf5a801d76747d1fLogan/* libbcc script opaque type */ 26f340bf71ff377979d279132dcf5a801d76747d1fLogantypedef struct BCCOpaqueScript *BCCScriptRef; 27f340bf71ff377979d279132dcf5a801d76747d1fLogan 28f340bf71ff377979d279132dcf5a801d76747d1fLogan 29f340bf71ff377979d279132dcf5a801d76747d1fLogan/* Symbol lookup function type */ 30f340bf71ff377979d279132dcf5a801d76747d1fLogantypedef void *(*BCCSymbolLookupFn)(void *context, char const *symbolName); 313f3d31fc9eac3d82ed9d04690aafb58f1715b8d8Logan 323f3d31fc9eac3d82ed9d04690aafb58f1715b8d8Logan 33f340bf71ff377979d279132dcf5a801d76747d1fLogan/* llvm::Module (see <llvm>/include/llvm-c/Core.h for details) */ 34f340bf71ff377979d279132dcf5a801d76747d1fLogantypedef struct LLVMOpaqueModule *LLVMModuleRef; 353f3d31fc9eac3d82ed9d04690aafb58f1715b8d8Logan 363f3d31fc9eac3d82ed9d04690aafb58f1715b8d8Logan 37f340bf71ff377979d279132dcf5a801d76747d1fLogan/*-------------------------------------------------------------------------*/ 38f340bf71ff377979d279132dcf5a801d76747d1fLogan 3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 40f340bf71ff377979d279132dcf5a801d76747d1fLogan#define BCC_NO_ERROR 0x0000 41f340bf71ff377979d279132dcf5a801d76747d1fLogan#define BCC_INVALID_ENUM 0x0500 42f340bf71ff377979d279132dcf5a801d76747d1fLogan#define BCC_INVALID_OPERATION 0x0502 43f340bf71ff377979d279132dcf5a801d76747d1fLogan#define BCC_INVALID_VALUE 0x0501 44f340bf71ff377979d279132dcf5a801d76747d1fLogan#define BCC_OUT_OF_MEMORY 0x0505 4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 47f340bf71ff377979d279132dcf5a801d76747d1fLogan/*-------------------------------------------------------------------------*/ 48f340bf71ff377979d279132dcf5a801d76747d1fLogan 4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 50474cbd2fde362e63375f7a5099ca38b5c67835cfLogan/* Optional Flags for bccReadBC, bccReadFile, bccLinkBC, bccLinkFile */ 51474cbd2fde362e63375f7a5099ca38b5c67835cfLogan#define BCC_SKIP_DEP_SHA1 (1 << 0) 52474cbd2fde362e63375f7a5099ca38b5c67835cfLogan 53474cbd2fde362e63375f7a5099ca38b5c67835cfLogan 54474cbd2fde362e63375f7a5099ca38b5c67835cfLogan/*-------------------------------------------------------------------------*/ 55474cbd2fde362e63375f7a5099ca38b5c67835cfLogan 56474cbd2fde362e63375f7a5099ca38b5c67835cfLogan 5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifdef __cplusplus 5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoextern "C" { 5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif 6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 61f340bf71ff377979d279132dcf5a801d76747d1fLoganBCCScriptRef bccCreateScript(); 6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 63f340bf71ff377979d279132dcf5a801d76747d1fLoganvoid bccDisposeScript(BCCScriptRef script); 6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 65ce82d492bbcc4da2d5358275c27ec38eef060fbdShih-wei Liaoint bccRegisterSymbolCallback(BCCScriptRef script, 66ce82d492bbcc4da2d5358275c27ec38eef060fbdShih-wei Liao BCCSymbolLookupFn pFn, 67ce82d492bbcc4da2d5358275c27ec38eef060fbdShih-wei Liao void *pContext); 68f340bf71ff377979d279132dcf5a801d76747d1fLogan 69f340bf71ff377979d279132dcf5a801d76747d1fLoganint bccGetError(BCCScriptRef script); /* deprecated */ 70f340bf71ff377979d279132dcf5a801d76747d1fLogan 71f340bf71ff377979d279132dcf5a801d76747d1fLogan 72f340bf71ff377979d279132dcf5a801d76747d1fLogan 73f340bf71ff377979d279132dcf5a801d76747d1fLoganint bccReadBC(BCCScriptRef script, 74f340bf71ff377979d279132dcf5a801d76747d1fLogan char const *resName, 75f340bf71ff377979d279132dcf5a801d76747d1fLogan char const *bitcode, 76f340bf71ff377979d279132dcf5a801d76747d1fLogan size_t bitcodeSize, 77f340bf71ff377979d279132dcf5a801d76747d1fLogan unsigned long flags); 78f340bf71ff377979d279132dcf5a801d76747d1fLogan 79f340bf71ff377979d279132dcf5a801d76747d1fLoganint bccReadModule(BCCScriptRef script, 80f340bf71ff377979d279132dcf5a801d76747d1fLogan char const *resName, 81f340bf71ff377979d279132dcf5a801d76747d1fLogan LLVMModuleRef module, 82f340bf71ff377979d279132dcf5a801d76747d1fLogan unsigned long flags); 83f340bf71ff377979d279132dcf5a801d76747d1fLogan 84474cbd2fde362e63375f7a5099ca38b5c67835cfLoganint bccReadFile(BCCScriptRef script, 85474cbd2fde362e63375f7a5099ca38b5c67835cfLogan char const *path, 86474cbd2fde362e63375f7a5099ca38b5c67835cfLogan unsigned long flags); 87474cbd2fde362e63375f7a5099ca38b5c67835cfLogan 88f340bf71ff377979d279132dcf5a801d76747d1fLoganint bccLinkBC(BCCScriptRef script, 89f340bf71ff377979d279132dcf5a801d76747d1fLogan char const *resName, 90f340bf71ff377979d279132dcf5a801d76747d1fLogan char const *bitcode, 91f340bf71ff377979d279132dcf5a801d76747d1fLogan size_t bitcodeSize, 92f340bf71ff377979d279132dcf5a801d76747d1fLogan unsigned long flags); 93f340bf71ff377979d279132dcf5a801d76747d1fLogan 94474cbd2fde362e63375f7a5099ca38b5c67835cfLoganint bccLinkFile(BCCScriptRef script, 95474cbd2fde362e63375f7a5099ca38b5c67835cfLogan char const *path, 96474cbd2fde362e63375f7a5099ca38b5c67835cfLogan unsigned long flags); 97474cbd2fde362e63375f7a5099ca38b5c67835cfLogan 987890d437030c1594bc9c9f61fa1e80a57754b078Logan Chienvoid bccMarkExternalSymbol(BCCScriptRef script, char const *name); 997890d437030c1594bc9c9f61fa1e80a57754b078Logan Chien 1004928104ef3aad39e00d22ac81fd2aad6d41a25bfJoseph Wenint bccPrepareSharedObject(BCCScriptRef script, 1014928104ef3aad39e00d22ac81fd2aad6d41a25bfJoseph Wen char const *cacheDir, 1024928104ef3aad39e00d22ac81fd2aad6d41a25bfJoseph Wen char const *cacheName, 1034928104ef3aad39e00d22ac81fd2aad6d41a25bfJoseph Wen unsigned long flags); 1044928104ef3aad39e00d22ac81fd2aad6d41a25bfJoseph Wen 105f340bf71ff377979d279132dcf5a801d76747d1fLoganint bccPrepareExecutable(BCCScriptRef script, 106c2be0a15b2dfcc6f471527a0112ac42d51a0bf2fLogan Chien char const *cacheDir, 107c2be0a15b2dfcc6f471527a0112ac42d51a0bf2fLogan Chien char const *cacheName, 108c2be0a15b2dfcc6f471527a0112ac42d51a0bf2fLogan Chien unsigned long flags); 109f340bf71ff377979d279132dcf5a801d76747d1fLogan 110f340bf71ff377979d279132dcf5a801d76747d1fLoganvoid *bccGetFuncAddr(BCCScriptRef script, char const *funcname); 111f340bf71ff377979d279132dcf5a801d76747d1fLogan 112f340bf71ff377979d279132dcf5a801d76747d1fLoganvoid bccGetExportVarList(BCCScriptRef script, 113f340bf71ff377979d279132dcf5a801d76747d1fLogan size_t varListSize, 114f340bf71ff377979d279132dcf5a801d76747d1fLogan void **varList); 115f340bf71ff377979d279132dcf5a801d76747d1fLogan 116f340bf71ff377979d279132dcf5a801d76747d1fLoganvoid bccGetExportFuncList(BCCScriptRef script, 117f340bf71ff377979d279132dcf5a801d76747d1fLogan size_t funcListSize, 118f340bf71ff377979d279132dcf5a801d76747d1fLogan void **funcList); 119f340bf71ff377979d279132dcf5a801d76747d1fLogan 12048dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chienchar const *bccGetBuildTime(); 12148dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chien 12248dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chienchar const *bccGetBuildRev(); 12348dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chien 12448dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chienchar const *bccGetBuildSHA1(); 12548dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chien 12677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifdef __cplusplus 12777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao}; 12877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif 12977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 130f340bf71ff377979d279132dcf5a801d76747d1fLogan/*-------------------------------------------------------------------------*/ 13177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 13277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif 133