This is the mail archive of the
cygwin-patches
mailing list for the Cygwin project.
Re: [PATCH] define RTLD_LOCAL
On Sun, 2010-08-08 at 10:35 +0200, VÃclav Haisman wrote:
> Is it not undefined in Cygwin because Windows cannot support the behaviour?
> AFAIK once you do LoadLibrary(A.dll) then any subsequent reference to A.dll
> and its exports will be satisfied from the already loaded A.dll. IOW, Windows
> cannot satisfy "The object's symbols shall not be made available for the
> relocation processing of any other object," as specified by [2].
Remember that Cygwin's dlopen() does nothing with the second argument,
so none of RTLD_* actually affect behaviour. According to your logic,
we shouldn't define one of RTLD_LAZY or RTLD_NOW, because they can't
both be true, so our dlopen() isn't fulfilling its meaning. We define
both anyway, and I don't see this as any different.
Secondly, on Linux, RTLD_LOCAL is essentially the default, so lots
(most?) software intended primarily for Linux which passes neither it
nor RTLD_GLOBAL is probably expecting RTLD_LOCAL behaviour anyway.
Therefore actually defining RTLD_LOCAL isn't a notable change.
Thirdly, several times I have seen the following:
#ifndef RTLD_LOCAL
#define RTLD_LOCAL 0
#endif
So they're clearly not too concerned about specific behaviour, they just
don't require RTLD_GLOBAL and therefore specify the opposite. Defining
RTLD_LOCAL ourselves just saves us from patching this in to other
software.
Yaakov