Distro Makers should ensure there are no problems about 64on32 by checking their software setup for binaries and libraries linked together of mismatching off_t-model. Traditionally that is an administrative task - but I want to propose an automatic model that can help in this area, although not replace the human mind of the packager.
The routines of the testscript provided on the site should be folded into the packager scripts - libraries and binaries are checked already when rolling rpm archives since they are generally picked up from a DESTDIR staging area, and they need to be subject to a chrpath - the sharedlib dependencies are given with paths into the staging area, and these references must be "relocated".
The testscript does read the sharedlib dependencies as well but with a different goal - to 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.
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