NetBSD-Bugs archive

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

Re: lib/49791: dlopen(0, and dlopened libraries



The following reply was made to PR lib/49791; it has been noted by GNATS.

From: Joerg Sonnenberger <joerg%britannica.bec.de@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: 
Subject: Re: lib/49791: dlopen(0, and dlopened libraries
Date: Sat, 4 Apr 2015 20:49:57 +0200

 On Sat, Apr 04, 2015 at 06:35:01PM +0000, Patrick Welche wrote:
 >  So maybe this is the way forward. How do you decide on "correct"?
 >  Could you give me some pointers to why RTLD_GLOBAL is a bug, and the
 >  problems with subsequent dlclose()?
 
 The POSIX behavior makes no sense in light of multi-threaded programs.
 Returning a handle gives the illusion that the result of two consecutive
 calls will be the same, when a different thread might have done a
 dlopen or dlclose in the mean time. If the return value is supposed to
 be a magic global object, RTLD_DEFAULT is much saner as it doesn't
 pretend dlopen/dlclose is needed.
 
 The problem with RTLD_GLOBAL is that is (a) expensive and (b) dangerous.
 It is expensive because it adds work for every look-up the same way
 LD_PRELOAD does. It is dangerous because the meaning of a symbol changes
 over time. Especially noticable is that it can interact with lazy
 binding in surprising ways. There is broken software depending on such
 behavior (XFree86 and successors, I look at you!), but that is generally
 a sign of a very badly designed module system.
 
 Joerg
 


Home | Main Index | Thread Index | Old Index