/* See LICENSE file for copyright and license details. */ #include #include #include #include #include int *volatile just_null = NULL; static jmp_buf jmpenv; static void sigsegv(int signo) { (void) signo; siglongjmp(jmpenv, 1); } int main(void) { volatile int sum = 0; volatile int i; struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = &sigsegv; sigfillset(&sa.sa_mask); sigaction(SIGSEGV, &sa, NULL); for (i = 1; i <= 10; i++) { if (!sigsetjmp(jmpenv, 1)) { printf("%i: before null dereference\n", i); sum += *just_null; } else { printf("%i: after null dereference\n", i); } } fflush(stdout); return sum; }