'\" t .\" Title: latrace .\" Author: Jiri Olsa .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: March 2017 .\" Manual: \ \& .\" Source: \ \& 0.5.11 .\" Language: English .\" .TH "LATRACE" "1" "March 2017" "\ \& 0\&.5\&.11" "\ \&" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" latrace \- LD_AUDIT 2\&.4+ libc frontend .SH "SYNOPSIS" .sp latrace [\-snltfvhiBdISbcCyYLpoaNADVTFERq] command [arg \&... ] .SH "DESCRIPTION" .sp The latrace tracer is able to run a command and display its dynamic library calls using a LD_AUDIT libc feature, available from libc version 2\&.4 onward\&. It is also capable to measure and display various statistics of dynamic calls\&. See the section called \(lqDISCUSSION\(rq for more details\&. .sp If the header file with functions\*(Aq declarations is provided, latrace will display functions\(cqs arguments\&. The header file file syntax is similar to the C language, with several exceptions See the section called \(lqHEADERS\(rq for more details\&. .sp The latrace by default fully operates inside of the traced program\&. However another "pipe mode" is available to move the main work to the tracer \- the latrace binary\&. See the section called \(lqPIPE mode\(rq for more details\&. .sp The latrace use is similar to strace(1) and ltrace(1)\&. .SH "OPTIONS" .PP \-l, \-\-libs lib1[,lib2,\&...] .RS 4 audit from and to lib1, lib2 \&... .RE .PP \-t, \-\-libs\-to lib1[,lib2,\&...] .RS 4 audit to lib1, lib2 \&... .RE .PP \-f, \-\-libs\-from lib1[,lib2,\&...] .RS 4 audit from lib1, lib2 \&... .RE .PP \-s, \-\-sym sym1[,sym2,\&...] .RS 4 audit symbols sym1, sym2 \&... .RE .PP \-n, \-\-sym\-omit sym1[,sym2,\&...] .RS 4 omit symbols sym1, sym2 \&... .RE .PP \-L, \-\-lib\-subst s1[,s2,\&...] .RS 4 objsearch LD_AUDIT interface (See the section called \(lqOBJSEARCH\(rq) .RE .PP \-c, \-\-counts .RS 4 display statistics counts of symbols \- implies pipe mode (see the section called \(lqPIPE mode\(rq) an no symbol output is displayed .RE .PP \-C, \-\-sort\-counts stat .RS 4 implies \-c, plus sort the statistics by stat with following values: time,per,call,ucall,lib,sym (default is call) .RE .PP \-p, \-\-pipe .RS 4 use pipe to latrace process to send audit data (see the section called \(lqPIPE mode\(rq) .RE .PP \-N, \-\-conf .RS 4 config file (see the section called \(lqCONFIG\(rq) .RE .PP \-A, \-\-enable\-args .RS 4 enable arguments output (definitions from /etc/latrace\&.conf) .RE .PP \-D, \-\-detail\-args .RS 4 display struct arguments in more detail .RE .PP \-a, \-\-args file .RS 4 specify arguments definition file, implies \-A (without the default definition file of course) .RE .PP \-y, \-\-framesize number .RS 4 framesize for storing the stack before pltexit (default 100) .RE .PP \-Y, \-\-no\-framesize\-check .RS 4 disable framesize check .RE .PP \-F, \-\-no\-follow\-fork .RS 4 dont follow fork calls (childs)\&. This is just supressing the latrace output from new childs\&. The nature of the \fBLD_AUDIT\fR feature prevents to disable it completely\&. .RE .PP \-E, \-\-no\-follow\-exec .RS 4 dont follow exec calls .RE .PP \-S, \-\-timestamp .RS 4 display timestamp for each symbol .RE .PP \-b, \-\-flow\-below sym1[,sym2,\&...] .RS 4 display flow for sym1, sym2 \&... .RE .PP \-I, \-\-no\-indent\-sym .RS 4 do no indent symbols based on the their stack depth .RE .PP \-i, \-\-indent\-sym indent_size .RS 4 indent size specification in indent_size .RE .PP \-B, \-\-braces .RS 4 allways display \fI{\fR \fI}\fR for the around the symbol body .RE .PP \-d, \-\-demangle .RS 4 C++ demangle symbols on the output .RE .PP \-T, \-\-hide\-tid .RS 4 dont display thread id .RE .PP \-o, \-\-output file .RS 4 store output to file .RE .PP \-R, \-\-ctl\-config .RS 4 controled config feature .RE .PP \-q, \-\-disable .RS 4 run with disabled auditing .RE .PP \-v, \-\-verbose .RS 4 verbose output .RE .PP \-V, \-\-version .RS 4 display version .RE .PP \-h, \-\-help .RS 4 display help .RE .SH "EXAMPLES" .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The simplest way to run latrace is like this: .sp .if n \{\ .RS 4 .\} .nf latrace cat .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} To see the argument values specified by default config file run: .sp .if n \{\ .RS 4 .\} .nf latrace \-A cat .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Same as above but using the pipe mode to get all the end symbols printed: .sp .if n \{\ .RS 4 .\} .nf latrace \-Ap cat .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} To see the argument values specified by specified config file run: .sp .if n \{\ .RS 4 .\} .nf latrace \-a latrace\&.conf cat .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} To get output only for specified symbol (eg\&. read and write) run: .sp .if n \{\ .RS 4 .\} .nf latrace \-A \-s read,write cat .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} To get flow under the specified symbol (eg\&. sysconf) run: .sp .if n \{\ .RS 4 .\} .nf latrace \-b sysconf kill .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} To get output only for specified library (eg\&. libproc) run: .sp .if n \{\ .RS 4 .\} .nf latrace \-Al libproc w .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} To get symbol statistics run: .sp .if n \{\ .RS 4 .\} .nf latrace \-c ls .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} To get symbol statistics sorted by time run: .sp .if n \{\ .RS 4 .\} .nf latrace \-C time ls .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} To get output stored to the text file run: .sp .if n \{\ .RS 4 .\} .nf latrace \-o output\&.latrace ls .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} To change the libkrava1\&.so dependency to the libkrava2\&.so run one of these: .sp .if n \{\ .RS 4 .\} .nf latrace \-L krava1%krava2 ex .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf latrace \-L krava1~libkrava2\&.so ex .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf latrace \-L libkrava1\&.so=libkrava2\&.so ex .fi .if n \{\ .RE .\} .RE .SH "DISCUSSION" .SS "NAMES CHECK" .sp For options \fB"\-l \-t \-f \-s \-n \-b"\fR the \fB*\fR symbol can be used to switch to the substring search\&. If it is not specified, the exact search for the name is done\&. .sp Examples: .sp .if n \{\ .RS 4 .\} .nf \-s "*krava" checks for symbols with "krava" substring\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-s "krava" checks only for "krava" symbol .fi .if n \{\ .RE .\} .SS "LD_AUDIT" .sp This is just a brief and vague description of the \fBLD_AUDIT\fR feature\&. For more information look to \fBrtld\-audit(7)\fR man done by Petr Baudis or study the glibc/latrace source code\&. Very brief explanation follows\&. .sp The libc dynamic linker audit feature allows to trace/audit program\(cqs symbols/libraries\&. The feature is enabled by the \fBLD_AUDIT\fR environment variable\&. This variable must contain path to the audit shared library\&. This audit library needs to follow specific interface\&. The interface functions will be then called by the dynamic linker appropriatelly\&. .sp The audit library needs to export following symbols (the "la_PLTENTER" and "la_PLTEXIT" names are architecture dependent)\&. .sp .if n \{\ .RS 4 .\} .nf "la_activity" "la_objsearch" "la_objopen" "la_preinit" "la_symbind32" "la_symbind64" "la_PLTENTER" "la_PLTEXIT" "la_objclose" .fi .if n \{\ .RE .\} .sp As for the latrace package the audit shared library is called libltaudit\&.so\&. .SS "OBJSEARCH" .sp The objsearch \fBLD_AUDIT\fR interface provide means for changing traced program shared object names/locations\&. The \-L option argument should have following form: .sp \fI\-L s1[,s2,\&...]\fR where sN is \fIsrc [=%~] dst\fR .sp The \fIsrc\fR is the source pattern/name and \fIdst\fR is the destination name/pattern\&. .TS tab(:); lt lt lt lt lt lt. T{ .sp = T}:T{ .sp Comparing src with the library name\&. If matched, replace the library name with dst\&. .if n \{\ .RS 4 .\} .nf library name \- /lib/krava1\&.so src \- /lib/krava1\&.so dst \- /lib/krava2\&.so .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf final library name \- /lib/krava2\&.so .fi .if n \{\ .RE .\} .sp T} T{ .sp % T}:T{ .sp Looking for the src in the library name\&. If found, replace the src with dst part\&. .if n \{\ .RS 4 .\} .nf library name \- /lib/krava1\&.so src \- krava1 dst \- krava2 .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf final library name \- /lib/krava2\&.so .fi .if n \{\ .RE .\} .sp T} T{ .sp ~ T}:T{ .sp Looking for the src in the library name\&. If found, replace the library name with dst\&. .if n \{\ .RS 4 .\} .nf library name \- /lib/krava1\&.so src \- krava1 dst \- /lib/krava2\&.so .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf final library name \- /lib/krava2\&.so .fi .if n \{\ .RE .\} .sp T} .TE .sp 1 .SS "PIPE mode" .sp The \fBlatrace\fR can work in two modes\&. The first one \fBnative\fR does does the output directly in the traced program process\&. The other one, \fBpipe\fR mode use the IPC fifo mechanism to send the data from the traced process to the latrace process\&. The latrace process is then responsible for the output\&. Using the pipe mode you loose the traced program standard output context with printed symbols\&. .sp By using the \fBpipe\fR mode, the latrace is not dependent on the trace program usage/manipulation of the standard output descriptor\&. Also the symbol statistics counts \fI\-c, \-C options\fR use the \fBpipe\fR mode to transfer symbol information to the latrace binary, and the latrace binary does the counts at the end\&. .SS "CONFIG" .sp The latrace provide possibility to enable/disable some of the options by means of configuration file\&. Some of the options are linked to the command line arguments some of them are not\&. When latrace starts the global configuration file is read\&. This file is usually being placed in here: .sp .if n \{\ .RS 4 .\} .nf /etc/latrace\&.d/latrace\&.conf .fi .if n \{\ .RE .\} .sp Having default values read from this file, user can overload any of them by command line options or by supling another config file via \fB\-N, \-\-conf\fR option\&. .sp The configuration file syntax is roughly: .sp .if n \{\ .RS 4 .\} .nf INCLUDE OPTIONS { OPTION1 = VALUE OPTION2 = YES|NO \&.\&.\&. OPTIONN = VALUE } # comment .fi .if n \{\ .RE .\} .sp \fBConfiguration file options\fR .PP HEADERS = FILE .RS 4 \-a, \-\-args .RE .PP INDENT_SYM = VALUE .RS 4 \-i, \-\-indent\-sym .RE .PP PIPE = BOOL .RS 4 \-p, \-\-pipe .RE .PP TIMESTAMP = BOOL .RS 4 \-S, \-\-timestamp .RE .PP FRAMESIZE = VALUE .RS 4 \-y, \-\-framesize .RE .PP FRAMESIZE_CHECK = BOOL .RS 4 \-Y, \-\-no\-framesize\-check .RE .PP HIDE_TID = BOOL .RS 4 \-T, \-\-hide\-tid .RE .PP FOLLOW_FORK = BOOL .RS 4 \-F, \-\-no\-follow\-fork .RE .PP FOLLOW_EXEC = BOOL .RS 4 \-E, \-\-no\-follow\-exec .RE .PP DEMANGLE = BOOL .RS 4 \-d, \-\-demangle .RE .PP BRACES = BOOL .RS 4 \-B, \-\-braces .RE .PP ENABLE_ARGS = BOOL .RS 4 \-A, \-\-enable\-args .RE .PP DETAIL_ARGS = BOOL .RS 4 \-D, \-\-detail\-args .RE .PP OUTPUT_TTY = FILE .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} stores tracee terminal output to the file .RE .RE .PP LIBS = LIB1[,LIB2,\&...] .RS 4 \-l, \-\-libs .RE .PP LIBS_TO = LIB1[,LIB2,\&...] .RS 4 \-t, \-\-libs\-to .RE .PP LIBS_FROM = LIB1[,LIB2,\&...] .RS 4 \-f, \-\-libs\-from .RE .PP SYM = SYM1[,SYM2,\&...] .RS 4 \-s, \-\-sym .RE .PP SYM_OMIT = SYM1[,SYM2,\&...] .RS 4 \-n, \-\-sym\-omit .RE .PP SYM_BELOW = SYM1[,SYM2,\&...] .RS 4 \-b, \-\-flow\-below .RE .PP SYM_NOEXIT = SYM1[,SYM2,\&...] .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} symbols which do no run exit callback (plt_exit) .RE .RE .PP ARGS_STRING_POINTER_LENGTH = BOOL .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} function arguments \- display string length and pointer value .RE .RE .SS "HEADERS" .sp The latrace header file allows user to define symbols as an classic C functions with arguments\&. Argument names will be displayed together with values as the latrace output\&. The more arguments are defined, the more performance and memory penalties should be expected\&. .sp The package is delivered with several predefined header files for the most commonly used functions\&. List of the glibc header files used follows (the list mostly follows the ltrace header files list, and author is willing to update it according to the needs) .sp .if n \{\ .RS 4 .\} .nf ctype\&.h dirent\&.h dlfcn\&.h fcntl\&.h getopt\&.h inet\&.h ioctl\&.h libintl\&.h libio\&.h locale\&.h misc\&.h mman\&.h ncurses\&.h netdb\&.h pthread\&.h pwd\&.h resource\&.h signal\&.h socket\&.h stat\&.h stdio\&.h stdlib\&.h string\&.h syslog\&.h term\&.h termios\&.h time\&.h typedefs\&.h unistd\&.h utmp\&.h wait\&.h .fi .if n \{\ .RE .\} .sp The latrace header files are usually stored under directory: .sp .if n \{\ .RS 4 .\} .nf /etc/latrace\&.d/headers/ .fi .if n \{\ .RE .\} .sp User can specify single header file using command line option or configuration file\&. This file then can include other needed headers\&. As already mentioned, the latrace config file syntax lightly follows the C language syntax\&. Following part describes the latrace config file language\&. .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Several \fBPOD types\fR (plain old data), are hardcoded in latrace\&. Size of those arguments is determined by the sizeof macro\&. The list follows\&. .sp .if n \{\ .RS 4 .\} .nf void char u_char short u_short int u_int long u_long llong u_llong # (long long) float double .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The \fBtypedef\fR keyword allows to specify new type based on the already existing one (POD or typedefed)\&. Eventhough there\(cqs a way for multiple pointer layers in the type definition (*), only one is taken\&. .sp .if n \{\ .RS 4 .\} .nf typedef base_type new_type; typedef base_type * new_type; typedef base_type ** new_type; .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBComments\fR follow the C style /\e* \e*/ logic\&. .sp /\e* comments \e*/ .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The \fBinclude\fR keyword allows to include another config file\&. .sp #include "filename" .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The \fBstruct\fR keyword allows to define the structure\&. The syntax folows following grammar rules\&. .sp .if n \{\ .RS 4 .\} .nf START:: struct NAME { STRUCT_DEF }; STRUCT_DEF:: DEF | EMPTY DEF:: NAME NAME | NAME \*(Aq*\*(Aq NAME | struct NAME NAME | struct NAME \*(Aq*\*(Aq NAME NAME:: [\-0\-9a\-zA\-Z_]+ .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The \fBfunction\fR definition follows following syntax (DEF and NAME are the same as for struct definition)\&. .sp .if n \{\ .RS 4 .\} .nf START:: DEF \*(Aq(\*(Aq ARGS \*(Aq)\*(Aq \*(Aq;\*(Aq ARGS:: ARGS \*(Aq,\*(Aq DEF | DEF | EMPTY .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} The \fBenum\fR definition follows following syntax (NAME is same as for struct definition)\&. .sp .if n \{\ .RS 4 .\} .nf START:: ENUM NAME \*(Aq{\*(Aq ENUM_DEF \*(Aq}\*(Aq \*(Aq;\*(Aq ENUM_DEF:: ENUM_DEF \*(Aq,\*(Aq ENUM_ELEM | ENUM_ELEM ENUM_ELEM:: NAME \*(Aq=\*(Aq NAME | NAME .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Example of a simple latrace config file\&. .sp .if n \{\ .RS 4 .\} .nf \-\-\-[ cut here ]\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- enum krava { krava1 = 1, krava2, krava3 = 100 }; #include "krava\&.conf" typedef u_int pid_t; struct ex_st { pid_t p; int cnt; char *name; }; int f1(pid_t p, struct ex_st *k); int f2(char* name, struct ex_st k, int k = krava); struct ex_st* f3(pid_t *p, struct ex_st k); \-\-\-[ cut here ]\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Arrays are not supported yet, so there\(cqs no way to define some structures\&. For such a structures use void* type where the structure argu\- ment is passed by pointer\&. If it is passed by value, there\(cqs no workaround so far (aside from filling the structure body with POD types up to the actual length of the structure :)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Variable argument lists (va_list/\&...) are not supported yet\&. The function definition needs to stop before the first variable argument list argument\&. .RE .SH "PORTS" .sp The latrace should work on any glibc system with LD_AUDIT support\&. However arguments details are architecture specific and need special support inside latrace itself\&. .sp Author is willing to port the latrace to any architecture, as long as he got an access to corresponding system\&. Currently functional ports are: .TS tab(:); lt lt lt lt lt lt. T{ .sp \fBx86\fR T}:T{ .sp ok T} T{ .sp \fBx86_64\fR T}:T{ .sp ok T} T{ .sp \fBarm\fR T}:T{ .sp ok T} .TE .sp 1 .SH "BUGS" .sp MANY, plz report bugs to <\m[blue]\fBlatrace@lists\&.fedorahosted\&.org\fR\m[]\&\s-2\u[1]\d\s+2> or <\m[blue]\fBolsajiri@gmail\&.com\fR\m[]\&\s-2\u[2]\d\s+2>\&. .sp You can also visit the \m[blue]\fBhttp://people\&.redhat\&.com/jolsa/latrace/\fR\m[] page to see the latest release notes information\&. .sp LD_AUDIT related glibc bugs: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBBug 7055 (no longer reproducible)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBBug 9893 (FIXED in 2\&.10)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBBug 3924 (FIXED in 2\&.7\-2)\fR .RE .SH "AUTHOR" .sp Jiri Olsa <\m[blue]\fBolsajiri@gmail\&.com\fR\m[]\&\s-2\u[2]\d\s+2> .SH "CONTRIBUTORS" .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Nix <\m[blue]\fBnix@esperi\&.org\&.uk\fR\m[]\&\s-2\u[3]\d\s+2> .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Akos Pasztory <\m[blue]\fBakos\&.pasztory@gmail\&.com\fR\m[]\&\s-2\u[4]\d\s+2> .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Artur Skawina <\m[blue]\fBart\&.08\&.09@gmail\&.com\fR\m[]\&\s-2\u[5]\d\s+2> .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Dr\&. David Alan Gilbert <\m[blue]\fBdavid\&.gilbert@linaro\&.org\fR\m[]\&\s-2\u[6]\d\s+2> .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Sebastian Pipping <\m[blue]\fBsping@gentoo\&.org\fR\m[]\&\s-2\u[7]\d\s+2> .RE .SH "LICENSE" .sp This is free software, distributed under the \fBGPLv3\fR license\&. .SH "SEE ALSO" .sp \fBstrace(1), ltrace(1)\fR .SH "AUTHOR" .PP \fBJiri Olsa\fR <\&olsajiri@gmail\&.com\&> .RS 4 Author. .RE .SH "NOTES" .IP " 1." 4 latrace@lists.fedorahosted.org .RS 4 \%mailto:latrace@lists.fedorahosted.org .RE .IP " 2." 4 olsajiri@gmail.com .RS 4 \%mailto:olsajiri@gmail.com .RE .IP " 3." 4 nix@esperi.org.uk .RS 4 \%mailto:nix@esperi.org.uk .RE .IP " 4." 4 akos.pasztory@gmail.com .RS 4 \%mailto:akos.pasztory@gmail.com .RE .IP " 5." 4 art.08.09@gmail.com .RS 4 \%mailto:art.08.09@gmail.com .RE .IP " 6." 4 david.gilbert@linaro.org .RS 4 \%mailto:david.gilbert@linaro.org .RE .IP " 7." 4 sping@gentoo.org .RS 4 \%mailto:sping@gentoo.org .RE