"~S is unsupported as of SBCL 0.8.13. Please use LOAD-SHARED-OBJECT."
(load-1-foreign))
-#!-win32
(progn
(define-alien-variable undefined-alien-address unsigned-long)
(defvar *runtime-dlhandle*))
(setf (shared-object-dont-save obj) dont-save)
;; FIXME: Why doesn's dlopen-or-lose on already loaded stuff work on
;; Windows?
+ ;;
+ ;; Kovalenko 2010-11-24: It would work, but it does nothing
+ ;; useful on Windows: library reference count is increased
+ ;; after each LoadLibrary, making it harder to unload it, and
+ ;; that's all the effect. Also, equal pathnames on Windows
+ ;; always designate _exactly the same library image_; Unix
+ ;; tricks like deleting an open library and replacing it with
+ ;; another version just don't work here.
#!-win32
(dlopen-or-lose obj)
#!+win32
;; FIXME: Why doesn't the linkage table work on Windows? (Or maybe it
;; does and this can be just #!+linkage-table?) Note: remember to change
;; FOREIGN-DEINIT as well then!
- #!+(and linkage-table (not win32))
+ ;;
+ ;; Kovalenko 2010-11-24: I think so. Alien _data_ references
+ ;; are the only thing on win32 that is even slightly
+ ;; problematic. Handle function references in the same way as
+ ;; other linkage-table platforms is easy.
+ ;;
+ #!+linkage-table
(when (or old (undefined-foreign-symbols-p))
(update-linkage-table))))
pathname))
(when old
#!-hpux (dlclose-or-lose old)
(setf *shared-objects* (remove old *shared-objects*))
- #!+(and linkage-table (not win32))
+ #!+linkage-table
(update-linkage-table))))))
(defun try-reopen-shared-object (obj)
;;; initialization.
(defun reopen-shared-objects ()
;; Ensure that the runtime is open
- #!-win32
(setf *runtime-dlhandle* (dlopen-or-lose))
;; Reopen stuff.
(setf *shared-objects*
(unless (shared-object-dont-save obj)
(push obj saved)))
(setf *shared-objects* saved))
- #!-(or win32 hpux)
+ #!-hpux
(dlclose-or-lose))
(let ((symbols (make-hash-table :test #'equal))
is never in the linkage-table."
(declare (ignorable datap))
(let ((addr (find-dynamic-foreign-symbol-address symbol)))
- (cond #!-(and linkage-table (not win32))
+ (cond #!-linkage-table
((not addr)
(error 'undefined-alien-error :name symbol))
- #!+(and linkage-table (not win32))
+ #!+linkage-table
((not addr)
(style-warn 'sb!kernel:undefined-alien-style-warning
:symbol symbol)
(plusp (hash-table-count symbols)))
(defun list-dynamic-foreign-symbols ()
(loop for symbol being each hash-key in symbols
- collect symbol)))
-
+ collect symbol))
+ (defun list-undefined-foreign-symbols ()
+ (loop for symbol being each hash-key in undefineds
+ collect symbol)))