12b0eed27SGordon Henriksen //===-- BitReader.cpp -----------------------------------------------------===// 22b0eed27SGordon Henriksen // 32b0eed27SGordon Henriksen // The LLVM Compiler Infrastructure 42b0eed27SGordon Henriksen // 5f3ebc3f3SChris Lattner // This file is distributed under the University of Illinois Open Source 6f3ebc3f3SChris Lattner // 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> 14579f0713SAnton Korobeynikov #include <cstring> 152b0eed27SGordon Henriksen 162b0eed27SGordon Henriksen using namespace llvm; 172b0eed27SGordon Henriksen 1834eb6d87SGordon Henriksen /* Builds a module from the bitcode in the specified memory buffer, returning a 1934eb6d87SGordon Henriksen reference to the module via the OutModule parameter. Returns 0 on success. 2034eb6d87SGordon Henriksen Optionally returns a human-readable error message via OutMessage. */ 21*6773d388SOwen Anderson int LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMContextRef ContextRef, 2234eb6d87SGordon Henriksen LLVMModuleRef *OutModule, char **OutMessage) { 232b0eed27SGordon Henriksen std::string Message; 242b0eed27SGordon Henriksen 25*6773d388SOwen Anderson *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), unwrap(ContextRef), 26*6773d388SOwen Anderson &Message)); 272b0eed27SGordon Henriksen if (!*OutModule) { 282b0eed27SGordon Henriksen if (OutMessage) 292b0eed27SGordon Henriksen *OutMessage = strdup(Message.c_str()); 302b0eed27SGordon Henriksen return 1; 312b0eed27SGordon Henriksen } 322b0eed27SGordon Henriksen 332b0eed27SGordon Henriksen return 0; 342b0eed27SGordon Henriksen } 352b0eed27SGordon Henriksen 3634eb6d87SGordon Henriksen /* Reads a module from the specified path, returning via the OutModule parameter 3734eb6d87SGordon Henriksen a module provider which performs lazy deserialization. Returns 0 on success. 3834eb6d87SGordon Henriksen Optionally returns a human-readable error message via OutMessage. */ 3934eb6d87SGordon Henriksen int LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf, 40*6773d388SOwen Anderson LLVMContextRef ContextRef, 4134eb6d87SGordon Henriksen LLVMModuleProviderRef *OutMP, 4234eb6d87SGordon Henriksen char **OutMessage) { 4334eb6d87SGordon Henriksen std::string Message; 4434eb6d87SGordon Henriksen 45*6773d388SOwen Anderson *OutMP = wrap(getBitcodeModuleProvider(unwrap(MemBuf), unwrap(ContextRef), 46*6773d388SOwen Anderson &Message)); 4734eb6d87SGordon Henriksen if (!*OutMP) { 4834eb6d87SGordon Henriksen if (OutMessage) 4934eb6d87SGordon Henriksen *OutMessage = strdup(Message.c_str()); 5034eb6d87SGordon Henriksen return 1; 5134eb6d87SGordon Henriksen } 5234eb6d87SGordon Henriksen 5334eb6d87SGordon Henriksen return 0; 542b0eed27SGordon Henriksen } 55