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