NEWS revision 40de7978f7f98c60d357ce4580f907948d4545a0
1-*-org-*- 2* Version 0.7.0 3** Tracing 4 5*** Full support for tracing multi-threaded processes 6 7 Ltrace now understands thread groups, and it stops all threads 8 before manipulating breakpoints. The downside is that performance 9 of multi-threaded processes is rather bad, because handling any 10 event implies stopping the whole job. The upside is that 11 individual threads don't get random SIGILL's and SIGSEGV's and 12 events are not missed. 13 14*** Support for tracing inter-library calls 15 16 -e and -x were extended to allow library selectors. See the man 17 page for details. 18 19*** Better support for parameter passing ("fetch backend") 20 21 This version brings a more complete support for parameter passing, 22 including passing structures in registers, passing double on i386, 23 and other edge cases that were unsupported before. The following 24 architectures now have implementation of fetch backend: x86, ppc, 25 ia64, s390, m68k. 26 27*** Awareness of deny_ptrace SELinux boolean 28 29 The deny_ptrace boolean denies all processes from being able to 30 use ptrace to manipulate other processes. Ltrace now understands 31 that this boolean exists, and recommends turning it off, if it is 32 on and ltrace fails to attach to a process. 33 34*** Limited support for tracing returns from tail call functions 35*** -e, -x and -l selectors now allow using globs and regular expressions 36 37 See the man page for details of the selector syntax. This changes 38 the way -x and -l behave with respect to tracing libraries opened 39 by dlopen: 40 41 - In 0.6.0, only those -x symbols that were unmatched in main 42 binary were used to search through symbol table of libraries 43 opened with dlopen. In 0.7.0, -x and -e are applied uniformly 44 to each mapped binary: the main binary, dependent DSO's, and any 45 dlopened libraries. 46 47 - In 0.6.0, -l argument was a filename to open and inspect. In 48 0.7.0, -l is a glob expression matched against each mapped 49 binary. 50 51*** -g command line option dropped 52 53 This option was introduced in 0.6.0 with the meaning identical to 54 -L, which should be used instead. 55 56*** Test suite can now be run under valgrind 57 58 Use --enable-valgrind to turn this on. 59 60*** [ppc] Support both BSS and secure PLTs for 32-bit processes 61*** [mips] Implement software singlestepping 62*** [mips] Add support for CPIC main programs 63*** Support tracing PIE binaries 64 65** Configuration Files 66 67*** New abstraction: parameter pack 68 69 Parameter packs make it much simpler to add specialized decoding 70 logic. The only parameter pack currently implemented is "format" 71 for decoding printf-style format strings. It should be relatively 72 straightforward to add more parameter packs for functions like 73 execl, strftime, and others. 74 75*** New expression: zero 76 77 When used in array length expressions, it means "this array ends 78 at the first element with zero value". C strigs are essentially 79 array(char, zero)*. 80 81*** Lenses: change the way that underlying type is rendered 82 83 Lenses are used similarly to parametrized types, e.g.: 84 | void func(lens(int)); | 85 86**** octal 87 88 "octal", which used to be a separate type, is now lens, which can 89 be used to render any underlying type in base 8. Plain "octal" 90 is still valid and means the same as "octal(int)". 91 92**** hex, hide, bool 93 94 Similarly, "hex" lens was introduced to format as base 16. 95 "hide" was introduced to conceal given argument. "bool" lens was 96 added to format objects as either true, or false. 97 98**** enum 99 100 "enum" became lens as well. Because enum already uses 101 parentheses to denote the list of enumeration values, the 102 underlying type is selected by square brackets: 103 | void func(enum[short](RED,GREEN,BLUE)); | 104 105**** string 106 107 "string" was also turned to lens. The argument can be either a 108 char*, or pointer to array of char, or array of char. The latter 109 is useful in cases like the following: 110 | void func_struct_2(struct(string(array(char, 6)))); | 111 112*** Misspelling of "int" as "itn" temporarily accepted, but deprecated 113 114 Pre-0.7 ltrace shipped a buggy version of ltrace.conf that 115 contained the following prototype: 116 117 | itn acl_valid(addr); | 118 119 To support extant versions of ltrace.conf, that use is now 120 considered valid, and "itn" is a synonym of "int". It is however 121 deprecated, and will produce a warning in future. 122 123*** Using void as top-level function argument now deprecated 124 125 Functions that take no arguments shouldn't pretend to take one 126 parameter of void type. For example the following: 127 128 | int fork(void); | 129 130 ... should be declared like this: 131 132 | int fork(); | 133 134 To support extant versions of ltrace.conf, that use is now 135 considered valid. It is however deprecated, and will produce a 136 warning in future. 137 138*** Using void to hide one argument is now obsolete 139 140 Ltrace needs to know the exact underlying type to decide what the 141 calling convention is. The use of void to mean "hide this 142 argument", such as the following example, is therefore obsolete: 143 144 | void func(void, array(int, arg1)); | 145 146 Instead, rewrite the prototype depending on the exact underlying 147 type: 148 149 | void func(hide(int), array(int, arg1)); | 150 | void func(hide(long), array(int, arg1)); | 151 152 To support extant versions of ltrace.conf, this use is still 153 accepted, and "void" is taken to mean "hide(int)". It is however 154 obsolete, produces a warning, and will be removed in future. 155 156** Documentation 157 158*** New manual page ltrace.conf(5) 159*** README, INSTALL brought up to date 160*** New file CREDITS with a list of contributors 161** Bugfixes 162 163*** Fix detaching from a process 164 165 Earlier, a process that ltrace detached from would sometimes die 166 of SIGSEGV, SIGTRAP, or SIGILL. These were caused by ltrace 167 detaching from the process just after that process hit a 168 breakpoint. Program counter would thus be left pointing 169 mid-instruction, or signals would be left pending. 170 171*** Argument to -n is now checked for validity 172*** Fix tracing across exec in a stripped binary 173*** [x86] ORIG_RAX/ORIG_EAX may not contain original syscall number 174 175 In cases where the system call shouldn't be restarted, these are 176 set to -1. In that case assume that the return is from the 177 topmost syscall. This gets rid of some "unexpected breakpoint" 178 messages on x86_64 and i386. 179 180*** [ppc] Fix races in tracing -e events in 64-bit processes 181 182 As a side effect, events requested via -e now only hit when a PLT 183 call is made, which is consistent with other architectures. 184 185*** [ppc] Allow stepping over lwarx instruction 186 187** Known bugs 188 189*** [arm] Tracing is not supported at all on ARM 190 191 ltrace might work on older kernels, but no attempt was made to 192 fully support it. Newer kernels don't support PTRACE_SINGLESTEP, 193 which ltrace depends on. Before singlestepping is implemented in 194 software, ARM is considered unsupported. 195 196* Version 0.6.0 197 198** General Features 199 200*** Use autotools for building 201*** New option -b: disables output of signals received by the tracee 202*** New option -w: print stack trace of events 203 204 Pass --with-libunwind to configure to enable the feature. This 205 requires libunwind. 206 207*** Support tracing of symbols from libraries opened with dlopen 208 209 These symbols are selected by -x. 210 211** Architecture-specific Changes 212 213*** Various fixes for MIPS and PowerPC 214*** Support for ARM Thumb mode 215*** Implement fetching of 5th and further function arguments on s390 216*** Support fork/exec syscalls on 31-bit s390 217*** Support for float and double arguments on x86_64 218*** Fixes for return arguments (after '+') in nested calls on x86_64 219 220* License 221------------------------------------------------------------------------------- 222Copyright (C) 2012 Petr Machata <pmachata@redhat.com> 223This file is part of ltrace. 224 225ltrace is free software; you can redistribute it and/or modify it 226under the terms of the GNU General Public License as published by the 227Free Software Foundation; either version 2 of the License, or (at your 228option) any later version. 229 230ltrace is distributed in the hope that it will be useful, but WITHOUT 231ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 232FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 233for more details. 234 235You should have received a copy of the GNU General Public License 236along with this program. If not, see <http://www.gnu.org/licenses/>. 237