Changeset 14929
- Timestamp:
- Aug 4, 2011, 2:53:54 PM (13 years ago)
- File:
-
- 1 edited
-
trunk/source/level-0/l0-cfm-support.lisp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/level-0/l0-cfm-support.lisp
r14656 r14929 162 162 #+(or linux-target freebsd-target solaris-target) 163 163 (progn 164 165 ;; (pref ptr :link_map.l_addr) is an integer on Linux and a Pointer on FreeBSD 166 ;; This macro returns a pointer on all platforms 167 (defmacro link_map.l_addr (ptr) 168 (let* ((record (%find-foreign-record :link_map)) 169 (field (%find-foreign-record-type-field record :l_addr)) 170 (offset (/ (foreign-record-field-offset field) 8))) 171 `(%get-ptr ,ptr ,offset))) 164 172 165 173 (defun soname-ptr-from-link-map (map) … … 241 249 242 250 (defun shlib-from-map-entry (m) 243 (let* ((base ( %int-to-ptr (pref m :link_map.l_addr))))251 (let* ((base (link_map.l_addr m))) 244 252 ;; On relatively modern Linux systems, this is often NULL. 245 253 ;; I'm not sure what (SELinux ? Pre-binding ? Something else ?) … … 351 359 (%walk-shared-libraries 352 360 #'(lambda (map) 353 (let* ((addr ( pref map :link_map.l_addr)))354 (unless (or ( eql addr 0)355 (shared-library-at (%int-to-ptr addr)))361 (let* ((addr (link_map.l_addr map))) 362 (unless (or (%null-ptr-p addr) 363 (shared-library-at addr)) 356 364 (let* ((new (shlib-from-map-entry map))) 357 365 (%dlopen-shlib new)))))))))) … … 856 864 :unsigned-fullword *dlopen-flags* 857 865 :void) 858 (setf (shlib.base lib) ( %int-to-ptr (pref map :link_map.l_addr))866 (setf (shlib.base lib) (link_map.l_addr map) 859 867 (shlib.pathname lib) (%get-cstring 860 868 (pref map :link_map.l_name)) … … 900 908 (%get-cstring (pref map :link_map.l_name)) 901 909 (shlib.base lib) 902 ( %int-to-ptr (pref map :link_map.l_addr))910 (link_map.l_addr map) 903 911 (shlib.map lib) map 904 912 (shlib.handle lib) handle
Note:
See TracChangeset
for help on using the changeset viewer.
