[Openmcl-cvs-notifications] r14494 - /trunk/source/lisp-kernel/arm-gc.c

gb at clozure.com gb at clozure.com
Sat Dec 18 02:40:38 CST 2010


Author: gb
Date: Sat Dec 18 02:40:37 2010
New Revision: 14494

Log:
GC integrity checks check exception frames, thread-local special
bindings on ARM.

Modified:
    trunk/source/lisp-kernel/arm-gc.c

Modified: trunk/source/lisp-kernel/arm-gc.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/arm-gc.c (original)
+++ trunk/source/lisp-kernel/arm-gc.c Sat Dec 18 02:40:37 2010
@@ -143,6 +143,48 @@
 }
 =

 void
+check_xp(ExceptionInformation *xp)
+{
+  natural *regs =3D (natural *) xpGPRvector(xp);
+  LispObj lr_value;
+  int r;
+
+  for (r =3D arg_z; r <=3D Rfn; r++) {
+    check_node((regs[r]));
+  }
+}
+
+
+
+void
+check_tcrs(TCR *first)
+{
+  xframe_list *xframes;
+  ExceptionInformation *xp;
+  =

+  TCR *tcr =3D first;
+  LispObj *tlb_start,*tlb_end;
+
+  do {
+    xp =3D tcr->gc_context;
+    if (xp) {
+      check_xp(xp);
+    }
+    for (xframes =3D (xframe_list *) tcr->xframe; =

+         xframes; =

+         xframes =3D xframes->prev) {
+      check_xp(xframes->curr);
+    }
+    tlb_start =3D tcr->tlb_pointer;
+    if (tlb_start) {
+      tlb_end =3D tlb_start + ((tcr->tlb_limit)>>fixnumshift);
+      check_range(tlb_start,tlb_end,false);
+    }
+    tcr =3D tcr->next;
+  } while (tcr !=3D first);
+}
+
+void
 check_all_areas(TCR *tcr)
 {
   area *a =3D active_dynamic_area;
@@ -172,6 +214,7 @@
     a =3D a->succ;
     code =3D (a->code);
   }
+  check_tcrs(tcr);
 }
 =

 =




More information about the Openmcl-cvs-notifications mailing list