[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