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