Noteworthy changes in release ?.?
=================================

Noteworthy changes in release 4.7
=================================

* Changes in behavior
  * strace no longer suspends waitpid until there is a child
    for waitpid'ing process to collect status from.
  * strace no longer detaches from a tracee which is supposed
    to be going to die.
  * strace now issues a new message: "+++ exited with EXITCODE +++"
    which shows exact moment strace got exit notification,
    analogous to existing "+++ killed by SIG +++" message.

* Improvements
  * Added x32 personality support (x86_64 architecture).
  * Added -y and -P options to print file descriptor paths and
    filter by those paths.
  * Added -I option to control strace interactivity.
  * Allowed -p option to take comma or whitespace-separated list of PIDs.
  * Added strace_log_merge script helper to merge timestamped "strace -ff"
    log files.
  * Implemented decoding of clock_adjtime, get_robust_list, migrate_pages,
    preadv, prlimit64, process_vm_readv, process_vm_writev, pwritev,
    recvmmsg, recvmsg, rt_tgsigqueueinfo, sendmmsg, setns, set_robust_list,
    sched_rr_get_interval, splice, syslog, tee and vmsplice syscalls.
  * Enhanced decoding of capget, capset, getrlimit, flistxattr, io_submit,
    listxattr, setrlimit and swapon syscalls.
  * Implemented decoding of loop and mtd ioctls.
  * Added syscall entries for new linux syscalls.
  * Added syscall entries for direct socket system calls on powerpc.
  * Updated the list of errno constants.
  * Updated lists of MSG_*, STA_*, and TCP_* constants.
  * Regenerated the list of ioctl names from Linux 3.3.
  * Enhanced switching between processes with different personalities.
  * Enhanced signals reporting by using short signal names.
  * Made ERESTART* messages more descriptive.
  * Made parsing of numbers from strings more robust.
  * Added support for compat_statfs64 and statfs64.f_flags.
  * Changed read of data blocks to use single process_vm_readv syscall
    (when available) instead of several PTRACE_PEEKDATA operations.
  * Changed read of registers on x86 and x86-64 to use single PTRACE_GETREGS
    operation instead of several PTRACE_PEEKUSER operations.
  * Applied various optimizations to make strace work faster.

