From a8238d0b25af98b623ec5f16f949e74e96eb4ced Mon Sep 17 00:00:00 2001 From: Peter Boyle Date: Wed, 4 Mar 2015 13:43:19 +0000 Subject: [PATCH] Move to better name --- Grid_init.cc | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 Grid_init.cc diff --git a/Grid_init.cc b/Grid_init.cc new file mode 100755 index 00000000..e943c3b0 --- /dev/null +++ b/Grid_init.cc @@ -0,0 +1,82 @@ +/****************************************************************************/ +/* PAB: Signal magic. Processor state dump is x86-64 specific */ +/****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Grid.h" + +#undef __X86_64 +namespace dpo { + +void Grid_init(void) +{ + Grid_debug_handler_init(); +} +double usecond(void) { + struct timeval tv; + gettimeofday(&tv,NULL); + return 1.0*tv.tv_usec + 1.0e6*tv.tv_sec; +} + +void Grid_sa_signal_handler(int sig,siginfo_t *si,void * ptr) +{ + ucontext_t * uc= (ucontext_t *)ptr; + + printf("Caught signal %d\n",si->si_signo); + printf(" mem address %llx\n",(uint64_t)si->si_addr); + printf(" code %d\n",si->si_code); + +#ifdef __X86_64 + struct sigcontext *sc = (struct sigcontext *)&uc->uc_mcontext; + printf(" instruction %llx\n",(uint64_t)sc->rip); + +#define REG(A) printf(" %s %lx\n",#A, sc-> A); + REG(rdi); + REG(rsi); + REG(rbp); + REG(rbx); + REG(rdx); + REG(rax); + REG(rcx); + REG(rsp); + REG(rip); + + + REG(r8); + REG(r9); + REG(r10); + REG(r11); + REG(r12); + REG(r13); + REG(r14); + REG(r15); +#endif + + fflush(stdout); + + if ( si->si_signo == SIGSEGV ) { + printf("Grid_sa_signal_handler: Oops... this was a sigsegv you naughty naughty programmer. Goodbye\n"); + fflush(stdout); + exit(-1); + } + return; +}; + +void Grid_debug_handler_init(void) +{ + struct sigaction sa,osa; + sigemptyset (&sa.sa_mask); + sa.sa_sigaction= Grid_sa_signal_handler; + sa.sa_flags = SA_SIGINFO; + sigaction(SIGSEGV,&sa,NULL); + sigaction(SIGTRAP,&sa,NULL); +} +}