-(defun foreign-symbol-address-as-integer-or-nil (name &optional datap)
- (declare (ignorable datap))
- (or (find-foreign-symbol-in-table name *static-foreign-symbols*)
- #!+os-provides-dlopen
- (progn
- #-sb-xc-host
- (values #!-linkage-table
- (get-dynamic-foreign-symbol-address name datap)
- #!+linkage-table
- (ensure-foreign-symbol-linkage name datap)
- t))))
-
-(defun foreign-symbol-address-as-integer (name &optional datap)
- (multiple-value-bind (addr sharedp)
- (foreign-symbol-address-as-integer-or-nil name datap)
- (if addr
- (values addr sharedp)
- (error "Unknown foreign symbol: ~S" name))))
+(defun find-foreign-symbol-address (name)
+ "Returns the address of the foreign symbol NAME, or NIL. Does not enter the
+symbol in the linkage table, and never returns an address in the linkage-table."
+ (or (find-foreign-symbol-in-table name *static-foreign-symbols*)
+ (find-dynamic-foreign-symbol-address name)))
+
+(defun foreign-symbol-address (name &optional datap)
+ "Returns the address of the foreign symbol NAME. DATAP must be true if the
+symbol designates a variable (used only on linkage-table platforms). Returns a
+secondary value that is true if DATAP was true and the symbol is a dynamic
+foreign symbol.
+
+On linkage-table ports the returned address is always static: either direct
+address of a static symbol, or the linkage-table address of a dynamic one.
+Dynamic symbols are entered into the linkage-table if they aren't there already.
+
+On non-linkage-table ports signals an error if the symbol isn't found."
+ (let ((static (find-foreign-symbol-in-table name *static-foreign-symbols*)))
+ (if static
+ (values static nil)
+ #!+os-provides-dlopen
+ (progn
+ #-sb-xc-host
+ (values #!-linkage-table
+ (ensure-dynamic-foreign-symbol-address name)
+ #!+linkage-table
+ (ensure-foreign-symbol-linkage name datap)
+ t)
+ #+sb-xc-host
+ (error 'undefined-alien-error :name name))
+ #!-os-provides-dlopen
+ (error 'undefined-alien-error :name name))))