The changes to the ld.so interface to make RTLD_LOCAL the default breaks
binary compatibility with any program (the big one biting me is perl) which
assumes that the lack of RTLD_GLOBAL in <dlfcn.h> means that it's on by
default. My dynamic Perl modules which depend on dlopen()ed libraries are
breaking now that I've updated ld.so to -current. JDK is also breaking, as
is Mozilla.
Charles suggested to me that we could check the _DYNAMIC version number to
determine whether to turn on RTLD_GLOBAL by default. I'm not quite sure if
the _DYNAMIC number changed, or even where that value is set.
It hit me, as well, that there is likely software out there that assumes
"NetBSD == RTLD_GLOBAL by default." Since the more "standardized" (is it
standardized?) implementations out there specify that one of either
RTLD_LOCAL or RTLD_GLOBAL should be specified, I'd propose that the default
behavior be changed back to RTLD_GLOBAL, and that RTLD_LOCAL be made into
the flag which changes behavior.
--
-- Todd Vierling (Personal tv@pobox.com; Bus. todd_vierling@xn.xerox.com)