14 void *addr=sigi->si_addr;
16 printf(
"page fault @address=%p\n",sigi->si_addr);
17#ifdef __ARCH_SI_TRAPNO
18 printf(
"page fault trapno=%d\n",sigi->si_trapno);
20 printf(
"page fault signo=%d\n",sigi->si_signo);
21 printf(
"page fault errno=%d\n",sigi->si_errno);
22 printf(
"this page fault failed because ");
23 if (SEGV_MAPERR == sigi->si_code)
24 printf(
"you tried to access an invalid address\n");
25 else if (SEGV_ACCERR == sigi->si_code) {
26 printf(
"you tried to access a protected address\n");
27 }
else printf(
" an unknown reason. Page fault code=%d\n",sigi->si_code);
30 if (SEGV_ACCERR == sigi->si_code) {
31 m_pac.restorePageProt(addr);
This class provides a handle function that logs the addresses that had an access violation....
void handle(int signal_number, siginfo_t *sigi, void *unused)
the actual signal handler
PageAccessControl & m_pac
used to restore protection of the page which segfaulted
accessed_t m_accessed
the addresses accessed since last reset