From: Brian Demsky Date: Sat, 25 Jan 2020 07:36:45 +0000 (-0800) Subject: Add some debug support code X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=commitdiff_plain;h=a3dc0324f0fd34a80919de8c343de96468992292;ds=sidebyside Add some debug support code --- diff --git a/model.cc b/model.cc index d1e94e5e..5b5ccf70 100644 --- a/model.cc +++ b/model.cc @@ -26,6 +26,37 @@ void placeholder(void *) { ASSERT(0); } +#include + +#define SIGSTACKSIZE 65536 +static void mprot_handle_pf(int sig, siginfo_t *si, void *unused) +{ + model_print("Segmentation fault at %p\n", si->si_addr); + model_print("For debugging, place breakpoint at: %s:%d\n", + __FILE__, __LINE__); + print_trace(); // Trace printing may cause dynamic memory allocation + while(1) + ; +} + +void install_handler() { + stack_t ss; + ss.ss_sp = model_malloc(SIGSTACKSIZE); + ss.ss_size = SIGSTACKSIZE; + ss.ss_flags = 0; + sigaltstack(&ss, NULL); + struct sigaction sa; + sa.sa_flags = SA_SIGINFO | SA_NODEFER | SA_RESTART | SA_ONSTACK; + sigemptyset(&sa.sa_mask); + sa.sa_sigaction = mprot_handle_pf; + + if (sigaction(SIGSEGV, &sa, NULL) == -1) { + perror("sigaction(SIGSEGV)"); + exit(EXIT_FAILURE); + } + +} + /** @brief Constructor */ ModelChecker::ModelChecker() : /* Initialize default scheduler */ @@ -56,6 +87,7 @@ ModelChecker::ModelChecker() : /* Configure output redirection for the model-checker */ redirect_output(); install_trace_analyses(get_execution()); + install_handler(); } /** @brief Destructor */