Re: Dependencies on shared libs, news and difference between archs
Raphael Hertzog wrote:
[snip]
> 2/ Second example, libconfig0 has a supplementary symbols
> _PROCEDURE_LINKAGE_TABLE_ on sparc and alpha. I don't know where it comes from.
> Is this a internal symbols that I missed?
> On powerpc it has _SDA_BASE_ and _SDA2_BASE_. Same question as above.
> On amd64 it has lost the "_DYNAMIC" symbol. Same question as above.
The symbols for PLT and dynamic section are magic for the dynamic loader,
they aren't relevant WRT shared library dependencies. I guess the same
applies to the powerpc SDA symbols.
> Quick googling led me to believe that I can/should exclude all those. If
> someone can confirm, it would be great.
>
> 3/ Third example, libgci0/0.9.5.dfsg-2 on mipsel has a "0x62" global symbol:
> 009b6870 g D *ABS* 009b6170 0x62
> It also has a 0x63 symbol but this one is marked local so is already discarded.
> 009b4cb0 l D *ABS* 009b6580 0x63
> I have no idea where they come from and what they're used for. Can someone
> from debian-mips enlighten me?
Looks like a corrupted symbol table.
> 4/ Fourth example, libgarlic2006 on alpha has many supplementary symbols ending
> in "___elabs". No idea what the root difference is.
>
> 5/ Fifth example, it looks like 64 bits ports tend to have differences in common
> like on libneon2.6 where various functions suffixed by "64" disappear on those
> arches (ne_get_range64, ne_set_request_body_fd64, ne_set_request_body_provider64).
64bit ports tend to handle 64bit offsets in their interface functions, so
they don't need special versions for e.g. LFS.
> If you want to investigate a bit more on differences, you can grab that file:
> http://users.alioth.debian.org/~hertzog/comparison.tar.bz2 (139 Mb)
> the "result-compare" contain the information about differences on all packages.
> You can then lookup the difference manually by diffing files in result/sid/*.symbols.*
>
>
> About C++ libraries
> -------------------
>
> Can anyone explain me why there's randomness in symbol mangling? If I compare
> the symbols file of gnunet-qt for example I get differences like this between
> i386 and alpha:
> @@ -67,10 +67,10 @@
> _ZTV13GPluginLoader@Base 0.7.1-1
> _ZTV6GEvent@Base 0.7.1-1
> _ZTV7GPlugin@Base 0.7.1-1
> - _ZThn8_N11GTextEditorD0Ev@Base 0.7.1-1
> - _ZThn8_N11GTextEditorD1Ev@Base 0.7.1-1
> - _ZThn8_N7GPluginD0Ev@Base 0.7.1-1
> - _ZThn8_N7GPluginD1Ev@Base 0.7.1-1
> + _ZThn16_N11GTextEditorD0Ev@Base 0.7.1-1
> + _ZThn16_N11GTextEditorD1Ev@Base 0.7.1-1
> + _ZThn16_N7GPluginD0Ev@Base 0.7.1-1
> + _ZThn16_N7GPluginD1Ev@Base 0.7.1-1
> libgnunetqtmodule_about.so.1 gnunet-qt #MINVER#
> _ZN11Ui_WndAbout7setupUiEP7QWidget@Base 0.7.1-1
> _ZN12GAboutPlugin11linkHandlerERK4QUrl@Base 0.7.1-1
>
> But if you check what it refers too, they refer to the same symbol:
> $ c++filt _ZThn8_N11GTextEditorD0Ev
> non-virtual thunk to GTextEditor::~GTextEditor()
> $ c++filt _ZThn16_N11GTextEditorD0Ev
> non-virtual thunk to GTextEditor::~GTextEditor()
>
> And if I convert the symbols files with c++filt then both files are identical.
Different object/vtable layout, see
http://www.codesourcery.com/cxx-abi/abi.html#mangling
Thiemo
Reply to: