;;;; more information.
(cl:in-package :cl-user)
+
+;;; The debugger doesn't have any native knowledge of the interpreter
+(when (eq sb-ext:*evaluator-mode* :interpret)
+ (sb-ext:quit :unix-status 104))
+
\f
;;;; Check that we get debug arglists right.
;; happen to be the two case that I had my nose rubbed in when
;; debugging a GC problem caused by applying %SIMPLE-FUN-ARGLIST to
;; a closure. -- WHN 2001-06-05)
- (t :unknown)))
+ (t
+ #+sb-eval
+ (if (typep fun 'sb-eval::interpreted-function)
+ (sb-eval::interpreted-function-lambda-list fun)
+ :unknown)
+ #-sb-eval
+ :unknown)))
(defun zoop (zeep &key beep)
blurp)
;; Make sure the backtrace isn't stunted in
;; any way. (Depends on running in the main
- ;; thread.)
- (let ((end (last backtrace 2)))
+ ;; thread.) FIXME: On Windows we get two
+ ;; extra foreign frames below regular frames.
+ (let ((end (last backtrace #-win32 2 #+win32 4)))
(unless (equal (caar end)
- (if *show-entry-point-details*
- '(sb-c::tl-xep sb-impl::toplevel-init)
- 'sb-impl::toplevel-init))
+ 'sb-impl::toplevel-init)
(print (list :backtrace-stunted (caar end)))
(setf result nil)))
(return-from outer-handler)))))
;; bug 353: This test fails at least most of the time for x86/linux
;; ca. 0.8.20.16. -- WHN
- (with-test (:name (:undefined-function :bug-356)
- :fails-on '(or (and :x86 :linux) :alpha))
+ (with-test (:name (:undefined-function :bug-353)
+ ;; This used to have fewer :fails-on features pre-0.9.16.38,
+ ;; but it turns out that the bug was just being masked by
+ ;; the presence of the IR1 stepper instrumentation (and
+ ;; is thus again failing now that the instrumentation is
+ ;; no more).
+ :fails-on '(or :x86 :x86-64 :alpha))
(assert (verify-backtrace
(lambda () (test #'not-optimized))
(list *undefined-function-frame*
(list '(flet not-optimized))
(list '(flet test) #'not-optimized))))))
-;;; Division by zero was a common error on PPC. It depended on the
+;;; Division by zero was a common error on PPC. It depended on the
;;; return function either being before INTEGER-/-INTEGER in memory,
-;;; or more than MOST-POSITIVE-FIXNUM bytes ahead. It also depends on
-;;; INTEGER-/-INTEGER calling SIGNED-TRUNCATE. I believe Raymond Toy
+;;; or more than MOST-POSITIVE-FIXNUM bytes ahead. It also depends on
+;;; INTEGER-/-INTEGER calling SIGNED-TRUNCATE. I believe Raymond Toy
;;; says that the Sparc backend (at least for CMUCL) inlines this, so
;;; if SBCL does the same this test is probably not good for the
;;; Sparc.
(list '(flet test) #'not-optimized))))))
(with-test (:name (:throw :no-such-tag)
- :fails-on '(or (and :x86 :linux) :alpha))
+ :fails-on '(or
+ (and :x86 (or :linux :freebsd sunos))
+ :alpha
+ :mips))
(progn
(defun throw-test ()
(throw 'no-such-tag t))
;;; FIXME: This test really should be broken into smaller pieces
(with-test (:name (:backtrace :misc)
- :fails-on '(and :x86 :linux))
+ :fails-on '(and :x86 (or :linux :sunos)))
(macrolet ((with-details (bool &body body)
`(let ((sb-debug:*show-entry-point-details* ,bool))
,@body)))
(defun trace-this ()
'ok)
+(defun trace-fact (n)
+ (if (zerop n)
+ 1
+ (* n (trace-fact (1- n)))))
+
(let ((out (with-output-to-string (*trace-output*)
(trace trace-this)
(assert (eq 'ok (trace-this)))
;;; This is not a WITH-TEST :FAILS-ON PPC DARWIN since there are
;;; suspicions that the breakpoint trace might corrupt the whole image
;;; on that platform.
-#-(and ppc darwin)
-(let ((out (with-output-to-string (*trace-output*)
- (trace trace-this :encapsulate nil)
- (assert (eq 'ok (trace-this)))
- (untrace))))
- (assert (search "TRACE-THIS" out))
- (assert (search "returned OK" out)))
+#-(and (or ppc x86) darwin)
+(with-test (:name (trace :encapsulate nil)
+ :fails-on '(or :ppc :sparc :mips))
+ (let ((out (with-output-to-string (*trace-output*)
+ (trace trace-this :encapsulate nil)
+ (assert (eq 'ok (trace-this)))
+ (untrace))))
+ (assert (search "TRACE-THIS" out))
+ (assert (search "returned OK" out))))
+
+#-(and (or ppc x86) darwin)
+(with-test (:name (trace-recursive :encapsulate nil)
+ :fails-on '(or :ppc :sparc :mips))
+ (let ((out (with-output-to-string (*trace-output*)
+ (trace trace-fact :encapsulate nil)
+ (assert (= 120 (trace-fact 5)))
+ (untrace))))
+ (assert (search "TRACE-FACT" out))
+ (assert (search "returned 1" out))
+ (assert (search "returned 120" out))))
;;;; test infinite error protection
(loop while (sb-thread:thread-alive-p thread)))
(disable-debugger)
+
+(write-line "/debug.impure.lisp done")