Index: kernel/arch/ppc32/include/exception.h
===================================================================
--- kernel/arch/ppc32/include/exception.h	(revision 12bf33aabbb4c9c0de96d2a50f4601aff4642be2)
+++ kernel/arch/ppc32/include/exception.h	(revision 826c203b1eb0841831b90bed895972ff50c4f2b5)
@@ -76,4 +76,5 @@
 	uint32_t ctr;
 	uint32_t xer;
+	uint32_t dar;
 	uint32_t r12;
 	uint32_t sp;
Index: kernel/arch/ppc32/src/asm.S
===================================================================
--- kernel/arch/ppc32/src/asm.S	(revision 12bf33aabbb4c9c0de96d2a50f4601aff4642be2)
+++ kernel/arch/ppc32/src/asm.S	(revision 826c203b1eb0841831b90bed895972ff50c4f2b5)
@@ -132,6 +132,6 @@
 	mtxer r12
 	
-	lwz r12, 152(sp)
-	lwz sp, 156(sp)
+	lwz r12, 156(sp)
+	lwz sp, 160(sp)
 	
 	rfi
@@ -198,6 +198,6 @@
 	mtxer r12
 	
-	lwz r12, 152(sp)
-	lwz sp, 156(sp)
+	lwz r12, 156(sp)
+	lwz sp, 160(sp)
 
 	rfi
Index: kernel/arch/ppc32/src/exception.S
===================================================================
--- kernel/arch/ppc32/src/exception.S	(revision 12bf33aabbb4c9c0de96d2a50f4601aff4642be2)
+++ kernel/arch/ppc32/src/exception.S	(revision 826c203b1eb0841831b90bed895972ff50c4f2b5)
@@ -61,5 +61,5 @@
 	2:
 	
-	subi sp, sp, 160
+	subi sp, sp, 164
 	stw r0, 8(sp)
 	stw r2, 12(sp)
@@ -110,9 +110,12 @@
 	stw r12, 148(sp)
 	
+	mfdar r12
+	stw r12, 152(sp)
+	
 	mfsprg1 r12
-	stw r12, 152(sp)
+	stw r12, 156(sp)
 	
 	mfsprg2 r12
-	stw r12, 156(sp)
+	stw r12, 160(sp)
 .endm
 
@@ -138,4 +141,86 @@
 	CONTEXT_STORE
 	
+	b data_storage
+
+.org 0x400
+.global exc_instruction_storage
+exc_instruction_storage:
+	CONTEXT_STORE
+	
+	b instruction_storage
+
+.org 0x500
+.global exc_external
+exc_external:
+	CONTEXT_STORE
+	
+	li r3, 4
+	b jump_to_kernel
+
+.org 0x600
+.global exc_alignment
+exc_alignment:
+	CONTEXT_STORE
+	
+	li r3, 5
+	b jump_to_kernel
+
+.org 0x700
+.global exc_program
+exc_program:
+	CONTEXT_STORE
+	
+	li r3, 6
+	b jump_to_kernel
+
+.org 0x800
+.global exc_fp_unavailable
+exc_fp_unavailable:
+	CONTEXT_STORE
+	
+	li r3, 7
+	b jump_to_kernel
+
+.org 0x900
+.global exc_decrementer
+exc_decrementer:
+	CONTEXT_STORE
+	
+	li r3, 8
+	b jump_to_kernel
+
+.org 0xa00
+.global exc_reserved0
+exc_reserved0:
+	CONTEXT_STORE
+	
+	li r3, 9
+	b jump_to_kernel
+
+.org 0xb00
+.global exc_reserved1
+exc_reserved1:
+	CONTEXT_STORE
+	
+	li r3, 10
+	b jump_to_kernel
+
+.org 0xc00
+.global exc_syscall
+exc_syscall:
+	CONTEXT_STORE	
+	
+	b jump_to_kernel_syscall
+
+.org 0xd00
+.global exc_trace
+exc_trace:
+	CONTEXT_STORE
+	
+	li r3, 12
+	b jump_to_kernel
+
+.org 0x4000
+data_storage:
 	li r3, 2
 	mr r4, sp
@@ -149,9 +234,5 @@
 	b jump_to_kernel
 
