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