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