diff options
author | Derek Schuff <dschuff@chromium.org> | 2013-09-13 14:29:09 -0700 |
---|---|---|
committer | Derek Schuff <dschuff@chromium.org> | 2013-09-13 14:29:09 -0700 |
commit | f8cb03fe2634ee927b3b6aa6ecbdd824cd0bc940 (patch) | |
tree | a7130af309bd2ec767774b3dad12d956e9e1b009 /lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp | |
parent | 156e8330e6df89812148f8e1b22cd883391deedc (diff) |
Report fatal translator errors to the browser
Install a fatal error handler for the translator, which stores the error
string, signals an error to the RPC thread, and terminates the thread
(instead of terminating the whole program). This will cause the error to
go to the Javascript console in Chrome
BUG= https://code.google.com/p/nativeclient/issues/detail?id=3519
R=jvoung@chromium.org
Review URL: https://codereview.chromium.org/23753003
Diffstat (limited to 'lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp')
-rw-r--r-- | lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp index 41acb6f999..e8ef0e6d9e 100644 --- a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp +++ b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp @@ -997,7 +997,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 Error(Header.Unsupported()); + if (InitStream()) return true; // InitSream will set the error string. // We expect a number of well-defined blocks, though we don't necessarily // need to understand them all. @@ -1772,22 +1772,26 @@ bool NaClBitcodeReader::InitStreamFromBuffer() { return Error("Bitcode stream should be a multiple of 4 bytes in length"); if (Header.Read(BufPtr, BufEnd)) - return Error("Invalid PNaCl bitcode header"); + return Error(Header.Unsupported()); StreamFile.reset(new NaClBitstreamReader(BufPtr, BufEnd)); Stream.init(*StreamFile); - return AcceptHeader(); + if (AcceptHeader()) + return Error(Header.Unsupported()); + return false; } bool NaClBitcodeReader::InitLazyStream() { StreamingMemoryObject *Bytes = new StreamingMemoryObject(LazyStreamer); if (Header.Read(Bytes)) - return Error("Invalid PNaCl bitcode header"); + return Error(Header.Unsupported()); StreamFile.reset(new NaClBitstreamReader(Bytes, Header.getHeaderSize())); Stream.init(*StreamFile); - return AcceptHeader(); + if (AcceptHeader()) + return Error(Header.Unsupported()); + return false; } //===----------------------------------------------------------------------===// |