Noteworthy changes in release ?.?? (????-??-??)
===============================================

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
