| 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;
|
|
|