[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