|go text: || - index - problems - systems - libraries - converting - [ programming ] - old library - new library - links -
||topics: || - largefile default - off_t in headers - make export64 - [ find mismatch ] - the autowrappers - environ changes - best practice? - Find Mismatch

Find Mismatch in 64on32

The testscript provided on this site will read a binary or library and check for mismatching dependencies with respect to 64on32 in largefile-sensitive systems. It will classify each binary and dependency-lib by looking for the symbols from the transitional 64bit-off_t API in the largefile specification. If we see "open" in the list of dynamic symbols then it is "-32-", and if we see "open64" then it is "-64-".

Apart from these simple ones, there exist dualmode libraries called "3264" and those which don't seem to need any of the problematic callbacks which are marked as "-??-" by the testript. From the combinations only three are invalid:

          3264>>-32- -64->>-32- and -32->>-64- ...

in other words: dualmode(largefile) libraries having dependencies on non-largefile libraries, largefile libraries and binaries having dependencies on non-largefile libraries, and finally the inverse of non-largefile binaries linking with largefile-libraries.

The script is smart enough to auto-dectect any 3264 that you have just made up - these will have imported the off_t as an 64bit-off_t entity but you do export both simple calls and calls64. That can be tested actually.

A probable result of running the testscript might look like this:

$ perl off_t_problem.pl /usr/lib/*.so
   
 -32- /lib/libnsl.so.1                      open.. fopen..
 -32- /lib/libpopt.so.0                     open.. lseek..
 -32- /lib/libutil.so.1                     open..
 -32- /lib/libz.so.1                        fopen..
 -32- /usr/lib/libORBit-2.so.0              open.. fopen..
 -64- /usr/lib/libavcodec-0.4.6.so          fopen64
 -64- /usr/lib/libavcodec.so                fopen64
 -32- /usr/lib/libbonobo-activation.so.4    open.. fopen..
 -32- /usr/lib/libcrypto.so.0               fopen.. lseek..
 -32- /usr/lib/libgconf-2.so.4              open.. fopen..
 -32- /usr/lib/libglib-1.2.so.0             lseek..
 -64- /usr/lib/libgnomevfs-2.so             fopen64 statvfs64
 3264 /usr/lib/libgstreamer.so              open64 fopen64 g_param_spec_int64 
 3264 /usr/lib/libgstreamer.so                             g_param_spec_int..
 -64- /usr/lib/libmysqlclient.so            open64 fopen64 fseeko64 ftello64 
 -64- /usr/lib/libmysqlclient_r.so          open64 fopen64 fseeko64 ftello64 
 3264 /usr/lib/libopenquicktime.so          fopen64 fseeko64 
                                            quicktime_atom_read_size64
 3264 /usr/lib/libopenquicktime.so          quicktime_atom_read_size.. 
 -64- /usr/lib/libpython2.2.so              open64 fopen64 fseeko64 ftello64
 -32- /usr/lib/libxml2.so.2                 open.. fopen..

/usr/lib/libavcodec-0.4.6.so         -64->>-32- /lib/libz.so.1
/usr/lib/libavcodec.so               -64->>-32- /lib/libz.so.1
/usr/lib/libgnomevfs-2.so            -64->>-32- /usr/lib/libORBit-2.so.0
/usr/lib/libgnomevfs-2.so            -64->>-32- /usr/lib/libbonobo-activation.so.4
/usr/lib/libgnomevfs-2.so            -64->>-32- /usr/lib/libcrypto.so.0
/usr/lib/libgnomevfs-2.so            -64->>-32- /usr/lib/libgconf-2.so.4
/usr/lib/libgnomevfs-2.so            -64->>-32- /lib/libpopt.so.0
/usr/lib/libgnomevfs-2.so            -64->>-32- /usr/lib/libxml2.so.2
/usr/lib/libgnomevfs-2.so            -64->>-32- /lib/libz.so.1
/usr/lib/libgstreamer.so             3264>>-32- /lib/libpopt.so.0
/usr/lib/libgstreamer.so             3264>>-32- /usr/lib/libxml2.so.2
/usr/lib/libgstreamer.so             3264>>-32- /lib/libz.so.1
/usr/lib/libmysqlclient.so           -64->>-32- /lib/libnsl.so.1
/usr/lib/libmysqlclient.so           -64->>-32- /lib/libz.so.1
/usr/lib/libmysqlclient_r.so         -64->>-32- /lib/libnsl.so.1
/usr/lib/libmysqlclient_r.so         -64->>-32- /lib/libz.so.1
/usr/lib/libopenquicktime.so         3264>>-32- /usr/lib/libglib-1.2.so.0
/usr/lib/libopenquicktime.so         3264>>-32- /lib/libz.so.1
/usr/lib/libpython2.2.so             -64->>-32- /lib/libutil.so.1