Noteworthy changes in release 4.18 (2017-07-05)
===============================================

* Improvements
  * Implemented decoding of SCM_TIMESTAMP* control messages.
  * Implemented decoding of netlink NLMSG_DONE messages.
  * Implemented decoding of netlink generic nlmsg_type and nlmsg_flags.
  * Implemented decoding of NETLINK_AUDIT, NETLINK_NETFILTER, NETLINK_ROUTE,
    NETLINK_SELINUX, NETLINK_SOCK_DIAG, and NETLINK_XFRM message types.
  * Implemented decoding of NETLINK_GENERIC protocol families.
  * Implemented basic protocol specific decoding of AF_INET, AF_INET6,
    AF_NETLINK, AF_PACKET, AF_SMC, and AF_UNIX messages of NETLINK_SOCK_DIAG.
  * Implemented basic decoding of netlink attributes.
  * Implemented basic protocol specific decoding of AF_INET, AF_NETLINK,
    AF_PACKET, AF_SMC, and AF_UNIX netlink attributes of NETLINK_SOCK_DIAG.
  * Implemented decoding of inet_diag_msg, netlink_diag_msg, and unix_diag_msg
    netlink attributes of NETLINK_SOCK_DIAG.
  * Updated lists of ARPHRD_*, KEYCTL_*, NDIAG_SHOW_*, RTM_*, SCM_*, SCTP_*,
    SO_*, V4L2_*, and prctl ARCH_* constants.
  * Updated lists of ioctl commands from Linux 4.12.

* Bug fixes
  * In interactive mode (-I2), those signals that were blocked at startup
    will remain blocked for the whole period of strace execution.
  * strace no longer resets SIGCHLD handler in tracees to the default action.
  * When traced command is terminated by a blocked signal, strace unblocks
    that signal to ensure its own termination with the same signal.
  * Fixed corner cases in decoding of old sigaction syscall.
  * Fixed build with old kernel headers on mips.
  * Fixed build on aarch64 and tile with glibc >= 2.26.
  * Fixed build on arc and nios2.

Noteworthy changes in release 4.17 (2017-05-24)
===============================================

* Changes in command line syntax
  * Syscall classes specified in -e trace= option now have % prefix (like
    -e trace=%process).  Old style class names without leading % are still
    supported, but considered deprecated now.

* Improvements
  * Optimized syscall filtering.
  * Improved representation of timestamps.
  * Enhanced decoding of sched_setattr syscall.
  * Added -e trace=%stat option for tracing variants of stat syscall.
  * Added -e trace=%lstat option for tracing variants of lstat syscall.
  * Added -e trace=%fstat option for tracing variants of fstat and fstatat
    syscalls.
  * Added -e trace=%%stat option for tracing syscalls used for querying file
    status information (stat, lstat, fstat, fstatat, statx, and their
    variations).
  * Added -e trace=%statfs option for tracing statfs, statfs64 and statvfs
    syscalls.
  * Added -e trace=%fstatfs option for tracing fstatfs, fstatfs64 and fstatvfs
    syscalls.
  * Added -e trace=%%statfs option for tracing syscalls used for querying file
    system statistics information (statfs-like, fstatfs-like and ustat).
  * Added -e trace=/regex option for filtering syscalls using regular
    expressions.
  * Added support for prepending of question mark before syscall qualification
    in -e trace expressions in order to suppress error in case no syscalls
    matched the provided qualification.
  * Implemented decoding of signal mask in rt_sigreturn syscall on alpha, arc,
    arm, avr32, bfin, cris, hppa, m68k, metag, microblaze, mips, nios2, or1k,
    powerpc, powerpc64, riscv, sh, sh64, sparc, sparc64, tile, x86, and xtensa
    architectures.
  * Implemented decoding of statx syscall.
  * Implemented decoding of NS_* ioctl commands.
  * Implemented decoding of the remaining V4L2_BUF_TYPE_* types.
  * Implemented decoding of VIDIOC_[SG]_TUNER ioctl commands.
  * Implemented decoding of NLMSG_ERROR netlink messages.
  * Improved decoding of BPF_PROG_ATTACH command of bpf syscall.
  * Improved decoding of misplaced parts in DM_* ioctl commands.
  * Updated lists of ioctl commands from Linux 4.11.

