projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.8.21.50:
[sbcl.git]
/
src
/
code
/
foreign-load.lisp
diff --git
a/src/code/foreign-load.lisp
b/src/code/foreign-load.lisp
index
d8723f2
..
95a9ecf
100644
(file)
--- a/
src/code/foreign-load.lisp
+++ b/
src/code/foreign-load.lisp
@@
-75,7
+75,7
@@
(setf dlerror (dlerror)
(shared-object-sap obj) nil)))
(when dlerror
(setf dlerror (dlerror)
(shared-object-sap obj) nil)))
(when dlerror
- (cerror dlerror))))
+ (cerror "Ignore the error and continue anyway" "dlerror returned an error: ~S" dlerror))))
(defun load-shared-object (file)
"Load a shared library/dynamic shared object file/general dlopenable
(defun load-shared-object (file)
"Load a shared library/dynamic shared object file/general dlopenable
@@
-141,18
+141,21
@@
SB-EXT:SAVE-LISP-AND-DIE for details."
(let ((symbols ())
(undefineds ()))
(let ((symbols ())
(undefineds ()))
- (defun get-dynamic-foreign-symbol-address (symbol)
+ (defun get-dynamic-foreign-symbol-address (symbol &optional datap)
(dlerror) ; clear old errors
(unless *runtime-dlhandle*
(bug "Cannot resolve foreign symbol: lost *runtime-dlhandle*"))
(dlerror) ; clear old errors
(unless *runtime-dlhandle*
(bug "Cannot resolve foreign symbol: lost *runtime-dlhandle*"))
- (let* ((result (sap-int (dlsym *runtime-dlhandle* symbol)))
+ ;; On real ELF & dlsym platforms the EXTERN-ALIEN-NAME is a no-op,
+ ;; but on platforms where dlsym is simulated we use the mangled name.
+ (let* ((extern (extern-alien-name symbol))
+ (result (sap-int (dlsym *runtime-dlhandle* extern)))
(err (dlerror))
(addr (if (or (not (zerop result)) (not err))
result
(dolist (obj *shared-objects*)
(let ((sap (shared-object-sap obj)))
(when sap
(err (dlerror))
(addr (if (or (not (zerop result)) (not err))
result
(dolist (obj *shared-objects*)
(let ((sap (shared-object-sap obj)))
(when sap
- (setf result (sap-int (dlsym sap symbol))
+ (setf result (sap-int (dlsym sap extern))
err (dlerror))
(when (or (not (zerop result)) (not err))
(return result))))))))
err (dlerror))
(when (or (not (zerop result)) (not err))
(return result))))))))
@@
-160,7
+163,10
@@
SB-EXT:SAVE-LISP-AND-DIE for details."
(style-warn "Undefined alien: ~S" symbol)
(pushnew symbol undefineds :test #'equal)
(remove symbol symbols :test #'equal)
(style-warn "Undefined alien: ~S" symbol)
(pushnew symbol undefineds :test #'equal)
(remove symbol symbols :test #'equal)
- undefined-alien-address)
+ (if datap
+ undefined-alien-address
+ (foreign-symbol-address-as-integer
+ "undefined_alien_function")))
(addr
(pushnew symbol symbols :test #'equal)
(remove symbol undefineds :test #'equal)
(addr
(pushnew symbol symbols :test #'equal)
(remove symbol undefineds :test #'equal)