On Wed, Feb 8, 2012 at 9:07 AM, Tom Yu <t...@mit.edu> wrote: > A lot of this mystery may revolve around whether the runtime linker > has a way to disambiguate different shared libraries that happen to > have the same SONAME but reside in different files and have different > contents. I've heard it claimed that the Solaris runtime linker > tracks pairs of device numbers with inode numbers to disambiguate > libraries that have the same SONAME, but I don't know if the Linux one > does, and skimming its source code did not make it obvious to me.
Here's the OpenSolaris (last open build, 151a) RTLD function that checks the st_dev and st_ino: http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sgs/rtld/common/analyze.c#1026 http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sgs/rtld/common/analyze.c#1259 http://src.opensolaris.org/source/s?refs=is_devinode_loaded&project=onnv The glibc rtld does too, as you can see here: http://sourceware.org/git/?p=glibc.git;a=blob;f=elf/dl-load.c;h=f3717ea58ca69dcd4dac0971ca794213f83d5943;hb=HEAD#l943 But this is almost certainly a red herring. The main thing is to prevent DLL hell. The RTLD must be finding the SONAME (and probably version number) listed as a dependency in is already on the main link map, thus not even opening nor stat-ing the shared object ELF to find that the shared object that really ought to be loaded is distinct from the one on the link map that has the same SONAME. Nico -- ________________________________________________ Kerberos mailing list Kerberos@mit.edu https://mailman.mit.edu/mailman/listinfo/kerberos