2011-06-16 49 views
0

我想在虛擬機中生成一箇中斷,並且寫了一個簡單的中斷處理程序,但是當我嘗試測試這個中斷生成和處理時,內核因爲頁面錯誤而崩潰。現在我調試的問題,並發現,在「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'指令中,檢查中斷時是否設置了標誌進位標誌,以檢測中斷是處於內核模式還是用戶模式。

可以請某人解釋爲什麼在這裏檢查進位標誌?

+0

您可能在Linux內核郵件列表上獲得更好的答案。 – Keith 2011-06-16 19:03:21

+0

作爲一個編程問題,這應該是[SO]。 – bwDraco 2011-06-16 19:03:40

回答

1

實際上,我認爲這是檢查CS是否對應於內核線程,請參閱ret_from_fork上類似構造的註釋。

+0

經過多次挖掘後,我發現生成中斷和異常之間存在非常細的一條線,因爲它們可以通過一個標誌進行互換。問題不在內核中,這是我生成中斷的方式。 – AvadhP 2011-07-02 22:49:56

相關問題