summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2013-09-21 21:03:52 +0000
committerdes <des@FreeBSD.org>2013-09-21 21:03:52 +0000
commitb4fc46964b2d3d8a8685e2629da09f13748dd548 (patch)
treed9806f4ace92c72d22e964e58648a434d081155c /share
parent497ee46bc7673130423fc2967f992914bb690cbf (diff)
downloadFreeBSD-src-b4fc46964b2d3d8a8685e2629da09f13748dd548.zip
FreeBSD-src-b4fc46964b2d3d8a8685e2629da09f13748dd548.tar.gz
Make the directory mapping functionality, which was previously only
available in 32-bit compatibility mode, unconditional. Overhaul the man page, which had evolved more by accretion than by design. Approved by: re (gjb) MFC after: 3 weeks
Diffstat (limited to 'share')
-rw-r--r--share/man/man5/libmap.conf.5150
1 files changed, 73 insertions, 77 deletions
diff --git a/share/man/man5/libmap.conf.5 b/share/man/man5/libmap.conf.5
index 784d5d0..b97160f 100644
--- a/share/man/man5/libmap.conf.5
+++ b/share/man/man5/libmap.conf.5
@@ -1,4 +1,5 @@
.\" Copyright (c) 2003 Matthew N. Dodd <winter@jurai.net>
+.\" Copyright (c) 2013 Dag-Erling Smørgrav
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -24,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd April 28, 2012
+.Dd September 16, 2013
.Dt LIBMAP.CONF 5
.Os
.Sh NAME
@@ -35,109 +36,105 @@ The
.Nm libmap
functionality of
.Xr ld-elf.so.1 1
-allows dynamic object dependencies to be mapped to arbitrary
-names.
+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
-Two special directives are available:
+Each line in
+.Pa /etc/libmap.conf
+can have one of five forms:
.Bl -tag -width indent
+.It Ar origin Ar target
+Whenever a dependency on
+.Ar origin
+is encountered while loading a dynamic object, use
+.Ar target
+instead of searching for
+.Ar origin
+in the normal library search paths.
+.It Ar path1 Ar path2
+When iterating through a library search path, replace any element that
+matches
+.Ar path1
+exactly with
+.Ar path2 .
+.It Bq Ar constraint
+Apply
+.Ar constraint
+to all subsequent mappings until the next constraint line or the end
+of the file.
+See the
+.Sx Constraints
+section for details.
.It Cm include Ar file
Parse the contents of
.Ar file
before continuing with the current file.
+Nesting depth is limited only by available memory, but each file
+encountered is processed only once, and loops are silently ignored.
.It Cm includedir Ar dir
-Parse the contents of every file in
+Recurse through
.Ar dir
-that ends in
+and parse the contents of any file that ends in
.Pa .conf
before continuing with the current file.
+Nesting depth is limited only by available memory, but each directory
+or file encountered is processed only once, and loops are silently
+ignored.
.El
-.Pp
-Any file or directory encountered while processing
-.Cm include
-or
-.Cm includedir
-directives will be parsed exactly once, even if it is encountered
-multiple times.
-.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:
+.Ss Constraints
+Constrained mappings only apply when processing binaries or libraries
+that satisfy the constraint.
+There are three types of constraints:
.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.
+identical fully qualified pathname will satisfy the constraint.
This means that the executable
.Pa /usr/bin/foo
-will not match a constraint for
-.Pa /usr/bin/./foo
+will not satisfy the constraint
+.Bq 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
+For instance, the constraint
+.Bq 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.
+no matter what directory it is in.
.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.
+A constraint with a trailing slash is satisfied if the full pathname
+begins with the constraint string.
+For instance, the constraint
+.Bq Pa /usr/bin/
+will match any executable with a path starting with
+.Pa /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.
+Note that the constraints are matched against the path that was passed
+as the first argument to whichever
+.Xr exec 3
+function was used to execute the binary in question.
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.
+.Xr execvp 3
+or similar, so the basename constraint type is the most useful.
.Pp
+.Bf -symbolic
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
-On 64-bit architectures that provide 32-bit runtime support,
-the libmap mechanism is available for 32-bit binaries too.
-The mappings has to be written into separate configuration file
+Constraints apply to all mappings until the next constraint or the end
+of the file.
+Hence, unconstrained mappings must be placed at the top of the file.
+.Ef
+.Ss ABI compatibility
+On 64-bit architectures that provide 32-bit binary compatibility, the
+mappings in
+.Pa /etc/libmap.conf
+apply only to 64-bit binaries.
+Mappings for 32-bit binaries must be placed in
.Pa /etc/libmap32.conf .
-Currently only supported on amd64.
-.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 used 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/libmap32.conf" -compact
.It Pa /etc/libmap.conf
@@ -147,9 +144,8 @@ The libmap configuration file for 32-bit binaries on 64-bit system.
.El
.Sh EXAMPLES
.Bd -literal
-# /etc/libmap.conf
#
-# candidate mapping
+# origin target
#
libc_r.so.6 libpthread.so.2 # Everything that uses 'libc_r'
libc_r.so libpthread.so # now uses 'libpthread'
@@ -174,11 +170,11 @@ libdl.so.2 pluginwrapper/pips.so
.Xr rtld 1
.Sh HISTORY
The
-.Nm
-manual page and
.Nm libmap
-functionality first appeared in
+mechanism first appeared in
.Fx 5.1 .
.Sh AUTHORS
This manual page was written by
-.An Matthew N. Dodd Aq winter@jurai.net .
+.An Matthew N. Dodd Aq winter@jurai.net
+and extensively rewritten by
+.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
OpenPOWER on IntegriCloud