xref: /openbsd-src/regress/sys/kern/signal/siginfo_addr/siginfo_addr.c (revision ac336a76b5f272dade8319849c50bc940d378fa3)
168d03aeaSderaadt #include <sys/types.h>
268d03aeaSderaadt #include <sys/signal.h>
3*ac336a76Sdavid #include <signal.h>
468d03aeaSderaadt #include <stdio.h>
568d03aeaSderaadt #include <unistd.h>
668d03aeaSderaadt #include <string.h>
768d03aeaSderaadt 
868d03aeaSderaadt #define FAULTADDR	0x123123
968d03aeaSderaadt 
10db3296cfSderaadt static void
handler(int sig,siginfo_t * sip,void * scp)1168d03aeaSderaadt handler(int sig, siginfo_t *sip, void *scp)
1268d03aeaSderaadt {
1368d03aeaSderaadt 	char buf[1024];
1468d03aeaSderaadt 
1568d03aeaSderaadt 	if (sip == NULL)
1668d03aeaSderaadt 		_exit(1);
1768d03aeaSderaadt 	if (sip->si_addr == 0)		/* wrong address */
1868d03aeaSderaadt 		_exit(1);
1968d03aeaSderaadt 
2068d03aeaSderaadt 	// snprintf(buf, sizeof buf, "addr %p\n", sip->si_addr);
2168d03aeaSderaadt 	// write(STDOUT_FILENO, buf, strlen(buf));
2268d03aeaSderaadt 	_exit(0);
2368d03aeaSderaadt }
2468d03aeaSderaadt 
2568d03aeaSderaadt 
2668d03aeaSderaadt int
main(int argc,char * argv[])27db3296cfSderaadt main(int argc, char *argv[])
2868d03aeaSderaadt {
2968d03aeaSderaadt 	struct sigaction sa;
3068d03aeaSderaadt 
3168d03aeaSderaadt 	memset(&sa, 0, sizeof sa);
32a22fe5cbSdavid 	sigfillset(&sa.sa_mask);
3368d03aeaSderaadt 	sa.sa_sigaction = handler;
3468d03aeaSderaadt 	sa.sa_flags = SA_SIGINFO;
3568d03aeaSderaadt 
3668d03aeaSderaadt 	sigaction(SIGSEGV, &sa, NULL);
3768d03aeaSderaadt 	sigaction(SIGBUS, &sa, NULL);
3868d03aeaSderaadt 
3968d03aeaSderaadt 	*(char *)FAULTADDR = 0;
4068d03aeaSderaadt }
41