index -summary -history -testscript perl / python problems -with callframes -with structures -largefile seeks -broken builds systems -freeBSD/darwin -linux/solaris -64on32 mix -distro makers -win32/other (2) libraries - libc ..(3264)
- zlib ..(-32-)
- gtk2 ..(-64-)
converting -old non-off_t code -going largefile -longlong default -face dualmode -make twinlibs -and defend (it) programming -largefile default -off_t in headers -make export64 -find mismatch -the autowrappers -environ changes -best practice? old library -dualmode renames -the extra function -largefile64_source -glibc headers -libgz example *** new library -dual export -largefiles win32 -compat32 calls -compat32 library -long32 dualmode links -some quotes -sitemap / mpl -large.file Group* -ac-archive Site*
(C) 2002-01-13 Guido U. Draheim |
Distro MakersDistro 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 |