X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fforeign.lisp;h=4bf5d7ca69de6ba8c18ab2365973bf0916a672d2;hb=86210c4e406c1b2ff10cc3bac0e71435867db48b;hp=ac0df2330adb2ff3eedace62d777509e0f755345;hpb=e88f9c7fd830938e1261cc424437905fb50179ae;p=sbcl.git diff --git a/src/code/foreign.lisp b/src/code/foreign.lisp index ac0df23..4bf5d7c 100644 --- a/src/code/foreign.lisp +++ b/src/code/foreign.lisp @@ -10,7 +10,7 @@ ;;;; 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 @@ -54,7 +54,7 @@ ;;; 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)) @@ -63,6 +63,14 @@ ;;; 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 @@ -108,12 +116,12 @@ (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. @@ -146,7 +154,7 @@ 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)