blob: 16148733c19f8a0fd5c202363d4bba3414048ee9 [file] [log] [blame]
Petr Machatac11c01e2012-10-19 01:51:06 +02001-*-org-*-
Petr Machata01b10e12013-10-23 00:54:47 +02002* Version 0.8.0
Petr Machata51788252013-10-24 15:01:08 +02003** Prototype libraries
4 - Each DSO can now ship an ltrace config file (called prototype
5 library) that ltrace will open when that DSO is loaded to process
6 image. See ltrace(1) for details.
7
8 - ltrace.conf is no longer part of installation tarball. Instead,
9 we now ship libc.so.conf, libm.so.conf, libacl.so.conf, and
10 syscalls.conf. Those are now istalled to /usr/share/ltrace by
11 default. /etc/ltrace.conf and $HOME/.ltrace.conf are still
12 loaded if present, and can contain arbitrary user configuration.
13
14 - The option -F was retrofitted to be a colon-separated list of
15 prototype libraries, and directories to look for prototype
16 libraries in. On Linux, ltrace looks into XDG_CONFIG_HOME,
17 XDG_CONFIG_DIRS, and /usr/share/ltrace as well.
18
Petr Machata64150342013-11-14 22:53:51 +010019 - Wide character strings are supported in prototypes. Use "string"
20 lens as usual, but use array of integers as underlying type.
21 libc.so.conf now contains prototypes of wide character functions.
22
23 - Sole void function parameter such as in the following example, is
24 now considered obsolete:
25
26 | int fork(void); |
27
28 This use is still accepted, taken to mean "hide(int)", but
29 produces a warning, and will be removed in future.
Petr Machatadbd61752013-11-12 00:14:23 +010030
Petr Machata01b10e12013-10-23 00:54:47 +020031** Architectural support
32 - MIPS and MIPSel are now handled by the same backend.
Petr Machatad9884832014-02-05 02:46:07 +010033 - ARMv6, ARMv7 and ARMv8 (AArch64) are supported, including full
34 fetch backend. ARMv8 backend doesn't support tracing of 32-bit
35 binaries, as currently there's no 32-bit userspace available for
36 ARM64 processors.
Petr Machata01b10e12013-10-23 00:54:47 +020037 - Imagination Technologies Meta is now supported.
Petr Machatadbd61752013-11-12 00:14:23 +010038
39 - On Linux, tracing of IFUNC symbols is supported. On i386,
40 x86_64, ppc32 with secure PLT and ppc64, IRELATIVE PLT slots are
41 traced as well.
Petr Machata01b10e12013-10-23 00:54:47 +020042
43** -w output now shows full library path
44 The output format is similar to glibc's backtrace_symbols, e.g.:
45 > /bin/ls(_init+0x19be) [0x40398e]
46 > /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f50cbc3676d]
47 > /bin/ls(_init+0x25fd) [0x4045cd]
48
Petr Machata01b10e12013-10-23 00:54:47 +020049* Version 0.7.3 [2013-09-15 Sun]
50** Bugfixes
51*** [MIPS] Fix build on mips big endian
52 This bug caused messages like:
53 | Making all in mips
54 | /bin/sh: line 17: cd: mips: No such file or directory
55*** [MIPS] Fix SIGSEGV on mips big endian
56 This bug caused runtime messages like:
57 | [0x4000000] --- SIGSEGV (Segmentation fault) ---
58 | [0xffffffff] +++ killed by SIGSEGV +++
59*** Fix build with CLANG on FREEBSD
60
Petr Machata4b1d1622012-12-07 16:25:22 +010061* Version 0.7.2 [2012-12-07 Fri]
Petr Machata09654202012-12-05 17:07:21 +010062** Bugfixes
Petr Machata2e71fef2012-12-05 12:07:05 +010063*** (Again) detect VDSO entry in r_debug linkmap with non-empty name
64 This bug caused messages like:
65 | Couldn't determine base address of linux-vdso32.so.1
66 | Couldn't load ELF object linux-vdso32.so.1: No such file or directory
Petr Machata036fb182012-12-04 13:38:08 +010067*** Fix building with libunwind 1.1
Petr Machata09654202012-12-05 17:07:21 +010068*** Fix prototype lookup for -x symbols from shared libraries
69 Ltrace was unable to find prototypes of static symbols in shared
70 libraries. It changed the symbol name internally to the form
71 name@libfoo.so. Thus mangled, symbols were not found in config
72 files.
Petr Machata036fb182012-12-04 13:38:08 +010073
Petr Machata4b1d1622012-12-07 16:25:22 +010074* Version 0.7.1 [2012-11-29 Thu]
Petr Machata61b4c492012-11-18 21:54:54 +010075** Bugfixes
Petr Machata61b4c492012-11-18 21:54:54 +010076*** ltrace.conf.5 is now installed to man5 as it should be
Petr Machata7467b942012-11-20 02:36:56 +010077*** [PowerPC] A header file necessary for building is now shipped
78*** [MIPS] Work around duplicate symbol request bug
Petr Machata61b4c492012-11-18 21:54:54 +010079 This fixes the ltrace abort:
80 | ./ltrace: proc.c: 755: breakpoint_for_symbol: Assertion `bp->libsym == ((void *)0)' failed.
81
82*** Detect VDSO entry in r_debug linkmap with non-empty name
83 This bug caused messages like:
84 | Couldn't determine base address of linux-vdso32.so.1
85 | Couldn't load ELF object linux-vdso32.so.1: No such file or directory
86
87*** Temporary files are wiped properly after the test suite has been run
88*** Parsing typedefs with common prefix now works as it should
89 More exactly, if there were typedefs X and XY (in this order), and
90 a reference was made to X, ltrace would match XY instead.
91
92** Cofiguration Files
93*** The following prototypes in ltrace.conf were added or updated
Petr Machata528d1b22012-11-20 02:42:18 +010094 __ctype_get_mb_cur_max, __endmntent, __getmntent_r, __setmntent,
95 a64l, abort, abs, addmntent, getmntent_r, hasmntopt, inet_addr,
96 inet_aton, inet_lnaof, inet_makeaddr, inet_netof, inet_network,
97 inet_ntoa, kill, l64a, labs, memcpy, memmove, setlocale,
98 sigaction, sigaddset, sigandset, sigdelset, sigemptyset,
99 sigfillset, sigisemptyset, sigismember, signal, sigorset,
100 sigpending, sigprocmask, sigsuspend.
Petr Machata61b4c492012-11-18 21:54:54 +0100101
102*** Duplicate typedefs are now guarded against
Petr Machata8c98e402012-11-19 01:30:31 +0100103*** It's now possible to define recursive structures
104 Please read ltrace.conf(5) man page, chapter "recursive
105 structures", to learn about this new feature.
Petr Machata61b4c492012-11-18 21:54:54 +0100106
Petr Machataec4ab252012-11-20 02:00:16 +0100107*** New lens "bitvec" is available
108 This allows displaying various data types as bit vectors. Please
109 read ltrace.conf(5) to learn more.
110
Petr Machataaa933f22012-11-20 02:09:15 +0100111*** Octal lens renamed to "oct"
112 For reasons of consistency with "hex". "octal" is still valid and
113 will be for forseeable future.
114
Petr Machataf1977272012-11-29 15:49:16 +0100115*** The hex lens can now format floating point arguments
116
Petr Machata4b1d1622012-12-07 16:25:22 +0100117* Version 0.7.0 [2012-11-09 Fri]
Petr Machata103d0412012-10-25 14:38:52 +0200118** Tracing
Petr Machatac11c01e2012-10-19 01:51:06 +0200119*** Full support for tracing multi-threaded processes
Petr Machata103d0412012-10-25 14:38:52 +0200120
Petr Machata3de5e362012-10-23 17:35:57 +0200121 Ltrace now understands thread groups, and it stops all threads
122 before manipulating breakpoints. The downside is that performance
123 of multi-threaded processes is rather bad, because handling any
124 event implies stopping the whole job. The upside is that
125 individual threads don't get random SIGILL's and SIGSEGV's and
126 events are not missed.
Petr Machata103d0412012-10-25 14:38:52 +0200127
Petr Machatac11c01e2012-10-19 01:51:06 +0200128*** Support for tracing inter-library calls
Petr Machata103d0412012-10-25 14:38:52 +0200129
Petr Machatac11c01e2012-10-19 01:51:06 +0200130 -e and -x were extended to allow library selectors. See the man
131 page for details.
Petr Machata103d0412012-10-25 14:38:52 +0200132
Petr Machatac11c01e2012-10-19 01:51:06 +0200133*** Better support for parameter passing ("fetch backend")
Petr Machata103d0412012-10-25 14:38:52 +0200134
Petr Machata9265da42012-11-02 02:56:08 +0100135 This version brings more complete support for parameter passing,
Petr Machatac11c01e2012-10-19 01:51:06 +0200136 including passing structures in registers, passing double on i386,
Petr Machata9265da42012-11-02 02:56:08 +0100137 and other edge cases that were not handled correctly before. The
138 following architectures now have implementation of fetch backend:
139 i386, x86_64, ppc, ppc64, ia64, s390, s390x, m68k.
Petr Machata103d0412012-10-25 14:38:52 +0200140
Petr Machata3de5e362012-10-23 17:35:57 +0200141*** Awareness of deny_ptrace SELinux boolean
Petr Machata103d0412012-10-25 14:38:52 +0200142
Petr Machata3de5e362012-10-23 17:35:57 +0200143 The deny_ptrace boolean denies all processes from being able to
144 use ptrace to manipulate other processes. Ltrace now understands
145 that this boolean exists, and recommends turning it off, if it is
146 on and ltrace fails to attach to a process.
Petr Machata103d0412012-10-25 14:38:52 +0200147
Petr Machatac11c01e2012-10-19 01:51:06 +0200148*** Limited support for tracing returns from tail call functions
149*** -e, -x and -l selectors now allow using globs and regular expressions
Petr Machata103d0412012-10-25 14:38:52 +0200150
Petr Machata2ee358f2012-10-29 15:12:48 +0100151 See the man page for details of the selector syntax. This changes
152 the way -x and -l behave with respect to tracing libraries opened
153 by dlopen:
154
155 - In 0.6.0, only those -x symbols that were unmatched in main
156 binary were used to search through symbol table of libraries
157 opened with dlopen. In 0.7.0, -x and -e are applied uniformly
158 to each mapped binary: the main binary, dependent DSO's, and any
159 dlopened libraries.
160
161 - In 0.6.0, -l argument was a filename to open and inspect. In
162 0.7.0, -l is a glob expression matched against each mapped
163 binary.
Petr Machata103d0412012-10-25 14:38:52 +0200164
Petr Machata40de7972012-11-02 02:52:58 +0100165*** -g command line option dropped
166
167 This option was introduced in 0.6.0 with the meaning identical to
168 -L, which should be used instead.
169
Petr Machatac11c01e2012-10-19 01:51:06 +0200170*** Test suite can now be run under valgrind
Petr Machata103d0412012-10-25 14:38:52 +0200171
Petr Machatac11c01e2012-10-19 01:51:06 +0200172 Use --enable-valgrind to turn this on.
Petr Machata103d0412012-10-25 14:38:52 +0200173
Petr Machata3de5e362012-10-23 17:35:57 +0200174*** [ppc] Support both BSS and secure PLTs for 32-bit processes
175*** [mips] Implement software singlestepping
176*** [mips] Add support for CPIC main programs
Petr Machataadbf4672012-10-19 01:52:52 +0200177*** Support tracing PIE binaries
Petr Machata103d0412012-10-25 14:38:52 +0200178
Petr Machata3de5e362012-10-23 17:35:57 +0200179** Configuration Files
Petr Machata103d0412012-10-25 14:38:52 +0200180
Petr Machatac11c01e2012-10-19 01:51:06 +0200181*** New abstraction: parameter pack
Petr Machata103d0412012-10-25 14:38:52 +0200182
Petr Machata69a12f22012-11-05 23:42:21 +0100183 Parameter packs describe zero or more of actual arguments, whose
184 type can be determined in runtime. The only parameter pack
185 currently implemented is "format" for decoding printf-style format
186 strings.
Petr Machata9265da42012-11-02 02:56:08 +0100187
188 In future, it should be relatively straightforward to add more
Petr Machata69a12f22012-11-05 23:42:21 +0100189 parameter packs for functions like execl, and others.
Petr Machata103d0412012-10-25 14:38:52 +0200190
Petr Machatac11c01e2012-10-19 01:51:06 +0200191*** New expression: zero
Petr Machata103d0412012-10-25 14:38:52 +0200192
Petr Machatac11c01e2012-10-19 01:51:06 +0200193 When used in array length expressions, it means "this array ends
Petr Machata69a12f22012-11-05 23:42:21 +0100194 at the first element with zero value". C strings are essentially
Petr Machatac11c01e2012-10-19 01:51:06 +0200195 array(char, zero)*.
Petr Machata103d0412012-10-25 14:38:52 +0200196
Petr Machata3de5e362012-10-23 17:35:57 +0200197*** Lenses: change the way that underlying type is rendered
Petr Machata103d0412012-10-25 14:38:52 +0200198
Petr Machata3de5e362012-10-23 17:35:57 +0200199 Lenses are used similarly to parametrized types, e.g.:
200 | void func(lens(int)); |
Petr Machata103d0412012-10-25 14:38:52 +0200201
Petr Machatac11c01e2012-10-19 01:51:06 +0200202**** octal
Petr Machata103d0412012-10-25 14:38:52 +0200203
Petr Machatac11c01e2012-10-19 01:51:06 +0200204 "octal", which used to be a separate type, is now lens, which can
Petr Machata3de5e362012-10-23 17:35:57 +0200205 be used to render any underlying type in base 8. Plain "octal"
Petr Machata9265da42012-11-02 02:56:08 +0100206 is still valid and means the same thing as "octal(int)".
Petr Machata103d0412012-10-25 14:38:52 +0200207
Petr Machatac11c01e2012-10-19 01:51:06 +0200208**** hex, hide, bool
Petr Machata103d0412012-10-25 14:38:52 +0200209
Petr Machatac11c01e2012-10-19 01:51:06 +0200210 Similarly, "hex" lens was introduced to format as base 16.
211 "hide" was introduced to conceal given argument. "bool" lens was
Petr Machata3de5e362012-10-23 17:35:57 +0200212 added to format objects as either true, or false.
Petr Machata103d0412012-10-25 14:38:52 +0200213
Petr Machatac11c01e2012-10-19 01:51:06 +0200214**** enum
Petr Machata103d0412012-10-25 14:38:52 +0200215
Petr Machata3de5e362012-10-23 17:35:57 +0200216 "enum" became lens as well. Because enum already uses
217 parentheses to denote the list of enumeration values, the
218 underlying type is selected by square brackets:
Petr Machata9265da42012-11-02 02:56:08 +0100219
Petr Machata3de5e362012-10-23 17:35:57 +0200220 | void func(enum[short](RED,GREEN,BLUE)); |
Petr Machata103d0412012-10-25 14:38:52 +0200221
Petr Machata3de5e362012-10-23 17:35:57 +0200222**** string
Petr Machata103d0412012-10-25 14:38:52 +0200223
Petr Machata3de5e362012-10-23 17:35:57 +0200224 "string" was also turned to lens. The argument can be either a
225 char*, or pointer to array of char, or array of char. The latter
226 is useful in cases like the following:
Petr Machata9265da42012-11-02 02:56:08 +0100227
Petr Machata3de5e362012-10-23 17:35:57 +0200228 | void func_struct_2(struct(string(array(char, 6)))); |
Petr Machata103d0412012-10-25 14:38:52 +0200229
Petr Machata2bf88932012-10-27 20:17:50 +0200230*** Misspelling of "int" as "itn" temporarily accepted, but deprecated
231
232 Pre-0.7 ltrace shipped a buggy version of ltrace.conf that
233 contained the following prototype:
234
235 | itn acl_valid(addr); |
236
237 To support extant versions of ltrace.conf, that use is now
238 considered valid, and "itn" is a synonym of "int". It is however
239 deprecated, and will produce a warning in future.
240
241*** Using void as top-level function argument now deprecated
Petr Machata103d0412012-10-25 14:38:52 +0200242
Petr Machata3de5e362012-10-23 17:35:57 +0200243 Functions that take no arguments shouldn't pretend to take one
Petr Machata2bf88932012-10-27 20:17:50 +0200244 parameter of void type. For example the following:
Petr Machata103d0412012-10-25 14:38:52 +0200245
Petr Machata2bf88932012-10-27 20:17:50 +0200246 | int fork(void); |
Petr Machata103d0412012-10-25 14:38:52 +0200247
Petr Machata2bf88932012-10-27 20:17:50 +0200248 ... should be declared like this:
Petr Machata103d0412012-10-25 14:38:52 +0200249
Petr Machata2bf88932012-10-27 20:17:50 +0200250 | int fork(); |
Petr Machata103d0412012-10-25 14:38:52 +0200251
Petr Machata2bf88932012-10-27 20:17:50 +0200252 To support extant versions of ltrace.conf, that use is now
253 considered valid. It is however deprecated, and will produce a
254 warning in future.
Petr Machata103d0412012-10-25 14:38:52 +0200255
Petr Machata2bf88932012-10-27 20:17:50 +0200256*** Using void to hide one argument is now obsolete
Petr Machata103d0412012-10-25 14:38:52 +0200257
Petr Machata2bf88932012-10-27 20:17:50 +0200258 Ltrace needs to know the exact underlying type to decide what the
259 calling convention is. The use of void to mean "hide this
260 argument", such as the following example, is therefore obsolete:
261
262 | void func(void, array(int, arg1)); |
263
264 Instead, rewrite the prototype depending on the exact underlying
265 type:
266
Petr Machata69dfb092012-10-28 21:09:11 +0100267 | void func(hide(int), array(int, arg1)); |
268 | void func(hide(long), array(int, arg1)); |
Petr Machata2bf88932012-10-27 20:17:50 +0200269
270 To support extant versions of ltrace.conf, this use is still
271 accepted, and "void" is taken to mean "hide(int)". It is however
272 obsolete, produces a warning, and will be removed in future.
Petr Machata9ad2f192012-10-25 14:39:15 +0200273
274** Documentation
275
276*** New manual page ltrace.conf(5)
277*** README, INSTALL brought up to date
278*** New file CREDITS with a list of contributors
Petr Machata9265da42012-11-02 02:56:08 +0100279
Petr Machata3de5e362012-10-23 17:35:57 +0200280** Bugfixes
Petr Machata103d0412012-10-25 14:38:52 +0200281
Petr Machata3de5e362012-10-23 17:35:57 +0200282*** Fix detaching from a process
Petr Machata103d0412012-10-25 14:38:52 +0200283
Petr Machata3de5e362012-10-23 17:35:57 +0200284 Earlier, a process that ltrace detached from would sometimes die
285 of SIGSEGV, SIGTRAP, or SIGILL. These were caused by ltrace
286 detaching from the process just after that process hit a
287 breakpoint. Program counter would thus be left pointing
288 mid-instruction, or signals would be left pending.
Petr Machata103d0412012-10-25 14:38:52 +0200289
Petr Machata3de5e362012-10-23 17:35:57 +0200290*** Argument to -n is now checked for validity
291*** Fix tracing across exec in a stripped binary
Petr Machatac11c01e2012-10-19 01:51:06 +0200292*** [x86] ORIG_RAX/ORIG_EAX may not contain original syscall number
Petr Machata103d0412012-10-25 14:38:52 +0200293
Petr Machatac11c01e2012-10-19 01:51:06 +0200294 In cases where the system call shouldn't be restarted, these are
295 set to -1. In that case assume that the return is from the
296 topmost syscall. This gets rid of some "unexpected breakpoint"
297 messages on x86_64 and i386.
Petr Machata103d0412012-10-25 14:38:52 +0200298
Petr Machatac11c01e2012-10-19 01:51:06 +0200299*** [ppc] Fix races in tracing -e events in 64-bit processes
Petr Machata103d0412012-10-25 14:38:52 +0200300
Petr Machata854696c2012-11-02 02:56:40 +0100301 On ppc, the contents of PLT table change after the first call.
302 Ltrace used to handle this by reinserting the (now overwritten)
303 breakpoint after the function returns. This introduced a window
304 where calls to the same function from the same binary (either a
305 recursive calls, or calls from another thread) weren't traced.
306 This is fixed as of 0.7.0.
307
Petr Machatac11c01e2012-10-19 01:51:06 +0200308 As a side effect, events requested via -e now only hit when a PLT
309 call is made, which is consistent with other architectures.
Petr Machata103d0412012-10-25 14:38:52 +0200310
Petr Machata3de5e362012-10-23 17:35:57 +0200311*** [ppc] Allow stepping over lwarx instruction
Petr Machata103d0412012-10-25 14:38:52 +0200312
Petr Machata3de5e362012-10-23 17:35:57 +0200313** Known bugs
Petr Machata103d0412012-10-25 14:38:52 +0200314
Petr Machatac11c01e2012-10-19 01:51:06 +0200315*** [arm] Tracing is not supported at all on ARM
Petr Machata103d0412012-10-25 14:38:52 +0200316
Petr Machatac11c01e2012-10-19 01:51:06 +0200317 ltrace might work on older kernels, but no attempt was made to
318 fully support it. Newer kernels don't support PTRACE_SINGLESTEP,
319 which ltrace depends on. Before singlestepping is implemented in
320 software, ARM is considered unsupported.
321
Petr Machata4b1d1622012-12-07 16:25:22 +0100322* Version 0.6.0 [2011-01-06 Thu]
Petr Machata103d0412012-10-25 14:38:52 +0200323
Petr Machatac11c01e2012-10-19 01:51:06 +0200324** General Features
Petr Machata103d0412012-10-25 14:38:52 +0200325
Petr Machatac11c01e2012-10-19 01:51:06 +0200326*** Use autotools for building
327*** New option -b: disables output of signals received by the tracee
328*** New option -w: print stack trace of events
Petr Machata103d0412012-10-25 14:38:52 +0200329
Petr Machatac11c01e2012-10-19 01:51:06 +0200330 Pass --with-libunwind to configure to enable the feature. This
331 requires libunwind.
Petr Machata103d0412012-10-25 14:38:52 +0200332
Petr Machatac11c01e2012-10-19 01:51:06 +0200333*** Support tracing of symbols from libraries opened with dlopen
Petr Machata103d0412012-10-25 14:38:52 +0200334
Petr Machatac11c01e2012-10-19 01:51:06 +0200335 These symbols are selected by -x.
Petr Machata103d0412012-10-25 14:38:52 +0200336
Petr Machatac11c01e2012-10-19 01:51:06 +0200337** Architecture-specific Changes
Petr Machata103d0412012-10-25 14:38:52 +0200338
Petr Machatac11c01e2012-10-19 01:51:06 +0200339*** Various fixes for MIPS and PowerPC
340*** Support for ARM Thumb mode
341*** Implement fetching of 5th and further function arguments on s390
342*** Support fork/exec syscalls on 31-bit s390
343*** Support for float and double arguments on x86_64
344*** Fixes for return arguments (after '+') in nested calls on x86_64
Petr Machatae99af272012-10-26 00:29:52 +0200345
346* License
347-------------------------------------------------------------------------------
Petr Machatad9884832014-02-05 02:46:07 +0100348Copyright (C) 2012-2014 Petr Machata <pmachata@redhat.com>
Petr Machatae99af272012-10-26 00:29:52 +0200349This file is part of ltrace.
350
351ltrace is free software; you can redistribute it and/or modify it
352under the terms of the GNU General Public License as published by the
353Free Software Foundation; either version 2 of the License, or (at your
354option) any later version.
355
356ltrace is distributed in the hope that it will be useful, but WITHOUT
357ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
358FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
359for more details.
360
361You should have received a copy of the GNU General Public License
362along with this program. If not, see <http://www.gnu.org/licenses/>.