-;;; Initialize the linkage-table. Called during initialization after
-;;; all shared libraries have been reopened.
-(defun linkage-table-reinit ()
- (/show0 "linkage-table-reinit")
- ;; No locking here, as this should be done just once per image initialization,
- ;; before any threads user are spawned.
- (maphash (lambda (name info)
- (let ((datap (linkage-info-datap info))
- (table-address (linkage-info-address info))
- (real-address (get-dynamic-foreign-symbol-address name)))
- (cond (real-address
- (write-linkage-table-entry table-address
- real-address
- datap))
- (t
- (/show0 "oops")
- (cerror "Ignore. Attempts to access this foreign symbol ~
- will lead to badness characterized by ~
- segfaults, and potential corruption."
- "Could not resolve foreign function ~S for ~
- linkage-table." name)))))
- *linkage-info*))
+;;; Update the linkage-table. Called during initialization after all
+;;; shared libraries have been reopened, and after a previously loaded
+;;; shared object is reloaded.
+(defun update-linkage-table ()
+ ;; Doesn't take care of its own locking -- callers are responsible
+ (maphash (lambda (name-and-datap info)
+ (let* ((name (car name-and-datap))
+ (datap (cdr name-and-datap))
+ (table-address (linkage-info-address info))
+ (real-address
+ (ensure-dynamic-foreign-symbol-address name datap)))
+ (aver (and table-address real-address))
+ (write-linkage-table-entry table-address
+ real-address
+ datap)))
+ *linkage-info*))