Index: /trunk/ccl/lisp-kernel/ppc-exceptions.c
===================================================================
--- /trunk/ccl/lisp-kernel/ppc-exceptions.c	(revision 5436)
+++ /trunk/ccl/lisp-kernel/ppc-exceptions.c	(revision 5437)
@@ -846,12 +846,17 @@
 
 OSStatus
-handle_protection_violation(ExceptionInformation *xp, siginfo_t *info)
+handle_protection_violation(ExceptionInformation *xp, siginfo_t *info, TCR *tcr)
 {
   BytePtr addr;
   protected_area_ptr area;
   protection_handler *handler;
-  TCR *tcr = TCR_FROM_TSD(xpGPR(xp, rcontext));
   extern Boolean touch_page(void *);
   extern void touch_page_end(void);
+
+  if (info) {
+    addr = (BytePtr)(info->si_addr);
+  } else {
+    addr = (BytePtr) ((natural) (xpDAR(xp)));
+  }
 
   if (addr && (addr == tcr->safe_ref_address)) {
@@ -871,9 +876,4 @@
   }
 
-  if (info) {
-    addr = (BytePtr)(info->si_addr);
-  } else {
-    addr = (BytePtr) ((natural) (xpDAR(xp)));
-  }
   area = find_protected_area(addr);
 
@@ -1175,5 +1175,5 @@
   } else if ((xnum == SIGSEGV) ||
 	     (xnum == SIGBUS)) {
-    status = handle_protection_violation(xp, info);
+    status = handle_protection_violation(xp, info, tcr);
   } else if (xnum == SIGFPE) {
     status = handle_sigfpe(xp, tcr);
