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