From: Rudi Schlatte Date: Tue, 14 Mar 2006 12:27:46 +0000 (+0000) Subject: 0.9.10.29 X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=76237af144bef52bc2e391c90970a1747cdf0a9e;p=sbcl.git 0.9.10.29 Linkage tables on win32 ... heuristically choose a memory range ("does not break on my two systems, let's ship it") ... added some leftovers to cleanup.sh ... also #!+sb-doc-conditionalize docstrings in run-program.lisp --- diff --git a/clean.sh b/clean.sh index 6a6d5ba..5f61242 100755 --- a/clean.sh +++ b/clean.sh @@ -62,7 +62,7 @@ done # The system doc sources are mostly texinfo, plus various odds # and ends like docstrings embedded in .lisp sources; any HTML is # automatically-generated output. -# depend +# depend, *.d # made by "make depend" (or "gmake depend" or some such thing) # *.lisp-obj, *.fasl, *.x86f, *.axpf, *.lbytef, *.lib # typical extensions for fasl files (not just from SBCL, but @@ -84,6 +84,7 @@ find . \( \ -name '?*.axpf' -o \ -name '?*.lbytef' -o \ -name '?*.fasl' -o \ + -name '?*.FASL' -o \ -name 'core' -o \ -name '?*.core' -o \ -name '*.map' -o \ @@ -96,6 +97,7 @@ find . \( \ -name '*.lisp-temp' -o \ -name '*.o' -o \ -name '*.so' -o \ + -name '*.d' -o \ -name 'a.out' -o \ -name 'sbcl' -o \ -name 'sbcl.h' -o \ diff --git a/make-config.sh b/make-config.sh index c8e485b..b59a0fd 100644 --- a/make-config.sh +++ b/make-config.sh @@ -255,7 +255,7 @@ cd $original_dir if [ "$sbcl_arch" = "x86" ]; then printf ' :gencgc :stack-grows-downward-not-upward :c-stack-is-control-stack' >> $ltf printf ' :stack-allocatable-closures :alien-callbacks' >> $ltf - if [ "$sbcl_os" = "linux" ] || [ "$sbcl_os" = "freebsd" ] || [ "$sbcl_os" = "netbsd" ] || [ "$sbcl_os" = "sunos" ] || [ "$sbcl_os" = "darwin" ]; then + if [ "$sbcl_os" = "linux" ] || [ "$sbcl_os" = "freebsd" ] || [ "$sbcl_os" = "netbsd" ] || [ "$sbcl_os" = "sunos" ] || [ "$sbcl_os" = "darwin" ] || [ "$sbcl_os" = "win32" ]; then printf ' :linkage-table' >> $ltf fi if [ "$sbcl_os" = "win32" ]; then diff --git a/src/code/run-program.lisp b/src/code/run-program.lisp index f24829c..99a7597 100644 --- a/src/code/run-program.lisp +++ b/src/code/run-program.lisp @@ -98,6 +98,7 @@ (rusage sb-alien:int)) (defun wait3 (&optional do-not-hang check-for-stopped) + #!+sb-doc "Return any available status information on child process. " (multiple-value-bind (pid status) (c-wait3 (logior (if do-not-hang @@ -136,6 +137,7 @@ ;;;; process control stuff (defvar *active-processes* nil + #!+sb-doc "List of process structures for all active processes.") (defvar *active-processes-lock* @@ -172,43 +174,55 @@ (process-status process))) process) +#!+sb-doc (setf (documentation 'process-p 'function) "T if OBJECT is a PROCESS, NIL otherwise.") +#!+sb-doc (setf (documentation 'process-pid 'function) "The pid of the child process.") (defun process-status (process) + #!+sb-doc "Return the current status of PROCESS. The result is one of :RUNNING, :STOPPED, :EXITED, or :SIGNALED." (get-processes-status-changes) (process-%status process)) +#!+sb-doc (setf (documentation 'process-exit-code 'function) "The exit code or the signal of a stopped process.") +#!+sb-doc (setf (documentation 'process-core-dumped 'function) "T if a core image was dumped by the process.") +#!+sb-doc (setf (documentation 'process-pty 'function) "The pty stream of the process or NIL.") +#!+sb-doc (setf (documentation 'process-input 'function) "The input stream of the process or NIL.") +#!+sb-doc (setf (documentation 'process-output 'function) "The output stream of the process or NIL.") +#!+sb-doc (setf (documentation 'process-error 'function) "The error stream of the process or NIL.") +#!+sb-doc (setf (documentation 'process-status-hook 'function) "A function that is called when PROCESS changes its status. The function is called with PROCESS as its only argument.") +#!+sb-doc (setf (documentation 'process-plist 'function) "A place for clients to stash things.") (defun process-wait (process &optional check-for-stopped) + #!+sb-doc "Wait for PROCESS to quit running for some reason. When CHECK-FOR-STOPPED is T, also returns when PROCESS is stopped. Returns PROCESS." @@ -239,6 +253,7 @@ The function is called with PROCESS as its only argument.") (process-pid proc)) (defun process-kill (process signal &optional (whom :pid)) + #!+sb-doc "Hand SIGNAL to PROCESS. If WHOM is :PID, use the kill Unix system call. If WHOM is :PROCESS-GROUP, use the killpg Unix system call. If WHOM is :PTY-PROCESS-GROUP deliver the signal to whichever process group is @@ -275,6 +290,7 @@ The function is called with PROCESS as its only argument.") t))))) (defun process-alive-p (process) + #!+sb-doc "Return T if PROCESS is still alive, NIL otherwise." (let ((status (process-status process))) (if (or (eq status :running) @@ -283,6 +299,7 @@ The function is called with PROCESS as its only argument.") nil))) (defun process-close (process) + #!+sb-doc "Close all streams connected to PROCESS and stop maintaining the status slot." (macrolet ((frob (stream abort) `(when ,stream (close ,stream :abort ,abort)))) @@ -440,7 +457,9 @@ The function is called with PROCESS as its only argument.") (defun find-executable-in-search-path (pathname &optional (search-path (posix-getenv "PATH"))) - "Find the first executable file matching PATHNAME in any of the colon-separated list of pathnames SEARCH-PATH" + #!+sb-doc + "Find the first executable file matching PATHNAME in any of the +colon-separated list of pathnames SEARCH-PATH" (loop for end = (position #\: search-path :start (if end (1+ end) 0)) and start = 0 then (and end (1+ end)) while start @@ -513,6 +532,7 @@ The function is called with PROCESS as its only argument.") (error :output) (if-error-exists :error) status-hook) + #!+sb-doc "RUN-PROGRAM creates a new Unix process running the Unix program found in the file specified by the PROGRAM argument. ARGS are the standard arguments that can be passed to a Unix program. For no arguments, use NIL diff --git a/src/compiler/x86/parms.lisp b/src/compiler/x86/parms.lisp index f1043a6..3f9952d 100644 --- a/src/compiler/x86/parms.lisp +++ b/src/compiler/x86/parms.lisp @@ -161,7 +161,10 @@ (def!constant static-space-end #x07fff000) (def!constant dynamic-space-start #x09000000) - (def!constant dynamic-space-end #x29000000)) + (def!constant dynamic-space-end #x29000000) + + (def!constant linkage-table-space-start #x30000000) + (def!constant linkage-table-space-end #x40000000)) #!+linux (progn diff --git a/src/runtime/win32-os.c b/src/runtime/win32-os.c index 8ec02db..4af0f79 100644 --- a/src/runtime/win32-os.c +++ b/src/runtime/win32-os.c @@ -414,7 +414,12 @@ EXCEPTION_DISPOSITION handle_exception(EXCEPTION_RECORD *exception_record, return sigtrap_emulator(context, exception_frame); } else if (exception_record->ExceptionCode == EXCEPTION_ACCESS_VIOLATION && - is_valid_lisp_addr(fault_address)) { + (is_valid_lisp_addr(fault_address) || + /* the linkage table does not contain valid lisp + * objects, but is also committed on-demand here + */ + in_range_p(fault_address, LINKAGE_TABLE_SPACE_START, + LINKAGE_TABLE_SPACE_END))) { /* Pick off GC-related memory fault next. */ MEMORY_BASIC_INFORMATION mem_info; diff --git a/version.lisp-expr b/version.lisp-expr index 13c8118..44013b0 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.9.10.28" +"0.9.10.29"