3756fc3aaa
binaries. A very neat trick.
163 lines
5.2 KiB
Groff
163 lines
5.2 KiB
Groff
.\" Copyright (c) 2003 Matthew N. Dodd <winter@jurai.net>
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.\"
|
|
.Dd January 31, 2004
|
|
.Dt LIBMAP.CONF 5
|
|
.Os
|
|
.Sh NAME
|
|
.Nm libmap.conf
|
|
.Nd "configuration file for dynamic object dependency mapping"
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Nm libmap
|
|
functionality of
|
|
.Xr ld-elf.so.1 1
|
|
allows dynamic object dependencies to be mapped to arbitrary
|
|
names.
|
|
.Pp
|
|
The configuration file consists of two whitespace separated columns; the
|
|
left hand side containing the mapping candidate and the right hand
|
|
side containing the mapping.
|
|
Dependencies are matched against candidates and replaced with the mappings.
|
|
.Pp
|
|
Constrained mappings may be specified by enclosing the name of the
|
|
executable or library in brackets.
|
|
All mappings following a constraint will only be evaluated for that constraint.
|
|
Constraints can be one of three types:
|
|
.Bl -tag -width indent
|
|
.It Exact
|
|
The constraint is matched literally so that only an executable with an
|
|
identical fully qualified pathname will match the constraint.
|
|
This means that the executable
|
|
.Pa /usr/bin/foo
|
|
will not match a constraint for
|
|
.Pa /usr/bin/./foo
|
|
and vice-versa.
|
|
This is the default constraint type.
|
|
.It Basename
|
|
A constraint with no path is matched against the basename of the
|
|
executable.
|
|
.Pa foo
|
|
will match
|
|
.Pa /bin/foo ,
|
|
.Pa /usr/local/sbin/foo ,
|
|
or any other executable named
|
|
.Pa foo ,
|
|
no matter what its path is.
|
|
.It Directory
|
|
A constraint with a trailing slash is prefix-matched against the full
|
|
pathname of the executable.
|
|
.Pa /usr/bin/
|
|
will match any executable with a path starting with /usr/bin.
|
|
.El
|
|
.Pp
|
|
Note that the executable path matched against is the
|
|
.Fa path
|
|
parameter in an
|
|
.Fn exec*
|
|
function call.
|
|
The Directory or Exact constraints can only match when the executable
|
|
is called with a full pathname.
|
|
Most programs executed from a shell are run without a full path, via
|
|
.Fn exec*p ,
|
|
so the Basename constraint type is the most useful.
|
|
.Pp
|
|
WARNING!
|
|
Constrained mappings must never appear first in the configuration file.
|
|
While there is a way to specify the
|
|
.Dq default
|
|
constraint, its use is not recommended.
|
|
.Pp
|
|
The most common use at the date of writing is for allowing multiple
|
|
.Tn POSIX
|
|
threading libraries to be used on a system without relinking or
|
|
changing symlinks.
|
|
.Pp
|
|
This mechanism has also been used to create shims to allow Linux
|
|
shared libraries to be dynamically loaded into
|
|
.Fx
|
|
binaries.
|
|
In this case, an Exact constraint is use for the Linux shared library,
|
|
mapping libraries it depends on to a wrapper.
|
|
The wrapper then defines any needed symbols for the Linux shared library
|
|
and relies on its libraries not being mapped to provide actual
|
|
implementations.
|
|
It appears that only libraries loaded via
|
|
.Xr dlopen 3
|
|
will work correctly.
|
|
The symbol version information in shared libraries is checked at
|
|
link time, but at run time the version information is currently
|
|
ignored.
|
|
.Sh FILES
|
|
.Bl -tag -width ".Pa /etc/libmap.conf" -compact
|
|
.It Pa /etc/libmap.conf
|
|
The libmap configuration file.
|
|
.El
|
|
.Sh EXAMPLES
|
|
.Bd -literal
|
|
# /etc/libmap.conf
|
|
#
|
|
# candidate mapping
|
|
#
|
|
libpthread.so.1 libpthread.so.1 # Everything uses 'libpthread'
|
|
libpthread.so libpthread.so
|
|
|
|
libc_r.so.5 libpthread.so.1 # Everything that uses 'libc_r'
|
|
libc_r.so libpthread.so # now uses 'libpthread'
|
|
|
|
[/tmp/mplayer] # Test version of mplayer uses libc_r
|
|
libpthread.so.1 libc_r.so.5
|
|
libpthread.so libc_r.so
|
|
|
|
[mplayer] # All other mplayers use libpthread
|
|
libpthread.so.1 libpthread.so.1
|
|
libpthread.so libpthread.so
|
|
|
|
[/usr/local/jdk1.4.1/] # All Java 1.4.1 programs use libthr
|
|
# This works because "javavms" executes
|
|
# programs with the full pathname
|
|
libpthread.so.1 libthr.so.1
|
|
libpthread.so libthr.so
|
|
|
|
# Glue for Linux-only EPSON printer .so to be loaded into cups, etc.
|
|
[/usr/local/lib/pips/libsc80c.so]
|
|
libc.so.6 pluginwrapper/pips.so
|
|
libdl.so.2 pluginwrapper/pips.so
|
|
.Ed
|
|
.Sh SEE ALSO
|
|
.Xr ldd 1 ,
|
|
.Xr rtld 1
|
|
.Sh HISTORY
|
|
The
|
|
.Nm
|
|
manual page and
|
|
.Nm libmap
|
|
functionality first appeared in
|
|
.Fx 5.1 .
|
|
.Sh AUTHORS
|
|
This manual page was written by
|
|
.An Matthew N. Dodd Aq winter@jurai.net .
|