X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Flinkage-table.lisp;h=e9fa8d4ff938e3e17e629f17319a9f808e6ba202;hb=05e28b18c3fc2d697f04fb0393f51ce00147825e;hp=8d122a965c3c32653bffdc3ee4db332876c37f66;hpb=32eb2c37fb2d9b12c5b5f674fe33b77f611120cb;p=sbcl.git diff --git a/src/code/linkage-table.lisp b/src/code/linkage-table.lisp index 8d122a9..e9fa8d4 100644 --- a/src/code/linkage-table.lisp +++ b/src/code/linkage-table.lisp @@ -19,8 +19,6 @@ (in-package "SB!IMPL") -(defvar *shared-object-lock*) ; initialized in foreign-load.lisp - (define-alien-routine arch-write-linkage-table-jmp void (table-address system-area-pointer) (real-address system-area-pointer)) @@ -31,8 +29,6 @@ (defvar *linkage-info* (make-hash-table :test 'equal :synchronized t)) -(defstruct linkage-info datap address) - (defun write-linkage-table-entry (table-address real-address datap) (/show0 "write-linkage-table-entry") (let ((reloc (int-sap table-address)) @@ -55,17 +51,15 @@ (hash-table-count *linkage-info*) name)) (write-linkage-table-entry table-address real-address datap) - (setf (gethash (cons name datap) *linkage-info*) - (make-linkage-info :address table-address :datap datap)))) + (setf (gethash (cons name datap) *linkage-info*) table-address))) ;;; Add a foreign linkage entry if none exists, return the address ;;; in the linkage table. (defun ensure-foreign-symbol-linkage (name datap) (/show0 "ensure-foreign-symbol-linkage") - (with-locked-hash-table (*linkage-info*) - (let ((info (or (gethash (cons name datap) *linkage-info*) - (link-foreign-symbol name datap)))) - (linkage-info-address info)))) + (with-locked-system-table (*linkage-info*) + (or (gethash (cons name datap) *linkage-info*) + (link-foreign-symbol name datap)))) ;;; Update the linkage-table. Called during initialization after all ;;; shared libraries have been reopened, and after a previously loaded @@ -74,10 +68,9 @@ ;;; FIXME: Should figure out how to write only those entries that need ;;; updating. (defun update-linkage-table () - (dohash ((name-and-datap info) *linkage-info* :locked t) + (dohash ((name-and-datap table-address) *linkage-info* :locked t) (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))