.. include:: ../disclaimer-zh_CN.rst

:Original: Documentation/parisc/debugging.rst

:翻译:

 司延腾 Yanteng Si <siyanteng@loongson.cn>

.. _cn_parisc_debugging:

=================
调试PA-RISC
=================

好吧，这里有一些关于调试linux/parisc的较底层部分的信息。


1. 绝对地址
=====================

很多汇编代码目前运行在实模式下，这意味着会使用绝对地址，而不是像内核其他
部分那样使用虚拟地址。要将绝对地址转换为虚拟地址，你可以在System.map中查
找，添加__PAGE_OFFSET（目前是0x10000000）。


2. HPMCs
========

当实模式的代码试图访问不存在的内存时，会出现HPMC（high priority machine
check）而不是内核oops。若要调试HPMC，请尝试找到系统响应程序/请求程序地址。
系统请求程序地址应该与（某）处理器的HPA（I/O范围内的高地址）相匹配；系统响应程
序地址是实模式代码试图访问的地址。

系统响应程序地址的典型值是大于__PAGE_OFFSET （0x10000000）的地址，这意味着
在实模式试图访问它之前，虚拟地址没有被翻译成物理地址。


3. 有趣的Q位
============

某些非常关键的代码必须清除PSW中的Q位。当Q位被清除时，CPU不会更新中断处理
程序所读取的寄存器，以找出机器被中断的位置——所以如果你在清除Q位的指令和再
次设置Q位的RFI之间遇到中断，你不知道它到底发生在哪里。如果你幸运的话，IAOQ
会指向清除Q位的指令，如果你不幸运的话，它会指向任何地方。通常Q位的问题会
表现为无法解释的系统挂起或物理内存越界。
