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