2 * Version 0.7.2 [2012-12-07 Fri]
4 *** (Again) detect VDSO entry in r_debug linkmap with non-empty name
5 This bug caused messages like:
6 | Couldn't determine base address of linux-vdso32.so.1
7 | Couldn't load ELF object linux-vdso32.so.1: No such file or directory
8 *** Fix building with libunwind 1.1
9 *** Fix prototype lookup for -x symbols from shared libraries
10 Ltrace was unable to find prototypes of static symbols in shared
11 libraries. It changed the symbol name internally to the form
12 name@libfoo.so. Thus mangled, symbols were not found in config
15 * Version 0.7.1 [2012-11-29 Thu]
17 *** ltrace.conf.5 is now installed to man5 as it should be
18 *** [PowerPC] A header file necessary for building is now shipped
19 *** [MIPS] Work around duplicate symbol request bug
20 This fixes the ltrace abort:
21 | ./ltrace: proc.c: 755: breakpoint_for_symbol: Assertion `bp->libsym == ((void *)0)' failed.
23 *** Detect VDSO entry in r_debug linkmap with non-empty name
24 This bug caused messages like:
25 | Couldn't determine base address of linux-vdso32.so.1
26 | Couldn't load ELF object linux-vdso32.so.1: No such file or directory
28 *** Temporary files are wiped properly after the test suite has been run
29 *** Parsing typedefs with common prefix now works as it should
30 More exactly, if there were typedefs X and XY (in this order), and
31 a reference was made to X, ltrace would match XY instead.
34 *** The following prototypes in ltrace.conf were added or updated
35 __ctype_get_mb_cur_max, __endmntent, __getmntent_r, __setmntent,
36 a64l, abort, abs, addmntent, getmntent_r, hasmntopt, inet_addr,
37 inet_aton, inet_lnaof, inet_makeaddr, inet_netof, inet_network,
38 inet_ntoa, kill, l64a, labs, memcpy, memmove, setlocale,
39 sigaction, sigaddset, sigandset, sigdelset, sigemptyset,
40 sigfillset, sigisemptyset, sigismember, signal, sigorset,
41 sigpending, sigprocmask, sigsuspend.
43 *** Duplicate typedefs are now guarded against
44 *** It's now possible to define recursive structures
45 Please read ltrace.conf(5) man page, chapter "recursive
46 structures", to learn about this new feature.
48 *** New lens "bitvec" is available
49 This allows displaying various data types as bit vectors. Please
50 read ltrace.conf(5) to learn more.
52 *** Octal lens renamed to "oct"
53 For reasons of consistency with "hex". "octal" is still valid and
54 will be for forseeable future.
56 *** The hex lens can now format floating point arguments
58 * Version 0.7.0 [2012-11-09 Fri]
60 *** Full support for tracing multi-threaded processes
62 Ltrace now understands thread groups, and it stops all threads
63 before manipulating breakpoints. The downside is that performance
64 of multi-threaded processes is rather bad, because handling any
65 event implies stopping the whole job. The upside is that
66 individual threads don't get random SIGILL's and SIGSEGV's and
67 events are not missed.
69 *** Support for tracing inter-library calls
71 -e and -x were extended to allow library selectors. See the man
74 *** Better support for parameter passing ("fetch backend")
76 This version brings more complete support for parameter passing,
77 including passing structures in registers, passing double on i386,
78 and other edge cases that were not handled correctly before. The
79 following architectures now have implementation of fetch backend:
80 i386, x86_64, ppc, ppc64, ia64, s390, s390x, m68k.
82 *** Awareness of deny_ptrace SELinux boolean
84 The deny_ptrace boolean denies all processes from being able to
85 use ptrace to manipulate other processes. Ltrace now understands
86 that this boolean exists, and recommends turning it off, if it is
87 on and ltrace fails to attach to a process.
89 *** Limited support for tracing returns from tail call functions
90 *** -e, -x and -l selectors now allow using globs and regular expressions
92 See the man page for details of the selector syntax. This changes
93 the way -x and -l behave with respect to tracing libraries opened
96 - In 0.6.0, only those -x symbols that were unmatched in main
97 binary were used to search through symbol table of libraries
98 opened with dlopen. In 0.7.0, -x and -e are applied uniformly
99 to each mapped binary: the main binary, dependent DSO's, and any
102 - In 0.6.0, -l argument was a filename to open and inspect. In
103 0.7.0, -l is a glob expression matched against each mapped
106 *** -g command line option dropped
108 This option was introduced in 0.6.0 with the meaning identical to
109 -L, which should be used instead.
111 *** Test suite can now be run under valgrind
113 Use --enable-valgrind to turn this on.
115 *** [ppc] Support both BSS and secure PLTs for 32-bit processes
116 *** [mips] Implement software singlestepping
117 *** [mips] Add support for CPIC main programs
118 *** Support tracing PIE binaries
120 ** Configuration Files
122 *** New abstraction: parameter pack
124 Parameter packs describe zero or more of actual arguments, whose
125 type can be determined in runtime. The only parameter pack
126 currently implemented is "format" for decoding printf-style format
129 In future, it should be relatively straightforward to add more
130 parameter packs for functions like execl, and others.
132 *** New expression: zero
134 When used in array length expressions, it means "this array ends
135 at the first element with zero value". C strings are essentially
138 *** Lenses: change the way that underlying type is rendered
140 Lenses are used similarly to parametrized types, e.g.:
141 | void func(lens(int)); |
145 "octal", which used to be a separate type, is now lens, which can
146 be used to render any underlying type in base 8. Plain "octal"
147 is still valid and means the same thing as "octal(int)".
151 Similarly, "hex" lens was introduced to format as base 16.
152 "hide" was introduced to conceal given argument. "bool" lens was
153 added to format objects as either true, or false.
157 "enum" became lens as well. Because enum already uses
158 parentheses to denote the list of enumeration values, the
159 underlying type is selected by square brackets:
161 | void func(enum[short](RED,GREEN,BLUE)); |
165 "string" was also turned to lens. The argument can be either a
166 char*, or pointer to array of char, or array of char. The latter
167 is useful in cases like the following:
169 | void func_struct_2(struct(string(array(char, 6)))); |
171 *** Misspelling of "int" as "itn" temporarily accepted, but deprecated
173 Pre-0.7 ltrace shipped a buggy version of ltrace.conf that
174 contained the following prototype:
176 | itn acl_valid(addr); |
178 To support extant versions of ltrace.conf, that use is now
179 considered valid, and "itn" is a synonym of "int". It is however
180 deprecated, and will produce a warning in future.
182 *** Using void as top-level function argument now deprecated
184 Functions that take no arguments shouldn't pretend to take one
185 parameter of void type. For example the following:
189 ... should be declared like this:
193 To support extant versions of ltrace.conf, that use is now
194 considered valid. It is however deprecated, and will produce a
197 *** Using void to hide one argument is now obsolete
199 Ltrace needs to know the exact underlying type to decide what the
200 calling convention is. The use of void to mean "hide this
201 argument", such as the following example, is therefore obsolete:
203 | void func(void, array(int, arg1)); |
205 Instead, rewrite the prototype depending on the exact underlying
208 | void func(hide(int), array(int, arg1)); |
209 | void func(hide(long), array(int, arg1)); |
211 To support extant versions of ltrace.conf, this use is still
212 accepted, and "void" is taken to mean "hide(int)". It is however
213 obsolete, produces a warning, and will be removed in future.
217 *** New manual page ltrace.conf(5)
218 *** README, INSTALL brought up to date
219 *** New file CREDITS with a list of contributors
223 *** Fix detaching from a process
225 Earlier, a process that ltrace detached from would sometimes die
226 of SIGSEGV, SIGTRAP, or SIGILL. These were caused by ltrace
227 detaching from the process just after that process hit a
228 breakpoint. Program counter would thus be left pointing
229 mid-instruction, or signals would be left pending.
231 *** Argument to -n is now checked for validity
232 *** Fix tracing across exec in a stripped binary
233 *** [x86] ORIG_RAX/ORIG_EAX may not contain original syscall number
235 In cases where the system call shouldn't be restarted, these are
236 set to -1. In that case assume that the return is from the
237 topmost syscall. This gets rid of some "unexpected breakpoint"
238 messages on x86_64 and i386.
240 *** [ppc] Fix races in tracing -e events in 64-bit processes
242 On ppc, the contents of PLT table change after the first call.
243 Ltrace used to handle this by reinserting the (now overwritten)
244 breakpoint after the function returns. This introduced a window
245 where calls to the same function from the same binary (either a
246 recursive calls, or calls from another thread) weren't traced.
247 This is fixed as of 0.7.0.
249 As a side effect, events requested via -e now only hit when a PLT
250 call is made, which is consistent with other architectures.
252 *** [ppc] Allow stepping over lwarx instruction
256 *** [arm] Tracing is not supported at all on ARM
258 ltrace might work on older kernels, but no attempt was made to
259 fully support it. Newer kernels don't support PTRACE_SINGLESTEP,
260 which ltrace depends on. Before singlestepping is implemented in
261 software, ARM is considered unsupported.
263 * Version 0.6.0 [2011-01-06 Thu]
267 *** Use autotools for building
268 *** New option -b: disables output of signals received by the tracee
269 *** New option -w: print stack trace of events
271 Pass --with-libunwind to configure to enable the feature. This
274 *** Support tracing of symbols from libraries opened with dlopen
276 These symbols are selected by -x.
278 ** Architecture-specific Changes
280 *** Various fixes for MIPS and PowerPC
281 *** Support for ARM Thumb mode
282 *** Implement fetching of 5th and further function arguments on s390
283 *** Support fork/exec syscalls on 31-bit s390
284 *** Support for float and double arguments on x86_64
285 *** Fixes for return arguments (after '+') in nested calls on x86_64
288 -------------------------------------------------------------------------------
289 Copyright (C) 2012 Petr Machata <pmachata@redhat.com>
290 This file is part of ltrace.
292 ltrace is free software; you can redistribute it and/or modify it
293 under the terms of the GNU General Public License as published by the
294 Free Software Foundation; either version 2 of the License, or (at your
295 option) any later version.
297 ltrace is distributed in the hope that it will be useful, but WITHOUT
298 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
299 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
302 You should have received a copy of the GNU General Public License
303 along with this program. If not, see <http://www.gnu.org/licenses/>.