1 //===-- BitReader.cpp -----------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "llvm-c/BitReader.h" 11 #include "llvm/Bitcode/ReaderWriter.h" 12 #include "llvm/Support/MemoryBuffer.h" 13 #include <string> 14 #include <cstring> 15 16 using namespace llvm; 17 18 /* Builds a module from the bitcode in the specified memory buffer, returning a 19 reference to the module via the OutModule parameter. Returns 0 on success. 20 Optionally returns a human-readable error message via OutMessage. */ 21 int LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, 22 LLVMModuleRef *OutModule, char **OutMessage) { 23 std::string Message; 24 25 *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), &Message)); 26 if (!*OutModule) { 27 if (OutMessage) 28 *OutMessage = strdup(Message.c_str()); 29 return 1; 30 } 31 32 return 0; 33 } 34 35 /* Reads a module from the specified path, returning via the OutModule parameter 36 a module provider which performs lazy deserialization. Returns 0 on success. 37 Optionally returns a human-readable error message via OutMessage. */ 38 int LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf, 39 LLVMModuleProviderRef *OutMP, 40 char **OutMessage) { 41 std::string Message; 42 43 *OutMP = wrap(getBitcodeModuleProvider(unwrap(MemBuf), &Message)); 44 if (!*OutMP) { 45 if (OutMessage) 46 *OutMessage = strdup(Message.c_str()); 47 return 1; 48 } 49 50 return 0; 51 } 52