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