aboutsummaryrefslogtreecommitdiff
path: root/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h
diff options
context:
space:
mode:
authorKarl Schimpf <kschimpf@google.com>2013-06-06 10:03:24 -0700
committerKarl Schimpf <kschimpf@google.com>2013-06-06 10:03:24 -0700
commit37bdd9174a1cba17b369c8c1f561e70c458e0c13 (patch)
tree1f6a984ebb94ccd819c6e38646d91bb5c7eb6977 /lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h
parentc0d9b337419b72e69cbd9c64f84ae39560ab344f (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.h26
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())