From: Nikodemus S. <de...@us...> - 2009-05-17 18:01:09
|
Update of /cvsroot/sbcl/sbcl/contrib/sb-sprof In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv8381/contrib/sb-sprof Modified Files: sb-sprof.lisp Log Message: 1.0.28.56: more robust stack frame pointer checking in SB-SPROF Foreign code might not have a frame pointer like we expect. Use CONTROL-STACK-POINTER-VALID-P to check it. Patch by Bart Botta. Index: sb-sprof.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/contrib/sb-sprof/sb-sprof.lisp,v retrieving revision 1.25 retrieving revision 1.26 diff -u -d -r1.25 -r1.26 --- sb-sprof.lisp 13 Dec 2008 10:52:07 -0000 1.25 +++ sb-sprof.lisp 17 May 2009 18:01:01 -0000 1.26 @@ -562,14 +562,11 @@ (with-alien ((scp (* os-context-t) :local scp)) (let* ((pc-ptr (sb-vm:context-pc scp)) (fp (sb-vm::context-register scp #.sb-vm::ebp-offset))) - ;; For some reason completely bogus small values for the - ;; frame pointer are returned every now and then, leading - ;; to segfaults. Try to avoid these cases. - ;; - ;; FIXME: Do a more thorough sanity check on ebp, or figure - ;; out why this is happening. - ;; -- JES, 2005-01-11 - (when (< fp 4096) + ;; foreign code might not have a useful frame + ;; pointer in ebp/rbp, so make sure it looks + ;; reasonable before walking the stack + (unless (sb-di::control-stack-pointer-valid-p (sb-sys:int-sap fp)) + (record samples pc-ptr) (return-from sigprof-handler nil)) (incf (samples-trace-count samples)) (pushnew self (samples-sampled-threads samples)) |