1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <signal.h> 4 #include "tests/sys_mman.h" 5 6 static void handler(int sig, siginfo_t *info, void *v) 7 { 8 printf("info: sig=%d code=%d addr=%p\n", 9 info->si_signo, info->si_code, info->si_addr); 10 exit(0); 11 } 12 13 /* Blocking a fault, ie SIGSEGV, won't work, and is the same as having 14 the default handler */ 15 int main() 16 { 17 int* unmapped_page = get_unmapped_page(); 18 struct sigaction sa; 19 sigset_t mask; 20 21 sa.sa_sigaction = handler; 22 sigemptyset(&sa.sa_mask); 23 sa.sa_flags = SA_SIGINFO; 24 25 sigaction(SIGSEGV, &sa, NULL); 26 27 sigfillset(&mask); 28 sigprocmask(SIG_BLOCK, &mask, NULL); 29 30 *(volatile int *)unmapped_page = 213; 31 32 return 0; 33 } 34