Установить обработчик ошибок сегментации - PullRequest
1 голос
/ 13 декабря 2011

В моем файле signal.h я добавил обработчик сигнала, например:

#define SIG_WPG ((__sighandler_t)3)

, а затем реализовал его в signal.c следующим образом:

if (ka->sa.sa_handler == SIG_WPG) {
        unsigned long ul_cr2 = current->tss.cr2;
        unsigned long ul_eip = (unsigned long) regs->eip
        int ul_cr2_rounded = ul_cr2 & PAGE_MASK;
        printk("ul_eip: %d\n", ul_eip);
        printk("ul_cr2: %d\n", ul_cr2);
        printk("ul_cr2_rounded: %d\n", ul_cr2_rounded);
    }

Как я могузаставить этот обработчик сигналов обрабатывать ошибки сегментации в пространстве пользователя?

Ответы [ 2 ]

4 голосов
/ 13 декабря 2011

Вы можете использовать метод signal() для регистрации обратного вызова для этого исключения:

//callback prototype
void Handler(int sig);

//register the callback for the specific signal
signal(SIGSEGV,&Handler);
1 голос
/ 16 декабря 2011

Решение было определить:

static struct sigaction segv_action

и затем установите:

segv_action.sa_handler = SIG_WPG;

Это было для университетского проекта, эти изменения были сделаны в файле .c, который мы получили из школы, поэтому могут потребоваться другие детали, которые мне не известны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...