我正在尝试在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旗帜吗?