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