xref: /openbsd-src/regress/sys/kern/signal/siginfo_addr/siginfo_addr.c (revision ac336a76b5f272dade8319849c50bc940d378fa3)
1 #include <sys/types.h>
2 #include <sys/signal.h>
3 #include <signal.h>
4 #include <stdio.h>
5 #include <unistd.h>
6 #include <string.h>
7 
8 #define FAULTADDR	0x123123
9 
10 static void
handler(int sig,siginfo_t * sip,void * scp)11 handler(int sig, siginfo_t *sip, void *scp)
12 {
13 	char buf[1024];
14 
15 	if (sip == NULL)
16 		_exit(1);
17 	if (sip->si_addr == 0)		/* wrong address */
18 		_exit(1);
19 
20 	// snprintf(buf, sizeof buf, "addr %p\n", sip->si_addr);
21 	// write(STDOUT_FILENO, buf, strlen(buf));
22 	_exit(0);
23 }
24 
25 
26 int
main(int argc,char * argv[])27 main(int argc, char *argv[])
28 {
29 	struct sigaction sa;
30 
31 	memset(&sa, 0, sizeof sa);
32 	sigfillset(&sa.sa_mask);
33 	sa.sa_sigaction = handler;
34 	sa.sa_flags = SA_SIGINFO;
35 
36 	sigaction(SIGSEGV, &sa, NULL);
37 	sigaction(SIGBUS, &sa, NULL);
38 
39 	*(char *)FAULTADDR = 0;
40 }
41