Subject: [PATCH] Make instruction dumping work in real mode.

From: Scott Wood <[email-masked]>
Date: Mon, 24 Sep 2007 14:01:00 -0500

On non-book-E, if a faulting PC is in the first few pages, and it's not an
ITLB miss, it's likely executing in real mode, probably at an exception vector.

Rather than print a useless XXXXXXXX, it is assumed that this is the case, and
the address is treated as physical.  This helps when debugging corruption at
the beginning of memory.

Signed-off-by: Scott Wood <[email-masked]>
---
 arch/powerpc/kernel/process.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 57c589c..7cb94d7 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -354,6 +354,14 @@ static void show_instructions(struct pt_regs *regs)
 		if (!(i % 8))
 			printk("\n");
 
+#ifndef CONFIG_BOOKE
+		/* If the address is in the first couple pages, it's
+		 * likely executing in real mode.
+		 */
+		if (regs->nip < 0x4000)
+			pc += (unsigned long)phys_to_virt(KERNELBASE);
+#endif
+
 		/* We use __get_user here *only* to avoid an OOPS on a
 		 * bad address because the pc *should* only be a
 		 * kernel address.
-- 
1.5.3.1