Changeset 10048 for trunk/source/level-0/l0-cfm-support.lisp
- Timestamp:
- Jul 16, 2008, 2:22:02 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/level-0/l0-cfm-support.lisp
r9917 r10048 44 44 (istruct-typep x 'external-entry-point)) 45 45 46 ;;; On both Linux and FreeBSD, RTLD_NEXT and RTLD_DEFAULT behave 47 ;;; the same way wrt symbols defined somewhere other than the lisp 48 ;;; kernel. On Solaris, RTLD_DEFAULT will return the address of 49 ;;; an imported symbol's procedure linkage table entry if the symbol 50 ;;; has a plt entry (e.g., if it happens to be referenced by the 51 ;;; lisp kernel.) *RTLD-NEXT* is therefore a slightly better 52 ;;; default; we've traditionaly used *RTLD-DEFAULT*. 46 53 (defvar *rtld-next*) 47 54 (defvar *rtld-default*) … … 50 57 #-(or linux-target darwin-target) -2)) 51 58 52 #+(or linux-target freebsd-target )59 #+(or linux-target freebsd-target solaris-target) 53 60 (progn 54 61 … … 99 106 (defvar *shared-libraries* nil) 100 107 101 #+(or linux-target freebsd-target )108 #+(or linux-target freebsd-target solaris-target) 102 109 (progn 103 110 … … 137 144 dynamic-entries 138 145 target::node-size))) 139 #+ freebsd-target146 #+(or freebsd-target solaris-target) 140 147 (%inc-ptr (pref map :link_map.l_addr) disp) 141 #- freebsd-target148 #-(or freebsd-target solaris-target) 142 149 (%int-to-ptr 143 150 (if (< disp 0) … … 432 439 (defun ensure-open-shlib (c force) 433 440 (if (or (shlib.map c) (not force)) 434 *rtld- default*441 *rtld-next* 435 442 (error "Shared library not open: ~s" (shlib.soname c)))) 436 443 … … 438 445 (if c 439 446 (ensure-open-shlib c force) 440 *rtld- default*447 *rtld-next* 441 448 )) 442 449 … … 454 461 ;;; linkers don't quite get the concept ...) 455 462 456 (defun foreign-symbol-entry (name &optional (handle *rtld- default*))463 (defun foreign-symbol-entry (name &optional (handle *rtld-next*)) 457 464 "Try to resolve the address of the foreign symbol name. If successful, 458 465 return a fixnum representation of that address, else return NIL." … … 476 483 (defvar *statically-linked* nil) 477 484 478 #+(or linux-target freebsd-target )485 #+(or linux-target freebsd-target solaris-target) 479 486 (progn 480 487 … … 581 588 ) 582 589 583 #-(or linux-target darwin-target freebsd-target )590 #-(or linux-target darwin-target freebsd-target solaris-target) 584 591 (defun shlib-containing-entry (entry &optional name) 585 592 (declare (ignore entry name)) … … 603 610 604 611 605 (defun foreign-symbol-address (name &optional (map *rtld- default*))612 (defun foreign-symbol-address (name &optional (map *rtld-next*)) 606 613 "Try to resolve the address of the foreign symbol name. If successful, 607 614 return that address encapsulated in a MACPTR, else returns NIL." … … 630 637 eep)) 631 638 639 640 632 641 (defun load-fv (name type) 633 642 (let* ((fv (or (gethash name (fvs)) (setf (gethash name *fvs*) (%cons-foreign-variable name type))))) … … 640 649 641 650 642 #+(or linux-target freebsd-target )651 #+(or linux-target freebsd-target solaris-target) 643 652 (progn 644 653 ;;; It's assumed that the set of libraries that the OS has open … … 728 737 (%revive-macptr *rtld-next*) 729 738 (%revive-macptr *rtld-default*) 730 #+(or linux-target freebsd-target )739 #+(or linux-target freebsd-target solaris-target) 731 740 (unless *statically-linked* 732 741 (setq *dladdr-entry* (foreign-symbol-entry "dladdr"))
Note: See TracChangeset
for help on using the changeset viewer.