Imported Upstream version 0.7.2
[platform/upstream/ltrace.git] / NEWS
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 -------------------------------------------------------------------------------
289 Copyright (C) 2012 Petr Machata <pmachata@redhat.com>
290 This file is part of ltrace.
291
292 ltrace is free software; you can redistribute it and/or modify it
293 under the terms of the GNU General Public License as published by the
294 Free Software Foundation; either version 2 of the License, or (at your
295 option) any later version.
296
297 ltrace is distributed in the hope that it will be useful, but WITHOUT
298 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
299 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
300 for more details.
301
302 You should have received a copy of the GNU General Public License
303 along with this program.  If not, see <http://www.gnu.org/licenses/>.