PA-RISC 除錯¶
好的,這裡有一些除錯 linux/parisc 的底層部分的提示。
1. 絕對地址¶
目前,很多彙編程式碼執行在真實模式下,這意味著使用絕對地址,而不是像核心其餘部分那樣使用虛擬地址。 要將絕對地址轉換為虛擬地址,您可以在 System.map 中查詢,並新增 __PAGE_OFFSET(目前為 0x10000000)。
2. HPMC¶
當真實模式程式碼嘗試訪問不存在的記憶體時,您將獲得 HPMC,而不是核心 oops。 要除錯 HPMC,請嘗試找到系統響應器/請求器地址。 系統請求器地址應與(其中一個)處理器 HPA(I/O 範圍中的高地址)匹配; 系統響應器地址是真實模式程式碼嘗試訪問的地址。
系統響應器地址的典型值是大於 __PAGE_OFFSET (0x10000000) 的地址,這意味著虛擬地址在真實模式程式碼嘗試訪問它之前沒有被轉換為物理地址。
3. Q 位樂趣¶
某些非常關鍵的程式碼必須清除 PSW 中的 Q 位。 當 Q 位被清除時,發生的情況是 CPU 不更新中斷處理程式讀取的暫存器,以找出機器在哪裡被中斷 - 因此,如果您在清除 Q 位的指令和再次設定 Q 位的 RFI 之間發生中斷,您不知道它確切發生在何處。 如果您幸運的話,IAOQ 將指向清除 Q 位的指令,如果不幸運的話,它會指向任何地方。 通常,Q 位問題會以無法解釋的系統掛起或超出物理記憶體末端執行的形式表現出來。