;;;; provided with absolutely no warranty. See the COPYING and CREDITS
;;;; files for more information.
-(in-package "SB-SYS") ; (SB-SYS, not SB!SYS, since we're built in warm load.)
+(in-package "SB-ALIEN") ; (SB-ALIEN, not SB!ALIEN, since we're in warm load.)
(defun pick-temporary-file-name (&optional
;; KLUDGE: There are various security
;;; placeholder implementation is overwritten by a subsequent real
;;; implementation.)
;;;
-;;; You may want to use sb-sys:foreign-symbol-address instead of
+;;; You may want to use SB-SYS:FOREIGN-SYMBOL-ADDRESS instead of
;;; calling this directly; see code/target-load.lisp.
(defun get-dynamic-foreign-symbol-address (symbol)
(declare (type simple-string symbol) (ignore symbol))
;;; dlsym()-based implementation of GET-DYNAMIC-FOREIGN-SYMBOL-ADDRESS
;;; and functions (e.g. LOAD-FOREIGN) which affect it. This should
;;; work on any ELF system with dlopen(3) and dlsym(3)
+#-(or linux FreeBSD)
+(macrolet ((define-unsupported-fun (fun-name)
+ `(defun ,fun-name (&rest rest)
+ "unsupported on this system"
+ (declare (ignore rest))
+ (error 'unsupported-operator :name ',fun-name))))
+ (define-unsupported-fun load-1-foreign)
+ (define-unsupported-fun load-foreign))
#+(or linux FreeBSD)
(progn
(defvar *dso-linker-options* '("-G" "-o"))
-(sb-alien:def-alien-routine dlopen system-area-pointer
- (file sb-c-call:c-string) (mode sb-c-call:int))
-(sb-alien:def-alien-routine dlsym system-area-pointer
+(sb-alien:define-alien-routine dlopen system-area-pointer
+ (file sb-alien:c-string) (mode sb-alien:int))
+(sb-alien:define-alien-routine dlsym system-area-pointer
(lib system-area-pointer)
- (name sb-c-call:c-string))
-(sb-alien:def-alien-routine dlerror sb-c-call:c-string)
+ (name sb-alien:c-string))
+(sb-alien:define-alien-routine dlerror sb-alien:c-string)
;;; Ensure that we've opened our own binary so we can dynamically resolve
;;; symbols in the C runtime.
ld -shared -o /tmp/ffi-test.so /tmp/ffi-test.o
then in SBCL do this:
(LOAD-1-FOREIGN \"/tmp/ffi-test.so\")
- (DEF-ALIEN-ROUTINE SUMMISH INT (X INT) (Y INT))
+ (DEFINE-ALIEN-ROUTINE SUMMISH INT (X INT) (Y INT))
Now running (SUMMISH 10 20) should return 31.
"
(ensure-runtime-symbol-table-opened)