From 7706c3022ead52d49cf455df7e7c289a485aa6ec Mon Sep 17 00:00:00 2001 From: Clement Courbet Date: Fri, 30 Oct 2020 11:35:47 +0100 Subject: [PATCH] [llvm-exegesis] Print signal name when the snippet crashed. Differential Revision: https://reviews.llvm.org/D90453 --- llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) 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()); -- 2.7.4