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