[devel] [Sisyphus-cybertalk] I: Sisyphus-20060422 dup_elf_symbols: +192 -130 (75892)

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Сб Апр 22 14:22:50 MSD 2006


On Sat, Apr 22, 2006 at 05:10:28AM +0400, QA Team Robot wrote:
> 	192 NEW dup_elf_symbols added to the list
> ananas-engine-qt	/usr/lib/libananasplugin.so	libqt3	/usr/lib/libdesignercore.so.1.0.0	12

У этих двух бинарей совпадает примерно 2^{12} символов (показатель
степени округляется).  Т.е. порядка 4096 символов -- это не хухры-мухры,
с очень высокой вероятностью имеет место реальное дублирование кода.

$ grep '/usr/lib/libananasplugin.so.*/usr/lib/libdesignercore.so.1.0.0' product |head
ananas-engine-qt        /usr/lib/libananasplugin.so     libqt3  /usr/lib/libdesignercore.so.1.0.0       T       _Z10find_accelRK7QStringR4QMapI5QChar11QWidgetListEP7QWidget
ananas-engine-qt        /usr/lib/libananasplugin.so     libqt3  /usr/lib/libdesignercore.so.1.0.0       T       _Z13assistantPathv
ananas-engine-qt        /usr/lib/libananasplugin.so     libqt3  /usr/lib/libdesignercore.so.1.0.0       T       _Z13qChoosePixmapP7QWidgetP10FormWindowRK7QPixmapP7QString
ananas-engine-qt        /usr/lib/libananasplugin.so     libqt3  /usr/lib/libdesignercore.so.1.0.0       T       _Z13widgetManagerv
ananas-engine-qt        /usr/lib/libananasplugin.so     libqt3  /usr/lib/libdesignercore.so.1.0.0       T       _Z14qChoosePixmapsP7QWidget
ananas-engine-qt        /usr/lib/libananasplugin.so     libqt3  /usr/lib/libdesignercore.so.1.0.0       T       _Z15clean_argumentsRK7QString
ananas-engine-qt        /usr/lib/libananasplugin.so     libqt3  /usr/lib/libdesignercore.so.1.0.0       T       _Z15find_formwindowP7QWidget
ananas-engine-qt        /usr/lib/libananasplugin.so     libqt3  /usr/lib/libdesignercore.so.1.0.0       T       _Z16int_to_size_typei
ananas-engine-qt        /usr/lib/libananasplugin.so     libqt3  /usr/lib/libdesignercore.so.1.0.0       T       _Z16size_type_to_intN11QSizePolicy8SizeTypeE
ananas-engine-qt        /usr/lib/libananasplugin.so     libqt3  /usr/lib/libdesignercore.so.1.0.0       T       _Z17set_splash_statusRK7QString
$ grep '/usr/lib/libananasplugin.so.*/usr/lib/libdesignercore.so.1.0.0' product |wc -l
4260
$

> atanks	/usr/games/atanks	ufo2000	/usr/games/ufo2000	8

Эти две игры скорее всего содержат в себе какую-то библиотеку.

atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex16
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex24
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex32
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex8
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_lit15
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_lit15x
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_lit16
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_lit16x
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_lit24
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_lit24x
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_lit32
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_lit32x
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_lit8
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask15
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask16
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask24
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask32
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask8
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_lit15
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_lit15x
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_lit16
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_lit16x
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_lit24
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_lit24x
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_lit32
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_lit32x
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_lit8
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_trans15
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_trans16
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_trans24
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_trans32
atanks  /usr/games/atanks       ufo2000 /usr/games/ufo2000      T       _poly_scanline_atex_mask_trans8

Кандидат на эту библиотеку -- libdevil.

libdevil        /usr/lib/libILUT.so.1.0.0       T       _poly_zbuf_ptex16
libdevil        /usr/lib/libILUT.so.1.0.0       T       _poly_zbuf_ptex24
libdevil        /usr/lib/libILUT.so.1.0.0       T       _poly_zbuf_ptex32
libdevil        /usr/lib/libILUT.so.1.0.0       T       _poly_zbuf_ptex8
libdevil        /usr/lib/libILUT.so.1.0.0       T       _poly_zbuf_ptex_lit15
libdevil        /usr/lib/libILUT.so.1.0.0       T       _poly_zbuf_ptex_lit16
libdevil        /usr/lib/libILUT.so.1.0.0       T       _poly_zbuf_ptex_lit24
libdevil        /usr/lib/libILUT.so.1.0.0       T       _poly_zbuf_ptex_lit32