-.org 0x400
-.global exc_instruction_storage
-exc_instruction_storage:
-	CONTEXT_STORE
-	
+instruction_storage:
 	li r3, 3
 	mr r4, sp
@@ -161,80 +242,8 @@
 	cmpwi r3, 0
 	bne iret_real
-
+	
 	li r3, 3
 	b jump_to_kernel
 
-.org 0x500
-.global exc_external
-exc_external:
-	CONTEXT_STORE
-	
-	li r3, 4
-	b jump_to_kernel
-
-.org 0x600
-.global exc_alignment
-exc_alignment:
-	CONTEXT_STORE
-	
-	li r3, 5
-	b jump_to_kernel
-
-.org 0x700
-.global exc_program
-exc_program:
-	CONTEXT_STORE
-	
-	li r3, 6
-	b jump_to_kernel
-
-.org 0x800
-.global exc_fp_unavailable
-exc_fp_unavailable:
-	CONTEXT_STORE
-	
-	li r3, 7
-	b jump_to_kernel
-
-.org 0x900
-.global exc_decrementer
-exc_decrementer:
-	CONTEXT_STORE
-	
-	li r3, 8
-	b jump_to_kernel
-
-.org 0xa00
-.global exc_reserved0
-exc_reserved0:
-	CONTEXT_STORE
-	
-	li r3, 9
-	b jump_to_kernel
-
-.org 0xb00
-.global exc_reserved1
-exc_reserved1:
-	CONTEXT_STORE
-	
-	li r3, 10
-	b jump_to_kernel
-
-.org 0xc00
-.global exc_syscall
-exc_syscall:
-	CONTEXT_STORE	
-	
-	b jump_to_kernel_syscall
-
-.org 0xd00
-.global exc_trace
-exc_trace:
-	CONTEXT_STORE
-	
-	li r3, 12
-	b jump_to_kernel
-
-.org 0x4000
 jump_to_kernel:
 	lis r12, iret@ha
@@ -323,6 +332,6 @@
 	mtxer r12
 	
-	lwz r12, 152(sp)
-	lwz sp, 156(sp)
+	lwz r12, 156(sp)
+	lwz sp, 160(sp)
 	
 	rfi
Index: kernel/arch/ppc32/src/mm/tlb.c
===================================================================
--- kernel/arch/ppc32/src/mm/tlb.c	(revision 12bf33aabbb4c9c0de96d2a50f4601aff4642be2)
+++ kernel/arch/ppc32/src/mm/tlb.c	(revision 826c203b1eb0841831b90bed895972ff50c4f2b5)
@@ -112,14 +112,13 @@
 	char *sym2 = "";
 
-	char *s = get_symtab_entry(istate->pc);
-	if (s)
-		symbol = s;
-	s = get_symtab_entry(istate->lr);
-	if (s)
-		sym2 = s;
+	char *str = get_symtab_entry(istate->pc);
+	if (str)
+		symbol = str;
+	str = get_symtab_entry(istate->lr);
+	if (str)
+		sym2 = str;
 
 	fault_if_from_uspace(istate,
-	    "%p: PHT Refill Exception at %p (%s<-%s).", badvaddr,
-	    istate->pc, symbol, sym2);
+	    "PHT Refill Exception on %p.", badvaddr);
 	panic("%p: PHT Refill Exception at %p (%s<-%s).", badvaddr,
 	    istate->pc, symbol, sym2);
@@ -292,10 +291,7 @@
 	}
 	
-	if (n == VECTOR_DATA_STORAGE) {
-		asm volatile (
-			"mfdar %0\n"
-			: "=r" (badvaddr)
-		);
-	} else
+	if (n == VECTOR_DATA_STORAGE)
+		badvaddr = istate->dar;
+	else
 		badvaddr = istate->pc;
 		
@@ -343,10 +339,7 @@
 	uintptr_t badvaddr;
 	
-	if (n == VECTOR_DATA_STORAGE) {
-		asm volatile (
-			"mfdar %0\n"
-			: "=r" (badvaddr)
-		);
-	} else
+	if (n == VECTOR_DATA_STORAGE)
+		badvaddr = istate->dar;
+	else
 		badvaddr = istate->pc;
 	
