程序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