[devel] Как победить eu-elflint с его unknown symbol binding?

Alexey Tourbin at на altlinux.ru
Вт Май 11 11:53:08 UTC 2010


On Tue, May 11, 2010 at 02:42:48PM +0400, Ivan A. Melnikov wrote:
> Пытаюсь собрать boost 1.43.0, пока при помощи gear-rpm -ba в локальной
> системе (Сизиф x86_64). В конце сборки получаю кучу ошибок от
> eu-elflint (кусок лога ниже). Google и search.altlinux.org не помогли.
> Подскажите, пожалуйста, как с этим бороться.

elfutils плохо понимает новые символы STB_GNU_UNIQUE.

elfutils/libebl/eblsymbolbindingname.c:
    83            if (binding >= STB_LOPROC && binding <= STB_HIPROC)
    84              snprintf (buf, len, "LOPROC+%d", binding - STB_LOPROC);
    85            else if (binding == STB_GNU_UNIQUE
    86                     && (ident = elf_getident (ebl->elf, NULL)) != NULL
    87                     && ident[EI_OSABI] == ELFOSABI_LINUX)
    88              return "GNU_UNIQUE";

Кажется binutils всегда выставляет ident[EI_OSABI] в 0, то есть
generic System V ABI.  ident[EI_OSABI] это восьмой байт в файле,
легко проверить.  Например /usr/bin/perl:
00000000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|

В binutils код другой.

binutils/binutils/readelf.c:
  7883        if (binding >= STB_LOPROC && binding <= STB_HIPROC)
  7884          snprintf (buff, sizeof (buff), _("<processor specific>: %d"),
  7885                    binding);
  7886        else if (binding >= STB_LOOS && binding <= STB_HIOS)
  7887          {
  7888            if (binding == STB_GNU_UNIQUE
  7889                && (elf_header.e_ident[EI_OSABI] == ELFOSABI_LINUX
  7890                    /* GNU/Linux is still using the default value 0.  */
  7891                    || elf_header.e_ident[EI_OSABI] == ELFOSABI_NONE))
  7892              return "UNIQUE";
  7893            snprintf (buff, sizeof (buff), _("<OS specific>: %d"), binding);
  7894          }

> section [ 3] '.dynsym': symbol 632: unknown symbol binding
> section [ 3] '.dynsym': symbol 633: unknown symbol binding
> section [ 3] '.dynsym': symbol 638: unknown symbol binding
> verify-elf: WARNING: ./usr/lib64/libboost_math_tr1-st.so.1.43.0: eu-elflint failed
> 
> [... skip ...]
> 
> section [ 3] '.dynsym': symbol 1561: unknown symbol binding
> section [ 3] '.dynsym': symbol 1577: unknown symbol binding
> verify-elf: WARNING: ./usr/lib64/libboost_wave.so.1.43.0: eu-elflint failed
> ошибка: Неверный код возврата из /tmp/rpm-tmp.5122 (%install)

Тем не мене, это только warning.
Там ещё где-то должен быть error.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 198 байтов
Описание: отсутствует
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20100511/139bef4f/attachment.bin>


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