162306a36Sopenharmony_ci.. include:: ../../disclaimer-zh_CN.rst
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci:Original: Documentation/arch/parisc/debugging.rst
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci:翻译:
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci 司延腾 Yanteng Si <siyanteng@loongson.cn>
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci.. _cn_parisc_debugging:
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci=================
1262306a36Sopenharmony_ci调试PA-RISC
1362306a36Sopenharmony_ci=================
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci好吧,这里有一些关于调试linux/parisc的较底层部分的信息。
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci1. 绝对地址
1962306a36Sopenharmony_ci=====================
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci很多汇编代码目前运行在实模式下,这意味着会使用绝对地址,而不是像内核其他
2262306a36Sopenharmony_ci部分那样使用虚拟地址。要将绝对地址转换为虚拟地址,你可以在System.map中查
2362306a36Sopenharmony_ci找,添加__PAGE_OFFSET(目前是0x10000000)。
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci2. HPMCs
2762306a36Sopenharmony_ci========
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci当实模式的代码试图访问不存在的内存时,会出现HPMC(high priority machine
3062306a36Sopenharmony_cicheck)而不是内核oops。若要调试HPMC,请尝试找到系统响应程序/请求程序地址。
3162306a36Sopenharmony_ci系统请求程序地址应该与(某)处理器的HPA(I/O范围内的高地址)相匹配;系统响应程
3262306a36Sopenharmony_ci序地址是实模式代码试图访问的地址。
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci系统响应程序地址的典型值是大于__PAGE_OFFSET (0x10000000)的地址,这意味着
3562306a36Sopenharmony_ci在实模式试图访问它之前,虚拟地址没有被翻译成物理地址。
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci3. 有趣的Q位
3962306a36Sopenharmony_ci============
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci某些非常关键的代码必须清除PSW中的Q位。当Q位被清除时,CPU不会更新中断处理
4262306a36Sopenharmony_ci程序所读取的寄存器,以找出机器被中断的位置——所以如果你在清除Q位的指令和再
4362306a36Sopenharmony_ci次设置Q位的RFI之间遇到中断,你不知道它到底发生在哪里。如果你幸运的话,IAOQ
4462306a36Sopenharmony_ci会指向清除Q位的指令,如果你不幸运的话,它会指向任何地方。通常Q位的问题会
4562306a36Sopenharmony_ci表现为无法解释的系统挂起或物理内存越界。
46