GNU Linux-libre 6.9-gnu
[releases.git] / Documentation / arch / parisc / debugging.rst
1 =================
2 PA-RISC Debugging
3 =================
4
5 okay, here are some hints for debugging the lower-level parts of
6 linux/parisc.
7
8
9 1. Absolute addresses
10 =====================
11
12 A lot of the assembly code currently runs in real mode, which means
13 absolute addresses are used instead of virtual addresses as in the
14 rest of the kernel.  To translate an absolute address to a virtual
15 address you can lookup in System.map, add __PAGE_OFFSET (0x10000000
16 currently).
17
18
19 2. HPMCs
20 ========
21
22 When real-mode code tries to access non-existent memory, you'll get
23 an HPMC instead of a kernel oops.  To debug an HPMC, try to find
24 the System Responder/Requestor addresses.  The System Requestor
25 address should match (one of the) processor HPAs (high addresses in
26 the I/O range); the System Responder address is the address real-mode
27 code tried to access.
28
29 Typical values for the System Responder address are addresses larger
30 than __PAGE_OFFSET (0x10000000) which mean a virtual address didn't
31 get translated to a physical address before real-mode code tried to
32 access it.
33
34
35 3. Q bit fun
36 ============
37
38 Certain, very critical code has to clear the Q bit in the PSW.  What
39 happens when the Q bit is cleared is the CPU does not update the
40 registers interruption handlers read to find out where the machine
41 was interrupted - so if you get an interruption between the instruction
42 that clears the Q bit and the RFI that sets it again you don't know
43 where exactly it happened.  If you're lucky the IAOQ will point to the
44 instruction that cleared the Q bit, if you're not it points anywhere
45 at all.  Usually Q bit problems will show themselves in unexplainable
46 system hangs or running off the end of physical memory.