Index: include/llvm/Bitcode/ReaderWriter.h |
diff --git a/include/llvm/Bitcode/ReaderWriter.h b/include/llvm/Bitcode/ReaderWriter.h |
index fa754c014621f52af5698561d1718ae014f24bca..e5c253f30d54e7a9b9fdb3b3866d788952bd7224 100644 |
--- a/include/llvm/Bitcode/ReaderWriter.h |
+++ b/include/llvm/Bitcode/ReaderWriter.h |
@@ -14,6 +14,7 @@ |
#ifndef LLVM_BITCODE_H |
#define LLVM_BITCODE_H |
+#include "llvm/Support/BitcodeStream.h" |
#include <string> |
namespace llvm { |
@@ -23,29 +24,38 @@ namespace llvm { |
class BitstreamWriter; |
class LLVMContext; |
class raw_ostream; |
- |
+ |
/// getLazyBitcodeModule - Read the header of the specified bitcode buffer |
/// and prepare for lazy deserialization of function bodies. If successful, |
/// this takes ownership of 'buffer' and returns a non-null pointer. On |
/// error, this returns null, *does not* take ownership of Buffer, and fills |
/// in *ErrMsg with an error description if ErrMsg is non-null. |
Module *getLazyBitcodeModule(MemoryBuffer *Buffer, |
- LLVMContext& Context, |
+ LLVMContext &Context, |
std::string *ErrMsg = 0); |
+ /// getStreamedBitcodeModule - Read the header of the specified stream |
+ /// and prepare for lazy deserialization and streaming of function bodies. |
+ /// On error, this returns null, and fills in *ErrMsg with an error |
+ /// description if ErrMsg is non-null. |
+ Module *getStreamedBitcodeModule(const std::string &name, |
+ BitcodeStreamer *streamer, |
+ LLVMContext &Context, |
+ std::string *ErrMsg = 0); |
+ |
/// getBitcodeTargetTriple - Read the header of the specified bitcode |
/// buffer and extract just the triple information. If successful, |
/// this returns a string and *does not* take ownership |
/// of 'buffer'. On error, this returns "", and fills in *ErrMsg |
/// if ErrMsg is non-null. |
std::string getBitcodeTargetTriple(MemoryBuffer *Buffer, |
- LLVMContext& Context, |
+ LLVMContext &Context, |
std::string *ErrMsg = 0); |
/// ParseBitcodeFile - Read the specified bitcode file, returning the module. |
/// If an error occurs, this returns null and fills in *ErrMsg if it is |
/// non-null. This method *never* takes ownership of Buffer. |
- Module *ParseBitcodeFile(MemoryBuffer *Buffer, LLVMContext& Context, |
+ Module *ParseBitcodeFile(MemoryBuffer *Buffer, LLVMContext &Context, |
std::string *ErrMsg = 0); |
/// WriteBitcodeToFile - Write the specified module to the specified |
@@ -113,8 +123,10 @@ namespace llvm { |
/// This function is called when we find a file with a matching magic number. |
/// In this case, skip down to the subsection of the file that is actually a |
/// BC file. |
- static inline bool SkipBitcodeWrapperHeader(unsigned char *&BufPtr, |
- unsigned char *&BufEnd) { |
+ /// If 'verify' is true, check that the file fits in the buffer. |
+ static inline bool SkipBitcodeWrapperHeader(const unsigned char *&BufPtr, |
+ const unsigned char *&BufEnd, |
+ bool Verify) { |
enum { |
KnownHeaderSize = 4*4, // Size of header we read. |
OffsetField = 2*4, // Offset in bytes to Offset field. |
@@ -134,7 +146,7 @@ namespace llvm { |
(BufPtr[SizeField +3] << 24)); |
// Verify that Offset+Size fits in the file. |
- if (Offset+Size > unsigned(BufEnd-BufPtr)) |
+ if (Verify && Offset+Size > unsigned(BufEnd-BufPtr)) |
return true; |
BufPtr += Offset; |
BufEnd = BufPtr+Size; |