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 位问题会以无法解释的系统挂起或超出物理内存末端运行的形式表现出来。