[RFC] elf: fine-grained output LD_DEBUG log when symbol lookup error
Lv Ying
lvying.system.thoughts@gmail.com
Wed Aug 17 03:51:58 GMT 2022
Hi, Florian.
Sorry to reply you too late, and thanks for your reply. I took some time to reproduce this problem.
And I resend this email again to cc libc-alpha@sourceware.org.
> Do you have a reproducer that shows what you want to fix?
Yes, here is the reproduce processing:
I want to get shrared object library search paths in openEuler 22.03(https://ftp.belnet.be/mirror/openeuler/openEuler-22.03-LTS/):
# export LD_DEBUG=libs
# whoami
40503: find library=libc.so.6 [0]; searching
40503: search cache=/etc/ld.so.cache
40503: trying file=/usr/lib64/libc.so.6
40503:
40503:
40503: calling init: /lib64/ld-linux-x86-64.so.2
40503:
40503:
40503: calling init: /usr/lib64/libc.so.6
40503:
40503:
40503: initialize program: whoami
40503:
40503:
40503: transferring control: whoami
40503:
40503: find library=libnss_sss.so.2 [0]; searching
40503: search cache=/etc/ld.so.cache
40503: trying file=/usr/lib64/libnss_sss.so.2
40503:
40503:
40503: calling init: /usr/lib64/libnss_sss.so.2
40503:
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_endaliasent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_endetherent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_endprotoent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_endrpcent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_endsgent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_endspent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getaliasbyname_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getaliasent_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getcanonname_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getetherent_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_gethostbyaddr2_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_gethostbyname3_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_gethostbyname4_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_gethostton_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getntohost_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getprotobyname_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getprotobynumber_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getprotoent_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getpublickey (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getrpcbyname_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getrpcbynumber_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getrpcent_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getsecretkey (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getsgent_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getsgnam_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getspent_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_getspnam_r (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_netname2user (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_setaliasent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_setetherent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_setprotoent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_setrpcent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_setsgent (fatal)
40503: /usr/lib64/libnss_sss.so.2: error: symbol lookup error: undefined symbol: _nss_sss_setspent (fatal)
root
As ld.so man page(https://man7.org/linux/man-pages/man8/ld-linux.so.8.html) said, LD_DEBUG=libs, only display library search paths.
"symbol lookup error" debug info message should not mess the debuginfo.
Because there are LD_DEBUG=reloc and LD_DEBUG=all to display relocation processing.
> The current code looks like this:
>
> if ((*ref == NULL || ELFW(ST_BIND) ((*ref)->st_info) != STB_WEAK)
> && !(GLRO(dl_debug_mask) & DL_DEBUG_UNUSED))
> {
> /* We could find no value for a strong reference. */
> const char *reference_name = undef_map ? undef_map->l_name : "";
> const char *versionstr = version ? ", version " : "";
> const char *versionname = (version && version->name
> ? version->name : "");
> struct dl_exception exception;
> /* XXX We cannot translate the message. */
> _dl_exception_create_format
> (&exception, DSO_FILENAME (reference_name),
> "undefined symbol: %s%s%s",
> undef_name, versionstr, versionname);
> _dl_signal_cexception (0, &exception, N_("symbol lookup error"));
> _dl_exception_free (&exception);
> }
>
> I think in general, we want to signal an exception here, and we can't
> mask that except in debug mode because it does not result in the right
> behavior.
As the above said, we do not mask that, we only display the exception in the corresponding
reloc LD_DEBUG mode.
Thanks
Lv Ying
More information about the Libc-alpha
mailing list