On Sun, May 17, 2009 at 11:30:51AM +0400, Afanasov Dmitry wrote: > On Sun, May 17, 2009 at 10:12:09AM +0400, Alexey Tourbin wrote: > > On Sat, May 16, 2009 at 10:34:22PM +0400, Girar Builder robot wrote: > > [at@altair ~]$ rpmpeek /ALT/archive/Sisyphus/2009/05/01/files/x86_64/RPMS/libalsa-1.0.19-alt1.x86_64.rpm readelf -aW ./usr/lib64/libasound.so.2 |grep -w snd_pcm_hw_params_get_channels > > 231: 00000000000519d0 31 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_channels@ALSA_0.9 > > 233: 00000000000519c0 15 FUNC GLOBAL DEFAULT 12 snd_pcm_hw_params_get_channels@@ALSA_0.9.0rc4 > > [at@altair ~]$ rpmpeek /ALT/Sisyphus/files/x86_64/RPMS/libalsa-1.0.20-alt1.x86_64.rpm readelf -aW ./usr/lib64/libasound.so.2 |grep -w snd_pcm_hw_params_get_channels > > 493: 0000000000051080 15 FUNC WEAK DEFAULT 12 snd_pcm_hw_params_get_channels@@ALSA_0.9.0rc4 > > [at@altair ~]$ > > > > Похоже, что это связано не с изменениями в libalsa, а с изменениями > > в binutils. > причем: > 1. только на x86_64 > 2. лечится добавлением -ldl -lasound -lm Мне представляется, что проблема гораздо серьезнее, так что не надо её лечить "по месту". Проблема состоит в том, что нарушается сопоставление между названиями ABI интерфейсов и входящими в них символами. Такие нарушения сейчас в явном виде никак не отлавливаются, и это может очень плохо кончиться. Собственно, это уже плохо кончилось: в сизифе появились пакеты со сломанным ABI. Вот ещё один такой пакет. $ hsh --no-stuff --init && hsh-install bluez-alsa ... <13>May 17 12:43:06 rpmi: libalsa-1.0.20-alt1 installed <13>May 17 12:43:06 rpmi: libusb-1.0-alt2 installed <13>May 17 12:43:06 rpmi: libusb-compat-0.1.0-alt2 installed <13>May 17 12:43:06 rpmi: libnl-1.1-alt2 installed <13>May 17 12:43:06 rpmi: libdbus-1.2.14-alt1 installed <13>May 17 12:43:06 rpmi: setserial-1:2.17-alt1 installed <13>May 17 12:43:06 rpmi: libbluez4-4.39-alt1 installed <13>May 17 12:43:06 rpmi: bluez-4.39-alt1 installed <13>May 17 12:43:06 rpmi: bluez-alsa-4.39-alt1 installed $ hsh-run -- ldd -r /usr/lib64/alsa-lib/libasound_module_pcm_bluetooth.so symbol snd_pcm_sw_params_get_start_threshold, version ALSA_0.9.0rc4 not defined in file libasound.so.2 with link time reference (/usr/lib64/alsa-lib/libasound_module_pcm_bluetooth.so) libasound.so.2 => /usr/lib64/libasound.so.2 (0x00002ae319e2c000) librt.so.1 => /lib64/librt.so.1 (0x00002ae31a110000) libc.so.6 => /lib64/libc.so.6 (0x00002ae31a318000) libm.so.6 => /lib64/libm.so.6 (0x00002ae31a665000) libdl.so.2 => /lib64/libdl.so.2 (0x00002ae31a8e7000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae31aaeb000) /lib64/ld-linux-x86-64.so.2 (0x00002ae3199f9000) $ Нужно сделать следующее: 1) Попытаться быстро понять, что именно изменилось в binutils (или где), и какие пакеты пострадают в результате этих изменений. 2) Переделать проверку bad_elf_symbols, чтобы она дополнительно проверяля совпадение интерфейсов, если у требуемого символа есть требование на интерфейс. Я уже очень давно собираюсь этим заняться, но никак не могу понять, какой backend лучше всего использовать. Грубо говоря, мне нужно сдампить секцию .dynsym со всякой дополнительной информацией. Точнее, к каждому символу мне нужно всего две информации. Во-первых, является ли этот символ FUNC или OBJECT (то есть код или данные), или же ни то ни другое (это будет ещё одна проверка, чтобы код не разрешался в данные). Во-вторых, есть ли у этого символа versioning. Варианты backend'ов такие: - objdump -T - readelf --??? - преловая привязка к libelf objdump -T дампит то что нужно, но у него запутанный вывод. Для readelf я не понял как его попросить сдампить .dynsym. Вывод readelf несколько проще. Писать привязку к libelf -- это не настолько просто, как хотелось бы. > эта проблема вплывала только при компиляции утилит bmovl-test и > fastmemcpybench. пробовал добавить к сборочной команде эти библиотеки, но > опять-таки на x86_64 -lSDL_image -ldl -lasound -lm почему-то раскрывалось > в полные пути a-la /usr/lib64/libSDL_image.so. > > потому я пока выключил сборку этих утилит.