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