Update man page
diff --git a/ltrace.1 b/ltrace.1
index 4d320e6..3a908be 100644
--- a/ltrace.1
+++ b/ltrace.1
@@ -1,3 +1,4 @@
+.\" Copyright (c) 2012 Petr Machata, Red Hat Inc.
 .\" Copyright (c) 1997-2005 Juan Cespedes <cespedes@debian.org>
 .\" This file is covered by the GNU GPL
 .TH ltrace 1
@@ -64,22 +65,12 @@
 DEBUG_FUNCTION.  Shows every entry to internal functions
 .RE
 .TP
-.I \-e expr
-A qualifying expression which modifies which events to trace.
-The format of the expression is:
-.br
-[!]value1[,value2]...
-.br
-where the values are the functions to trace.  Using an exclamation
-mark negates the set of values.  For example
-.I \-e printf
-means to trace only the printf library call.  By contrast,
-.I \-e !printf
-means to trace every library call except printf.
-.IP
-Note that some shells use the exclamation point for history
-expansion; even inside quoted arguments.  If so, you must escape
-the exclamation point with a backslash.
+.I \-e filter
+A qualifying expression which modifies which library calls to trace.
+The format of the filter expression is described in the section
+\fBFILTER EXPRESSIONS\fR.  If more than one \-e option appears on the
+command line, the library calls that match any of them are traced.  If
+no \-e is given, \fB@MAIN\fR is assumed as a default.
 .TP
 .I \-f
 Trace child processes as they are created by
@@ -175,16 +166,72 @@
 which must be an external function.  By default, '_start' is used.
 NOTE: this flag is only available on the architectures that need it.
 .TP
-.I \-x extern
-Trace the external function
-.IR extern .
-This option will search the symbol table and lib-dl loaded libraries when
-attempting to match the given symbol name.
-This option may be repeated.
+.I \-x filter
+A qualifying expression which modifies which symbol table entry points
+to trace.  The format of the filter expression is described in the
+section \fBFILTER EXPRESSIONS\fR.  If more than one \-x option appears
+on the command line, the symbols that match any of them are traced.
+No entry points are traced if no \-x is given.
 .TP
 .I \-V, \-\-version
 Show the version number of ltrace and exit.
 
+.SH FILTER EXPRESSIONS
+
+Filter expression is a chain of glob- or regexp-based rules that are
+used to pick symbols for tracing from libraries that the process uses.
+Most of it is intuitive, so as an example, the following would trace
+calls to malloc and free, except those done by libc:
+
+-e malloc+free-@libc.so*
+
+This reads: trace malloc and free, but don't trace anything that comes
+from libc.  Semi-formally, the syntax of the above example looks
+approximately like this:
+
+{[+-][\fIsymbol pattern\fR][@\fIlibrary pattern\fR]}
+
+\fISymbol pattern\fR is used to match symbol names, \fIlibrary
+pattern\fR to match library SONAMEs.  Both are implicitly globs, but
+can be regular expressions as well (see below).  The glob syntax
+supports meta-characters \fB*\fR and \fB?\fR and character classes,
+similarly to what basic bash globs support.  \fB^\fR and \fB$\fR are
+recognized to mean, respectively, start and end of given name.
+
+Both \fIsymbol pattern\fR and \fIlibrary pattern\fR have to match the
+whole name.  If you want to match only a part of name, surround it
+with one or two *'s as appropriate.  The exception is if the pattern
+is not mentioned at all, in which case it's as if the corresponding
+pattern were \fB*\fR.  (So \fBmalloc\fR is really \fBmalloc@*\fR and
+\fB@libc.*\fR is really \fB*@libc.*\fR.)
+
+In libraries that don't have an explicit SONAME, basename is taken for
+SONAME.  That holds for main binary as well: \fB/bin/echo\fR has an
+implicit SONAME of \fBecho\fR.  In addition to that, special library
+pattern \fBMAIN\fR always matches symbols in the main binary and never
+a library with actual SONAME \fBMAIN\fR (use e.g. \fB^MAIN\fR or
+\fB[M]AIN\fR for that).
+
+If the symbol or library pattern is surrounded in slashes (/like
+this/), then it is considered a regular expression instead.  As a
+shorthand, instead of writing \fB/x/@/y/\fR, you can write
+\fB/x@y/\fR.
+
+If the library pattern starts with a slash, it is not a SONAME
+expression, but a path expression, and is matched against the library
+path name.
+
+The first rule may lack a sign, in which case \fB+\fR is assumed.  If,
+on the other hand, the first rule has a \fB-\fR sign, it is as if
+there was another rule \fB@*\fR in front of it.
+
+The above rules are used to construct the set of traced symbols.  Each
+candidate symbol is passed through the chain of above rules.
+Initially, the symbol is \fIunmarked\fR.  If it symbol matches a
+\fB+\fR rule, it becomes \fImarked\fR, if it matches a \fB-\fR rule,
+it becomes \fIunmarked\fR.  If, after applying all rules, the symbol
+is \fImarked\fR, it will be traced.
+
 .SH BUGS
 It has most of the bugs stated in
 .BR strace(1) .
@@ -212,6 +259,8 @@
 
 .SH AUTHOR
 Juan Cespedes <cespedes@debian.org>
+.br
+Petr Machata <pmachata@redhat.com>
 
 .SH "SEE ALSO"
 .BR strace(1) ,