[devel] Q: Переименование символов и сохранение ABI

Dmitry V. Levin ldv на altlinux.org
Вс Июн 6 11:06:52 UTC 2010


On Sun, Jun 06, 2010 at 11:09:29AM +0400, Alexey I. Froloff wrote:
> Апстрим librep переименовал несколько символов не меняя SONAME.
> Хочется сохранить ABI.  Раньше оно выглядело так:
> 
> $ nm -D /usr/lib/librep.so.9.5.0 | grep file_uid 
> 000168e0 T Ffile_uid_p
> 000547c8 B Qfile_uid_p
> 
> Собсно, убрали "_p".  Код раскрывается в следующее:
> 
> repv Qfile_uid;
> repv Ffile_uid(repv arg) { ... }
> 
> Делаю alias'ы:
> 
> extern __typeof__ (Ffile_uid) Ffile_uid_p __attribute__ ((alias ("Ffile_uid")));
> extern __typeof__ (Qfile_uid) Qfile_uid_p __attribute__ ((alias ("Qfile_uid")));
> 
> 
> С функцией такой трюк проходит, а с common symbol нет:
> 
> {standard input}:6039: Error: `Qfile_uid_p' can't be equated to common symbol 'Qfile_uid'
> 
> У этой библиотеки полтора пользователя, но хотелось бы знать как
> в принципе решать подобные проблемы.

Достаточно превратить common symbol в (un)initialized data.
При этом конструкция вида "int i;" заменяется на "int i = 0;".


-- 
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 198 байтов
Описание: отсутствует
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20100606/a164bc90/attachment-0001.bin>


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