362 lines
14 KiB
Text
362 lines
14 KiB
Text
-*-org-*-
|
|
* Version 0.8.0
|
|
** Prototype libraries
|
|
- Each DSO can now ship an ltrace config file (called prototype
|
|
library) that ltrace will open when that DSO is loaded to process
|
|
image. See ltrace(1) for details.
|
|
|
|
- ltrace.conf is no longer part of installation tarball. Instead,
|
|
we now ship libc.so.conf, libm.so.conf, libacl.so.conf, and
|
|
syscalls.conf. Those are now istalled to /usr/share/ltrace by
|
|
default. /etc/ltrace.conf and $HOME/.ltrace.conf are still
|
|
loaded if present, and can contain arbitrary user configuration.
|
|
|
|
- The option -F was retrofitted to be a colon-separated list of
|
|
prototype libraries, and directories to look for prototype
|
|
libraries in. On Linux, ltrace looks into XDG_CONFIG_HOME,
|
|
XDG_CONFIG_DIRS, and /usr/share/ltrace as well.
|
|
|
|
- Wide character strings are supported in prototypes. Use "string"
|
|
lens as usual, but use array of integers as underlying type.
|
|
libc.so.conf now contains prototypes of wide character functions.
|
|
|
|
- Sole void function parameter such as in the following example, is
|
|
now considered obsolete:
|
|
|
|
| int fork(void); |
|
|
|
|
This use is still accepted, taken to mean "hide(int)", but
|
|
produces a warning, and will be removed in future.
|
|
|
|
** Architectural support
|
|
- MIPS and MIPSel are now handled by the same backend.
|
|
- ARMv6, ARMv7 and ARMv8 (AArch64) are supported, including full
|
|
fetch backend. ARMv8 backend doesn't support tracing of 32-bit
|
|
binaries, as currently there's no 32-bit userspace available for
|
|
ARM64 processors.
|
|
- Imagination Technologies Meta is now supported.
|
|
|
|
- On Linux, tracing of IFUNC symbols is supported. On i386,
|
|
x86_64, ppc32 with secure PLT and ppc64, IRELATIVE PLT slots are
|
|
traced as well.
|
|
|
|
** -w output now shows full library path
|
|
The output format is similar to glibc's backtrace_symbols, e.g.:
|
|
> /bin/ls(_init+0x19be) [0x40398e]
|
|
> /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f50cbc3676d]
|
|
> /bin/ls(_init+0x25fd) [0x4045cd]
|
|
|
|
* Version 0.7.3 [2013-09-15 Sun]
|
|
** Bugfixes
|
|
*** [MIPS] Fix build on mips big endian
|
|
This bug caused messages like:
|
|
| Making all in mips
|
|
| /bin/sh: line 17: cd: mips: No such file or directory
|
|
*** [MIPS] Fix SIGSEGV on mips big endian
|
|
This bug caused runtime messages like:
|
|
| [0x4000000] --- SIGSEGV (Segmentation fault) ---
|
|
| [0xffffffff] +++ killed by SIGSEGV +++
|
|
*** Fix build with CLANG on FREEBSD
|
|
|
|
* 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-2014 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/>.
|