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

Bug#232920: ld.so: unversioned symbols allowed to satisfy unresolved references to versioned symbols



Package: libc6
Version: 2.3.2.ds1-11

It appears that, given:

library libbar, providing version BAR1 of symbol bar_sym1;
library libquux, linked against libbar and using (version BAR1 of) bar_sym1;
and program foo, linked with -rdynamic, providing unversioned symbol
  bar_sym1, and dlopen()ing libquux,

the versioned reference to bar_sym1 from libquux will be resolved using
the unversioned symbol in foo, instead of the versioned symbol in
libbar.

This problem also manifests if the unversioned bar_sym1 symbol is
provided by a library that was dlopen()ed prior to dlopen()ing libquux;
if foo is linked against libquux rather than dlopen()ing it; and,
presumably, if foo is linked against both a lib (libbar0) providing the
unversioned symbol and against libquux, but libbar0 is opened first.

I had somehow reached the conclusion that this was documented and
deliberate behavior, but Andrew Suffield <asuffield@debian.org>
indicates otherwise and asked that I file a bug.  The attached tarball
contains a small test case that can be used to reproduce the problem,
showing that unversioned symbols are allowed to satisfy unresolved
references to versioned symbols.

-- 
Steve Langasek
postmodern programmer

Attachment: dlopentest.tgz
Description: GNU Unix tar archive

Attachment: signature.asc
Description: Digital signature


Reply to: