0.9.16.38:
authorJuho Snellman <jsnell@iki.fi>
Mon, 18 Sep 2006 20:09:13 +0000 (20:09 +0000)
committerJuho Snellman <jsnell@iki.fi>
Mon, 18 Sep 2006 20:09:13 +0000 (20:09 +0000)
commitb66385e2031fc2cac17dd129df0af400beb48a22
tree3573f48a859f1cee32b5c768010841f378524e3a
parentd2f5999ec2882ba9d69656f5568705e5fd200ba1
0.9.16.38:
        Rewrite the single-stepper to solve the compilation/run-time
        performance and type-inference inaccuracy problems with the old
        approach. Also make some UI improvements to the stepper.

        * The IR1 stage no longer instruments the code. Instead it
          only detects function call forms which should (according to
          the policy) be steppable, and records a string
          representation of those forms in the matching combination
          nodes (to be stored in the debug-info).
        * Modify the function call vops to emit some instrumentation just
          before the actual call happens. This will check either the
          symbol-value of *STEPPING* (unithreaded) or the new STEPPING
          slot of threads (multithreaded) and trap if it's true. The
          trap handler will replace the closure / fdefn that was about
          to be called with a wrapper, which will signal a stepper
          condition and then call the original function.
        * Emit a similar bit of instrumentation before any call that
          got optimized to a simple VOP. The difference is that the
          only thing that the trap handler will do is to directly
          signal the condition.
        * The necessary VOP / runtime changes have only been done on
          x86, x86-64 and ppc so far. Alpha, Mips and Sparc should
          still compile, but the stepper won't work there.
        * Remove the old single-stepper REPL, and instead integrate the
          stepper into the debugger.
        * Add STEP-OUT functionality (stop stepping temporarily,
          resuming it once the current function returns).
40 files changed:
NEWS
build-order.lisp-expr
package-data-list.lisp-expr
src/code/condition.lisp
src/code/debug-info.lisp
src/code/debug-int.lisp
src/code/debug-var-io.lisp
src/code/debug.lisp
src/code/early-step.lisp [new file with mode: 0644]
src/code/step.lisp
src/code/target-thread.lisp
src/code/toplevel.lisp
src/compiler/alpha/call.lisp
src/compiler/alpha/parms.lisp
src/compiler/debug-dump.lisp
src/compiler/generic/objdef.lisp
src/compiler/generic/parms.lisp
src/compiler/ir1tran.lisp
src/compiler/ir2tran.lisp
src/compiler/mips/call.lisp
src/compiler/mips/parms.lisp
src/compiler/node.lisp
src/compiler/ppc/call.lisp
src/compiler/ppc/parms.lisp
src/compiler/sparc/call.lisp
src/compiler/sparc/parms.lisp
src/compiler/x86-64/call.lisp
src/compiler/x86-64/insts.lisp
src/compiler/x86-64/parms.lisp
src/compiler/x86/call.lisp
src/compiler/x86/parms.lisp
src/runtime/breakpoint.c
src/runtime/ppc-arch.c
src/runtime/thread.c
src/runtime/x86-64-arch.c
src/runtime/x86-arch.c
tests/debug.impure.lisp
tests/foreign-stack-alignment.impure.lisp
tests/step.impure.lisp [new file with mode: 0644]
version.lisp-expr