Changeset 14575


Ignore:
Timestamp:
Jan 11, 2011, 7:31:12 AM (14 years ago)
Author:
Gary Byers
Message:

Work around Android dynamic linker more.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/level-0/l0-cfm-support.lisp

    r14566 r14575  
    316316(defun open-shared-library-internal (name)
    317317  (let* ((handle (with-cstrs ((name name))
    318                         (ff-call
    319                          (%kernel-import target::kernel-import-GetSharedLibrary)
    320                          :address name
    321                          :unsigned-fullword *dlopen-flags*
    322                          :address)))
     318                   (ff-call
     319                    (%kernel-import target::kernel-import-GetSharedLibrary)
     320                    :address name
     321                    :unsigned-fullword *dlopen-flags*
     322                    :address)))
    323323         (link-map #+(and linux-target (not android-target)) handle
    324324                   #+(or freebsd-target solaris-target)
     
    334334                         (pref p :address)
    335335                         (%null-ptr))))
    336                    #+android-target (pref handle :soinfo.linkmap)))
     336                   #+android-target (if (%null-ptr-p handle)
     337                                      handle
     338                                      (pref handle :soinfo.linkmap))))
    337339    (if (%null-ptr-p link-map)
    338340      (values nil (dlerror))
     
    343345        (%walk-shared-libraries
    344346         #'(lambda (map)
    345              (unless (shared-library-at
    346                       (%int-to-ptr (pref map :link_map.l_addr)))
    347                (let* ((new (shlib-from-map-entry map)))
    348                  (%dlopen-shlib new)))))))))
     347             (let* ((addr (pref map :link_map.l_addr)))
     348               (unless (or (eql addr 0)
     349                           (shared-library-at (%int-to-ptr addr)))
     350                 (let* ((new (shlib-from-map-entry map)))
     351                   (%dlopen-shlib new))))))))))
    349352
    350353)
Note: See TracChangeset for help on using the changeset viewer.