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