程序11-2 linux/kernel/math/error.c
1 /*
2 * linux/kernel/math/error.c
3 *
4 * (C) 1991 Linus Torvalds
5 */
6
7 #include <signal.h> // 信号头文件。定义信号符号常量,信号结构及信号操作函数原型。
8
9 #include <linux/sched.h> // 调度程序头文件,定义任务结构task_struct、任务0数据等。
10
// 协处理器错误中断int16调用的处理函数。
// 当协处理器检测到自己发生错误时,就会通过ERROR引脚通知CPU。下面代码用于处理协处理
// 器发出的出错信号。并跳转去执行 math_error()。返回后将跳转到标号ret_from_sys_call
// 处继续执行。
11 void math_error(void)
12 {
13 __asm__("fnclex"); // 让80387清除状态字中所有异常标志位和忙位。
14 if (last_task_used_math) // 若使用了协处理器,则设置协处理器出错信号。
15 last_task_used_math->signal |= 1<<(SIGFPE-1);
16 }
17