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 位的指令和再次设置它的 RFI 之间发生中断,您就不知道确切发生在什么地方。如果幸运,IAOQ 会指向清除 Q 位的指令,如果不幸运,它会指向任何地方。通常,Q 位问题会表现为无法解释的系统挂起或超出物理内存的末端运行。