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