Package: mklibs
Version: 0.1.24
tags: d-i

Test runs using current daily builds for sparc and alpha are showing the 
following error:
   udevd: relocation error: udevd: symbol snprintf, version GLIBC_2.0 not
          defined in file libc.so.6 with link time reference

Turns out that on some arches, libc contains two versions of snprintf:
$ readelf -a /lib/libc.so.6 | grep " sprintf@"
   170: 0011cf60    48 FUNC    GLOBAL DEFAULT   10 [EMAIL PROTECTED]
   171: 00053df8    48 FUNC    GLOBAL DEFAULT   10 sprintf@@GLIBC_2.4

And udev is still using the old one:
$ readelf -a /sbin/udevd | grep " sprintf@"
   110: 0002e600    48 FUNC    GLOBAL DEFAULT  UND [EMAIL PROTECTED] (2)

However, after library stripping, only the new version is included:
$ readelf -a tmp/sparc64_netboot-2.6/tree/lib/libc.so.6 | grep " sprintf@"
   933: 0003627c    48 FUNC    GLOBAL DEFAULT   10 sprintf@@GLIBC_2.4


It turns out that this can be resolved by including the version when 
calling gcc, i.e. using '[EMAIL PROTECTED] -usprintf@@GLIBC_2.4'.

After manually stripping libc using that as parameters, I got:
$ readelf -a libc.so.6-stripped | grep " sprintf@"
   724: 0000d614    48 FUNC    GLOBAL DEFAULT   10 [EMAIL PROTECTED]
   725: 00019d94    48 FUNC    GLOBAL DEFAULT   10 sprintf@@GLIBC_2.4

Note that binNMUs for udev have been scheduled to resolve this issue for 
affected architectures, but maybe a structural solution for this issue 
should be implemented in mklibs.

Attachment: pgpdSLVaFoHEy.pgp
Description: PGP signature

Reply via email to