[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Static function listed by objdump



[Please CC me in your answers, I'm not subscribed to the list]

Hello dear porters,

while working on http://wiki.debian.org/Projects/ImprovedDpkgShlibdeps
I discovered that ia64 has some strange behaviour. All libraries have much
more "public" symbols.

For instance, take libglib2.0. In the "objdump -T" output I see:
DYNAMIC SYMBOL TABLE:
00000000000bbaa0 l    DF .text  00000000000006b0              .hidden IA__g_thread_pool_new
000000000007b730 l    DF .text  0000000000000200              .hidden IA__g_option_group_free
00000000000b2f30 l    DF .text  0000000000000060              .hidden IA__g_str_equal
00000000000cd0c0 l    DF .text  0000000000000010              .hidden IA__g_direct_hash
0000000000095660 l    DF .text  00000000000001d0              .hidden IA__g_scanner_warn
00000000001062e0 l    DF .text  0000000000000080              .hidden __do_global_ctors_aux
0000000000071fe0 l    DF .text  00000000000000f0              .hidden IA__g_free
0000000000074a30 l    DF .text  0000000000000370              .hidden _g_log_fallback_handler
0000000000077080 l    DF .text  0000000000000a20              .hidden IA__g_log_default_handler
00000000000afc90 l    DF .text  0000000000000090              .hidden IA__g_str_hash
0000000000095830 l    DF .text  00000000000001f0              .hidden IA__g_scanner_error
00000000000d4d60 l    DF .text  0000000000000290              g_io_unix_get_flags
00000000000d4a60 l    DF .text  0000000000000120              g_io_unix_set_flags
00000000000d4b80 l    DF .text  0000000000000020              g_io_unix_free
00000000000d4ba0 l    DF .text  00000000000000c0              g_io_unix_create_watch
00000000000d4c60 l    DF .text  0000000000000100              g_io_unix_close
00000000000d4ff0 l    DF .text  00000000000001f0              g_io_unix_seek
00000000000d51e0 l    DF .text  0000000000000150              g_io_unix_write
00000000000d5330 l    DF .text  0000000000000180              g_io_unix_read
00000000000d4820 l    DF .text  0000000000000030              g_io_unix_finalize
00000000000d4950 l    DF .text  0000000000000110              g_io_unix_dispatch
00000000000d4850 l    DF .text  0000000000000080              g_io_unix_check


When you check the sources of glib, you'll discover that those functions are
"static" and should thus not be exported. If you check on any other
architecture, those functions do not appear in objdump's output.

Can you explain me that behaviour and is that intended/normal or is that a bug?

One might note that all those symbols are flagged "local", does that mean that
the symbol can only be used within the library and that no app can use it ?

Thank in advance for your answer. I need an answer to handle properly the case
of ia64. Right now, the arch would be a pain to handle because the generated
"symbols" file would differ greatly from other architectures and those
differences would have to be manually tracked. If I can "extrapolate" a general
rule that the "local" symbols can be ignored because they can't be used by
applications, that would simplify the situation.

Otherwise, it might also mean that the ia64 toolchain might need to be fixed so
that those symbols do not end up in objdump's output. I don't know for sure.

Cheers,
-- 
Raphaël Hertzog

Premier livre français sur Debian GNU/Linux :
http://www.ouaza.com/livre/admin-debian/



Reply to: