1 /* Test PC misalignment exception */
2
3 #include <assert.h>
4 #include <signal.h>
5 #include <stdlib.h>
6 #include <stdio.h>
7
8 static void *expected;
9
sigbus(int sig,siginfo_t * info,void * vuc)10 static void sigbus(int sig, siginfo_t *info, void *vuc)
11 {
12 assert(info->si_code == BUS_ADRALN);
13 assert(info->si_addr == expected);
14 exit(EXIT_SUCCESS);
15 }
16
main()17 int main()
18 {
19 void *tmp;
20
21 struct sigaction sa = {
22 .sa_sigaction = sigbus,
23 .sa_flags = SA_SIGINFO
24 };
25
26 if (sigaction(SIGBUS, &sa, NULL) < 0) {
27 perror("sigaction");
28 return EXIT_FAILURE;
29 }
30
31 asm volatile("adr %0, 1f + 1\n\t"
32 "str %0, %1\n\t"
33 "br %0\n"
34 "1:"
35 : "=&r"(tmp), "=m"(expected));
36 abort();
37 }
38