FatalSignalHandler: print the signal name on crash
It's easier to remember what "SIGSEGV" means instead of "11". GNU libc has offered sigabbrev_np() (non-portable) since 2.32; for older libcs, we'll be happy with a hardcoded list. Selftest updated to match... though it didn't seem to be necessary. Pick-to: 6.4 Change-Id: I5ff8e16fcdcb4ffd9ab6fffd16ebc66ecf6e9465 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
parent
2e9bc3494f
commit
17454bf9c6
@ -1910,9 +1910,40 @@ using FatalSignalHandler = WindowsFaultHandler;
|
|||||||
class FatalSignalHandler
|
class FatalSignalHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
# define OUR_SIGNALS(F) \
|
||||||
|
F(HUP) \
|
||||||
|
F(INT) \
|
||||||
|
F(QUIT) \
|
||||||
|
F(ABRT) \
|
||||||
|
F(ILL) \
|
||||||
|
F(BUS) \
|
||||||
|
F(FPE) \
|
||||||
|
F(SEGV) \
|
||||||
|
F(PIPE) \
|
||||||
|
F(TERM) \
|
||||||
|
/**/
|
||||||
|
# define CASE_LABEL(S) case SIG ## S: return QT_STRINGIFY(S);
|
||||||
|
# define ENUMERATE_SIGNALS(S) SIG ## S,
|
||||||
|
static const char *signalName(int signum) noexcept
|
||||||
|
{
|
||||||
|
switch (signum) {
|
||||||
|
OUR_SIGNALS(CASE_LABEL)
|
||||||
|
}
|
||||||
|
|
||||||
|
# if defined(__GLIBC_MINOR__) && (__GLIBC_MINOR__ >= 32 || __GLIBC__ > 2)
|
||||||
|
// get the other signal names from glibc 2.32
|
||||||
|
// (accessing the sys_sigabbrev variable causes linker warnings)
|
||||||
|
if (const char *p = sigabbrev_np(signum))
|
||||||
|
return p;
|
||||||
|
# endif
|
||||||
|
return "???";
|
||||||
|
}
|
||||||
static constexpr std::array fatalSignals = {
|
static constexpr std::array fatalSignals = {
|
||||||
SIGHUP, SIGINT, SIGQUIT, SIGABRT, SIGILL, SIGBUS, SIGFPE, SIGSEGV, SIGPIPE, SIGTERM
|
OUR_SIGNALS(ENUMERATE_SIGNALS)
|
||||||
};
|
};
|
||||||
|
# undef CASE_LABEL
|
||||||
|
# undef ENUMERATE_SIGNALS
|
||||||
|
|
||||||
static constexpr std::array crashingSignals = {
|
static constexpr std::array crashingSignals = {
|
||||||
// Crash signals are special, because if we return from the handler
|
// Crash signals are special, because if we return from the handler
|
||||||
// without adjusting the machine state, the same instruction that
|
// without adjusting the machine state, the same instruction that
|
||||||
@ -2047,7 +2078,8 @@ private:
|
|||||||
|
|
||||||
static void actionHandler(int signum, siginfo_t * /* info */, void * /* ucontext */)
|
static void actionHandler(int signum, siginfo_t * /* info */, void * /* ucontext */)
|
||||||
{
|
{
|
||||||
writeToStderr("Received signal ", asyncSafeToString(signum), "\n");
|
writeToStderr("Received signal ", asyncSafeToString(signum),
|
||||||
|
" (SIG", signalName(signum), ")\n");
|
||||||
printTestRunTime();
|
printTestRunTime();
|
||||||
|
|
||||||
if (signum != SIGINT) {
|
if (signum != SIGINT) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
********* Start testing of tst_Crashes *********
|
********* Start testing of tst_Crashes *********
|
||||||
Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
|
Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
|
||||||
PASS : tst_Crashes::initTestCase()
|
PASS : tst_Crashes::initTestCase()
|
||||||
QFATAL : tst_Crashes::crash() Received signal 11
|
QFATAL : tst_Crashes::crash() Received signal 11 (SIGSEGV)
|
||||||
Function time: ms Total time: ms
|
Function time: ms Total time: ms
|
||||||
FAIL! : tst_Crashes::crash() Received a fatal error.
|
FAIL! : tst_Crashes::crash() Received a fatal error.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
********* Start testing of tst_Crashes *********
|
********* Start testing of tst_Crashes *********
|
||||||
Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
|
Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
|
||||||
PASS : tst_Crashes::initTestCase()
|
PASS : tst_Crashes::initTestCase()
|
||||||
QFATAL : tst_Crashes::crash() Received signal 11
|
QFATAL : tst_Crashes::crash() Received signal 11 (SIGSEGV)
|
||||||
Function time: ms Total time: ms
|
Function time: ms Total time: ms
|
||||||
|
Loading…
x
Reference in New Issue
Block a user