1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
#include "llvm-c/BitReader.h"
#include "llvm-c/BitWriter.h"
#include "core.h"
extern "C" {
API_EXPORT(void)
LLVMPY_WriteBitcodeToString(LLVMModuleRef M, const char **outbuf,
size_t *outlen) {
LLVMMemoryBufferRef MB = LLVMWriteBitcodeToMemoryBuffer(M);
*outlen = LLVMGetBufferSize(MB);
*outbuf = LLVMPY_CreateByteString(LLVMGetBufferStart(MB), *outlen);
LLVMDisposeMemoryBuffer(MB);
}
API_EXPORT(LLVMModuleRef)
LLVMPY_ParseBitcode(LLVMContextRef context, const char *bitcode,
size_t bitcodelen, char **outmsg) {
LLVMModuleRef ref;
LLVMMemoryBufferRef mem = LLVMCreateMemoryBufferWithMemoryRange(
bitcode, bitcodelen, "" /* BufferName*/, 0 /* RequiresNullTerminator*/
);
LLVMParseBitcodeInContext(context, mem, &ref, outmsg);
LLVMDisposeMemoryBuffer(mem);
return ref;
}
} // end extern "C"
|