9 #include <sys/ucontext.h>
11 static volatile int fault;
13 static void sigbus_sigaction(int num, siginfo_t *info, void *ctx)
15 struct ucontext *context = ctx;
16 unsigned int *regs = (unsigned int *)&context->uc_mcontext.arm_r0;
18 //printf("\nsigbus %d %p @ %08x\n", info->si_code, info->si_addr, regs[15]);
25 int main(int argc, char *argv[])
27 struct sigaction sigbus_action = {
28 .sa_sigaction = sigbus_sigaction,
29 .sa_flags = SA_SIGINFO,
31 unsigned int base = 0x5401d000;
32 volatile unsigned int *regs;
36 fd = open("/dev/mem", O_RDONLY | O_SYNC);
39 perror("open /dev/mem");
43 regs = mmap(0, 0x1000, PROT_READ, MAP_SHARED, fd, base);
44 if (regs == MAP_FAILED) {
50 sigemptyset(&sigbus_action.sa_mask);
51 sigaction(SIGBUS, &sigbus_action, NULL);
53 for (i = 0; i < 1024; i++) {
54 printf("%08x ", base + i * 4);
61 printf("%08x\n", val);
67 munmap((void *)regs, 0x1000);