Note: I'm moving this conversation over to [EMAIL PROTECTED]
To follow up, please use tools-linking and drop opensolaris-discuss.


Holger Berger wrote:
> On 4/30/06, Rod Evans <[EMAIL PROTECTED]> wrote:
>
>> The colon has been the standard separator of multiple pathnames within
>> the link-editing environment since Solaris 2.0 (it was even used in
>> Solaris 1 (4.x) if I recall).
>
>
> Is there a way to override, replace or escape the ':' separator?


Presently, no.  But it seems like a mechanism to allow ':' within
a path is now desirable.

I've a couple of thoughts.   First, if you wish to allow ':' within
a dlopen() path, would you also want to allow this character in
a RUNPATH, LD_LIBRARY_PATH, or some other ld.so.1 processed path?
We could invent an escape character that can be embedded in a path.
This provides generic flexibility, but in the case of dlopen()
might require the user to translate a string (read from some config
file?) to include the escape character.

Or, we could allow dlopen() path processing to differ/be-more-flexible
than other path processing.  We could force a dlopen() string to be
used as-is.  This changes todays behavior, and would break the example
I had cited below.  But, would anyone care?   Or we could be explicit
in regards our new requirement:

        dlopen("foo:bar", RTLD_LAZY | RTLD_FULLPATH)

and use a new token to define a path should be used as is.

Thoughts?




Rod Evans wrote:
The following conversation occurred recently on opensolaris-discuss.
I've replicated the conversation on this alias so the we can continue to
explore ideas with a more appropriate focal group.

 > Rod Evans wrote:
 >
 > > Robert Lunnon wrote:
 > >
 > > Wine now uses softlinks named x: (where x is the device name
 > > to link to) placed in the filesystem. Wine preserved the
 > > Windows naming including the colon in the link name.
 > > Unfortunately ld.so.1 doesn't seem to be able to load a
 > > library across these links being confused by the colon in the
 > > name for the moment I have changes in the wine codebase to
 > > resolve the path of the library before loading it, but I'm
 > > inclined to think it is the behaviour of ld.so that is wrong.
 >
 > The link-editors can process path name information in a number
 > of forms.  Each form allows multiple paths to be expressed as a
 > series of individual paths separated by a colon:
 >
 >       LD_AUDIT, LD_AUDIT_32, and LD_AUDIT_64
 >
 >     A colon-separated list of objects that are loaded by the
 >     runtime  linker. ....
 >
 >       LD_LIBRARY_PATH, LD_LIBRARY_PATH_32, and LD_LIBRARY_PATH_64
 >
 >     ......... specifies a colon-separated list of directories
 >     that are searched before the default directories.
 >
 >       -R path
 >
 >     A colon-separated list of directories  used  to  specify
 >     library  search  directories  to  the runtime linker.
 >
 >       -Y P,dirlist
 >
 >     Changes  the  default  directories  used   for   finding
 >     libraries. dirlist is a colon-separated path list.
 >
 > The colon has been the standard separator of multiple pathnames
 > within the link-editing environment since Solaris 2.0 (it was even
 > used in Solaris 1 (4.x) if I recall).


 > Rod Evans wrote:
 >
 > > > Robert Lunnon wrote:
 > > >
 > > > In short you cannot dlopen a library with a : in the pathname
 > >
 > > Casper Dik wrote:
 > >
 > > That seems like a bug.
 >
 > Perhaps, but the intent has been to make all pathname processing
 > within ld.so.1 consistent.  FILTERS, RUNPATHS, LD_LIBRARY_PATH,
 > dependencies, in fact, all pathnames are funneled through the same
 > engine, where tokens are expanded ($ORIGIN, $HWCAP, etc), and
 > multiple pathnames separated.
 >
 > For example, you can use a token that can expand into multiple
 > pathnames:
 >
 >   #include <dlfcn.h>
 >
 >   main()
 >   {
 >       dlopen("$ISALIST/foo.so", RTLD_FIRST | RTLD_LAZY);
 >   }
 >   % LD_DEBUG=files,libs ./main
 >   .....
 >   01488: 1: file=$ISALIST/foo.so;  dlopen() \
 >     called from file=main  [ RTLD_LAZY RTLD_LOCAL ... RTLD_FIRST ]
 >   01488: 1:  trying path=amd64/foo.so
 >   01488: 1:  trying path=pentium_pro+mmx/foo.so
 >   01488: 1:  trying path=pentium_pro/foo.so
 >   .....
 >
 > Effectively, the ISALIST token results in a ":" separated series
 > of pathnames, which are then processed one by one.
 >
 > Similarly, you can hardcode the lookup yourself:
 >
 >   #include <dlfcn.h>
 >
 >   main()
 >   {
 >       dlopen("amd64/foo.so:pentium_pro+mmx/foo.so:pentium_pro/foo.so",
 >           RTLD_FIRST | RTLD_LAZY);
 >   }
 >   % LD_DEBUG=files,libs ./main
 >   .....
> 01489: 1: file=amd64/foo.so:pentium_pro+mmx/foo.so:pentium_pro/foo.so; \ > dlopen() called from file=main [ RTLD_LAZY RTLD_LOCAL ... RTLD_FIRST ]
 >   01489: 1:  trying path=amd64/foo.so
 >   01489: 1:  trying path=pentium_pro+mmx/foo.so
 >   01489: 1:  trying path=pentium_pro/foo.so
 >   .....
 >
 > Granted, the last scenario hasn't been widely advertised, and you
 > could achieve this, or the ISALIST scenario, by making a family of
 > individual dlopen() calls.  But the consistency of pathname
 > processing, for all pathnames used by ld.so.1, is intentional -
 > whether everything has fallen out to be as intuitive as we'd hoped ...
 >
 > If a colon is required as part of a pathname, then perhaps it
 > should be available in any pathname processes by ld.so.1.  Either
 > we need a way of specifying an alternative pathname specifier, and
 > simply escaping a ":", or something else ....


--

Rod.
_______________________________________________
opensolaris-discuss mailing list
opensolaris-discuss@opensolaris.org

Reply via email to