X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-sprof%2Fsb-sprof.lisp;h=83a4f5874a86a22729933b7a6aa5da3d11313de2;hb=3fa2feb10ab827fc6cc2a85287e78b6e66b7bf4d;hp=902cefcf8f1f05da629be29964b985338639dd14;hpb=6bce87e4926f16d6dc70a3163a8bbde4303ea61d;p=sbcl.git diff --git a/contrib/sb-sprof/sb-sprof.lisp b/contrib/sb-sprof/sb-sprof.lisp index 902cefc..83a4f58 100644 --- a/contrib/sb-sprof/sb-sprof.lisp +++ b/contrib/sb-sprof/sb-sprof.lisp @@ -363,7 +363,7 @@ profiling") ;; This hardcoded 2 matches the one in gc_find_freeish_pages. It's not ;; really worth genesifying. #+gencgc - (* 2 sb-vm:gencgc-page-size)) + (* 2 sb-vm:gencgc-page-bytes)) (declaim (type number *alloc-region-size*)) (defvar *samples* nil) @@ -562,14 +562,11 @@ profiling") (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))