aboutsummaryrefslogtreecommitdiff
path: root/NEWS
blob: 711fb4e2819032c0dcdc7422afbfa7eea7b93b87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
-*-org-*-
* Version 0.7.0
** Tracing

*** Full support for tracing multi-threaded processes

    Ltrace now understands thread groups, and it stops all threads
    before manipulating breakpoints.  The downside is that performance
    of multi-threaded processes is rather bad, because handling any
    event implies stopping the whole job.  The upside is that
    individual threads don't get random SIGILL's and SIGSEGV's and
    events are not missed.

*** Support for tracing inter-library calls

    -e and -x were extended to allow library selectors.  See the man
    page for details.

*** Better support for parameter passing ("fetch backend")

    This version brings a more complete support for parameter passing,
    including passing structures in registers, passing double on i386,
    and other edge cases that were unsupported before.  The following
    architectures now have implementation of fetch backend: x86, ppc,
    ia64, s390, m68k.

*** Awareness of deny_ptrace SELinux boolean

    The deny_ptrace boolean denies all processes from being able to
    use ptrace to manipulate other processes.  Ltrace now understands
    that this boolean exists, and recommends turning it off, if it is
    on and ltrace fails to attach to a process.

*** Limited support for tracing returns from tail call functions
*** -e, -x and -l selectors now allow using globs and regular expressions

    See the man page for details of the selector syntax.

*** Test suite can now be run under valgrind

    Use --enable-valgrind to turn this on.

*** [ppc] Support both BSS and secure PLTs for 32-bit processes
*** [mips] Implement software singlestepping
*** [mips] Add support for CPIC main programs
*** Support tracing PIE binaries

** Configuration Files

*** New abstraction: parameter pack

    Parameter packs make it much simpler to add specialized decoding
    logic.  The only parameter pack currently implemented is "format"
    for decoding printf-style format strings.  It should be relatively
    straightforward to add more parameter packs for functions like
    execl, strftime, and others.

*** New expression: zero

    When used in array length expressions, it means "this array ends
    at the first element with zero value".  C strigs are essentially
    array(char, zero)*.

*** Lenses: change the way that underlying type is rendered

    Lenses are used similarly to parametrized types, e.g.:
    | void func(lens(int)); |

**** octal

     "octal", which used to be a separate type, is now lens, which can
     be used to render any underlying type in base 8.  Plain "octal"
     is still valid and means the same as "octal(int)".

**** hex, hide, bool

     Similarly, "hex" lens was introduced to format as base 16.
     "hide" was introduced to conceal given argument.  "bool" lens was
     added to format objects as either true, or false.

**** enum

     "enum" became lens as well.  Because enum already uses
     parentheses to denote the list of enumeration values, the
     underlying type is selected by square brackets:
     | void func(enum[short](RED,GREEN,BLUE)); |

**** string

     "string" was also turned to lens.  The argument can be either a
     char*, or pointer to array of char, or array of char.  The latter
     is useful in cases like the following:
     | void func_struct_2(struct(string(array(char, 6)))); |

*** Using void as sole argument to a function now obsolete

    Functions that take no arguments shouldn't pretend to take one
    parameter of void type.  That use is now obsolete (but still
    accepted):

    | void func(void); |

    Instead, such functions should be declared like this:

    | void func(); |

*** Using void to hide one argument is no longer supported

    Instead use "hide" lens (see above).  ltrace needs to know the
    exact underlying type to decide what the calling convention is.
    In the following two declarations, how the second argument is
    passed may depend on the exact type of the hidden argument:

    | void func(hide(int), int);                 |
    | void func(hide(struct(float,float)), int); |

** Documentation

*** New manual page ltrace.conf(5)
*** README, INSTALL brought up to date
*** New file CREDITS with a list of contributors
** Bugfixes

*** Fix detaching from a process

    Earlier, a process that ltrace detached from would sometimes die
    of SIGSEGV, SIGTRAP, or SIGILL.  These were caused by ltrace
    detaching from the process just after that process hit a
    breakpoint.  Program counter would thus be left pointing
    mid-instruction, or signals would be left pending.

*** Argument to -n is now checked for validity
*** Fix tracing across exec in a stripped binary
*** [x86] ORIG_RAX/ORIG_EAX may not contain original syscall number

    In cases where the system call shouldn't be restarted, these are
    set to -1.  In that case assume that the return is from the
    topmost syscall.  This gets rid of some "unexpected breakpoint"
    messages on x86_64 and i386.

*** [ppc] Fix races in tracing -e events in 64-bit processes

    As a side effect, events requested via -e now only hit when a PLT
    call is made, which is consistent with other architectures.

*** [ppc] Allow stepping over lwarx instruction

** Known bugs

*** [arm] Tracing is not supported at all on ARM

    ltrace might work on older kernels, but no attempt was made to
    fully support it.  Newer kernels don't support PTRACE_SINGLESTEP,
    which ltrace depends on.  Before singlestepping is implemented in
    software, ARM is considered unsupported.

* Version 0.6.0

** General Features

*** Use autotools for building
*** New option -b: disables output of signals received by the tracee
*** New option -w: print stack trace of events

    Pass --with-libunwind to configure to enable the feature.  This
    requires libunwind.

*** Support tracing of symbols from libraries opened with dlopen

    These symbols are selected by -x.

** Architecture-specific Changes

*** Various fixes for MIPS and PowerPC
*** Support for ARM Thumb mode
*** Implement fetching of 5th and further function arguments on s390
*** Support fork/exec syscalls on 31-bit s390
*** Support for float and double arguments on x86_64
*** Fixes for return arguments (after '+') in nested calls on x86_64

* License
-------------------------------------------------------------------------------
Copyright (C) 2012 Petr Machata <pmachata@redhat.com>
This file is part of ltrace.

ltrace is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.

ltrace is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.