> dumb_0.9.2	/usr/bin/dumbplay	atanks	/usr/games/atanks	8
> dumb_0.9.2	/usr/bin/dumbplay	liballegro-devel	/usr/bin/textconv	8
> dumb_0.9.2	/usr/bin/dumbplay	liquidwar	/usr/games/liquidwar	8
> dumb_0.9.2	/usr/bin/dumbplay	liquidwar	/usr/games/liquidwar-mapgen	8
> dumb_0.9.2	/usr/bin/dumbplay	ufo2000	/usr/games/ufo2000	9

То же самое.

> freetype	/usr/lib/libttf.so.2.2.0	libqt3	/usr/lib/libqt-mt.so.3.3.6	6
> freetype	/usr/lib/libttf.so.2.2.0	libqt4-gui	/usr/lib/libQtGui.so.4.1.2	6

freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Free_AlternateSubst
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Free_ChainContextPos
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Free_ChainContextSubst
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Free_ClassDefinition
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Free_ContextPos
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Free_ContextSubst
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Free_Coverage
...
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Load_AlternateSubst
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Load_ChainContextPos
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Load_ChainContextSubst
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Load_ClassDefinition
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Load_ContextPos
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Load_ContextSubst
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Load_Coverage
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Load_CursivePos
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       Load_Device
...
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       TT_GDEF_Build_ClassDefinition
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       TT_GDEF_Get_Glyph_Property
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       TT_GPOS_Add_Feature
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       TT_GPOS_Clear_Features
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       TT_GPOS_Query_Features
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       TT_GPOS_Query_Languages
freetype        /usr/lib/libttf.so.2.2.0        libqt3  /usr/lib/libqt-mt.so.3.3.6      T       TT_GPOS_Query_Scripts

Похоже, что libqt3 и libqt4-gui содержат в себе библиотеку libttf.

> gthumb	/usr/lib/gthumb-catalog-view	gthumb	/usr/lib/gthumb-image-viewer	5

gthumb  /usr/lib/gthumb-catalog-view    gthumb  /usr/lib/gthumb-image-viewer    D       Nautilus_ViewFrame__iinterface
gthumb  /usr/lib/gthumb-catalog-view    gthumb  /usr/lib/gthumb-image-viewer    D       Nautilus_ViewFrame__imethods
gthumb  /usr/lib/gthumb-catalog-view    gthumb  /usr/lib/gthumb-image-viewer    T       Nautilus_ViewFrame_close_window
gthumb  /usr/lib/gthumb-catalog-view    gthumb  /usr/lib/gthumb-image-viewer    T       Nautilus_ViewFrame_go_back
gthumb  /usr/lib/gthumb-catalog-view    gthumb  /usr/lib/gthumb-image-viewer    T       Nautilus_ViewFrame_open_location_force_new_window

Что это означает?

> gthumb	/usr/lib/libgthumb-2.6.9.so	epiphany	/usr/bin/epiphany-bin	5

gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_client_get_global
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_get_boolean
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_get_default_value
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_get_float
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_get_integer
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_get_string
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_get_string_list
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_get_value
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_handle_error
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_is_default
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_monitor_add
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_monitor_remove
gthumb  /usr/lib/libgthumb-2.6.9.so     epiphany        /usr/bin/epiphany-bin   T       eel_gconf_notification_add

> gthumb	/usr/lib/libgthumb-2.6.9.so	galeon	/usr/bin/galeon	4

То же самое.

И так далее -- письмо получается слишком длинным.  Короче, смысл в том,
что проблема дублирования бинарного наполовину решена.  То есть создана
адекватная модель данных и автоматизировано то, что очевидно подлежит
автоматизации.  Для окончательного решения проблемы остается только
"разгребать завалы", если это кому-то нужно.

(Модель данных на самом деле не совсем адекватна -- есть проблемы со
strip'ом; т.е. в некоторых ситуациях если стрипнуть как следует, то
ничего не остается.  Если кто-то знает другие инварианты, помимо ELF
символов, которые можно использовать для обнаружения дублирования
бинарного кода, это будет очень интересно.)
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?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/20060422/7d2bff3a/attachment-0001.bin>


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