diff --git a/src/main/init.c b/src/main/init.c index de7b2b355..b4dd39111 100644 --- a/src/main/init.c +++ b/src/main/init.c @@ -3,15 +3,33 @@ * * Copyright (C) 2010 Creytiv.com */ +#include +#ifdef HAVE_SIGNAL +#include +#endif #include #include #include #include #include #include +#include #include "main.h" +#ifdef HAVE_SIGNAL +static void signal_handler(int sig) +{ + struct btrace bt; + + btrace(&bt); + re_fprintf(stderr, "Signal (%d) %H\n", sig, btrace_println, &bt); + + exit(128 + sig); +} +#endif + + /** * Initialise main library * @@ -21,6 +39,12 @@ int libre_init(void) { int err; +#ifdef HAVE_SIGNAL + (void)signal(SIGSEGV, signal_handler); + (void)signal(SIGABRT, signal_handler); + (void)signal(SIGILL, signal_handler); +#endif + #ifdef USE_OPENSSL err = openssl_init(); if (err)