![](https://secure.gravatar.com/avatar/cc13150cabd87c26f35cb4b0ea78d66d.jpg?s=120&d=mm&r=g)
Date: Thursday, December 23, 2010 @ 17:23:48 Author: rtoy Path: /project/cmucl/cvsroot/src/lisp Modified: x86-arch.c x86-lispregs.h Fix tracing for NetBSD. Function end breakpoints didn't seem to be working when tracing, for example (declaim (ftype (function (double-float) double-float) fact)) (defun fact (x) (declare (double-float x)) (if (= x 1) 1d0 (* x (fact (1- x))))) lisp/x86-lispregs.h o NetBSD has access to the eflags register lisp/x86-arch.c: o Add some debugging prints (disabled). o The stuff near line 262 about pc-9 pointing to the pushf instruction should be conditioned on SC_EFLAGS because that's what decides whether we insert the pushf instructions for single stepping. ----------------+ x86-arch.c | 12 ++++++++---- x86-lispregs.h | 4 +++- 2 files changed, 11 insertions(+), 5 deletions(-) Index: src/lisp/x86-arch.c diff -u src/lisp/x86-arch.c:1.40 src/lisp/x86-arch.c:1.41 --- src/lisp/x86-arch.c:1.40 Tue Dec 21 21:12:52 2010 +++ src/lisp/x86-arch.c Thu Dec 23 17:23:48 2010 @@ -1,6 +1,6 @@ /* x86-arch.c -*- Mode: C; comment-column: 40 -*- * - * $Header: /project/cmucl/cvsroot/src/lisp/x86-arch.c,v 1.40 2010-12-22 02:12:52 rtoy Exp $ + * $Header: /project/cmucl/cvsroot/src/lisp/x86-arch.c,v 1.41 2010-12-23 22:23:48 rtoy Exp $ * */ @@ -250,6 +250,8 @@ * single-stepping and stop on the next instruction. */ + DFPRINTF(0, (stderr, "Installing helper instructions\n")); + single_step_save1 = *(pc - 3); single_step_save2 = *(pc - 2); single_step_save3 = *(pc - 1); @@ -260,12 +262,13 @@ single_stepping = (unsigned int *) pc; -#if !(defined(__linux__) || defined(DARWIN)) +#ifndef SC_EFLAGS /* * pc - 9 points to the pushf instruction that we installed for * the helper. */ + DFPRINTF(0, (stderr, " Setting pc to pushf instruction at %p\n", (void*) ((char*) pc - 9))); SC_PC(context) = (int)((char *) pc - 9); #endif } @@ -277,8 +280,8 @@ unsigned int trap; #if 0 - fprintf(stderr, "x86sigtrap: %8x %x\n", - SC_PC(context), *(unsigned char *) (SC_PC(context) - 1)); + fprintf(stderr, "x86sigtrap: %8x %x\n", + SC_PC(context), *(unsigned char *) (SC_PC(context) - 1)); fprintf(stderr, "sigtrap(%d %d %x)\n", signal, CODE(code), context); #endif @@ -295,6 +298,7 @@ *(single_stepping - 3) = single_step_save1; *(single_stepping - 2) = single_step_save2; *(single_stepping - 1) = single_step_save3; + DFPRINTF(0, (stderr, "Uninstalling helper instructions\n")); #endif /* Index: src/lisp/x86-lispregs.h diff -u src/lisp/x86-lispregs.h:1.13 src/lisp/x86-lispregs.h:1.14 --- src/lisp/x86-lispregs.h:1.13 Mon Dec 29 09:40:34 2008 +++ src/lisp/x86-lispregs.h Thu Dec 23 17:23:48 2010 @@ -1,5 +1,5 @@ /* x86-lispregs.h -*- Mode: C; -*- - * $Header: /project/cmucl/cvsroot/src/lisp/x86-lispregs.h,v 1.13 2008-12-29 14:40:34 rtoy Rel $ + * $Header: /project/cmucl/cvsroot/src/lisp/x86-lispregs.h,v 1.14 2010-12-23 22:23:48 rtoy Exp $ */ #ifndef _X86_LISPREGS_H_ @@ -58,6 +58,8 @@ #endif #elif defined(__linux__) #define SC_EFLAGS(sc) ((sc)->uc_mcontext.gregs[REG_EFL]) +#elif defined(__NetBSD__) +#define SC_EFLAGS(sc) ((sc)->uc_mcontext.__gregs[_REG_EFL]) #endif #endif /* _X86_LISPREGS_H_ */