[devel] rpmelfsymv
Dmitry V. Levin
=?iso-8859-1?q?ldv_=CE=C1_altlinux=2Eorg?=
Ср Авг 9 03:16:59 MSD 2006
On Wed, Aug 09, 2006 at 02:03:42AM +0400, Alexey Tourbin wrote:
> On Tue, Aug 08, 2006 at 10:36:18PM +0400, Alexey Tourbin wrote:
> > On Tue, Aug 08, 2006 at 04:30:44PM +0400, Dmitry V. Levin wrote:
> > > На старом libgcc не запустится:
> > > $ rpmquery -pR FlightGear-0.9.10-alt1.i586.rpm |fgrep libgcc
> > > libgcc_s.so.1(GCC_3.0)
> > > libgcc_s.so.1(GCC_4.0.0)
> > >
> > > На конференции Алексею пеняли, что его робот не учитывает versioning.
>
> Понимаешь в чем дело. Есть несколько проблем, которые всё усложняют.
> Вот первая из них:
>
> > Что нужно использовать вместо nm -D, чтобы получить отношение
> > <типа символа> <символ> <версия символа> ?
>
> Почему-то мне хочется сохранить однобуквенное обозначение типа символа,
> как в nm -D. При этом нужно добавить в таблицу ещё одно поле, в
> котором будет версия символа (или прочерк, если версии нет).
В общем случае этого сделать нельзя.
[...]
> Внимание, вопрос: могут ли два одинаковых символа с разными версиями
> иметь разные типы? Т.е. symbol на LIB_1.0 -- T (функция), symbol на LIB_1.1 --
> D (переменная).
Ничто, кроме здравого смысла, не мешает так сделать:
$ cat v.c
int old_foo;
void new_foo(void) {}
__asm__(".symver old_foo,foo на V1");
__asm__(".symver new_foo,foo@@V2");
$ cat v.map
V1 { global: foo; local: old_foo; };
V2 { global: foo; local: new_foo; };
$ gcc -fpic -shared -nostartfiles -nostdlib -Wl,--version-script,v.map -s -o v.so v.c
$ objdump -wT v.so |fgrep foo
000012cc g DO .bss 00000004 (V1) foo
00000248 g DF .text 00000005 V2 foo
> Как тогда правильно соединить тип и версию?
Тип экспортируемого символа - это его неотъемлемая часть, так же как имя и
версия.
> И какой тип на самом деле показывает nm -D?
$ nm -D v.so |fgrep foo
000012cc B foo
00000248 T foo
Таким образом, нужно использовать objdump -wT вместо nm -D.
--
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20060809/4de9e4dd/attachment-0001.bin>
Подробная информация о списке рассылки Devel