[Openmcl-cvs-notifications] r9902 - /trunk/source/lisp-kernel/xlbt.c

gb at clozure.com gb at clozure.com
Sun Jul 6 04:59:14 EDT 2008


Author: gb
Date: Sun Jul  6 04:59:14 2008
New Revision: 9902

Log:
If the arg to plbt_sp() is outside of the lisp stack area (as it often
is when a foreign exception caused entry to kernel debugger), try
to use tcr->save_rbp instead (so that we can at least see lisp backtrace
up to the point of an ff-call.)

Modified:
    trunk/source/lisp-kernel/xlbt.c

Modified: trunk/source/lisp-kernel/xlbt.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/xlbt.c (original)
+++ trunk/source/lisp-kernel/xlbt.c Sun Jul  6 04:59:14 2008
@@ -17,10 +17,6 @@
 #include "lispdcmd.h"
 #include <stdio.h>
 =

-const char *
-foreign_name_and_offset(void *frame, unsigned *delta)
-{
-}
 =

 =

 void
@@ -54,9 +50,7 @@
 Boolean
 lisp_frame_p(lisp_frame *f)
 {
-  LispObj fun, ra;
-  unsigned offset;
-  int sdisp;
+  LispObj ra;
 =

   if (f) {
     ra =3D f->tra;
@@ -65,16 +59,6 @@
     }
 =

     if (tag_of(ra) =3D=3D tag_tra) {
-#if 0
-      if ((*((unsigned short *)ra) =3D=3D RECOVER_FN_FROM_RIP_WORD0) &&
-          (*((unsigned char *)(ra+2)) =3D=3D RECOVER_FN_FROM_RIP_BYTE2)) {
-        sdisp =3D (*(int *) (ra+3));
-        fun =3D RECOVER_FN_FROM_RIP_LENGTH+ra+sdisp;
-      }
-      if (fulltag_of(fun) =3D=3D fulltag_function) {
-        return true;
-      }
-#endif
       return true;
     } else if ((ra =3D=3D lisp_global(LEXPR_RETURN)) ||
 	       (ra =3D=3D lisp_global(LEXPR_RETURN1V))) {
@@ -141,6 +125,10 @@
     cs_area =3D tcr->cs_area;
     if ((((LispObj) ptr_to_lispobj(vs_area->low)) > currentRBP) ||
         (((LispObj) ptr_to_lispobj(vs_area->high)) < currentRBP)) {
+      currentRBP =3D (LispObj) (tcr->save_rbp);
+    }
+    if ((((LispObj) ptr_to_lispobj(vs_area->low)) > currentRBP) ||
+        (((LispObj) ptr_to_lispobj(vs_area->high)) < currentRBP)) {
       Dprintf("\nFramepointer [#x%lX] in unknown area.", currentRBP);
     } else {
       fprintf(stderr, "current thread: tcr =3D 0x%lx, native thread ID =3D=
 0x%lx, interrupts %s\n", tcr, tcr->native_thread_id, ilevel);



More information about the Openmcl-cvs-notifications mailing list