* Bug fixes
  * Fixed decoding of flags argument of preadv2 and pwritev2 syscalls on x32.
  * Fixed the number of arguments and tracing flags of alpha specific syscalls.
  * Fixed decoding of old sigsuspend syscall on alpha, cris, mips, powerpc,
    powerpc64, sh, sh64, sparc, and sparc64.
  * Fixed decoding of sgetmask and ssetmask syscalls on 64-bit architectures.
  * Fixed decoding of netlink messages received within struct msghdr.
  * Worked around a bug in miscompiled aarch64 kernels leading to the 3rd
    argument of sched_getattr syscall being not quite 32-bit.
  * Fixed corner cases of printing inaccessible times argument of utimes
    and futimesat syscalls.

Noteworthy changes in release 4.16 (2017-02-14)
===============================================

* Improvements
  * Implemented syscall return value injection (-e inject=SET:retval= option).
  * Implemented signal injection (-e inject=SET:signal= option).
  * Implemented decoding of SUID_DUMP_* constants in PR_[GS]ET_DUMPABLE.
  * Implemented decoding of all SG_* ioctl commands.
  * Implemented decoding of ustat syscall.
  * Implemented decoding of BPF_OBJ_PIN, BPF_OBJ_GET, BPF_PROG_ATTACH,
    and BPF_PROG_DETACH commands of bpf syscall.
  * Enhanced decoding of sg_io_hdr and sg_io_v4 structures.
  * Enhanced decoding of get_robust_list, getrandom, io_submit, set_robust_list
    syscalls.
  * Enhanced decoding of entities of kernel long type on x32 and mips n32 ABIs.
  * Updated lists of IP_*, IPV6_*, and LOOP_* constants.
  * Updated lists of ioctl commands from Linux 4.10.
  * Added decoding of recently added syscalls on avr32, microblaze, ppc,
    and ppc64.

* Bug fixes
  * Fixed pathmatch of oldselect syscall on 64-bit architectures.
  * Fixed decoding of mmap2 syscall on s390 when arguments are not available.
  * Fixed decoding of kexec_file_load, mprotect, pkey_mprotect, prctl, preadv*,
    and pwritev* syscalls on x32.
  * Fixed printing of string arguments of getxattr and setxattr syscalls
    when -s option is used to limit the printed string size.
  * Fixed decoding of ifconf, ifreq, and loop_info structures on non-native
    personalities.
  * Fixed decoding of SG_* and LOOP_* ioctl commands.
  * Fixed build on mips with musl libc.
  * Fixed cross-building of ioctlsort.
  * Applied minor formatting fixes to the manual page.

Noteworthy changes in release 4.15 (2016-12-14)
===============================================

* Changes in behavior
  * Time stamps are now printed according to ISO 8601.
  * Changed output format of val3 parameter of futex FUTEX_WAKE_OP operation.
  * The last argument of mincore, sched_getaffinity, and sched_setaffinity
    syscalls is now formatted as an array.

* Improvements
  * Implemented syscall fault injection (-e fault=... option).
  * Implemented decoding of DM_* ioctl commands.
  * Implemented decoding of attr parameter of perf_event_open syscall.
  * Implemented decoding of pkey_alloc, pkey_free, and pkey_mprotect syscalls.
  * Implemented dumping of mq_timedsend and mq_timedreceive syscalls.
  * Implemented decoding of PR_SET_FP_MODE and PR_GET_FP_MODE operations
    of prctl syscall.
  * Implemented PTRACE_GETREGS API support on m68k.
  * Updated lists of ARCH_*, BPF_*, BTRFS_*, FALLOC_*, MS_*, *_MAGIC,
    and V4L2_* constants.
  * Updated lists of ioctl commands from Linux 4.9.
  * Added decoding of recently added syscalls on arc, x32, and xtensa.
  * Enhanced manual page.

