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