* Re: [devel] [Sisyphus-cybertalk] I: Sisyphus-20060422 dup_elf_symbols: +192 -130 (75892)
@ 2006-04-22 10:22 ` Alexey Tourbin
2006-04-22 13:02 ` [devel] binary dups handling (was: [Sisyphus-cybertalk] I: Sisyphus-20060422 dup_elf_symbols: +192 -130 (75892)) Michael Shigorin
2006-04-25 9:00 ` [devel] [Sisyphus-cybertalk] I: Sisyphus-20060422 dup_elf_symbols: +192 -130 (75892) Serge Polkovnikov
2006-04-24 15:23 ` Andrey Rahmatullin
1 sibling, 2 replies; 5+ messages in thread
From: Alexey Tourbin @ 2006-04-22 10:22 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 12366 bytes --]
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
символов, которые можно использовать для обнаружения дублирования
бинарного кода, это будет очень интересно.)
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread