1 /*
2  * Common user code for specification exception testing.
3  *
4  * SPDX-License-Identifier: GPL-2.0-or-later
5  */
6 #include <assert.h>
7 #include <signal.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <unistd.h>
11 
12 extern void test(void);
13 extern long expected_old_psw[2];
14 
15 static void handle_sigill(int sig, siginfo_t *info, void *ucontext)
16 {
17     if ((long)info->si_addr != expected_old_psw[1]) {
18         _exit(EXIT_FAILURE);
19     }
20     _exit(EXIT_SUCCESS);
21 }
22 
23 int main(void)
24 {
25     struct sigaction act;
26     int err;
27 
28     memset(&act, 0, sizeof(act));
29     act.sa_sigaction = handle_sigill;
30     act.sa_flags = SA_SIGINFO;
31     err = sigaction(SIGILL, &act, NULL);
32     assert(err == 0);
33 
34     test();
35 
36     return EXIT_FAILURE;
37 }
38