This is the mail archive of the cygwin-patches mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]