aboutsummaryrefslogtreecommitdiff
path: root/lib/Bitcode/NaCl/Reader
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Bitcode/NaCl/Reader')
-rw-r--r--lib/Bitcode/NaCl/Reader/NaClBitcodeHeader.cpp6
-rw-r--r--lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp2
-rw-r--r--lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h9
3 files changed, 10 insertions, 7 deletions
diff --git a/lib/Bitcode/NaCl/Reader/NaClBitcodeHeader.cpp b/lib/Bitcode/NaCl/Reader/NaClBitcodeHeader.cpp
index aa73b9cffa..2dd2af5dc3 100644
--- a/lib/Bitcode/NaCl/Reader/NaClBitcodeHeader.cpp
+++ b/lib/Bitcode/NaCl/Reader/NaClBitcodeHeader.cpp
@@ -249,8 +249,12 @@ void NaClBitcodeHeader::InstallFields() {
if (PNaClVersion != 1) {
IsSupportedFlag = false;
IsReadableFlag = false;
- UnsupportedMessage = "Unsupported Version";
UpdatedUnsupportedMessage = true;
+ UnsupportedMessage.clear();
+ raw_string_ostream UnsupportedStream(UnsupportedMessage);
+ UnsupportedStream << "Unsupported PNaCl bitcode version: "
+ << PNaClVersion << "\n";
+ UnsupportedStream.flush();
}
if (Fields.size() != 1) {
IsSupportedFlag = false;
diff --git a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp
index 09a94c08cf..c7eb1ac683 100644
--- a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp
+++ b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp
@@ -1504,7 +1504,7 @@ bool NaClBitcodeReader::ParseBitcodeInto(Module *M) {
M->setDataLayout("e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-"
"f32:32:32-f64:64:64-p:32:32:32-v128:32:32");
- if (InitStream()) return true;
+ if (InitStream()) return Error(Header.Unsupported());
// We expect a number of well-defined blocks, though we don't necessarily
// need to understand them all.
diff --git a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h
index 3b9d8982d5..fe7b5c1e9e 100644
--- a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h
+++ b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.h
@@ -207,15 +207,11 @@ public:
virtual bool MaterializeModule(Module *M, std::string *ErrInfo = 0);
virtual void Dematerialize(GlobalValue *GV);
- bool Error(const char *Str) {
- ErrorString = Str;
- return true;
- }
bool Error(const std::string &Str) {
ErrorString = Str;
return true;
}
- const char *getErrorString() const { return ErrorString.c_str(); }
+ const std::string &getErrorString() const { return ErrorString; }
/// @brief Main interface to parsing a bitcode buffer.
/// @returns true if an error occurred.
@@ -227,6 +223,9 @@ private:
return !(Header.IsSupported() ||
(!AcceptSupportedBitcodeOnly && Header.IsReadable()));
}
+ uint32_t GetPNaClVersion() const {
+ return Header.GetPNaClVersion();
+ }
Type *getTypeByID(unsigned ID);
// Returns the value associated with ID. The value must already exist,
// or a forward referenced value created by getOrCreateFnVaueByID.