diff options
author | Karl Schimpf <kschimpf@google.com> | 2013-06-06 10:03:24 -0700 |
---|---|---|
committer | Karl Schimpf <kschimpf@google.com> | 2013-06-06 10:03:24 -0700 |
commit | 37bdd9174a1cba17b369c8c1f561e70c458e0c13 (patch) | |
tree | 1f6a984ebb94ccd819c6e38646d91bb5c7eb6977 /lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h | |
parent | c0d9b337419b72e69cbd9c64f84ae39560ab344f (diff) |
Make PNaCl bitcode files have a different format from LLVM bitcode files.
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3405
R=dschuff@chromium.org
Review URL: https://codereview.chromium.org/15907008
Diffstat (limited to 'lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h')
-rw-r--r-- | lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h index f3d36862c3..935e77011e 100644 --- a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h +++ b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h @@ -16,6 +16,7 @@ #define NACL_BITCODE_READER_H #include "llvm/ADT/DenseMap.h" +#include "llvm/Bitcode/NaCl/NaClBitcodeHeader.h" #include "llvm/Bitcode/NaCl/NaClBitstreamReader.h" #include "llvm/Bitcode/NaCl/NaClLLVMBitCodes.h" #include "llvm/GVMaterializer.h" @@ -123,6 +124,7 @@ public: }; class NaClBitcodeReader : public GVMaterializer { + NaClBitcodeHeader Header; // Header fields of the PNaCl bitcode file. LLVMContext &Context; Module *TheModule; MemoryBuffer *Buffer; @@ -192,18 +194,25 @@ class NaClBitcodeReader : public GVMaterializer { /// not need this flag. bool UseRelativeIDs; + /// \brief True if we should only accept supported bitcode format. + bool AcceptSupportedBitcodeOnly; + public: - explicit NaClBitcodeReader(MemoryBuffer *buffer, LLVMContext &C) + explicit NaClBitcodeReader(MemoryBuffer *buffer, LLVMContext &C, + bool AcceptSupportedOnly = true) : Context(C), TheModule(0), Buffer(buffer), BufferOwned(false), LazyStreamer(0), NextUnreadBit(0), SeenValueSymbolTable(false), ErrorString(0), ValueList(C), MDValueList(C), - SeenFirstFunctionBody(false), UseRelativeIDs(false) { + SeenFirstFunctionBody(false), UseRelativeIDs(false), + AcceptSupportedBitcodeOnly(AcceptSupportedOnly) { } - explicit NaClBitcodeReader(DataStreamer *streamer, LLVMContext &C) + explicit NaClBitcodeReader(DataStreamer *streamer, LLVMContext &C, + bool AcceptSupportedOnly = true) : Context(C), TheModule(0), Buffer(0), BufferOwned(false), LazyStreamer(streamer), NextUnreadBit(0), SeenValueSymbolTable(false), ErrorString(0), ValueList(C), MDValueList(C), - SeenFirstFunctionBody(false), UseRelativeIDs(false) { + SeenFirstFunctionBody(false), UseRelativeIDs(false), + AcceptSupportedBitcodeOnly(AcceptSupportedOnly) { } ~NaClBitcodeReader() { FreeState(); @@ -233,11 +242,12 @@ public: /// @returns true if an error occurred. bool ParseBitcodeInto(Module *M); - /// @brief Cheap mechanism to just extract module triple - /// @returns true if an error occurred. - bool ParseTriple(std::string &Triple); - private: + // Returns false if Header is acceptable. + bool AcceptHeader() const { + return !(Header.IsSupported() || + (!AcceptSupportedBitcodeOnly && Header.IsReadable())); + } Type *getTypeByID(unsigned ID); Value *getFnValueByID(unsigned ID, Type *Ty) { if (Ty && Ty->isMetadataTy()) |