* Bug fixes
  * Fixed corner cases in decoding of exit, exit_group, futimesat, getgroups,
    getresuid, init_module, inotify_init1, kcmp, kexec_load, lookup_dcookie,
    mq_getsetattr, mq_notify, mq_open, mq_timedreceive, mq_timedsend,
    name_to_handle_at, prctl, process_vm_readv, process_vm_writev, setfsuid,
    setgroups, setns, unshare, and utimes syscalls.
  * Fixed handling of verbose flag in printing of controls array
    of struct v4l2_ext_controls.
  * Fixed omission of field names in the output of capability, sigaction,
    sigevent, statfs, timespec, timeval, and utimbuf structures.
  * Fixed printing of unknown syscalls in siginfo structure.
  * Fixed decoding of ioctl constants on m68k.
  * Fixed cris architecture support.
  * Fixed cross build when host compiler does not support the same
    set of warning flags as the cross compiler.
  * Fixed build on SLE10 and SLE11.

Noteworthy changes in release 4.14 (2016-10-04)
===============================================

* Changes in behavior
  * When using -p option without a command and no processes has been attached,
    strace exits with exit status 1.

* Improvements
  * Added printing of the mode argument of open and openat syscalls
    when O_TMPFILE flag is set.  (Addresses Fedora bug #1377846).
  * Enhanced -e abbrev=set, -e raw=set, and -e verbose=set.
  * Enhanced decoding of futex, keyctl, quotactl, timerfd_settime,
    and aio family syscalls.
  * Implemented fetching of the 7th subcall argument on mips o32.
  * Updated lists of BPF_*, ETH_P_*, KEXEC_ARCH_*, SCTP_*, TCP_*, and *_MAGIC
    constants.
  * Updated lists of ioctl commands from Linux 4.8.
  * Added decoding of new syscalls on sh and sh64.
  * Added RISC-V architecture support.

* Bug fixes
  * Marked io_setup and io_destroy as memory mapping related syscalls.
  * Fixed leakage of placeholder descriptors to tracees.
  * Fixed printing of mode_t, umode_t, and umask types.
  * Fixed decoding of iovec arrays without a limit on total data size.
  * Fixed decoding of fadvise64, fallocate, futex, keyctl, quotactl, readahead,
    and ipc family syscalls.
  * Fixed decoding of invalid syscalls mapped to indirect subcalls.
  * Fixed decoding of struct btrfs_ioctl_vol_args_v2 on non-native
    personalities.
  * Fixed decoding of PTRACE_DETACH on sparc and sparc64.
  * Fixed decoding of struct stat64 on sparc64.
  * Fixed decoding of uid and gid-related syscalls on sparc64.
  * Fixed decoding of the forth argument of semctl syscall on sparc64.
  * Fixed values of tty ioctl constants on sparc64.
  * Fixed sparc personality support on sparc64.

Noteworthy changes in release 4.13 (2016-07-26)
===============================================

* Improvements
  * Implemented a general netlink socket parser.
  * Enhanced decoding of socket addresses.
  * Enhanced decoding of cmsghdr, msghdr, and mmsghdr structures.
  * Enhanced decoding of accept, accept4, bind, getpeername, getsockname,
    ipc, recvfrom, recvmsg, recvmmsg, sendto, sendmmsg, and socketcall syscalls.
  * Updated lists of AF_*, BPF_MAP_TYPE_*, KEY_*, KEYCTL_*, RWF_*, SS_*,
    and *_MAGIC constants.
  * Updated lists of ioctl commands from Linux 4.7.

* Bug fixes
  * Fixed decoding of pid_t argument of prlimit64 syscall.
  * Fixed sign extension issues in the parser of struct rusage.
  * Fixed race condition in decoding of timeout argument of recvmmsg and
    rt_sigtimedwait syscalls.
  * Fixed build with fresh linux kernel headers.

Noteworthy changes in release 4.12 (2016-05-31)
===============================================

* Improvements
  * Implemented simultaneous use of -p option and tracing of a command.
    (addresses Debian bug #549942).
  * Implemented caching of netlink conversations to reduce amount of time
    spent in decoding socket details in -yy mode.
  * Implemented -yy mode decoding of protocol:portid pairs associated with
    netlink socket descriptors.
  * Implemented decoding of copy_file_range, preadv2, and pwritev2 syscalls.
  * Implemented dumping of preadv, preadv2, pwritev, pwritev2, and vmsplice
    syscalls.
  * Implemented decoding of BTRFS_* and UFFDIO_* ioctl commands.
  * Enhanced decoding of BLK*, EVIOC*, RTC_*, and VIDIOC_* ioctl commands.
  * Enhanced decoding of fstatfs, fstatfs64, get_mempolicy, getdents,
    getdents64, getgroups, getpriority, kill, mbind, migrate_pages, mknod,
    mknodat, personality, poll, ppoll, quotactl, rt_sigpending,
    rt_sigqueueinfo, rt_sigtimedwait, rt_tgsigqueueinfo, sched_getaffinity,
    sched_setaffinity, seccomp, set_mempolicy, setgroups, setpriority, statfs,
    statfs64, tgkill, waitid, and xattr family syscalls.
  * Enhanced decoding of getxpid, getxuid, and getxgid syscalls on alpha.
  * Enhanced decoding of pipe syscall on alpha, ia64, mips, sh, and sparc.
  * Added decoding of bind, listen, and setsockopt direct syscalls on sparc.
  * Added decoding of osf_statfs64 and osf_fstatfs64 syscalls on alpha.
  * Added decoding of fadvise64 and fadvise64_64 on s390.
  * Updated lists of AF_*, BPF_MAP_TYPE_*, CLONE_*, EPOLL*, IPV6_*, MADV_*,
    MSG_*, PTRACE_*, SEGV_*, SO_*, SOL_*, *_MAGIC, and quotactl constants.
  * Updated lists of ioctl commands from Linux 4.6.

* Bug fixes
  * Fixed build on arc, metag, nios2, or1k, and tile architectures.
  * Fixed decoding of 32-bit times syscall return value on 64-bit architectures.
  * Fixed decoding of mlock2 syscall on sparc.
  * Fixed decoding of osf_shmat syscall on alpha.
  * Fixed decoding of syscalls unknown to the kernel on s390/s390x.
    (addresses Debian bug #485979 and Fedora bug #1298294).
  * Fixed decoding of preadv syscall in case of short read.
  * Fixed decoding and dumping of readv syscall in case of short read.
  * Fixed dumping of recvmsg and recvmmsg syscalls in case of short read.
  * Fixed decoding of mincore syscall's last argument.
  * Fixed remaining errors in mapping between syscall numbers and numbers
    of syscall arguments.
  * Applied various fixes to strace-graph script.

Noteworthy changes in release 4.11 (2015-12-21)
===============================================

* Changes in behavior
  * Some syscalls have different names depending on architecture and
    personality.  In these cases, syscall filtering and printing now
    consistently uses the names that match corresponding __NR_* kernel
    macros of the tracee's architecture and personality.
  * Added strace prefix to all diagnostic messages.

* Improvements
  * Enhanced and extended test suite.
  * Implemented reliable tracing of processes whose personality differs
    from the personality of strace, fixed decoding of 32-bit personality
    syscalls on 64-bit architectures.
  * When some data referenced by syscall arguments is irrelevant or cannot
    be read from tracee's memory, strace now prints its address consistently.
  * When a syscall is restarted using restart_syscall mechanism, strace now
    shows the syscall name on architectures that expose this information.
  * Print values returned by epoll_create1, eventfd, eventfd2, fanotify_init,
    inotify_init1, perf_event_open, pipe, pipe2, signalfd, signalfd4, socket,
    socketpair, timerfd, and timerfd_create syscalls, as well as F_DUPFD and
    F_DUPFD_CLOEXEC fcntl commands, as file descriptors.
  * Optimized decoding of indirect socket syscalls.
  * Implemented decoding of nanoseconds along with seconds in stat family
    syscalls (addresses Fedora bug #1251176).
  * Implemented decoding of struct statfs.f_flags in statfs syscall.
  * Implemented decoding of siginfo_t.si_syscall and siginfo_t.si_arch
    in SIGSYS signal.
  * Implemented decoding of indirect syscall on mips o32.
  * Implemented decoding of IPPROTO_IP control messages.
  * Implemented decoding of setsockopt syscall multicast arguments.
  * Enhanced decoding of struct sigevent.
  * Enhanced decoding of block, loop, mtd, ptp, rtc, SG_IO, socket, tty,
    and v4l2 ioctl syscall arguments.
  * Enhanced decoding of epoll_create, fcntl, fcntl64, futex, getdents,
    getdents64, getsockopt, io_*, mount, msgctl, prctl, quotactl, recvfrom,
    sendfile, setsockopt, and shmctl syscalls.
  * Implemented decoding of bpf, execveat, ioperm, iopl, kcmp, kexec_file_load,
    lookup_dcookie, membarrier, memfd_create, mlock2, name_to_handle_at,
    open_by_handle_at, sched_getattr, sched_setattr, and userfaultfd syscalls.
  * Updated lists of AF_*, EPOLL_*, FALLOC_FL_*, F_*, INPUT_PROP_*, IPPROTO_*,
    IPV6_*, IP_*, KEY_*, LOCK_*, MNT_*, MS_*, PACKET_*, PERF_FLAG_*, PF_*,
    PR_*, PTRACE_O_*, RENAME_*, SCTP_*, SECBIT_*, SO_*, TCP_*, and siginfo_t
    constants.
  * Added Nios II architecture support.
  * Added new syscall entries to match Linux 4.4.

* Bug fixes
  * Fixed potential short read of strings from tracee's memory.
  * Fixed -qq option in conjunction with -o option.
  * Fixed filtering of <unavailable> syscalls.
  * Fixed decoding of ioctl syscall command on aarch64 and 32-bit architectures
    with 64-bit aligned structures.
  * Fixed decoding of eventfd2, epoll_create1, signalfd4, and sync_file_range2
    syscall flags arguments.
  * Fixed decoding of 4th argument of clock_nanosleep syscall.
  * Fixed decoding of getpagesize syscall on m68k.
  * Fixed decoding of getrandom and seccomp syscalls on aarch64.
  * Fixed decoding of timezone argument of gettimeofday and settimeofday
  * syscalls.
  * Fixed decoding of offset argument of mmap2 syscall on arm, sparc,
    and sparc64.
  * Fixed decoding of pipe syscall on alpha and mips.
  * Fixed decoding of pipe2 syscall on ia64, sh, sparc, and sparc64.
  * Fixed decoding of signal mask argument of pselect6 syscall on x32.
  * Fixed decoding of signal mask of rt_sigreturn syscall on aarch64, m68k,
    and x32.
  * Fixed decoding of 4th argument of semctl indirect syscall.
  * Fixed decoding of sa_restorer and sa_mask of sigaction syscall on m68k.
  * Fixed decoding of statfs64 and fstatfs64 syscalls on arm eabi.
  * Fixed decoding of struct dirent on x32.
  * Fixed decoding of times syscall return value on mips n32 and x32.
  * Fixed decoding of path argument of umount2 syscall
    (addresses Debian bug #785050).
  * Worked around a kernel bug in tracing privileged executables.
  * Fixed various errors in mapping between syscall numbers and associated
    information like the number of syscall arguments, the name of syscall,
    and syscall decoder.

Noteworthy changes in release 4.10 (2015-03-06)
===============================================

* Improvements
  * Added -yy option to print protocol and address information associated with
    socket descriptors.
  * Extended "-e read=set" and "-e write=set" options to cover sendmsg,
    recvmsg, sendmmsg, and recvmmsg syscalls.
  * Implemented full 32-bit decoding of ioctl commands
    (addresses Debian bug #692913 and Fedora bug #902788).
  * Implemented PTRACE_GETREGS API support on ia64.
  * Implemented PTRACE_GETREGS API support on mips.
  * Implemented PTRACE_GETREGSET API support on s390/s390x.
  * Implemented decoding of getrandom and seccomp syscalls.
  * Implemented full decoding of 64-bit capability sets.
  * Implemented decoding of all prctl commands.
  * Implemented decoding of parametrized ioctl commands.
  * Implemented decoding of evdev ioctl commands.
  * Implemented decoding of v4l ioctl commands.
  * Implemented decoding of SG_IO v4 ioctl commands.
  * Implemented decoding of FIFREEZE/FITHAW/FITRIM ioctl commands.
  * Implemented decoding of FALLOC_FL_* fallocate flags.
  * Implemented decoding of rt_sigreturn signal mask on aarch64,
    x32, and x86_64.
  * Enhanced socket decoder to support bluetooth sockets.
  * Enhanced decoding of unlisted ioctl commands.
  * Enhanced decoding of getsockopt and setsockopt syscall.
  * Enhanced decoding of sysinfo syscall.
  * Enhanced decoding of struct cmsghdr.
  * Enhanced decoding of wait status.
  * Enhanced aio support on non-x86 architectures by using external libaio.h.
  * Added O_TMPFILE to the list of recognized open mode flags.
  * Updated the list of filesystem type constants that is used in decoding
    statfs family syscalls.
  * Updated lists of CAP_*, PR_*, PTRACE_*, SCHED_*, SO_*, SOL_*, SWAP_FLAG_*,
    and TFD_* constants.
  * Updated lists of signal constants from Linux 3.19.
  * Updated lists of errno constants from Linux 3.19.
  * Updated lists of ioctl commands from Linux 3.9.
  * Added new syscall entries to match Linux 3.19.

* Bug fixes
  * Fixed various errors in mapping between syscall numbers and associated
    information like the number of syscall arguments, the name of syscall,
    and syscall decoder.
  * Fixed quoting issues in printing descriptors, filenames, network interface
    names, struct utsname members, device/volume names of BLK* ioctl commands.
  * Fixed uid_t/git_t decoding.
  * Fixed potential out-of-bounds read issues in getdents/getdents64 decoders.
  * Fixed potential open flags truncation on some architectures.
  * Fixed decoding of struct ifreq.ifr_name.
  * Fixed decoding of SIOCSIFNAME ioctl command.
  * Fixed decoding of RENAME_* renameat2 flags.
  * Fixed decoding of UTIME_NOW/UTIME_OMIT timeval structures.
  * Fixed decoding of indirect ipc subcalls on some architectures.
  * Fixed decoding of fanotify_mark syscall on 32-bit architectures.
  * Fixed decoding of 32-bit stat structures on 64-bit architectures.
  * Fixed decoding of 32-bit struct cmsghdr on 64-bit architectures.
  * Fixed decoding of 32-bit preadv/pwritev offset on 64-bit architectures.
  * Fixed decoding of sigreturn/rt_sigreturn signal mask on ia64, ppc, ppc64,
    sparc, sparc64, mips, and s390.
  * Fixed instruction pointer output (-i option) on architectures that support
    several personalities.
  * Fixed behaviour of "-e read=set" and "-e write=set" when read and write
    sets intersect.
  * Fixed build on systems where struct sigaction has no sa_restorer member.
  * Fixed build with uclibc and musl libc.

* Portability
  * Linux kernel >= 2.5.46 is required.
    Older versions without a decent PTRACE_SETOPTIONS support will not work.
  * On mips, linux kernel >= 2.6.15 is required.
    Older versions without a decent PTRACE_GETREGS support will not work.
  * On s390 and s390x, linux kernel >= 2.6.27 is required.
    Older versions without a decent PTRACE_GETREGSET support will not work.

Noteworthy changes in release 4.9 (2014-08-15)
==============================================

* Changes in behavior
  * Disabled OABI support on ARM EABI systems by default,
    added --enable-arm-oabi option to enable it at configure time.

* Improvements
  * Added experimental -k option to print stack trace after each traced syscall.
  * Added -w option to produce stats on syscall latency.
    (addresses Debian bug #457497).
  * Added ARC architecture support.
  * Added PTRACE_GETREGS API support on PowerPC.
  * Enhanced Bionic libc and musl libc support.
  * Enhanced tracing of x86 personality processes on x86_64 and x32.
  * Enhanced tracing of ARM personality processes on AArch64.
  * Enhanced 32/64bit personality detection on PowerPC.
  * Implemented decoding of add_key, ioprio_get, ioprio_set, kexec_load, keyctl,
    renameat2, and request_key syscalls.
  * Robustified decoding of select, pselect, and io_submit syscalls.
  * Enhanced decoding of delete_module, fanotify_init, fanotify_mark, fcntl,
    setdomainname, sethostname, setns, and sync_file_range syscalls.
  * Enhanced decoding of signal bitmasks.
  * Enhanced decoding of file descriptors.
  * Enhanced siginfo_t decoding.
  * Enhanced PF_NETLINK decoding.
  * Updated CLOCK_* constants
    (addresses Fedora bug #1088455).
  * Added new syscall entries to match Linux 3.16.

* Bug fixes
  * Added shmat and shmdt to the set of memory mapping related syscalls.
  * Fixed detaching from stopped processes.
  * Fixed fanotify_mark decoding on 32bit architectures.
  * Fixed offset decoding in preadv and pwritev syscalls.
  * Fixed select decoding for glibc in _FORTIFY_SOURCE mode.
  * Fixed decoding of epoll_ctl syscall with EPOLL_CTL_DEL argument.
  * Fixed build when <sys/ptrace.h> and <linux/ptrace.h> conflict
    (addresses Fedora bug #993384).
  * Miscellaneous corrections in the manual page.
    (Addresses Debian bug #725987).

Noteworthy changes in release 4.8 (2013-06-03)
==============================================

* Changes in behavior
  * In case of normal strace termination, when the trace output is
    redirected to a pipe, strace now closes it and waits for the pipe
    process termination before exit.

* Improvements
  * Implemented tracing using PTRACE_SEIZE API (when available).
  * Implemented more reliable PTRACE_GETREGSET-based process personality
    detection on x86-64 and x32 (when available).
  * Added -e trace=memory option for tracing memory mapping related syscalls.
  * Documented -b option.
  * Allowed exit status messages to be suppressed by giving -q option twice.
  * Added AArch64 architecture support
    (addresses Debian bug #693074 and Fedora bug #969858).
  * Added support for OpenRISC 1000, Meta, and Xtensa architectures.
  * Added tilegx personality support for Tile.
  * Enhanced support of NOMMU architectures.
  * Enhanced decoding of getdents, mmap, perf_event_open, ptrace, and
    quotactl syscalls.
  * Added new syscall entries to match Linux 3.9.
  * Regenerated the list of common ioctl names from Linux 3.9.
  * Updated the list of errno constants.
  * Updated lists of AF_*, MADV_*, MAP_*, MSG_*, MS_*, PF_*, PR_*,
    PTRACE_O_*, and TCP_* constants.
  * Implemented decoding of UBI ioctls.
  * Removed redundant "*32" ioctl names.

* Bug fixes
  * Fixed ERESTARTNOINTR leaking to userspace on ancient kernels
    (addresses Fedora bug #659382).
  * Fixed kernel release string parsing
    (addresses Debian bug #702309).
  * Fixed decoding of *xattr syscalls
    (addresses Fedora bug #885233).
  * Fixed handling of files with 64-bit inode numbers by 32-bit strace
    (addresses Fedora bug #912790).
  * Fixed tracing forks on SPARC.
  * Fixed decoding of fadvise64, fallocate, ftruncate64, io_submit, pread,
    preadv, pwrite, pwritev, readahead, sigaltstack, sync_file_range, sysctl,
    and truncate64 syscalls.
  * Fixed categories of multiple syscalls on most of supported architectures.
  * Fixed decoding of non-native 32-bit personality recv[m]msg syscalls.
  * Fixed decoding of multiple 32-bit personality syscalls on x32.
  * Fixed decoding of long long syscall arguments on ARM, MIPS/o32, PowerPC,
    S390x, and Tile architectures.
  * Fixed semtimedop decoding on S390x.
  * Fixed sram_alloc decoding on Blackfin.
  * Fixed build when process_vm_readv is a stab.
  * Fixed build with older versions of libaio.h.

Noteworthy changes in release 4.7 (2012-05-02)
==============================================

* 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 (2011-03-15)
==============================================

* 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 (2010-04-13)
=================================================

* 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 (2009-10-21)
=================================================

* 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 extractor 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 multiple 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
