12b0eed27SGordon Henriksen //===-- BitReader.cpp -----------------------------------------------------===// 22b0eed27SGordon Henriksen // 32b0eed27SGordon Henriksen // The LLVM Compiler Infrastructure 42b0eed27SGordon Henriksen // 52b0eed27SGordon Henriksen // This file was developed by Gordon Henriksen and is distributed under the 62b0eed27SGordon Henriksen // University of Illinois Open Source License. See LICENSE.TXT for details. 72b0eed27SGordon Henriksen // 82b0eed27SGordon Henriksen //===----------------------------------------------------------------------===// 92b0eed27SGordon Henriksen 102b0eed27SGordon Henriksen #include "llvm-c/BitReader.h" 112b0eed27SGordon Henriksen #include "llvm/Bitcode/ReaderWriter.h" 122b0eed27SGordon Henriksen #include "llvm/Support/MemoryBuffer.h" 132b0eed27SGordon Henriksen #include <string> 142b0eed27SGordon Henriksen 152b0eed27SGordon Henriksen using namespace llvm; 162b0eed27SGordon Henriksen 17*34eb6d87SGordon Henriksen /* Builds a module from the bitcode in the specified memory buffer, returning a 18*34eb6d87SGordon Henriksen reference to the module via the OutModule parameter. Returns 0 on success. 19*34eb6d87SGordon Henriksen Optionally returns a human-readable error message via OutMessage. */ 20*34eb6d87SGordon Henriksen int LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, 21*34eb6d87SGordon Henriksen LLVMModuleRef *OutModule, char **OutMessage) { 222b0eed27SGordon Henriksen std::string Message; 232b0eed27SGordon Henriksen 24*34eb6d87SGordon Henriksen *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), &Message)); 252b0eed27SGordon Henriksen if (!*OutModule) { 262b0eed27SGordon Henriksen if (OutMessage) 272b0eed27SGordon Henriksen *OutMessage = strdup(Message.c_str()); 282b0eed27SGordon Henriksen return 1; 292b0eed27SGordon Henriksen } 302b0eed27SGordon Henriksen 312b0eed27SGordon Henriksen return 0; 322b0eed27SGordon Henriksen } 332b0eed27SGordon Henriksen 34*34eb6d87SGordon Henriksen /* Reads a module from the specified path, returning via the OutModule parameter 35*34eb6d87SGordon Henriksen a module provider which performs lazy deserialization. Returns 0 on success. 36*34eb6d87SGordon Henriksen Optionally returns a human-readable error message via OutMessage. */ 37*34eb6d87SGordon Henriksen int LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf, 38*34eb6d87SGordon Henriksen LLVMModuleProviderRef *OutMP, 39*34eb6d87SGordon Henriksen char **OutMessage) { 40*34eb6d87SGordon Henriksen std::string Message; 41*34eb6d87SGordon Henriksen 42*34eb6d87SGordon Henriksen *OutMP = wrap(getBitcodeModuleProvider(unwrap(MemBuf), &Message)); 43*34eb6d87SGordon Henriksen if (!*OutMP) { 44*34eb6d87SGordon Henriksen if (OutMessage) 45*34eb6d87SGordon Henriksen *OutMessage = strdup(Message.c_str()); 46*34eb6d87SGordon Henriksen return 1; 47*34eb6d87SGordon Henriksen } 48*34eb6d87SGordon Henriksen 49*34eb6d87SGordon Henriksen return 0; 502b0eed27SGordon Henriksen } 51