[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