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