From: Clement Courbet Date: Fri, 30 Oct 2020 10:35:47 +0000 (+0100) Subject: [llvm-exegesis] Print signal name when the snippet crashed. X-Git-Tag: llvmorg-13-init~7440 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7706c3022ead52d49cf455df7e7c289a485aa6ec;p=platform%2Fupstream%2Fllvm.git [llvm-exegesis] Print signal name when the snippet crashed. Differential Revision: https://reviews.llvm.org/D90453 --- diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp index f015147..1bbad20 100644 --- a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp +++ b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp @@ -101,9 +101,19 @@ private: Counter->stop(); }); CrashRecoveryContext::Disable(); - // FIXME: Better diagnosis. - if (Crashed) - return make_error("snippet crashed while running"); + if (Crashed) { + std::string Msg = "snippet crashed while running"; +#ifdef LLVM_ON_UNIX + // See "Exit Status for Commands": + // https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html + constexpr const int kSigOffset = 128; + if (const char *const SigName = strsignal(CRC.RetCode - kSigOffset)) { + Msg += ": "; + Msg += SigName; + } +#endif + return make_error(std::move(Msg)); + } } auto ValueOrError = Counter->readOrError(Function.getFunctionBytes());