* Bug fixes
  * Implemented proper handling of real SIGTRAPs on kernels supporting
    PTRACE_O_TRACESYSGOOD.
    (Addresses Fedora bug #162774).
  * Fixed sockaddr_un.sun_path name in decoded output.
    (Addresses Debian bug #554946).
  * Fixed to avoid potential core file clobbering on exit.
    (Addresses Debian bug #656398).
  * Fixed a typo in documentation.
    (Addresses Debian bug #653309).
  * Fixed decoding of timer id returned by timer_create.
  * Fixed epoll_create1, epoll_wait and epoll_pwait decoding.
  * Fixed *at syscalls flags decoding.
  * Fixed ARM EABI 64-bit syscall's arguments decoding.
  * Fixed semtimedop decoding on s390.
  * Fixed osf_sigprocmask decoding on alpha.
  * Fixed ipc and socket subcall decoding on several architectures.
  * Corrected syscall entries for epoll_pwait, epoll_create, epoll_ctl,
    epoll_wait, mincore, mlockall, prctl, reboot, sendfile, sendfile64,
    sendmsg, sgetmask, ssetmask, swapon, tgkill and tkill syscalls.
  * Corrected io_* syscall entries on ARM.
  * Fixed PID prefix printing in "strace -oLOG -ff -p1 -p2 -p3" case.
  * Fixed logging of unfinished lines in "strace -oLOG -ff" case.
  * Fixed build when libaio-devel is not available.
  * Fixed configure checks for PTRACE_* constants.
  * Fixed compilation warnings remained on several architectures.

* Portability
  * Removed all non-Linux code.  After years of neglect, that dead code
    just hampered further strace development.
  * Linux kernel >= 2.6.18 is recommended.  Older versions might still
    work but they haven't been thoroughly tested with this release.

Noteworthy changes in release 4.6
=================================

* Changes in behavior
  * Print diagnostic information about changes in personality mode to
    standard error instead of standard output.

* Improvements
  * Implemented a new method of following clone, fork, and vfork
    syscalls using the Linux kernel's explicit facilities for tracing
    creation of threads and child processes.
  * Implemented CLONE_PARENT and CLONE_UNTRACED flags handling.
  * Implemented decoding of TLS syscalls on m68k.
  * Implemented biarch support on powerpc64.
  * Implemented biarch support for getrlimit() and setrlimit().
  * Implemented decoding of struct ucred in getsockopt SO_PEERCRED.
  * Implemented SOL_SCTP socket options decoding.
  * Added HDIO_* ioctl names.
    (Addresses Debian bug #450953).
  * Added LOOP_* ioctl names.
  * Updated lists of CLOCK_*, CLONE_*, MS_*, and SOL_* constants
    to match Linux 2.6.37.
  * Updated the list of IPPROTO_* constants to match netinet/in.h.
  * Implemented decoding of HDIO_* and BLK* ioctls.
  * Added MicroBlaze architecture support.
  * Added new syscall entries to match Linux 2.6.37.
  * Regenerated list of ioctl names from Linux 2.6.37.
  * Enhanced signal notification decoding.
  * Documented -C and -D options.

* Bug fixes
  * Fixed fetching syscall arguments on m68k.
  * Fixed an error when judging whether a process has children.
  * Fixed get/set_robust_list syscall numbers for powerpc.
  * Fixed a corner case in printing clone flags.
  * Fixed cross-compiling issues.
  * Fixed build issues on powerpc64, SH and SPARC.
  * Fixed syscall flags of fstatat*, mmap, mmap2, fadvise64*, swapoff,
    fgetxattr, flistxattr, fremovexattr, epoll_create, fallocate,
    fanotify_init, and fanotify_mark syscalls.
  * Fixed decoding of get[ug]id, gete[ug]id and setfs[ug]id return values.
  * Fixed biarch support in IO dumping.
  * Fixed raw exit_group decoding.
  * Fixed decoding of file descriptors on 64-bit architectures.
  * Fixed a corner case in waitpid handling.
    (Addresses Red Hat bug #663547).
  * Fixed stat64 decoding on mips
    (Addresses Debian bug #599028).
  * Fixed misleading italics in the manual page.
    (Addresses Debian bug #589323).

Noteworthy changes in release 4.5.20
====================================

* Improvements
  * Implemented decoding of new linux syscalls: inotify_init1, recvmmsg.
  * Implemented basic decoding of new linux syscalls: preadv, pwritev,
    rt_tgsigqueueinfo, perf_event_open.
  * Enhanced decoding of recently added syscalls on non-x86 architectures
    by replacing a bare decoder with elaborate parsers enabled earlier
    for x86/x86-64.
  * Implemented -C option to combine regular and -c output.
    (Addresses Debian bug #466196)
  * Enhanced decoding of mbind and mremap syscalls.
  * Enhanced SOL_PACKET socket options decoding.
  * Regenerated list of ioctl names from linux 2.6.33.
  * Added TILE architecture support.

* Bug fixes
  * Fixed build with Linux kernel headers 2.6.32-rc5+.
    (Addresses Debian bug #560516 and Fedora bug #539044)
  * Fixed build on mips.
  * Fixed handling of Linux systems without struct statfs64.
  * Fixed reporting signal mask by sigreturn on powerpc.
  * Fixed potential stack buffer overflow in select decoder.
    (Addresses Fedora bug #556678)
  * Corrected msgsnd indirect ipccall decoding.
  * Corrected decoding of 64bit syscalls.
    (Addresses Debian bug #570603)
  * Corrected getsockopt decoding on architectures where
    sizeof(long) > sizeof(int).
    (Addresses Debian bug #494844)
  * Corrected decoding of epoll_pwait.
    (Addresses Debian bug #513014)
  * Corrected handling of killed threads.

Noteworthy changes in release 4.5.19
====================================

* Changes in behavior
  * When command exits, strace now exits with the same exit status.
    If command is terminated by a signal, strace terminates itself
    with the same signal, so that strace can be used as a wrapper
    process transparent to the invoking parent process.
    When using -p option, the exit status of strace is zero unless
    there was an unexpected error in doing the tracing.
    (Addresses Fedora bug #105371 and Debian bug #37665)

* Improvements
  * Implemented decoding of new Linux syscalls: accept4, dup3,
    epoll_create1, eventfd2, inotify_init1, pipe2, signalfd4.
  * Implemented decoding of socket type flags introduced in Linux 2.6.27.
  * Implemented decoding of accept4 socketcall.
  * Enhanced prctl decoding.
  * Enhanced nanosleep decoding.
  * Enhanced ptrace decoding.
  * Enhanced futex decoding.
  * Enhanced CAP_* decoding.
  * Enhanced SIOCS* ioctls decoding.
  * Enhanced fcntl F_* flags decoding.
  * Enhanced semop/semtimedop decoding.
  * Updated ARM architecture support.
  * Added Blackfin architecture support.
  * Added AVR32 architecture support.
  * Added CRIS architecture support.
  * Made strace detect when traced process suddenly disappeared.

* Bug fixes
  * Fixed syscall numbers for tee and sync_file_range.
    (Addresses Debian bug #503124)
  * Fixed several bugs in strings decoder, including potential heap
    memory corruption.
    (Addresses Fedora bugs #470529, #478324 and #511035)
  * Marked sendfile(2) as a network syscall.
    (Addresses Debian bug #509499)
  * Fixed accept(2) decoding.
    (Addresses Debian bug #507573)
  * Fixed sigtimedwait(2) decoding.
  * Fixed build on ARM EABI.
    (Addresses Debian bugs #520084 and #535564, and Fedora bug #507576)
  * Fixed display of 32-bit fcntl(F_SETLK) on 64-bit architectures.
    (Addresses Red Hat bug #471169)
  * Fixed display of 32-bit argv array on 64-bit architectures.
    (Addresses Fedora bug #519480)
  * Fixed display of 32-bit struct sigaction on 64-bit architectures.
  * Fixed HPPA architecture support.
    (Addresses Debian bugs #437928 and #546619)

Changes in 4.5.18
==============
* Bug fixes.
* Support new Linux/PPC system call subpage_prot and PROT_SAO flag.
* In sigaction system call, display sa_flags value along with SIG_DFL/SIG_IGN.

Changes in 4.5.17
==============
* Many bug fixes.
* -F is now deprecated, -f has traced vfork too on Linux for a long time now.
* Print O_CLOEXEC, MSG_CMSG_CLOEXEC flag bits.
* Improved output for prctl system call on Linux.
* Improved support for Linux/ARM.
* SA_NOMASK is now spelled SA_NODEFER, and SA_ONESHOT is spelled SA_RESETHAND.

Changes in 4.5.16
==============
* Bug fixes.
* Improved output for delete_module, futex, and mbind system calls on Linux.
* Improved output for SG_IO ioctls on Linux.
* Support new Linux system calls move_pages, utimensat, signalfd, timerfd,
  eventfd, getcpu, epoll_pwait.

Changes in 4.5.15
==============
* Bug fixes.
* Several biarch improvements.
* Improved output for adjtimex, sysctl, quotactl, mount, umount.
* Support new Linux system calls *at, inotify*, pselect6, ppoll and unshare.

Changes in 4.5.14
==============
* Bug fixes.
* Accept numeric system calls in -e.

Changes in 4.5.13
==============
* Bug fixes.
* Introduce "-e trace=desc".

Changes in 4.5.12
==============
* Bug fixes.
* Better x86-64 support for IA32 processes.
* Update PowerPC system calls.
* Better printing for Linux aio system calls.

Changes in 4.5.11
==============
* Quick fix release for build issues.
* One fix for Linux/ARM system call table.

Changes in 4.5.10
==============
* Bug fixes.
* Print fault address for SIGSEGV/SIGBUS signals when available.

Changes in 4.5.9
==============
* Bug fixes.
* Improve socket ioctl printing.
* Update Linux/IA64 syscall list.
* Fix Linux/x86-64 syscall argument extraction for 32-bit processes.
* Improve mount flags printing.
* Support symbolic printing of x86_64 arch_prctl parameters.

Changes in 4.5.8
==============
* Bug fixes.
* Update syscall tables for Alpha, ARM, HPPA.
* Support new Linux syscalls mbind, set_mempolicy, get_mempolicy, waitid.
* Support Linux syscalls fadvise64, fadvise64_64, and epoll_*.
* Improve ioctl command name matching.
* Print RTC_* ioctl structure contents.
* Support newer RLIMIT_* values.
* Print struct cmsghdr details in sendmsg.

Changes in 4.5.7
==============
* Bug fixes.
* Print attribute values in *xattr system calls on Linux.
* Include pread and pwrite calls in -e read and -e write tracing.
* Update SO_* and IP_* value lists and add IPV6_* values for socket options.
* Print clock_t values symbolically in Linux clock_* system calls.

Changes in 4.5.6
==============
* Bug fixes, Linux ioctl updates.
* David Miller contributed support for Linux/SPARC64.

Changes in 4.5.5
==============
* Just bug fixes.

Changes in 4.5.4
==============
* Update Linux ioctl lists.
* Update PF_* and AF_* value lists.
* The 4.5.3 -p behavior for NPTL threads applies only under -f, and got fixed.

Changes in 4.5.3
==============
* Bug fixes.
* On Linux using NPTL threads, -p will now attach to all threads in a process.
* Handle new mq_* system calls in Linux 2.6.6 and later.

Changes in 4.5.2
==============
* Bug fixes.
* Report some new VM_* bit values on Linux.
* Better output for Linux sched_* system calls.

Changes in 4.5.1
==============
* Bug fixes.
* Display multiple ioctl name matches on Linux.

Changes in 4.5
==============
* New port to AMD's x86-64 architecture. One strace binary can
  handle both new x86-64 and old i386 processes.
* Fixed support for LFS64 calls.
* New switch -E to add/remove environment variables for the command.
* Merged s390/s390x port.
* Trace an unbounded number of processes.
* Handle numerous new system calls in Linux 2.5, and new threads semantics.
* Fixed bugs with attach/detach leaving things stopped.
* Fixed traced process seeing ECHILD despite live, traced children
  in waitpid calls with WNOHANG.
* Stuart Menefy contributed a port to Linux/SH.
* Stephen Thomas contributed a port to Linux/SH64.
* Many other bug fixes.

Changes in 4.4
==============
* Fix Linux/ia64 support, looks like someone renamed a few things on us
* Fix the ioctl setup for Linux, turned out it did not really work.
  Improve the ioctl extracter as well so we decode some more ones.

Changes in 4.3.1
================
* compile fixes for Linux/mips

Changes in 4.3
==============
* Linux ia64 and hppa ports added
* The usual Linux syscall updates (includes 32bit uid/gid support),
* Linux ioctl list updated
* Support IPv6 scope ids
* FreeBSD/i386 port added
* UnixWare and Solaris updates
* Better support for tracing multithreaded processes in Linux

Changes in 4.2
==============
* Compiles on glibc2.0 systems again
* Linux/S390 port added
* The usual Linux syscall updates
* we can follow fork on arm now

Changes in 4.1
================
* Linux/MIPS port added
* Lots of Linux updates again
* Improved IPv6 support
* Add strace-graph

Changes in 4.0.1
================
* Minor bugfixes
* Compiles on glibc2.0 systems again

Changes in 4.0
==============
* Get stat structure properly on Linux 64bit archs
* Personalities work again
* Compile correctly on SunOS again
* IRIX64 updates
* Solaris updates

Changes in 3.99.1
=================
* Linux (ultra)sparc fixes
* Linux alpha fixes
* Minor cleanups

Changes in 3.99
===============
* New maintainer
* add support for more Linux architectures (powerpc, sparc, arm)
* support lots more Linux syscalls
* fix signal handling
* add IPX and IPIP support
* check stray syscall after execv
* fix hanging children

Changes in version 3.1
======================

* Irix5 is supported
* Linux 68k is supported
* Linux alpha is supported
* configure is upgraded to autoconf 2.x
* using -f in combination with -e now works correctly
* output can be piped to a program
* tracing setuid programs works better
* it is now reasonable to install strace setuid to root in some circumstances
* new useful tracing names like file and process to trace whole
  classes of system calls, e.g. -efile traces all system calls that
  take a file name as an argument
* IPC calls on SunOS 4.1.x are decoded
* Linux program memory is reliably dereferenced
* Linux decodes at least the name of all syscalls as of pre2.0.4
* various cosmetic changes and bug fixes

Changes from versions 2.x to version 3.0
========================================

* filename arguments are neither abbreviated nor stringified
* string arguments are now true C strings using octal instead of hex by default
* preprocessor constants are never shortened (e.g. was RDONLY => now O_RDONLY)
* by default the output for multiple processes now goes into one file
* all structures, vectors, bitsets, etc. use consistent output formats
* the -c option now means count calls, -i does what the old -c used to do

New Features in version 3.0
===========================

* non-ascii strings can be optionally printed entirely in hex
* the output format is readable when mutiple processes are generating output
* exit values are printed in an alignment column
* is is possible to suppress messages about attaching and detaching
* various tracing features can be enabled on a per syscall/signal/desc basis
* selective tracing of syscalls
* selective printing of syscall structures
* selective abbreviation of long structures on a per syscall basis
* selective printing of raw syscall arguments and results
* selective tracing of signals
* selective dumping of all I/O read from file descriptors
* selective dumping of all I/O written to file descriptors
* optional counting of time, calls, and errors for each syscall
