Почему ядро linux использует trap gate для обработки исключения div_error?
В ядре 2.6.11.5 обработчик исключения деления на ноль устанавливается как:
set_trap_gate(0,÷_error);
Согласно «Пониманию ядра Linux», процесс доступа к ловушке Intel не может быть выполнен в режиме пользовательского режима. Но вполне возможно, что процесс пользовательского режима также генерируетdivide_error
, Так почему же Linux реализует это таким образом?
[Редактировать] Я думаю, что вопрос все еще открыт, так какset_trap_gate()
устанавливает значение DPL для записи IDT равным 0, что означает, что только код CPL = 0 (чтение ядра) может выполнить его, поэтому мне неясно, как этот обработчик может быть вызван из пользовательского режима:
#include<stdio.h>
int main(void)
{
int a = 0;
int b = 1;
b = b/a;
return b;
}
который был составлен сgcc div0.c
, И вывод./a.out
является:
Исключение с плавающей точкой (ядро сброшено)
Так что не похоже, что это было обработано делением на код ловушки 0.