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 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
