On Sat, 7 May 2005 11:47 pm, Alexandre Julliard wrote:
Robert Lunnon bobl@optushome.com.au writes:
Notes about patch: Solaris requires RTLD_FIRST flag to dlopen calls to resolve multiple path expansions properly
This doesn't seem to be what RTLD_FIRST does. Could you explain a bit more exactly what the problem is?
Originally the problem manifested itself on Solaris 10 with ld.so.1 emitting a diagnostic: "potential multiple path expansion requires RTLD_FIRST"
when this happens, ld.so.1 fails the dlopen and wine usually falls over.
RTLD_FIRST: The way I understand it (and I don't very well) the Solaris linker has an internal macro like capability, where the path to a group of libraries can be represented by a single symbol. The RTLD_FIRST flag makes ld.so.1 select the FIRST library which resolves a dependency when there are multiple possibilities as a result of such an expansion. According to docs.sun.com the flag seems to have the side-effect of hiding subsequent dependencies from a parent object, So for example wine, can't rely on say winmm.dll.so.1 importing the symbols from the driver so the wine executable can use them directly. In practise the limitation doesn't seem to be a problem, wine does import directly all the DSOs it needs correctly for this flag to work.
I pondered this problem for quite a while, but this problem apparently doesn't come up much and even the sun engineers couldn't help much with how to identify the collision or how to resolve the problem. After a while investigating I decided I'd just do what the diagnostic said, which in fact did resolve the problem and doesn't have any undesirable side-effects that I have identified.