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