[Openmcl-cvs-notifications] r14863 - /trunk/source/lisp-kernel/x86-exceptions.c

gb at clozure.com gb at clozure.com
Tue Jul 5 11:59:04 CDT 2011


Author: gb
Date: Tue Jul  5 11:59:04 2011
New Revision: 14863

Log:
In handle_fault: some OSes (you know who) don't bother to set =

information about the fault address on certain kinds of memory
faults, so we can't compare it to tcr.safe_ref_address.  If
tcr.save_ref_address is non-zero when we get a fault, behave
as if we'd accessed that address (how would we know what address
was accessed ?) and return a null pointer to %SAFE-GET-PTR.

Modified:
    trunk/source/lisp-kernel/x86-exceptions.c

Modified: trunk/source/lisp-kernel/x86-exceptions.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/x86-exceptions.c (original)
+++ trunk/source/lisp-kernel/x86-exceptions.c Tue Jul  5 11:59:04 2011
@@ -865,13 +865,14 @@
 #endif
   Boolean valid =3D IS_PAGE_FAULT(info,xp);
 =

+  if (tcr->safe_ref_address !=3D NULL) {
+    xpGPR(xp,Iimm0) =3D 0;
+    xpPC(xp) =3D xpGPR(xp,Ira0);
+    tcr->safe_ref_address =3D NULL;
+    return true;
+  }
+
   if (valid) {
-    if (addr && (addr =3D=3D tcr->safe_ref_address)) {
-      xpGPR(xp,Iimm0) =3D 0;
-      xpPC(xp) =3D xpGPR(xp,Ira0);
-      return true;
-    }
-    =

     {
       protected_area *a =3D find_protected_area(addr);
       protection_handler *handler;



More information about the Openmcl-cvs-notifications mailing list