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