我试图在VM中生成一个中断,并编写了一个简单的中断处理程序但是当我尝试测试这个中断生成和处理时,内核由于页面错误而崩溃 . 现在我调试了这个问题并发现在'entry_64.S'文件中调用'error_entry'将寄存器压入堆栈并检查GS代码如下:
xorl %ebx,%ebx
testl $3,CS+8(%rsp)
je error_kernelspace
error_swapgs:
SWAPGS
处理中断时,CPU会将EFLAGS推送到(rsp)CS 8位置 . 因此在上面的代码'testl'指令中检查是否在中断时设置了标志的进位标志,以检测中断是在内核模式还是用户模式 .
可以请某人解释为什么在这里检查Carry旗帜?
1 回答
实际上,我认为它正在检查CS是否对应于内核线程,请参阅ret_from_fork处类似构造的注释 .