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