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