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