diff options
Diffstat (limited to 'NEWS')
-rw-r--r-- | NEWS | 303 |
1 files changed, 303 insertions, 0 deletions
@@ -0,0 +1,303 @@ +-*-org-*- +* Version 0.7.2 [2012-12-07 Fri] +** Bugfixes +*** (Again) detect VDSO entry in r_debug linkmap with non-empty name + This bug caused messages like: + | Couldn't determine base address of linux-vdso32.so.1 + | Couldn't load ELF object linux-vdso32.so.1: No such file or directory +*** Fix building with libunwind 1.1 +*** Fix prototype lookup for -x symbols from shared libraries + Ltrace was unable to find prototypes of static symbols in shared + libraries. It changed the symbol name internally to the form + name@libfoo.so. Thus mangled, symbols were not found in config + files. + +* Version 0.7.1 [2012-11-29 Thu] +** Bugfixes +*** ltrace.conf.5 is now installed to man5 as it should be +*** [PowerPC] A header file necessary for building is now shipped +*** [MIPS] Work around duplicate symbol request bug + This fixes the ltrace abort: + | ./ltrace: proc.c: 755: breakpoint_for_symbol: Assertion `bp->libsym == ((void *)0)' failed. + +*** Detect VDSO entry in r_debug linkmap with non-empty name + This bug caused messages like: + | Couldn't determine base address of linux-vdso32.so.1 + | Couldn't load ELF object linux-vdso32.so.1: No such file or directory + +*** Temporary files are wiped properly after the test suite has been run +*** Parsing typedefs with common prefix now works as it should + More exactly, if there were typedefs X and XY (in this order), and + a reference was made to X, ltrace would match XY instead. + +** Cofiguration Files +*** The following prototypes in ltrace.conf were added or updated + __ctype_get_mb_cur_max, __endmntent, __getmntent_r, __setmntent, + a64l, abort, abs, addmntent, getmntent_r, hasmntopt, inet_addr, + inet_aton, inet_lnaof, inet_makeaddr, inet_netof, inet_network, + inet_ntoa, kill, l64a, labs, memcpy, memmove, setlocale, + sigaction, sigaddset, sigandset, sigdelset, sigemptyset, + sigfillset, sigisemptyset, sigismember, signal, sigorset, + sigpending, sigprocmask, sigsuspend. + +*** Duplicate typedefs are now guarded against +*** It's now possible to define recursive structures + Please read ltrace.conf(5) man page, chapter "recursive + structures", to learn about this new feature. + +*** New lens "bitvec" is available + This allows displaying various data types as bit vectors. Please + read ltrace.conf(5) to learn more. + +*** Octal lens renamed to "oct" + For reasons of consistency with "hex". "octal" is still valid and + will be for forseeable future. + +*** The hex lens can now format floating point arguments + +* Version 0.7.0 [2012-11-09 Fri] +** Tracing +*** Full support for tracing multi-threaded processes + + Ltrace now understands thread groups, and it stops all threads + before manipulating breakpoints. The downside is that performance + of multi-threaded processes is rather bad, because handling any + event implies stopping the whole job. The upside is that + individual threads don't get random SIGILL's and SIGSEGV's and + events are not missed. + +*** Support for tracing inter-library calls + + -e and -x were extended to allow library selectors. See the man + page for details. + +*** Better support for parameter passing ("fetch backend") + + This version brings more complete support for parameter passing, + including passing structures in registers, passing double on i386, + and other edge cases that were not handled correctly before. The + following architectures now have implementation of fetch backend: + i386, x86_64, ppc, ppc64, ia64, s390, s390x, m68k. + +*** Awareness of deny_ptrace SELinux boolean + + The deny_ptrace boolean denies all processes from being able to + use ptrace to manipulate other processes. Ltrace now understands + that this boolean exists, and recommends turning it off, if it is + on and ltrace fails to attach to a process. + +*** Limited support for tracing returns from tail call functions +*** -e, -x and -l selectors now allow using globs and regular expressions + + See the man page for details of the selector syntax. This changes + the way -x and -l behave with respect to tracing libraries opened + by dlopen: + + - In 0.6.0, only those -x symbols that were unmatched in main + binary were used to search through symbol table of libraries + opened with dlopen. In 0.7.0, -x and -e are applied uniformly + to each mapped binary: the main binary, dependent DSO's, and any + dlopened libraries. + + - In 0.6.0, -l argument was a filename to open and inspect. In + 0.7.0, -l is a glob expression matched against each mapped + binary. + +*** -g command line option dropped + + This option was introduced in 0.6.0 with the meaning identical to + -L, which should be used instead. + +*** Test suite can now be run under valgrind + + Use --enable-valgrind to turn this on. + +*** [ppc] Support both BSS and secure PLTs for 32-bit processes +*** [mips] Implement software singlestepping +*** [mips] Add support for CPIC main programs +*** Support tracing PIE binaries + +** Configuration Files + +*** New abstraction: parameter pack + + Parameter packs describe zero or more of actual arguments, whose + type can be determined in runtime. The only parameter pack + currently implemented is "format" for decoding printf-style format + strings. + + In future, it should be relatively straightforward to add more + parameter packs for functions like execl, and others. + +*** New expression: zero + + When used in array length expressions, it means "this array ends + at the first element with zero value". C strings are essentially + array(char, zero)*. + +*** Lenses: change the way that underlying type is rendered + + Lenses are used similarly to parametrized types, e.g.: + | void func(lens(int)); | + +**** octal + + "octal", which used to be a separate type, is now lens, which can + be used to render any underlying type in base 8. Plain "octal" + is still valid and means the same thing as "octal(int)". + +**** hex, hide, bool + + Similarly, "hex" lens was introduced to format as base 16. + "hide" was introduced to conceal given argument. "bool" lens was + added to format objects as either true, or false. + +**** enum + + "enum" became lens as well. Because enum already uses + parentheses to denote the list of enumeration values, the + underlying type is selected by square brackets: + + | void func(enum[short](RED,GREEN,BLUE)); | + +**** string + + "string" was also turned to lens. The argument can be either a + char*, or pointer to array of char, or array of char. The latter + is useful in cases like the following: + + | void func_struct_2(struct(string(array(char, 6)))); | + +*** Misspelling of "int" as "itn" temporarily accepted, but deprecated + + Pre-0.7 ltrace shipped a buggy version of ltrace.conf that + contained the following prototype: + + | itn acl_valid(addr); | + + To support extant versions of ltrace.conf, that use is now + considered valid, and "itn" is a synonym of "int". It is however + deprecated, and will produce a warning in future. + +*** Using void as top-level function argument now deprecated + + Functions that take no arguments shouldn't pretend to take one + parameter of void type. For example the following: + + | int fork(void); | + + ... should be declared like this: + + | int fork(); | + + To support extant versions of ltrace.conf, that use is now + considered valid. It is however deprecated, and will produce a + warning in future. + +*** Using void to hide one argument is now obsolete + + Ltrace needs to know the exact underlying type to decide what the + calling convention is. The use of void to mean "hide this + argument", such as the following example, is therefore obsolete: + + | void func(void, array(int, arg1)); | + + Instead, rewrite the prototype depending on the exact underlying + type: + + | void func(hide(int), array(int, arg1)); | + | void func(hide(long), array(int, arg1)); | + + To support extant versions of ltrace.conf, this use is still + accepted, and "void" is taken to mean "hide(int)". It is however + obsolete, produces a warning, and will be removed in future. + +** Documentation + +*** New manual page ltrace.conf(5) +*** README, INSTALL brought up to date +*** New file CREDITS with a list of contributors + +** Bugfixes + +*** Fix detaching from a process + + Earlier, a process that ltrace detached from would sometimes die + of SIGSEGV, SIGTRAP, or SIGILL. These were caused by ltrace + detaching from the process just after that process hit a + breakpoint. Program counter would thus be left pointing + mid-instruction, or signals would be left pending. + +*** Argument to -n is now checked for validity +*** Fix tracing across exec in a stripped binary +*** [x86] ORIG_RAX/ORIG_EAX may not contain original syscall number + + In cases where the system call shouldn't be restarted, these are + set to -1. In that case assume that the return is from the + topmost syscall. This gets rid of some "unexpected breakpoint" + messages on x86_64 and i386. + +*** [ppc] Fix races in tracing -e events in 64-bit processes + + On ppc, the contents of PLT table change after the first call. + Ltrace used to handle this by reinserting the (now overwritten) + breakpoint after the function returns. This introduced a window + where calls to the same function from the same binary (either a + recursive calls, or calls from another thread) weren't traced. + This is fixed as of 0.7.0. + + As a side effect, events requested via -e now only hit when a PLT + call is made, which is consistent with other architectures. + +*** [ppc] Allow stepping over lwarx instruction + +** Known bugs + +*** [arm] Tracing is not supported at all on ARM + + ltrace might work on older kernels, but no attempt was made to + fully support it. Newer kernels don't support PTRACE_SINGLESTEP, + which ltrace depends on. Before singlestepping is implemented in + software, ARM is considered unsupported. + +* Version 0.6.0 [2011-01-06 Thu] + +** General Features + +*** Use autotools for building +*** New option -b: disables output of signals received by the tracee +*** New option -w: print stack trace of events + + Pass --with-libunwind to configure to enable the feature. This + requires libunwind. + +*** Support tracing of symbols from libraries opened with dlopen + + These symbols are selected by -x. + +** Architecture-specific Changes + +*** Various fixes for MIPS and PowerPC +*** Support for ARM Thumb mode +*** Implement fetching of 5th and further function arguments on s390 +*** Support fork/exec syscalls on 31-bit s390 +*** Support for float and double arguments on x86_64 +*** Fixes for return arguments (after '+') in nested calls on x86_64 + +* License +------------------------------------------------------------------------------- +Copyright (C) 2012 Petr Machata <pmachata@redhat.com> +This file is part of ltrace. + +ltrace is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your +option) any later version. + +ltrace is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. |