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