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
