NEWS revision 9265da409dba24852ec35636106ab01e14feb2f2
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 more complete support for parameter passing,
22    including passing structures in registers, passing double on i386,
23    and other edge cases that were not handled correctly before.  The
24    following architectures now have implementation of fetch backend:
25    i386, x86_64, ppc, ppc64, ia64, s390, s390x, 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.
72
73    In future, it should be relatively straightforward to add more
74    parameter packs for functions like execl, strftime, and others.
75
76*** New expression: zero
77
78    When used in array length expressions, it means "this array ends
79    at the first element with zero value".  C strigs are essentially
80    array(char, zero)*.
81
82*** Lenses: change the way that underlying type is rendered
83
84    Lenses are used similarly to parametrized types, e.g.:
85    | void func(lens(int)); |
86
87**** octal
88
89     "octal", which used to be a separate type, is now lens, which can
90     be used to render any underlying type in base 8.  Plain "octal"
91     is still valid and means the same thing as "octal(int)".
92
93**** hex, hide, bool
94
95     Similarly, "hex" lens was introduced to format as base 16.
96     "hide" was introduced to conceal given argument.  "bool" lens was
97     added to format objects as either true, or false.
98
99**** enum
100
101     "enum" became lens as well.  Because enum already uses
102     parentheses to denote the list of enumeration values, the
103     underlying type is selected by square brackets:
104
105     | void func(enum[short](RED,GREEN,BLUE)); |
106
107**** string
108
109     "string" was also turned to lens.  The argument can be either a
110     char*, or pointer to array of char, or array of char.  The latter
111     is useful in cases like the following:
112
113     | void func_struct_2(struct(string(array(char, 6)))); |
114
115*** Misspelling of "int" as "itn" temporarily accepted, but deprecated
116
117    Pre-0.7 ltrace shipped a buggy version of ltrace.conf that
118    contained the following prototype:
119
120    | itn acl_valid(addr); |
121
122    To support extant versions of ltrace.conf, that use is now
123    considered valid, and "itn" is a synonym of "int".  It is however
124    deprecated, and will produce a warning in future.
125
126*** Using void as top-level function argument now deprecated
127
128    Functions that take no arguments shouldn't pretend to take one
129    parameter of void type.  For example the following:
130
131    | int fork(void); |
132
133    ... should be declared like this:
134
135    | int fork(); |
136
137    To support extant versions of ltrace.conf, that use is now
138    considered valid.  It is however deprecated, and will produce a
139    warning in future.
140
141*** Using void to hide one argument is now obsolete
142
143    Ltrace needs to know the exact underlying type to decide what the
144    calling convention is.  The use of void to mean "hide this
145    argument", such as the following example, is therefore obsolete:
146
147    | void func(void, array(int, arg1)); |
148
149    Instead, rewrite the prototype depending on the exact underlying
150    type:
151
152    | void func(hide(int), array(int, arg1));  |
153    | void func(hide(long), array(int, arg1)); |
154
155    To support extant versions of ltrace.conf, this use is still
156    accepted, and "void" is taken to mean "hide(int)".  It is however
157    obsolete, produces a warning, and will be removed in future.
158
159** Documentation
160
161*** New manual page ltrace.conf(5)
162*** README, INSTALL brought up to date
163*** New file CREDITS with a list of contributors
164
165** Bugfixes
166
167*** Fix detaching from a process
168
169    Earlier, a process that ltrace detached from would sometimes die
170    of SIGSEGV, SIGTRAP, or SIGILL.  These were caused by ltrace
171    detaching from the process just after that process hit a
172    breakpoint.  Program counter would thus be left pointing
173    mid-instruction, or signals would be left pending.
174
175*** Argument to -n is now checked for validity
176*** Fix tracing across exec in a stripped binary
177*** [x86] ORIG_RAX/ORIG_EAX may not contain original syscall number
178
179    In cases where the system call shouldn't be restarted, these are
180    set to -1.  In that case assume that the return is from the
181    topmost syscall.  This gets rid of some "unexpected breakpoint"
182    messages on x86_64 and i386.
183
184*** [ppc] Fix races in tracing -e events in 64-bit processes
185
186    As a side effect, events requested via -e now only hit when a PLT
187    call is made, which is consistent with other architectures.
188
189*** [ppc] Allow stepping over lwarx instruction
190
191** Known bugs
192
193*** [arm] Tracing is not supported at all on ARM
194
195    ltrace might work on older kernels, but no attempt was made to
196    fully support it.  Newer kernels don't support PTRACE_SINGLESTEP,
197    which ltrace depends on.  Before singlestepping is implemented in
198    software, ARM is considered unsupported.
199
200* Version 0.6.0
201
202** General Features
203
204*** Use autotools for building
205*** New option -b: disables output of signals received by the tracee
206*** New option -w: print stack trace of events
207
208    Pass --with-libunwind to configure to enable the feature.  This
209    requires libunwind.
210
211*** Support tracing of symbols from libraries opened with dlopen
212
213    These symbols are selected by -x.
214
215** Architecture-specific Changes
216
217*** Various fixes for MIPS and PowerPC
218*** Support for ARM Thumb mode
219*** Implement fetching of 5th and further function arguments on s390
220*** Support fork/exec syscalls on 31-bit s390
221*** Support for float and double arguments on x86_64
222*** Fixes for return arguments (after '+') in nested calls on x86_64
223
224* License
225-------------------------------------------------------------------------------
226Copyright (C) 2012 Petr Machata <pmachata@redhat.com>
227This file is part of ltrace.
228
229ltrace is free software; you can redistribute it and/or modify it
230under the terms of the GNU General Public License as published by the
231Free Software Foundation; either version 2 of the License, or (at your
232option) any later version.
233
234ltrace is distributed in the hope that it will be useful, but WITHOUT
235ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
236FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
237for more details.
238
239You should have received a copy of the GNU General Public License
240along with this program.  If not, see <http://www.gnu.org/licenses/>.
241