Home | History | Annotate | Download | only in ltrace
      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