[Openmcl-cvs-notifications] r13002 - /trunk/source/lisp-kernel/x86-exceptions.c
rme at clozure.com
rme at clozure.com
Mon Oct 12 20:02:23 EDT 2009
Author: rme
Date: Mon Oct 12 20:02:23 2009
New Revision: 13002
Log:
In handle_fault(), pass the watched object on the lisp stack
underneath the xcf rather than as an (integer) callback parameter.
Compute and pass an offset to the written address (reckoned from the
tagged object pointer).
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 Mon Oct 12 20:02:23 2009
@@ -841,11 +841,16 @@
(header_subtag(header_of(cmain)) =3D=3D subtag_macptr)) {
LispObj save_vsp =3D xpGPR(xp, Isp);
LispObj save_fp =3D xpGPR(xp, Ifp);
- LispObj xcf =3D create_exception_callback_frame(xp, tcr);
+ LispObj xcf;
+ natural offset =3D (LispObj)addr - obj;
int skip;
=
+ push_on_lisp_stack(xp, obj);
+ xcf =3D create_exception_callback_frame(xp, tcr);
+
/* The magic 2 means this was a write to a watchd object */
- skip =3D callback_to_lisp(tcr, cmain, xp, xcf, SIGSEGV, 2, (natural) ad=
dr, obj);
+ skip =3D callback_to_lisp(tcr, cmain, xp, xcf, SIGSEGV, 2,
+ (natural)addr, offset);
xpPC(xp) +=3D skip;
xpGPR(xp, Ifp) =3D save_fp;
xpGPR(xp, Isp) =3D save_vsp;
More information about the Openmcl-cvs-notifications
mailing list