blob: 134ebc053c643af783c60c662eb81507a0882ee3 [file] [log] [blame]
/*
* Copyright (C) 2010 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 <stdint.h>
#include <sys/types.h>
typedef char BCCchar;
typedef int32_t BCCint;
typedef uint32_t BCCuint;
typedef ssize_t BCCsizei;
typedef unsigned int BCCenum;
typedef void BCCvoid;
#if !defined(__cplusplus)
typedef struct BCCscript BCCscript;
#else
namespace bcc {
class Script;
}
typedef bcc::Script BCCscript;
#endif
#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
#define BCC_COMPILE_STATUS 0x8B81
#define BCC_INFO_LOG_LENGTH 0x8B84
// ----------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
BCCscript *bccCreateScript();
void bccDeleteScript(BCCscript *script);
typedef BCCvoid *(*BCCSymbolLookupFn)(BCCvoid *pContext, const BCCchar *name);
void bccRegisterSymbolCallback(BCCscript *script,
BCCSymbolLookupFn pFn,
BCCvoid *pContext);
BCCenum bccGetError( BCCscript *script );
int bccReadBC(BCCscript *script,
const BCCchar *bitcode,
BCCint bitcodeSize,
long bitcodeFileModTime,
long bitcodeFileCRC32,
const BCCchar *resName,
const BCCchar *cacheDir);
int bccLoadBinary(BCCscript *script);
// Interface for llvm::Module input. @module should be a valid llvm::Module
// instance.
int bccReadModule(BCCscript *script,
BCCvoid *module);
void bccLinkBC(BCCscript *script,
const BCCchar *bitcode,
BCCint size);
int bccCompileBC(BCCscript *script);
void bccGetScriptInfoLog(BCCscript *script,
BCCsizei maxLength,
BCCsizei *length,
BCCchar *infoLog);
void bccGetScriptLabel(BCCscript *script,
const BCCchar *name,
BCCvoid **address);
void bccGetExportVars(BCCscript *script,
BCCsizei *actualVarCount,
BCCsizei maxVarCount,
BCCvoid **vars);
void bccGetExportFuncs(BCCscript *script,
BCCsizei *actualFuncCount,
BCCsizei maxFuncCount,
BCCvoid **funcs);
void bccGetPragmas(BCCscript *script,
BCCsizei *actualStringCount,
BCCsizei maxStringCount,
BCCchar **strings);
// Below two functions are for debugging
void bccGetFunctions(BCCscript *script,
BCCsizei *actualFunctionCount,
BCCsizei maxFunctionCount,
BCCchar **functions);
void bccGetFunctionBinary(BCCscript *script,
BCCchar *function,
BCCvoid **base,
BCCsizei *length);
#ifdef __cplusplus
};
#endif
// ----------------------------------------------------------------------------
#endif