[Openmcl-cvs-notifications] r10100 - /trunk/source/lisp-kernel/lisp-debug.c
rme at clozure.com
rme at clozure.com
Fri Jul 18 15:47:31 EDT 2008
Author: rme
Date: Fri Jul 18 15:47:31 2008
New Revision: 10100
Log:
Additions for Darwin/x8632.
Modified:
trunk/source/lisp-kernel/lisp-debug.c
Modified: trunk/source/lisp-kernel/lisp-debug.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/lisp-debug.c (original)
+++ trunk/source/lisp-kernel/lisp-debug.c Fri Jul 18 15:47:31 2008
@@ -146,6 +146,29 @@
#endif
#endif
=
+#ifdef X8632
+#ifdef DARWIN
+char *Iregnames[] =3D {"eax", "ebx", "ecx", "edx", "edi", "esi",
+ "ebp", "???", "efl", "eip"};
+#endif
+#endif
+
+#ifdef X8632
+int bit_for_regnum(int r)
+{
+ switch (r) {
+ case REG_EAX: return 1<<0;
+ case REG_ECX: return 1<<1;
+ case REG_EDX: return 1<<2;
+ case REG_EBX: return 1<<3;
+ case REG_ESP: return 1<<4;
+ case REG_EBP: return 1<<5;
+ case REG_ESI: return 1<<6;
+ case REG_EDI: return 1<<7;
+ }
+}
+#endif
+
void
show_lisp_register(ExceptionInformation *xp, char *label, int r)
{
@@ -155,8 +178,21 @@
#ifdef PPC
fprintf(stderr, "r%02d (%s) =3D %s\n", r, label, print_lisp_object(val));
#endif
-#ifdef X86
+#ifdef X8664
fprintf(stderr, "%%%s (%s) =3D %s\n",Iregnames[r], label, print_lisp_obj=
ect(val));
+#endif
+#ifdef X8632
+ {
+ TCR *tcr =3D get_tcr(false);
+ char *s;
+
+ if (tcr && (tcr->node_regs_mask & bit_for_regnum(r)) =3D=3D 0)
+ s =3D "marked as unboxed";
+ else
+ s =3D print_lisp_object(val);
+
+ fprintf(stderr, "%%%s (%s) =3D %s\n", Iregnames[r], label, s);
+ }
#endif
=
}
@@ -431,6 +467,21 @@
}
#endif
}
+
+#ifdef X8632
+ show_lisp_register(xp, "arg_z", Iarg_z);
+ show_lisp_register(xp, "arg_y", Iarg_y);
+ fprintf(stderr,"------\n");
+ show_lisp_register(xp, "fn", Ifn);
+ fprintf(stderr,"------\n");
+ show_lisp_register(xp, "temp0", Itemp0);
+ show_lisp_register(xp, "temp1", Itemp1);
+ fprintf(stderr,"------\n");
+ if (tag_of(xpGPR(xp,Inargs)) =3D=3D tag_fixnum) {
+ fprintf(stderr,"%%edx (nargs) =3D %d (maybe)\n", unbox_fixnum(xpGPR(xp=
,Inargs)));
+ }
+#endif
+ =
return debug_continue;
}
=
@@ -629,6 +680,20 @@
fprintf(stderr,"%%rip =3D 0x%016lX %%rflags =3D 0x%016lX\n",
xpGPR(xp, Iip), xpGPR(xp, Iflags));
#endif
+
+#ifdef X8632
+ fprintf(stderr, "%%eax =3D 0x%08X\n", xpGPR(xp, REG_EAX));
+ fprintf(stderr, "%%ecx =3D 0x%08X\n", xpGPR(xp, REG_ECX));
+ fprintf(stderr, "%%edx =3D 0x%08X\n", xpGPR(xp, REG_EDX));
+ fprintf(stderr, "%%ebx =3D 0x%08X\n", xpGPR(xp, REG_EBX));
+ fprintf(stderr, "%%esp =3D 0x%08X\n", xpGPR(xp, REG_ESP));
+ fprintf(stderr, "%%ebp =3D 0x%08X\n", xpGPR(xp, REG_EBP));
+ fprintf(stderr, "%%esi =3D 0x%08X\n", xpGPR(xp, REG_ESI));
+ fprintf(stderr, "%%edi =3D 0x%08X\n", xpGPR(xp, REG_EDI));
+ fprintf(stderr, "%%eip =3D 0x%08X\n", xpGPR(xp, REG_EIP));
+ fprintf(stderr, "%%eflags =3D 0x%08X\n", xpGPR(xp, REG_EFL));
+#endif
+
return debug_continue;
}
=
@@ -695,6 +760,24 @@
#endif
);
#endif =
+#ifdef X8632
+#ifdef DARWIN
+ struct xmm {
+ char fpdata[8];
+ };
+ struct xmm *xmmp =3D (struct xmm *)(xpFPRvector(xp));
+
+ for (i =3D 0; i < 8; i++, xmmp++) {
+ float *sp =3D (float *)xmmp;
+ dp =3D (double *)xmmp;
+ np =3D (int *)xmmp;
+ fprintf(stderr, "f%1d: 0x%08x (%e), 0x%08x%08x (%e)\n", i, *np,
+ (double)(*sp), np[1], np[0], *dp);
+ }
+ fprintf(stderr, "mxcsr =3D 0x%08x\n", UC_MCONTEXT(xp)->__fs.__fpu_mxcsr);
+#endif
+#endif
+
return debug_continue;
}
=
@@ -941,6 +1024,21 @@
if (lisp_global(BATCH_FLAG)) {
abort();
}
+#ifdef DARWIN
+#ifdef X8664
+ if (xp) {
+ extern void *_sigtramp();
+ extern int os_major_version;
+
+ if (xpPC(xp) =3D=3D (natural)_sigtramp) {
+ xp =3D (ExceptionInformation *) xpGPR(xp, REG_R8);
+ fprintf(stderr, "Exception raised at _sigtramp; using context passed=
to _sigtramp. Raw register values (R) may be more interesting then lisp v=
alues or lisp backtrace\n");
+ }
+ }
+#endif
+#endif
+
+
if (xp) {
if (why > debug_entry_exception) {
debug_identify_exception(xp, info, why);
More information about the Openmcl-cvs-notifications
mailing list