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 sprintf@GLIBC_2.0
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 sprintf@GLIBC_2.0 (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 '-usprintf@GLIBC_2.0 -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 sprintf@GLIBC_2.0
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:
pgpFFaYQjXTyH.pgp
Description: PGP signature