NEWS revision 854696cc0e042e88d41fc3bb062de0fb91a0a9c6
1-*-org-*-
2* Version 0.7.0
3** Tracing
4*** Full support for tracing multi-threaded processes
5
6    Ltrace now understands thread groups, and it stops all threads
7    before manipulating breakpoints.  The downside is that performance
8    of multi-threaded processes is rather bad, because handling any
9    event implies stopping the whole job.  The upside is that
10    individual threads don't get random SIGILL's and SIGSEGV's and
11    events are not missed.
12
13*** Support for tracing inter-library calls
14
15    -e and -x were extended to allow library selectors.  See the man
16    page for details.
17
18*** Better support for parameter passing ("fetch backend")
19
20    This version brings more complete support for parameter passing,
21    including passing structures in registers, passing double on i386,
22    and other edge cases that were not handled correctly before.  The
23    following architectures now have implementation of fetch backend:
24    i386, x86_64, ppc, ppc64, ia64, s390, s390x, m68k.
25
26*** Awareness of deny_ptrace SELinux boolean
27
28    The deny_ptrace boolean denies all processes from being able to
29    use ptrace to manipulate other processes.  Ltrace now understands
30    that this boolean exists, and recommends turning it off, if it is
31    on and ltrace fails to attach to a process.
32
33*** Limited support for tracing returns from tail call functions
34*** -e, -x and -l selectors now allow using globs and regular expressions
35
36    See the man page for details of the selector syntax.  This changes
37    the way -x and -l behave with respect to tracing libraries opened
38    by dlopen:
39
40    - In 0.6.0, only those -x symbols that were unmatched in main
41      binary were used to search through symbol table of libraries
42      opened with dlopen.  In 0.7.0, -x and -e are applied uniformly
43      to each mapped binary: the main binary, dependent DSO's, and any
44      dlopened libraries.
45
46    - In 0.6.0, -l argument was a filename to open and inspect.  In
47      0.7.0, -l is a glob expression matched against each mapped
48      binary.
49
50*** -g command line option dropped
51
52    This option was introduced in 0.6.0 with the meaning identical to
53    -L, which should be used instead.
54
55*** Test suite can now be run under valgrind
56
57    Use --enable-valgrind to turn this on.
58
59*** [ppc] Support both BSS and secure PLTs for 32-bit processes
60*** [mips] Implement software singlestepping
61*** [mips] Add support for CPIC main programs
62*** Support tracing PIE binaries
63
64** Configuration Files
65
66*** New abstraction: parameter pack
67
68    Parameter packs make it much simpler to add specialized decoding
69    logic.  The only parameter pack currently implemented is "format"
70    for decoding printf-style format strings.
71
72    In future, it should be relatively straightforward to add more
73    parameter packs for functions like execl, strftime, and others.
74
75*** New expression: zero
76
77    When used in array length expressions, it means "this array ends
78    at the first element with zero value".  C strigs are essentially
79    array(char, zero)*.
80
81*** Lenses: change the way that underlying type is rendered
82
83    Lenses are used similarly to parametrized types, e.g.:
84    | void func(lens(int)); |
85
86**** octal
87
88     "octal", which used to be a separate type, is now lens, which can
89     be used to render any underlying type in base 8.  Plain "octal"
90     is still valid and means the same thing as "octal(int)".
91
92**** hex, hide, bool
93
94     Similarly, "hex" lens was introduced to format as base 16.
95     "hide" was introduced to conceal given argument.  "bool" lens was
96     added to format objects as either true, or false.
97
98**** enum
99
100     "enum" became lens as well.  Because enum already uses
101     parentheses to denote the list of enumeration values, the
102     underlying type is selected by square brackets:
103
104     | void func(enum[short](RED,GREEN,BLUE)); |
105
106**** string
107
108     "string" was also turned to lens.  The argument can be either a
109     char*, or pointer to array of char, or array of char.  The latter
110     is useful in cases like the following:
111
112     | void func_struct_2(struct(string(array(char, 6)))); |
113
114*** Misspelling of "int" as "itn" temporarily accepted, but deprecated
115
116    Pre-0.7 ltrace shipped a buggy version of ltrace.conf that
117    contained the following prototype:
118
119    | itn acl_valid(addr); |
120
121    To support extant versions of ltrace.conf, that use is now
122    considered valid, and "itn" is a synonym of "int".  It is however
123    deprecated, and will produce a warning in future.
124
125*** Using void as top-level function argument now deprecated
126
127    Functions that take no arguments shouldn't pretend to take one
128    parameter of void type.  For example the following:
129
130    | int fork(void); |
131
132    ... should be declared like this:
133
134    | int fork(); |
135
136    To support extant versions of ltrace.conf, that use is now
137    considered valid.  It is however deprecated, and will produce a
138    warning in future.
139
140*** Using void to hide one argument is now obsolete
141
142    Ltrace needs to know the exact underlying type to decide what the
143    calling convention is.  The use of void to mean "hide this
144    argument", such as the following example, is therefore obsolete:
145
146    | void func(void, array(int, arg1)); |
147
148    Instead, rewrite the prototype depending on the exact underlying
149    type:
150
151    | void func(hide(int), array(int, arg1));  |
152    | void func(hide(long), array(int, arg1)); |
153
154    To support extant versions of ltrace.conf, this use is still
155    accepted, and "void" is taken to mean "hide(int)".  It is however
156    obsolete, produces a warning, and will be removed in future.
157
158** Documentation
159
160*** New manual page ltrace.conf(5)
161*** README, INSTALL brought up to date
162*** New file CREDITS with a list of contributors
163
164** Bugfixes
165
166*** Fix detaching from a process
167
168    Earlier, a process that ltrace detached from would sometimes die
169    of SIGSEGV, SIGTRAP, or SIGILL.  These were caused by ltrace
170    detaching from the process just after that process hit a
171    breakpoint.  Program counter would thus be left pointing
172    mid-instruction, or signals would be left pending.
173
174*** Argument to -n is now checked for validity
175*** Fix tracing across exec in a stripped binary
176*** [x86] ORIG_RAX/ORIG_EAX may not contain original syscall number
177
178    In cases where the system call shouldn't be restarted, these are
179    set to -1.  In that case assume that the return is from the
180    topmost syscall.  This gets rid of some "unexpected breakpoint"
181    messages on x86_64 and i386.
182
183*** [ppc] Fix races in tracing -e events in 64-bit processes
184
185    On ppc, the contents of PLT table change after the first call.
186    Ltrace used to handle this by reinserting the (now overwritten)
187    breakpoint after the function returns.  This introduced a window
188    where calls to the same function from the same binary (either a
189    recursive calls, or calls from another thread) weren't traced.
190    This is fixed as of 0.7.0.
191
192    As a side effect, events requested via -e now only hit when a PLT
193    call is made, which is consistent with other architectures.
194
195*** [ppc] Allow stepping over lwarx instruction
196
197** Known bugs
198
199*** [arm] Tracing is not supported at all on ARM
200
201    ltrace might work on older kernels, but no attempt was made to
202    fully support it.  Newer kernels don't support PTRACE_SINGLESTEP,
203    which ltrace depends on.  Before singlestepping is implemented in
204    software, ARM is considered unsupported.
205
206* Version 0.6.0
207
208** General Features
209
210*** Use autotools for building
211*** New option -b: disables output of signals received by the tracee
212*** New option -w: print stack trace of events
213
214    Pass --with-libunwind to configure to enable the feature.  This
215    requires libunwind.
216
217*** Support tracing of symbols from libraries opened with dlopen
218
219    These symbols are selected by -x.
220
221** Architecture-specific Changes
222
223*** Various fixes for MIPS and PowerPC
224*** Support for ARM Thumb mode
225*** Implement fetching of 5th and further function arguments on s390
226*** Support fork/exec syscalls on 31-bit s390
227*** Support for float and double arguments on x86_64
228*** Fixes for return arguments (after '+') in nested calls on x86_64
229
230* License
231-------------------------------------------------------------------------------
232Copyright (C) 2012 Petr Machata <pmachata@redhat.com>
233This file is part of ltrace.
234
235ltrace is free software; you can redistribute it and/or modify it
236under the terms of the GNU General Public License as published by the
237Free Software Foundation; either version 2 of the License, or (at your
238option) any later version.
239
240ltrace is distributed in the hope that it will be useful, but WITHOUT
241ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
242FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
243for more details.
244
245You should have received a copy of the GNU General Public License
246along with this program.  If not, see <http://www.gnu.org/licenses/>.
247