#include #include #include void mysighandler(int signal, siginfo_t *info, struct ucontext *context) { struct pt_regs *regs = context->uc_mcontext.regs; printf("Signal received: %d\n", signal); printf(" si_signo=%d si_code=%d, si_addr=0x%lx\n\n", info->si_signo, info->si_code, info->si_addr); printf("regs->nip = 0x%lx\n", regs->nip); printf("regs->dar = 0x%lx\n", regs->dar); printf("regs->dsisr = 0x%lx\n", regs->dsisr); printf("regs->trap = 0x%lx\n", regs->trap); exit(-1); } void sigsegv(int *p) { *p = 9; } int main(void) { struct sigaction sa; sigset_t sigset; /* register signal handler via sigaction */ sa.sa_flags = SA_SIGINFO; sa.sa_sigaction = (void *)&mysighandler; sigemptyset(&sa.sa_mask); sigaction(SIGSEGV, &sa, NULL); sigsegv((int *)0x13); return 0; }