delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2010/02/05/04:14:50

X-Recipient: archive-cygwin AT delorie DOT com
X-Spam-Check-By: sourceware.org
Date: Fri, 5 Feb 2010 10:14:25 +0100
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: dlsym: symbols in dependencies
Message-ID: <20100205091425.GN28659@calimero.vinschen.de>
Reply-To: cygwin AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
References: <4B6A857F DOT 2030509 AT users DOT sourceforge DOT net>
MIME-Version: 1.0
In-Reply-To: <4B6A857F.2030509@users.sourceforge.net>
User-Agent: Mutt/1.5.20 (2009-06-14)
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

On Feb  4 02:29, Yaakov S wrote:
> Per POSIX:
> 
> """The dlsym() function shall search for the named symbol in all
> objects loaded automatically as a result of loading the object
> referenced by handle (see dlopen )."""
> 
> With the relevant part of dlopen() saying:
> 
> """Note that some implementations permit the construction of
> dependencies between such objects that are embedded within files. In
> such cases, a dlopen() operation shall load such dependencies in
> addition to the object referenced by file."""
> 
> IOW, when the target of dlopen() has linked dependencies, not only
> shall those dependencies must also be loaded by dlopen() but the
> symbols therein found by dlsym().  On Cygwin, by the nature of
> PE/COFF the dependencies are loaded, but dlsym() does not search
> their symbols.

Looks like a bug in Cygwin.  Sort of.  Or rather, nobody asked for
this functionality yet.

The dlsym function only searches all modules loaded into the process if
the pseudo handle RTLD_DEFAULT has been specified.  If a valid module
handle is given, it only looks in that very DLL.  The underlying Win32
function GetProcAddress does not walk dependencies, unfortunately.

The question is if EnumProcessModules returns the modules in an order,
which allows to draw conclusions about dependencies.  If so, an
easy solution would be to call EnumProcessModules and start the search
at the given module handle in the returned module handle array.  This
would also allow for an easy implementation of RTLD_NEXT.

But somehow I doubt that it's so simple.  Did anybody test something
like that already?


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          cygwin AT cygwin DOT com
Red Hat

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019