From: Alastair B. <lis...@us...> - 2010-03-01 13:09:15
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86 In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv20432/src/compiler/x86 Modified Files: insts.lisp macros.lisp Log Message: 1.0.36.9: UD2-BREAKPOINTS feature for x86oid systems * Add new feature UD2-BREAKPOINTS, enabled by default only on x86oid darwin targets. * Use said feature instead of DARWIN for breakpoint trap selection. * Make breakpoints work when using UD2-BREAKPOINTS (tested on x86 and x86-64 linux). * This patch brought to you by lp#309067, which remains valid for three reasons: First, the test case is still disabled. Second, this only fixes for x86oids, not for PPC. And third, I didn't actually test this on a darwin system. Index: insts.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86/insts.lisp,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- insts.lisp 29 Sep 2009 01:24:23 -0000 1.50 +++ insts.lisp 1 Mar 2010 13:09:00 -0000 1.51 @@ -2249,8 +2249,8 @@ ;; Lisp (with (DESCRIBE 'BYTE-IMM-CODE)) than to definitively deduce ;; from first principles whether it's defined in some way that genesis ;; can't grok. - (case #!-darwin (byte-imm-code chunk dstate) - #!+darwin (word-imm-code chunk dstate) + (case #!-ud2-breakpoints (byte-imm-code chunk dstate) + #!+ud2-breakpoints (word-imm-code chunk dstate) (#.error-trap (nt "error trap") (sb!disassem:handle-break-args #'snarf-error-junk stream dstate)) @@ -2268,17 +2268,17 @@ (define-instruction break (segment code) (:declare (type (unsigned-byte 8) code)) - #!-darwin (:printer byte-imm ((op #b11001100)) '(:name :tab code) - :control #'break-control) - #!+darwin (:printer word-imm ((op #b0000101100001111)) '(:name :tab code) - :control #'break-control) + #!-ud2-breakpoints (:printer byte-imm ((op #b11001100)) '(:name :tab code) + :control #'break-control) + #!+ud2-breakpoints (:printer word-imm ((op #b0000101100001111)) '(:name :tab code) + :control #'break-control) (:emitter - #!-darwin (emit-byte segment #b11001100) + #!-ud2-breakpoints (emit-byte segment #b11001100) ;; On darwin, trap handling via SIGTRAP is unreliable, therefore we ;; throw a sigill with 0x0b0f instead and check for this in the ;; SIGILL handler and pass it on to the sigtrap handler if ;; appropriate - #!+darwin (emit-word segment #b0000101100001111) + #!+ud2-breakpoints (emit-word segment #b0000101100001111) (emit-byte segment code))) (define-instruction int (segment number) Index: macros.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86/macros.lisp,v retrieving revision 1.59 retrieving revision 1.60 diff -u -d -r1.59 -r1.60 --- macros.lisp 15 Dec 2009 15:22:23 -0000 1.59 +++ macros.lisp 1 Mar 2010 13:09:00 -0000 1.60 @@ -290,7 +290,7 @@ ;;;; error code (defun emit-error-break (vop kind code values) (assemble () - #!-darwin + #!-ud2-breakpoints (inst int 3) ; i386 breakpoint instruction ;; CLH 20060314 ;; On Darwin, we need to use #x0b0f instead of int3 in order @@ -298,7 +298,7 @@ ;; doesn't seem to be reliably firing SIGTRAP ;; handlers. Hopefully this will be fixed by Apple at a ;; later date. - #!+darwin + #!+ud2-breakpoints (inst word #x0b0f) ;; The return PC points here; note the location for the debugger. (when vop |