diff options
Diffstat (limited to 'tools/pnacl-llc/srpc_main.cpp')
-rw-r--r-- | tools/pnacl-llc/srpc_main.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/tools/pnacl-llc/srpc_main.cpp b/tools/pnacl-llc/srpc_main.cpp index 87178c2038..46d79ce441 100644 --- a/tools/pnacl-llc/srpc_main.cpp +++ b/tools/pnacl-llc/srpc_main.cpp @@ -32,6 +32,7 @@ #include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Option/Option.h" +#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/system_error.h" using namespace llvm; @@ -202,8 +203,10 @@ void *run_streamed(void *arg) { StreamingThreadData *data = reinterpret_cast<StreamingThreadData *>(arg); data->CmdLineVec()->push_back("-streaming-bitcode"); if (DoTranslate(data->CmdLineVec(), data->ObjectFD()) != 0) { - fprintf(stderr, "DoTranslate failed.\n"); - srpc_streamer->setError(); + // llc_main only returns 1 (as opposed to calling report_fatal_error) + // in conditions we never expect to see in the browser (e.g. bad + // command-line flags). + srpc_streamer->setFatalError("llc_main unspecified failure"); return NULL; } delete data; @@ -351,6 +354,14 @@ int getObjectFileFD() { return object_file_fd; } DataStreamer *getNaClBitcodeStreamer() { return NaClBitcodeStreamer; } +// Called from the compilation thread +void FatalErrorHandler(void *user_data, const std::string& reason, + bool gen_crash_diag) { + srpc_streamer->setFatalError(reason); +} + +fatal_error_handler_t getSRPCErrorHandler() { return FatalErrorHandler; } + int srpc_main(int argc, char **argv) { if (!NaClSrpcModuleInit()) { return 1; |