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