| #include <stdio.h> |
| #include <stdlib.h> |
| #include <signal.h> |
| #include "tests/sys_mman.h" |
| |
| static void handler(int sig, siginfo_t *info, void *v) |
| { |
| printf("info: sig=%d code=%d addr=%p\n", |
| info->si_signo, info->si_code, info->si_addr); |
| exit(0); |
| } |
| |
| /* Blocking a fault, ie SIGSEGV, won't work, and is the same as having |
| the default handler */ |
| int main() |
| { |
| int* unmapped_page = get_unmapped_page(); |
| struct sigaction sa; |
| sigset_t mask; |
| |
| sa.sa_sigaction = handler; |
| sigemptyset(&sa.sa_mask); |
| sa.sa_flags = SA_SIGINFO; |
| |
| sigaction(SIGSEGV, &sa, NULL); |
| |
| sigfillset(&mask); |
| sigprocmask(SIG_BLOCK, &mask, NULL); |
| |
| *(volatile int *)unmapped_page = 213; |
| |
| return 0; |
| } |