[devel] libalsa (FAILED mplayer.git=1.0-alt35.29311.1)

Alexey Tourbin at на altlinux.ru
Вс Май 17 16:54:07 MSD 2009


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.
> 
> потому я пока выключил сборку этих утилит.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 197 байтов
Описание: отсутствует
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20090517/9bab69ea/attachment.bin>


Подробная информация о списке рассылки Devel