libmap.conf: Update man page
authorJohn Marino <draco@marino.st>
Sat, 30 Nov 2013 10:50:51 +0000 (11:50 +0100)
committerJohn Marino <draco@marino.st>
Sat, 30 Nov 2013 11:55:33 +0000 (12:55 +0100)
Bring in DES' recent overhaul of the libmap.conf man page

Partially taken from:
FreeBSD SVN 255765 (21 SEP 2013)

share/man/man5/libmap.conf.5

index 7325e09..e6911ad 100644 (file)
@@ -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
@@ -22,9 +23,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: share/man/man5/libmap.conf.5 234851 2012-04-30 bapt $
+.\" $FreeBSD: head/share/man/man5/libmap.conf.5 255765 2013-09-21 21:03:52Z des $
 .\"
-.Dd May 3, 2012
+.Dd September 16, 2013
 .Dt LIBMAP.CONF 5
 .Os
 .Sh NAME
@@ -35,103 +36,98 @@ 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
-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.
+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
 .Sh FILES
 .Bl -tag -width ".Pa /etc/libmap.conf" -compact
 .It Pa /etc/libmap.conf
@@ -139,9 +135,8 @@ The libmap configuration file.
 .El
 .Sh EXAMPLES
 .Bd -literal
-# /etc/libmap.conf
 #
-# candidate            mapping
+# candidate            target
 #
 libc_r.so.6            libpthread.so.2 # Everything that uses 'libc_r'
 libc_r.so              libpthread.so   # now uses 'libpthread'
@@ -166,11 +161,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 Mt winter@jurai.net .
+.An Matthew N. Dodd Aq Mt winter@jurai.net
+and extensively rewritten by
+.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org .