Changeset 7590


Ignore:
Timestamp:
Nov 3, 2007, 7:27:29 PM (12 years ago)
Author:
gb
Message:

crude hack to enable running on kernel 2.6.23

File:
1 edited

Legend:

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

    r6484 r7590  
    137137                 (dynamic-entries (pref map :link_map.l_ld)))
    138138    (let* ((soname-offset nil))
    139       ;;; Walk over the entries in the file's dynamic segment; the
    140       ;;; last such entry will have a tag of #$DT_NULL.  Note the
    141       ;;; (loaded,on Linux; relative to link_map.l_addr on FreeBSD)
    142       ;;; address of the dynamic string table and the offset of the
    143       ;;; #$DT_SONAME string in that string table.
     139      ;; Walk over the entries in the file's dynamic segment; the
     140      ;; last such entry will have a tag of #$DT_NULL.  Note the
     141      ;; (loaded,on Linux; relative to link_map.l_addr on FreeBSD)
     142      ;; address of the dynamic string table and the offset of the
     143      ;; #$DT_SONAME string in that string table.
     144      ;; Actually, the above isn't quite right; there seem to
     145      ;; be cases (involving vDSO) where the address of a library's
     146      ;; dynamic string table is expressed as an offset relative
     147      ;; to link_map.l_addr as well.
    144148      (loop
    145149          (case #+32-bit-target (pref dynamic-entries :<E>lf32_<D>yn.d_tag)
     
    154158            (#. #$DT_STRTAB
    155159                (%setf-macptr dyn-strings
    156                               #+32-bit-target
    157                               (pref dynamic-entries
    158                                     :<E>lf32_<D>yn.d_un.d_ptr)
    159                               #+(and 64-bit-target linux-target)
    160                               (pref dynamic-entries
    161                                     :<E>lf64_<D>yn.d_un.d_ptr)
    162                               #+(and 64-bit-target freebsd-target)
    163                               (%inc-ptr (pref map :link_map.l_addr)
    164                                         (pref dynamic-entries
    165                                               :<E>lf64_<D>yn.d_un.d_val)))))
     160                              ;; Try to guess whether we're dealing
     161                              ;; with a displacement or with an
     162                              ;; absolute address.  There may be
     163                              ;; a better way to determine this,
     164                              ;; but for now we assume that absolute
     165                              ;; addresses aren't negative and that
     166                              ;; displacements are.
     167                              (%int-to-ptr
     168                               (let* ((disp (%get-signed-natural
     169                                             dynamic-entries
     170                                             target::node-size)))
     171                                 
     172                                 (if (< disp 0)
     173                                   (+ disp (pref map :link_map.l_addr))
     174                                   disp))))))
    166175          (%setf-macptr dynamic-entries
    167176                        (%inc-ptr dynamic-entries
Note: See TracChangeset for help on using the changeset viewer.