Project import
diff --git a/strace/.mailmap b/strace/.mailmap
new file mode 100644
index 0000000..a04a2f8
--- /dev/null
+++ b/strace/.mailmap
@@ -0,0 +1,7 @@
+# Map git author names and email addresses to canonical/preferred form.
+<ak@linux.intel.com>	<ak@suse.de>
+<holger@freyther.de>	<zecke@selfish.org>
+<kirill@shutemov.name>	<kirill.shutemov@linux.intel.com>
+<schwab@linux-m68k.org>	<schwab@redhat.com>
+<schwab@linux-m68k.org>	<schwab@suse.de>
+<vda.linux@googlemail.com>	<dvlasenk@redhat.com>
diff --git a/strace/.travis.yml b/strace/.travis.yml
new file mode 100644
index 0000000..d3307a0
--- /dev/null
+++ b/strace/.travis.yml
@@ -0,0 +1,41 @@
+language: c
+
+dist: trusty
+
+before_install: ./travis-install.sh
+
+script: ./travis-build.sh
+
+after_success: ./travis-success.sh
+
+sudo: required
+
+git:
+  depth: 2147483647
+
+env:
+  global:
+    - SLEEP_A_BIT="sleep 0.2"
+    - VERBOSE="1"
+
+matrix:
+  include:
+    - compiler: gcc
+      env:
+        - TARGET=x86_64
+        - COVERAGE=true
+    - compiler: gcc
+      env:
+        - TARGET=x32
+    - compiler: gcc
+      env:
+        - TARGET=x86
+    - compiler: clang-3.6
+      env:
+        - TARGET=x86_64
+    - compiler: musl-gcc
+      env:
+        - TARGET=x86_64
+    - compiler: clang-3.6
+      env:
+        - TARGET=x86
diff --git a/strace/AUTHORS b/strace/AUTHORS
new file mode 100644
index 0000000..bbba831
--- /dev/null
+++ b/strace/AUTHORS
@@ -0,0 +1 @@
+See the file CREDITS.  Automake likes us to have this file called AUTHORS.
diff --git a/strace/Android.mk b/strace/Android.mk
new file mode 100644
index 0000000..86f6bae
--- /dev/null
+++ b/strace/Android.mk
@@ -0,0 +1,359 @@
+#
+# Copyright (C) 2006 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+#
+# To update:
+#
+
+#  repo sync .
+#  repo start merge .
+#  git merge aosp/upstream-master --no-ff # resolve any conflicts
+#  ./configure && make
+#  mm -j32
+#  # (Make any necessary Android.mk changes and test the new strace.)
+#  # Beware the .gitignore files --- xlat especially.
+#  git commit -a --amend
+#
+
+# We don't currently have a good solution for the 'configure' side of things.
+# You can get a list of the HAVE_* variables in use and manually go through it:
+#
+#   find . -name "*.[ch]" | xargs grep HAVE_ | sed 's/.*\(HAVE_[A-Z0-9_]*\).*/\1/p' | grep -v HAVE_DECL_ | sort | uniq -d
+
+# -------------------------------------------------------------------------
+
+include $(CLEAR_VARS)
+
+strace_version := $(shell grep strace $(LOCAL_PATH)/debian/changelog.in | \
+                          head -2 | tail -1 | cut -d " " -f 2)
+
+LOCAL_SRC_FILES := \
+    access.c \
+    affinity.c \
+    aio.c \
+    bjm.c \
+    block.c \
+    bpf.c \
+    btrfs.c \
+    cacheflush.c \
+    capability.c \
+    chdir.c \
+    chmod.c \
+    clone.c \
+    copy_file_range.c \
+    count.c \
+    desc.c \
+    dirent.c \
+    dirent64.c \
+    epoll.c \
+    evdev.c \
+    eventfd.c \
+    execve.c \
+    exit.c \
+    fadvise.c \
+    fallocate.c \
+    fanotify.c \
+    fchownat.c \
+    fcntl.c \
+    fetch_seccomp_fprog.c \
+    fetch_struct_flock.c \
+    fetch_struct_mmsghdr.c \
+    fetch_struct_msghdr.c \
+    fetch_struct_statfs.c \
+    file.c \
+    file_handle.c \
+    file_ioctl.c \
+    flock.c \
+    fstatfs.c \
+    fstatfs64.c \
+    fs_x_ioctl.c \
+    futex.c \
+    getcpu.c \
+    getcwd.c \
+    getrandom.c \
+    get_robust_list.c \
+    hdio.c \
+    hostname.c \
+    inotify.c \
+    io.c \
+    ioctl.c \
+    ioperm.c \
+    iopl.c \
+    ioprio.c \
+    ipc.c \
+    ipc_msg.c \
+    ipc_msgctl.c \
+    ipc_sem.c \
+    ipc_shm.c \
+    ipc_shmctl.c \
+    kcmp.c \
+    kexec.c \
+    keyctl.c \
+    ldt.c \
+    link.c \
+    lookup_dcookie.c \
+    loop.c \
+    lseek.c \
+    mem.c \
+    membarrier.c \
+    memfd_create.c \
+    mknod.c \
+    mmsghdr.c \
+    mount.c \
+    mq.c \
+    msghdr.c \
+    mtd.c \
+    net.c \
+    netlink.c \
+    numa.c \
+    open.c \
+    pathtrace.c \
+    perf.c \
+    personality.c \
+    poll.c \
+    prctl.c \
+    print_mq_attr.c \
+    print_msgbuf.c \
+    print_sigevent.c \
+    print_statfs.c \
+    print_time.c \
+    print_timex.c \
+    printmode.c \
+    printrusage.c \
+    printsiginfo.c \
+    process.c \
+    process_vm.c \
+    ptp.c \
+    quota.c \
+    readahead.c \
+    readlink.c \
+    reboot.c \
+    renameat.c \
+    resource.c \
+    rtc.c \
+    sched.c \
+    scsi.c \
+    seccomp.c \
+    sendfile.c \
+    sigaltstack.c \
+    signal.c \
+    signalfd.c \
+    sigreturn.c \
+    sock.c \
+    sockaddr.c \
+    socketcall.c \
+    socketutils.c \
+    sram_alloc.c \
+    statfs.c \
+    statfs64.c \
+    strace.c \
+    swapon.c \
+    sync_file_range.c \
+    sync_file_range2.c \
+    syscall.c \
+    sysctl.c \
+    sysinfo.c \
+    syslog.c \
+    sysmips.c \
+    term.c \
+    time.c \
+    times.c \
+    truncate.c \
+    ubi.c \
+    uid16.c \
+    uid.c \
+    umask.c \
+    umount.c \
+    uname.c \
+    upeek.c \
+    userfaultfd.c \
+    util.c \
+    utime.c \
+    utimes.c \
+    v4l2.c \
+    vsprintf.c \
+    wait.c \
+    xattr.c \
+    xmalloc.c \
+
+LOCAL_SHARED_LIBRARIES :=
+
+#    -DHAVE_DECL_PTRACE_EVENT_FORK=1 \
+    -DHAVE_DECL_PTRACE_EVENT_VFORK=1 \
+    -DHAVE_DECL_PTRACE_EVENT_CLONE=1 \
+    -DHAVE_DECL_PTRACE_EVENT_EXEC=1 \
+    -DHAVE_DECL_PTRACE_EVENT_VFORK_DONE=1 \
+    -DHAVE_DECL_PTRACE_EVENT_EXIT=1 \
+    -DHAVE_DECL_PTRACE_GETEVENTMSG=1 \
+    -DHAVE_DECL_PTRACE_GETSIGINFO=1 \
+    -DHAVE_DECL_PTRACE_O_TRACECLONE=1 \
+    -DHAVE_DECL_PTRACE_O_TRACEEXEC=1 \
+    -DHAVE_DECL_PTRACE_O_TRACEEXIT=1 \
+    -DHAVE_DECL_PTRACE_O_TRACEFORK=1 \
+    -DHAVE_DECL_PTRACE_O_TRACESYSGOOD=1 \
+    -DHAVE_DECL_PTRACE_O_TRACEVFORK=1 \
+    -DHAVE_DECL_PTRACE_SETOPTIONS=1 \
+    -UHAVE_DECL_IO_CMD_PWRITE \
+    -UHAVE_DECL_IO_CMD_PWRITEV \
+    -UHAVE_DECL_LO_FLAGS_AUTOCLEAR \
+    -UHAVE_DECL_LO_FLAGS_PARTSCAN \
+    -DHAVE_DECL_SYS_ERRLIST=1 \
+
+LOCAL_CFLAGS := \
+    -DGETGROUPS_T=gid_t \
+    \
+    -UHAVE_ASM_CACHECTL_H \
+    -DHAVE_ASM_SIGCONTEXT_H=1 \
+    -DHAVE_BLKGETSIZE64=1 \
+    -UHAVE_BLUETOOTH_BLUETOOTH_H \
+    -DHAVE___BUILTIN_POPCOUNT=1 \
+    -DHAVE_DIRENT_H=1 \
+    -DHAVE_DLADDR=1 \
+    -DHAVE_ELF_H=1 \
+    -DHAVE_FOPEN64=1 \
+    -DHAVE_FORK=1 \
+    -DHAVE_FSTATAT=1 \
+    -DHAVE_FTRUNCATE=1 \
+    -DHAVE_FUTIMENS=1 \
+    -DHAVE_IF_INDEXTONAME=1 \
+    -DHAVE_INET_NTOP=1 \
+    -DHAVE_INET_PTON=1 \
+    -DHAVE_INTTYPES_H=1 \
+    -DHAVE_LINUX_BPF_H=1 \
+    -DHAVE_LINUX_BSG_H=1 \
+    -DHAVE_LINUX_BTRFS_H=1 \
+    -DHAVE_LINUX_FALLOC_H=1 \
+    -DHAVE_LINUX_FILTER_H=1 \
+    -DHAVE_LINUX_FUTEX_H=1 \
+    -DHAVE_LINUX_ICMP_H=1 \
+    -DHAVE_LINUX_IF_PACKET_H=1 \
+    -DHAVE_LINUX_INPUT_H=1 \
+    -DHAVE_LINUX_IN6_H=1 \
+    -DHAVE_LINUX_IPC_H=1 \
+    -DHAVE_LINUX_MQUEUE=1 \
+    -DHAVE_LINUX_MSG_H=1 \
+    -DHAVE_LINUX_NETLINK_H=1 \
+    -DHAVE_LINUX_PERF_EVENT_H=1 \
+    -DHAVE_LINUX_SEM_H=1 \
+    -DHAVE_LINUX_SHM_H=1 \
+    -DHAVE_LITTLE_ENDIAN_LONG_LONG=1 \
+    -DHAVE_LONG_LONG=1 \
+    -DHAVE_NETINET_TCP_H=1 \
+    -DHAVE_NETINET_UDP_H=1 \
+    -DHAVE_POLL_H=1 \
+    -DHAVE_PRCTL=1 \
+    -DHAVE_PWRITEV=1 \
+    -DHAVE_SENDMSG=1 \
+    -DHAVE_SIGACTION=1 \
+    -DHAVE_SIG_ATOMIC_T=1 \
+    -DHAVE_SIGINFO_T=1 \
+    -DHAVE_SIGINFO_T_SI_OVERRUN=1 \
+    -DHAVE_SIGINFO_T_SI_SYSCALL=1 \
+    -DHAVE_SIGINFO_T_SI_TIMERID=1 \
+    -UHAVE_STAT64 \
+    -DHAVE_STATFS64=1 \
+    -DHAVE_STDBOOL_H=1 \
+    -DHAVE_STRERROR=1 \
+    -DHAVE_STRUCT_BTRFS_IOCTL_FEATURE_FLAGS_COMPAT_FLAGS=1 \
+    -DHAVE_STRUCT_FLOCK=1 \
+    -DHAVE_STRUCT_FLOCK64=1 \
+    -DHAVE_STRUCT_MMSGHDR=1 \
+    -DHAVE_STRUCT_MSGHDR_MSG_CONTROL=1 \
+    -DHAVE_STRUCT_SIGCONTEXT=1 \
+    -DHAVE_STRUCT_SIGEVENT__SIGEV_UN__PAD=1 \
+    -DHAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID=1 \
+    -DHAVE_STRUCT_STATFS64=1 \
+    -UHAVE_STRUCT_STAT_ST_ACLCNT \
+    -DHAVE_STRUCT_STAT_ST_BLKSIZE=1 \
+    -DHAVE_STRUCT_STAT_ST_BLOCKS=1 \
+    -UHAVE_STRUCT_STAT_ST_FLAGS \
+    -UHAVE_STRUCT_STAT_ST_FSTYPE \
+    -UHAVE_STRUCT_STAT_ST_GEN \
+    -UHAVE_STRUCT_STAT_ST_LEVEL \
+    -DHAVE_STRUCT_STAT_ST_RDEV=1 \
+    -DHAVE_STRUCT_SYSINFO_FREEHIGH=1 \
+    -DHAVE_STRUCT_SYSINFO_MEM_UNIT=1 \
+    -DHAVE_STRUCT_SYSINFO_TOTALHIGH=1 \
+    -DHAVE_STRUCT_UTSNAME_DOMAINNAME=1 \
+    -DHAVE_SYS_EPOLL_H=1 \
+    -DHAVE_SYS_IOCTL_H=1 \
+    -DHAVE_SYS_POLL_H=1 \
+    -DHAVE_SYS_REG_H=1 \
+    -DHAVE_SYS_VFS_H=1 \
+    -DHAVE_SYS_XATTR_H=1 \
+    -DHAVE_UNISTD_H=1 \
+    -DHAVE_UTIMENSAT=1 \
+    \
+    -DMAJOR_IN_SYSMACROS \
+    -DPACKAGE_NAME='"strace"' \
+    -DVERSION='"$(strace_version)"' \
+    -DSIZEOF_OFF_T=SIZEOF_LONG \
+    -DSIZEOF_LONG_LONG=8 \
+    -DSTDC_HEADERS=1 \
+    -DSTRACE_KNOWS_ONLY_EABI=1 \
+    -D_LFS64_LARGEFILE=1 \
+
+LOCAL_CFLAGS += -D_GNU_SOURCE=1 -D_POSIX_SOURCE=1
+
+LOCAL_CFLAGS += -fno-strict-aliasing
+
+LOCAL_CFLAGS_32 += -DSIZEOF_LONG=4 -DSIZEOF_RLIM_T=4 -DHAVE_STAT64=1
+LOCAL_CFLAGS_64 += -DSIZEOF_LONG=8 -DSIZEOF_RLIM_T=8
+
+LOCAL_CFLAGS_arm += -DARM=1
+LOCAL_CFLAGS_arm += -DHAVE_STRUCT___OLD_KERNEL_STAT=1
+
+LOCAL_CFLAGS_arm64 += -DAARCH64=1
+
+LOCAL_CFLAGS_mips += -DMIPS=1 -DLINUX_MIPSO32=1
+LOCAL_CFLAGS_mips += -DHAVE_ASM_SYSMIPS_H=1
+
+LOCAL_CFLAGS_mips64 += -DMIPS=1 -DLINUX_MIPSN64=1
+LOCAL_CFLAGS_mips64 += -DHAVE_ASM_SYSMIPS_H=1
+
+LOCAL_CFLAGS_x86 += -DI386=1
+LOCAL_CFLAGS_x86 += -DHAVE_STRUCT___OLD_KERNEL_STAT=1
+
+LOCAL_CFLAGS_x86_64 += -DX86_64=1
+
+LOCAL_CFLAGS += \
+    -Wall \
+    -Wwrite-strings \
+    -Wsign-compare \
+    -Wno-missing-field-initializers \
+    -Wno-unused-parameter \
+    -Wno-sign-compare \
+
+LOCAL_C_INCLUDES_arm := $(LOCAL_PATH)/linux/arm $(LOCAL_PATH)/linux
+LOCAL_C_INCLUDES_arm64 := $(LOCAL_PATH)/linux/aarch64 $(LOCAL_PATH)/linux
+LOCAL_C_INCLUDES_mips := $(LOCAL_PATH)/linux/mips $(LOCAL_PATH)/linux
+LOCAL_C_INCLUDES_mips64 := $(LOCAL_PATH)/linux/mips $(LOCAL_PATH)/linux
+LOCAL_C_INCLUDES_x86 := $(LOCAL_PATH)/linux/i386 $(LOCAL_PATH)/linux
+LOCAL_C_INCLUDES_x86_64 := $(LOCAL_PATH)/linux/x86_64 $(LOCAL_PATH)/linux
+
+LOCAL_CLANG := true
+
+LOCAL_MODULE := strace
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
+
+LOCAL_MODULE_TAGS := debug
+
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
+
+include $(BUILD_EXECUTABLE)
diff --git a/strace/COPYING b/strace/COPYING
new file mode 100644
index 0000000..e9078d3
--- /dev/null
+++ b/strace/COPYING
@@ -0,0 +1,29 @@
+Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+Copyright (c) 1993 Ulrich Pegelow <pegelow@moorea.uni-muenster.de>
+Copyright (c) 1995, 1996 Michael Elizabeth Chastain <mec@duracef.shout.net>
+Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+Copyright (C) 1998-2001 Wichert Akkerman <wakkerma@deephackmode.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/strace/CREDITS.in b/strace/CREDITS.in
new file mode 100644
index 0000000..d55f2f8
--- /dev/null
+++ b/strace/CREDITS.in
@@ -0,0 +1,91 @@
+The primary authors of strace were:
+
+	Paul Kranenburg <pk@cs.few.eur.nl>
+	Branko Lankester <branko@hacktic.nl>
+	Rick Sladkey <jrs@world.std.com>
+
+These people have contributed to strace.  Some have reported problems, others
+have contributed improvements to the documentation, actual code, provided
+information, provided resources, or helped to port strace to new systems.
+Those contributions are described in the version control logs and ChangeLog-CVS
+file.  If your name has been left out, if you'd rather not be listed, or if
+you'd prefer a different address be used, please send a note to the
+strace-devel@lists.sourceforge.net mailing list.
+
+##<
+## There is no need to list here any name that appears as an Author in
+## "git log" output.  Those are automatically added when this template
+## is used to generate the CREDITS file.
+##>
+Aaron Ucko                      ucko@vax1.rockhurst.edu
+Adrien Kunysz                   adrien@kunysz.be
+Anton Blanchard                 anton@samba.org
+Arkadiusz Miskiewicz            misiek@pld.org.pl
+Bai Weidong                     baiwd@cn.fujitsu.com
+Bo Kullmar                      bk@kullmar.se
+Cai Fei                         caifei@cn.fujitsu.com
+D.J. Barrow                     djbarrow@de.ibm.com
+David Mosberger-Tang            davidm@hpl.hp.com
+David S. Miller                 davem@caip.rutgers.edu
+David Wilder                    wilder@us.ibm.com
+David Woodhouse                 dwmw2@redhat.com
+Douglas Mencken                 dougmencken@gmail.com
+Fernando Luis Vazquez Cao       fernando@oss.ntt.co.jp
+Florian Lohoff                  flo@rfc822.org
+Gabor Gombas                    gombasg@sztaki.hu
+Ganesan Rajagopal               rganesan@myrealbox.com
+Gaël Roualland                  gael.roualland@iname.com
+Greg Banks                      gbanks@pocketpenguins.com
+Henrik Storner                  storner@osiris.ping.dk
+Jakub Jelinek                   jj@ultra.linux.cz
+Jeff Mahoney                    jeffm@suse.com
+Jian Zhen                       zhenjl@gmail.com
+Joe Ilacqua                     spike@world.std.com
+Johannes Stezenbach             js@sig21.net
+Ju"rgen Fluk                    louis@marco.de
+Juergen Weigert                 jnweiger@immd4.informatik.uni-erlangen.de
+Keith Thompson                  kst@alsys.com
+Kyle McMartin                   kyle@mcmartin.ca
+Lai JiangShan                   laijs@cn.fujitsu.com
+Leonard N. Zubkoff              lnz@dandelion.com
+Linus Torvalds                  Linus.Torvalds@cs.helsinki.fi
+Lupe Christoph                  lupe@alanya.isar.muc.de
+Marty Leisner                   leisner@sdsp.mc.xerox.com
+Matt Day                        mday@artisoft.com
+Matthias Pfaller                leo@dachau.marco.de
+Maxim Shchetynin                maxim@de.ibm.com
+Michael E Chastain              mec@duracef.shout.net
+Michael Holzheu                 holzheu@de.ibm.com
+Michail Litvak                  mci@owl.openwall.com
+Mike Stroyan                    mike.stroyan@hp.com
+Muttley Meen                    muttley.meen@gmail.com
+Nate Eldredge                   nate@cartsys.com
+Paul Mundt                      lethal@linux-sh.org
+Peter Jones                     pjones@redhat.com
+Pádraig Brady                   P@draigBrady.com
+Rajeev V. Pillai                rajeevvp@gmail.com
+Randolph Chung                  tausq@debian.org
+Reuben Sumner                   rasumner@undergrad.math.uwaterloo.ca
+Richard Braakman                dark@xs4all.nl
+Richard Henderson               richard@twiddle.tamu.edu
+Richard Hirst                   rhirst@linuxcare.com
+Roland Borde                    bo@uebemc.siemens.de
+Sami Farin                      safari@u.safari.iki.fi
+Scott Tsai                      scottt958@yahoo.com.tw
+Simon Murray                    simon@transitive.com
+Solar Designer                  solar@openwall.com
+Srinivasa Ds                    srinivasa@in.ibm.com
+Steve Bennett                   steveb@workware.net.au
+Thanh Ma                        tma@encore.com
+Thiemo Seufer                   ths@networkno.de
+Thomas Bogendoerfer             tsbogend@bigbug.franken.de
+Tim Yamin                       plasmaroo@gentoo.org
+Timo Lindfors                   timo.lindfors@iki.fi
+Tom Dyas                        tdyas@eden.rutgers.edu
+Tommi Rantala                   ext-tommi.1.rantala@nokia.com
+Topi Miettinen                  Topi.Miettinen@nic.fi
+Xiaoning Ding                   dingxn@gmail.com
+Yang Zhiguo                     yzgcsu@cn.fujitsu.com
+Zach Brown                      zach.brown@oracle.com
+Zhang Le                        zhilg@users.sourceforge.net
+Марк Коренберг                  socketpair@gmail.com
diff --git a/strace/ChangeLog-CVS b/strace/ChangeLog-CVS
new file mode 100644
index 0000000..b5262ad
--- /dev/null
+++ b/strace/ChangeLog-CVS
@@ -0,0 +1,5614 @@
+2009-07-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Clean up spacing to fix warnings reported by git diff --check.
+	* ChangeLog: Fix spaces before tab in indent.
+	* bjm.c: Likewise.
+	* debian/changelog: Likewise.
+	* strace-graph: Likewise.
+	* syscall.c: Likewise.
+	* INSTALL: Fix trailing blank lines.
+	* README-linux: Likewise.
+	* README-svr4: Likewise.
+	* linux/sparc/gen.pl: Likewise.
+	* linux/sparc/syscall1.h: Likewise.
+	* linux/sparc64/syscall1.h: Likewise.
+	* linux/x86_64/gentab.pl: Likewise.
+	* sunos4/syscall.h: Likewise.
+	* test/Makefile: Likewise.
+	* debian/rules: Fix trailing whitespaces.
+	* desc.c: Likewise.
+	* svr4/syscallent.h: Likewise.
+	* test/childthread.c: Likewise.
+	* test/leaderkill.c: Likewise.
+
+2009-07-07  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* .cvsignore: Remove.
+	* README-CVS: Rename to README-hacking.
+	* Makefile.am (EXTRA_DIST): Remove README-CVS.
+
+2009-06-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* bjm.c (sys_query_module): Fix format warning reported by
+	gcc -Wformat-security.
+	* file.c (tprint_open_modes): Likewise.
+	* process.c (printargv): Likewise.
+	* signal.c (printsignal): Likewise.
+
+	Clean up header checks.
+	* configure.ac: Reformat AC_CHECK_HEADERS to keep it sorted and
+	easily updated, and reduce merging errors in the future.
+	* system.c: Convert all non-standard #ifdef checks for specific
+	headers to regular #ifdef HAVE_*_H checks.
+	Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+2009-04-20  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* file.c (printstatsol, printstat_sparc64):
+	Remove NULL/error check for addr parameter.
+	(printoldstat, printstat, printoldstat64):
+	Move NULL/error check for addr parameter
+	so that it happens before printstatsol/printstat_sparc64 calls.
+
+2009-04-16  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* file.c (print_dirfd): Use int for file descriptor, not a long.
+	* process.c (printwaitn): Use int for PID, not a long.
+
+2009-04-15  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* signal (sys_rt_sigtimedwait): Fix sigtimedwait syscall decoding.
+
+2009-04-15  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* signal (sys_rt_sigaction): Print struct sigaction correctly
+	in 32/64 environment.
+	* desc.c (printflock): Add #ifdefs around earlier flock 32/64 fix
+	so that we don't waste time on arches with one personality.
+
+2009-04-14  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* signal.c: Whitespace, comment, and style fixes, no code changes.
+	* file.c: Ditto.
+	* time.c: Ditto.
+	* process.c: Ditto.
+	* resource.c: Ditto.
+
+2009-03-23  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* system.c (sram_alloc_flag): Add L2_SRAM constant.
+	by Mike Frysinger (vapier AT gentoo.org).
+	(sys_sram_alloc): Fix improperly used %zu:
+	tcp->u_arg is not a size_t, it is a long.
+	* net.c (printcmsghdr): Fix improperly used %zu:
+	struct cmsghdr::cmsg_len is not a size_t.
+
+2009-03-10  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Decode fcntl's F_{GET,SET}LEASE, F_NOTIFY, and F_DUPFD_CLOEXEC.
+	By Mike Frysinger (vapier AT gentoo.org)
+	* desc.c: Add F_SETLEASE, F_GETLEASE, F_NOTIFY,
+	F_DUPFD_CLOEXEC to fcntlcmds[]. Create notifyflags[] array.
+	(sys_fcntl): Handle new flags.
+
+	Optimize printing of open modes.
+	* defs.h: Declare sprint_open_modes(),
+	remove unused parameter in tprint_open_modes().
+	* desc.c (sprint_open_modes): Move fuction definition from here...
+	* file.c (sprint_open_modes): To here.
+	(tprint_open_modes): Use sprint_open_modes(), it already
+	generates needed string.
+	* ipc.c: Remove unused parameter from calls
+	to tprint_open_modes().
+
+2009-02-27  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	AVR32 support by Hans-Christian Egtvedt
+	(hans-christian.egtvedt AT atmel.com).
+	* configure.ac: Make it recognize avr32.
+	* defs.h: Define LINUX_AVR32.
+	* linux/avr32/syscallent.h: New file.
+	* Makefile.am: Reference linux/avr32/syscallent.h.
+	* proc.c (change_syscall, setarg): Add support for avr32.
+	(struct xlat struct_user_offsets[]): Ditto.
+	* syscall.c (get_scno): Ditto.
+	(get_error, force_result, syscall_enter): Ditto.
+	* util.c (getpc, printcall): Ditto.
+
+2009-02-25  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	CRIS support by Hinko Kocevar (hinko.kocevar AT cetrtapot.si)
+	* configure.ac: Make it recognize cris.
+	* process.c: Define ARG_xxx constants for cris.
+	(change_syscall): Add support for cris.
+	(struct_user_offsets): Add cris-specific data.
+	* signal.c (sys_sigreturn): Add support for cris.
+	* syscall.c (get_scno): Add support for cris.
+	(syscall_fixup): Add support for cris.
+	(get_error): Add support for cris.
+	(syscall_enter): Add support for cris.
+	(force_result): While at it, fix cpp directives indentation.
+	* util.c (printcall): Add support for cris.
+
+2009-02-24  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* process.c: Indent preprocessor directives so that nesting
+	can be figured out. Add PTRACE_SET_SYSCALL to ptrace_cmds[].
+	* ioctlent.sh: Improved by Mike Frysinger.
+	* HACKING-scripts: New file by Mike Frysinger.
+
+2009-02-20  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Further signalent.h cleanup.
+	* linux/ia64/signalent.h: Remove, it is identical to common signalent.h
+	sans "SIGRTnn" definitions which are redundant.
+	* linux/powerpc/signalent.h: Remove, it is identical to common signalent.h
+	sans outdated "SIGUNUSED" which should be "SIGSYS".
+	* linux/s390/signalent.h: Ditto.
+	* linux/s390x/signalent.h: Ditto.
+	* Makefile.am: Remove references to the above files.
+
+2009-02-20  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Patch by Mike Frysinger (vapier AT gentoo.org).
+	* linux/ioctlent.sh: Update sed machinery to parse _IOC() macros
+	with two constants.
+
+2009-02-20  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Patch by Mike Frysinger (vapier AT gentoo.org).
+	* Makefile.am: Remove reference to linux/sh/signalent.h.
+	* linux/sh/signalent.h: Remove, it is identical to common signalent.h.
+
+2009-02-20  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Patch by Mike Frysinger (vapier AT gentoo.org).
+	* linux/errnoent.h: Make ERRNO_58 show EDEADLOCK for POWERPC.
+	* Makefile.am: Remove reference to linux/powerpc/errnoent.h.
+	* linux/powerpc/errnoent.h: Remove, we can use common errnoent.h now.
+
+2009-02-20  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Patch by Mike Frysinger (vapier AT gentoo.org).
+	Removing redundant errnoent.h files.
+	* Makefile.am: Remove reference to linux/ia64/errnoent.h,
+	linux/s390/errnoent.h, linux/s390x/errnoent.h and linux/sh/errnoent.h.
+	* linux/ia64/errnoent.h: Remove, this arch uses common errnoent.h.
+	* linux/s390/errnoent.h: Ditto.
+	* linux/s390x/errnoent.h: Ditto.
+	* linux/sh/errnoent.h: Ditto.
+
+2009-02-10  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac: Check for struct sigcontext.
+	* signal.c [LINUX] [M68K] (struct sigcontext): Don't define it if
+	[HAVE_STRUCT_SIGCONTEXT].
+	From Muttley Meen <muttley.meen@gmail.com>.
+
+2009-02-09  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* defs.h: Correct the comment about TCB_SUSPENDED.
+	* strace.c: Fix misplaced #endif.
+	* util.c: Indent preprocessor directives, mark code parts
+	which can never be reached by compilation because of
+	the combination of #if directives. These are likely dead code,
+	I want to remove them later.
+
+2009-01-29  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* strace.c (newoutf): Prevent -o FILENAME overflowing the stack.
+	(startup_attach): Fix wrong pid in "Process <PID> attached".
+	(handle_group_exit): Do not consider exit to be spurious if
+	tcb has TCB_STARTUP bit set - we can attach to the task
+	right before its death, it can legitimately happen.
+	(handle_stopped_tcbs): Ditto.
+
+2009-01-26  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* process.c (printwaitn): Add comment about wait4() pid expansion.
+	Use #ifdef ALPHA instead of LINUX_64BIT, it was misleading
+	(by implying "any 64-bit platform").
+	* defs.h: Remove now-unused LINUX_64BIT define.
+	* resource.c (sys_osf_getrusage): Fix indentation.
+
+2009-01-26  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* process.c (internal_clone): Fix fallout from tcb table expansion
+	simplification. Due to overlooked else, I forgot to group
+	fork_tcb(tcp) and alloctcb(pid) in a block.
+
+2009-01-23  Michal Nowak  <mnowak@redhat.com>
+
+	* syscall.c (get_scno): Fix warnings about unused variable 'pid'.
+
+2009-01-23  Michal Nowak  <mnowak@redhat.com>
+
+	* mem.c (print_ldt_entry): Fix warning:
+	Format '%#08lx' expects type 'long unsigned int', but
+	argument 2 was type 'unsigned int'.
+
+2009-01-17  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Two cleanups: tcb table expansion failure is not really a survivable
+	event, we do not have any viable way to continue. No wonder most
+	places where that is detected have FIXMEs.
+	It's way simpler to treat as fatal failure, and handle it inside
+	tcb table expansion finctions.
+	Second cleanup: tidy up haphazard locations of a few externs.
+
+	* defs.h: Change return type of expand_tcbtab() to void.
+	Declare change_syscall().
+	* process.c: Change all callsites of alloctcb(), alloc_tcb() and
+	fork_tcb(), removing now-redundant error checks.
+	(fork_tcb): Change return type to void - it can't fail now.
+	* strace.c: Move extern declarations out of function bodies.
+	Change all callsites of alloctcb(), alloc_tcb() and
+	fork_tcb(), removing now-redundant error checks.
+	(expand_tcbtab): Change return type to void - it can't fail now.
+	On failure to expand, print a message, clean up, and exit.
+	(alloc_tcb): On failure to expand, print a message, clean up, and exit.
+	* util.c (setbpt): Remove extern declaration from function body.
+
+2009-01-14  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* linux/bfin/syscallent.h: sys_futex has 6 parameters, not 5.
+
+2009-01-13  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Fixes for ptrace() argument parsing.
+	* process.c: Add parsing of PTRACE_SETOPTIONS, PTRACE_GETEVENTMSG,
+	PTRACE_GETSIGINFO, PTRACE_SETSIGINFO.
+	* defs.h: Declare several "extern const struct xlat" arrays here.
+	* desc.c: Remove open_mode_flags[] and open_access_modes[]
+	extern declarations.
+	* net.c: Remove open_mode_flags[] extern declaration.
+	* sock.c: Remove addrfams[] extern declaration.
+	* util.c: Remove struct_user_offsets[] extern declaration.
+	* signal.c: Remove open_mode_flags[] extern declaration.
+
+2009-01-06  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Output format fixes, improving the situation after recent
+	change which added beeter handling of processes suddenly
+	disappearing. Now we often do not finish last line
+	before exiting in those cases.
+	The only change affecting something other than output
+	is change in umovestr where we were calling
+	abort() on ptrace error.
+
+	* strace.c (trace): If trace_syscall() failed with ESRCH,
+	finish current output line with " <unfinished ...>".
+	(mp_ioctl): While we are at it, fix gross style mismatch
+	in this function definition. No code chages.
+	* syscall.c (trace_syscall): If decode fails on syscall exit,
+	finish current output line with "= ? <unavailable>".
+	* util.c (umoven): Do not complain if error is ESRCH.
+	(umovestr): Do not complain and do not abort() if error is ESRCH.
+	* defs.h: Remove unused tcp parameter from printtrailer().
+	* process.c: Adjust printtrailer() calls accordingly.
+	* strace.c: Adjust printtrailer() calls accordingly.
+	* syscall.c: Adjust printtrailer() calls accordingly.
+
+2009-01-06  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* desc.c (printflock): Fix display of fcntl(F_SETLK) on
+	non-native 32-bit architecture.
+	Fixes RH#471169 "format fcntl64() system calls for
+	32 bit application incorrect".
+	* desc.c: const'ify two static struct xlat vector[]'s,
+	convert all remaining old style C parameter declarations
+	in this file.
+
+2008-11-13  Kirill A. Shutemov  <kirill@shutemov.name>
+
+	* linux/arm/syscallent.h: Update syscalls.
+	Based on patch by Enrico Scholz.
+
+	* linux/arm/syscallent.h: Fix build on ARM EABI which does not
+	provide syscalls socketcall and ipc.
+
+2009-01-01  Andreas Schwab  <schwab@suse.de>
+
+	* net.c (sys_accept): Properly decode third argument as pointer to
+	int.
+
+2008-12-30  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Experimental support for -D option.
+	Unlike normal case, with -D *grandparent* process exec's,
+	becoming a traced process. Child exits (this prevents traced process
+	from having children it doesn't expect to have), and grandchild
+	attaches to grandparent similarly to strace -p PID.
+	This allows for more transparent interaction in cases
+	when process and its parent are communicating via signals,
+	wait() etc. Without -D, strace process gets lodged in between,
+	disrupting parent<->child link.
+	* strace.c: Add global flag variable daemonized_tracer for -D option.
+	(startup_attach): If -D, fork and block parent in pause().
+	In this case we are already a child, we in fact created a grandchild.
+	After attaching to grandparent, grandchild SIGKILLs parent.
+	(startup_child): If -D, parent blocks in wait(), then
+	execs the program to strace. Normally (w/o -D), it is child
+	who execs the program.
+	(main): Detect -D option, call startup_attach() if it is given.
+
+2008-12-30  Kirill A. Shutemov  <kirill@shutemov.name>
+
+	Fix some warnings on ARM build.
+	* defs.h: include <sys/ptrace.h> on arm too.
+	* syscall.c: EABI arm does not need decode_subcall(),
+	ifdef it out.
+
+2008-12-29  Nick Black  <dankamongmen@acm.org>
+
+	* linux/syscallent.h: Mark sendfile(2) as network syscall.
+	* linux/*/syscallent.h: Same, for all architectures.
+
+2008-12-17  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	Make strace detect when traced process suddenly disappeared
+	(prime example is randomly arriving SIGKILL).
+	* defs.h (do_ptrace, ptrace_restart): Declare new functions
+	* process.c: Use ptrace_restart instead of bare ptrace.
+	This catches and records ESRCH errors.
+	Print "<unavailable>" if syscall decode or result can't be
+	determined because of an earlier error in ptrace()
+	* syscall.c (trace_syscall): Stop indiscriminately bailing out
+	on errors, print "syscall(????" or even "????(????" but continue.
+	* util.c (do_ptrace, ptrace_restart): Define new functions.
+	(upeek): use do_ptrace in order to catch and record ESRCH.
+	Do not print error message in this case.
+	Fixes RH#472053.
+
+2008-12-17  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* signal.c (sys_sigaction, sys_rt_sigaction): Fix typo
+	in (sa_handler == SIG_IGN) comparison, it was using SIG_DFL
+	instead.
+
+2008-12-16  Denys Vlasenko  <dvlasenk@redhat.com>
+
+	* defs.h: Modify declaration of upeek to take struct tcb *
+	parameter instead of pid_t.
+	* process.c: Change all upeek calls accordingly.
+	* signal.c: Likewise.
+	* strace.c: Likewise.
+	* syscall.c: Likewise.
+	* util.c: Likewise.
+
+2008-11-11  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* sock.c [LINUX] (sock_ioctl): Parse more SIOCS* ioctls.
+
+2008-12-09  Roland McGrath  <roland@redhat.com>
+
+	* strace.1 (DIAGNOSTICS): New section, describe exit behavior.
+
+2008-11-09  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* process.c (prctl_options): Update constants from linux 2.6.27.
+	* system.c (capabilities): Add more capability values.
+
+	* util.c (string_quote): Fix support for NUL-terminated string.
+	Add comments.
+	(printpathn): Fix the case when "..." was appended to the output
+	but no truncation was actually made.  Add comments.
+	(printstr): Fix memory allocation.  Fix two cases when "..." was
+	appended to the output but no truncation was actually made.
+	Add comments.
+	Fixes RH#470529.
+
+2008-10-23  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Implement parsers for new linux syscalls.
+	* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
+	(sys_dup2): Use do_dup2.
+	[LINUX] (sys_epoll_create1): New function.
+	[LINUX] (do_eventfd, sys_eventfd2): New functions.
+	[LINUX] (sys_eventfd): Use do_eventfd.
+	* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
+	(sys_pipe): Use do_pipe.
+	* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
+	[LINUX] (sys_signalfd): Use do_signalfd.
+	* linux/syscall.h: Declare new sys_* functions.
+	* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
+	dup3, pipe2, inotify_init1.
+	* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
+	epoll_create1, dup3, pipe2, inotify_init1.
+
+2008-10-23  Mike Frysinger  <vapier@gentoo.org>
+
+	Port strace to the Blackfin architecture.
+	* configure.ac: Add bfin to supported architectures.
+	* process.c: Skip u_fpvalid/u_fpstate for Blackfin architecture.
+	(change_syscall): Support Blackfin architecture.
+	* syscall.c: Declare r0 for Blackfin architecture.
+	(get_scno): Decode Blackfin syscall number.
+	(syscall_fixup): Extract Blackfin return value.
+	(get_error): Decode Blackfin return value.
+	(force_result): Poke Blackfin return value.
+	(syscall_enter): Extract Blackfin syscall arguments.
+	* defs.h: Define TCB_WAITEXECVE for Blackfin architecture.
+	* linux/syscall.h (sys_sram_alloc): Declare for Blackfin
+	architecture.
+	* system.c (sys_sram_alloc): Decode Blackfin sram_alloc() syscall.
+	* util.c (getpc): Handle PC on Blackfin architecture.
+	(printcall): Likewise.
+	* linux/bfin/ioctlent.h, linux/bfin/syscallent.h: New Blackfin
+	headers.
+	* Makefile.am (EXTRA_DIST): Add linux/bfin/ioctlent.h and
+	linux/bfin/syscallent.h.
+
+2008-09-18  Mike Frysinger  <vapier@gentoo.org>
+
+	* configure.ac: Accept uclinux hosts as linux.
+
+2008-10-22  Dmitry V. Levin <ldv@altlinux.org>
+
+	Handle socket type flags introduced in linux 2.6.27.
+	* net.c (socktypes): Add SOCK_DCCP.
+	(sock_type_flags): New xlat structure.
+	(tprint_sock_type): New function.
+	(sys_socket, sys_socketpair): Use it to parse socket type and
+	socket type flags.
+
+2008-09-29  Dmitry V. Levin <ldv@altlinux.org>
+
+	* strace.c (startup_child): Save child pid for future use.
+	(main): Exit/kill ourself with straced child's exitcode/signal.
+	(trace): If signalled process pid matches the saved child pid,
+	save the signal number.  If terminated process pid matches the
+	saved child pid, save its exit status.
+	Patch from Denys Vlasenko <dvlasenk@redhat.com>
+	Fixes RH#105371.
+
+2008-09-12  Tomas Pospisek  <tpo@sourcepole.ch>
+	    Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* strace.1 (DESCRIPTION): New description of unfinished system calls
+	and system calls restarting.
+
+2008-09-03  Dmitry V. Levin <ldv@altlinux.org>
+
+	* desc.c (sys_fcntl): Do not initialize auxstr for failed syscall.
+	* process.c (sys_fork, sys_rfork) [USE_PROCFS]: Likewise.
+	* signal.c (sys_signal): Likewise.
+	* stream.c (internal_stream_ioctl): Likewise.
+	* time.c (sys_adjtimex): Likewise.
+	* syscall.c (trace_syscall): If RVAL_STR is set, then
+	print auxstr for failed syscall as well.
+
+	* syscall.c (is_restart_error): New function.
+	* defs.h (is_restart_error): Declare it.
+
+	* linux/dummy.h (sys_nanosleep): Uncouple from sys_adjtime().
+	* time.c (sys_nanosleep): New function, based on is_restart_error().
+
+	* process.c (sys_prctl): Decode PR_SET_PDEATHSIG, PR_GET_PDEATHSIG,
+	PR_SET_DUMPABLE, PR_GET_DUMPABLE, PR_SET_KEEPCAPS, PR_GET_KEEPCAPS.
+	Fix PR_GET_UNALIGN decoder.
+	(prctl_options): Add more constants.
+
+	* linux/syscallent.h: Use sys_prctl() decoder for "prctl" syscall.
+	* linux/alpha/syscallent.h: Likewise.
+	* linux/arm/syscallent.h: Likewise.
+	* linux/m68k/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+
+2008-09-02  Dmitry V. Levin <ldv@altlinux.org>
+
+	* linux/x86_64/syscallent.h: Fix syscall numbers for "tee" and
+	"sync_file_range".
+	From Fernando Luis Vazquez Cao <fernando@oss.ntt.co.jp>
+
+2008-08-28  Roland McGrath  <roland@redhat.com>
+
+	* strace.1 (BUGS): New section, mention SIGTRAP interference.
+
+	* strace.spec (%ifarch %{strace64_arches}): Use cp -p instead of ln
+	for %{rhel} < 6.
+
+	* configure.ac, NEWS: Version 4.5.18.
+	* strace.spec: 4.5.18-1.
+
+2008-08-24  Roland McGrath  <roland@redhat.com>
+
+	* linux/syscall.h (SYS_socket_subcall et al, SYS_ipc_subcall et al):
+	Don't define these if [__ARM_EABI__].
+	Reported by Johannes Stezenbach <js@sig21.net>.
+
+	* syscall.c (trace_syscall): Conditionalize on [SYS_socket_subcall]
+	and [SYS_ipc_subcall] individually.
+
+	* linux/powerpc/syscallent.h: Handle subpage_prot.
+	* mem.c [LINUX && POWERPC] (sys_subpage_prot): New function.
+	* linux/syscall.h [POWERPC]: Declare it.
+	From Simon Murray <simon@transitive.com>.
+
+	* mem.c (mmap_prot): Handle PROT_SAO.
+	From Simon Murray <simon@transitive.com>.
+
+	* mem.c (madvise_flags): Typo fixes.  Rename to madvise_cmds.
+	(sys_madvise): Use printxval, not printflags.
+	Reported by Rajeev V. Pillai <rajeevvp@gmail.com>.
+
+2008-08-19  Roland McGrath  <roland@redhat.com>
+
+	* signal.c (sys_sigaction, sys_rt_sigaction): Don't omit the rest of
+	the struct after sa_handler is a known constant.  Some sa_flags bits
+	have meaning even for SIG_IGN/SIG_DFL.
+
+2008-08-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* util.c (CLONE_VM): Define if not defined already.
+	(setbpt): Clear CLONE_VM in the case we already clear CLONE_VFORK for
+	SYS_clone and SYS_clone2.
+	Reported by Michal Nowak.
+	Fixes RH#455078.
+
+2008-08-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Fix compiler warnings.
+	* signal.c (sys_signal): Cast to SIG_* to the matching type LONG.
+	* strace.c (trace): Variables PSR and PC are now signed.
+	* syscall.c (syscall_enter): Variable RBS_END is now signed long.
+	Remove/add the RBS_END casts appropriately.
+	* util.c [IA64] (arg_setup): Variable BSP is now signed long.
+	Remove/add the BSP casts appropriately.
+	<ia32>: Initialize *STATE.
+
+2008-07-31  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (EXTRA_DIST): Add new linux/arm/ files.
+
+	* file.c [LINUX] (struct kernel_dirent): Define it locally,
+	do not use <linux/dirent.h>.
+	Fixes RH#457291.
+
+	* configure.ac: Add AC_HEADER_STDBOOL.
+	* defs.h [HAVE_STDBOOL_H]: #include <stdbool.h>.
+	Fixes Debian#492774.
+
+2008-07-24  Dmitry V. Levin <ldv@altlinux.org>
+
+	* strace.c (main): Fix -F option backwards compatibility.
+
+2008-07-22  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (EXTRA_DIST): Add new debian/ files.
+
+2008-07-21  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac: Version 4.5.17.
+	* strace.spec: 4.5.17-1.
+
+	* defs.h [LINUXSPARC]: Don't #include <linux/a.out.h>.
+
+2008-07-19  Frederik Schüler <fs@debian.org>
+
+	* debian/control: Add strace64 package.
+	* debian/rules: Use debhelper flag --same-arch instead of --arch in
+	order to build strace64 only on the specified architectures.
+	* debian/strace64.install: New file, list for dh_install.
+	* debian/strace64.manpages: New file, list for dh_install.
+	* debian/changelog: Add prereleases entries.
+	Fixes Debian#491167, Debian#491188.
+
+2008-07-18  Andreas Schwab  <schwab@suse.de>
+
+	* linux/ia64/syscallent.h: Decode mincore syscall.
+
+	* linux/powerpc/syscallent.h: Fix argument count for request_key.
+
+	* term.c (term_ioctl): Decode indirect parameter as int, not long.
+
+2008-07-17  Roland McGrath  <roland@redhat.com>
+
+	* NEWS, strace.spec: Updates in preparation for release.
+
+	* process.c (printwaitn): When current personality's wordsize is
+	smaller than native, sign-extend the PID argument from 32 bits.
+
+	* process.c (futexops): Update table.
+	(sys_futex): Handle FUTEX_WAIT_BITSET correctly.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#448628.
+
+	* linux/syscallent.h: Fix "futex" argument count.
+	* linux/alpha/syscallent.h: Likewise.
+	* linux/arm/syscallent.h: Likewise.
+	* linux/hppa/syscallent.h: Likewise.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/m68k/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#448629.
+
+	* signal.c (sigact_flags): Prefer SA_NODEFER to SA_NOMASK,
+	SA_RESETHAND to SA_ONESHOT.
+	Fixes RH#455821.
+
+2008-07-09  Frederik Schüler <fs@debian.org>
+
+	* debian/rules: Remove the broken udeb creation routines, and redo the
+	complete install procedure using debhelper.
+	* debian/strace.docs: New file, list for dh_installdocs.
+	* debian/strace.examples: New file, list for dh_installexamples.
+	* debian/strace.install: New file, list for dh_install.
+	* debian/strace-udeb.install: New file, list for dh_install.
+	* debian/strace.manpages : New file, list for dh_installmanpages.
+	* debian/copyright: Update.
+	* debian/control: Fix libc6 build dependency for alpha and ia64.
+	(strace-udeb: XC-Package-Type): Add header.
+	* debian/changelog: Cosmetic changes.
+
+2008-07-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Trace vfork under -f on all the platforms.
+	* strace.1 <-f>: Describe Linux catches new children immediately.
+	<-F>: Make the option obsolete.  Move the SunOS VFORK comment to the
+	`-f' option description.
+	* defs.h (followvfork): Declaration removed.
+	* strace.c (followvfork): Variable removed.
+	(main) <-F>: Merge with the `-f' option.
+	(trace): Make !FOLLOWVFORK unconditional.
+	* process.c (internal_fork): Make !FOLLOWVFORK unconditional.
+
+2008-07-01  Frederik Schüler <fs@debian.org>
+
+	* debian/changelog: List all bugs closed since the last release.
+	* debian/control: Remove Wichert Akkerman from uploaders list.
+	* debian/control: Bump standards version to 3.8.0.
+	* debian/control: Add Homepage field.
+	* debian/rules: Fix dpkg-gencontrol call.
+	* debian/compat: New file, set to compatibility level 5.
+	* debian/rules: Call dh_clean on clean target.
+	* debian/rules: Add dh_md5sums call.
+	Fixes Debian#439428.
+
+2008-06-30  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Fix ia64 `-f' on clone2 formerly crashing the child.
+	* util.c [IA64] (restore_arg0, restore_arg1): Define as empty.
+	Fixes RH#453438.
+
+2008-06-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* util.c (CLONE_VFORK): Define if not defined already.
+	(setbpt): Clear CLONE_VFORK for SYS_clone and SYS_clone2.
+	Reported by Vitaly Mayatskikh.
+	Fixes RH#455078.
+
+2008-06-29  Dmitry V. Levin <ldv@altlinux.org>
+
+	* linux/x86_64/syscallent.h: Remove duplicate syscall entries
+	for #283 and #284.
+
+2008-06-27  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* linux/syscallent.h: Remove a duplicite syscall stub #326.
+
+2008-05-27  Roland McGrath  <roland@redhat.com>
+
+	* syscall.c [LINUX] (is_negated_errno): New function.
+	(get_error) [LINUX]: Use it for all such cases.
+	Fixes RH#447587.
+
+2008-05-19  Roland McGrath  <roland@redhat.com>
+
+	* linux/x86_64/syscallent.h: Update entries for timerfd_* and fallocate.
+
+	* file.c (sys_fallocate): New function.
+	* linux/syscall.h: Declare it.
+	* linux/syscallent.h: Update entry.
+	From Kyle McMartin <kyle@mcmartin.ca>.
+
+	* time.c (sys_timerfd_create): New function.
+	(sys_timerfd_settime, sys_timerfd_gettime): New functions.
+	* linux/syscall.h: Declare them.
+	* linux/syscallent.h: Update entries for those syscalls.
+	From Kyle McMartin <kyle@mcmartin.ca>.
+
+	* debian/rules (binary-arch): Fix chmod/chown typo.
+	Fixes Debian#459255.
+
+	* debian/rules (binary-arch): Install strace-graph in examples/
+	directory under package doc.
+	Fixes Debian#469068.
+
+	* signal.c (sys_kill): When current personality's wordsize is smaller
+	than native, sign-extend the PID argument from 32 bits.
+	Fixes RH#430585.
+
+	* configure.ac: Add check for struct sigcontext_struct in <signal.h>.
+	* signal.c [! HAVE_ASM_SIGCONTEXT_H] [I386] (struct sigcontext_struct):
+	Conditionalize definition on !HAVE_STRUCT_SIGCONTEXT_STRUCT.
+	Fixes Debian#456879.
+
+	* util.c [LINUX] (setbpt): Use correct SYS_clone number for current
+	personality.
+	Fixes RH#447475.
+
+2008-05-08  David S. Miller  <davem@davemloft.net>
+
+	* syscall.c (socket_map, sparc_socket_decode): Delete.
+	(trace_syscall): Use common socketcall and ipc subcall
+	support on sparc.
+	* linux/sparc/syscall.h (sys_semtimedop): Declare.
+	(SYS_socket_subcall, SYS_sub_socket, SYS_sub_bind,
+	SYS_sub_connect, SYS_sub_listen, SYS_sub_accept,
+	SYS_sub_getsockname, SYS_sub_getpeername,
+	SYS_sub_socketpair, SYS_sub_send, SYS_sub_recv,
+	SYS_sub_sendto, SYS_sub_recvfrom, SYS_sub_shutdown,
+	SYS_sub_setsockopt, SYS_sub_getsockopt, SYS_sub_sendmsg,
+	SYS_sub_recvmsg, SYS_socket_nsubcalls, SYS_ipc_subcall,
+	SYS_sub_semop, SYS_sub_semget, SYS_sub_semctl,
+	SYS_sub_semtimedop, SYS_sub_msgsnd, SYS_sub_msgrcv,
+	SYS_sub_msgget, SYS_sub_msgctl, SYS_sub_shmat,
+	SYS_sub_shmdt, SYS_sub_shmget, SYS_sub_shmctl,
+	SYS_ipc_nsubcalls): Define
+	* linux/sparc/syscallent.h: Add socketcall and ipc entries.
+
+2008-01-25  Bruna Moreira  <bruna.moreira@indt.org>
+
+	* defs.h [ARM]: Define SUPPORTED_PERSONALITIES to 2.
+	* syscall.c (get_scno) [ARM]: Add support for architecture specific
+	syscalls.
+	* linux/arm/syscallent.h: Update network syscalls list.
+	* linux/arm/syscallent1.h: New file. Add new architecture specific
+	syscalls.
+	* linux/arm/errnoent1.h: New file.
+	* linux/arm/ioctlent1.h: New file.
+	* linux/arm/signalent1.h: New file.
+	Fixes Debian#441000.
+
+2008-01-07  Paul Mundt  <lethal@linux-sh.org>
+
+	* linux/sh64/syscallent.h: Update numerous calls, fix others.
+
+2007-08-26  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* defs.h [MIPS]: Include <sgidefs.h>.
+	(MAX_QUALS): Update for MIPS.
+	(LINUX_MIPSO32, LINUX_MIPSN32, LINUX_MIPSN64, LINUX_MIPS64): Define.
+	(struct tcb): Add ext_arg for MIPS N32.
+	(TCB_WAITEXECVE): Define for MIPS.
+	(ALIGN64): Use LINUX_MIPSO32.
+	* file.c (sys_lseek): Use ext_arg for MIPS N32.
+	(sys_readahead, sys_fadvise64_64): Likewise.
+	* io.c (sys_pread64, sys_pwrite64): Likewise.
+	* mem.c (print_mmap): Take OFFSET argument.
+	(sys_old_mmap): Update call to print_mmap.
+	(sys_mmap): Use ext_arg for MIPS N32.
+	* process.c (struct_user_offsets): Add MIPS registers.
+	* signal.c (sys_sigreturn): Handle MIPS N32 and MIPS N64.  Correct
+	MIPS O32 call to sprintsigmask.
+	* syscall.c (internal_syscall): Handle MIPS N32.  Check for
+	TCB_WAITEXECVE on MIPS.
+	(force_result): Add a comment about MIPS N32.
+	(syscall_enter): Handle MIPS N32 and MIPS N64.
+	* linux/syscall.h (sys_pread64, sys_pwrite64): Declare.
+	* linux/mips/syscallent.h: Include "dummy.h".  Handle alternate
+	MIPS ABIs.
+
+2008-04-19  Dmitry V. Levin <ldv@altlinux.org>
+
+	* file.c [_LFS64_LARGEFILE] (sys_getdents64): Do the same
+	d_reclen check as in sys_getdents: warn if d_reclen is 0 rather
+	than looping forever.
+	[FREEBSD] (sys_getdirentries): Likewise.
+	Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+	* file.c [LINUXSPARC] (printstatsol): Fix sprinttime()
+	invocation.  The sprinttime() function takes a time_t argument,
+	but timestruct_t argument was given.
+	Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+	* file.c (sprinttime): Check localtime() return value, to avoid
+	potential NULL dereference due to invalid time structures.
+	Signed-off-by: Harald van Dijk <truedfx@gentoo.org>
+	Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+	* linux/errnoent.h: Update errno list based on latest
+	linux/errno.h and asm-generic/errno*.h files.
+	Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+	* signalent.sh: Fix sort(1) old-style options.
+	* syscallent.sh: Likewise.
+	Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+	* count.c (call_summary_pers): Check calloc() return value.
+	Signed-off-by: "Yang Zhiguo" <yzgcsu@cn.fujitsu.com>
+
+2008-03-26  Roland McGrath  <roland@redhat.com>
+
+	* strace.spec (strace64_arches): Add sparc64.
+
+2007-11-20  Roland McGrath  <roland@redhat.com>
+
+	* CREDITS, ChangeLog: Converted contents to UTF8.
+
+2007-11-19  Roland McGrath  <roland@redhat.com>
+
+	* strace.spec: Add BuildRequires on libaio-devel, libacl-devel.
+
+2007-11-19  Andreas Schwab  <schwab@suse.de>
+
+	* process.c (sys_ptrace) [IA64]: For PTRACE_PEEKDATA,
+	PTRACE_PEEKTEXT and PTRACE_PEEKUSER the data is returned directly.
+
+	* linux/syscallent.h: Fix argument count for getdents64.
+	* linux/arm/syscallent.h: Likewise.
+	* linux/m68k/syscallent.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+
+	* linux/ia64/syscallent.h: Use sys_getdents64.
+	* linux/sh/syscallent.h: Likewise.
+
+2007-11-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* strace.c [LINUX] (droptcb): Recurse on TCP->parent if it is a
+	TCB_EXITING zombie group leader.
+	* test/childthread.c: New file.
+	* test/.cvsignore, test/Makefile: Add it.
+	Code advisory: Roland McGrath
+	Fixes RH#354261.
+
+2007-11-03  Roland McGrath  <roland@redhat.com>
+
+	* process.c (prctl_options): Add numerous constants.
+	From Sami Farin <safari@u.safari.iki.fi>.
+	Fixes RH#364401.
+
+2007-11-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* strace.c (main): Move the STARTUP_CHILD call before setting up the
+	signal handlers.  New comment about the valid internal states.
+
+2007-11-02  Thiemo Seufer  <ths@networkno.de>
+
+	* signal.c (m_siginfo_t): Add for MIPS.
+	(sys_sigreturn): struct sigcontext on MIPS has no sigset_t member,
+	acquire the signal mask with the same trick as on Sparc.
+	Fixes Debian#448802.
+
+2007-11-01  Roland McGrath  <roland@redhat.com>
+
+	* util.c (string_quote): Return nonzero if the string was unterminated.
+	(printstr): Use that value instead of just our own test.
+	(printpathn): Likewise.
+	Fixes RH#358241.
+
+	* linux/mips/syscallent.h: Fix argument count for fadvise64_64.
+	From Paul Mundt <lethal@linux-sh.org>.
+
+	* linux/mips/syscallent.h: Fix argument count for lookup_dcookie.
+	From Paul Mundt <lethal@linux-sh.org>.
+
+	* linux/sh64/syscallent.h: Fix SYS_socket_subcall check.
+	From Paul Mundt <lethal@linux-sh.org>.
+
+	* linux/sh/syscallent.h: Update numerous calls.
+	From Paul Mundt <lethal@linux-sh.org>.
+
+2007-09-22  Dmitry V. Levin <ldv@altlinux.org>
+
+	* desc.c (sys_pselect6): Decode signal mask when entering syscall.
+	Relax signal mask size check.
+
+	* time.c (print_timespec, sprint_timespec): New functions.
+	* defs.h (print_timespec, sprint_timespec): Declare them.
+	* desc.c (sys_io_getevents): Use print_timespec.
+	* stream.c (sys_ppoll): Likewise.
+	(decode_poll): Use sprint_timespec.
+
+2007-09-22  Alan Curry <pacman@world.std.com>
+	    Dmitry V. Levin <ldv@altlinux.org>
+
+	* stream.c (decode_poll): Rearrange so that arguments are decoded
+	and printed on syscall entry, except for revents and the output
+	timespec which are now printed in the auxstr.
+	(sys_poll): Print the input timeout argument on syscall entry.
+	[LINUX] (sys_ppoll): Likewise.
+	Fixes Debian#369651.
+
+2007-09-22  Dmitry V. Levin <ldv@altlinux.org>
+
+	* desc.c (sprintflags): Remove static qualifier, add "prefix"
+	argument, move function to ...
+	* util.c (sprintflags): ... here.
+	* defs.h (sprintflags): Declare it.
+
+2007-11-01  Roland McGrath  <roland@redhat.com>
+
+	* syscall.c (get_scno) [ARM]: Check TCB_WAITEXECVE.
+	Reported by Bernhard Fischer <rep.dot.nop@gmail.com>.
+
+	* net.c (sockpacketoptions): Make PACKET_ADD_MEMBERSHIP and
+	PACKET_DROP_MEMBERSHIP conditional.
+	From Bernhard Fischer <rep.dot.nop@gmail.com>.
+
+	* configure.ac: Match sh64* for SH64, sh* for SH.
+	Reported by Bernhard Fischer <rep.dot.nop@gmail.com>.
+
+2007-10-01  Dmitry V. Levin <ldv@altlinux.org>
+
+	* net.c (printsock): Output AF_UNIX socket address using
+	printpathn() to avoid unprintable characters in output.
+	Suggested by Neil Campbell.
+
+2007-10-01  Dmitry V. Levin <ldv@altlinux.org>
+
+	* util.c (string_quote): Move quoting code from ...
+	(printstr) ... here.  Use string_quote.
+	(printpathn): Update for new string_quote interface.
+	(printpath): Use printpathn.
+
+2007-09-25  Dmitry V. Levin <ldv@altlinux.org>
+
+	* strace.c (main): Use calloc for tcbtab allocation.
+	Check calloc return value.
+	Reported by Bai Weidong.
+
+2007-09-11  Roland McGrath  <roland@redhat.com>
+
+	* linux/sparc/syscall.h: Add missing decls.
+	* linux/sparc/syscallent.h: Correct entries for setgroups32,
+	getgroups32, sys_getdents64.
+	From Jakub Bogusz <qboosh@pld-linux.org>.
+
+	* linux/alpha/syscallent.h: Correct entries for madvise, setresgid,
+	getresgid, pivot_root, mincore, pciconfig_iobase, getdents64.
+	From Jakub Bogusz <qboosh@pld-linux.org>.
+
+	* linux/syscallent.h: Fix getegid32 entry.
+	From Jakub Bogusz <qboosh@pld-linux.org>.
+
+	* defs.h [LINUXSPARC]: Use asm/psrcompat.h for [SPARC64], not asm/psr.h.
+	From Jakub Bogusz <qboosh@pld-linux.org>.
+
+	* mem.c (sys_getpagesize): Define for [SPARC || SPARC64] too.
+	From Jakub Bogusz <qboosh@pld-linux.org>.
+
+2007-08-20  Dmitry V. Levin <ldv@altlinux.org>
+
+	* syscall.c (qual_syscall, qualify): Fix nsyscalls and MAX_QUALS misuse.
+	Reported by Xiaoning Ding.
+
+2007-08-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Roland McGrath  <roland@redhat.com>
+
+	* file.c [!HAVE_STAT64 && LINUX && X86_64] (struct stat64): Define it.
+	[!HAVE_STAT64 && LINUX && X86_64] (HAVE_STAT64, STAT64_SIZE): Define.
+	[HAVE_STAT64] (printstat64) [STAT64_SIZE]: Add compile-time assertion.
+	Fixes RH#222275.
+
+	* file.c (printstat64): Test [HAVE_LONG_LONG] for st_size printing
+	and cast to widest type available.
+
+2007-08-03  Ulrich Drepper  <drepper@redhat.com>
+
+	* file.c (open_mode_flags): Add O_CLOEXEC.
+	* net.c (msg_flags): Add MSG_CMSG_CLOEXEC.
+	Fixes RH#365781.
+
+2007-08-03  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.16.
+	* debian/changelog, strace.spec: 4.5.16-1.
+
+	* debian/control (Build-Depends): Replace libc6-dev-s390x and
+	libc6-dev-sparc64 with gcc-multilib.
+	* debian/rules: Replace sparc-linux, s390-linux conditionals with
+	general "arch64_map" hair, handle x86_64 and powerpc64 too.
+	From Matthias Klose <doko@cs.tu-berlin.de>.
+	Fixes Debian#435303.
+
+2007-08-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* strace.c (detach): Moved the resume notification code to ...
+	(resume_from_tcp): ... a new function here.
+	(handle_group_exit): No longer detach also the thread group leader.
+	(trace): Fixed panic on exit of the TCB_GROUP_EXITING leader itself.
+	Fixes RH#247907.
+
+	* test/leaderkill.c (start): Renamed to ...
+	(start0): ... here.
+	(start1): New function.
+	(main): Created a new spare thread.
+
+2007-08-01  Roland McGrath  <roland@redhat.com>
+
+	* util.c (umoven): Don't perror for EIO.
+	(umovestr): Likewise.
+
+	* process.c (printargv): Handle boundary cases correctly.
+	Handle biarch fetching correctly.
+
+	* util.c (printstr): Don't print ... if the string matches the length
+	limit exactly.
+
+	* linux/sparc64/syscallent.h: Just #include the sparc file.
+	* linux/sparc64/syscallent1.h: Likewise.
+	* linux/sparc64/syscallent2.h: Likewise.
+
+	* linux/arm/syscallent.h: Add entry for getcpu.
+	* linux/hppa/syscallent.h: Likewise.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+
+	* linux/arm/syscallent.h: Add entry for eventfd.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+
+	* linux/arm/syscallent.h: Add entry for timerfd.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+
+	* linux/arm/syscallent.h: Add entry for signalfd.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+
+	* linux/hppa/syscallent.h: Add entry for epoll_pwait.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+
+2007-07-23  Ulrich Drepper  <drepper@redhat.com>
+
+	* process.c (sys_getcpu): New function.
+	* linux/syscall.h: Declare sys_getcpu.
+	* linux/syscallent.h: Add entry for getcpu.
+
+	* desc.c (sys_eventfd): New function.
+	* linux/syscall.h: Declare sys_eventfd.
+	* linux/syscallent.h: Add entry for eventfd.
+	* linux/x86_64/syscallent.h: Likewise.
+
+	* time.c (printitv_bitness): Add missing braces to enclose
+	conditional code.
+	(TDF_TIMER_ABSTIME): Define if not already.
+	(timerfdflags): New variable.
+	(sys_timerfd): New function.
+	* linux/syscall.h: Declare sys_timerfd.
+	* linux/syscallent.h: Add timerfd entry.
+	* linux/x86_64/syscallent.h: Likewise.
+
+	* linux/syscall.h: Declare sys_signalfd.
+	* linux/syscallent.h: Add entry for signalfd.
+	* linux/x86_64/syscallent.h: Likewise.
+	* signal.c (sys_signalfd): New function.
+
+	* desc.c (sys_epoll_wait): Move body of function to ...
+	(epoll_wait_common): ...here.  New function.
+	(sys_epoll_pwait): New function.
+	* linux/syscall.h: Declare sys_epoll_pwait.
+	* linux/syscallent.h: Add entry for epoll_pwait.
+	* linux/x86_64/syscallent.h: Likewise.
+
+2007-07-23  Roland McGrath  <roland@redhat.com>
+
+	* time.c (printtv_bitness): SPECIAL only counts when tv_sec == 0.
+
+	* linux/arm/syscallent.h: Add move_pages.
+	* linux/hppa/syscallent.h: Likewise.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/m68k/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+
+	* linux/syscallent.h: move_pages takes 6 args, not 5.
+	* linux/x86_64/syscallent.h: Likewise.
+
+2007-07-23  Ulrich Drepper  <drepper@redhat.com>
+
+	* defs.h: Add new parameter to printtv_bitness prototype.
+	(printttv): Pass zero for the new parameter.
+	(printtv_special): New macro.
+	* desc.c (decode_select): Pass zero for the new parameter of
+	printtv_bitness.
+	* file.c (utimensatflags): New macro.
+	(sys_osf_utimes): Pass zero for the new parameter of
+	printtv_bitness.
+	(sys_utimes): Likewise.
+	(sys_futimesat): Likewise.
+	(decode_utimes): Add new parameter.  Pass it to the
+	printtv_bitness calls.  Fix printing of time values.
+	(sys_utimensat): New function.
+	* time.c (UTIME_NOW, UTIME_OMIT): Define if not already
+	happened.
+	(printtv_bitness): Add new parameter.  Print special UTIME_*
+	values as strings if set.
+	(sys_osf_gettimeofday): Pass zero for the new parameter of
+	printtv_bitness.
+	(sys_osf_settimeofday): Likewise.
+	* linux/syscall.h: Declare sys_utimensat.
+	* linux/syscallent.h: Add utimensat entry.
+	* linux/x86_64/syscallent.h: Likewise.
+
+	* mem.c (move_pages_flags): New variable.
+	(sys_move_pages): New function.
+	* linux/syscall.h: Declare sys_move_pages.
+	* linux/syscallent.h: Add entry for sys_move_pages.
+	* linux/x86_64/syscallent.h: Likewise.
+
+	* mem.c (MPOL_MF_MOVE, MPOL_MF_MOVE_ALL): Define.
+	(mbindflags): Add MPOL_MF_MOVE and MPOL_MF_MOVE_ALL entries.
+
+2007-07-23  Roland McGrath  <roland@redhat.com>
+
+	* util.c (tv_add): Fix rounding comparison.
+	Reported by Bai Weidong <baiwd@cn.fujitsu.com>.
+
+2007-07-11  Roland McGrath  <roland@redhat.com>
+
+	* count.c (call_summary_pers): Use tv_float conversion for output of
+	cumulative time, in case it is negative from bogus -O value.
+	From Lai JiangShan <laijs@cn.fujitsu.com>.
+
+	* strace.c (handle_group_exit): Detach TCP before LEADER.
+	Don't use PTRACE_KILL on LEADER.
+
+	* util.c (printstr): Fix size calculation for outstr allocation.
+
+	* configure.ac (struct sigcontext.sc_hi2): Use #ifdef around
+	<asm/sigcontext.h> to match signal.c include conditions.
+
+2007-07-05  Roland McGrath  <roland@redhat.com>
+
+	* debian/rules: Use debian/$(package) instead of debian/tmp as temp dir.
+
+	* configure.ac: Use <stddef.h> before <linux/socket.h>.
+
+	* debian/changelog: Harmonize with debian version.
+	* debian/control (Uploaders): Fix surname spelling.
+	(Build-Depends): Make debhelper requirement (>= 5.0.0).
+	(Standards-Version): Update to 3.7.2.
+
+	* .cvsignore: Add some automake-created files.
+
+	* file.c (sys_utime): Use personality_wordsize to handle biarch.
+	Fixes RH#247185.
+
+	* signal.c (sys_sigreturn) [MIPS]: Pass 3rd arg to sprintsigmask.
+	From Zhang Le <zhilg@users.sourceforge.net>.
+
+	* strace.c (strace_fopen): [_LFS64_LARGEFILE]: Use fopen64.
+	Fixes Debian#385310.
+
+	* strace.c (main): Fix error message for unfound -u user.
+	From Srinivasa Ds <srinivasa@in.ibm.com>.
+	Fixes RH#247170.
+
+	* debian/control (Architecture): Add armel.
+
+	* linux/syscallent.h: Fix sys_delete_module arg count.
+	* linux/alpha/syscallent.h: Likewise.
+	* linux/arm/syscallent.h: Likewise.
+	* linux/hppa/syscallent.h: Likewise.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/m68k/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+	* linux/sparc64/syscallent2.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+	* linux/dummy.h (sys_delete_module): Use sys_open.
+	From Johannes Stezenbach <js@linuxtv.org>.
+
+	* configure.ac: Check for struct sigcontext.sc_hi2.
+	* signal.c (sys_sigreturn) [MIPS]: Use sc_hi2 vs sc_sigset if found.
+
+	* process.c [LINUX] (futexops): Add many new values.
+	[LINUX] (futexwakeops, futexwakecmps): New tables.
+	[LINUX] (sys_futex): Use them.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#241467.
+
+2007-07-05  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* strace.c (detach): New prototype.  Extended the function comment.
+	[LINUX] (detach): Call droptcb() instead of the wrongly parametrized
+	detach() call.
+	(handle_group_exit): Call droptcb() instead of the wrongly parametrized
+	detach() call.	Always call detach() only once from the group leader.
+	Comment the leader killing known bug tested by `test/leaderkill.c'.
+	Code advisory: Roland McGrath
+	Fixes RH#240961.
+
+	* test/leaderkill.c: New file.
+	* test/.cvsignore, test/Makefile: Add it.
+
+2007-03-21  Andreas Schwab  <schwab@suse.de>
+
+	* file.c (sys_newfstatat): Don't use printstat64 on ppc64.
+
+2007-03-29  Vladimir Nadvornik <nadvornik@suse.cz>
+	    Dmitry V. Levin <ldv@altlinux.org>
+
+	Trace linux SG_IO ioctl arguments and results.
+	* scsi.c: New file.
+	* Makefile.am (strace_SOURCES): Add it.
+	* defs.h (scsi_ioctl): New function.
+	* ioctl.c (ioctl_decode): Use scsi_ioctl().
+
+2007-06-28  Dmitry V. Levin <ldv@altlinux.org>
+
+	* util.c (tv_mul): Multiply tv_usec properly.
+	Patch from Cai Fei <caifei@cn.fujitsu.com>.
+
+2007-06-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	Never interrupt when the attached traced process would be left stopped.
+	* strace.c (main): `-p' attaching moved to ...
+	(startup_attach): ... a new function, renamed a variable C to TCBI.
+	Block interrupting signals since the first tracee has been attached.
+	New comment about INTERRUPTED in the nonthreaded case.
+	[LINUX] (startup_attach): Check INTERRUPTED after each attached thread.
+	(main): Command spawning moved to ...
+	(startup_child): ... a new function, replaced RETURN with EXIT.
+	[LINUX] (detach): New variable CATCH_SIGSTOP, do not signal
+	new SIGSTOP for processes still in TCB_STARTUP.
+	(main): Move signals and BLOCKED_SET init before the tracees attaching,
+	[SUNOS4] (trace): Removed fixvfork () call as a dead code, SIGSTOP must
+	have been already caught before clearing TCB_STARTUP.
+	(trace): Removed the `!WIFSTOPPED(status)' dead code.
+	Clear TCB_STARTUP only in the case the received signal was SIGSTOP.
+	New comment when `TCB_BPTSET && TCB_STARTUP' combination can be set.
+	Code advisory: Roland McGrath
+	Fixes RH#240986.
+
+2007-05-24  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* strace.c [LINUX] (my_tgkill): New macro.
+	[LINUX] (detach): Use my_tgkill () instead of kill(2).
+	Fixes RH#240962.
+
+2007-03-30  Dmitry V. Levin <ldv@altlinux.org>
+
+	* mem.c (mmap_flags): Add MAP_32BIT.
+	Reported by Kirill A. Shutemov.
+
+2007-01-12  Dmitry V. Levin <ldv@altlinux.org>
+
+	* sock.c (sock_ioctl): Check umove() return code.
+	[LINUX]: Handle SIOCGIFTXQLEN and SIOCGIFMAP.
+
+2007-03-16  Roland McGrath  <roland@redhat.com>
+
+	* linux/s390/syscallent.h: Use sys_restart_syscall for 7.
+	* linux/s390x/syscallent.h: Likewise.
+
+2007-02-18  Roland McGrath  <roland@redhat.com>
+
+	* strace.spec (Summary): Remove trailing period.
+	(%files): Add %doc files.
+	(%changelog): Double %s in text.
+	(BuildRoot): Change to Fedora canonical.
+	(%install): Don't use %makeinstall macro.
+	(%build): Use %{?_smp_mflags}.
+
+2007-01-16  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.15.
+	* debian/changelog, strace.spec: 4.5.15-1.
+
+2007-01-16  Dmitry V. Levin <ldv@altlinux.org>
+
+	Update mount parser to match kernel behaviour.
+	* system.c [LINUX] (MS_VERBOSE): Rename to MS_SILENT.
+	[LINUX] (MS_UNBINDABLE, MS_PRIVATE, MS_SLAVE, MS_SHARED):
+	New macros.
+	[LINUX] (mount_flags): Add them.
+	[LINUX] (MS_MGC_MSK): New macro.
+	[LINUX] (sys_mount): Update parser to match kernel behaviour:
+	discard MS_MGC_VAL magic, do not decode type and/or data
+	strings when specified flags do not imply valid strings.
+
+2007-01-12  Dmitry V. Levin <ldv@altlinux.org>
+
+	* time.c [LINUX] (tprint_timex32, tprint_timex): Decode adjtimex
+	modes as flags.
+
+2007-01-11  Dmitry V. Levin <ldv@altlinux.org>
+
+	Update umount parser.
+	* system.c [LINUX] (MNT_FORCE, MNT_DETACH, MNT_EXPIRE): New macros.
+	[LINUX] (umount_flags): New xlat structure with MNT_* entries.
+	[LINUX] (sys_umount2): Use umount_flags.
+
+	Fix open(2) flags parser.
+	* defs.h (tprint_open_modes): New function.
+	* desc.c (sprint_open_modes): New function.
+	(sys_fcntl): Use tprint_open_modes() and sprint_open_modes().
+	* file.c (openmodes): Split xlat into open_access_modes and
+	open_mode_flags.
+	(tprint_open_modes): New function.
+	(decode_open): Use it.
+	* ipc.c (sys_mq_open, printmqattr): Likewise.
+	Fixes RH#222385.
+
+2007-01-11  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.15.
+	* debian/changelog, strace.spec: 4.5.15-1.
+
+	* debian/control (Uploaders): Add Frederik Schueler <fs@debian.org>.
+
+	* strace.spec (Release): Use %{?dist}.
+
+	* system.c [LINUX] (CTL_CPU): Define in case header is missing it.
+
+2006-12-27  Dmitry V. Levin <ldv@altlinux.org>
+
+	Add const qualifier to xlookup() return value.
+	* defs.h (xlookup): Add const qualifier to return value.
+	* desc.c (sprintflags): Likewise.
+	* process.c (printpriv): Update xlookup() use.
+	* signal.c (sprintsigmask): Add const qualifier to first argument and
+	return value.
+	* util.c (xlookup): Add const qualifier to return value.
+	(printxval): Update xlookup() use.
+
+2006-12-21  Dmitry V. Levin <ldv@altlinux.org>
+
+	Move counts code to separate file.
+	* count.c: New file.
+	* Makefile.am (strace_SOURCES): Add count.c.
+	* syscall.c (call_counts, countv, counts, shortest, time_cmp,
+	syscall_cmp, count_cmp, sortfun, overhead, set_sortby,
+	set_overhead, call_summary_pers, call_summary): Move to count.c
+	* count.c (count_syscall): New function.
+	* defs.h (count_syscall): Declare it.
+	* syscall.c (trace_syscall): Use it.
+
+2006-12-20  Dmitry V. Levin <ldv@altlinux.org>
+
+	* syscall.c (internal_syscall): Change conditions for internal_exit,
+	internal_fork, internal_clone, internal_exec and internal_wait
+	calls from switching on known scno values to switching on known
+	sysent[tcp->scno].sys_func values.
+	Fixes RH#179740.
+
+	Show system call summary for each personality.
+	* syscall.c (countv): New call_counts pointers array.
+	(counts): Convert to macro wrapper around countv.
+	(call_summary_pers): New function.
+	(call_summary): Use it for each personality.
+	Fixes RH#192193.
+
+2006-12-12  Dmitry V. Levin <ldv@altlinux.org>
+
+	Fix -ff -o behaviour.  Fix piping trace output.
+	* defs.h (newoutf): Remove.
+	(alloctcb): Rename to alloc_tcb.  Add alloctcb() macro wrapper
+	around alloc_tcb().
+	* process.c [!USE_PROCFS] (internal_clone, internal_fork):
+	Remove newoutf() call.
+	* strace.c (set_cloexec_flag, strace_fopen, strace_popen,
+	swap_uid): New functions.
+	(popen_pid): New variable.
+	(newoutf): Make static, use strace_fopen().
+	(main): Use strace_fopen() and strace_popen(), remove uids
+	swapping.  Do not open outfname when followfork > 1.
+	Reinitialize tcp->outf properly.
+	(alloctcb): Rename to alloc_tcb.  Use newoutf().
+	(trace): Check popen_pid.  Remove newoutf() call.
+	[USE_PROCFS] (proc_open, proc_poll_open): Use set_cloexec_flag().
+	Fixes RH#204950, RH#218435, Debian#353935.
+
+2006-12-10  Dmitry V. Levin <ldv@altlinux.org>
+
+	Add biarch support for "struct sigevent".
+	* time.c [LINUX && SUPPORTED_PERSONALITIES > 1] (printsigevent32):
+	New function.
+	[LINUX] (printsigevent): [SUPPORTED_PERSONALITIES > 1]
+	Handle 32-bit personality.
+
+	Add biarch support for "struct timex".
+	* time.c [LINUX && SUPPORTED_PERSONALITIES > 1] (tprint_timex32):
+	New function.
+	[LINUX] (tprint_timex): New function.
+	[LINUX] (sys_adjtimex): Use it.
+
+	Enhance adjtimex parser.
+	* time.c [LINUX] (adjtimex_modes, adjtimex_status,
+	adjtimex_state): New xlat structures.
+	[LINUX] (sys_adjtimex): Print the whole struct timex.
+	Decode modes, status and return code.
+
+	Add biarch support for "struct itimerval".
+	* time.c (printitv): Rename to printitv_bitness().
+	Add printitv() macro wrapper around printitv_bitness().
+	(printitv_bitness): Handle 32-bit personality.
+	[ALPHA] (sys_osf_getitimer, sys_osf_setitimer):
+	Use printitv_bitness().
+	(tprint_timeval, tprint_timeval32): New functions.
+	(printtv_bitness, printitv_bitness, sys_adjtimex): Use them.
+	(printitv32): Remove.
+
+	Add biarch support for "struct timeval".
+	* defs.h (bitness_t): New enum type.
+	(printtv_bitness, sprinttv): New function prototypes.
+	(printtv): Convert to macro wrapper around printtv_bitness().
+	(printtv32): Remove.
+	* desc.c (decode_select): Use printtv_bitness() and sprinttv().
+	(sys_oldselect, sys_osf_select, sys_select, sys_pselect6):
+	Update decode_select() use.
+	* file.c [ALPHA] (sys_osf_utimes): Use printtv_bitness().
+	* time.c (printtv_bitness, sprinttv): New functions.
+	(printtv, printtv32): Remove.
+	[ALPHA] (sys_osf_settimeofday, sys_osf_settimeofday):
+	Use printtv_bitness().
+	Fixes RH#171626, RH#173050.
+
+	Add biarch support for "struct iovec".
+	* defs.h (personality_wordsize): Add.
+	* io.c [HAVE_SYS_UIO_H] (tprint_iov): [LINUX &&
+	SUPPORTED_PERSONALITIES > 1] Handle 32-bit personality.
+	* util.c [HAVE_SYS_UIO_H] (dumpiov): [LINUX &&
+	SUPPORTED_PERSONALITIES > 1] Likewise.
+	Patch from Jakub Jelinek.
+	Fixes RH#218433.
+
+	* time.c (sys_timer_create): Check umove() return code.
+
+	Make several global variables static.
+	#ifdef definitions of rarely unused functions.
+	* defs.h (rflag, tflag, outfname): Remove.
+	* strace.c (iflag, interactive, pflag_seen, rflag, tflag,
+	outfname, username): Make static.
+	* desc.c (sys_getdtablesize): Define only for
+	ALPHA || FREEBSD || SUNOS4.
+	* file.c (sys_fchroot): Define only for SUNOS4 || SVR4.
+	(sys_mkfifo): Define only for FREEBSD.
+	* mem.c (sys_sbrk): Define only for FREEBSD || SUNOS4.
+	(sys_getpagesize): Define only for
+	ALPHA || FREEBSD || IA64 || SUNOS4 || SVR4.
+	* net.c (sys_so_socket): Define only for SVR4.
+	* process.c (sys_gethostid): Define only for
+	FREEBSD || SUNOS4 || SVR4.
+	(sys_gethostname): Define only for
+	ALPHA || FREEBSD || SUNOS4 || SVR4.
+	(sys_setpgrp): Define only for ALPHA || SUNOS4 || SVR4.
+	(sys_execv): Define only for SPARC || SPARC64 || SUNOS4.
+	* signal.c (sys_sigblock): Define only for FREEBSD || SUNOS4.
+	(sys_sighold, sys_sigwait): Define only for SVR4.
+	(sys_killpg): Define only for FREEBSD || SUNOS4.
+	* stream.c (sys_getmsg): Define only for
+	SPARC || SPARC64 || SUNOS4 || SVR4.
+	* syscall.c (sys_indir): Define only for SUNOS4.
+
+2006-11-27  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* system.c [LINUX]: Define CTL_PROC, since Linux 2.6.18+ headers
+	removed CTL_PROC enum.	Patch from Jakub Jelinek.
+	[LINUX] (sysctl_root): Add CTL_BUS, CTL_ABI and CTL_CPU.
+
+2006-11-20  Jakub Jelinek  <jakub@redhat.com>
+
+	* linux/ia64/syscallent.h: Add #if check to make sure that
+	SYS_socket_subcall adjustment isn't forgotten again.
+
+2006-10-16  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Implement comprehensive quotactl(2) parser for Linux.
+	* Makefile.am (strace_SOURCES): Add quota.c.
+	* quota.c: New file.
+	* resource.c: Remove old quotactl(2) parser.
+	Fixes RH#118696.
+
+2006-10-14  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* configure.ac (AC_CHECK_HEADERS): Add inttypes.h.
+	* file.c [_LFS64_LARGEFILE && (LINUX || SVR4)]:
+	Include <inttypes.h>.
+	(sys_getdents64): Use PRIu64/PRId64 to avoid gcc warnings on
+	64-bit platforms.
+
+	* strace.c (main): Check getcwd() return code.
+
+2006-10-13  Ulrich Drepper  <drepper@redhat.com>
+	    Bernhard Kaindl <bk@suse.de>
+	    Dmitry V. Levin  <ldv@altlinux.org>
+	    Michael Holzheu <holzheu@de.ibm.com>
+
+	Add hooks for new syscalls.  Add decoders for *at, inotify*,
+	pselect6, ppoll and unshare syscalls.
+
+	* defs.h: Declare print_sigset.
+	* desc.c (sys_pselect6): New function.
+	* file.c (decode_open, decode_access, decode_mkdir,
+	decode_readlink, decode_chmod, decode_utimes, decode_mknod):
+	New functions.
+	(sys_open, sys_access, sys_mkdir, sys_readlink, sys_chmod,
+	sys_utimes, sys_mknod): Use them.
+	[LINUX] (fstatatflags, unlinkatflags, inotify_modes): New
+	variables.
+	[LINUX] (print_dirfd, sys_openat, sys_faccessat,
+	sys_newfstatat, sys_mkdirat, sys_linkat, sys_unlinkat,
+	sys_symlinkat, sys_readlinkat, sys_renameat, sys_fchownat,
+	sys_fchmodat, sys_futimesat, sys_mknodat, sys_inotify_add_watch,
+	sys_inotify_rm_watch): New functions.
+	* process.c [LINUX] (sys_unshare): New function.
+	* signal.c (print_sigset): New function.
+	(sys_sigprocmask): Use it.
+	* stream.c (decode_poll): New function.
+	(sys_poll): Use it.
+	[LINUX] (sys_ppoll): New function.
+	* linux/syscall.h: Delcare new syscall handlers.
+	* linux/syscallent.h: Hook up new syscalls.
+	* linux/alpha/syscallent.h: Likewise.
+	* linux/hppa/syscallent.h: Likewise.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+	Fixes RH#178633.
+
+2006-10-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* strace.c [!USE_PROCFS] (trace): Presence of PT_GETSIGINFO
+	macro does not mean that PT_CR_IPSR and PT_CR_IIP macros are
+	also defined, so check them along with PT_GETSIGINFO.
+	Fixes RH#209856.
+
+2006-09-01  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* file.c (print_xattr_val): Fix memory corruption bug reported
+	by James Antill.
+	Fixes RH#200621.
+
+2006-04-21  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* defs.h [LINUX && X86_64 && !__NR_exit_group]: Define
+	__NR_exit_group.
+
+2006-03-29  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Fix race conditions in tcb allocation.
+	* process.c (fork_tcb): Return error code as documented.  Do not
+	print "tcb table full" error message.
+	[USE_PROCFS] (internal_fork): Do not print "tcb table full"
+	error message.
+	[SYS_clone || SYS_clone2] (internal_clone, internal_fork): Call
+	fork_tcb() before alloctcb().  Do not print "tcb table full"
+	error message.
+	* strace.c (main): Do not print "tcb table full" error message.
+	(expand_tcbtab): Print error message in case of memory allocation
+	failure.
+	(alloctcb): Print error message when tcb table is full.
+	(trace): Expand tcb table if necessary prior to allocating
+	entry there.  Do not print "tcb table full" error message.
+	Fixes RH#180293.
+
+2006-08-22  Roland McGrath  <roland@redhat.com>
+
+	* ipc.c (sys_msgget, sys_semget, sys_shmget): Show key values in hex.
+	Fixes RH#198179.
+
+2006-08-21  Roland McGrath  <roland@redhat.com>
+
+	* linux/syscall.h (SYS_socket_subcall): Bump to 400.
+	* linux/syscallent.h: Update table.
+	* linux/arm/syscallent.h: Likewise.
+	* linux/m68k/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	Fixes RH#201462.
+
+2006-04-25  Roland McGrath  <roland@redhat.com>
+
+	* strace.c (main): Fail when -c is given with -ff.
+	* strace.1: Note their incompatibility.
+	Fixes RH#187847.
+
+	* strace.c (main): Fail when nonoption args follow -p switches.
+	Fixes Debian#361302.
+
+	* Makefile.am (EXTRA_DIST): Add xlate.el.
+
+	* linux/mips/Makefile.in: File removed, unused cruft.
+	* linux/sparc/Makefile.in: Likewise.
+
+	* strace.spec (Source0): Use http://dl.sourceforge.net URL.
+
+	* ipc.c (sys_semtimedop): Fixed inverted indirect_ipccall test.
+	* linux/hppa/syscallent.h: Fixed semtimedop entry.
+	From Mike Stroyan <mike.stroyan@hp.com>.
+	Fixes Debian#340239.
+
+2006-03-30  Daniel Jacobowitz  <dan@codesourcery.com>
+
+	* linux/arm/syscallent.h: Correct the name of exit.  Remove
+	M68K conditionals and sys_security.  Correct syscalls 243-282.
+	Fixes Debian#360154.
+
+	* process.c (change_syscall): Add ARM support.
+	* syscall.c (get_scno): Handle ARM EABI.
+	Fixes Debian#360152.
+
+2006-01-16  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.14.
+	* debian/changelog, strace.spec: 4.5.14-1.
+
+2006-01-13  Roland McGrath  <roland@redhat.com>
+
+	* debian/control (Build-Depends): Add debhelper.
+
+2006-01-12  Roland McGrath  <roland@redhat.com>
+
+	* signal.c [LINUX] (sys_restart_syscall): New function.
+	* linux/syscall.h: Declare sys_restart_syscall.
+	* linux/sparc/syscall.h: Likewise.
+	* linux/syscallent.h: Call 0 is restart_syscall.
+	* linux/arm/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/m68k/syscallent.h: Likewise.
+	* linux/hppa/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+	* linux/alpha/syscallent.h: Use sys_restart_syscall.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+	Fixes RH#165469, Debian#350641.
+
+2005-08-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* system.c [LINUX] (MS_MGC_VAL): New macro.
+	[LINUX] (mount_flags): Add it.
+	[LINUX] (sys_mount): If neither MS_BIND nor MS_MOVE bits are
+        set in the flags argument, try to fetch data string.
+	Fixes RH#165377.
+
+2006-01-12  Roland McGrath  <roland@redhat.com>
+
+	* system.c (sys_sysctl): Don't read off end of NAME when max_strlen
+	exceeds INFO.nlen.
+	From Timo Lindfors <timo.lindfors@iki.fi>.
+	Fixes Debian#339117.
+
+	* debian/rules (binary-arch): Don't pass -s to install.  Use dh_strip.
+	Fixes Debian#325132.
+
+	* debian/control (Standards-Version): Update to 3.6.2.
+
+	* defs.h [LINUXSPARC] (PERSONALITY0_WORDSIZE, PERSONALITY1_WORDSIZE):
+	New macros.
+	[SPARC64] (PERSONALITY2_WORDSIZE): New macro.
+	[X86_64] (PERSONALITY0_WORDSIZE, PERSONALITY1_WORDSIZE): New macros.
+	* syscall.c (PERSONALITY0_WORDSIZE): New macro if undefined.
+	(personality_wordsize): New variable.
+	(decode_subcall): Use it for size of argument words.
+	Fixes RH#174354.
+
+2005-11-17  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Implement qual_flags support for each personality.
+	* strace.c (main): Move qualify calls after set_personality call.
+	* syscall.c (qual_flags0): New variable..
+	[SUPPORTED_PERSONALITIES >= 2] (qual_flags1): New variable.
+	[SUPPORTED_PERSONALITIES >= 3] (qual_flags2): New variable.
+	(qual_flags): Change variable definition from array to pointer.
+	(set_personality): Initialize qual_flags variable.
+	(qualify_one): Add "pers" argument to specify personality.
+	[SUPPORTED_PERSONALITIES >= 2]: Set qual_flags1 if requested.
+	[SUPPORTED_PERSONALITIES >= 3]: Set qual_flags2 if requested.
+	(qual_syscall): Pass personality to qualify_one.
+	[SUPPORTED_PERSONALITIES >= 2]: Look for syscall also in sysent1
+	table.
+	[SUPPORTED_PERSONALITIES >= 3]: Look for syscall also in sysent2
+	table.
+	(qual_signal): Pass personality to qualify_one.
+	(qual_desc): Likewise.
+	(qualify): Use qualify_one instead of manual qual_flags
+	manipulations.
+	[SUPPORTED_PERSONALITIES >= 2]: Look for syscall also in sysent1
+	table.
+	[SUPPORTED_PERSONALITIES >= 3]: Look for syscall also in sysent2
+	table.
+	* defs.h: Update qual_flags declaration.
+	Fixes RH#173986.
+
+2005-11-14  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* syscall.c (qual_syscall): Handle numeric syscall specification.
+	Fixes RH#174798.
+
+	* syscall.c (qual_signal, qual_options): Remove redundant argument
+	check.
+
+2005-12-01  Roland McGrath  <roland@redhat.com>
+
+	* ipc.c (indirect_ipccall) [MIPS || HPPA]: Return false.
+	Fixes Debian#340239.
+
+	* Makefile.am (EXTRA_DIST): Add linux/arm/syscallent.h
+	and linux/m68k/syscallent.h.
+	Fixes Debian#336197.
+
+	* debian/control (Architecture): Add armeb.
+	Fixes Debian#335681.
+
+2005-11-02 Michal Marek  <mmarek@suse.cz>
+
+	* strace-graph (handle_trace): follow clone() and vfork() calls.
+
+2005-10-25  Heiko Carstens  <heiko.carstens@de.ibm.com>
+
+	* linux/s390/syscallent.h: Added ioprio_set, ioprio_get,
+	inotify_init, inotify_add_watch, inotify_rm_watch.
+	Corrected number of arguments for request_key.
+	* linux/s390x/syscallent.h: Likewise.
+
+2005-12-01  Roland McGrath  <roland@redhat.com>
+
+	* ipc.c (indirect_ipccall) [IA64]: Return false unless the syscall
+	number is in the low range of IA32 syscalls.
+
+2005-10-07  Andreas Schwab  <schwab@suse.de>
+
+	* linux/ia64/syscallent.h: Syscall 1105 is gettid, not ioperm.
+
+2005-12-01  Roland McGrath  <roland@redhat.com>
+
+	* resource.c (resources): Add RLIMIT_NICE, RLIMIT_RTPRIO.
+	Reported by Scott Tsai <scottt958@yahoo.com.tw>.
+
+	* ipc.c (indirect_ipccall): New function.
+	(sys_msgctl, sys_msgsnd, sys_msgrcv, sys_semop): Use that predicate
+	instead of #ifdef LINUX test.
+	[LINUX] (sys_semtimedop): Likewise.
+	(sys_shmctl, sys_shmat, sys_shmdt): Likewise.
+	Fixes RH#164755.
+
+2005-07-31  Ulrich Drepper  <drepper@redhat.com>
+
+	* linux/x86_64/syscallent.h: Fix syscall parameter count for msgrcv and
+	msgctl.
+
+	* ipc.c (sys_msgrcv): Add entering handling and print first parameter
+	there.
+	Fixes RH#164757.
+
+2005-08-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* strace.1: Update "SEE ALSO" links to reference to valid
+	manpages.
+	Patch from Michail Litvak <mci@owl.openwall.com>.
+	Fixes RH#165375.
+
+2005-10-21  Roland McGrath  <roland@redhat.com>
+
+	* util.c (printpathn): Cap N at sizeof path - 1.
+
+2005-08-03  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.13.
+	* debian/changelog, strace.spec: 4.5.13-1.
+
+	* configure.ac: Check for struct dqblk.dqb_curblocks field.
+	* resource.c [LINUX] (OLD_CMD): New macro.
+	(quotacmds): Use it to hard-wire old O_* values, don't use macros.
+	(sys_quotactl): If dqb_curblocks is not there, it's called
+	dqb_curspace instead.  Print dqb_* fields as unsigned long long.
+
+2005-07-19  Michael Schmitz  <schmitz@debian.org>
+
+	Long overdue m68k cleanup.
+	* linux/syscallent.h: remove m68k declarations.
+	* linux/m68k/syscallent.h: new file, fixed up declarations
+	to match kernel version 2.6.11. Newer syscalls are sufficiently
+	different from i386 to merit a separate file.
+
+2005-08-03  Roland McGrath  <roland@redhat.com>
+
+	* linux/x86_64/syscallent.h: Update init_module argument count.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent2.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/arm/syscallent.h: Likewise.
+
+2005-07-22  James Lentini  <jlentini@gmail.com>
+
+	* bjm.c (sys_init_module): Display all three arguments.
+	* linux/syscallent.h: Update argument count.
+
+2005-08-03  Roland McGrath  <roland@redhat.com>
+
+	* process.c (internal_wait): Don't suspend when known child is known
+	to be exiting already.
+
+	* strace.c (detach): If detaching the last live thread in a group with
+	a zombie leader, then detach the leader too.
+	(handle_group_exit): Use detach, not droptcb, for predeceased thread.
+	Mark process about to take a signal with TCB_GROUP_EXITING flag.
+	Fixes RH#161919.
+
+2005-07-19  Roland McGrath  <roland@redhat.com>
+
+	* defs.h [LINUX] [M68K] (__NR_exit_group): Define it if missing.
+	Fixes Debian#315500.
+
+2005-07-14  Heiko Carstens  <heiko.carstens@de.ibm.com>
+
+	* linux/s390/syscallent.h (sys_tgkill, vserver, fadvise64_64)
+	(statfs64, fstatfs64, remap_file_pages, mbind, get_mempolicy)
+	(set_mempolicy, mq_open, mq_unlink, mq_timedsend, mq_timedreceive)
+	(mq_notify, mq_getsetattr, sys_kexec_load, add_key, request_key)
+	(keyctl, waitid): Added.
+	* linux/s390x/syscallent.h: Likewise and added missing _llseek.
+	* linux/s390/errnoent.h (ECANCELED, ENOKEY, EKEYEXPIRED)
+	(EKEYREVOKED, EKEYREJECTED, EOWNERDEAD, ENOTRECOVERABLE): Added.
+	* linux/s390x/errnoent.h: Likewise.
+
+2005-07-05  Roland McGrath  <roland@redhat.com>
+
+	* mem.c [LINUX] (sys_old_mmap) [X86_64]: Extract 32-bit values if
+	child is 32-bit.
+	Fixes RH#162467.
+
+2005-06-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Introduce "-e trace=desc".
+	* defs.h (TRACE_DESC): New flag.
+	* syscall.c: Define TD macro before include of syscallent files
+	and undefine it afterwards.
+	(lookup_class): Recognize "desc" keyword.
+	* strace.1: Document "-e trace=desc".
+	* freebsd/i386/syscallent.h: Mark those syscalls which take a
+	file descriptor as an argument or return a file descriptor with
+	TD flag.
+	* linux/alpha/syscallent.h: Likewise.
+	* linux/hppa/syscallent.h: Likewise.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sh64/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent2.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+	* linux/syscallent.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+	* sunos4/syscallent.h: Likewise.
+	* svr4/syscallent.h: Likewise.
+	Fixes RH#159400.
+
+	Remove TF flag from those syscalls which have no filename argument.
+	* freebsd/i386/syscallent.h: Remove TF flag from fstat, pread,
+	pwrite, fstat, sendfile.
+	* linux/alpha/syscallent.h: Remove TF flag from read, write,
+	pread, pwrite, sendfile.
+	* linux/hppa/syscallent.h: Remove TF flag from read, write,
+	pread, pwrite, fstat64, sendfile, ftruncate64.
+	* linux/ia64/syscallent.h: Remove TF flag from read, write,
+	sendfile, fstat, fadvise64.
+	* linux/mips/syscallent.h: Remove TF flag from read, write,
+	fstatfs, fstat, pread, pwrite, sendfile, ftruncate64, fstat64,
+	sendfile64, fadvise64, fstatfs64.
+	* linux/powerpc/syscallent.h: Remove TF flag from read, write,
+	fstat, pread, pwrite, sendfile, ftruncate64, fstat64, sendfile64,
+	fadvise64, fstatfs64, fadvise64_64.
+	* linux/s390/syscallent.h: Remove TF flag from pread, pwrite,
+	sendfile, ftruncate64, fstat64, sendfile64.
+	* linux/s390x/syscallent.h: Remove TF flag from pread, pwrite,
+	sendfile, sendfile64.
+	* linux/sh/syscallent.h: Remove TF flag from pread, pwrite,
+	sendfile, fstat64.
+	* linux/sh64/syscallent.h: Remove TF flag from pread, pwrite,
+	sendfile, ftruncate64, fstat64.
+	* linux/sparc/syscallent.h: Remove TF flag from sendfile, fstat64,
+	pread, pwrite, sendfile64.
+	* linux/sparc64/syscallent2.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+	* linux/syscallent.h: Remove TF flag from pread, pwrite, sendfile,
+	ftruncate64, fstat64, sendfile64, fadvise64, fadvise64, fstatfs64,
+	fadvise64_64.
+	* linux/x86_64/syscallent.h: Remove TF flag from pread, pwrite,
+	sendfile, fadvise64_64.
+	* svr4/syscallent.h: Remove TF flag from pread, pwrite, ftruncate,
+	fstatvfs64, ftruncate64.
+	Fixes RH#159340.
+
+2005-07-04  Roland McGrath  <roland@redhat.com>
+
+	* net.c (sockipv6options): Add IPV6_ADD_MEMBERSHIP,
+	IPV6_DROP_MEMBERSHIP, IPV6_ROUTER_ALERT.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#162450.
+
+	* net.c (sockipoptions): Fix typos.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#161578.
+
+	* util.c (printnum_int): New function, printnum with s/long/int/.
+	* defs.h: Declare it.
+	* net.c (printsockopt): Use it for int-sized option.
+	Fixes RH#162449.
+	Reported by Ulrich Drepper <drepper@redhat.com>.
+
+2005-06-09  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.12.
+	* debian/changelog, strace.spec: 4.5.12-1.
+
+2005-06-08  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Minor namespace cleanup.
+	* defs.h (string_quote): Remove declaration.
+	* file.c (openmodessol) [LINUXSPARC]: Make static.
+	(fileflags): Likewise.
+	(aclcmds, aclipc) [HAVE_SYS_ACL_H]: Likewise.
+	(direnttypes) [FREEBSD || LINUX]: Likewise.
+	(xattrflags): Likewise.
+	* process.c (unalignctl_string): Make static.
+	(setarg): Disable.
+	* syscall.c (subcalls_table): Make static.
+	(socket_map) [!(LINUX && (ALPHA || MIPS))]: Likewise.
+	(sparc_socket_decode): Make static, define for [SPARC || SPARC64] only.
+	(decode_subcall): Make static.
+	(syscall_fixup): Likewise.
+	(get_error): Likewise.
+	(syscall_enter): Likewise.
+	* util.c (tv_tv): Disable.
+	(getpc): Likewise.
+	(string_quote): Make static.
+	Fixes RH#159688.
+
+2005-05-12  Philippe De Muyter  <phdm@macqel.be>
+
+	* util.c (getpc, printcall): Check #if defined(M68K), not M68k.
+	Enables `-i' on m68k machines.
+
+2005-06-06  Roland McGrath  <roland@redhat.com>
+
+	* process.c (struct_user_offsets) [X86_64]: Reorder elements so
+	matching works right.
+	Fixes RH#159787.
+
+	* linux/syscall.h (SYS_socket, SYS_bind, SYS_connect, SYS_listen)
+	(SYS_accept, SYS_getsockname, SYS_getpeername, SYS_socketpair)
+	(SYS_send, SYS_recv, SYS_sendto, SYS_recvfrom, SYS_shutdown)
+	(SYS_setsockopt, SYS_getsockopt, SYS_sendmsg, SYS_recvmsg)
+	(SYS_getsockname, SYS_semop, SYS_semgsub_et, SYS_semget, SYS_semctl)
+	(SYS_semtimedop, SYS_msgsnd, SYS_msgrcv, SYS_msgget)
+	(SYS_msgctl, SYS_shmat, SYS_shmdt, SYS_shmget)
+	(SYS_shmctl): Macros renamed to SYS_sub_*.
+	* syscall.c (dumpio): Match SYS_sub_* if defined instead of SYS_*.
+
+	* linux/syscall.h (SYS_waitid): Define if not defined.
+
+	* linux/syscallent.h: Fix pread/pwrite names to pread64/pwrite64.
+
+	* defs.h (struct sysent): New member `native_scno'.
+	(known_scno): Declare new function.
+	* linux/syscallent.h: Add new final field to interesting syscalls.
+	* syscall.c (known_scno): New function.
+	(dumpio, internal_syscall, syscall_fixup, trace_syscall): Use it.
+	* process.c (internal_fork, internal_exit): Likewise.
+	[IA64] (ARG_STACKSIZE, ARG_PTID, ARG_CTID, ARG_TLS): Likewise.
+	* strace.c (proc_open): Likewise.
+	* util.c [LINUX] (setbpt): Likewise.
+	* linux/syscall.h: Remove [!defined(X86_64)] from conditional
+	for defining SYS_socket_subcall et al.
+	* linux/syscallent.h: Likewise for #error check.
+	* syscall.c (trace_syscall): Likewise for SYS_{socketcall,ipc} cases.
+	Fixes RH#158934.
+
+2005-06-02  Roland McGrath  <roland@redhat.com>
+
+	* file.c (printstatfs64): Cast values to unsigned long long and use
+	%llu formats.
+	Fixes RH#158243.
+
+2005-05-31  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Deal with memory management issues.
+	* defs.h (tprint_iov): Update prototype.
+	* desc.c (sys_epoll_wait) [HAVE_SYS_EPOLL_H]: Do not allocate
+	epoll_event array of arbitrary size on the stack, to avoid
+	stack overflow.
+	* file.c (print_xattr_val): Check for integer overflow during
+	malloc size calculation, to avoid heap corruption.
+	* io.c (tprint_iov) [HAVE_SYS_UIO_H]: Check for integer overflow
+	during malloc size calculation, to avoid heap corruption.
+	Change iovec array handling to avoid heap memory allocation.
+	* mem.c (get_nodes) [LINUX]: Check for integer overflow during
+	size calculation and do not allocate array of arbitrary size on
+	the stack, to avoid stack overflow.
+	* net.c (printcmsghdr) [HAVE_SENDMSG]: Do not allocate array of
+	arbitrary size on the stack, to avoid stack overflow.  Do not
+	trust cmsg.cmsg_len to avoid read beyond the end of allocated
+	object.
+	(printmsghdr) [HAVE_SENDMSG]: Update tprint_iov() usage.
+	* process.c (sys_setgroups): Check for integer overflow during
+	malloc size calculation, to avoid heap corruption.  Change gid_t
+	array handling to avoid heap memory allocation.
+	(sys_getgroups): Likewise.
+	(sys_setgroups32) [LINUX]: Likewise.
+	(sys_getgroups32) [LINUX]: Likewise.
+	* stream.c (sys_poll) [HAVE_SYS_POLL_H]: Check for integer
+	overflow during malloc size calculation, to avoid heap corruption.
+	Change pollfd array handling to avoid heap memory allocation.
+	* system.c (sys_sysctl) [LINUX]: Check for integer overflow
+	during malloc size calculation, to avoid heap corruption.
+	* util.c (dumpiov) [HAVE_SYS_UIO_H]: Check for integer overflow
+	during malloc size calculation, to avoid heap corruption.
+	Fixes RH#159196.
+
+	* util.c (printxval): Change third argument from "char *" to
+	"const char *".
+	(printflags): Add third argument, "const char *", with similar
+	meaning to the third argument of printxval().
+	* defs.h (printxval): Change third argument from "char *" to
+	"const char *".
+	(printflags): Add third argument.
+	* bjm.c (sys_query_module) [LINUX]: Pass third argument to
+	printflags().
+	* desc.c (sys_fcntl): Likewise.
+	(sys_flock) [LOCK_SH]: Likewise.
+	(print_epoll_event) [HAVE_SYS_EPOLL_H]: Likewise.
+	* file.c (sys_open): Likewise.
+	(solaris_open) [LINUXSPARC]: Likewise.
+	(sys_access): Likewise.
+	(sys_chflags, sys_fchflags) [FREEBSD]: Likewise.
+	(realprintstat) [HAVE_LONG_LONG_OFF_T &&
+	HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
+	(printstat64) [HAVE_STAT64 &&
+	HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
+	(sys_setxattr, sys_fsetxattr): Likewise.
+	* ipc.c (sys_msgget, sys_msgsnd, sys_msgrcv, sys_semget,
+	sys_shmget, sys_shmat) [LINUX || SUNOS4 || FREEBSD]: Likewise.
+	(sys_mq_open) [LINUX]: Likewise.
+	(printmqattr) [HAVE_MQUEUE_H]: Likewise.
+	* mem.c (print_mmap) [!HAVE_LONG_LONG_OFF_T]: Likewise.
+	(sys_mmap64) [_LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T]: Likewise.
+	(sys_mprotect): Likewise.
+	(sys_mremap, sys_madvise, sys_mlockall) [LINUX]: Likewise.
+	(sys_msync) [MS_ASYNC]: Likewise.
+	(sys_mctl) [MC_SYNC]: Likewise.
+	(sys_remap_file_pages, sys_mbind, sys_get_mempolicy) [LINUX]:
+	Likewise.
+	* net.c (printmsghdr) [HAVE_STRUCT_MSGHDR_MSG_CONTROL]: Likewise.
+	(sys_send, sys_sendto): Likewise.
+	(sys_sendmsg) [HAVE_SENDMSG]: Likewise.
+	(sys_recv, sys_recvfrom): Likewise.
+	(sys_recvmsg) [HAVE_SENDMSG]: Likewise.
+	(printicmpfilter) [ICMP_FILTER]: Likewise.
+	* proc.c (proc_ioctl) [SVR4 && !HAVE_MP_PROCFS || FREEBSD]: Likewise.
+	* process.c (sys_clone) [LINUX]: Likewise.
+	(printwaitn): Likewise.
+	(sys_waitid) [SVR4 || LINUX]: Likewise.
+	* signal.c (sys_sigvec) [SUNOS4 || FREEBSD]: Likewise.
+	(sys_sigaction): Likewise.
+	(printcontext) [SVR4]: Likewise.
+	(print_stack_t) [LINUX) || FREEBSD]: Likewise.
+	(sys_rt_sigaction) [LINUX]: Likewise.
+	* sock.c (sock_ioctl) [LINUX]: Likewise.
+	* stream.c (sys_putmsg, sys_getmsg): Likewise.
+	(sys_putpmsg) [SYS_putpmsg]: Likewise.
+	(sys_getpmsg) [SYS_getpmsg]: Likewise.
+	(sys_poll): Likewise.
+	(print_transport_message) [TI_BIND]: Likewise.
+	(stream_ioctl): Likewise.
+	* system.c (sys_mount, sys_reboot): Likewise.
+	(sys_cacheflush) [LINUX && M68K]: Likewise.
+	(sys_capget, sys_capset) [SYS_capget]: Likewise.
+	* term.c (term_ioctl) [TIOCMGET]: Likewise.
+	* time.c (sys_clock_nanosleep, sys_timer_settime) [LINUX]:
+	Likewise.
+	Fixes RH#159310.
+
+	* bjm.c (sys_query_module) [LINUX]: Unitize "out of memory"
+	errors reporting style.
+	* strace.c (rebuild_pollv) [USE_PROCFS]: Likewise.
+	* system.c (sys_capget, sys_capset) [SYS_capget]: Likewise.
+	* util.c (printstr): Likewise.
+	(dumpiov) [HAVE_SYS_UIO_H]: Likewise.
+	(fixvfork) [SUNOS4]: Likewise.
+	* desc.c (decode_select): Continue to decode syscall arguments
+	in case of OOM condition.
+	* file.c (sys_getdents): Likewise.
+	(sys_getdents64) [_LFS64_LARGEFILE]: Likewise.
+	(sys_getdirentries) [FREEBSD]: Likewise.
+	* mem.c (sys_mincore): Changed type of variables which deal with
+	malloc size from int to unsigned long.
+	Fixes RH#159308.
+
+2005-05-22  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* bjm.c [LINUX]: Do not include <linux/linkage.h>.  It is not
+	safe to include kernel headers, and this one is not used anyway.
+	Fixes RH#158488.
+
+2005-05-26  Roland McGrath  <roland@redhat.com>
+
+	* system.c (sys_sysctl): Check for errors accessing user pointers.
+	Use malloc instead of alloca in case size is insane.
+
+2005-05-09  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac: Check for libaio.h.
+	* desc.c (sys_io_setup, sys_io_submit, sys_io_cancel,
+	sys_io_getevents, sys_io_destroy): New functions.
+	* linux/syscall.h: Declare them.
+	* linux/syscallent.h: Use those for io_* syscalls.
+	* linux/alpha/syscallent.h: Likewise.
+	* linux/hppa/syscallent.h: Likewise.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+	From Zach Brown <zach.brown@oracle.com>.
+	Fixes RH#155065.
+
+	* debian/control (Architecture): Add ppc64.
+	Fixes Debian bug #301089.
+
+2005-05-05  Anton Blanchard  <anton@samba.org>
+
+	* process.c (ptrace_cmds): Add PTRACE_GETVRREGS and PTRACE_SETVRREGS
+	if defined.
+
+2005-05-09  Roland McGrath  <roland@redhat.com>
+
+	* strace.c (main): Refuse negative -s argument value.
+	Fixes Debian bug #303256.
+
+2005-04-25  Anton Blanchard  <anton@samba.org>
+
+	* file.c (openmodes): Add O_NOATIME flag if defined.
+
+2005-04-05  Anton Blanchard  <anton@samba.org>
+
+	* linux/powerpc/ioctlent.h: Regenerated.
+
+	* signal.c (signame): Don't try and dereference negative index.
+
+	* linux/powerpc/syscallent.h: Add debug_setcontext, vserver,
+	mbind, *_mempolicy, mq_*, sys_kexec_load, add_key, request_key,
+	keyctl, waitid, sys_semtimedop.  Fix various other syscalls.
+
+	* ipc.c (shm_resource_flags): New variable, table has SHM_HUGETLB
+	but not IPC_NOWAIT, which have the same value.
+	(sys_shmget): Use that instead of resource_flags.
+
+2005-03-22  Roland McGrath  <roland@redhat.com>
+
+	* desc.c (decode_select): Increase local buffer size.
+	Fixes RH#151570.
+
+	* configure.ac, NEWS: Version 4.5.11.
+	* debian/changelog, strace.spec: 4.5.11-1.
+
+	* linux/arm/syscallent.h: Fix 113 entry (syscall, not vm86old).
+
+2005-03-14  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.10.
+	* debian/changelog, strace.spec: 4.5.10-1.
+
+2005-02-26  GOTO Masanori  <gotom@debian.or.jp>
+
+	* linux/alpha/syscallent.h: Fix the reversed order of lstat64 and
+	fstat64.  Clean up osf_nrecvmsg and osf_ngetsockname.
+
+2005-02-28  Andreas Schwab  <schwab@suse.de>
+
+	* syscall.c (getrval2): Move #ifdef IA64 inside #ifdef LINUX.
+
+2005-03-14  Roland McGrath  <roland@redhat.com>
+
+	* linux/mips/syscallent.h: Update various calls.
+	From Thiemo Seufer <ths@networkno.de>.
+	Fixes Debian bug #256684.
+
+	* debian/control (Architecture): Add s390.
+	Fixes Debian bug #294172.
+
+2005-03-06  Roland McGrath  <roland@redhat.com>
+
+	* strace.c (trace) [PTRACE_GETSIGINFO]: Fetch siginfo_t for SIGSEGV
+	and SIGBUS signals, use si_addr in output.
+
+2005-03-01  Roland McGrath  <roland@redhat.com>
+
+	* file.c (print_xattr_val): Add a cast.
+
+2005-02-05  Roland McGrath  <roland@redhat.com>
+
+	* desc.c (decode_select): Calculate size of passed fd_set vectors and
+	copy in the user's size rather than the standard sizeof(fd_set).
+	Fixes Debian bug #65654, #284290.
+
+	* util.c (printpath, printpathn): Print NULL and don't try any fetch
+	when ADDR is zero.
+	Fixes Debian bug #63093.
+
+	* debian/control (Build-Depends): Fix for s390 and sparc.
+	From Bastian Blank <waldi@debian.org>.
+	Fixes Debian bug #293564.
+
+2004-12-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* strace.c (main) [!USE_PROCFS]: In child process, raise SIGSTOP
+	right before execv() call.  Remove fake_execve() call.
+	* defs.h (fake_execve): Remove unused declaration.
+	* process.c (fake_execve): Remove unused function.
+	Fixes RH#143365.
+
+2005-02-04  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.9.
+	* debian/changelog, strace.spec: 4.5.9-2.
+
+	* file.c (O_LARGEFILE): Omit when #undef'd because it was zero.
+
+2005-02-02  Roland McGrath  <roland@redhat.com>
+
+	* debian/control: Add strace-udeb package for installer debugging.
+	* debian/rules (binary-arch): Build it.
+	From Joshua Kwan <joshk@triplehelix.org>.
+	Fixes Debian bug #268294.
+
+	* file.c (openmodes) [O_LARGEFILE] [O_LARGEFILE == 0]: Redefine to
+	known values for Linux.
+
+	* util.c (printcall): Print 16 ?s when long is 8 bytes.
+	Fixes RH#146932.
+
+	* linux/sparc/syscall.h: Declare sys_epoll_create, sys_epoll_ctl,
+	sys_epoll_wait.
+	* linux/sparc64/syscall.h: Just #include "../sparc/syscall.h" here.
+	* ioctl.c (nioctlents2): Add const to type.
+	Fixes Debian bug #278449.
+
+	* sock.c (iffflags): New variable, table of IFF_* values.
+	(print_addr): New function.
+	(sock_ioctl): Handle SIOCGIFADDR, SIOCGIFDSTADDR, SIOCGIFBRDADDR,
+	SIOCGIFNETMASK, SIOCGIFFLAGS, SIOCGIFMETRIC, SIOCGIFMTU, SIOCGIFSLAVE,
+	SIOCGIFHWADDR.	Use print_addr for SIOCGIFCONF, SIOCGIFNAME, and
+	SIOCGIFINDEX, and fix their output.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#138223.
+	Fixes Debian bug #192164.
+
+2004-12-20  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* configure.ac: Use AC_GNU_SOURCE macro instead of changing CFLAGS.
+	* defs.h [HAVE_CONFIG_H]: Include config.h first.
+	* strace.c: Include "defs.h" first.
+	Fixes RH#143370.
+
+	* syscall.c (call_summary): Fix potential NULL dereference.
+	Fixes RH#143369.
+
+2004-12-19  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* syscall.c (qual_signal): Check bounds for numeric signal names.
+	Fix parser of symbolic signal names.
+	Fix return code, as required by qualify() function.
+	* syscall.c (qual_desc): Check bounds for descriptor number.
+	* syscall.c (qual_syscall): Correct return code, to be consistent
+	with qualify() and other qual_* functions.
+	Fixes RH#143362.
+
+2005-02-01  Roland McGrath  <roland@redhat.com>
+
+	* system.c [LINUX] (MS_MANDLOCK, MS_NOATIME, MS_NODIRATIME, MS_BIND,
+	MS_MOVE, MS_REC, MS_VERBOSE, MS_POSIXACL, MS_ACTIVE, MS_NOUSER):
+	New macros.
+	[LINUX] (mount_flags): Add them.
+	[LINUX] (sys_mount): If any of (MS_BIND|MS_MOVE|MS_REMOUNT) bits are
+	set in the flags argument, don't try to fetch the filesystem string.
+	Fixes RH#141932.
+
+	* config.guess: Update from canonical version, timestamp 2004-11-12.
+	* config.sub: Likewise, timestamp 2004-11-30.
+
+	* process.c [LINUX] [X86_64] (sys_arch_prctl): New function.
+	* linux/syscall.h: Declare it.
+	* linux/x86_64/syscallent.h: Use it.
+	Part of RH#142667.
+
+	* process.c (sys_sched_setscheduler): Use %#lx format for bad pointer.
+	(sys_sched_getparam, sys_sched_setparam): Likewise.
+	Part of RH#142667.
+
+	* signal.c [HAVE_SIGACTION] [LINUX && X86_64] (SA_RESTORER): Define
+	here too.
+	Part of RH#142667.
+
+	* linux/syscallent.h: Use sys_mincore instead of printargs.
+	* linux/x86_64/syscallent.h: Likewise.  Also use sys_getrlimit,
+	sys_semtimedop, sys_umount2.
+	Part of RH#142667.
+
+	* syscall.c (qual_signal): Fix inverted return value and bogus
+	argument to qualify_one in the named case.
+
+	* file.c (print_xattr_val): Don't use auto array sized by syscall
+	argument.  Use malloc instead, so it can fail for insane values.
+	Fixes Debian bug #283704.
+
+	* net.c (sys_getsockopt): Fix a format %ld -> %d.
+
+	* linux/syscall.h [IA64] (SYS_semtimedop): #undef it.
+
+	* syscall.c (syscall_enter) [X86_64]: Fix 32-bit argument register map
+	not to double the middle entry!
+	Fixes RH#146093.
+
+	* linux/x86_64/syscallent.h: Fix exit_group entry.
+
+	* util.c (getpc) [S390 || S390X]: Implement it.
+	Patch by David Wilder <wilder@us.ibm.com>.
+
+	* linux/ia64/syscallent.h: Add fadvise64, fstatfs64, statfs64, mbind,
+	[gs]et_mempolicy, mq_*, sys_kexec_load, vserver, and waitid.
+	Fixes RH#146245.
+
+2005-01-22  Andreas Schwab  <schwab@suse.de>
+
+	* net.c (sys_getsockopt): Change type of len to int.
+
+2004-10-19  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.8.
+	* debian/changelog, strace.spec: 4.5.8-1.
+
+	* file.c (sys_fadvise64): Conditionalize just on [LINUX].
+
+	* configure.ac: Check for sys/epoll.h.
+	* desc.c: Protect #include <sys/epoll.h> with [HAVE_SYS_EPOLL_H].
+	(epollctls, epollevents): Protect each entry with #ifdef on its macro.
+
+	* strace.c (handle_group_exit): Don't detach leader that wasn't
+	TCB_ATTACHED.  Instead mark it with TCB_GROUP_EXITING.
+	Remove droptcb loop at end, no longer required since 2.6 reports each
+	thread death.
+	Fixes RH#135254.
+
+	* strace.c (trace): Use handle_group_exit for non-TCB_ATTACHED child
+	taking signal when it has nclone_threads > 0.
+
+	* strace.c (handle_group_exit, trace): Mark leader with
+	TCB_GROUP_EXITING and don't be surprised at child deaths when their
+	leader has it set.
+	Fixes RH#132150.
+
+	* process.c (WCOREFLAG): Define if not defined.
+	(W_STOPCODE, W_EXITCODE): Likewise.
+	Reported by Marty Leisner <mleisner@eng.mc.xerox.com>.
+
+	* sock.c [! LINUX]: Include <sys/socket.h> before <sys/sockio.h>.
+	Reported by Marty Leisner <mleisner@eng.mc.xerox.com>.
+
+	* debian/rules: Make strace64.1.gz symlink to strace.1.gz instead of
+	strace64.1 to strace.1, which doesn't exist.
+	Fixes Debian bug #269220.
+
+2004-09-05  Phil Blundell  <pb@nexus.co.uk>
+
+	* linux/arm/syscallent.h: New file.
+
+2004-10-19  Roland McGrath  <roland@redhat.com>
+
+	* debian/rules (DEB_BUILD_GNU_TYPE, CONFIG_OPTS): New variables.
+	[$(DEB_HOST_GNU_TYPE) == s390-linux] (build64, HOST64, CC64): Set them.
+	(build/Makefile): Use $(CONFIG_OPTS).
+	(build64/Makefile): Pass --host as well as --build.
+	From Bastian Blank <waldi@debian.org>.
+	Fixes Debian bug #271500.
+
+	* linux/hppa/syscallent.h: Update for 2.6.9 syscalls.
+	From Randolph Chung <tausq@debian.org>
+	Fixes Debian bug #273887.
+
+	* file.c (sys_llseek): Revert last change.
+
+2004-09-14  Richard Henderson  <rth@twiddle.net>
+
+	* linux/alpha/syscallent.h: Add tgkill, *stat64, vserver, mbind,
+	[gs]et_mempolicy, mq_*, waitid.
+
+2004-10-07  Roland McGrath  <roland@redhat.com>
+
+	* file.c (sys_llssek, sys_readahead, sys_fadvise64, sys_fadvise64_64):
+	Use LONG_LONG macro.
+	* io.c (sys_pread, sys_pwrite, sys_sendfile): Likewise.
+
+	* linux/x86_64/syscallent.h: Fix botched table entries.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+	* mem.c [LINUX] (sys_mbind, sys_set_mempolicy, sys_get_mempolicy):
+	New functions.
+	* linux/syscall.h: Declare them.
+	* linux/x86_64/syscallent.h: Likewise.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+	* linux/syscallent.h: Handle mbind, set_mempolicy, get_mempolicy.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+	* file.c [LINUX && (I386 || X86_64)] (sys_fadvise64, sys_fadvise64_64):
+	New functions.
+	* linux/syscall.h: Declare them.
+	* linux/syscallent.h: Handle fadvise64 and fadvise64_64 using those.
+	* linux/x86_64/syscallent.h: Likewise.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+2004-09-13  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* linux/ioctlsort.c (main): Omit duplicate lines
+	(with same name and code) from output.
+	* linux/ioctlent.sh: Build the list of ioctls defined in
+	scsi/sg.h (0x22..), scsi/scsi.h and scsi/scsi_ioctl.h (0x53..),
+	as suggested by Peter Jones <pjones@redhat.com>
+	* linux/ioctlent.h: Regenerated.
+	Fixes RH#129808.
+
+2004-09-13  Ulrich Drepper <drepper@redhat.com>
+	    Dmitry V. Levin <ldv@altlinux.org>
+
+	* time.c [LINUX] (print_rtc): New function, for printing rtc_time
+	structure.
+	[LINUX] (rtc_ioctl): New function, for parsing RTC_* ioctls.
+	* ioctl.c [LINUX] (ioctl_decode): Call rtc_ioctl.
+	* defs.h [LINUX]: Declare rtc_ioctl.
+	Fixes RH#58606.
+
+2004-10-06  Roland McGrath  <roland@redhat.com>
+
+	* desc.c [LINUX] (sys_epoll_create, sys_epoll_ctl, sys_epoll_wait):
+	New functions.
+	* linux/syscall.h: Declare them.
+	* linux/syscallent.h: Use those for epoll_* syscalls.
+	* linux/alpha/syscallent.h: Likewise.
+	* linux/hppa/syscallent.h: Likewise.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/sparc64/syscallent.h: Likewise.
+	* linux/sparc64/syscallent2.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#134463.
+
+	* resource.c (resources): Add RLIMIT_LOCKS, RLIMIT_SIGPENDING,
+	and RLIMIT_MSGQUEUE, if defined.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#133594.
+
+	* net.c [HAVE_SENDMSG] (printcmsghdr): New function.
+	(printmsghdr): Use it.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#131689.
+
+	* file.c (sprintmode): Add const to return type.
+	(sprintfstype): Likewise.
+	* signal.c (printsiginfo): Add a const.
+
+2004-09-15  Roland McGrath  <roland@redhat.com>
+
+	* linux/x86_64/syscallent.h: Use sys_waitid.
+
+	* linux/syscallent.h: waitid takes 5 arguments, and is in TP category.
+	* process.c (sys_waitid): Handle fifth argument (struct rusage *).
+
+2004-09-11  Roland McGrath  <roland@redhat.com>
+
+	* time.c (sys_clock_nanosleep): Print zero flags arg correctly.
+	(sys_timer_settime): Likewise.
+	(printsigevent): Print signals by name for SIGEV_SIGNAL.
+	(sys_timer_create): Print clock ID symbolically.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#131420.
+
+2004-09-07  Michal Ludvig  <mludvig@suse.cz>
+
+	* defs.h (nioctlents1, nsignals2): Fix typos in decls.
+
+2004-09-03  Roland McGrath  <roland@redhat.com>
+
+	* syscall.c (qual_options): Add const to defn.
+	Update all uses.
+	(call_count, error_count, tv_count): Variables removed.
+	(struct call_counts, counts): New type and variable.
+	Update all users of the old three to use the new array of structs.
+	(trace_syscall): Allocate counts on first use.
+	(sorted_count): Variable removed.
+	(call_summary): Allocate locally.
+
+	* syscall.c (sysent0, sysent1, sysent2, sysent): Add const to defn.
+	(nsyscalls0, nsyscalls1, nsyscalls2): Likewise.
+	(errnoent0, errnoent1, errnoent2, errnoent): Likewise.
+	(nerrnos0, nerrnos1, nerrnos2): Likewise.
+	* signal.c (signalent0, signalent1, signalent2): Likewise.
+	(nsignals0, nsignals1, nsignals2): Likewise.
+	(signame): LIkewise.
+	* ioctl.c (ioctlent0, ioctlent1, ioctlent2): Likewise.
+	(nioctlents0, nioctlents1, nioctlents2): Likewise.
+	(ioctl_lookup, ioctl_next_match): Likewise.
+	* defs.h: Update decls.
+	* io.c (sys_ioctl): Update users.
+
+	* util.c (xlookup, printxval, addflags, printflags): Use const for
+	struct xlat * argument.
+	* defs.h (xlookup, printxval, addflags, printflags): Update decls.
+	* bjm.c: Add const to all struct xlat defns.
+	* desc.c: Likewise.
+	* file.c: Likewise.
+	* ipc.c: Likewise.
+	* mem.c: Likewise.
+	* net.c: Likewise.
+	* proc.c: Likewise.
+	* process.c: Likewise.
+	* resource.c: Likewise.
+	* signal.c: Likewise.
+	* sock.c: Likewise.
+	* stream.c: Likewise.
+	* system.c: Likewise.
+	* term.c: Likewise.
+	* time.c: Likewise.
+	* util.c: Likewise.
+
+2004-09-01  Roland McGrath  <roland@redhat.com>
+
+	* linux/x86_64/syscallent.h: Add new entries for timer_*, clock_*, and
+	mq_* syscalls, and names only for new calls up to 252.
+	* linux/syscallent.h: Add waitid.
+	* linux/x86_64/syscallent.h: Likewise.
+	* linux/syscall.h: Declare sys_waitid.
+
+	* process.c (internal_wait): Take second arg giving index of flags
+	argument.
+	* defs.h: Update prototype.
+	* syscall.c (internal_syscall): Update caller.
+	Also use internal_wait for SYS_waitid.
+	* process.c (sys_waitid): Define for [LINUX] as well.
+	Don't tweak TCB_SUSPENDED--internal_wait does that.
+	(waitid_types): Conditionalize use of nonstandard P_* macros.
+
+2004-08-31  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.7.
+	* debian/changelog: 4.5.7-1.
+	* strace.spec: 4.5.7-2.
+
+	* debian/rules: Rewrite sparc64 change of 2004-07-12.
+	Always do each build in a separate build directory.
+	Fixes Debian bug #254728.
+
+	* time.c (clocknames): Use #ifdef around CLOCK_* uses.
+
+	* strace.1: Say that -c shows system CPU time, not real time.
+	Fixes Debian bug #254438.
+
+	* syscall.c (dumpio): Match pread and pwrite system calls too.
+	Fixes Debian bug #239947.
+
+	* net.c (sockoptions): Add all SO_* macros known in Linux 2.6.9.
+	Fixes Debian bug #171653.
+
+2004-07-12  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* signal.c [LINUX] (parse_sigset_t): Fix hex strings parser.
+	Fixes RH#128091.
+
+2004-08-30  Roland McGrath  <roland@redhat.com>
+
+	* strace.c (main): Don't call fake_execve under -c.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#129166.
+
+	* net.c (sockipoptions): Add some options.
+	[SOL_IPV6] (sockipv6options): New variable.
+	(sys_getsockopt, printsockopt): Use it for SOL_IPV6 level.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#128391.
+
+	* time.c (clocknames): New variable, symbolic names for clock_t.
+	(sys_clock_settime, sys_clock_gettime, sys_clock_nanosleep): Use it.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#129378.
+
+	* system.c (personality_options): Hard-code values here.
+	Don't #include <linux/personality.h> at all.
+	Fixes RH#130965 and Debian bug #40588.
+
+	* file.c (print_xattr_val): New function to show attribute values.
+	(sys_setxattr, sys_fsetxattr, sys_getxattr, sys_fgetxattr): Use it.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#131177.
+
+2004-07-12  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.6.
+	* strace.spec, debian/changelog: 4.5.6-1.
+
+	* Makefile.am (EXTRA_DIST): Add linux/sparc64 files.
+
+	* debian/rules: On sparc-linux, build strace64 as well.
+	From Ben Collins <bcollins@debian.org>.
+	Fixes Debian bug #254728.
+
+2004-07-07  David S. Miller  <davem@nuts.davemloft.net>
+
+	* linux/sparc/syscallent.h: Sync with reality.
+	* linux/sparc/syscall.h (sys_sendfile64, sys_futex, sys_gettid,
+	sys_sched_setaffinity, sys_sched_getaffinity, sys_setxattr,
+	sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr,
+	sys_fgetxattr, sys_listxattr, sys_llistxattr, sys_flistxattr,
+	sys_removexattr, sys_lremovexattr, sys_fremovexattr,
+	sys_remap_file_pages, sys_readahead, sys_tgkill, sys_statfs64,
+	sys_fstatfs64, sys_clock_settime, sys_clock_gettime,
+	sys_clock_getres, sys_clock_nanosleep, sys_timer_create,
+	sys_timer_settime, sys_timer_gettime): New declarations.
+	* linux/sparc64/dummy2.h, linux/sparc64/syscallent2.h,
+	linux/sparc64/syscall.h, linux/sparc64/errnoent.h,
+	linux/sparc64/errnoent1.h, linux/sparc64/errnoent2.h,
+	linux/sparc64/ioctlent.h, linux/sparc64/ioctlent1.h,
+	linux/sparc64/ioctlent2.h, linux/sparc64/signalent.h,
+	linux/sparc64/signalent.h, linux/sparc64/signalent.h,
+	linux/sparc64/signalent1.h, linux/sparc64/signalent2.h,
+	linux/sparc64/syscall1.h, linux/sparc64/syscallent.h,
+	linux/sparc64/syscallent1.h: New files.
+	* defs.h (LINUXSPARC): Define also when SPARC64.
+	(LINUX && SPARC64): Set SUPPORTED_PERSONALITIES to 3.
+	Ignore SIGTRAP after execve by defining TCB_WAITEXECVE.
+	Define possibly missing __NR_exit_group.  Declare getrval2.
+	* configure.ac (sparc64): New architecture case.
+	* file.c (stat_sparc64): New structure.
+	(printstat_sparc64): New output routine for that.
+	(printstat): Call it, if personality is 2.
+	(printstat64): Likewise.
+	* util.c: Conditionalize ptrace defines on LINUXSPARC
+	not LINUX && SPARC.
+	(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
+	to PTRACE_FOOREGS64 so that more sparc code can be shared
+	between 64-bit and 32-bit.
+	(_hack_syscall5): Correct trap number when SPARC64.
+	(PTRACE_WRITE{TEXT,DATA}): Add SPARC64 to ifdef guard.
+	(getpc): Handle SPARC64 && LINUX.
+	(printcall): Likewise.
+	(arg fetching/setting): Use same code for SPARC64 LINUX
+	as for SPARC.
+	(setbpt): Handle SPARC64 && LINUX.
+	(clearbpt): Likewise.
+	* signal.c: Conditionalize ptrace defines on SPARC and
+	SPARC64.
+	(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
+	to PTRACE_FOOREGS64 so that more sparc code can be shared
+	between 64-bit and 32-bit.
+	(m_siginfo): Use same definition on SPARC64 as SPARC.
+	(sys_sigreturn): Handle LINUX && SPARC64.
+	* syscall.c: Conditionalize ptrace defines on SPARC and
+	SPARC64.
+	(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
+	to PTRACE_FOOREGS64 so that more sparc code can be shared
+	between 64-bit and 32-bit.
+	(getscno): Use same static state on SPARC64 as SPARC,
+	and add SPARC64 handling.
+	(get_error): Handle LINUX && SPARC64.
+	(force_result): Likewise.
+	(syscall_enter): Likewise.
+	(trace_syscall): Handle sys_socketcall and sys_ipc on SPARC64
+	just like SPARC.
+	(getrval2): Handle LINUX && SPARC64.
+	* process.c: Conditionalize ptrace defines on SPARC and
+	SPARC64.
+	(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
+	to PTRACE_FOOREGS64 so that more sparc code can be shared
+	between 64-bit and 32-bit.
+	(change_syscall): Handle LINUX && SPARC64.
+	(struct_user_offsets): Ifdef out those which do not exist
+	on SPARC64.
+	* net.c (sys_pipe): Handle LINUX && SPARC64.
+	* ioctl.c: Fix initializer typo for nioctlents2, was
+	nioctlents1 by accident.
+
+2004-06-28  Andreas Schwab  <schwab@suse.de>
+
+	* process.c (internal_exec): Move TCB_WAITEXECVE handling here.
+	(sys_execve): Remove it here.
+
+2004-07-12  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (EXTRA_DIST): Add linux/sh64/syscallent.h.
+
+	* debian/control (Section): Move to utils, matching Debian override.
+
+	* net.c (addrfams): Make variable global.
+	* sock.c (sock_ioctl): Decode the arguments for SIOCGIFNAME,
+	SIOCGIFINDEX, and SIOCGIFCONF.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#126917.
+
+	* linux/ioctlsort.c: Add some #includes.
+	[POWERPC]: Kludge out high bits.
+	* linux/ia64/ioctlent.h: Regenerated using RHEL3 headers.
+	* linux/powerpc/ioctlent.h: Likewise.
+
+2004-07-11  Roland McGrath  <roland@redhat.com>
+
+	* linux/ioctlent.sh: Replace asm with $asm in all places.
+
+	* configure.ac: Add I386 as AM_CONDITIONAL.
+	* Makefile.am [LINUX]: Add maintainer-mode rules to regenerate
+	the ioctlent.h file.
+
+2004-07-08  Roland McGrath  <roland@redhat.com>
+
+	* resource.c (sys_quotactl): Truncate first argument to 32 bits, since
+	that's what the kernel will do.
+
+2004-07-07  Roland McGrath  <roland@redhat.com>
+
+	* linux/ioctlent.sh: Take optional second argument to use as directory
+	name in place of `asm'.
+
+2004-06-27  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.5.
+	* strace.spec, debian/changelog: 4.5.5-1.
+
+2004-06-22  Roland McGrath  <roland@redhat.com>
+
+	* syscall.c (syscall_fixup) [LINUX && X86_64]: For 32-bit process,
+	sign extend the low 32 bits of RAX to 64 bits.
+	Fixes RH#126547.
+
+	* syscall.c (force_result): [LINUX && X86_64]: Fix RAX*4 -> RAX*8.
+
+2004-06-03  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.4.
+	* strace.spec, debian/changelog: 4.5.4-1.
+
+	* net.c (domains): Add many PF_* values #ifdef PF_*.
+	(addrfams): Add many AF_* values #ifdef AF_*.
+	Fixes Debian bug #250506.
+
+2004-05-02  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* linux/ioctlsort.c (compare): When ioctl codes equal, compare
+	names.
+	(main): Print a note that program output is generated by
+	ioctlsort.
+	* linux/ioctlent.sh: Build the list of ioctls defined in
+	linux/fb.h (0x46..), linux/kd.h (0x4B..), linux/cdrom.h (0x53..),
+	asm/ioctls.h (0x54..), linux/vt.h (0x56..), linux/videotext.h
+	(0x71..), linux/videotext.h (0x72..), asm/sockios.h (0x89..),
+	linux/sockios.h (0x89..), linux/wireless.h (0x8B..).
+	* linux/ioctlent.h: Regenerated from linux-2.6.5.
+	Fixes RH#122257.
+
+2004-06-03  Roland McGrath  <roland@redhat.com>
+
+	* debian/control (Architecture): Add amd64.
+	Fixes Debian bug #246568.
+
+	* strace.c (main) [LINUX]: Expand TCBTAB as necessary for threads
+	attached.  Attach threads only under -f.  Set TCB_FOLLOWFORK in them.
+	(expand_tcbtab): New function, broken out of ...
+	* process.c (fork_tcb): ... here, call that.
+	* defs.h: Declare expand_tcbtab.
+
+2004-04-19  Roland McGrath  <roland@redhat.com>
+
+	* process.c (printstatus): Add a space before | in output.
+
+2004-04-16  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac: Version 4.5.3.
+	* strace.spec, debian/changelog: 4.5.3-1.
+
+2004-03-18  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* resource.c (sys_quotactl) [LINUX]: Cast arithmetic shift operand
+	from long to unsigned long, to fix output of the quotactl command
+	parser.
+	Fixes RH#118694.
+
+2004-04-16  Roland McGrath  <roland@redhat.com>
+
+	* linux/s390/ioctlent.h, linux/s390x/ioctlent.h: Update DASD ioctls.
+	From Maxim Shchetynin <maxim@de.ibm.com>.
+
+	* configure.ac: Check for <mqueue.h>.
+	* ipc.c (sys_mq_open, printmqattr) [! HAVE_MQUEUE_H]: Don't try to
+	decode struct mq_attr.
+	* NEWS: Mention mq support.
+
+	* linux/syscall.h: Support new mq_* syscalls on Linux.
+	* linux/syscallent.h: Likewise.
+	* linux/dummy.h: Likewise.
+	* ipc.c: Likewise.
+	* time.c (printsigevent): Handle SIGEV_THREAD.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#120701.
+
+2004-04-13  Roland McGrath  <roland@redhat.com>
+
+	* net.c (msg_flags): Grok MSG_FIX, MSG_SYN, MSG_RST, MSG_NOSIGNAL,
+	MSG_MORE.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#120541.
+
+	* process.c (printstatus): Mask out bits presented symbolically, and
+	print "| 0xnnn" if the remaining bits are not all zero.
+	Fixes Debian bug #240062.
+
+	* process.c (print_affinitylist): Rewritten to handle indirect values.
+	(sys_sched_setaffinity, sys_sched_getaffinity): Update callers.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#118685.
+
+	* acinclude.m4: Quote first argument to AC_DEFUN in all cases.
+
+2004-04-08  Roland McGrath  <roland@redhat.com>
+
+	* strace.c (main) [LINUX]: When attaching for -p, look in
+	/proc/PID/task for all threads and attach them as presumed
+	CLONE_THREAD children.
+	* NEWS: Mention the feature.
+	Fixes RH#120462.
+
+2004-03-02  Roland McGrath  <roland@redhat.com>
+
+	* util.c (setbpt): Fix one missed spot to use new arg0_index macro.
+	From Michael Holzheu <HOLZHEU@de.ibm.com>.
+
+	* debian/control (Standards-Version): Update to 3.6.1.
+
+2004-03-01  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.2.
+	* strace.spec, debian/changelog: 4.5.2-1.
+
+	* strace.c (main): Avoid potential buffer overruns from ludicrous
+	arguments or PATH values.
+	* syscall.c (qual_signal): Bail out for too-long string.
+
+	* mem.c [LINUX]: <asm/mman.h> -> <linux/mman.h>
+	Fixes Debian bug #223207.
+
+	* linux/sparc/syscall.h: Copy linux/syscall.h decls of sys_sched_*.
+
+	* configure.ac: Check for `struct user_desc' in <asm/ldt.h>.
+	* process.c [HAVE_STRUCT_USER_DESC]: Use struct user_desc in place of
+	struct modify_ldt_ldt_s.
+	* mem.c [HAVE_STRUCT_USER_DESC]: Likewise.
+
+	* system.c (sysctl_vm): Conditionalize VM_* macro uses, add some more.
+	From Tim Yamin <plasmaroo@gentoo.org>.
+
+	* process.c (sys_execve): Clear instead of set TCB_WAITEXECVE on
+	erring syscall.
+
+	* configure.ac: Check for `struct pt_all_user_regs'
+	and `struct ia64_fpreg' in <sys/ptrace.h>.
+	* util.c, process.c, syscall.c, signal.c: Work around conflicts between
+	<sys/ptrace.h> and <linux/ptrace.h> for defining those types.
+
+	* process.c (struct_user_offsets) [LINUX && IA64]: Conditionalize
+	PT_AR_CSD and PT_AR_SSD uses in case of older kernel headers.
+
+	* util.c [LINUX] (arg0_index, arg1_index): New macros.
+	[S390 || S390X]: Define them with inverted values.
+	(setbpt): Use them for u_arg indices.
+
+2004-02-26  Andreas Schwab  <schwab@suse.de>
+
+	* defs.h [LINUX && IA64]: Declare getrval2 also on IA64.
+	* net.c (sys_pipe) [LINUX && IA64]: For IA64 use the two return values.
+	* syscall.c (getrval2) [LINUX && IA64]: Implement for IA64.
+
+2004-03-01  Roland McGrath  <roland@redhat.com>
+
+	* linux/dummy.h (sys_sched_getscheduler, sys_sched_setparam,
+	sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler,
+	sys_sched_get_priority_max, sys_sched_get_priority_min): Remove macros.
+	* process.c [LINUX] (sys_sched_getscheduler, sys_sched_setparam,
+	sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler,
+	sys_sched_get_priority_min): New functions.
+	From Ulrich Drepper <drepper@redhat.com>.
+	Fixes RH#116990.
+
+2004-02-20  Roland McGrath  <roland@redhat.com>
+
+	* linux/hppa/syscallent.h: Update some syscalls.
+	From Randolph Chung <tausq@debian.org>.
+	Fixes Debian bug #231632.
+
+2003-12-31  David Mosberger  <davidm@hpl.hp.com>
+
+	* process.c (internal_exit): For ia64, also recognize IA-32 252
+	as exit_group().
+	(change_syscall): For IA64, also support changing IA-32 syscalls.
+	* syscall.c (internal_syscall): For IA64, also recognize IA-32
+        syscall 252 (exit_group) as an internal_exit() syscall.
+	* util.c (SYS_fork): For IA64, define them to the IA-32 syscall
+	number.
+	(SYS_vfork): Likewise.
+	(arg_setup): For IA64 version, also support IA-32 syscalls.
+	(get_arg0): Likewise.
+	(get_arg1): Likewise.
+	(set_arg0): Likewise.
+	(set_arg1): Likewise.
+
+2004-02-15  Anton Blanchard  <anton@samba.org>
+
+	* linux/powerpc/syscallent.h: Add rtas call.
+	Shift multiplexed syscalls to start at 300, we are already about
+	to hit 256 real syscalls.
+	* linux/syscall.h: SYS_socket_subcall is now 300 for [POWERPC].
+
+2004-02-19  Roland McGrath  <roland@redhat.com>
+
+	* strace.c (main): Use TCP->pid, not PID, in -p message.
+	Fixes Debian bug #229802.
+
+2004-01-13  Roland McGrath  <roland@redhat.com>
+
+	* syscall.c (force_result) [LINUX] [S390 || S390X]: Remove bogus upeek
+	call.
+
+	* stream.c (internal_stream_ioctl): Fix typo strict -> struct.
+	Reported by Petter Reinholdtsen <pere@hungry.com>.
+
+2003-12-31  David Mosberger  <davidm@hpl.hp.com>
+
+	* process.c (struct_user_offsets) [IA64]: Fix up register name list.
+
+2003-12-14  Anton Blanchard  <anton@samba.org>
+
+	* file.c (sys_getdents64): Don't cast d_ino and d_off to unsigned long.
+	Use %llu formats for them.
+
+	* file.c [LINUX] (fsmagic): Add SYSFS_MAGIC.
+
+	* linux/powerpc/syscallent.h: Update to include recently added
+	syscalls.
+
+	* syscall.c (get_error) [POWERPC]: Cast result to unsigned long for
+	ppc64, we were misreporting syscalls that really succeeded as having
+	failed.
+
+2004-01-13  Roland McGrath  <roland@redhat.com>
+
+	* strace.1: Remove comment about vfork on Linux.
+	Fixes Debian bug #223390.
+
+	* file.c (direnttypes): Define under [LINUX] as well.  Add DT_UNKNOWN.
+	(sys_getdents64) [LINUX]: Print d_type field.
+
+2003-12-15  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* strace.c (trace) [WCOREDUMP]: Show coredump status of the
+	killed process if available.  Fixes RH#112117.
+
+2003-11-13  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.1.
+	* strace.spec, debian/changelog: 4.5.1-1.
+
+2003-09-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	* defs.h (ioctl_lookup): Prototype change.
+	* ioctl.c (ioctl_next_match): New function.
+	* defs.h: Declare it.
+	* io.c (sys_ioctl): Use it, to display all possible ioctl names
+	when there's more than one match.
+	* ioctl.c (ioctl_lookup): Likewise.
+	* stream.c (internal_stream_ioctl): Likewise.
+	Patch from Solar Designer <solar@openwall.com>.
+
+2003-11-13  Roland McGrath  <roland@redhat.com>
+
+	* linux/sh/syscallent.h: Use sys_setgroups32, sys_getgroups32.
+	* linux/sh64/syscallent.h: Likewise.
+
+2003-09-06  Dmitry V. Levin  <ldv@altlinux.org>
+
+	Fixes for RH#105359.
+	* util.c (printuid): New function.
+	* defs.h: Declare it.
+	* file.c (sys_chown): Use it.
+	* file.c (sys_fchown): Likewise.
+	* process.c (sys_setreuid, sys_setregid, sys_setresuid,
+	sys_setresgid): Likewise.
+	* linux/syscallent.h: Better handle getgid32, geteuid32, getegid32,
+	setreuid32, setregid32, getgroups32, setgroups32, fchown32,
+	setresuid32, getresuid32, setresgid32, getresgid32, chown32,
+	setuid32, setgid32, setfsuid32, setfsgid32.
+	* process.c [LINUX]: Define GETGROUPS32_T.
+	* process.c [LINUX] (sys_setgroups32, sys_getgroups32):
+	New functions.
+	* linux/syscall.h (sys_setgroups32, sys_getgroups32):
+	Declare them.
+
+2003-11-11  Roland McGrath  <roland@redhat.com>
+
+	* strace.c (main): Bail with usage error for missing command before we
+	open the -o file or fiddle uids.
+
+2003-11-06  Roland McGrath  <roland@redhat.com>
+
+	* strace.c (main): Treat piped output more like file output.
+	Disallow -ff with piped output.  Fixes RH#105366.
+	Reported by Dmitry V. Levin <ldv@altlinux.org>
+
+	* strace.c (tprintf): Check result of vfprintf and use perror when it
+	fails while not writing to stderr itself.  Fixes Debian bug #218762.
+
+	* net.c (printsock): Fix typo in #ifdef AF_NETLINK.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+2003-11-01  Roland McGrath  <roland@redhat.com>
+
+	* syscall.c (trace_syscall) [LINUX]: Calculate ONE_TICK once using
+	setitimer rather than hard-coding a value based on HZ.
+	Fixes RH#108012, reported by Florian La Roche <laroche@redhat.com>.
+
+2003-10-21  Roland McGrath  <roland@redhat.com>
+
+	* strace.1: Fixed a few spelling errors.
+	Fixes Debian bug #217008.
+
+	* syscall.c: Revert last change, was broken.
+
+2003-10-01  Roland McGrath  <roland@redhat.com>
+
+	* process.c (internal_clone): Don't suspend parent when call requested
+	a specific PID that is not a traced child.
+
+	* signal.c [LINUX] (parse_sigset_t): Rewrite to process hex strings
+	from right to left so we don't have to presume the size.
+	Reported by David Woodhouse <dwmw2@redhat.com>.
+
+2003-09-25  Roland McGrath  <roland@redhat.com>
+
+	* mem.c (mmap_prot) [PROT_SEM, PROT_GROWSDOWN, PROT_GROWSUP]: Include
+	these in the table if they are defined.
+
+2003-09-24  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.5.
+	* strace.spec, debian/changelog: 4.5-1.
+
+	* syscall.c (get_scno) [LINUX] [S390 || S390X]: Bail out of
+	instruction decoding branch if TCB_INSYSCALL is clear.
+	Reported by <jochen@penguin-breeder.org>.
+
+	* linux/ioctlent.h: Swap order of overloaded TC* and SNDCTL_* values.
+
+2003-09-23  Roland McGrath  <roland@redhat.com>
+
+	* strace.spec: On ppc64 (maybe others later), create an strace64
+	package as well containing just /usr/bin/strace64.
+
+	* signal.c (sprintsigmask): Print RT_%u for __SIGRTMIN..__SIGRTMAX.
+	Fixes RH#104365.
+
+2003-08-21  Roland McGrath  <roland@redhat.com>
+
+	* linux/syscallent.h: Fix mlock argument count.  Fixes RH#101499.
+	* linux/x86_64/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+
+2003-07-28  Daniel Jacobowitz  <drow@mvista.com>
+
+	* defs.h (ALIGN64): Define for MIPS.
+	* io.c (PREAD_OFFSET_ARG): Define.
+	(sys_pread, sys_pwrite): Use it.
+	* process.c (struct_user_offsets) [SH]: Check whether REG_XDREG0
+	is defined.
+	* linux/sh/syscallent.h (pread, pwrite): Take six arguments.
+	(truncate64, ftruncate64): Pretty-print.
+	* linux/mips/syscallent.h (pread, pwrite): Take six arguments.
+	(truncate64, ftruncate64): Take four arguments.
+
+2003-07-17  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.4.99.
+	* strace.spec, debian/changelog: 4.4.99-1.
+
+2003-07-15  Anton Blanchard  <anton@samba.org>
+
+	* ipc.c: Add SHM_HUGETLB field.
+	Mask out permission bits in msgget, semget and shmget before
+		printing resource_flags.
+	Mask execute permission bits (even though we dont currently
+		use them).
+
+2003-07-17  Roland McGrath  <roland@redhat.com>
+
+	* linux/powerpc/syscallent.h (tgkill): New at 250.
+
+	* linux/syscallent.h: truncate64/ftruncate64 need 3 args.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+	* linux/syscallent.h: Handle statfs64, fstatfs64, utimes.
+	* file.c (printstatfs): Print f_fsid and f_frsize.
+	[LINUX] (printstatfs64, sys_statfs64, sys_fstatfs64): New functions.
+	* linux/syscall.h: Add decls.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+2003-07-09  Roland McGrath  <roland@redhat.com>
+
+	* linux/ia64/syscallent.h (tgkill): New at 1235.
+
+2003-07-05  Richard Henderson  <rth@twiddle.net>
+
+	* process.c (sys_clone): Order arguments for alpha the same as x86_64.
+	* syscall.c (ERESTART_RESTARTBLOCK): New.
+	(trace_syscall): Print it.
+	* linux/alpha/syscallent.h (osf_syscall): Name properly.
+	(osf_set_program_attributes): Fix typo.
+	(osf_nfssvc): Likewise.
+	(osf_sigsendset): Likewise.
+	(getdents64, gettid, readahead, tkill, setxattr, lsetxattr, fsetxattr,
+	getxattr, lgetxattr, fgetxattr, listxattr, llistxattr, flistxattr,
+	removexattr, lremovexattr, fremovexattr, futex, sched_setaffinity,
+	sched_getaffinity, tuxcall, io_setup, io_destroy, io_getevents,
+	io_submit, io_cancel, exit_group, lookup_dcookie, epoll_create,
+	epoll_ctl, epoll_wait, remap_file_pages, set_tid_address,
+	restart_syscall, fadvise, timer_create, timer_settime, timer_gettime,
+	timer_getoverrun, timer_delete, clock_settime, clock_gettime,
+	clock_getres, clock_nanosleep, semtimedop): New.
+
+2003-07-08  Roland McGrath  <roland@redhat.com>
+
+	* signal.c (sys_tgkill): New function.
+	* linux/syscall.h: Declare it.
+	* linux/syscallent.h: Add tgkill.
+
+2003-06-27  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac: Check for type `struct __old_kernel_stat'.
+	* file.c (convertoldstat, printoldstat): Define under
+	[LINUX && HAVE_STRUCT___OLD_KERNEL_STAT] rather than a list of archs.
+	(sys_oldstat, sys_oldfstat, sys_oldlstat): Likewise.
+	* linux/dummy.h [! HAVE_STRUCT___OLD_KERNEL_STAT]
+	(sys_oldstat, sys_oldfstat, sys_oldlstat): #define to printargs.
+
+2003-06-26  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac: SHMEDIA -> SH64
+	* defs.h: Likewise.
+	* mem.c: Likewise.
+	* process.c: Likewise.
+	* sock.c: Likewise.
+	* syscall.c: Likewise.
+	* util.c: Likewise.
+	* linux/shmedia/syscallent.h: Moved to ...
+	* linux/sh64/syscallent.h: ... here.
+
+	* config.guess: Update from canonical version, timestamp 2003-06-17.
+	* config.sub: Likewise.
+
+	* syscall.c (force_result) [LINUX] [ARM]: Fix variable usage.
+	From: Joshua Neal <tinara@netpipeline.net>.
+
+	* process.c [LINUX] (sys_futex): Grok FUTEX_REQUEUE and print 5th arg.
+	* linux/syscallent.h: sys_futex argument count is now 5, not 4.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/x86_64/syscallent.h: Likewise.
+	From Jakub Jelinek <jakub@redhat.com>.
+
+	* syscall.c (get_scno) [S390 || S390X]: Fix old vs new mode detection.
+	From Michael Holzheu <HOLZHEU@de.ibm.com>.
+
+2003-06-23  Roland McGrath  <roland@redhat.com>
+
+	* net.c (sys_socket): Decode protocol for PF_INET6 same as PF_INET.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+2003-06-10  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.4.98.
+	* strace.spec, debian/changelog: 4.4.98-1.
+
+2003-06-09  Roland McGrath  <roland@redhat.com>
+
+	* linux/s390x/syscallent.h: Update many syscalls.
+	* linux/syscall.h (SYS_socket_subcall): Update [S390X] value.
+
+	* linux/s390/syscallent.h: Update many syscalls.
+	* linux/syscall.h (SYS_socket_subcall): Update [S390] value.
+
+	* linux/shmedia/syscallent.h: New file.
+	From Stephen Thomas <stephen.thomas@superh.com>.
+
+	* strace.c (trace): Print a message and newline for a WIFEXITED report
+	from the process we just printed an unterminated syscall line for.
+
+2003-06-03  Roland McGrath  <roland@redhat.com>
+
+	* util.c (printcall) [LINUX]: Fix typo [IA62] -> [IA64].
+
+	Linux/ARM improvements from Russell King <rmk@arm.linux.org.uk>:
+	* defs.h [LINUX] (TCB_WAITEXECVE): Define for [ARM] too.
+	* process.c (struct_user_offsets) [LINUX] [ARM]: Add ARM registers.
+	* signal.c [LINUX] (sys_sigreturn) [ARM]: New case.
+	* syscall.c (get_scno, syscall_fixup) [LINUX] [ARM]: Case rewritten.
+	(get_error) [LINUX] [ARM]: Update.
+	(syscall_enter) [LINUX] [ARM]: New case.
+	* util.c (printcall) [LINUX] [ARM]: New case.
+
+	* debian/control (Standards-Version): Update to 3.5.10.
+
+	* strace.c (main): In PATH search, accept only a regular file with
+	execute bits set.  Fixes Debian bug #137103.
+
+2003-06-02  Roland McGrath  <roland@redhat.com>
+
+	* strace.c (main): Set -q when given -o and not -p, and not when not
+	given -o, to match what the man page always said.
+	Fixes Debian bug #47113, #153678.
+
+	* configure.ac, NEWS: Version 4.4.97.
+	* strace.spec, debian/changelog: 4.4.97-1.
+
+	* configure.ac, defs.h, mem.c, process.c, sock.c, syscall.c, util.c:
+	Merged in SHmedia port from Stephen Thomas <stephen.thomas@superh.com>.
+
+	* config.guess: Update from ftp://ftp.gnu.org/pub/gnu/config/,
+	timestamp 2003-05-22.
+	* config.sub: Likewise, timestamp 2003-05-24.
+
+2003-05-22  Roland McGrath  <roland@redhat.com>
+
+	* defs.h (struct tcb): New member `nzombies'.
+	* strace.c (alloctcb): Initialize it.
+	(droptcb): Increment our parent's zombie count.
+	* process.c (internal_wait): Don't go into TCB_SUSPENDED if the
+	process has zombies it can reap.  On the way out, if we reaped
+	an untraced process, decrement the zombie count.
+
+	* process.c (sys_clone): Mask CSIGNAL out of flags and print that
+	separately using signame.
+
+	* process.c (internal_clone) [TCB_CLONE_THREAD]: Use ARG_FLAGS instead
+	of literal 0 for index.  Consult the right flags without clobbering
+	anything when we reparent the new child to the caller's parent thread.
+
+	* linux/s390/syscallent.h: Fix sys_clone argument count.
+	* linux/s390x/syscallent.h: Likewise.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/alpha/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/sh/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/hppa/syscallent.h: Likewise.
+
+	* process.c [LINUX] [S390 || S390X] (ARG_CTID, ARG_TLS): Fix swapped
+	indices.  Reported by Jakub Jelinek <jakub@redhat.com>.
+
+	* signal.c [LINUX] (SI_SIGIO, SI_TKILL): New macros.
+	[LINUX || SVR4] (siginfo_codes): Add strings for them.
+
+	* process.c (print_affinitylist): Fix loop condition.
+	Reported by Ian Wienand <ianw@gelato.unsw.edu.au>.
+
+2003-04-10  Roland McGrath  <roland@redhat.com>
+
+	* syscall.c (qual_desc): Return zero after parsing number.
+	From Rob Leslie <rob@mars.org>, fixes Debian bug #188379.
+
+2003-04-07  Roland McGrath  <roland@redhat.com>
+
+	* linux/syscallent.h: Handle semtimedop subcall of ipc syscall.
+	* linux/syscall.h: Likewise.
+	* ipc.c [LINUX] (sys_semtimedop): New function.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+	* ipc.c (sys_semget): Mask off permission bits for resource_flags.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+2003-04-01  Philippe De Muyter  <phdm@macqel.be>
+
+	* sock.c, stream.c: Check #ifdef LINUX, not linux.
+	* file.c: Always provide sys_*attr, regardless of #ifdef XATTR_CREATE.
+
+2003-03-30  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.4.96.
+	* strace.spec, debian/changelog: 4.4.96-1.
+
+2003-02-26  Stuart Menefy <stuart.menefy@st.com>
+
+	Various fixes for SuperH [SH]:
+	* mem.c (sys_old_mmap): mmap() parameters passed in registers
+	* net.c (sys_pipe), syscall.c (getrval2): pipe() results returned
+	in registers
+	* process.c (change_syscall): Fixed register which holds system
+	call number
+	* util.c (arg0_offset, arg1_offset): provide definition
+	* Makefile.am: Added new files in linux/sh
+	* linux/sh/syscallent.h: New file.
+	* linux/sh/errnoent.h: New file.
+	* linux/sh/ioctlent.h: New file.
+	* linux/sh/signalent.h: New file.
+
+	* linux/ioctlent.sh: Take an arg for location of header files
+	* syscallent.sh: Replaced lost $
+
+2003-03-30  Roland McGrath  <roland@redhat.com>
+
+	* time.c [LINUX]: Handle new Linux 2.5 clock/timer syscalls.
+	* linux/syscall.h, linux/syscallent.h, linux/dummy.h: Likewise.
+	From Ulrich Drepper <drepper@redhat.com>.
+
+	* linux/syscallent.h: Use sys_getrlimit for 191.
+	Use name "old_getrlimit" for 76.
+	Reported by Ulrich Drepper <drepper@redhat.com>.
+
+2003-03-18  Roland McGrath  <roland@redhat.com>
+
+	* process.c [LINUX] (sys_clone): Don't dereference parent_tid argument.
+
+2003-03-17  Roland McGrath  <roland@redhat.com>
+
+	* linux/x86_64/syscallent.h: clone takes 5 args.
+	* process.c [LINUX] (sys_clone) [X86_64]: Fix argument order.
+
+2003-03-15  Roland McGrath  <roland@redhat.com>
+
+	* linux/x86_64/syscallent.h: Add exit_group syscall at 231.
+
+2003-03-14  Roland McGrath  <roland@redhat.com>
+
+	* linux/x86_64/syscallent.h: Update and add many 2.5 syscalls.
+
+	* linux/ia64/syscallent.h: clone takes 5 arguments.
+	* process.c [LINUX && IA64] (ARG_*): Update for 2.5 clone calls.
+
+2003-03-12  Roland McGrath  <roland@redhat.com>
+
+	* linux/ia64/syscallent.h: Fix arg counts for clone and clone2.
+	Use sys_clone for clone2.
+	* linux/syscall.h: Don't declare sys_clone2.
+	* process.c (sys_clone): Rewritten to handle both flavors,
+	print all extra args depending on flag bits.
+	(sys_clone2): Function removed.
+
+	* linux/ia64/syscallent.h: Add a bunch of 2.5 syscalls.
+
+2003-03-04  Roland McGrath  <roland@redhat.com>
+
+	* syscall.c (get_scno) [IA64]: Do TCB_WAITEXECVE check only when
+	TCB_INSYSCALL is clear, like other platforms do.
+
+2003-03-04  Ulrich Drepper  <drepper@redhat.com>
+
+	* mem.c [LINUX] (sys_remap_file_pages): New function.
+	* linux/syscall.h: Declare it.
+	* linux/syscallent.h: Use it.
+	* linux/powerpc/syscallent.h: Likewise.
+
+	* process.c [LINUX] (sys_futex): Omit final if op is not FUTEX_WAIT.
+
+2003-02-26  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac: Fix typo in netinet/in.h check.
+	Also include <sys/types.h> and <sys/socket.h> before <netinet/in.h>.
+	Reported by Alex Semenyaka <alexs@snark.rinet.ru>.
+
+2003-02-24  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.4.95.
+	* strace.spec, debian/changelog: 4.4.95-1.
+
+	* process.c (sys_getresgid): Fix typos in argument access.
+
+2003-02-23  Roland McGrath  <roland@redhat.com>
+
+	* process.c (sys_getresuid): Fix typos in argument access.
+	Reported by Anton Blanchard <anton@samba.org>.
+
+2003-02-19  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.4.94.
+	* strace.spec, debian/changelog: 4.4.94-1.
+
+	* version.c: Removed.
+	* Makefile.am (strace_SOURCES): Remove it.
+	* strace.c: Use PACKAGE_NAME and VERSION macros instead of version var.
+
+	FreeBSD rfork support changes from Russ Cox <rsc@plan9.bell-labs.com>:
+	* syscall.c (internal_syscall): Handle SYS_rfork with internal_fork.
+	* process.c (internal_fork) [SYS_rfork]: Bail if RFPROC flag not set.
+
+2003-01-23  Roland McGrath  <roland@redhat.com>
+
+	* signal.c: Reorder #ifdefs so HAVE_ASM_SIGCONTEXT_H doesn't matter on
+	SPARC, which doesn't use the header regardless.
+
+	* util.c [LINUX && SPARC]: Do renaming kludges around <asm/reg.h>
+	like signal.c does.
+
+	* linux/sparc/syscall.h: Declare sys_getdents64, sys_llseek.
+
+	* linux/dummy.h [! SYS_getpmsg] (sys_getpmsg): #define to printargs.
+	[! SYS_putpmsg] (sys_putpmsg): Likewise.
+
+	* process.c: Reorder includes to put sys/reg.h before linux/ptrace.h,
+	since they can conflict.
+
+2003-01-21  Roland McGrath  <roland@redhat.com>
+
+	* strace.c (usage): Omit -z, since it has never worked properly.
+	* NEWS: Likewise.
+
+	* strace.c (main): Grok new option `-E var=val' or `-E var' to put
+	var=val in environ or to remove var, respectively.
+	(usage): Mention it.
+	* strace.1, NEWS: Document it.
+
+	* configure.ac, NEWS: Version 4.4.93.
+	* strace.spec, debian/changelog: 4.4.93-1.
+	* strace.spec (Source0): Use strace-VERSION.tar.bz2 now.
+
+2003-01-20  Roland McGrath  <roland@redhat.com>
+
+	* defs.h [LINUX] [S390 || S390X] (TCB_WAITEXECVE): Define it.
+	* syscall.c (get_scno, syscall_fixup) [LINUX] [S390 || S390X]: Handle
+	TCB_WAITEXECVE state with special kludges.
+
+	* process.c [LINUX] (sys_clone) [S390 || S390X]: Argument order is
+	reversed from other architectures.
+
+	* process.c (sys_execve) [LINUX]: Make setting TCB_WAITEXECVE flag
+	conditional on [TCB_WAITEXECVE] instead of list of processors.
+
+	* util.c (restore_arg0): Evaluate args in no-op defns.
+
+	* util.c [S390 || S390X] (arg0_offset, arg1_offset): Fix definitions
+	for clone call on S390.  From Michael Holzheu <holzheu@de.ibm.com>.
+
+2003-01-17  Anton Blanchard <anton@samba.org>
+
+	* util.c [LINUX] (setbpt): Handle SYS_vfork like SYS_fork.
+
+	* linux/syscall.h (SYS_socket_subcall): 256 also for POWERPC.
+
+2003-01-14  Roland McGrath  <roland@redhat.com>
+
+	* linux/powerpc/errnoent.h: Add missing errnos.
+	* linux/powerpc/ioctlent.h: Update ioctl values.
+	From Anton Blanchard <anton@samba.org>.
+
+	* io.c [LINUX] (sys_pread, sys_pwrite): Fix last change.
+	From Anton Blanchard <anton@samba.org>.
+
+	* linux/hppa/syscallent.h: Use sys_getdents64, sys_truncate64,
+	sys_ftruncate64, instead of printargs, for those syscalls.
+	* linux/mips/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+	* linux/s390/syscallent.h: Likewise.
+	* linux/sparc/syscallent.h: Likewise.
+
+	* linux/syscall.h (SYS_socket_subcall): Only 256 for S390, S390X.
+	All others at the moment use linux/syscallent.h, where it's 300.
+
+	* strace.1: Update bug reporting info.
+
+	* resource.c [LINUX] (quotacmds): Grok new command encodings.
+	From Nathan Scott <nathans@debian.org>.
+
+	* configure.ac, NEWS: Version 4.4.92.
+	* strace.spec, debian/changelog: 4.4.92-1.
+
+	* configure.ac: Match powerpc* (includes powerpc64), and don't match
+	ppc (never comes out of config.sub).
+
+	* process.c (sys_ptrace): Use #lx format for address argument.
+	[POWERPC]: Use sizeof(unsigned long) in place of 4 for multipliers.
+	* process.c [POWERPC]: Likewise.
+	* signal.c (sys_sigreturn) [POWERPC]: Likewise.
+	* syscall.c (get_scno) [POWERPC]: Likewise.
+	* util.c [POWERPC]: Likewise.
+	(printnum): Use long for NUM.
+	From Anton Blanchard <anton@samba.org>.
+
+	* defs.h (ALIGN64): Fix defn for PPC, same as FreeBSD one.
+
+	* util.c [LINUX] (restore_arg0, restore_arg1): New macros, defined
+	appropriately via set_arg0 or no-ops for each architecture.
+	(clearbpt): Use those instead of set_arg0 and set_arg1.
+
+	* defs.h [_LARGEFILE64_SOURCE] (_LFS64_LARGEFILE): Define it.
+	* linux/syscallent.h: Use sys_getdents64, sys_truncate64,
+	sys_ftruncate64, instead of printargs, for those syscalls.
+
+	* process.c: Use <linux/ptrace.h> regardless of <sys/reg.h>.
+	(sys_ptrace): Use printxval.
+	(ptrace_cmds): Make PTRACE_GETREGS et al conditional on #ifdef PTRACE_*
+	instead of only #ifdef SUNOS4.  Add PTRACE_[GS]ETFPXREGS.
+
+	* ipc.c (PRINTCTL): New macro.  #ifdef IPC_64, factor out the flag and
+	print it before using printxval.
+	(sys_msgctl, sys_semctl, sys_shmctl): Use it.
+
+2003-01-13  Roland McGrath  <roland@redhat.com>
+
+	* config.guess: Update from ftp://ftp.gnu.org/pub/gnu/config/,
+	timestamp 2003-01-10.
+	* config.sub: Likewise, timestamp 2003-01-03.
+	* install-sh: Update from Automake 1.7.2.
+
+	* linux/powerpc/signalent.h: Add SIGRTMIN.
+	From Anton Blanchard <anton@samba.org>.
+
+	* linux/powerpc/syscallent.h: Add missing system calls.
+	Decode more system calls, we were just printargs for many things.
+	Remove some x86-specific system calls.
+	Remove two syscalls between the socket and ipc syscalls,
+	it was resulting in all IPC syscalls being off by two.
+
+	* ioctl.c (ioctl_decode) [POWERPC]: Decode term ioctls like Alpha.
+	From Anton Blanchard <anton@samba.org>.
+
+	* defs.h [POWERPC] (UESP, EIP, EAX, ORIG_EAX): Remove this cruft.
+	[LINUX && POWERPC && !__powerpc64__] (ALIGN64): New macro.
+	* io.c (sys_pread, sys_pwrite): Use ALIGN64.
+	From Anton Blanchard <anton@samba.org>.
+
+	* term.c [LINUX]: Get kernel definition of struct termios.
+	From Anton Blanchard <anton@samba.org>.
+
+	* linux/ioctlent.sh: Look in sound/ directory too.
+	From Anton Blanchard <anton@samba.org>.
+
+	* desc.c (printflock64): Fix ADDR argument type.
+	From Anton Blanchard <anton@samba.org>.
+
+	* strace.c [! HAVE_STRSIGNAL]: Clean up #ifdefs on decls for
+	sys_siglist and _sys_siglist.
+	Reported by John Hughes <john@Calva.COM>.
+
+	* net.c: HAVE_OPTHDR -> HAVE_STRUCT_OPTHDR
+	Reported by John Hughes <john@Calva.COM>.
+
+	* linux/syscall.h [ARM] (SYS_socket_subcall): Set to 300.
+
+2003-01-10  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, NEWS: Version 4.4.91.
+	* strace.spec, debian/changelog: 4.4.91-1
+
+	* util.c [LINUX && X86_64] (arg0_offset, arg1_offset): Use correct
+	values for x86-64, conditional on current_personality.
+
+	* strace.c (droptcb): Clear flags word before calling rebuild_pollv.
+
+	* configure.ac: Check struct T_conn_res for QUEUE_ptr or ACCEPTOR_id.
+	* stream.c (print_transport_message): Use #ifdefs for those members.
+
+	* strace.c (rebuild_pollv): Fix typo: struct poll -> struct pollfd.
+
+	* configure.ac: Fix siginfo_t/sig_atomic_t checks.
+	Use prerequisite #include <netinet/in.h> for netinet/*.h checks.
+
+	* strace.c (pfd2tcb): Fix for new tcbtab type.
+	(rebuild_pollv): Likewise.
+	(detach): Put variables used under [LINUX] inside #ifdef.
+
+	* process.c (change_syscall) [POWERPC]: Add missing return.
+	* util.c [POWERPC] (arg0_offset): Set to 4*PT_R3, not 4*PT_ORIG_R3.
+
+	* strace.spec: New file.
+	* debian/changelog: 4.4.90-1
+	* debian/rules (binary-arch): Depend on build.
+	(clean): Don't try to run Makefile.in.
+	* debian/control (Standards-Version): Now 3.5.8.
+
+	* configure.ac: Diddle CFLAGS after AC_PROG_CC, not before.
+
+2003-01-09  Roland McGrath  <roland@redhat.com>
+
+	* syscall.c (force_result) [S390 || S390X]: Fix typo.
+
+	* debian/control: Update Maintainer: field.
+
+2003-01-08  Roland McGrath  <roland@redhat.com>
+
+	* NEWS: Update for 4.4.90 test release.
+
+	Support for new Linux 2.5 thread features.
+	* defs.h [LINUX]: Define __NR_exit_group if not defined.
+	(struct tcb): New members nclone_threads, nclone_detached,
+	and nclone_waiting.
+	(TCB_CLONE_DETACHED, TCB_CLONE_THREAD, TCB_GROUP_EXITING): New macros.
+	(waiting_parent): Macro removed.
+	(pid2tcb): Declare it.
+	* process.c (internal_clone) [TCB_CLONE_THREAD]: Reparent the new
+	child to our parent if we are a CLONE_THREAD child ourselves.
+	Maintain TCB_CLONE_THREAD and TCB_CLONE_DETACHED flags and counts.
+	(internal_wait) [TCB_CLONE_THREAD]: Factor out detached children when
+	determining if we have any.  If TCB_CLONE_THREAD is set, check
+	parent's children instead of our own, and bump nclone_waiting count.
+	(internal_exit) [__NR_exit_group]: Set the TCB_GROUP_EXITING flag if
+	the syscall was exit_group.
+	* syscall.c (internal_syscall): Use internal_exit for exit_group.
+	* strace.c (pid2tcb): No longer static.
+	(alloctcb) [TCB_CLONE_THREAD]: Initialize new fields.
+	(droptcb) [TCB_CLONE_THREAD]: Maintain new fields.
+	If we have thread children, set TCB_EXITING and don't clear the TCB.
+	(resume) [TCB_CLONE_THREAD]: Decrement parent's nclone_waiting.
+	(detach) [TCB_CLONE_THREAD]: When calling resume, check all thread
+	children of our parent that might be waiting for us too.
+	[TCB_GROUP_EXITING] (handle_group_exit): New function.
+	(trace) [TCB_GROUP_EXITING]: Use that in place of detach or droptcb.
+
+	Revamp -f support for Linux.
+	* util.c [LINUX] (setbpt, clearbpt): New implementations that tweak
+	the system call to be clone with CLONE_PTRACE set.  Various new static
+	helper functions.
+	* process.c (internal_clone): Define also #ifdef SYS_clone2.
+	Initialize TCPCHILD->parent field.
+	[CLONE_PTRACE]: Don't do PTRACE_ATTACH here, because it's preattached.
+	Check in case the new child is in the tcb already.
+	(internal_fork) [LINUX]: Just call internal_clone.
+	* strace.c (trace) [LINUX]: Under -f/-F, grok an unknown pid
+	reporting to wait, put it in the TCB with TCB_ATTACHED|TCB_SUSPENDED.
+
+	* linux/x86_64/syscallent1.h (sys_oldlstat): #define as printargs.
+
+	* file.c [LINUX]: #undef st_[amc]time in case they are macros.
+
+	* Makefile.am (AM_CFLAGS): New variable, define to $(WARNFLAGS).
+
+	* Makefile.am (EXTRA_DIST): Remove debian/postinst and debian/prerm.
+
+2003-01-09  Wichert Akkerman  <wichert@deephackmode.org>
+
+	* debian/postinst, debian/prerm: removed, /usr/doc symlink is no
+	longer used
+	* debian/rules: no longer install postinst and prerm
+	* debian/control: do not end summary with full stop (lintian)
+
+2002-12-30  Roland McGrath  <roland@redhat.com>
+
+	* Makefile.am (bin_SCRIPTS): New variable, list strace-graph.
+	(EXTRA_DIST): Add missing files.
+
+	* configure.ac: Fix asm/sigcontext.h check to include prerequisite.
+
+	* syscall.c (qualify_one): New function.
+	(qual_options): Replace lookup field with qualify, update initializer.
+	(qualify): Update caller.
+	(qual_signal, qual_fault, qual_desc): Rewritten from lookup_*.
+	(qual_syscall): Rewritten lookup_syscall, match name more than once.
+	Fixes RH#70579, bites IA64 -efoo when foo exists on IA32.
+
+	* version.c (version): Make const, bump to 4.4.90.
+	* strace.c: Update decl.
+
+	* Makefile.am [LINUX && X86_64]: Remove cruft.
+	* linux/x86_64/errnoent1.h: New file.
+	* linux/x86_64/ioctlent1.h: New file.
+	* linux/x86_64/signalent1.h: New file.
+	* linux/x86_64/syscallent1.h: New file.
+	* linux/x86_64/i386-headers.diff: File removed.
+	* linux/x86_64/makeheaders.sh: File removed.
+	* linux/x86_64/Makefile.in: File removed.
+
+	* linux/syscallent.h [X86_64]: Disable sanity checks, subcall stuff is
+	already broken for 32-bit personality on x86-64.
+
+2002-12-29  Roland McGrath  <roland@redhat.com>
+
+	* configure.ac, Makefile.am: Punt subdirs, handle everything here.
+	* linux/Makefile.am: File removed.
+	* freebsd/Makefile.am: File removed.
+	* sunos4/Makefile.in: File removed.
+	* svr4/Makefile.in: File removed.
+
+	* linux/alpha/Makefile.in: File removed.
+	* linux/hppa/Makefile.in: File removed.
+	* linux/ia64/Makefile.in: File removed.
+	* linux/powerpc/Makefile.in: File removed.
+	* linux/s390/Makefile.in: File removed.
+	* linux/s390x/Makefile.in: File removed.
+
+2002-12-26  Roland McGrath  <roland@redhat.com>
+
+	* syscallent.sh: Grok three flavors of #define line, uniquify.
+	* linux/hppa/syscallent.sh: File removed.
+	* linux/powerpc/syscallent.sh: File removed.
+
+	* linux/Makefile.am: New file.
+	* linux/Makefile.in: File removed.
+	* freebsd/Makefile.am: New file.
+	* freebsd/i386/Makefile.am: New file.
+	* freebsd/i386/Makefile.in: File removed.
+
+2002-12-22  Roland McGrath  <roland@redhat.com>
+
+	Update to Autoconf 2.57, and Automakify with version 1.7.
+	* Makefile.am: New file.
+	* Makefile.in: File removed.
+	* configure.in: Moved to ...
+	* configure.ac: ... here.  Update for Autoconf 2.5x and Automake.
+	* aclocal.m4: Moved to ...
+	* acinclude.m4: ... here.  Update for Autoconf 2.5x.
+	* acconfig.h: File removed.
+	* AUTHORS: New file, makes automake happy.
+	* autogen.sh: File removed.
+	* README-CVS: Update to recommend autoreconf instead.
+	* file.c: HAVE_ST_* -> HAVE_STRUCT_STAT_ST_*.
+	* net.c: HAVE_SIN6_SCOPE_ID -> HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID,
+	HAVE_MSG_CONTROL -> HAVE_STRUCT_MSGHDR_MSG_CONTROL.
+	* strace.c: *_DECLARED -> HAVE_DECL_*
+	* stream.c: HAVE_* -> HAVE_STRUCT_*
+
+	* linux/Makefile.in (ioctldefs.h ioctls.h): Use $(SHELL) instead of
+	sh, and use $(srcdir) to find the script.
+	* linux/powerpc/Makefile.in (ioctlent.raw): Find ioctlent.sh in ../.
+	(ioctlsort.o): Use ../ioctlsort.c, not ../../ioctlsort.c.
+	* linux/x86_64/Makefile.in (headers): Renamed to all.
+	* linux/alpha/Makefile.in: Add empty install target.
+	* linux/x86_64/Makefile.in: Likewise.
+	* linux/powerpc/Makefile.in: Likewise.
+	* linux/Makefile.in: Likewise.
+
+2002-12-26  Roland McGrath  <roland@redhat.com>
+
+	* defs.h [LINUX && MIPS] (MAX_QUALS): Set to 5000, not 4999.
+	From Daniel Jacobowitz <drow@false.org>.
+
+2002-12-21  Roland McGrath  <roland@redhat.com>
+
+	* linux/syscallent.h: Add some new 2.5 syscall names.
+	Now clone takes 5 args.
+	* process.c [LINUX] (clone_flags): Update with 2.5 flag bits.
+	[LINUX] (sys_clone): Print new args.
+	* mem.c (print_ldt_entry): Make global.
+
+	* linux/syscall.h [I386 || IA64] (SYS_socket_subcall): Bump to 300 for
+	safety, since up to 260 are already used in 2.5 kernels.
+	* linux/syscallent.h: Update the table.
+	* linux/ia64/syscallent.h: Likewise.
+
+	* syscall.c (force_result): New function.
+	* process.c (internal_wait): Handle ECHILD exit from wait call with
+	WNOHANG flag set; force the return value to 0 in the inferior when it
+	has live children we are tracing.
+	* NEWS: Mention the bug fix.
+
+2002-12-17  Roland McGrath  <roland@redhat.com>
+
+	* linux/ia64/syscallent.h: Remove placeholders 275-298 to catch up
+	with linux/syscallent.h additions.
+
+	* strace.c (tcbtab): Make this a pointer to pointers, not an array.
+	(tcbtabsize): New variable.
+	(main): Initialize them using dynamic allocation.
+	(alloctcb, main): Use tcbtabsize in place of MAX_PROCS; indirect.
+	(pid2tcb, cleanup): Likewise.
+	[USE_PROCFS] (pollv): Make this a pointer, not an array; make static.
+	(rebuild_pollv): Dynamically allocate the vector.
+	* defs.h (tcbtab): Update decls.
+	(MAX_PROCS): Macro removed, no more static limit on this.
+	* process.c (fork_tcb): New function.
+	(internal_clone, internal_fork): Use it instead of checking nprocs.
+
+	* strace.c (detach) [LINUX]: Use __WALL (or a second try with __WCLONE)
+	in wait after sending SIGSTOP.
+
+2002-12-16  Roland McGrath  <roland@redhat.com>
+
+	* signal.c (sprintsigmask): Increase static buffer size to account for
+	worst possible case.  Reported by Daniel Jacobowitz <drow@false.org>.
+
+	* process.c [LINUX] (wait4_options): Fix __WCLONE value.  Add
+	__WNOTHREAD and __WALL.
+
+	* strace.c (trace) [LINUX]: Only check errno if wait4 actually fails,
+	so we don't repeat a wait and thus drop a status.  Fixes RH#62591.
+
+2002-12-15  Roland McGrath  <roland@redhat.com>
+
+	* process.c (setarg) [POWERPC]: Support it.
+
+	* util.c [POWERPC] (LOOP): Fix value, now 0x48000000 (0: b 0b).
+	Old value was bogus, not even a proper instruction.
+	From Guy M. Streeter <streeter@redhat.com>.
+
+	* strace.c (main) [! USE_PROCFS]: Always reset SIGCHLD to SIG_DFL.
+
+	* configure.in: Don't check for putpmsg.
+	* stream.c (sys_getpmsg, sys_putpmsg): Make these conditional on
+	#ifdef SYS_*, rather than on HAVE_PUTPMSG.
+
+	* aclocal.m4 (AC_STAT64): Include <linux/types.h> before <asm/stat.h>
+	in test.  Test our own #ifdef LINUX rather than predefined `linux'.
+
+	* linux/powerpc/syscallent.h: Use sys_llseek for _llseek.
+	* linux/sparc/syscallent.h: Likewise.
+	* linux/hppa/syscallent.h: Likewise.
+
+	* syscall.c (syscall_enter) [LINUX && POWERPC]: Define PT_ORIG_R3 if
+	not defined, since <asm/ptrace.h> defines it only #ifdef __KERNEL__.
+	* process.c: Likewise.
+
+	* desc.c (sys_osf_select): Add missing return type.
+
+	* syscall.c (trace_syscall): Use strerror, not sys_errlist/sys_nerr.
+
+	* linux/ia64/syscallent.h: Remove macros for sys_delete_module,
+	sys_nanosleep, both already in linux/dummy.h.
+
+	* syscall.c (get_scno): Move static `currpers' inside #ifdef X86_64.
+	(trace_syscall): Fix return without value.
+
+	* linux/syscallent.h: Update table with names of new syscalls
+	io_setup, io_destroy, io_getvents, io_submit, io_cancel.
+	* linux/ia64/syscallent.h: Likewise.
+	* linux/powerpc/syscallent.h: Likewise.
+
+	* signal.c [LINUX && I386]: Provide SA_RESTORER constant if not
+	defined.  If the bit is set, print the sa_restorer field of sigaction.
+
+	* mem.c: Add sys_{get,set}_thread_area.
+	* linux/syscall.h: Declare them.
+	* linux/syscallent.h: Update the table for these.
+	* linux/dummy.h (sys_modify_ldt): Define only #ifndef I386.
+	(sys_get_thread_area, sys_set_thread_area): New macros #ifndef I386.
+
+	* configure.in: Check for linux/xattr.h and linux/futex.h headers.
+	* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
+	readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
+	listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
+	sched_getaffinity, futex.
+	* linux/syscallent.h: Update the table.
+	* io.c: Add sys_sendfile64.
+	* file.c: Add sys_readahead, sys_*xattr.
+	* process.c: Add sys_futex, sys_*affinity.
+
+	* linux/syscall.h (SYS_socket_subcall): Define to 256 on all machines.
+	(SYS_ipc_subcall): Always SYS_socket_subcall + SYS_socket_nsubcalls.
+	* linux/syscallent.h: Update the table for socket and ipc subcalls.
+
+2002-11-09  Heiko Carstens <heiko.carstens@de.ibm.com>
+
+	Bugfix for s390/s390x:
+	* syscall.c: Fixed scno derivation for s390/s390x.
+
+2002-11-06  Michal Ludvig  <mludvig@suse.cz>
+
+	Merged patch from Steven J. Hill <sjhill@realitydiluted.com>
+	to allow the compilation of a native MIPS strace.
+
+2002-11-06  Michal Ludvig  <mludvig@suse.cz>
+
+	From Marty Leisner <leisner@rochester.rr.com>,
+	rewritten by mludvig:
+	* strace.c (not_failing_only): New.
+	(usage): Added -z switch description.
+	(main): Added -z switch parsing to not_failing_only variable.
+	* syscall.c (trace_syscall): Added not_failing_only handling.
+
+2002-10-08  Heiko Carstens <heiko.carstens@de.ibm.com>
+
+	Missing complete changelog for 2002-10-07 commit:
+	* Makefile.in: Added linux/s390, linux/s390x to ALL_SUBDIRS.
+	* acconfig.h: New define for s390x.
+	* config.sub: Added missing define for s390 and new one for s390x.
+	* configure.in: Added new define for s390x.
+	* file.c: Added missing #undef dirent64 and new defines for s390x.
+	* linux/s390: New directory.
+	* linux/s390/Makefile.in: New file.
+	* linux/s390/errnoent.h: New file.
+	* linux/s390/ioctlent.h: New file.
+	* linux/s390/signalent.h: New file.
+	* linux/s390/syscallent.h: New file.
+	* linux/s390x: New directoy.
+	* linux/s390x/Makefile.in: New file.
+	* linux/s390x/errnoent.h: New file.
+	* linux/s390x/ioctlent.h: New file.
+	* linux/s390x/signalent.h: New file.
+	* linux/s390x/syscallent.h: New file.
+	* linux/syscall.h: Added sys_mincore() prototype and added new
+	s390x defines.
+	* process.c: Added s390x defines.
+	(change_syscall): Changed handling for s390.
+	(setarg): Added missing s390/s390x code in setarg().
+	* signal.c: Added s390x define.
+	(sys_sigreturn): Bugfix in s390/s390x code (wrong number of
+	arguments to sprintsigmask()).
+	* stream.c (internal_stream_ioctl): Changed int cast to long cast,
+	since printstr() expects a long.
+	* syscall.c (decode_subcall): Changed several variables to be long
+	instead of int to match 64 bit requirements. Added s390x defines.
+	(syscall_enter): Changed upeek() call to match s390 and s390x
+	requirements.
+	* util.c: Added s390x defines.
+
+2002-10-07  Michal Ludvig  <mludvig@suse.cz>
+
+	Merged s390x port by Heiko Carstens <Heiko.Carstens@de.ibm.com>
+	and bugfixes to s390 by D.J. Barrow.
+
+2002-09-23  Michal Ludvig  <mludvig@suse.cz>
+
+	Merged x86-64 port by Andi Kleen <ak@suse.de>
+	and Michal Ludvig <mludvig@suse.cz>
+	* Makefile.in: New target 'headers'. Failure ignored.
+	* acconfig.h: New defines for x86-64.
+	* configure.in: Ditto.
+	* defs.h: Ditto.
+	* file.c: Ditto.
+	* signal.c: Ditto.
+	* process.c: Added support for x86-64.
+	* util.c: Ditto.
+	* syscall.c: Ditto + added automatic personality switching.
+	* linux/syscall.h: Ditto.
+	* linux/x86_64: New directory.
+	* linux/x86_64/Makefile.in: New file.
+	* linux/x86_64/gentab.pl: Ditto.
+	* linux/x86_64/i386-headers.diff: Ditto.
+	* linux/x86_64/makeheaders.sh: Ditto.
+	* linux/x86_64/syscallent.h: Ditto.
+	* mem.c (print_mmap): Always print arg[4] as int.
+
+2002-09-23  Michal Ludvig  <mludvig@suse.cz>
+
+	* configure.in: Fix regular expressions.
+	* linux/syscall.h: Added missing braces in prototype of
+	sys_getdents64().
+	* file.c: Use '#ifdef LINUX' instead of '#ifdef linux'.
+	(struct fileflags): Made extern to inhibit compiation warnings.
+	(sys_getdents64): Merged LINUX and SVR4 part.
+	* syscall.c (get_scno): Split multiline string into two distinct
+	strings.
+
+2002-05-24  John Hughes <john@calva.com>
+
+	* stream.h, net.h: Avoid possible infinite loop caused by
+	unsigned arithmetic in preceeding change.
+
+2002-05-23  John Hughes <john@calva.com>
+
+	* acconfig.h: Add HAVE_OPTHDR and HAVE_T_OPTHDR defines.
+
+	* aclocal.m4: Add tests for struct opthdr in sys/socket.h and
+	struct t_opthdr in sys/tiuser.h, define HAVE_OPTHDR and HAVE_T_OPTHDR
+	if found.
+
+	* configure.in: use tests for struct opthdr and struct t_opthdr.
+
+	* defs.h: add new function print_sock_optmgmt.
+
+	* io.c: add hack that lets ioctl decode functions set auxilliary
+	string return.
+
+	* stream.c: better decoding for timod ioctls.
+
+	* net.c: add function print_sock_optmgmt, used by timod ioctl
+	decoding functions in stream.c.
+
+2002-05-23  John Hughes <john@calva.com>
+
+	* acconfig.h: Make autoheader happy about Linux/SuperH
+
+2002-05-23  John Hughes <john@calva.com>
+
+	* strace.c: Get rid of warning if not using POLL_HACK
+
+2002-05-22  John Hughes <john@calva.com>
+
+	* net.c: Simplify {get,set}sockopt, decode SO_LINGER, cope with
+	options that are not just ints, cope with systems that don't
+	#define SOL_TCP and so on.
+
+2002-05-21  John Hughes <john@calva.com>
+
+	* strace.c: Fix warning if POLL_HACK is used.
+
+2002-05-17  John Hughes <john@calva.com>
+
+	* svr4/ioctlent.sh: Some defines on UW come with too many spaces.
+
+2002-05-17  John Hughes <john@calva.com>
+
+	* svr4/ioctlent.sh: Cope with #defines wrapped in #ifdefs.
+
+2002-05-17  John Hughes <john@calva.com>
+
+	* stream.c: tidy up output a little.
+
+2002-05-17  John Hughes <john@calva.com>
+
+	* process.c, svr4/dummy.h, svr4/syscall.h: decode arguments
+	to procpriv syscall.
+
+2002-05-01  Wichert Akkerman <wichert@deephackmode.org>
+
+	* configure.in, defs.h, process.c, sock.c, syscall.c, util.c: merge
+	  patch from Greg Banks <gbanks@pocketpenguins.com> for Linux/SuperH
+	  support
+
+2002-04-01  Wichert Akkerman <wichert@deephackmode.org>
+
+	* strace.c: close tcp->outf in droptcb()
+
+2002-04-01  Wichert Akkerman <wichert@deephackmode.org>
+
+	* net.c: decode packet options
+
+2002-03-31  Wichert Akkerman <wichert@deephackmode.org>
+
+	* linux/{alpha,hppa,ia64,mips,powerpc,sparc}/syscallent.h: regenerated
+
+2002-03-31  Wichert Akkerman <wichert@deephackmode.org>
+
+	* debian/*: added
+	* linux/syscallent.h: fix typo and add the reserved stream syscalls
+	* defs.h, file.c, io.c: fix signed/unsigned issues
+	* syscall.c: check for negative u_errors
+	* cvsbuild: renamed to autogen.sh
+
+2001-12-17  Wichert Akkerman <wakkerma@debian.org>
+
+	* net.c: add new TCP socket options
+
+2001-10-26  John Hughes <john@calva.com>
+
+	* svr4/ioctlent.sh: Cope with #define lines containing
+	comments that terminate on subsequent lines.  Used to
+	comment out subsequent ioctls!
+
+2001-10-25  Wichert Akkerman <wakkerma@debian.org>
+
+	* linux/ioctlent.h: regenerated using current scripts so
+	  term ioctls are included
+
+2001-10-19  John Hughes  <john@Calva.COM>
+
+	* strace.c(proc_open): On SVR4 only trace the syscalls,
+	signals and faults we care about.
+
+2001-10-18  John Hughes  <john@Calva.COM>
+
+	* acconfig.h: Add HAS_SIGINFO_T.
+	* aclocal.m4: add check for siginfo_t in signal.h.
+	* configure.in: use check for siginfo_t.
+	* defs.h: if HAVE_SIGINFO_T the declare printsiginfo.  On SVR4
+	  allow access to siginfo when signal recieved.
+	* process.c: Remove SVR4 only version of printsiginfo.
+	* signal.c: merge SVR4 and LINUX versions of printsiginfo.
+	* strace.c: on SVR4 print siginfo when signal recieved.
+
+2001-10-18  John Hughes  <john@Calva.COM>
+
+	* system.c(sys_ssisys): handle return values for ssisys
+
+2001-10-18  John Hughes  <john@Calva.COM>
+
+	* signal.c: handle sigwait
+	* svr4/dummy.c: Move sigwait to done
+	* svr4/syscall.h: handle sigwait
+
+2001-10-16  John Hughes  <john@Calva.COM>
+
+	* system.c(sys_ssisys): decode some args for ssisys.
+
+2001-10-16  John Hughes  <john@Calva.COM>
+
+	* mem.c: MS_SYNC is zero, so must be first in xlat list.
+
+	* svr4/dummy.h: memcntl is much like mctl.
+
+2001-10-16  John Hughes  <john@Calva.COM>
+
+	* util.c (umovestr): UnixWare (svr4?) returns 0 when trying
+	to read unmapped page.  Make it possible to strace ksh.
+
+2001-10-03  David Mosberger  <davidm@hpl.hp.com>
+
+	* process.c (internal_clone): Avoid race condition by clearing
+	breakpoint after attaching to child.
+
+2001-10-02  David Mosberger  <davidm@hpl.hp.com>
+
+	* linux/ia64/syscallent.h: Define ia32 syscall numbers (originally
+	by Don Dugger, with my refinements).
+
+	* linux/ia64/ioctlent.h: Regenerate and manually merge conflicting
+	ioctls (TCGETS & SNDCTL_TMR_TIMEBASE, etc.).
+
+	* linux/ia64/Makefile.in (ioctldefs.h ioctls.h): Update for
+	new ioctlent.h generation scheme.
+
+	* linux/syscall.h (sys_clone2): Declare.
+	[IA64] Define ia32 socket, ipc, and extra syscall numbers.
+
+	* linux/ioctlent.sh (regexp): Also handle <asm/ioctls.h> so we
+	don't miss the tty ioctls (unfortunately, some of the sound timer
+	ioctls are in conflict with them!).
+
+	* util.c (setbpt) [IA64]: Add ia32 support (by Don Dugger).
+	(clrbpt) [IA64]: Ditto.
+
+	* syscall.c (internal_syscall): Handle SYS_clone2, SYS32_wait4,
+	and SYS32_exit.
+	(get_scno): Get ia32 syscall number from r1 (orig eax) instead of
+	r8 (eax).  Handle TCB_WAITEXECVE.
+	(syscall_fixup): Handle ia64.
+	(syscall_enter): Fix argument fetching for ia64.
+
+	* strace.c [IA64 && LINUX]: Include <asm/ptrace_offsets.h>.
+	(trace) [PT_GETSIGINFO]: Print signal address and pc if possible.
+
+	* process.c (tcp): New function.
+	(change_syscall): Add support for ia64 linux.
+	(sys_execve): Turn on TCB_WAITEXECVE for ia64 linux.
+
+	* desc.c (getlk): Cast l_len to "long long" to avoid warnings when
+	type is narrower.
+	* resource.c (sprintrlim64): Ditto.
+
+	* defs.h (TCB_WAITEXECVE) [IA64]: Define.
+	[IA64]: Declare "ia32" variable.
+
+	* bjm.c: Do not include <linux/module.h>.  It's not safe to include
+	kernel headers.  Declare the necessary constants and structures
+	directly instead.
+
+2001-10-01  David Mosberger  <davidm@hpl.hp.com>
+
+	* signal.c (parse_sigset_t): New function.
+	(sigishandled): Fix off-by-one bug by using parse_sigset_t() and
+	avoiding relying on internal layout of sigset_t datastructure.
+
+2001-04-26  David Mosberger  <davidm@hpl.hp.com>
+
+	* linux/ia64/syscallent.h: Add getunwind().
+
+2001-04-11  David Mosberger  <davidm@hpl.hp.com>
+
+	* syscall.c (syscall_enter): Use PT_RBS_END instead of deprecated
+	PT_AR_BSP.  Pick up arguments starting with out0, which is not
+	always the same as r32 (e.g., consider inlined syscalls).
+
+2001-09-28   John Hughes <john@Calva.COM>
+
+  * process.c: FreeBSD-CURRENT no longer has PT_READ_U, and anyway we
+    were showing it as PT_WRITE_U!  Fix from Maxime Henrion.
+
+2001-09-18   John Hughes <john@Calva.COM>
+
+  * net.c: fix display of sockaddr structures, sometimes too many "}",
+    sometimes too few.  Fix suggested by Richard Kettlewell.
+
+2001-08-19   Wichert Akkerman <wakkerma@debian.org>
+
+  * signal.c: do not include asm/sigcontext.h on IA64 since it gets
+    the struct from bits/sigcontext.h already which signal.h includes.
+
+2001-08-03   Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/ioctlent.sh: change regexps so we catch sound ioctls as well in
+    Linux
+  * linux/Makefile.in: fix a few things so the ioctl list is generated
+    properly
+  * ioctl.c: remember to shift ioctl masks as well
+
+2001-08-03   Wichert Akkerman <wakkerma@debian.org>
+
+  * Linux/**/syscallent.h: synchronize section for fcntl and use sys_fcntl
+    for sys_fcntl as well
+
+2001-08-03   Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/hppa/syscallent.h: updated from Matthew Wilcox
+
+2001-08-03   Wichert Akkerman <wakkerma@debian.org>
+
+  * process.c: seems Linux/IA64 changed register names on us, switch to
+    using new names.
+
+2001-08-03   Wichert Akkerman <wakkerma@debian.org>
+
+  * strace.c: set CLOEXEC  flag for outputfile
+
+2001-08-03   Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/sparc/syscall.h, linux/sparc/syscallent.h: add some LFS calls
+
+2001-07-23  Wichert Akkerman <wakkerma@debian.org>
+
+  * configure.in: Support cross-compiling between architectures
+
+2001-07-13  Wichert Akkerman <wakkerma@debian.org>
+
+  * configure.in: add S390 to architecture list
+
+2001-07-10  John Hughes <john@Calva.COM>
+
+  * TODO, defs.h, io.h, net.c, strace.c, syscall.c, util.c: Merge fixes
+    from Richard Kettlewell <rkettlewell@zeus.com> which add I/O dumping
+    of args to readv/writev.  Also gets rid of redundant printiovec
+    routine from net.c (duplicate of tprint_iov in util.c).
+
+2001-07-02  Wichert Akkerman <wakkerma@debian.org>
+
+  * config.{guess,sub}: updated
+
+2001-05-15  John Hughes <john@Calva.COM>
+
+  * signal.c: pass a pointer to sigmask to printsigmask from printcontext,
+    it was just passing the sigmask (ucp->uc_sigmask).
+
+2001-05-15  John Hughes <john@Calva.COM>
+
+  * util.c: Don't run off the end of valid memory in umovestr when
+    USE_PROCFS.  Important for FREEBSD systems (which seem to have an
+    unmapped page just after the args/env area).
+
+2001-04-18  John Hughes <john@Calva.COM>
+
+  * configure.in: test for sys/nscsys.h, the non-stop clusters includes.
+  * process.c: handle rfork{1,all} and rexecve calls on non-stop clusters.
+  * syscall.c: treat rfork{1,all} and fork{1,all} as fork like calls.
+    Treat rexecve as an exec.
+  * system.c: decode arguments to ssisys call on nsc systems.
+  * svr4/dummy.h, svr4/syscall.h: now we handle rfork{1,all}, ssisys and
+    rexecve calls.
+
+2001-04-12  Wichert Akkerman <wakkerma@debian.org>
+
+  * process.c: fix cast for powerpc code
+  * linux/powerpc/syscallent.h: update syscall list
+  * README: fix address for the strace mailinglist
+  * signal.c: switch to using /proc/<pid>/status on Linux so we can get
+    the realtime signals as well
+
+2001-04-10  Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge patches from Maciej W. Rozycki:
+    + util.c: add code to print PC for MIPS
+    + linux/mips/syscallent.h: updated
+    + system.c: formating fixes for sys_sysmips
+    + configure.in: test for yet more headers
+    + stream.c: use configure-headertests instead of relying on OS hints
+
+2001-04-07  Wichert Akkerman <wakkerma@debian.org>
+
+  * NEWS: start 4.3.1 items
+  * version.c: updated to say 4.3.1 (was still 4.2, oops!)
+
+2001-04-07  Wichert Akkerman <wakkerma@debian.org>
+
+  * configure.in: test for asm/sysmips.h and linux/utsname.h
+  * linux/syscall.h: fix a typo for sys_sysmips
+  * system.c: include asm/sysmips.h and linux/utsname.h if they exist,
+    fix typo
+
+2001-03-31  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/mips/ioctlent.h: updated using new Linux ioctl setup
+
+2001-03-31  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/ia64/ioctlent.h: regenerated
+
+2001-03-31  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/{alpha,ia64,powerpc}/ioctlent.sh: removed, all archs use the
+    general Linux ioctlent.sh
+
+2001-03-31  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/ioctlent.sh: add dir variable for location of kernel headers
+
+2001-03-29  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/ia64/ioctlent.h: updated using new Linux ioctl setup
+
+2001-03-29  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/powerpc/ioctlent.h: updated using new Linux ioctl setup
+
+2001-03-29  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/hppa/ioctlent.h: updated using new Linux ioctl setup
+
+2001-03-29  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/alpha/ioctlent.h: updated using new Linux ioctl setup
+
+2001-03-28  Wichert Akkerman <wakkerma@debian.org>
+
+  * configure.in: use sparc* so we can compile on sparc64 as well
+  * process.c, syscall.c: work around double define of fpq, fq and fpu
+    structs on Linux/sparc, and use regs instead of pt_regs
+  * don't use asm/sigcontext.h on Linux/sparc
+
+2001-03-28  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/sparc/ioctlent.h: updated using new Linux ioctl setup
+
+2001-03-28  Wichert Akkerman <wakkerma@debian.org>
+
+  * strace.c: use __WALL as wait4 flag if it exists so we can properly
+    trace threaded programs
+
+2001-03-27  John Hughes <john@Calva.COM>
+
+  * aclocal.m4: add check for endianness of long long.
+  * acconfig.h: add #define for LITTLE_ENDIAN_LONG_LONG.
+  * configure.in: check for endianness of long long.
+  * defs.h: change LONG_LONG macro to work with either endianness of
+    long long.
+
+2001-03-27  John Hughes <john@Calva.COM>
+
+  * net.c: Make compilable by SCO UDK compiler (doesn't like empty
+    initialisation list for array).
+
+2001-03-27  John Hughes <john@Calva.COM>
+
+  * svr4/syscallent.h: ntp_adjtime entry was duplicated on Solaris
+    systems - bad merge of Harald Boehme's patch by me.
+
+2001-03-27  Wichert Akkerman <wakkerma@debian.org>
+
+  * lots of files: add Linux/hppa support
+
+2001-03-19  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/mips/syscallent.h: we can't have -1 nargs, change to 0
+  * linux/syscallent.h: not that syscalls 220 and 221 are used now
+  * config.guess: updated
+
+2001-03-17  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/ioclsort.c: new file
+  * linux/ioctlent.sh: complete rewrite to use a more sane approach to get
+    the ioctl list that doesn't involve attempting to #include all kernel
+    headers
+  * linux/.cvsignore: added ioctdefs.h and ioctls.h which are generated
+    by the new ioctlent.sh
+  * ioctl.c: only look at the number and type bits for linux, since
+    ioctlent.sh no longer supplies the others
+
+2001-03-08  John Hughes <john@Calva.COM>
+
+  * freebsd/syscalls.pl: On FreeBSD we must cope with COMPATibility syscalls,
+    pretend they have names ending with "?" so that -e trace=stat (for
+    example) will work.
+  * freebsd/i386/syscallent.h: add ? to compatability syscalls.
+  * freebsd/i386/syscall.h: consistency.
+
+2001-03-08  John Hughes <john@Calva.COM>
+
+  * acconfig.h: add new ST_xxx defines.
+  * aclocal.m4: macros to check for more fields in struct stat.
+  * configure.in: use new macros to check for fields in struct stat.
+  * file.c: use new defines to replace #ifdef FREEBSD by #if HAVE_ST_xxx.
+
+2001-03-08  John Hughes <john@Calva.COM>
+
+  * defs.h: rename wimpy get64 as powerful new LONG_LONG
+  * file.c: use LONG_LONG
+  * io.c: use LONG_LONG
+  * mem.c use LONG_LONG
+
+2001-03-08  John Hughes <john@Calva.COM>
+
+  * acconfig.h: new #defines HAVE_LONG_LONG_OFF_T and HAVE_LONG_LONG_RLIM_T.
+  * aclocal.m4: routines to check for long long off_t and rlim_t.
+  * configure.in: check for long long off_t and rlim_t.
+  * desc.c: if HAVE_LONG_LONG_OFF_T treat flock as flock64
+  * file.c: if HAVE_LONG_LONG_OFF_T treat stat,lstat,fstat and lseek as 64
+    bit versions.
+  * io.c: if HAVE_LONG_LONG_OFF_T use 64 bit versions of pread and pwrite.
+  * mem.c: if HAVE_LONG_LONG_OFF_T use 64 bit version of mmap
+  * resource.c: if HAVE_LONG_LONG_OFF_T use 64 bit versions of getrlimit
+    and setrlimit.
+  * freebsd/syscalls.print: don't explicitly use 64 bit versions of calls,
+    now done automaticaly for us.
+  * freebsd/i386/syscall.h: ditto.
+  * freebsd/i386/syscallent.h ditto.
+
+2001-03-07  John Hughes <john@Calva.COM>
+
+  * desc.c: On FreeBSD flock structure uses 64 bit offsets.
+  * file.c: On FreeBSD use stat64 and pals instead of stat.
+  * freebsd/syscalls.print: use stat64, lstat64 and fstat64.
+  * freebsd/i386/syscall.h: ditto.
+  * freebsd/i386/syscallent.h: ditto.
+
+2001-03-07  John Hughes <john@Calva.COM>
+
+  * file.c: merge missing part of Harald Böhme's solaris patches,
+    was only declaring sys_{stat64,lstat64,fstat64} on linux!
+
+2001-03-07  John Hughes <john@Calva.COM>
+
+  * svr4/dummy.h: fix multiple define warning on non LFS64 systems.
+  * svr4/syscallent.h: pread/pwrite are TF calls.
+
+2001-03-07  John Hughes <john@Calva.COM>
+
+  * defs.h: add ALIGN64 macro to cope with FreeBSD's strange insistence
+    on alignment for off_t (64 bit) arguments.  Also simplify get64 so
+    we don't need to know endianness of long long.
+  * file.c: FreeBSD now uses 64 bit versions of lseek, truncate,
+    ftruncate, allows reduction in numvber of horrid #if's
+  * io.c: FreeBSD now uses 64 bit versions of pread, pwrite.
+  * mem.c: FreeBSD now uses 64 bit version of mmap.
+  * freebsd/syscalls.print: use 64 bit versions of various syscalls.
+  * freebsd/i386/syscall.h: use 64 bit versions of various syscalls.
+  * freebsd/i386/syscallent.h: use 64 bit versions of various syscalls.
+
+2001-03-06  John Hughes <john@Calva.COM>
+
+  * file.c: Implement truncate64 and ftruncate64
+  * svr4/dummy.h: add dummies for truncate64 and ftruncate64 for non
+    LFS64 systems.
+  * svr4/syscall.h: add declarations for truncate64 and ftruncate64.
+
+2001-03-06  John Hughes <john@Calva.COM>
+
+  * freebsd/syscalls.pl: fix for FreeBSD 4.1 (new optional field in
+    syscall master file).
+
+2001-03-06  John Hughes <john@Calva.COM>
+
+  * syscall.c: fix for FreeBSD 4.1 (SYS_semconfig has disappeared).  Also
+    zap incorrect syscall subarg range check.
+
+2001-03-06  John Hughes <john@Calva.COM>
+
+  * configure.in, defs.h, desc.c, file.c, io.c, mem.c, net.c, resource.c,
+    signal.c, syscall.c, svr4/dummy.h, svr4/syscall.h, svr4/syscallent.h:
+    merge Harald Böhme's solaris patches (_LFS64_LARGEFILE and kernel aio
+    mostly).
+
+2001-03-06  John Hughes <john@Calva.COM>
+
+  * dummy.h: add unimplemented UW sycalls
+  * syscall.h: we can do settimeofday for UW, whopee!
+  * syscallent.h: fix unimplemented UW syscalls
+
+2001-03-06  John Hughes <john@Calva.COM>
+
+  * aclocal.m4: look for pr_syscall in pr_lwp if we HAVE_MP_PROCFS
+  * defs.h: add PR_SYSCALL to allow use of pr_lwp.pr_syscall if it exists.
+  * syscall.c: use PR_SYSCALL instead of pr_syscall, fix up UnixWare code
+    so it doesn't try to use pr_sysarg.
+
+2001-03-06  John Hughes <john@Calva.COM>
+
+  * aclocal.m4: on systems other than linux look for stat64 in sys/stat.h
+  * file.c: handle xstat version _STAT64_VER, aka stat64.
+
+2001-03-06  John Hughes <john@Calva.COM>
+
+  * net.c: make sure SOL_ options are defined before using.
+  * signal.c: declare sigset variable, only used on linux, inside #ifdef.
+
+2001-02-21  Wichert Akkerman <wakkerma@debian.org>
+
+  * net.c: fix format for printing Unix domain sockets
+
+2001-02-19  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/mips/syscallent.h: use new sys_sysmips
+  * system.c: add sys_sysmips decoding
+
+2001-02-16  Wichert Akkerman <wakkerma@debian.org>
+
+  * CREDITS: add Arkadiusz Miskiewicz <misiek@pld.org.pl> who
+    submitted the IP6 scope ID updates
+  * acconfig.h: add HAVE_SIN6_SCOPE_ID and HAVE_SIN6_SCOPE_ID_LINUX
+  * aclocal.m4: add AC_SIN6_SCOPE_ID to check if sin6_scope_id is
+    available
+  * configure.in: check for if_indextoname function and sin6_scope_id
+  * net.c: teach printsock about IP6 scope ids
+
+2001-02-16  Wichert Akkerman <wakkerma@debian.org>
+
+  * configure.in: test for netinet/tcp.h and netinet/udp.h existance
+  * net.c: include netinet/tcp.h and netinet/udp.h if they exist
+  * Makefile.in: use @mandir@ and @bindir@
+
+2000-11-26  Wichert Akkerman <wakkerma@debian.org>
+
+  *  net.c: fix formating error in sys_setsockopt
+  *  net.c: add list of socketlayers and use that for [gs]etsockopt
+
+2000-10-12  Wichert Akkerman <wakkerma@debian.org>
+
+  * time.c: use sys/timex.h so things compile with 2.2 kernels
+  * stream.c: test if MSG_* constants are #defined
+
+2000-09-03  Wichert Akkerman <wakkerma@debian.org>
+
+  * process.c: perform bpt trick for clone as well so we can get the
+    pid of the child before it starts doing something
+  * file.c: rename dirent64 struct to kernel_dirent64 so things compile
+    again with newer libcs
+  * test/clone.c: improve our testcase a bit
+  * Merge another patch from Gäel Roualland with FreeBSD updates
+
+2000-09-01  Wichert Akkerman <wakkerma@debian.org>
+
+  * lots of files: merge patch from Gaël Roualland to add
+    support for FreeBSD.
+
+2000-08-09  Wichert Akkerman <wakkerma@debian.org>
+
+  * file.c: update to reflect that st_ino suddenly became a long long
+    in the in Linux 2.4.0-test6
+
+2000-08-09  Wichert Akkerman <wakkerma@debian.org>
+
+  * test/clone.c: minor fixup
+  * Another bunch of patches from John Hughes merged:
+  * signal.c:
+    + SVR4 printcontext(): sigset_t != sigset_t*
+    + getcontext returns a value, so print on exit of syscall
+    + add UC_FP to ucontext_flags for OS writers that can't spell
+    + sys_signal(): special case SIG_{ERR,DFL,IGN}
+    + decode_subcall(): only do subcall range checking when needed
+  * bunch of UnixWare updates
+  * aclocal.m4, acconfig.h, configure.in: add test for long long type
+
+2000-07-04  Wichert Akkerman <wakkerma@debian.org>
+
+  * net.c: add SOL_PACKET and SOL_RAW socket options, update
+    SOL_IP and SOL_TCP
+
+2000-06-23  Wichert Akkerman <wakkerma@debian.org>
+
+  * strace.c: close outf before we exec a child process
+
+2000-06-09  Ulrich Drepper  <drepper@redhat.com>
+
+  * configure.in: Don't link against libnsl on Linux, it's unnecessary.
+  * defs.h (struct tcb): Make auxstr member const.
+  * file.c (fsmagic): And many more magic numbers.
+  * util.c: Don't include <linux/ptrace.h> for glibc 2.1 and up.
+
+2000-04-26  Wichert Akkerman <wakkerma@debian.org>
+
+  * defs.h: balance #if/#endif again
+  * system.c: fix return statements in sys_capget()
+  * Merge updates from Topi Miettinen <Topi.Miettinen@nic.fi>:
+    + file.c: add F_[SG]ETSIG to fcntl flags
+    + strace.c: don't setre[gu]id if not needed
+    + system.c: handle sys_reboot for Linux
+    + term.c: add baudrate constants up to B4000000
+    + linux/**/syscallent.h: note that munlockall has no arguments
+
+2000-04-25  David Mosberger  <davidm@hpl.hp.com>
+
+  * CREDITS: fix email address
+  * process.c: handle PR_[GS]ET_UNALIGN and PR_[GS]ET_KEEPCAPS
+  * signal.c: honour offset of sigconfig in sigframe structure for
+    Linux/ia64
+  * linux/ia64/syscallent.h: Add perfmonctl, pivotroot, mincore, and
+    madvise syscalls.
+  * syscall.c (syscall_enter): With Kevin's latest ptrace patches,
+    AR_BSP points to the _end_ of the active register frame, so we need
+    to adjust bsp by moving it back by the size of the active frame
+    before using it.
+
+2000-04-24  Wichert Akkerman <wakkerma@debian.org>
+
+  * process.c: add sparc support to change_syscall
+
+2000-04-22  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/mips/syscallent.h: fix some typos
+
+2000-04-14  Wichert Akkerman <wakkerma@debian.org>
+
+  * linux/mips/syscallent.h: added names for SVR4, SYSV, BSD4.3 and POSIX
+    syscalls
+
+2000-04-13  Wichert Akkerman <wakkerma@debian.org>
+
+  * defs.h: Linux/MIPS uses syscalls up to >4k, so set MAX_QUALS to
+    4999
+
+2000-04-09  Wichert Akkerman <wakkerma@debian.org>
+
+  * README-linux: updated to note that strace might not compile
+    with development kernels
+  * bjm.c: sys_query_module: check if malloc succeeds
+  * system.c: sys_cap[gs]et(): check if malloc succeeds, only malloc once
+  * linux/syscallent.h: updated for 2.3.99pre3
+  * linux/alpha/syscallent.h: updated for 2.3.99pre3, add all osf syscalls
+    even though Linux doesn't implement them
+  * syscall.c: add global variables for MIPS registers as well
+  * syscall.c: move global variables to before get_scno since that uses them
+  * util.c: oops, misspelled defined
+  * process.c: fix ptrace calls in change_syscall
+  * mem.c: decode sys_madvise
+  * Merge patch from Topi Miettinen <Topi.Miettinen@nic.fi>
+    + add support for quotactl, fdatasync, mlock, mlockall, munlockall & acct
+    + small fix for RLIMIT_* and RUSAGE_BOTH
+    + enhace support for capget and capset
+
+2000-02-19 Wichert Akkerman <wakkerma@debian.org>
+
+  * test/vfork.c: new file to test vfork traces
+  * test/.cvsignore: new file
+  * defs.h: Up maximum number of traced processed to 64
+  * strace.c: Disable some debugging code from davidm
+  * implement setarg for more architectures
+  * implement change_syscall
+
+1999-12-27  Morten Welinder  <terra@diku.dk>
+
+	* syscall.c (lookup_signal, lookup_desc): isdigit requires an
+	_unsigned_ char parameter.
+
+2000-02-14 Wichert Akkerman <wakkerma@debian.org>
+
+  * S390 updates
+
+2000-02-03 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge Linux/ia64 patches
+
+2000-01-02 Pavel Machek	     <pavel@ucw.cz>
+
+  * probe if sys/poll.h exists in configure + minor cleanups
+
+  * syscall.c: split trace_syscall into few pieces to make code readable
+
+2000-01-21 Wichert Akkerman  <wakkerma@debian.org>
+
+  * Release version 4.2 to get the current updates out and so
+    we can concentrate in finishing the clone support.
+
+2000-01-11 Wichert Akkerman  <wakkerma@debian.org>
+
+  * Add 1900 to tm_year in sprinttime
+
+1999-12-24  Wichert Akkerman  <wakkerma@debian.org>
+
+ * file.c: protect printstat64 with STAT64 instead of linux so we can
+   compile on Linux architectures that don't have it
+ * util.c: fix LOOP for ARM
+
+Fri Dec 24 18:05:00 EST 1999
+
+1999-12-23  Ulrich Drepper  <drepper@cygnus.com>
+
+ * file.c: Use ugly libc_stat trick also for stat64.
+   Implement sys_stat64, sys_fstat64, sys_lstat64, and printstat64.
+ * process.c (internal_clone): Fix a few typos and add definitions to make
+   it at least compile.
+ * linux/syscall.h: Declare sys_stat64, sys_lstat64, and sys_fstat64.
+ * linux/syscallent.h: Define table entries for sys_stat64, sys_lstat64,
+   and sys_fstat64.
+ * aclocal.m4: Define AC_STAT64.
+ * acconfig.h: Define HAVE_STAT64.
+ * configure.in: Add AC_STAT64.
+
+Thu Dec 23 15:01:37 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge patch from ftp://oss.software.ibm.com/linux390/ to add
+    support for Linux on the IBM S/390 architecture
+  * process.c: add internal_clone(), currently only shows the options
+  * syscall.c: use internal_clone to handle SYS_clone
+
+Mon Dec 20 00:27:50 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Rewrite mmap-handling to support mmap2 on Linux
+
+Tue Dec 14 11:35:16 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Note that Linux can handle sys_semop() as well
+
+Tue Nov 30 11:05:26 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Include linux/in6.h for glibc2.0 and older
+
+Mon Nov 29 16:33:04 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge patches from John Hughes to make configure support UnixWare
+
+Sat Nov 27 21:38:17 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Enhance sys_query_module
+
+Fri Nov 26 10:51:55 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Patches from John Hughes:
+    + cosmectic fix in sys_getpmsg
+    + allow net.c to compile on systems without AF_INET6
+    + Only use long_to_sigset on Linux systems
+    + UnixWare treats sigmask_t and sigmask_t* as the same thing
+    + Add pollhack
+    + Parse mount arguments for UnixWare
+    + ACL fixes for UnixWare
+
+Fri Nov 26 01:28:09 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Release 4.1 to get all the changes made out there
+
+Thu Nov 18 18:04:04 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge stracefork from Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
+    + Socket calls parsed better
+	+ bunch of alpha OSF syscalls added
+	+ Fix alpha 32/64 bit issues
+
+Mon Nov  1 20:52:08 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Move Linux kernelmodule-functions from system.c to bjm.c and
+    remove duplicate for sys_create_module
+  * Linux MIPS updates:
+    + Play with #ifdef's in net.c to get IPv6 right
+    + Use printargs for vm86-syscall
+
+Sun Oct 31 22:03:00 CET 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge Linux mips patch from Florian Lohoff <flo@rfc822.org>
+
+Mon Oct 11 00:36:25 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge patch from Keith Owens <kaos@ocs.com.au> to sys_query_module
+    and sys_delete_module correctly
+
+Wed Oct  6 02:00:33 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Update cvsbuild to give a better error if autoconf isn't installed
+  * Add test for linux/ptrace.h to configure
+  * Since we define GNU_SOURCE in the Makefile we don't need to define
+    USE_GNU in file.c anymore
+
+Fri Sep 10 04:35:16 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * #define USE_GNU before including file.c so we get some extra O_* flags
+
+Tue Aug 31 16:27:21 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Add missing } in IPv6 output
+
+Tue Aug 31 01:23:08 CEST 1999  Wichert Akkerman <wakkerma@debian.org>
+
+  * Update copyright for strace-graph to BSD to be consistent with
+    the rest of strace
+
+Mon Aug 30 00:53:57 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge patch from Daniel Jacobowitz: KERN_JAVA_* and KERN_SECURELVL aren't
+    defined for all kernelversions
+  * Add strace-graph, written by Richard Braakman <dark@xs4all.nl>
+
+Thu Aug 19 13:10:15 CEST 1999 Jakub Jelinek <jj@ultra.linux.cz>
+
+  * linux/sparc/syscall.h: Declare create_module/init_module.
+  * configure.in: Allow compilation in a different directory
+    than the source one.
+  * signal.c: Use asm/reg.h and struct regs instead of pt_regs
+    so that we don't depend on asm/ptrace.h which clashes with
+    glibc sys/ptrace.h.
+  * util.c: Likewise.
+  * syscall.c: Likewise.
+
+Wed Aug  4 18:01:50 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Syscall 94 on Linux alpha is sys_poll
+
+Sun Jul 25 14:38:33 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge in UnixWare patches from John Hughes <john@Calva.COM>
+
+Thu Jul 15 23:00:32 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge patch from Maciej W. Rozycki <macro@ds2.pg.gda.pl>:
+    + Correctly implement fix sys_createmodule (Linux)
+    + Add limited handlig of sys_initmodule (Linux)
+
+Tue Jul 13 17:07:50 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Add configure-test for sys/reg.h and use that
+  * Use sys/reg.h instead of asm/ptrace.h
+
+Sat Jul 10 01:46:10 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Remove hack in signal.c for arm architecture
+  * Add hack so we compile correctly on powerpc
+
+Fri Jul  9 02:28:16 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Add a corrected patch from Daniel Jacobowitz
+
+Thu Jul  8 16:00:04 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge patch from Daniel Jacobowitz to allow us to use the kernel types
+    for the stat structure
+
+Thu Jun 24 15:54:18 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Fix test for sys/reg include
+
+Tue Jun 22 17:26:33 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Fixed some Linux/powerpc sillyness, thanks to Daniel Jacobowitz
+  * Fixed some SunOS compile problems earlier that I forgot to include
+    here
+
+Mon Jun 14 12:44:25 CEST 1999
+
+  * Avoid leakint fd into child when forking, patch from
+    John Hughes <john@Calva.COM>
+
+Fri Jun 11 14:54:47 CEST 1999
+
+  * Applied IRIX64 patch from Thomas E. Dickey <dickey@clark.net>
+  * Applied Solaris and manpage updates from Guy Harris <guy@netapp.com>
+
+Wed Jun  9 14:48:49 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Brought syscall list for alpha up to date
+
+Wed Jun  2 18:30:12 CEST 1999 Jakub Jelinek <jj@ultra.linux.cz>
+
+  * system.c: sys_umount2 syscall support.
+  * linux/sparc/errnoent.h: Update sparc-linux errnos.
+  * linux/sparc/syscall.h: Update used sparc-linux syscalls.
+  * linux/sparc/syscallent.h: Match 2.2.9 system calls.
+  * file.c: sparc-linux asm/stat.h uses dev_t etc. types,
+    so it needs strace's own copy of the stat structure.
+  * util.c: Make it compile on sparc-linux.
+  * strace.c: Fix strace -f and -ff operation on sparc-linux.
+  * signal.c: rt_sigaction has different arguments on sparc*-linux
+    and alpha-linux.
+  * syscall.c: Recognize sparc64-linux binaries.
+
+Fri May 28 21:09:00 PST Ulrich Drepper <drepper@cygnus.com>
+
+  * configure.in: Fix typo (CFLAG -> CFLAGS).
+
+  * syscall.c: Don't include linux/ptrace.h explicitly for glibc.
+
+Thu May 27 13:59:27 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Add some sysctl support, patch from Ulrich Drepper
+
+Wed May 26 01:04:34 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Use kernel dirent structure for Linux
+
+Sun May  9 02:18:30 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge in patches from Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+    + some layout and other minor fixes
+    + add some m68k-specific things to linux/syscallent.h. Note that m68k
+      is similar enough to i386 to not need it's own subdirectory
+    + add support for sendfile and mremap syscalls for Linux
+  * Merge in patches from Sascha Schumann <sascha@schumann.2ns.de>
+    + ioctls.h vs sys/ioctl.h on Alpha platform
+    + pointer was casted to an int in stream.c
+    + strsignal() needs -D_GNU_SOURCE in CFLAGS
+    + several other casts changed
+    + correct ARM/POWERPC architecture defines in acconfig.h
+  * Merge in patches from Morten Welinder <terra@diku.dk>
+    + add some autoconf-tests for includefiles
+    + handle solaris version of sigcontext struct (actually I hacked this
+      up again, but the idea is his :)
+
+Sun Apr 18 22:32:42 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Update syscalls for linux alpha, patch from Bart Warmerdam
+    <bartw@debian.org>
+  * Update sparc code so it actually compiles
+
+Fri Apr 16 02:18:05 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Add support for old_*stat functions for Linux. Please note you need
+    to use reasonably recent kernel headers to compile strace now.
+  * Change references to LINUX into linux in file.c
+  * Fix include for LDT in mem.c
+
+Thu Apr 15 22:28:15 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Change in strace maintainership, jrs passed the torch to me.
+  * Use autoconf 2.13
+  * Incorporate all changes already made in the Debian strace package:
+    + compiles with more Linux kernels
+    + added support for more Linux architectures
+    + add support for a lot of extra syscalls
+    + fix some problems with hanging children
+    + check stray syscall after execv
+    + decode capget and capset arguments
+    + add more constants to net.c
+    + detect ROSE networking
+    + add more protocol families to domains
+    + add IPIP protocol
+    + added MSG_PROXY and MSG_CTRUNC to msg_flags
+    + added SO_BSDCOMPAT and SO_REUSEPORT to sockoptions
+    + added IP, IPX and TCP-options
+    + added IP, IPX and TCP support to get-/setsockopt()
+    + added IPX support
+    + updated handling of signals
+
+Sun Oct 27 22:28:00 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* util.c (umovestr) [LINUX]: Handle Linux like SunOS4
+	instead of SVR4.  That is, read a few bytes at a time
+	to avoid overrunning the end of the stack.
+
+Fri May 31 01:48:49 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.1 is released.
+
+Thu May 23 01:04:43 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* aclocal.m4 (AC_DECL_SYS_ERRLIST): Try looking in stdio.h
+	as well since that's where glibc declares it.  Go figure.
+	* signal.c (sys_sigreturn) [ALPHA]: Use sigcontext
+	instead of sigcontext_struct since glibc v5+ apparently
+	plays games with the native OS namespace.
+	From David Mosberger-Tang <davidm@AZStarNet.com>.
+
+Mon May 20 23:17:14 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.14 is released.
+
+	* aclocal.m4 (AC_STRUCT_MSG_CONTROL): New macro.
+	* configure.in: Add call to AC_STRUCT_MSG_CONTROL.
+	* net.c (printmsghdr): Handle BSD 4.3 and 4.4 msghdr members
+	differently.
+	Reported by Henrik Storner <storner@osiris.ping.dk>.
+
+	* configure.in: (AC_CHECK_{HEADERS,FUNCS}): Add checks for
+	sys/filio.h and sys/stream.h and remove check for poll.
+	* desc.c (decode_select, sys_select, sys_oldselect) [LINUX]:
+	Handle old and new styles of argument passing for select on Linux.
+	* ioctl.c, stream.c: Conditionalize stream code on presence of
+	sys/stream.h instead of poll because glibc implements poll but
+	not the rest of the stream interface.
+	* signal.c [LINUX]: Standardize on the name sigcontext_struct.
+	(sys_sigprocmask) [ALPHA]: Handle OSF flavor which is more like
+	sigsetmask.
+	* term.c (term_ioctl): Use _VMIN, if present, for TC{G,S}ETA*.
+	* util.c (umoven, umovestr): Move data in long-sized chunks
+	at a time, instead of hard coding it to be 4.
+	From David Mosberger-Tang <davidm@AZStarNet.com>.
+
+Mon May 20 01:19:36 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.13 is released.
+
+	* configure.in (AC_CHECK_HEADERS): Add check for asm/sigcontext.h.
+	* signal.c [HAVE_ASM_SIGCONTEXT_H]: Conditionally include
+	asm/sigcontext.h to define sigcontext_struct and don't define it
+	locally if the header is present.
+
+	* syscall.c (nerrnos{0,2}): Correct size computation.
+
+	* Makefile.in: Remove dependencies and rules relating to files
+	normally found in the os directory.  Because of the new scheme we
+	don't know precisely where they come from.  Sigh.
+	* signalent.sh: Make it work for sunos4, linux, and svr4.
+	* {sunos4,linux{,/alpha},svr4}/Makefile.in: Make rules correspond
+	to traditional make syntax.  Add signalent.h to files which can
+	unconditionally be rebuilt.  Prevent signalent.h from being
+	unconditionally being rebuilt since it's customized.
+	* {sunos4,linux{,/alpha},svr4}/{ioctlent,errnoent,signalent}.h:
+	Use versions built by {ioctlent,errnoent,signaltent}.sh.
+	* sunos4/ioctlent.sh: Work around sprintf troubles with SunOS
+	4.1.4 and gcc 2.7.2.
+
+Sun May 19 17:14:09 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* configure.in, Makefile.in: Add OSARCH concept to finish
+	build support for the alpha.
+	* Makefile.in, linux/Makefile.in: Rewrite clean, distclean,
+	and maintainer-clean rules.
+	* defs.h, ioctlsort.c: Make ioctl code member unsigned.
+	* ioctl.c, ioctlsort.c (compare): Perform explicit checking
+	for less, greater, and equal since subtraction on two's
+	complement numbers isn't an order relation (it isn't transitive)!
+	* linux/Makefile.in: Add rules for the signalent.h file.
+	* linux/alpha/Makefile.in: New file.
+
+Sun May 19 01:12:28 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.12 is released.
+
+	* linux{,alpha}/ioctlent.sh: Tweak for recent kernels.
+	From Michael E Chastain <mec@duracef.shout.net>.
+
+	* defs.h (SUPPORTED_PERSONALITES, DEFAULT_PERSONALITY): New.
+	* syscall.c (set_personality): New.
+	* strace.c (main): Call set_personality.
+	* defs.h, syscall.c, ioctl.c, signal.c: Make sysent, errnoent,
+	ioctlent, and signalent indirect pointers and redirect them
+	based on personality.
+	* {sunos4,svr4,linux{,/alpha}}/signalent.h: New files.
+	Suggested by Tom Dyas <tdyas@eden.rutgers.edu>.
+
+	* util.c (upeek): Handle case where ptrace returns a long
+	and sizeof(long) != sizeof(int).
+	From Richard Henderson <richard@twiddle.tamu.edu>
+
+Fri May 17 21:03:36 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.11 is released.
+
+	* many files: Fix more printf warnings for other platforms.
+
+	* ipc.c (sys_msgrcv) [LINUX]: Conditionalize definition of ipc_wrapper.
+
+	* linux/dummy.h: Handle missing library support for {send,recv}msg.
+	Reported by Thomas Bogendoerfer <tsbogend@bigbug.franken.de>.
+
+	* linux/syscall.h (sys_utimes): Fix a typo in the declaration.
+	From Thomas Bogendoerfer <tsbogend@bigbug.franken.de>.
+
+Fri May 17 00:50:06 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.10 is released.
+
+	* Makfile.in: Add os/arch to includes so that a given arch
+	(like alpha) can override the native arch (like i386).
+	* configure.in: Check for sendmsg.
+
+	* net.c: Make sendmsg and recvmsg dependent on an autoconf
+	test.  Reported by Michael E Chastain <mec@duracef.shout.net>.
+
+	* acconfig.h, configure.in: Detect the alpha.
+	* ioctl.c: Handle the alpha.
+	* defs.h: Make some members long for the alpha.  Define
+	some register nicknames.  Add support for WAITEXECVE.
+	* file.c [ALPHA]: Support the alpha for statfs.  Add
+	osf_statfs and osf_fstatfs for the alpha.  Make damn sure
+	major and minor results are suitable for passing to printf.
+	* signal.c, syscall.c: Support the alpha.
+	* process.c: Add alpha user offsets.
+	* most files: Use %l? for printf arguments since
+	most are now longs for the alpha.
+	* linux/alpha/{errnoent.h,ioctlent.{h,sh},syscallent.h}:
+	New for the alpha.
+	From Thomas Bogendoerfer <tsbogend@bigbug.franken.de>.
+
+Wed May 15 00:29:37 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.9 is released.
+
+	* config.in, config.sub, install-sh: Upgrade to autoconf 2.10.
+
+	* linux/dummy.h, linux/syscallent.h, linux/syscall.h: Add recent
+	Linux kernel version system calls.
+
+Wed Mar 13 01:03:38 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* ipc.c [SUNOS4]: Add SunOS support for decoding IPC calls.
+	* syscall.c [SUNOS4]: Compile decode_subcall on SunOS and
+	decode IPC calls using it.
+	* sunos4/dummy.h: Alias sys_semop to printargs.
+	* sunos4/syscall.h: Add new pseudo syscalls for IPC.
+	* sunos4/syscallent.h: Include new subcalls for IPC.
+	From Matthias Pfaller <leo@dachau.marco.de>.
+
+Tue Feb 13 22:08:25 1996  J. Richard Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.8 is released.
+
+	* time.c [LINUX]: Explicitly include linux/version.h.
+
+	* strace.c (main): Don't let them even *try* to
+	get strace to attach to itself since some systems
+	don't handle this case very gracefully.
+	Reported by David S. Miller <davem@caip.rutgers.edu>.
+
+	* Makefile.in (distclean): Fix it for subdirectories.
+
+	* sunos4/syscallent.h, svr4/syscallent.h: Fill in the new
+	sys_flags member for each defined system call.
+
+Fri Dec  8 01:17:28 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* defs.h (TRACE_*): New flags to describe what class
+	of system call each system call is.
+	(sysent): Add sys_flags member.
+	* syscall.c (sysent): Define (and later undef) abbreviations
+	for the system call class flags.
+	(lookup_class): New function to translate strings to
+	system call class flags.
+	(qualify): Handle new system call class mechanism.
+	* linux/syscallent.h: Fill in the new sys_flags member
+	for each defined system call.
+
+	* defs.h (print_sock): Remove redundant and non-K&R C
+	compatible prototype.  From Juergen Weigert
+	<jnweiger@immd4.informatik.uni-erlangen.de>.
+
+Thu Dec  7 01:17:40 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* linux/ioctlent.sh: Tweak to improve ioctl accuracy.
+	From Michael E Chastain <mec@duracef.shout.net>.
+
+	* system.c (includes) [LINUX]: Add linux/nfs.h for recent
+	kernels.  From Michael E Chastain <mec@duracef.shout.net>.
+
+Wed Dec  6 21:52:28 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* file.c (sprintfstype): Enclose string result in double
+	quotes.
+
+	* time.c (sys_adjtimex) [LINUX]: Conditionalize
+	constantly evolving timex structure.
+	From Aaron Ucko <UCKO@VAX1.ROCKHURST.EDU>.
+
+	* defs.h, syscall.c, strace.c: Rename syscall to
+	trace_syscall and change prototype and all callers
+	because of broken Linux shared libraries.
+	From Aaron Ucko <UCKO@VAX1.ROCKHURST.EDU>.
+
+	* Makefile.in (clean): Check for a file with test -f not
+	test -d.  From Aaron Ucko <UCKO@VAX1.ROCKHURST.EDU>.
+
+Tue Sep 26 02:32:31 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.7 is released.
+
+	* util.c (string_quote): Fix thinko which caused core
+	dumps for strings with quotes in them.
+	Reported by Marty Leisner <leisner@sdsp.mc.xerox.com>.
+
+	* linux/Makefile.in (errnoent.h rule): Grab all errno.h
+	files from /usr/include, not just the linux one.
+	From Michael E Chastain <mec@duracef.shout.net>.
+
+	* linux/errnoent.sh: Total rewrite to handle more ioctls with
+	fewer false positives on more kernel flavors.
+	From Michael E Chastain <mec@duracef.shout.net>.
+
+Mon Sep  4 01:29:22 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.6 is released.
+
+	* linux/dummy.h, linux/syscall.h, linux/syscallent.h: Add
+	sys_msync.
+	* mem.c (mctl_funcs, mctl_lockas, sys_mctl): Conditionalize
+	on MC_SYNC instead of HAVE_MCTL.
+	(mctl_sync): Conditionalize on MS_ASYNC instead of HAVE_MCTL.
+	(sys_msync): New function.
+
+Sat Sep  2 12:06:04 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* linux/dummy.h, linux/syscall.h, linux/syscallent.h: Add
+	sys_flock and sys_getdents.
+	* desc.c (flockcmds, sys_flock): Conditionalize on LOCK_SH
+	not SUNOS4.
+	* file.c (sys_getdents): Define unconditionally and handle
+	LINUX case.
+	* strace.c (main): Disallow username option unless both real
+	and effective uids are root.
+
+Wed Aug 30 01:29:58 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* strace.c (main): Ensure that run_uid and run_gid are
+	always set to something meaningful.
+	(main, newoutf) [!SVR4]: Swap real and effective uids while
+	opening any output files.
+	(main) [!SVR4]: Treat effective uid of root as a request
+	to handle suid binaries correctly using the real uid of
+	the invoking user.
+
+Sat Aug 19 00:06:08 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* Makefile.in: Add `|| true' to clean rule because
+	although GNU make 3.74 uses `sh -c' to invoke commands
+	every other make in the world uses `sh -ec'.
+
+	* syscall.c (syscall) [SVR4, MIPS]: The fifth and subsequent
+	arguments appear to be stored on the stack, not in the
+	registers following A3 (empirical result).
+
+	* defs.h: Add prototype for printsock.
+	* svr4/dummy.h: Remove generic handling of sys_mount.
+	* system.c [SVR4, MIPS]: Include several system headers to cleanly
+	get access to SGI mount information.
+	(mount_flags, nfs_flags) [SVR4, MIPS]: New objects.
+	(sys_mount) [SVR4, MIPS]: New function.
+	(sys_mount) [SVR4, !MIPS]: New function.
+
+Tue Jul  4 00:30:34 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.5 is released.
+
+	* desc.c, resource.c, strace.c, syscall.c, time.c: Cast tv_sec and
+	tv_usec members to long when using printf.
+
+	* ipc.c: Omit define of __KERNEL__.
+	({MSG,SEM,SHM}_{STAT,INFO}): Explicitly define those things we
+	want which __KERNEL__ used to provide.
+	(sys_msgrcv): Change reference to ipc_kludge structure to
+	look-alike ipc_wrapper to avoid dependence on __KERNEL__.
+
+	mem.c (mmap_flags) [MAP_{GROWSDOWN,DENYWRITE,EXECUTABLE}]: Add
+	Linux specific options.
+
+	syscall.c: Use SYS_ERRLIST_DECLARED instead of guessing.
+	[E{RESTART{SYS,NO{INTR,HAND}},NOIOCTLCMD}]: Explicitly define
+	instead of depending of __KERNEL__.
+
+	term.c: Cast c_{i,o,c,l}flag to long when using printf.
+
+Tue Jun  6 00:27:48 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* aclocal.m4 (AC_DECL_SYS_ERRLIST, AC_DECL__SYS_SIGLIST): New.
+	* configure.in: Call AC_DECL_SYS_ERRLIST, AC_DECL_SYS_SIGLIST,
+	and AC_DECL__SYS_SIGLIST.
+	* acconfig.h (SYS_ERRLIST_DECLARED): New.
+	* strace.c (strerror): Use SYS_ERRLIST_DECLARED.
+	(strsignal): Use SYS_SIGLIST_DECLARED.
+
+	net.c (sys_socket): Omit inadvertent surplus comma when
+	protocol family isn't PF_INET.
+
+	util.c (dumpstr): Fix incorrect printing of one too many
+	characters when the length is not an even multiple of 16 bytes.
+	Reported by Juergen Weigert
+	<jnweiger@immd4.informatik.uni-erlangen.de>.
+
+Thu May  4 23:37:47 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* ioctl.c (compare): Change prototype to match POSIX qsort.
+	* signal.c (sigishandled) [SVR4]: Omit everything after return.
+	* strace.c (trace) [SVR4]: Break out of for loop instead of
+	returning when finished so final return statement is executed.
+	* syscall.c (internal_syscall): Add more SYS_wait* variations.
+	(syscall) [LINUX]: Correct typo which commented out the M68K
+	argument to ifdef.
+	* util.c (printstr): Cast unsigned char pointer argument
+	to char pointer in umovestr call.
+	(dumpstr): Likewise for umoven.
+
+Wed May  3 01:10:56 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.4 is released.
+
+	* signal.c (sys_sigblock): Move after the definition of
+	sys_sigsetmask that it calls to avoid an implicit declaration.
+	* stream.c (transport_user_options, transport_server_options):
+	Only needed if TI_BIND is defined.
+	* configure.in: Add -Wno-implicit to WARNFLAGS on SunOS 4.x.
+
+	* process.c (internal_fork) [SVR4]: Fix a typo that omitted
+	the tcp arguement from the call to exiting.  Add getrval2
+	check so no fork processing is done in the child.
+	(printwaitn): Initialize exited so that its value is defined
+	for all flows of execution.
+
+Tue May  2 22:39:42 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* linux/dummy.h: Add aliases for sysfs, personality, afs_syscall,
+	setfsuid, setfsgid, and _llseek syscalls.
+	* linux/syscall.h: Add prototypes for them.
+	* linux/syscallent.h: Add them to the syscall entries table.
+	* system.c (headers) [LINUX]: Include linux/unistd.h to get __NR_*
+	defines and conditionally include linux/personality.h if
+	__NR_personality is defined.
+	(personality_options) [LINUX]: New table.
+	(sys_personality) [LINUX]: New function.
+
+Tue May  2 00:20:39 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* strace.c (trace) [!SVR4]: Change forever loop to one predicated
+	on the number of traced processes so that we can have untraced
+	children (e.g. via popen).
+
+	* strace (main) [!SVR4]: Call fake_execve to get the actual
+	exec and its arguments into the trace.
+	(environ): Declare it.
+	* process.c (fake_execve): New function.
+	(headers): Include sys/syscall.h to get SYS_* defines.
+
+	* process.c (sys_execv, sys_execve): Surround argument annotations
+	with C comment delimiters.
+	(printargv, printargc): The arg vector is an array of char pointers
+	not ints.
+
+	* strace.c (printleader): Also check for multiple -p arguments
+	when deciding whether to print the pid field.
+
+	* strace.c (strerror) [!HAVE_STRERROR]: New function.
+	* defs.h (strerror, strsignal): Add these prototypes if we provide
+	the functions.
+	* configure.in (AC_CHECK_FUNCS): Add strerror.
+
+	* strace.c (main, proc_poller): Add SIGPIPE to the list of caught
+	and blocked signals.
+
+	* strace.c (main): Add username option.  Verify they are root before
+	letting them use it.  Look up the ids in the password file.  Set
+	them just before executing the program.
+	From Reuben Sumner <rasumner@undergrad.math.uwaterloo.ca>.
+
+Sat Apr 29 00:09:56 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.3 is released.
+
+	* system.c (mount_flags) [LINUX]: Omit duplicated MS_NOSUID entry.
+	From Reuben Sumner <rasumner@undergrad.math.uwaterloo.ca>.
+
+	* strace.c (outfname): Initialize to NULL.
+	(main): Defer output file processing until after arguments.
+	Allow either a pipe or a bang for command arguments.
+	Check if outfname is NULL instead of checking outf for stderr.
+	Reinitialize each startup TCB's outf to fix -p/-o ordering bug.
+	(droptcb): Reset close TCB's outf to NULL instead of stderr.
+	(tprintf): Avoid calling vfprintf if outf is NULL.
+
+	* strace.c (main): Use popen if -o argument begins with a pipe.
+	From Marty Leisner <leisner@sdsp.mc.xerox.com>.
+
+	* process.c (printstatus): Fix a typo where WIFSIGNALED was meant
+	but WIFSTOPPED was used.
+
+	* Makefile.in: Add an EXTRA_DEFS variable and use it in the .c.o
+	rule to prevent the comment from being untrue.
+
+Fri Apr 28 22:01:56 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* strace.c (sys_exit): Move follow fork code to internal_exit.
+	(sys_fork): Move follow fork code to internal_fork.
+	(sys_execv, sys_execve): Move follow fork code to internal_exec.
+	(sys_waitpid, sys_wait4): Move follow fork code to internal_wait.
+	(vforking): Remove this static variable and check scno in
+	internal_fork instead.
+	(internal_exit, internal_fork, internal_exec, internal_wait): New
+	functions.
+	* defs.h: Add prototypes for the new internal_* functions.
+	* syscall.c (syscall): Move syscall entering trace qualifier check
+	and reprint checking after context decoding and precede them with
+	a call to internal_syscall.  Precede syscall exiting trace
+	qualifier check with a call to internal_syscall.
+	(internal_syscall): New function.
+
+	* defs.h (struct tcb): Make scno signed.
+	* strace.c (syscall) Make u_error signed.
+	[LINUX, I386]: Avoid unsigned cast in eax check.
+	* syscall.c (sys_indir): Make i, scno, and nargs signed.
+	* desc.c (sys_select): Make cumlen unsigned
+
+Mon Apr 24 23:52:47 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* net.c (socktypes): Add SOCK_PACKET.
+
+Sun Apr  2 23:50:39 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* Makefile (clean): Check explicitly for a Makefile in subdirs
+	before running make in them.
+
+Sun Mar 26 12:37:21 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* strace.c [MIPS] (proc_open): Conditionalize run on MIPS.
+	[MIPS] (detach): Initialize error for MIPS case.
+	(trace): Initialize ioctl_result and ioctl_errno for overly helpful
+	compilers.
+	* syscall.c (decode_subcall): Move variable i into conditionals
+	that use use it.
+	* system.c (syssgi_options): Conditionalize SGI_RECVLMSG and
+	SGI_SET_FPDEBUG that SGI decided to drop.  I don't have the stomach
+	to change them all.
+	* term.c (term_ioctl): Force [c_[iocl]flags members to long before
+	printing since we don't know what the size of their type is.
+	* util.c [SVR4, MIPS] (umoven): Prevent MIPS from using pread even
+	if autoconf detects it since it seems to either not work or do
+	something else entirely on Irix 5.3.
+
+Sun Mar 26 00:01:11 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.2 is released.
+	* linux/dummy.h: Make sys_fchdir like sys_close instead of printargs
+	so that the file descriptor arg is decimal.
+
+Sat Mar 25 22:50:13 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* net.c [LINUX] (protocols): Explicitly define all IPPROTO_* entries
+	because on Linux they are enumerators.
+
+	* system.c [LINUX] (mount_flags): Handle renaming of MS_SYNC to
+	MS_SYNCHRONOUS.
+
+	* util.c (printxval): When there is no translation, print the actual
+	number first and the the default value as a C comment.
+
+	* net.c (sys_send, sys_sendto, sys_sendmsg, sys_getsockopt,
+	sys_setsockopt): Change first argument from unsigned to signed to
+	cater to the frequent practice of calling system calls with a file
+	descriptor of -1.
+	* mem.c (sys_mmap): Likewise.
+
+Sun Mar 19 13:53:52 1995  Rick Sladkey  <jrs@world.std.com>
+
+	* signal.c [LINUX] (signalent): Handle old and new values of SIGIO.
+
+Sun Dec 11 22:51:51 1994  Rick Sladkey  <jrs@world.std.com>
+
+	* version.c: Version 3.0.1 is released.
+	* Makefile.in, configure.in, aclocal.m4: Changes for autoconf 2.0.
+	* config.guess, config.guess: Update from the FSF.
+	* install-sh: New from the FSF.
+
+Mon Dec  5 20:51:29 1994  Rick Sladkey  <jrs@world.std.com>
+
+	* Makefile.in: Add m68k arch.
+	* acconfig.h (M68K): Add m68k define.
+	* configure.in: Add detection of arch m68k.
+	* process.c [M68K] (struct_user_offsets): Support m68k registers and
+	offsets.
+	* signal.c [M68K] (sigcontext_struct): Support m68k sigcontext
+	structure.
+	[M68K] (sys_sigreturn): Support m68k sigreturn handling.
+	* syscall.c [M68K] (syscall): Support m68k syscall number register
+	and errno in d0 instead of eax.
+	* util.c [M68K] (getpc, printcall, setbpt, clearbpt): Support m68k
+	program counter in PT_PC instead of EIP.
+	[M68K] (LOOP): Support m68k loop instruction.
+	From Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.
+
+	* mem.c [MAP_ANONYMOUS] (mmap_flags): Correct inadvertent reference
+	to MAP_FIXED instead of MAP_ANONYMOUS.
+	From Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.
+
+	* signal.c [LINUX] (signalent): Signal 30 is now SIGPWR.
+	From Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.
+
+Mon Dec  5 01:05:46 1994  Rick Sladkey  <jrs@world.std.com>
+
+	* defs.h (tprintf): Fix typo in non-gcc ansi prototype for tprintf.
+	Reported by Thanh Ma <tma@encore.com>.
+
+	* strace.c (cleanup): Send SIGCONT before SIGTERM because Linux
+	1.1.62 doesn't continue a traced child when the parent exits.
+	Reported by Matt Day <mday@artisoft.com>.
+
+	* system.c [LINUX]: Include netinet/in.h before arpa/inet.h.
+
+	* util.c (printstr): Fix longstanding bug in notating string
+	continuation.
+
+	* strace.c [SVR4] (proc_open): Specifically wait for the child the
+	child to go into the execve syscall to avoid spurious traces.
+	[LINUX] (detach): Conditionalize the status variable.
+
+Sun Dec  4 23:21:42 1994  Rick Sladkey  <jrs@world.std.com>
+
+	* Makefile.in: Add mips arch.
+	* acconfig.h (MIPS): Add mips define.
+	* configure.in: Add detection of opsys irix5 and arch mips.  Check
+	for prctl function.
+	Check for sys/sysconfig.h header.
+	* defs.h (MAX_ARGS): Bump maximum syscall arguments from 8 to 32.
+	* file.c [SVR4]: Include sys/cred.h.
+	(access_flags): Update access flags for SGI.
+	(sprinttime): Change type of sprinttime argument from unsigned
+	long to time_t.
+	* process.c [HAVE_PRCTL]: Include sys/prctl.h.
+	[HAVE_PRCTL] (prctl_options, sys_prctl): New for SGI.
+	(printsiginfo): Conditionally compile SI_TIMER and SI_MESGQ.
+	Cast si_band member to long before printing.
+	* signal.c (sigact_flags): Add _SA_BSDCALL for SGI.
+	(sigprocmaskcmds): Add SIG_SETMASK32 for SGI.
+	* strace.c [SVR4] [MIPS]:
+	(foobar): New dummy signal handler.
+	(main): Install a dummy signal handler in the child before pausing
+	to work around an SGI bug in PRSABORT.
+	(proc_open): Send a interrupt to the child instead of aborting the
+	syscall which doesn't work on Irix5.2.
+	* svr4/dummy.h: Add new unfinished SGI syscalls
+	(e.g. sys_sysmp, sys_sginap, etc.).  Handle some SGI syscalls like
+	existing calls (e.g. sys_ksigaction like sys_sigaction).
+	Printargs does the print thing for sys_sethostid.
+	* svr4/syscall.h: Declare all new SGI syscalls.
+	(SGI_KLUDGE): Define syscall table starting index to be 1 for SGI
+	and add it to all subcall entry points.
+	(SYS_pgrpsys_subcall, SYS_sigcall_subcall, SYS_context): Don't
+	decode as subcalls on MIPS. Instead, use the normal syscalls.
+	* svr4/syscallent.h [MIPS]: Lead syscall table with a dummy entry
+	since SGI syscall numbers are off by one.
+	[MIPS] (sys_pgrpsys): Rename to sys_setpgrp on SGI.
+	[MIPS] (sys_xenix): Rename to sys_syssgi on SGI.
+	[MIPS] (sys_sysmachine): Rename to sys_sysmips on SGI.
+	[MIPS]: Conditionalize SVR4 extension into SGI and Solaris classes.
+	* syscall.c (dumpio): Validate descriptor against MAX_QUALS.
+	[HAVE_PR_SYSCALL] (syscall): Conditionalize SYS_vfork.
+	[MIPS] (syscall): Add SGI section for decoding u_error and u_rval.
+	Add workaround for broken SGI pr_sysarg on syscall entry.
+	[SVR4] (syscall): Conditionalize subcall decoding for
+	SYS_ptrpsys_subcall, SYS_sigcall_subcall and SYS_context_subcall.
+	[SVR4] [MIPS] (getrval2): Handle SGI.
+	* syscallent.sh: Dork the sed line to be choosier about SYS_ lines.
+	* system.c [HAVE_SYSCONFIG_H]: Include sys/sysconfig.h.
+	[MIPS] (syssgi_options, sys_syssgi): New for SGI.
diff --git a/strace/HACKING-scripts b/strace/HACKING-scripts
new file mode 100644
index 0000000..1220fdd
--- /dev/null
+++ b/strace/HACKING-scripts
@@ -0,0 +1,58 @@
+Each strace port relies heavily on port-specific headers:
+	- errnoent.h - map error number to error name like strerror()
+	- ioctlent.h - map ioctl number to symbolic define
+	- signalent.h - map signal number to signal name like strsignal()
+	- syscallent.h - map syscall number to name and function signature
+
+Since generating these headers from scratch (or even just updating them) can be
+a big pain, there are a few scripts to help automate the process.  Since each
+port organizes their kernel sources differently, there may be a specific script
+for your kernel.
+
+We will use the Linux kernel (2.6.20+) as an example below (the Blackfin
+architecture to be specific).  Hopefully, it'll be obvious how to swap out a
+different system or architecture as your circumstances apply.
+
+ksrc=/usr/src/linux
+asrc=$ksrc/arch/blackfin/include
+
+To use the errnoent.sh script, give it all the headers that might contain
+appropriate errno values.  Excessive headers are not a problem.  The resulting
+output should be directly usable without modification.
+	sh ./errnoent.sh \
+		$ksrc/include/linux/*errno*.h \
+		$ksrc/include/asm-generic/*errno*.h \
+		$asrc/asm/*errno*.h \
+		> errnoent.h
+
+To use the ioctls_gen.sh script, give it all the base include directories.  The
+script will crawl all the headers and try to discover appropriate ioctls.
+Unlike the other scripts, this one creates files for further processing.  This
+is because ioctls tend to have a lot of define indirection, and the ioctlent0.h
+header needs to be fully expanded into numeric form and sorted properly.  So
+first we process all of the ioctls with the ioctls_gen.sh into ioctls_inc.h and
+ioctls_arch.h, and then we compile them into ioctlsort.c.  The resulting
+output, while directly usable, only contains definitions that match exactly the
+current kernel version that the script ran against.  That means older/newer
+ioctl defines that might be present in the existing ioctlent0.h header will be
+lost if things are copied directly.  A little creative use of `diff` and manual
+merging should be used to produce the final ioctlent0.h header.
+	sh ./maint/ioctls_gen.sh $ksrc/include $asrc
+	gcc -Wall -I. ioctlsort.c -o ioctlsort
+	./ioctlsort > ioctlent0.h
+
+To use the signalent.sh script, give it all the headers that might contain
+appropriate signal values.  Excessive headers are not a problem.  The resulting
+output should be directly usable without modification.
+	sh ./signalent.sh \
+		$asrc/asm/signal.h \
+		> signalent.h
+
+To use the syscallent.sh script, give it the header with the list of your
+system call numbers.  The resulting output is useful as a template for creating
+a proper header as it can really only detect the system call number and its
+name.  It has no way of knowing the number of arguments or strace flags for
+decoding them (yet?).
+	sh ./syscallent.sh \
+		$asrc/asm/unistd.h \
+		> syscallent.h
diff --git a/strace/INSTALL b/strace/INSTALL
new file mode 100644
index 0000000..0fad641
--- /dev/null
+++ b/strace/INSTALL
@@ -0,0 +1,302 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
+Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted in any medium without royalty provided the copyright notice
+and this notice are preserved.  This file is offered as-is, without
+warranty of any kind.
+
+Basic Installation
+==================
+
+Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package, generally using the just-built uninstalled binaries.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about.  Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Installation Names
+==================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+If the package supports it, you can cause programs to be installed with
+an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS
+     KERNEL-OS
+
+See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation.  Until the limitation is lifted, you can use
+this workaround:
+
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
diff --git a/strace/MODULE_LICENSE_BSD b/strace/MODULE_LICENSE_BSD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/strace/MODULE_LICENSE_BSD
diff --git a/strace/Makefile.am b/strace/Makefile.am
new file mode 100644
index 0000000..1e7554e
--- /dev/null
+++ b/strace/Makefile.am
@@ -0,0 +1,880 @@
+# Automake input for strace.
+#
+# Copyright (c) 2002-2009 Roland McGrath <roland@redhat.com>
+# Copyright (c) 2006-2016 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2008-2015 Mike Frysinger <vapier@gentoo.org>
+# Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+if HAVE_M32_RUNTIME
+TESTS_M32 = tests-m32
+endif
+if HAVE_MX32_RUNTIME
+TESTS_MX32 = tests-mx32
+endif
+SUBDIRS = tests $(TESTS_M32) $(TESTS_MX32)
+
+bin_PROGRAMS = strace
+man_MANS = strace.1
+bin_SCRIPTS = strace-graph strace-log-merge
+
+OS		= linux
+# ARCH is `i386', `m68k', `sparc', etc.
+ARCH		= @arch@
+
+ACLOCAL_AMFLAGS = -I m4
+AM_CFLAGS = $(WARN_CFLAGS)
+AM_CPPFLAGS = -I$(builddir)/$(OS)/$(ARCH) \
+	      -I$(srcdir)/$(OS)/$(ARCH) \
+	      -I$(builddir)/$(OS) \
+	      -I$(srcdir)/$(OS) \
+	      -I$(builddir) \
+	      -I$(srcdir)
+
+include xlat/Makemodule.am
+
+strace_CPPFLAGS = $(AM_CPPFLAGS)
+strace_CFLAGS = $(AM_CFLAGS)
+strace_LDFLAGS =
+strace_LDADD = libstrace.a
+noinst_LIBRARIES = libstrace.a
+
+libstrace_a_CPPFLAGS = $(strace_CPPFLAGS)
+libstrace_a_CFLAGS = $(strace_CFLAGS)
+libstrace_a_SOURCES =	\
+	fstatfs.c \
+	fstatfs64.c \
+	ipc.c \
+	socketcall.c \
+	statfs.c \
+	statfs64.c \
+	sync_file_range.c \
+	sync_file_range2.c \
+	upeek.c		\
+	# end of libstrace_a_SOURCES
+
+strace_SOURCES =	\
+	access.c	\
+	affinity.c	\
+	aio.c		\
+	alpha.c		\
+	bjm.c		\
+	block.c		\
+	bpf.c		\
+	btrfs.c		\
+	cacheflush.c	\
+	capability.c	\
+	caps0.h		\
+	caps1.h		\
+	chdir.c		\
+	chmod.c		\
+	clone.c		\
+	copy_file_range.c \
+	count.c		\
+	defs.h		\
+	desc.c		\
+	dirent.c	\
+	dirent64.c	\
+	empty.h		\
+	epoll.c		\
+	evdev.c		\
+	eventfd.c	\
+	execve.c	\
+	exit.c		\
+	fadvise.c	\
+	fallocate.c	\
+	fanotify.c	\
+	fchownat.c	\
+	fcntl.c		\
+	fetch_seccomp_fprog.c \
+	fetch_struct_flock.c \
+	fetch_struct_mmsghdr.c \
+	fetch_struct_msghdr.c \
+	fetch_struct_statfs.c \
+	file.c		\
+	file_handle.c	\
+	file_ioctl.c	\
+	fs_x_ioctl.c	\
+	flock.c		\
+	flock.h		\
+	futex.c		\
+	gcc_compat.h	\
+	get_robust_list.c \
+	getcpu.c	\
+	getcwd.c	\
+	getrandom.c	\
+	hdio.c		\
+	hostname.c	\
+	inotify.c	\
+	io.c		\
+	ioctl.c		\
+	ioperm.c	\
+	iopl.c		\
+	ioprio.c	\
+	ipc_defs.h	\
+	ipc_msg.c	\
+	ipc_msgctl.c	\
+	ipc_sem.c	\
+	ipc_shm.c	\
+	ipc_shmctl.c	\
+	kcmp.c		\
+	kernel_types.h	\
+	kexec.c		\
+	keyctl.c	\
+	ldt.c		\
+	link.c		\
+	linux/asm_stat.h \
+	linux/x32/asm_stat.h \
+	lookup_dcookie.c \
+	loop.c		\
+	lseek.c		\
+	mem.c		\
+	membarrier.c	\
+	memfd_create.c	\
+	mknod.c		\
+	mmsghdr.c	\
+	mount.c		\
+	mpers_type.h	\
+	mq.c		\
+	msghdr.c	\
+	msghdr.h	\
+	mtd.c		\
+	native_defs.h	\
+	net.c		\
+	netlink.c       \
+	numa.c		\
+	open.c		\
+	or1k_atomic.c	\
+	pathtrace.c	\
+	perf.c		\
+	personality.c	\
+	poll.c		\
+	prctl.c		\
+	print_mq_attr.c	\
+	print_msgbuf.c	\
+	print_sigevent.c \
+	print_statfs.c	\
+	print_time.c	\
+	print_timex.c	\
+	printmode.c	\
+	printrusage.c	\
+	printsiginfo.c	\
+	printsiginfo.h	\
+	printstat.h	\
+	process.c	\
+	process_vm.c	\
+	ptp.c		\
+	ptrace.h	\
+	quota.c		\
+	readahead.c	\
+	readlink.c	\
+	reboot.c	\
+	regs.h		\
+	renameat.c	\
+	resource.c	\
+	rtc.c		\
+	sched.c		\
+	scsi.c		\
+	seccomp.c	\
+	seccomp_fprog.h \
+	sendfile.c	\
+	sigaltstack.c	\
+	sigevent.h	\
+	signal.c	\
+	signalfd.c	\
+	sigreturn.c	\
+	sock.c		\
+	sockaddr.c	\
+	socketutils.c	\
+	sram_alloc.c	\
+	statfs.c	\
+	statfs.h	\
+	strace.c	\
+	swapon.c	\
+	syscall.c	\
+	sysctl.c	\
+	sysinfo.c	\
+	syslog.c	\
+	sysmips.c	\
+	term.c		\
+	time.c		\
+	times.c		\
+	truncate.c	\
+	ubi.c		\
+	uid.c		\
+	uid16.c		\
+	umask.c		\
+	umount.c	\
+	uname.c		\
+	userfaultfd.c	\
+	util.c		\
+	utime.c		\
+	utimes.c	\
+	v4l2.c		\
+	vsprintf.c	\
+	wait.c		\
+	xattr.c		\
+	xlat.h		\
+	xmalloc.c	\
+	# end of strace_SOURCES
+
+if USE_LIBUNWIND
+strace_SOURCES += unwind.c
+strace_CPPFLAGS += $(libunwind_CPPFLAGS)
+strace_LDFLAGS += $(libunwind_LDFLAGS)
+strace_LDADD += $(libunwind_LIBS)
+endif
+
+@CODE_COVERAGE_RULES@
+CODE_COVERAGE_BRANCH_COVERAGE = 1
+CODE_COVERAGE_GENHTML_OPTIONS = $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) \
+	--prefix $(shell realpath -Ls $(abs_top_srcdir)/..)
+CODE_COVERAGE_IGNORE_PATTERN = '/usr/include/*'
+strace_CPPFLAGS += $(CODE_COVERAGE_CPPFLAGS)
+strace_CFLAGS += $(CODE_COVERAGE_CFLAGS)
+strace_LDADD += $(CODE_COVERAGE_LDFLAGS)
+
+# Enable this to get link map generated
+#strace_LDFLAGS += -Wl,-Map=strace.mapfile
+
+EXTRA_DIST =				\
+	$(man_MANS)			\
+	.version			\
+	COPYING				\
+	CREDITS				\
+	ChangeLog			\
+	ChangeLog-CVS			\
+	README-linux-ptrace		\
+	debian/changelog		\
+	debian/compat			\
+	debian/control			\
+	debian/copyright		\
+	debian/rules			\
+	debian/source/format		\
+	debian/strace-udeb.install	\
+	debian/strace.docs		\
+	debian/strace.examples		\
+	debian/strace.install		\
+	debian/strace.manpages		\
+	debian/strace64.install		\
+	debian/strace64.manpages	\
+	debian/watch			\
+	errnoent.sh			\
+	generate_sen.sh			\
+	ioctlsort.c			\
+	linux/32/ioctls_inc.h		\
+	linux/32/ioctls_inc_align32.h	\
+	linux/32/ioctls_inc_align64.h	\
+	linux/32/syscallent.h		\
+	linux/64/ioctls_inc.h		\
+	linux/64/syscallent.h		\
+	linux/aarch64/arch_regs.c	\
+	linux/aarch64/arch_regs.h	\
+	linux/aarch64/arch_sigreturn.c	\
+	linux/aarch64/errnoent1.h	\
+	linux/aarch64/get_error.c	\
+	linux/aarch64/get_scno.c	\
+	linux/aarch64/get_syscall_args.c\
+	linux/aarch64/ioctls_arch0.h	\
+	linux/aarch64/ioctls_arch1.h	\
+	linux/aarch64/ioctls_inc0.h	\
+	linux/aarch64/ioctls_inc1.h	\
+	linux/aarch64/signalent1.h	\
+	linux/aarch64/syscallent.h	\
+	linux/aarch64/syscallent1.h	\
+	linux/alpha/arch_getrval2.c	\
+	linux/alpha/arch_regs.c		\
+	linux/alpha/arch_regs.h		\
+	linux/alpha/arch_sigreturn.c	\
+	linux/alpha/errnoent.h		\
+	linux/alpha/get_error.c		\
+	linux/alpha/get_scno.c		\
+	linux/alpha/get_syscall_args.c	\
+	linux/alpha/get_syscall_result.c\
+	linux/alpha/ioctls_arch0.h	\
+	linux/alpha/ioctls_inc0.h	\
+	linux/alpha/signalent.h		\
+	linux/alpha/syscallent.h	\
+	linux/alpha/userent.h		\
+	linux/arc/arch_regs.c		\
+	linux/arc/get_error.c		\
+	linux/arc/get_scno.c		\
+	linux/arc/get_syscall_args.c	\
+	linux/arc/ioctls_arch0.h	\
+	linux/arc/ioctls_inc0.h		\
+	linux/arc/syscallent.h		\
+	linux/arch_regs.h		\
+	linux/arch_sigreturn.c		\
+	linux/arm/arch_regs.c		\
+	linux/arm/arch_regs.h		\
+	linux/arm/arch_sigreturn.c	\
+	linux/arm/get_error.c		\
+	linux/arm/get_scno.c		\
+	linux/arm/get_syscall_args.c	\
+	linux/arm/ioctls_arch0.h	\
+	linux/arm/ioctls_inc0.h		\
+	linux/arm/syscallent.h		\
+	linux/arm/userent.h		\
+	linux/avr32/arch_regs.c		\
+	linux/avr32/get_error.c		\
+	linux/avr32/get_scno.c		\
+	linux/avr32/get_syscall_args.c	\
+	linux/avr32/ioctls_arch0.h	\
+	linux/avr32/ioctls_inc0.h	\
+	linux/avr32/syscallent.h	\
+	linux/avr32/userent.h		\
+	linux/bfin/arch_regs.c		\
+	linux/bfin/get_error.c		\
+	linux/bfin/get_scno.c		\
+	linux/bfin/get_syscall_args.c	\
+	linux/bfin/get_syscall_result.c	\
+	linux/bfin/ioctls_arch0.h	\
+	linux/bfin/ioctls_inc0.h	\
+	linux/bfin/syscallent.h		\
+	linux/bfin/userent.h		\
+	linux/crisv10/arch_regs.c	\
+	linux/crisv10/arch_sigreturn.c	\
+	linux/crisv10/get_error.c	\
+	linux/crisv10/get_scno.c	\
+	linux/crisv10/get_syscall_args.c	\
+	linux/crisv10/get_syscall_result.c	\
+	linux/crisv10/userent.h		\
+	linux/crisv32/arch_regs.c	\
+	linux/crisv32/arch_sigreturn.c	\
+	linux/crisv32/get_error.c	\
+	linux/crisv32/get_scno.c	\
+	linux/crisv32/get_syscall_args.c	\
+	linux/crisv32/get_syscall_result.c	\
+	linux/crisv32/userent.h		\
+	linux/dummy.h			\
+	linux/errnoent.h		\
+	linux/hppa/arch_regs.c		\
+	linux/hppa/arch_regs.h		\
+	linux/hppa/errnoent.h		\
+	linux/hppa/get_error.c		\
+	linux/hppa/get_scno.c		\
+	linux/hppa/get_syscall_args.c	\
+	linux/hppa/get_syscall_result.c	\
+	linux/hppa/ioctls_arch0.h	\
+	linux/hppa/ioctls_inc0.h	\
+	linux/hppa/signalent.h		\
+	linux/hppa/syscallent.h		\
+	linux/i386/arch_regs.c		\
+	linux/i386/arch_regs.h		\
+	linux/i386/arch_sigreturn.c	\
+	linux/i386/get_error.c		\
+	linux/i386/get_scno.c		\
+	linux/i386/get_syscall_args.c	\
+	linux/i386/ioctls_arch0.h	\
+	linux/i386/ioctls_inc0.h	\
+	linux/i386/syscallent.h		\
+	linux/i386/userent.h		\
+	linux/i386/userent0.h		\
+	linux/ia64/arch_getrval2.c	\
+	linux/ia64/arch_regs.c		\
+	linux/ia64/arch_regs.h		\
+	linux/ia64/arch_sigreturn.c	\
+	linux/ia64/get_error.c		\
+	linux/ia64/get_scno.c		\
+	linux/ia64/get_syscall_args.c	\
+	linux/ia64/ioctls_arch0.h	\
+	linux/ia64/ioctls_inc0.h	\
+	linux/ia64/syscallent.h		\
+	linux/ia64/userent.h		\
+	linux/inet_diag.h		\
+	linux/m68k/arch_regs.c		\
+	linux/m68k/arch_sigreturn.c	\
+	linux/m68k/get_error.c		\
+	linux/m68k/get_scno.c		\
+	linux/m68k/get_syscall_args.c	\
+	linux/m68k/get_syscall_result.c	\
+	linux/m68k/ioctls_arch0.h	\
+	linux/m68k/ioctls_inc0.h	\
+	linux/m68k/syscallent.h		\
+	linux/m68k/userent.h		\
+	linux/metag/arch_regs.c		\
+	linux/metag/get_error.c		\
+	linux/metag/get_scno.c		\
+	linux/metag/get_syscall_args.c	\
+	linux/metag/ioctls_arch0.h	\
+	linux/metag/ioctls_inc0.h	\
+	linux/metag/syscallent.h	\
+	linux/microblaze/arch_regs.c	\
+	linux/microblaze/arch_sigreturn.c	\
+	linux/microblaze/get_error.c	\
+	linux/microblaze/get_scno.c	\
+	linux/microblaze/get_syscall_args.c	\
+	linux/microblaze/get_syscall_result.c	\
+	linux/microblaze/ioctls_arch0.h	\
+	linux/microblaze/ioctls_inc0.h	\
+	linux/microblaze/syscallent.h	\
+	linux/microblaze/userent.h	\
+	linux/mips/arch_getrval2.c	\
+	linux/mips/arch_regs.c		\
+	linux/mips/arch_regs.h		\
+	linux/mips/arch_sigreturn.c	\
+	linux/mips/errnoent.h		\
+	linux/mips/genstub.sh		\
+	linux/mips/get_error.c		\
+	linux/mips/get_scno.c		\
+	linux/mips/get_syscall_args.c	\
+	linux/mips/ioctls_arch0.h	\
+	linux/mips/ioctls_inc0.h	\
+	linux/mips/signalent.h		\
+	linux/mips/syscallent-compat.h	\
+	linux/mips/syscallent-n32.h	\
+	linux/mips/syscallent-n64.h	\
+	linux/mips/syscallent-o32.h	\
+	linux/mips/syscallent.h		\
+	linux/mips/userent.h		\
+	linux/mtd-abi.h			\
+	linux/netlink_diag.h		\
+	linux/nios2/arch_regs.c		\
+	linux/nios2/get_error.c		\
+	linux/nios2/get_scno.c		\
+	linux/nios2/get_syscall_args.c	\
+	linux/nios2/ioctls_arch0.h	\
+	linux/nios2/ioctls_inc0.h	\
+	linux/nios2/syscallent.h	\
+	linux/or1k/arch_regs.c		\
+	linux/or1k/get_error.c		\
+	linux/or1k/get_scno.c		\
+	linux/or1k/get_syscall_args.c	\
+	linux/or1k/ioctls_arch0.h	\
+	linux/or1k/ioctls_inc0.h	\
+	linux/or1k/syscallent.h		\
+	linux/or1k/userent.h		\
+	linux/personality.h		\
+	linux/powerpc/arch_regs.c	\
+	linux/powerpc/arch_regs.h	\
+	linux/powerpc/arch_sigreturn.c	\
+	linux/powerpc/errnoent.h	\
+	linux/powerpc/get_error.c	\
+	linux/powerpc/get_scno.c	\
+	linux/powerpc/get_syscall_args.c	\
+	linux/powerpc/getregs_old.c	\
+	linux/powerpc/ioctls_arch0.h	\
+	linux/powerpc/ioctls_inc0.h	\
+	linux/powerpc/syscallent.h	\
+	linux/powerpc/userent.h		\
+	linux/powerpc64/arch_regs.c	\
+	linux/powerpc64/arch_regs.h	\
+	linux/powerpc64/arch_sigreturn.c	\
+	linux/powerpc64/errnoent.h	\
+	linux/powerpc64/errnoent1.h	\
+	linux/powerpc64/get_error.c	\
+	linux/powerpc64/get_scno.c	\
+	linux/powerpc64/get_syscall_args.c	\
+	linux/powerpc64/getregs_old.c	\
+	linux/powerpc64/ioctls_arch0.h	\
+	linux/powerpc64/ioctls_arch1.h	\
+	linux/powerpc64/ioctls_inc0.h	\
+	linux/powerpc64/ioctls_inc1.h	\
+	linux/powerpc64/signalent1.h	\
+	linux/powerpc64/syscallent.h	\
+	linux/powerpc64/syscallent1.h	\
+	linux/powerpc64/userent.h	\
+	linux/ptp_clock.h		\
+	linux/s390/arch_regs.c		\
+	linux/s390/arch_regs.h		\
+	linux/s390/arch_sigreturn.c	\
+	linux/s390/get_error.c		\
+	linux/s390/get_scno.c		\
+	linux/s390/get_syscall_args.c	\
+	linux/s390/ioctls_arch0.h	\
+	linux/s390/ioctls_inc0.h	\
+	linux/s390/syscallent.h		\
+	linux/s390/userent.h		\
+	linux/s390/userent0.h		\
+	linux/s390/userent1.h		\
+	linux/s390x/arch_regs.c		\
+	linux/s390x/arch_regs.h		\
+	linux/s390x/arch_sigreturn.c	\
+	linux/s390x/get_error.c		\
+	linux/s390x/get_scno.c		\
+	linux/s390x/get_syscall_args.c	\
+	linux/s390x/ioctls_arch0.h	\
+	linux/s390x/ioctls_inc0.h	\
+	linux/s390x/syscallent.h	\
+	linux/s390x/userent.h		\
+	linux/sh/arch_getrval2.c	\
+	linux/sh/arch_regs.c		\
+	linux/sh/get_error.c		\
+	linux/sh/get_scno.c		\
+	linux/sh/get_syscall_args.c	\
+	linux/sh/get_syscall_result.c	\
+	linux/sh/ioctls_arch0.h		\
+	linux/sh/ioctls_inc0.h		\
+	linux/sh/syscallent.h		\
+	linux/sh/userent.h		\
+	linux/sh/userent0.h		\
+	linux/sh64/arch_regs.c		\
+	linux/sh64/arch_regs.h		\
+	linux/sh64/get_error.c		\
+	linux/sh64/get_scno.c		\
+	linux/sh64/get_syscall_args.c	\
+	linux/sh64/get_syscall_result.c	\
+	linux/sh64/ioctls_arch0.h	\
+	linux/sh64/ioctls_inc0.h	\
+	linux/sh64/syscallent.h		\
+	linux/sh64/userent.h		\
+	linux/signalent.h		\
+	linux/sock_diag.h		\
+	linux/sparc/arch_getrval2.c	\
+	linux/sparc/arch_regs.c		\
+	linux/sparc/arch_regs.h		\
+	linux/sparc/arch_sigreturn.c	\
+	linux/sparc/errnoent.h		\
+	linux/sparc/gen.pl		\
+	linux/sparc/get_error.c		\
+	linux/sparc/get_scno.c		\
+	linux/sparc/get_syscall_args.c	\
+	linux/sparc/ioctls_arch0.h	\
+	linux/sparc/ioctls_inc0.h	\
+	linux/sparc/signalent.h		\
+	linux/sparc/syscallent.h	\
+	linux/sparc/userent.h		\
+	linux/sparc64/arch_getrval2.c	\
+	linux/sparc64/arch_regs.c	\
+	linux/sparc64/arch_regs.h	\
+	linux/sparc64/arch_sigreturn.c	\
+	linux/sparc64/errnoent.h	\
+	linux/sparc64/errnoent1.h	\
+	linux/sparc64/get_error.c	\
+	linux/sparc64/get_scno.c	\
+	linux/sparc64/get_syscall_args.c\
+	linux/sparc64/ioctls_arch0.h	\
+	linux/sparc64/ioctls_arch1.h	\
+	linux/sparc64/ioctls_inc0.h	\
+	linux/sparc64/ioctls_inc1.h	\
+	linux/sparc64/signalent.h	\
+	linux/sparc64/signalent1.h	\
+	linux/sparc64/syscallent.h	\
+	linux/sparc64/syscallent1.h	\
+	linux/sparc64/userent.h		\
+	linux/subcall.h			\
+	linux/syscall.h			\
+	linux/tile/arch_regs.c		\
+	linux/tile/arch_regs.h		\
+	linux/tile/arch_sigreturn.c	\
+	linux/tile/errnoent1.h		\
+	linux/tile/get_error.c		\
+	linux/tile/get_scno.c		\
+	linux/tile/get_syscall_args.c	\
+	linux/tile/ioctls_arch0.h	\
+	linux/tile/ioctls_arch1.h	\
+	linux/tile/ioctls_inc0.h	\
+	linux/tile/ioctls_inc1.h	\
+	linux/tile/signalent1.h		\
+	linux/tile/syscallent.h		\
+	linux/tile/syscallent1.h	\
+	linux/tile/userent.h		\
+	linux/ubi-user.h		\
+	linux/unix_diag.h		\
+	linux/userent.h			\
+	linux/userent0.h		\
+	linux/x32/arch_regs.c		\
+	linux/x32/arch_regs.h		\
+	linux/x32/arch_sigreturn.c	\
+	linux/x32/errnoent1.h		\
+	linux/x32/get_error.c		\
+	linux/x32/get_scno.c		\
+	linux/x32/get_syscall_args.c	\
+	linux/x32/ioctls_arch0.h	\
+	linux/x32/ioctls_arch1.h	\
+	linux/x32/ioctls_inc0.h		\
+	linux/x32/ioctls_inc1.h		\
+	linux/x32/signalent1.h		\
+	linux/x32/syscallent.h		\
+	linux/x32/syscallent1.h		\
+	linux/x32/userent.h		\
+	linux/x86_64/arch_regs.c	\
+	linux/x86_64/arch_regs.h	\
+	linux/x86_64/arch_sigreturn.c	\
+	linux/x86_64/errnoent1.h	\
+	linux/x86_64/errnoent2.h	\
+	linux/x86_64/gentab.pl		\
+	linux/x86_64/get_error.c	\
+	linux/x86_64/get_scno.c		\
+	linux/x86_64/get_syscall_args.c	\
+	linux/x86_64/getregs_old.c	\
+	linux/x86_64/ioctls_arch0.h	\
+	linux/x86_64/ioctls_arch1.h	\
+	linux/x86_64/ioctls_arch2.h	\
+	linux/x86_64/ioctls_inc0.h	\
+	linux/x86_64/ioctls_inc1.h	\
+	linux/x86_64/ioctls_inc2.h	\
+	linux/x86_64/signalent1.h	\
+	linux/x86_64/signalent2.h	\
+	linux/x86_64/syscallent.h	\
+	linux/x86_64/syscallent1.h	\
+	linux/x86_64/syscallent2.h	\
+	linux/x86_64/userent.h		\
+	linux/xtensa/arch_regs.c	\
+	linux/xtensa/get_error.c	\
+	linux/xtensa/get_scno.c		\
+	linux/xtensa/get_syscall_args.c	\
+	linux/xtensa/get_syscall_result.c	\
+	linux/xtensa/ioctls_arch0.h	\
+	linux/xtensa/ioctls_inc0.h	\
+	linux/xtensa/syscallent.h	\
+	linux/xtensa/userent.h		\
+	maint/ioctls_gen.sh		\
+	maint/ioctls_hex.sh		\
+	maint/ioctls_sym.sh		\
+	maint/print_ioctlent.c		\
+	mpers.awk			\
+	mpers.sh			\
+	mpers_test.sh			\
+	mpers_xlat.h			\
+	signalent.sh			\
+	strace-graph			\
+	strace-log-merge		\
+	strace.spec			\
+	syscallent.sh			\
+	$(XLAT_INPUT_FILES)		\
+	$(XLAT_HEADER_FILES)		\
+	xlat/gen.sh			\
+	xlate.el
+
+.PHONY: srpm
+srpm: dist-xz
+	rpmbuild --define '%_srcrpmdir .' -ts $(distdir).tar.xz
+
+$(srcdir)/.version:
+	$(AM_V_GEN)echo $(VERSION) > $@-t && mv $@-t $@
+
+strace_SOURCES_c = \
+	$(filter %.c,$(strace_SOURCES)) $(filter %.c,$(libstrace_a_SOURCES))
+
+sys_func.h: $(patsubst %,$(srcdir)/%,$(strace_SOURCES_c))
+	for f in $^; do \
+		sed -n 's/^SYS_FUNC(.*/extern &;/p' $$f; \
+	done | sort -u > $@
+
+syscallent_names = subcall.h syscallent.h syscallent1.h \
+		   syscallent-n32.h syscallent-n64.h syscallent-o32.h
+syscallent_patterns = $(patsubst %,\%/%,$(syscallent_names))
+syscallent_files = $(filter $(syscallent_patterns),$(EXTRA_DIST))
+
+sen.h: $(patsubst %,$(srcdir)/%,$(syscallent_files))
+	for f in $^; do cat -- $$f; done | \
+		$(srcdir)/generate_sen.sh > $@
+
+dist-hook:
+	$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
+
+today = $(shell date +%Y-%m-%d)
+version_regexp = $(subst .,\.,$(VERSION))
+news_check_regexp = 'Noteworthy changes in release $(version_regexp) ($(today))'
+
+news-check: NEWS
+	$(AM_V_GEN)if head -1 $< |				\
+	  grep -x $(news_check_regexp) >/dev/null; then		\
+		:;						\
+	else							\
+		echo >&2 '$<: check failed';			\
+		exit 1;						\
+	fi
+
+ioctlsort_CC = $(CC_FOR_BUILD)
+ioctlsort_DEFS = $(DEFS)
+ioctlsort_INCLUDES = $(DEFAULT_INCLUDES) $(INCLUDES)
+ioctlsort_CPPFLAGS = $(AM_CPPFLAGS) $(CPPFLAGS_FOR_BUILD)
+ioctlsort_CFLAGS = $(AM_CFLAGS) $(CFLAGS_FOR_BUILD)
+ioctlsort_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_FOR_BUILD)
+
+ioctls_inc_h = $(wildcard $(srcdir)/$(OS)/$(ARCH)/ioctls_inc*.h)
+ioctlent_h = $(patsubst $(srcdir)/$(OS)/$(ARCH)/ioctls_inc%,ioctlent%,$(ioctls_inc_h))
+ioctl_redefs_h = $(filter-out ioctl_redefs0.h,$(subst ioctlent,ioctl_redefs,$(ioctlent_h)))
+
+ioctl_redefs%.h: ioctlent%.h ioctlent0.h
+	sort $< > $<-t
+	sort ioctlent0.h | comm -23 $<-t - | \
+		sed -n 's/^{ "\([^"]\+\)", \(0x[[:xdigit:]]\+\) },$$/#ifdef \1\n# undef \1\n# define \1 \2\n#endif/p' \
+		> $@-t
+	rm -f $<-t
+	mv $@-t $@
+
+ioctlent%.h: ioctlsort%
+	./$< > $@
+
+ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+	$(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
+	$(ioctlsort_CC) $(ioctlsort_DEFS) $(ioctlsort_INCLUDES) $(ioctlsort_CPPFLAGS) $(ioctlsort_CFLAGS) -DIOCTLSORT_INC=\"$<\" -c -o $@ $(srcdir)/ioctlsort.c
+
+ioctls_all%.h: $(srcdir)/$(OS)/$(ARCH)/ioctls_inc%.h $(srcdir)/$(OS)/$(ARCH)/ioctls_arch%.h
+	cat $^ > $@
+
+BUILT_SOURCES = $(ioctl_redefs_h) $(ioctlent_h) \
+		native_printer_decls.h native_printer_defs.h printers.h sen.h sys_func.h .version
+CLEANFILES    = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) \
+		native_printer_decls.h native_printer_defs.h printers.h sen.h sys_func.h
+DISTCLEANFILES = gnu/stubs-32.h gnu/stubs-x32.h
+
+# defines mpers_source_files
+include mpers.am
+srcdir_mpers_source_files = $(patsubst %,$(srcdir)/%,$(mpers_source_files))
+mpers_preproc_files = $(mpers_source_files:.c=.c.mpers.i)
+
+mpers_NAME =
+mpers_PREFIX = $(mpers_NAME)_
+mpers_DEFS = $(DEFS)
+mpers_INCLUDES = $(DEFAULT_INCLUDES) $(INCLUDES)
+mpers_CPPFLAGS = $(strace_CPPFLAGS) $(CPPFLAGS)
+mpers_sh_opts = $(mpers_DEFS) $(mpers_INCLUDES) $(mpers_CPPFLAGS)
+libmpers_CPPFLAGS = $(strace_CPPFLAGS) -DIN_MPERS
+libmpers_CFLAGS = $(strace_CFLAGS)
+
+# mpers targets
+
+mpers-m%.stamp: $(srcdir_mpers_source_files) | printers.h
+	for f in $^; do \
+		CC="$(CC)" CFLAGS="$(mpers_sh_opts)" \
+		CPP="$(CPP)" CPPFLAGS="$(mpers_sh_opts) -DIN_MPERS -DMPERS_IS_$(mpers_NAME)" \
+		$(srcdir)/mpers.sh -$(mpers_NAME) $$f || exit; \
+	done
+	> $@
+
+m%_type_defs.h: $(srcdir_mpers_source_files)
+	for f in $^; do \
+		sed -n 's/^#include DEF_MPERS_TYPE(\([^)]\+\))/#ifdef MPERS_$(mpers_PREFIX)\1\n# define \1 MPERS_$(mpers_PREFIX)\1\n#endif/p' $$f || exit; \
+	done > $@-t
+	echo '#undef MPERS_PRINTER_NAME' >> $@-t
+	echo '#define MPERS_PRINTER_NAME(printer_name) printer_name' >> $@-t
+	echo '#include "$(mpers_PREFIX)printer_decls.h"' >> $@-t
+	echo '#include MPERS_$(mpers_PREFIX)IOCTL_MACROS' >> $@-t
+	mv $@-t $@
+
+m%_funcs.h: $(srcdir_mpers_source_files)
+	for f in $^; do \
+		sed -n 's/^SYS_FUNC(\([^)]\+\))/#undef sys_\1\n#define sys_\1 $(mpers_PREFIX)sys_\1/p' $$f || exit; \
+	done > $@-t && \
+	echo '#include "sys_func.h"' >> $@-t
+	mv $@-t $@
+
+# printers
+
+%.c.mpers.i: $(srcdir)/%.c
+	$(CPP) -P $(mpers_sh_opts) -DIN_MPERS_BOOTSTRAP $< -o $@
+
+mpers_printer_decl_pattern = ^MPERS_PRINTER_DECL(\([^,)]\+\),[[:space:]]*\([^,)]\+\),[[:space:]]*\([^)]\+\))$$
+
+printers.h: $(mpers_preproc_files)
+	echo '/* Generated by Makefile from $^; do not edit. */' > $@-t
+	echo 'typedef struct {' >> $@-t
+	for f in $^; do \
+		sed -n 's/$(mpers_printer_decl_pattern)/ \1 (*\2)(\3);\n#define \2 MPERS_PRINTER_NAME(\2)\n/p' $$f \
+		|| exit; \
+	done >> $@-t
+	echo '} struct_printers;' >> $@-t
+	echo 'extern const struct_printers *printers;' >> $@-t
+	echo '#define MPERS_PRINTER_NAME(printer_name) printers->printer_name' >> $@-t
+	mv $@-t $@
+
+%_printer_decls.h: $(mpers_preproc_files)
+	echo '/* Generated by Makefile from $^; do not edit. */' > $@-t
+	for f in $^; do \
+		sed -n 's/$(mpers_printer_decl_pattern)/extern \1 $(mpers_PREFIX)\2(\3);/p' $$f \
+		|| exit; \
+	done >> $@-t
+	mv $@-t $@
+
+%_printer_defs.h: $(mpers_preproc_files)
+	echo '/* Generated by Makefile from $^; do not edit. */' > $@-t
+	for f in $^; do \
+		sed -n 's/$(mpers_printer_decl_pattern)/\.\2 = $(mpers_PREFIX)\2,/p' $$f \
+		|| exit; \
+	done >> $@-t
+	mv $@-t $@
+
+native_printer_decls.h native_printer_defs.h: mpers_PREFIX =
+
+if HAVE_M32_MPERS
+
+strace_LDADD += libmpers-m32.a
+noinst_LIBRARIES += libmpers-m32.a
+libmpers_m32_a_SOURCES = $(mpers_source_files)
+libmpers_m32_a_CPPFLAGS = $(libmpers_CPPFLAGS) -DMPERS_IS_m32 -I$(builddir)/mpers-m32
+libmpers_m32_a_CFLAGS = $(libmpers_CFLAGS)
+mpers_m32_targets = mpers-m32.stamp m32_type_defs.h m32_funcs.h m32_printer_decls.h m32_printer_defs.h
+
+BUILT_SOURCES += $(mpers_m32_targets)
+CLEANFILES    += $(mpers_m32_targets)
+
+$(mpers_m32_targets): mpers_NAME = m32
+
+endif # HAVE_M32_MPERS
+
+if HAVE_MX32_MPERS
+
+strace_LDADD += libmpers-mx32.a
+noinst_LIBRARIES += libmpers-mx32.a
+libmpers_mx32_a_SOURCES = $(mpers_source_files)
+libmpers_mx32_a_CPPFLAGS = $(libmpers_CPPFLAGS) -DMPERS_IS_mx32 -I$(builddir)/mpers-mx32
+libmpers_mx32_a_CFLAGS = $(libmpers_CFLAGS)
+mpers_mx32_targets = mpers-mx32.stamp mx32_type_defs.h mx32_funcs.h mx32_printer_decls.h mx32_printer_defs.h
+
+BUILT_SOURCES += $(mpers_mx32_targets)
+CLEANFILES    += $(mpers_mx32_targets)
+
+$(mpers_mx32_targets): mpers_NAME = mx32
+
+endif # HAVE_MX32_MPERS
+
+clean-local:
+	-rm -rf mpers-m32 mpers-mx32
+
+if MAINTAINER_MODE
+
+gen_changelog_start_date = 2009-07-08 20:00
+$(srcdir)/ChangeLog: $(srcdir)/gitlog-to-changelog $(srcdir)/Makefile.in \
+		     $(srcdir)/.version
+	@rm -f $@.new
+	(cd $(srcdir); \
+	 ./gitlog-to-changelog --append-dot \
+	   --since='$(gen_changelog_start_date)'; \
+	 echo; echo; echo 'See ChangeLog-CVS for older changes.' \
+	) > $@.new
+	chmod 444 $@.new
+	mv -f $@.new $@
+
+$(srcdir)/CREDITS: $(srcdir)/CREDITS.in $(srcdir)/.mailmap \
+		   $(srcdir)/Makefile.in $(srcdir)/.version
+	$(AM_V_GEN)							\
+	(								\
+	  cd $(srcdir);							\
+	  sed '/^##/,$$d' CREDITS.in;					\
+	  { sed -n '1,/^##>/d; s/  \+/\t/; s/^./&/p' CREDITS.in;	\
+	    git log --pretty=format:'%aN	%aE';			\
+	  } | LC_ALL=C sort -u						\
+	    | awk -F'\t' '{printf("\t%s <%s>\n",$$1,$$2)}';		\
+	) > $@-t && mv $@-t $@
+
+export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner --mode=go-w,go+rX
+
+endif
diff --git a/strace/NEWS b/strace/NEWS
new file mode 100644
index 0000000..19a870d
--- /dev/null
+++ b/strace/NEWS
@@ -0,0 +1,774 @@
+Noteworthy changes in release ?.?? (????-??-??)
+===============================================
+
+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
diff --git a/strace/NOTICE b/strace/NOTICE
new file mode 100644
index 0000000..e9078d3
--- /dev/null
+++ b/strace/NOTICE
@@ -0,0 +1,29 @@
+Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+Copyright (c) 1993 Ulrich Pegelow <pegelow@moorea.uni-muenster.de>
+Copyright (c) 1995, 1996 Michael Elizabeth Chastain <mec@duracef.shout.net>
+Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+Copyright (C) 1998-2001 Wichert Akkerman <wakkerma@deephackmode.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/strace/README b/strace/README
new file mode 100644
index 0000000..ae80800
--- /dev/null
+++ b/strace/README
@@ -0,0 +1,24 @@
+This is strace, a system call tracer for Linux.
+
+strace is released under a Berkeley-style license at the request
+of Paul Kranenburg.
+
+See the file CREDITS for a list of authors and other contributors.
+See the file INSTALL for compilation and installation instructions.
+See the file NEWS for information on what has changed in recent versions.
+
+The project's homepage is at
+	https://sourceforge.net/projects/strace/
+
+strace has a mailing list:
+	strace-devel@lists.sourceforge.net.
+
+System requirements:
+	* Linux kernel >= 2.6.18 is recommended.  Older versions might still work
+	  but they haven't been thoroughly tested with this release.
+	* 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.
diff --git a/strace/README-hacking b/strace/README-hacking
new file mode 100644
index 0000000..16d12c0
--- /dev/null
+++ b/strace/README-hacking
@@ -0,0 +1,32 @@
+Requirements
+============
+If you use the GIT version of strace there will be some files missing
+that you need to build strace.  These files are generated by tools from
+the GNU Autoconf and Automake packages.
+
+Note: rather than run `autoreconf' directly, use the `./bootstrap' script.
+
+
+No more ChangeLog file
+======================
+Do not create or modify the ChangeLog files.  Starting at 2009-07-09, the
+policy changed.  Before, we would insert the exact same text (or worse,
+sometimes slightly differing) into both the ChangeLog file and the commit
+log.  Now we put that information only in the commit log, and generate
+the top-level ChangeLog file from logs at "make dist" time.  As such,
+there are strict requirements on the form of the commit log messages.
+
+
+Commit log requirements
+=======================
+Each commit log should always start with a one-line summary, the second
+line should be blank, and the remaining lines are usually ChangeLog-style
+entries for all affected files, except the leading TABs which should
+be omitted.
+
+
+Documentation
+=============
+All noteworthy changes should be mentioned in NEWS.  All changes in strace
+command interface should be reflected in the man page.  New options should
+be documented both in -h output and in the man page.
diff --git a/strace/README-linux-ptrace b/strace/README-linux-ptrace
new file mode 100644
index 0000000..97e2c01
--- /dev/null
+++ b/strace/README-linux-ptrace
@@ -0,0 +1,542 @@
+This document describes Linux ptrace implementation in Linux kernels
+version 3.0.0. (Update this notice if you update the document
+to reflect newer kernels).
+
+
+		Ptrace userspace API.
+
+Ptrace API (ab)uses standard Unix parent/child signaling over waitpid.
+An unfortunate effect of it is that resulting API is complex and has
+subtle quirks. This document aims to describe these quirks.
+
+Debugged processes (tracees) first need to be attached to the debugging
+process (tracer). Attachment and subsequent commands are per-thread: in
+multi-threaded process, every thread can be individually attached to a
+(potentially different) tracer, or left not attached and thus not
+debugged. Therefore, "tracee" always means "(one) thread", never "a
+(possibly multi-threaded) process". Ptrace commands are always sent to
+a specific tracee using ptrace(PTRACE_foo, pid, ...), where pid is a
+TID of the corresponding Linux thread.
+
+After attachment, each tracee can be in two states: running or stopped.
+
+There are many kinds of states when tracee is stopped, and in ptrace
+discussions they are often conflated. Therefore, it is important to use
+precise terms.
+
+In this document, any stopped state in which tracee is ready to accept
+ptrace commands from the tracer is called ptrace-stop. Ptrace-stops can
+be further subdivided into signal-delivery-stop, group-stop,
+syscall-stop and so on. They are described in detail later.
+
+
+	1.x Death under ptrace.
+
+When a (possibly multi-threaded) process receives a killing signal (a
+signal set to SIG_DFL and whose default action is to kill the process),
+all threads exit. Tracees report their death to the tracer(s). This is
+not a ptrace-stop (because tracer can't query tracee status such as
+register contents, cannot restart tracee etc) but the notification
+about this event is delivered through waitpid API similarly to
+ptrace-stop.
+
+Note that killing signal will first cause signal-delivery-stop (on one
+tracee only), and only after it is injected by tracer (or after it was
+dispatched to a thread which isn't traced), death from signal will
+happen on ALL tracees within multi-threaded process.
+
+SIGKILL operates similarly, with exceptions. No signal-delivery-stop is
+generated for SIGKILL and therefore tracer can't suppress it. SIGKILL
+kills even within syscalls (syscall-exit-stop is not generated prior to
+death by SIGKILL). The net effect is that SIGKILL always kills the
+process (all its threads), even if some threads of the process are
+ptraced.
+
+Tracer can kill a tracee with ptrace(PTRACE_KILL, pid, 0, 0). This
+operation is deprecated, use kill/tgkill(SIGKILL) instead.
+
+^^^ Oleg prefers to deprecate it instead of describing (and needing to
+support) PTRACE_KILL's quirks.
+
+When tracee executes exit syscall, it reports its death to its tracer.
+Other threads are not affected.
+
+When any thread executes exit_group syscall, every tracee in its thread
+group reports its death to its tracer.
+
+If PTRACE_O_TRACEEXIT option is on, PTRACE_EVENT_EXIT will happen
+before actual death. This applies to exits on exit syscall, group_exit
+syscall, signal deaths (except SIGKILL), and when threads are torn down
+on execve in multi-threaded process.
+
+Tracer cannot assume that ptrace-stopped tracee exists. There are many
+scenarios when tracee may die while stopped (such as SIGKILL).
+Therefore, tracer must always be prepared to handle ESRCH error on any
+ptrace operation. Unfortunately, the same error is returned if tracee
+exists but is not ptrace-stopped (for commands which require stopped
+tracee), or if it is not traced by process which issued ptrace call.
+Tracer needs to keep track of stopped/running state, and interpret
+ESRCH as "tracee died unexpectedly" only if it knows that tracee has
+been observed to enter ptrace-stop. Note that there is no guarantee
+that waitpid(WNOHANG) will reliably report tracee's death status if
+ptrace operation returned ESRCH. waitpid(WNOHANG) may return 0 instead.
+IOW: tracee may be "not yet fully dead" but already refusing ptrace ops.
+
+Tracer can not assume that tracee ALWAYS ends its life by reporting
+WIFEXITED(status) or WIFSIGNALED(status).
+
+??? or can it? Do we include such a promise into ptrace API?
+
+
+	1.x Stopped states.
+
+When running tracee enters ptrace-stop, it notifies its tracer using
+waitpid API. Tracer should use waitpid family of syscalls to wait for
+tracee to stop. Most of this document assumes that tracer waits with:
+
+	pid = waitpid(pid_or_minus_1, &status, __WALL);
+
+Ptrace-stopped tracees are reported as returns with pid > 0 and
+WIFSTOPPED(status) == true.
+
+??? Do we require __WALL usage, or will just using 0 be ok? Are the
+rules different if user wants to use waitid? Will waitid require
+WEXITED?
+
+__WALL value does not include WSTOPPED and WEXITED bits, but implies
+their functionality.
+
+Setting of WCONTINUED bit in waitpid flags is not recommended: the
+continued state is per-process and consuming it can confuse real parent
+of the tracee.
+
+Use of WNOHANG bit in waitpid flags may cause waitpid return 0 ("no
+wait results available yet") even if tracer knows there should be a
+notification. Example: kill(tracee, SIGKILL); waitpid(tracee, &status,
+__WALL | WNOHANG);
+
+??? waitid usage? WNOWAIT?
+
+??? describe how wait notifications queue (or not queue)
+
+The following kinds of ptrace-stops exist: signal-delivery-stops,
+group-stop, PTRACE_EVENT stops, syscall-stops [, SINGLESTEP, SYSEMU,
+SYSEMU_SINGLESTEP]. They all are reported as waitpid result with
+WIFSTOPPED(status) == true. They may be differentiated by checking
+(status >> 8) value, and if looking at (status >> 8) value doesn't
+resolve ambiguity, by querying PTRACE_GETSIGINFO. (Note:
+WSTOPSIG(status) macro returns ((status >> 8) & 0xff) value).
+
+
+	1.x.x Signal-delivery-stop
+
+When (possibly multi-threaded) process receives any signal except
+SIGKILL, kernel selects a thread which handles the signal (if signal is
+generated with t[g]kill, thread selection is done by user). If selected
+thread is traced, it enters signal-delivery-stop. By this point, signal
+is not yet delivered to the process, and can be suppressed by tracer.
+If tracer doesn't suppress the signal, it passes signal to tracee in
+the next ptrace request. This second step of signal delivery is called
+"signal injection" in this document. Note that if signal is blocked,
+signal-delivery-stop doesn't happen until signal is unblocked, with the
+usual exception that SIGSTOP can't be blocked.
+
+Signal-delivery-stop is observed by tracer as waitpid returning with
+WIFSTOPPED(status) == true, WSTOPSIG(status) == signal. If
+WSTOPSIG(status) == SIGTRAP, this may be a different kind of
+ptrace-stop - see "Syscall-stops" and "execve" sections below for
+details. If WSTOPSIG(status) == stopping signal, this may be a
+group-stop - see below.
+
+
+	1.x.x Signal injection and suppression.
+
+After signal-delivery-stop is observed by tracer, tracer should restart
+tracee with
+
+	ptrace(PTRACE_rest, pid, 0, sig)
+
+call, where PTRACE_rest is one of the restarting ptrace ops. If sig is
+0, then signal is not delivered. Otherwise, signal sig is delivered.
+This operation is called "signal injection" in this document, to
+distinguish it from signal-delivery-stop.
+
+Note that sig value may be different from WSTOPSIG(status) value -
+tracer can cause a different signal to be injected.
+
+Note that suppressed signal still causes syscalls to return
+prematurely. Kernel should always restart the syscall in this case:
+tracer would observe a new syscall-enter-stop for the same syscall,
+or, in case of syscalls returning ERESTART_RESTARTBLOCK,
+tracer would observe a syscall-enter-stop for restart_syscall(2)
+syscall. There may still be bugs in this area which cause some syscalls
+to instead return with -EINTR even though no observable signal
+was injected to the tracee.
+
+This is a cause of confusion among ptrace users. One typical scenario
+is that tracer observes group-stop, mistakes it for
+signal-delivery-stop, restarts tracee with ptrace(PTRACE_rest, pid, 0,
+stopsig) with the intention of injecting stopsig, but stopsig gets
+ignored and tracee continues to run.
+
+SIGCONT signal has a side effect of waking up (all threads of)
+group-stopped process. This side effect happens before
+signal-delivery-stop. Tracer can't suppress this side-effect (it can
+only suppress signal injection, which only causes SIGCONT handler to
+not be executed in the tracee, if such handler is installed). In fact,
+waking up from group-stop may be followed by signal-delivery-stop for
+signal(s) *other than* SIGCONT, if they were pending when SIGCONT was
+delivered. IOW: SIGCONT may be not the first signal observed by the
+tracee after it was sent.
+
+Stopping signals cause (all threads of) process to enter group-stop.
+This side effect happens after signal injection, and therefore can be
+suppressed by tracer.
+
+PTRACE_GETSIGINFO can be used to retrieve siginfo_t structure which
+corresponds to delivered signal. PTRACE_SETSIGINFO may be used to
+modify it. If PTRACE_SETSIGINFO has been used to alter siginfo_t,
+si_signo field and sig parameter in restarting command must match,
+otherwise the result is undefined.
+
+
+	1.x.x Group-stop
+
+When a (possibly multi-threaded) process receives a stopping signal,
+all threads stop. If some threads are traced, they enter a group-stop.
+Note that stopping signal will first cause signal-delivery-stop (on one
+tracee only), and only after it is injected by tracer (or after it was
+dispatched to a thread which isn't traced), group-stop will be
+initiated on ALL tracees within multi-threaded process. As usual, every
+tracee reports its group-stop separately to corresponding tracer.
+
+Group-stop is observed by tracer as waitpid returning with
+WIFSTOPPED(status) == true, WSTOPSIG(status) == signal. The same result
+is returned by some other classes of ptrace-stops, therefore the
+recommended practice is to perform
+
+	ptrace(PTRACE_GETSIGINFO, pid, 0, &siginfo)
+
+call. The call can be avoided if signal number is not SIGSTOP, SIGTSTP,
+SIGTTIN or SIGTTOU - only these four signals are stopping signals. If
+tracer sees something else, it can't be group-stop. Otherwise, tracer
+needs to call PTRACE_GETSIGINFO. If PTRACE_GETSIGINFO fails with
+EINVAL, then it is definitely a group-stop. (Other failure codes are
+possible, such as ESRCH "no such process" if SIGKILL killed the tracee).
+
+As of kernel 2.6.38, after tracer sees tracee ptrace-stop and until it
+restarts or kills it, tracee will not run, and will not send
+notifications (except SIGKILL death) to tracer, even if tracer enters
+into another waitpid call.
+
+Currently, it causes a problem with transparent handling of stopping
+signals: if tracer restarts tracee after group-stop, SIGSTOP is
+effectively ignored: tracee doesn't remain stopped, it runs. If tracer
+doesn't restart tracee before entering into next waitpid, future
+SIGCONT will not be reported to the tracer. Which would make SIGCONT to
+have no effect.
+
+
+	1.x.x PTRACE_EVENT stops
+
+If tracer sets TRACE_O_TRACEfoo options, tracee will enter ptrace-stops
+called PTRACE_EVENT stops.
+
+PTRACE_EVENT stops are observed by tracer as waitpid returning with
+WIFSTOPPED(status) == true, WSTOPSIG(status) == SIGTRAP. Additional bit
+is set in a higher byte of status word: value ((status >> 8) & 0xffff)
+will be (SIGTRAP | PTRACE_EVENT_foo << 8). The following events exist:
+
+PTRACE_EVENT_VFORK - stop before return from vfork/clone+CLONE_VFORK.
+When tracee is continued after this, it will wait for child to
+exit/exec before continuing its execution (IOW: usual behavior on
+vfork).
+
+PTRACE_EVENT_FORK - stop before return from fork/clone+SIGCHLD
+
+PTRACE_EVENT_CLONE - stop before return from clone
+
+PTRACE_EVENT_VFORK_DONE - stop before return from
+vfork/clone+CLONE_VFORK, but after vfork child unblocked this tracee by
+exiting or exec'ing.
+
+For all four stops described above: stop occurs in parent, not in newly
+created thread. PTRACE_GETEVENTMSG can be used to retrieve new thread's
+tid.
+
+PTRACE_EVENT_EXEC - stop before return from exec.
+
+PTRACE_EVENT_EXIT - stop before exit (including death from exit_group),
+signal death, or exit caused by execve in multi-threaded process.
+PTRACE_GETEVENTMSG returns exit status. Registers can be examined
+(unlike when "real" exit happens). The tracee is still alive, it needs
+to be PTRACE_CONTed or PTRACE_DETACHed to finish exit.
+
+PTRACE_GETSIGINFO on PTRACE_EVENT stops returns si_signo = SIGTRAP,
+si_code = (event << 8) | SIGTRAP.
+
+
+	1.x.x Syscall-stops
+
+If tracee was restarted by PTRACE_SYSCALL, tracee enters
+syscall-enter-stop just prior to entering any syscall. If tracer
+restarts it with PTRACE_SYSCALL, tracee enters syscall-exit-stop when
+syscall is finished, or if it is interrupted by a signal. (That is,
+signal-delivery-stop never happens between syscall-enter-stop and
+syscall-exit-stop, it happens *after* syscall-exit-stop).
+
+Other possibilities are that tracee may stop in a PTRACE_EVENT stop,
+exit (if it entered exit or exit_group syscall), be killed by SIGKILL,
+or die silently (if execve syscall happened in another thread).
+
+Syscall-enter-stop and syscall-exit-stop are observed by tracer as
+waitpid returning with WIFSTOPPED(status) == true, WSTOPSIG(status) ==
+SIGTRAP. If PTRACE_O_TRACESYSGOOD option was set by tracer, then
+WSTOPSIG(status) == (SIGTRAP | 0x80).
+
+Syscall-stops can be distinguished from signal-delivery-stop with
+SIGTRAP by querying PTRACE_GETSIGINFO: si_code <= 0 if sent by usual
+suspects like [tg]kill/sigqueue/etc; or = SI_KERNEL (0x80) if sent by
+kernel, whereas syscall-stops have si_code = SIGTRAP or (SIGTRAP |
+0x80). However, syscall-stops happen very often (twice per syscall),
+and performing PTRACE_GETSIGINFO for every syscall-stop may be somewhat
+expensive.
+
+Some architectures allow to distinguish them by examining registers.
+For example, on x86 rax = -ENOSYS in syscall-enter-stop. Since SIGTRAP
+(like any other signal) always happens *after* syscall-exit-stop, and
+at this point rax almost never contains -ENOSYS, SIGTRAP looks like
+"syscall-stop which is not syscall-enter-stop", IOW: it looks like a
+"stray syscall-exit-stop" and can be detected this way. But such
+detection is fragile and is best avoided.
+
+Using PTRACE_O_TRACESYSGOOD option is a recommended method, since it is
+reliable and does not incur performance penalty.
+
+Syscall-enter-stop and syscall-exit-stop are indistinguishable from
+each other by tracer. Tracer needs to keep track of the sequence of
+ptrace-stops in order to not misinterpret syscall-enter-stop as
+syscall-exit-stop or vice versa. The rule is that syscall-enter-stop is
+always followed by syscall-exit-stop, PTRACE_EVENT stop or tracee's
+death - no other kinds of ptrace-stop can occur in between.
+
+If after syscall-enter-stop tracer uses restarting command other than
+PTRACE_SYSCALL, syscall-exit-stop is not generated.
+
+PTRACE_GETSIGINFO on syscall-stops returns si_signo = SIGTRAP, si_code
+= SIGTRAP or (SIGTRAP | 0x80).
+
+
+	1.x.x SINGLESTEP, SYSEMU, SYSEMU_SINGLESTEP
+
+??? document PTRACE_SINGLESTEP, PTRACE_SYSEMU, PTRACE_SYSEMU_SINGLESTEP
+
+
+	1.x Informational and restarting ptrace commands.
+
+Most ptrace commands (all except ATTACH, TRACEME, KILL) require tracee
+to be in ptrace-stop, otherwise they fail with ESRCH.
+
+When tracee is in ptrace-stop, tracer can read and write data to tracee
+using informational commands. They leave tracee in ptrace-stopped state:
+
+longv = ptrace(PTRACE_PEEKTEXT/PEEKDATA/PEEKUSER, pid, addr, 0);
+	ptrace(PTRACE_POKETEXT/POKEDATA/POKEUSER, pid, addr, long_val);
+	ptrace(PTRACE_GETREGS/GETFPREGS, pid, 0, &struct);
+	ptrace(PTRACE_SETREGS/SETFPREGS, pid, 0, &struct);
+	ptrace(PTRACE_GETSIGINFO, pid, 0, &siginfo);
+	ptrace(PTRACE_SETSIGINFO, pid, 0, &siginfo);
+	ptrace(PTRACE_GETEVENTMSG, pid, 0, &long_var);
+	ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_flags);
+
+Note that some errors are not reported. For example, setting siginfo
+may have no effect in some ptrace-stops, yet the call may succeed
+(return 0 and don't set errno).
+
+ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_flags) affects one tracee.
+Current flags are replaced. Flags are inherited by new tracees created
+and "auto-attached" via active PTRACE_O_TRACE[V]FORK or
+PTRACE_O_TRACECLONE options.
+
+Another group of commands makes ptrace-stopped tracee run. They have
+the form:
+
+	ptrace(PTRACE_cmd, pid, 0, sig);
+
+where cmd is CONT, DETACH, SYSCALL, SINGLESTEP, SYSEMU, or
+SYSEMU_SINGLESTEP. If tracee is in signal-delivery-stop, sig is the
+signal to be injected. Otherwise, sig may be ignored.
+
+
+	1.x Attaching and detaching
+
+A thread can be attached to tracer using ptrace(PTRACE_ATTACH, pid, 0,
+0) call. This also sends SIGSTOP to this thread. If tracer wants this
+SIGSTOP to have no effect, it needs to suppress it. Note that if other
+signals are concurrently sent to this thread during attach, tracer may
+see tracee enter signal-delivery-stop with other signal(s) first! The
+usual practice is to reinject these signals until SIGSTOP is seen, then
+suppress SIGSTOP injection. The design bug here is that attach and
+concurrent SIGSTOP are racing and SIGSTOP may be lost.
+
+??? Describe how to attach to a thread which is already group-stopped.
+
+Since attaching sends SIGSTOP and tracer usually suppresses it, this
+may cause stray EINTR return from the currently executing syscall in
+the tracee, as described in "signal injection and suppression" section.
+
+ptrace(PTRACE_TRACEME, 0, 0, 0) request turns current thread into a
+tracee. It continues to run (doesn't enter ptrace-stop). A common
+practice is to follow ptrace(PTRACE_TRACEME) with raise(SIGSTOP) and
+allow parent (which is our tracer now) to observe our
+signal-delivery-stop.
+
+If PTRACE_O_TRACE[V]FORK or PTRACE_O_TRACECLONE options are in effect,
+then children created by (vfork or clone(CLONE_VFORK)), (fork or
+clone(SIGCHLD)) and (other kinds of clone) respectively are
+automatically attached to the same tracer which traced their parent.
+SIGSTOP is delivered to them, causing them to enter
+signal-delivery-stop after they exit syscall which created them.
+
+Detaching of tracee is performed by ptrace(PTRACE_DETACH, pid, 0, sig).
+PTRACE_DETACH is a restarting operation, therefore it requires tracee
+to be in ptrace-stop. If tracee is in signal-delivery-stop, signal can
+be injected. Othervice, sig parameter may be silently ignored.
+
+If tracee is running when tracer wants to detach it, the usual solution
+is to send SIGSTOP (using tgkill, to make sure it goes to the correct
+thread), wait for tracee to stop in signal-delivery-stop for SIGSTOP
+and then detach it (suppressing SIGSTOP injection). Design bug is that
+this can race with concurrent SIGSTOPs. Another complication is that
+tracee may enter other ptrace-stops and needs to be restarted and
+waited for again, until SIGSTOP is seen. Yet another complication is to
+be sure that tracee is not already ptrace-stopped, because no signal
+delivery happens while it is - not even SIGSTOP.
+
+??? Describe how to detach from a group-stopped tracee so that it
+    doesn't run, but continues to wait for SIGCONT.
+
+If tracer dies, all tracees are automatically detached and restarted,
+unless they were in group-stop. Handling of restart from group-stop is
+currently buggy, but "as planned" behavior is to leave tracee stopped
+and waiting for SIGCONT. If tracee is restarted from
+signal-delivery-stop, pending signal is injected.
+
+
+	1.x execve under ptrace.
+
+During execve, kernel destroys all other threads in the process, and
+resets execve'ing thread tid to tgid (process id). This looks very
+confusing to tracers:
+
+All other threads stop in PTRACE_EXIT stop, if requested by active
+ptrace option. Then all other threads except thread group leader report
+death as if they exited via exit syscall with exit code 0. Then
+PTRACE_EVENT_EXEC stop happens, if requested by active ptrace option
+(on which tracee - leader? execve-ing one?).
+
+The execve-ing tracee changes its pid while it is in execve syscall.
+(Remember, under ptrace 'pid' returned from waitpid, or fed into ptrace
+calls, is tracee's tid). That is, pid is reset to process id, which
+coincides with thread group leader tid.
+
+If thread group leader has reported its death by this time, for tracer
+this looks like dead thread leader "reappears from nowhere". If thread
+group leader was still alive, for tracer this may look as if thread
+group leader returns from a different syscall than it entered, or even
+"returned from syscall even though it was not in any syscall". If
+thread group leader was not traced (or was traced by a different
+tracer), during execve it will appear as if it has become a tracee of
+the tracer of execve'ing tracee. All these effects are the artifacts of
+pid change.
+
+PTRACE_O_TRACEEXEC option is the recommended tool for dealing with this
+case. It enables PTRACE_EVENT_EXEC stop which occurs before execve
+syscall return.
+
+Pid change happens before PTRACE_EVENT_EXEC stop, not after.
+
+When tracer receives PTRACE_EVENT_EXEC stop notification, it is
+guaranteed that except this tracee and thread group leader, no other
+threads from the process are alive.
+
+On receiving this notification, tracer should clean up all its internal
+data structures about all threads of this process, and retain only one
+data structure, one which describes single still running tracee, with
+pid = tgid = process id.
+
+Currently, there is no way to retrieve former pid of execve-ing tracee.
+If tracer doesn't keep track of its tracees' thread group relations, it
+may be unable to know which tracee  execve-ed and therefore no longer
+exists under old pid due to pid change.
+
+Example: two threads execve at the same time:
+
+  ** we get syscall-entry-stop in thread 1: **
+ PID1 execve("/bin/foo", "foo" <unfinished ...>
+  ** we issue PTRACE_SYSCALL for thread 1 **
+  ** we get syscall-entry-stop in thread 2: **
+ PID2 execve("/bin/bar", "bar" <unfinished ...>
+  ** we issue PTRACE_SYSCALL for thread 2 **
+  ** we get PTRACE_EVENT_EXEC for PID0, we issue PTRACE_SYSCALL **
+  ** we get syscall-exit-stop for PID0: **
+ PID0 <... execve resumed> )             = 0
+
+In this situation there is no way to know which execve succeeded.
+
+If PTRACE_O_TRACEEXEC option is NOT in effect for the execve'ing
+tracee, kernel delivers an extra SIGTRAP to tracee after execve syscall
+returns. This is an ordinary signal (similar to one which can be
+generated by "kill -TRAP"), not a special kind of ptrace-stop.
+GETSIGINFO on it has si_code = 0 (SI_USER). It can be blocked by signal
+mask, and thus can happen (much) later.
+
+Usually, tracer (for example, strace) would not want to show this extra
+post-execve SIGTRAP signal to the user, and would suppress its delivery
+to the tracee (if SIGTRAP is set to SIG_DFL, it is a killing signal).
+However, determining *which* SIGTRAP to suppress is not easy. Setting
+PTRACE_O_TRACEEXEC option and thus suppressing this extra SIGTRAP is
+the recommended approach.
+
+
+	1.x Real parent
+
+Ptrace API (ab)uses standard Unix parent/child signaling over waitpid.
+This used to cause real parent of the process to stop receiving several
+kinds of waitpid notifications when child process is traced by some
+other process.
+
+Many of these bugs have been fixed, but as of 2.6.38 several still
+exist.
+
+As of 2.6.38, the following is believed to work correctly:
+
+- exit/death by signal is reported first to tracer, then, when tracer
+consumes waitpid result, to real parent (to real parent only when the
+whole multi-threaded process exits). If they are the same process, the
+report is sent only once.
+
+
+	1.x Known bugs
+
+Following bugs still exist:
+
+Group-stop notifications are sent to tracer, but not to real parent.
+Last confirmed on 2.6.38.6.
+
+If thread group leader is traced and exits by calling exit syscall,
+PTRACE_EVENT_EXIT stop will happen for it (if requested), but subsequent
+WIFEXITED notification will not be delivered until all other threads
+exit. As explained above, if one of other threads execve's, thread
+group leader death will *never* be reported. If execve-ed thread is not
+traced by this tracer, tracer will never know that execve happened.
+
+??? need to test this scenario
+
+One possible workaround is to detach thread group leader instead of
+restarting it in this case. Last confirmed on 2.6.38.6.
+
+SIGKILL signal may still cause PTRACE_EVENT_EXIT stop before actual
+signal death. This may be changed in the future - SIGKILL is meant to
+always immediately kill tasks even under ptrace. Last confirmed on
+2.6.38.6.
diff --git a/strace/README-mpers b/strace/README-mpers
new file mode 100644
index 0000000..ad1ca18
--- /dev/null
+++ b/strace/README-mpers
@@ -0,0 +1,14 @@
+To use mpers functionality, one should:
+* typedef all of the target types which are compound and not typedefed
+already;
+* for each target type, include DEF_MPERS_TYPE(target_type_t), these can
+be included conditionally;
+* include MPERS_DEFS once;
+* before inclusion of MPERS_DEFS include all important headers
+(containing definitions of these types or other behaviour-affecting
+defines);
+* printers should be defined
+as MPERS_PRINTER_DECL(return_type, function_name, args),
+inside files that include MPERS_DEFS these printers should be called
+as MPERS_FUNC_NAME(function_name)(args), in other files
+they should be called just as function_name(args).
diff --git a/strace/README.md b/strace/README.md
new file mode 100644
index 0000000..71c6ec0
--- /dev/null
+++ b/strace/README.md
@@ -0,0 +1,9 @@
+This is [strace](http://strace.io) -- a diagnostic, debugging and instructional userspace utility for Linux.  It is used to monitor interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state.  The operation of strace is made possible by the kernel feature known as [ptrace](http://man7.org/linux/man-pages/man2/ptrace.2.html).
+
+strace is released under a Berkeley-style license at the request of Paul Kranenburg; see the file [COPYING](https://raw.githubusercontent.com/strace/strace/master/COPYING) for details.
+
+See the file [NEWS](https://raw.githubusercontent.com/strace/strace/master/NEWS) for information on what has changed in recent versions.
+
+Please send bug reports and enhancements to [the strace mailing list](https://lists.sourceforge.net/lists/listinfo/strace-devel).
+
+[![Build Status](https://travis-ci.org/strace/strace.svg?branch=master)](https://travis-ci.org/strace/strace) [![Code Coverage](https://codecov.io/github/strace/strace/coverage.svg?branch=master)](https://codecov.io/github/strace/strace?branch=master)
diff --git a/strace/access.c b/strace/access.c
new file mode 100644
index 0000000..a9663dc
--- /dev/null
+++ b/strace/access.c
@@ -0,0 +1,26 @@
+#include "defs.h"
+
+#include <fcntl.h>
+
+#include "xlat/access_flags.h"
+
+static int
+decode_access(struct tcb *tcp, int offset)
+{
+	printpath(tcp, tcp->u_arg[offset]);
+	tprints(", ");
+	printflags(access_flags, tcp->u_arg[offset + 1], "?_OK");
+
+	return RVAL_DECODED;
+}
+
+SYS_FUNC(access)
+{
+	return decode_access(tcp, 0);
+}
+
+SYS_FUNC(faccessat)
+{
+	print_dirfd(tcp, tcp->u_arg[0]);
+	return decode_access(tcp, 1);
+}
diff --git a/strace/affinity.c b/strace/affinity.c
new file mode 100644
index 0000000..6b6eaa3
--- /dev/null
+++ b/strace/affinity.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2002-2004 Roland McGrath <roland@redhat.com>
+ * Copyright (c) 2009-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include <sched.h>
+
+static unsigned int
+get_cpuset_size(void)
+{
+	static unsigned int cpuset_size;
+
+	if (!cpuset_size) {
+		pid_t pid = getpid();
+		cpuset_size = 128;
+		while (cpuset_size &&
+		       sched_getaffinity(pid, cpuset_size, NULL) == -1 &&
+		       EINVAL == errno) {
+			cpuset_size <<= 1;
+		}
+		if (!cpuset_size)
+			cpuset_size = 128;
+	}
+
+	return cpuset_size;
+}
+
+static void
+print_affinitylist(struct tcb *tcp, const unsigned long addr, const unsigned int len)
+{
+	const unsigned int max_size = get_cpuset_size();
+	const unsigned int umove_size = len < max_size ? len : max_size;
+	const unsigned int size =
+		(umove_size + current_wordsize - 1) & -current_wordsize;
+	const unsigned int ncpu = size * 8;
+	void *cpu;
+
+	if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)) ||
+	    !addr || !len || !(cpu = calloc(size, 1))) {
+		printaddr(addr);
+		return;
+	}
+
+	if (!umoven_or_printaddr(tcp, addr, umove_size, cpu)) {
+		int i = 0;
+		const char *sep = "";
+
+		tprints("[");
+		for (;; i++) {
+			i = next_set_bit(cpu, i, ncpu);
+			if (i < 0)
+				break;
+			tprintf("%s%d", sep, i);
+			sep = " ";
+		}
+		if (size < len)
+			tprintf("%s...", sep);
+		tprints("]");
+	}
+
+	free(cpu);
+}
+
+SYS_FUNC(sched_setaffinity)
+{
+	const int pid = tcp->u_arg[0];
+	const unsigned int len = tcp->u_arg[1];
+
+	tprintf("%d, %u, ", pid, len);
+	print_affinitylist(tcp, tcp->u_arg[2], len);
+
+	return RVAL_DECODED;
+}
+
+SYS_FUNC(sched_getaffinity)
+{
+	const int pid = tcp->u_arg[0];
+	const unsigned int len = tcp->u_arg[1];
+
+	if (entering(tcp)) {
+		tprintf("%d, %u, ", pid, len);
+	} else {
+		print_affinitylist(tcp, tcp->u_arg[2], tcp->u_rval);
+	}
+	return 0;
+}
diff --git a/strace/aio.c b/strace/aio.c
new file mode 100644
index 0000000..29562d2
--- /dev/null
+++ b/strace/aio.c
@@ -0,0 +1,252 @@
+/*
+ * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+ * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+ * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+ * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include <linux/aio_abi.h>
+
+SYS_FUNC(io_setup)
+{
+	if (entering(tcp))
+		tprintf("%u, ", (unsigned int) tcp->u_arg[0]);
+	else
+		printnum_ulong(tcp, tcp->u_arg[1]);
+	return 0;
+}
+
+SYS_FUNC(io_destroy)
+{
+	tprintf("%lu", tcp->u_arg[0]);
+
+	return RVAL_DECODED;
+}
+
+enum iocb_sub {
+	SUB_NONE, SUB_COMMON, SUB_VECTOR
+};
+
+static enum iocb_sub
+tprint_lio_opcode(unsigned cmd)
+{
+	static const struct {
+		const char *name;
+		enum iocb_sub sub;
+	} cmds[] = {
+		{ "pread", SUB_COMMON },
+		{ "pwrite", SUB_COMMON },
+		{ "fsync", SUB_NONE },
+		{ "fdsync", SUB_NONE },
+		{ "preadx", SUB_NONE },
+		{ "poll", SUB_NONE },
+		{ "noop", SUB_NONE },
+		{ "preadv", SUB_VECTOR },
+		{ "pwritev", SUB_VECTOR },
+	};
+
+	if (cmd < ARRAY_SIZE(cmds)) {
+		tprints(cmds[cmd].name);
+		return cmds[cmd].sub;
+	}
+	tprintf("%u /* SUB_??? */", cmd);
+	return SUB_NONE;
+}
+
+static void
+print_common_flags(const struct iocb *cb)
+{
+/* IOCB_FLAG_RESFD is available since v2.6.22-rc1~47 */
+#ifdef IOCB_FLAG_RESFD
+	if (cb->aio_flags & IOCB_FLAG_RESFD)
+		tprintf(", resfd=%d", cb->aio_resfd);
+	if (cb->aio_flags & ~IOCB_FLAG_RESFD)
+		tprintf(", flags=%x", cb->aio_flags);
+#endif
+}
+
+static bool
+iocb_is_valid(const struct iocb *cb)
+{
+	return cb->aio_buf == (unsigned long) cb->aio_buf &&
+	       cb->aio_nbytes == (size_t) cb->aio_nbytes &&
+	       (ssize_t) cb->aio_nbytes >= 0;
+}
+
+static enum iocb_sub
+print_iocb_header(const struct iocb *cb)
+{
+	enum iocb_sub sub;
+
+	if (cb->aio_data)
+		tprintf("data=%#" PRIx64 ", ",
+			(uint64_t) cb->aio_data);
+
+	if (cb->aio_key)
+		tprintf("key=%u, ", cb->aio_key);
+
+	sub = tprint_lio_opcode(cb->aio_lio_opcode);
+	if (cb->aio_reqprio)
+		tprintf(", reqprio=%hd", cb->aio_reqprio);
+
+	tprintf(", fildes=%d", cb->aio_fildes);
+
+	return sub;
+}
+
+static void
+print_iocb(struct tcb *tcp, const struct iocb *cb)
+{
+	enum iocb_sub sub = print_iocb_header(cb);
+
+	switch (sub) {
+	case SUB_COMMON:
+		if (cb->aio_lio_opcode == 1 && iocb_is_valid(cb)) {
+			tprints(", str=");
+			printstr(tcp, (unsigned long) cb->aio_buf,
+				 (unsigned long) cb->aio_nbytes);
+		} else {
+			tprintf(", buf=%#" PRIx64, (uint64_t) cb->aio_buf);
+		}
+		tprintf(", nbytes=%" PRIu64 ", offset=%" PRId64,
+			(uint64_t) cb->aio_nbytes, (int64_t) cb->aio_offset);
+		print_common_flags(cb);
+		break;
+	case SUB_VECTOR:
+		if (iocb_is_valid(cb)) {
+			tprints(", iovec=");
+			tprint_iov(tcp, cb->aio_nbytes, cb->aio_buf,
+				   cb->aio_lio_opcode == 8
+				   ? IOV_DECODE_STR
+				   : IOV_DECODE_ADDR);
+		} else {
+			tprintf(", buf=%#" PRIx64 ", nbytes=%" PRIu64,
+				(uint64_t) cb->aio_buf,
+				(uint64_t) cb->aio_nbytes);
+		}
+		tprintf(", offset=%" PRId64, (int64_t) cb->aio_offset);
+		print_common_flags(cb);
+		break;
+	case SUB_NONE:
+		break;
+	}
+}
+
+static bool
+print_iocbp(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data)
+{
+	unsigned long addr;
+	struct iocb cb;
+
+	if (elem_size < sizeof(long)) {
+		addr = * (unsigned int *) elem_buf;
+	} else {
+		addr = * (unsigned long *) elem_buf;
+	}
+
+	tprints("{");
+	if (!umove_or_printaddr(tcp, addr, &cb))
+		print_iocb(tcp, &cb);
+	tprints("}");
+
+	return true;
+}
+
+SYS_FUNC(io_submit)
+{
+	const long nr = widen_to_long(tcp->u_arg[1]);
+	const unsigned long addr = tcp->u_arg[2];
+	unsigned long iocbp;
+
+	tprintf("%lu, %ld, ", tcp->u_arg[0], nr);
+
+	if (nr < 0)
+		printaddr(addr);
+	else
+		print_array(tcp, addr, nr, &iocbp, current_wordsize,
+			    umoven_or_printaddr, print_iocbp, 0);
+
+	return RVAL_DECODED;
+}
+
+static bool
+print_io_event(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data)
+{
+	struct io_event *event = elem_buf;
+
+	tprintf("{data=%#" PRIx64 ", obj=%#" PRIx64
+		", res=%" PRId64 ", res2=%" PRId64 "}",
+		(uint64_t) event->data, (uint64_t) event->obj,
+		(int64_t) event->res, (int64_t) event->res2);
+
+	return true;
+}
+
+SYS_FUNC(io_cancel)
+{
+	if (entering(tcp)) {
+		tprintf("%lu, ", tcp->u_arg[0]);
+		struct iocb cb;
+
+		if (!umove_or_printaddr(tcp, tcp->u_arg[1], &cb)) {
+			tprints("{");
+			print_iocb_header(&cb);
+			tprints("}");
+		}
+		tprints(", ");
+	} else {
+		struct io_event event;
+
+		if (!umove_or_printaddr(tcp, tcp->u_arg[2], &event))
+			print_io_event(tcp, &event, sizeof(event), 0);
+	}
+	return 0;
+}
+
+SYS_FUNC(io_getevents)
+{
+	if (entering(tcp)) {
+		tprintf("%lu, %ld, %ld, ",
+			tcp->u_arg[0],
+			widen_to_long(tcp->u_arg[1]),
+			widen_to_long(tcp->u_arg[2]));
+	} else {
+		struct io_event buf;
+		print_array(tcp, tcp->u_arg[3], tcp->u_rval, &buf, sizeof(buf),
+			    umoven_or_printaddr, print_io_event, 0);
+		tprints(", ");
+		/*
+		 * Since the timeout parameter is read by the kernel
+		 * on entering syscall, it has to be decoded the same way
+		 * whether the syscall has failed or not.
+		 */
+		temporarily_clear_syserror(tcp);
+		print_timespec(tcp, tcp->u_arg[4]);
+		restore_cleared_syserror(tcp);
+	}
+	return 0;
+}
diff --git a/strace/alpha.c b/strace/alpha.c
new file mode 100644
index 0000000..70d4ca5
--- /dev/null
+++ b/strace/alpha.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#ifdef ALPHA
+
+static int
+decode_getxxid(struct tcb *tcp, const char *what)
+{
+	if (entering(tcp))
+		return 0;
+
+	long rval = getrval2(tcp);
+	if (rval == -1)
+		return 0;
+	static const char const fmt[] = "%s %ld";
+	static char outstr[sizeof(fmt) + 3 * sizeof(rval)];
+	snprintf(outstr, sizeof(outstr), fmt, what, rval);
+	tcp->auxstr = outstr;
+	return RVAL_STR;
+}
+
+SYS_FUNC(getxpid)
+{
+	return decode_getxxid(tcp, "ppid");
+}
+
+SYS_FUNC(getxuid)
+{
+	return decode_getxxid(tcp, "euid");
+}
+
+SYS_FUNC(getxgid)
+{
+	return decode_getxxid(tcp, "egid");
+}
+
+SYS_FUNC(osf_statfs)
+{
+	printpath(tcp, tcp->u_arg[0]);
+	tprints(", ");
+	printaddr(tcp->u_arg[1]);
+	tprints(", ");
+	tprintf("%lu", tcp->u_arg[2]);
+	return RVAL_DECODED;
+}
+
+SYS_FUNC(osf_fstatfs)
+{
+	printfd(tcp, tcp->u_arg[0]);
+	tprints(", ");
+	printaddr(tcp->u_arg[1]);
+	tprints(", ");
+	tprintf("%lu", tcp->u_arg[2]);
+	return RVAL_DECODED;
+}
+
+#endif /* ALPHA */
diff --git a/strace/bjm.c b/strace/bjm.c
new file mode 100644
index 0000000..7a72809
--- /dev/null
+++ b/strace/bjm.c
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+ * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+ * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+ * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+#include <fcntl.h>
+
+#include "xlat/delete_module_flags.h"
+
+SYS_FUNC(create_module)
+{
+	printpath(tcp, tcp->u_arg[0]);
+	tprintf(", %lu", tcp->u_arg[1]);
+
+	return RVAL_DECODED | RVAL_HEX;
+}
+
+SYS_FUNC(delete_module)
+{
+	printstr(tcp, tcp->u_arg[0], -1);
+	tprints(", ");
+	printflags(delete_module_flags, tcp->u_arg[1], "O_???");
+
+	return RVAL_DECODED;
+}
+
+SYS_FUNC(init_module)
+{
+	printaddr(tcp->u_arg[0]);
+	tprintf(", %lu, ", tcp->u_arg[1]);
+	printstr(tcp, tcp->u_arg[2], -1);
+
+	return RVAL_DECODED;
+}
+
+#define MODULE_INIT_IGNORE_MODVERSIONS  1
+#define MODULE_INIT_IGNORE_VERMAGIC     2
+
+#include "xlat/module_init_flags.h"
+
+SYS_FUNC(finit_module)
+{
+	/* file descriptor */
+	printfd(tcp, tcp->u_arg[0]);
+	tprints(", ");
+	/* param_values */
+	printstr(tcp, tcp->u_arg[1], -1);
+	tprints(", ");
+	/* flags */
+	printflags(module_init_flags, tcp->u_arg[2], "MODULE_INIT_???");
+
+	return RVAL_DECODED;
+}
diff --git a/strace/block.c b/strace/block.c
new file mode 100644
index 0000000..3c00746
--- /dev/null
+++ b/strace/block.c
@@ -0,0 +1,254 @@
+/*
+ * Copyright (c) 2009, 2010 Jeff Mahoney <jeffm@suse.com>
+ * Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#include DEF_MPERS_TYPE(struct_blk_user_trace_setup)
+#include DEF_MPERS_TYPE(struct_blkpg_ioctl_arg)
+#include DEF_MPERS_TYPE(struct_blkpg_partition)
+
+#include <linux/blkpg.h>
+#include <linux/fs.h>
+
+#define BLKTRACE_BDEV_SIZE      32
+typedef struct blk_user_trace_setup {
+	char name[BLKTRACE_BDEV_SIZE];	/* output */
+	uint16_t act_mask;		/* input */
+	uint32_t buf_size;		/* input */
+	uint32_t buf_nr;		/* input */
+	uint64_t start_lba;
+	uint64_t end_lba;
+	uint32_t pid;
+} struct_blk_user_trace_setup;
+
+typedef struct blkpg_ioctl_arg struct_blkpg_ioctl_arg;
+typedef struct blkpg_partition struct_blkpg_partition;
+
+#include MPERS_DEFS
+
+/*
+ * ioctl numbers <= 114 are present in Linux 2.4.  The following ones have been
+ * added since then and headers containing them may not be available on every
+ * system.
+ */
+
+#ifndef BLKTRACESETUP
+# define BLKTRACESETUP _IOWR(0x12, 115, struct_blk_user_trace_setup)
+#endif
+#ifndef BLKTRACESTART
+# define BLKTRACESTART _IO(0x12,116)
+#endif
+#ifndef BLKTRACESTOP
+# define BLKTRACESTOP _IO(0x12,117)
+#endif
+#ifndef BLKTRACETEARDOWN
+# define BLKTRACETEARDOWN _IO(0x12,118)
+#endif
+#ifndef BLKDISCARD
+# define BLKDISCARD _IO(0x12,119)
+#endif
+#ifndef BLKIOMIN
+# define BLKIOMIN _IO(0x12,120)
+#endif
+#ifndef BLKIOOPT
+# define BLKIOOPT _IO(0x12,121)
+#endif
+#ifndef BLKALIGNOFF
+# define BLKALIGNOFF _IO(0x12,122)
+#endif
+#ifndef BLKPBSZGET
+# define BLKPBSZGET _IO(0x12,123)
+#endif
+#ifndef BLKDISCARDZEROES
+# define BLKDISCARDZEROES _IO(0x12,124)
+#endif
+#ifndef BLKSECDISCARD
+# define BLKSECDISCARD _IO(0x12,125)
+#endif
+#ifndef BLKROTATIONAL
+# define BLKROTATIONAL _IO(0x12,126)
+#endif
+#ifndef BLKZEROOUT
+# define BLKZEROOUT _IO(0x12,127)
+#endif
+
+#include "xlat/blkpg_ops.h"
+
+static void
+print_blkpg_req(struct tcb *tcp, const struct_blkpg_ioctl_arg *blkpg)
+{
+	struct_blkpg_partition p;
+
+	tprints("{");
+	printxval(blkpg_ops, blkpg->op, "BLKPG_???");
+
+	tprintf(", flags=%d, datalen=%d, data=",
+		blkpg->flags, blkpg->datalen);
+
+	if (!umove_or_printaddr(tcp, (long) blkpg->data, &p)) {
+		tprintf("{start=%lld, length=%lld, pno=%d, devname=",
+			(long long) p.start, (long long) p.length, p.pno);
+		print_quoted_string(p.devname, sizeof(p.devname),
+				    QUOTE_0_TERMINATED);
+		tprints(", volname=");
+		print_quoted_string(p.volname, sizeof(p.volname),
+				    QUOTE_0_TERMINATED);
+		tprints("}");
+	}
+	tprints("}");
+}
+
+MPERS_PRINTER_DECL(int, block_ioctl, struct tcb *tcp,
+		   const unsigned int code, const long arg)
+{
+	switch (code) {
+	/* take arg as a value, not as a pointer */
+	case BLKRASET:
+	case BLKFRASET:
+		tprintf(", %lu", arg);
+		break;
+
+	/* return an unsigned short */
+	case BLKSECTGET:
+	case BLKROTATIONAL:
+		if (entering(tcp))
+			return 0;
+		tprints(", ");
+		printnum_short(tcp, arg, "%hu");
+		break;
+
+	/* return a signed int */
+	case BLKROGET:
+	case BLKBSZGET:
+	case BLKSSZGET:
+	case BLKALIGNOFF:
+		if (entering(tcp))
+			return 0;
+		/* fall through */
+	/* take a signed int */
+	case BLKROSET:
+	case BLKBSZSET:
+		tprints(", ");
+		printnum_int(tcp, arg, "%d");
+		break;
+
+	/* return an unsigned int */
+	case BLKPBSZGET:
+	case BLKIOMIN:
+	case BLKIOOPT:
+	case BLKDISCARDZEROES:
+		if (entering(tcp))
+			return 0;
+		tprints(", ");
+		printnum_int(tcp, arg, "%u");
+		break;
+
+	/* return a signed long */
+	case BLKRAGET:
+	case BLKFRAGET:
+		if (entering(tcp))
+			return 0;
+		tprints(", ");
+		printnum_slong(tcp, arg);
+		break;
+
+	/* returns an unsigned long */
+	case BLKGETSIZE:
+		if (entering(tcp))
+			return 0;
+		tprints(", ");
+		printnum_ulong(tcp, arg);
+		break;
+
+#ifdef HAVE_BLKGETSIZE64
+	/* returns an uint64_t */
+	case BLKGETSIZE64:
+		if (entering(tcp))
+			return 0;
+		tprints(", ");
+		printnum_int64(tcp, arg, "%" PRIu64);
+		break;
+#endif
+
+	/* takes a pair of uint64_t */
+	case BLKDISCARD:
+	case BLKSECDISCARD:
+	case BLKZEROOUT:
+		tprints(", ");
+		printpair_int64(tcp, arg, "%" PRIu64);
+		break;
+
+	/* More complex types */
+	case BLKPG: {
+		struct_blkpg_ioctl_arg blkpg;
+
+		tprints(", ");
+		if (!umove_or_printaddr(tcp, arg, &blkpg))
+			print_blkpg_req(tcp, &blkpg);
+		break;
+	}
+
+	case BLKTRACESETUP:
+		if (entering(tcp)) {
+			struct_blk_user_trace_setup buts;
+
+			tprints(", ");
+			if (umove_or_printaddr(tcp, arg, &buts))
+				break;
+			tprintf("{act_mask=%u, buf_size=%u, "
+				"buf_nr=%u, start_lba=%" PRIu64 ", "
+				"end_lba=%" PRIu64 ", pid=%u",
+				(unsigned)buts.act_mask, buts.buf_size,
+				buts.buf_nr, buts.start_lba,
+				buts.end_lba, buts.pid);
+			return 1;
+		} else {
+			struct_blk_user_trace_setup buts;
+
+			if (!syserror(tcp) && !umove(tcp, arg, &buts)) {
+				tprints(", name=");
+				print_quoted_string(buts.name, sizeof(buts.name),
+						    QUOTE_0_TERMINATED);
+			}
+			tprints("}");
+			break;
+		}
+
+	/* No arguments */
+	case BLKRRPART:
+	case BLKFLSBUF:
+	case BLKTRACESTART:
+	case BLKTRACESTOP:
+	case BLKTRACETEARDOWN:
+		break;
+	default:
+		return RVAL_DECODED;
+	}
+
+	return RVAL_DECODED | 1;
+}
diff --git a/strace/bootstrap b/strace/bootstrap
new file mode 100755
index 0000000..395fc80
--- /dev/null
+++ b/strace/bootstrap
@@ -0,0 +1,21 @@
+#!/bin/sh -eu
+
+for m in m32 mx32; do
+	tests=tests-$m
+	rm -rf $tests
+	mkdir $tests
+	s='[[:space:]]*'
+	sed "s/@arch@/@arch_$m@/;s/^MPERS_NAME$s=.*/& $m/;s/^ARCH_MFLAGS$s=.*/& -$m/" \
+		tests/Makefile.am > $tests/Makefile.am
+	for f in tests/*; do
+		case "${f##*/}" in
+		Makefile*) continue;;
+		esac
+		ln -s ../"$f" $tests/
+	done
+done
+
+./generate_mpers_am.sh
+./xlat/gen.sh
+
+exec autoreconf -f -i "$@"
diff --git a/strace/bpf.c b/strace/bpf.c
new file mode 100644
index 0000000..20070b3
--- /dev/null
+++ b/strace/bpf.c
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2015 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#ifdef HAVE_LINUX_BPF_H
+# include <linux/bpf.h>
+#endif
+
+#include "xlat/bpf_commands.h"
+#include "xlat/bpf_map_types.h"
+#include "xlat/bpf_prog_types.h"
+#include "xlat/bpf_map_update_elem_flags.h"
+
+static int
+bpf_map_create(struct tcb *tcp, const long addr, unsigned int size)
+{
+	struct {
+		uint32_t map_type, key_size, value_size, max_entries;
+	} attr = {};
+
+	if (!size) {
+		printaddr(addr);
+		return RVAL_DECODED | RVAL_FD;
+	}
+	if (size > sizeof(attr))
+		size = sizeof(attr);
+	if (umoven_or_printaddr(tcp, addr, size, &attr))
+		return RVAL_DECODED | RVAL_FD;
+
+	tprints("{map_type=");
+	printxval(bpf_map_types, attr.map_type, "BPF_MAP_TYPE_???");
+	tprintf(", key_size=%u, value_size=%u, max_entries=%u}",
+		attr.key_size, attr.value_size, attr.max_entries);
+
+	return RVAL_DECODED | RVAL_FD;
+}
+
+static void
+bpf_map_update_elem(struct tcb *tcp, const long addr, unsigned int size)
+{
+	struct {
+		uint32_t map_fd;
+		uint64_t ATTRIBUTE_ALIGNED(8) key;
+		uint64_t ATTRIBUTE_ALIGNED(8) value;
+		uint64_t flags;
+	} attr = {};
+
+	if (!size) {
+		printaddr(addr);
+		return;
+	}
+	if (size > sizeof(attr))
+		size = sizeof(attr);
+	if (umoven_or_printaddr(tcp, addr, size, &attr))
+		return;
+
+	tprints("{map_fd=");
+	printfd(tcp, attr.map_fd);
+	tprintf(", key=%#" PRIx64 ", value=%#" PRIx64 ", flags=",
+		attr.key, attr.value);
+	printxval64(bpf_map_update_elem_flags, attr.flags, "BPF_???");
+	tprints("}");
+}
+
+static void
+bpf_map_delete_elem(struct tcb *tcp, const long addr, unsigned int size)
+{
+	struct {
+		uint32_t map_fd;
+		uint64_t ATTRIBUTE_ALIGNED(8) key;
+	} attr = {};
+
+	if (!size) {
+		printaddr(addr);
+		return;
+	}
+	if (size > sizeof(attr))
+		size = sizeof(attr);
+	if (umoven_or_printaddr(tcp, addr, size, &attr))
+		return;
+
+	tprints("{map_fd=");
+	printfd(tcp, attr.map_fd);
+	tprintf(", key=%#" PRIx64 "}", attr.key);
+}
+
+static int
+bpf_map_io(struct tcb *tcp, const long addr, unsigned int size, const char *text)
+{
+	struct bpf_io_elem_struct {
+		uint32_t map_fd;
+		uint64_t ATTRIBUTE_ALIGNED(8) key;
+		uint64_t ATTRIBUTE_ALIGNED(8) value;
+	} attr = {};
+
+	if (exiting(tcp)) {
+		if (!syserror(tcp) && !umove_or_printaddr(tcp, addr, &attr))
+			tprintf(", %s=%#" PRIx64, text, attr.value);
+		tprints("}");
+		return RVAL_DECODED;
+	}
+
+	if (!size) {
+		printaddr(addr);
+		return RVAL_DECODED;
+	}
+	if (size > sizeof(attr))
+		size = sizeof(attr);
+	if (umoven_or_printaddr(tcp, addr, size, &attr))
+		return RVAL_DECODED;
+
+	tprints("{map_fd=");
+	printfd(tcp, attr.map_fd);
+	tprintf(", key=%#" PRIx64, attr.key);
+
+	return 0;
+}
+
+static int
+bpf_prog_load(struct tcb *tcp, const long addr, unsigned int size)
+{
+	struct {
+		uint32_t prog_type, insn_cnt;
+		uint64_t ATTRIBUTE_ALIGNED(8) insns, license;
+		uint32_t log_level, log_size;
+		uint64_t ATTRIBUTE_ALIGNED(8) log_buf;
+		uint32_t kern_version;
+	} attr = {};
+
+	if (!size) {
+		printaddr(addr);
+		return RVAL_DECODED | RVAL_FD;
+	}
+	if (size > sizeof(attr))
+		size = sizeof(attr);
+	if (umoven_or_printaddr(tcp, addr, size, &attr))
+		return RVAL_DECODED | RVAL_FD;
+
+	tprints("{prog_type=");
+	printxval(bpf_prog_types, attr.prog_type, "BPF_PROG_TYPE_???");
+	tprintf(", insn_cnt=%u, insns=%#" PRIx64 ", license=",
+		attr.insn_cnt, attr.insns);
+	printstr(tcp, attr.license, -1);
+	tprintf(", log_level=%u, log_size=%u, log_buf=%#" PRIx64 ", kern_version=%u}",
+		attr.log_level, attr.log_size, attr.log_buf, attr.kern_version);
+
+	return RVAL_DECODED | RVAL_FD;
+}
+
+SYS_FUNC(bpf)
+{
+	const int cmd = tcp->u_arg[0];
+	const long addr = tcp->u_arg[1];
+	const unsigned int size = tcp->u_arg[2];
+	int rc = RVAL_DECODED;
+
+	if (entering(tcp)) {
+		printxval(bpf_commands, cmd, "BPF_???");
+		tprints(", ");
+	}
+
+	switch (cmd) {
+	case BPF_MAP_CREATE:
+		rc = bpf_map_create(tcp, addr, size);
+		break;
+	case BPF_MAP_LOOKUP_ELEM:
+		rc = bpf_map_io(tcp, addr, size, "value");
+		break;
+	case BPF_MAP_UPDATE_ELEM:
+		bpf_map_update_elem(tcp, addr, size);
+		break;
+	case BPF_MAP_DELETE_ELEM:
+		bpf_map_delete_elem(tcp, addr, size);
+		break;
+	case BPF_MAP_GET_NEXT_KEY:
+		rc = bpf_map_io(tcp, addr, size, "next_key");
+		break;
+	case BPF_PROG_LOAD:
+		rc = bpf_prog_load(tcp, addr, size);
+		break;
+	default:
+		printaddr(addr);
+		break;
+	}
+
+	if (rc & RVAL_DECODED)
+		tprintf(", %u", size);
+
+	return rc;
+}
diff --git a/strace/btrfs.c b/strace/btrfs.c
new file mode 100644
index 0000000..9c71768
--- /dev/null
+++ b/strace/btrfs.c
@@ -0,0 +1,1364 @@
+/*
+ * Copyright (c) 2016 Jeff Mahoney <jeffm@suse.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#ifdef HAVE_LINUX_BTRFS_H
+
+#include DEF_MPERS_TYPE(struct_btrfs_ioctl_dev_replace_args)
+#include DEF_MPERS_TYPE(struct_btrfs_ioctl_send_args)
+#include DEF_MPERS_TYPE(struct_btrfs_ioctl_received_subvol_args)
+
+# include <linux/btrfs.h>
+
+typedef struct btrfs_ioctl_dev_replace_args
+	struct_btrfs_ioctl_dev_replace_args;
+typedef struct btrfs_ioctl_send_args
+	struct_btrfs_ioctl_send_args;
+typedef struct btrfs_ioctl_received_subvol_args
+	struct_btrfs_ioctl_received_subvol_args;
+
+#endif /* HAVE_LINUX_BTRFS_H */
+
+#include MPERS_DEFS
+
+#ifdef HAVE_LINUX_BTRFS_H
+
+#include <linux/fs.h>
+
+/*
+ * Prior to Linux 3.12, the BTRFS_IOC_DEFAULT_SUBVOL used u64 in
+ * its definition, which isn't exported by the kernel.
+ */
+typedef __u64 u64;
+
+#ifndef HAVE_STRUCT_BTRFS_IOCTL_FEATURE_FLAGS_COMPAT_FLAGS
+struct btrfs_ioctl_feature_flags {
+	uint64_t compat_flags;
+	uint64_t compat_ro_flags;
+	uint64_t incompat_flags;
+};
+#endif
+
+#ifndef HAVE_STRUCT_BTRFS_IOCTL_DEFRAG_RANGE_ARGS_START
+struct btrfs_ioctl_defrag_range_args {
+	uint64_t start;
+	uint64_t len;
+	uint64_t flags;
+	uint32_t extent_thresh;
+	uint32_t compress_type;
+	uint32_t unused[4];
+};
+#endif
+
+#ifndef BTRFS_LABEL_SIZE
+# define BTRFS_LABEL_SIZE 256
+#endif
+
+#ifndef BTRFS_FIRST_FREE_OBJECTID
+# define BTRFS_FIRST_FREE_OBJECTID 256ULL
+#endif
+
+#ifndef BTRFS_IOC_QUOTA_RESCAN
+struct btrfs_ioctl_quota_rescan_args {
+	uint64_t flags, progress, reserved[6];
+};
+# define BTRFS_IOC_QUOTA_RESCAN _IOW(BTRFS_IOCTL_MAGIC, 44, \
+					struct btrfs_ioctl_quota_rescan_args)
+# define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \
+					struct btrfs_ioctl_quota_rescan_args)
+#endif
+
+#ifndef BTRFS_IOC_QUOTA_RESCAN_WAIT
+# define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)
+#endif
+
+#ifndef BTRFS_IOC_GET_FEATURES
+# define BTRFS_IOC_GET_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
+					struct btrfs_ioctl_feature_flags)
+# define BTRFS_IOC_SET_FEATURES _IOW(BTRFS_IOCTL_MAGIC, 57, \
+					struct btrfs_ioctl_feature_flags[2])
+# define BTRFS_IOC_GET_SUPPORTED_FEATURES _IOR(BTRFS_IOCTL_MAGIC, 57, \
+					struct btrfs_ioctl_feature_flags[3])
+#endif
+
+#ifndef BTRFS_IOC_TREE_SEARCH_V2
+# define BTRFS_IOC_TREE_SEARCH_V2 _IOWR(BTRFS_IOCTL_MAGIC, 17, \
+					struct btrfs_ioctl_search_args_v2)
+struct btrfs_ioctl_search_args_v2 {
+	struct btrfs_ioctl_search_key key; /* in/out - search parameters */
+	uint64_t buf_size;		   /* in - size of buffer
+					    * out - on EOVERFLOW: needed size
+					    *       to store item */
+	uint64_t buf[0];		   /* out - found items */
+};
+#endif
+
+#include "xlat/btrfs_balance_args.h"
+#include "xlat/btrfs_balance_ctl_cmds.h"
+#include "xlat/btrfs_balance_flags.h"
+#include "xlat/btrfs_balance_state.h"
+#include "xlat/btrfs_compress_types.h"
+#include "xlat/btrfs_defrag_flags.h"
+#include "xlat/btrfs_dev_replace_cmds.h"
+#include "xlat/btrfs_dev_replace_results.h"
+#include "xlat/btrfs_dev_replace_state.h"
+#include "xlat/btrfs_dev_stats_flags.h"
+#include "xlat/btrfs_dev_stats_values.h"
+#include "xlat/btrfs_features_compat.h"
+#include "xlat/btrfs_features_compat_ro.h"
+#include "xlat/btrfs_features_incompat.h"
+#include "xlat/btrfs_key_types.h"
+#include "xlat/btrfs_qgroup_ctl_cmds.h"
+#include "xlat/btrfs_qgroup_inherit_flags.h"
+#include "xlat/btrfs_qgroup_limit_flags.h"
+#include "xlat/btrfs_qgroup_status_flags.h"
+#include "xlat/btrfs_scrub_flags.h"
+#include "xlat/btrfs_send_flags.h"
+#include "xlat/btrfs_snap_flags_v2.h"
+#include "xlat/btrfs_space_info_flags.h"
+#include "xlat/btrfs_tree_objectids.h"
+
+static inline char
+prnibble(char v)
+{
+	if (v >= 10)
+		return 'a' + (v - 10);
+	return '0' + v;
+}
+
+/* 8-4-4-4-12 = 36 characters */
+#define UUID_STRING_SIZE 36
+
+/* Formats uuid, returns 0 if it's all zeroes */
+static int
+btrfs_unparse_uuid(unsigned char *uuid, char *out)
+{
+	int i;
+	int ret = 0;
+	for (i = 0; i < BTRFS_UUID_SIZE; i++) {
+		if (i == 4 || i == 6 || i == 8 || i == 10)
+			*out++ = '-';
+		*out++ = prnibble(uuid[i] >> 4);
+		*out++ = prnibble(uuid[i] & 0xf);
+		if (uuid[i])
+			ret = 1;
+	}
+	*out = '\0';
+	return ret;
+}
+
+static void
+print_u64(const char *name, uint64_t value)
+{
+	tprintf(", %s=%" PRIu64, name, value);
+	if (value == UINT64_MAX)
+		tprints(" /* UINT64_MAX */");
+}
+
+#define print_member_u64(obj, name) print_u64(#name, obj->name)
+
+static void
+btrfs_print_balance_args(const char *name, const struct btrfs_balance_args *bba)
+{
+	tprintf(", %s={profiles=", name);
+	printflags64(btrfs_space_info_flags, bba->profiles,
+		     "BTRFS_BLOCK_GROUP_???");
+	print_member_u64(bba, usage);
+	print_member_u64(bba, devid);
+	print_member_u64(bba, pstart);
+	print_member_u64(bba, pend);
+	print_member_u64(bba, vstart);
+	print_member_u64(bba, vend);
+	print_member_u64(bba, target);
+	tprints(", flags=");
+	printflags64(btrfs_balance_args, bba->flags, "BTRFS_BALANCE_ARGS_???");
+	tprints("}");
+}
+
+static void
+btrfs_print_balance(struct tcb *tcp, const long arg, bool out)
+{
+	struct btrfs_ioctl_balance_args balance_args;
+
+	if (umove_or_printaddr(tcp, arg, &balance_args))
+		return;
+
+	tprints("{flags=");
+	printflags64(btrfs_balance_flags, balance_args.flags,
+		     "BTRFS_BALANCE_???");
+	if (out) {
+		tprints(", state=");
+		printflags64(btrfs_balance_state, balance_args.state,
+			     "BTRFS_BALANCE_STATE_???");
+	}
+
+	if (balance_args.flags & BTRFS_BALANCE_DATA)
+		btrfs_print_balance_args("data", &balance_args.data);
+	if (balance_args.flags & BTRFS_BALANCE_METADATA)
+		btrfs_print_balance_args("meta", &balance_args.meta);
+	if (balance_args.flags & BTRFS_BALANCE_SYSTEM)
+		btrfs_print_balance_args("sys", &balance_args.sys);
+	tprints("}");
+}
+
+static void
+btrfs_print_features(const struct btrfs_ioctl_feature_flags *flags)
+{
+	tprints("{compat_flags=");
+	printflags64(btrfs_features_compat, flags->compat_flags,
+		     "BTRFS_FEATURE_COMPAT_???");
+
+	tprints(", compat_ro_flags=");
+	printflags64(btrfs_features_compat_ro, flags->compat_ro_flags,
+		     "BTRFS_FEATURE_COMPAT_RO_???");
+
+	tprints(", incompat_flags=");
+	printflags64(btrfs_features_incompat, flags->incompat_flags,
+		     "BTRFS_FEATURE_INCOMPAT_???");
+	tprints("}");
+}
+
+static void
+btrfs_print_qgroup_limit(const struct btrfs_qgroup_limit *lim)
+{
+	tprints("{flags=");
+	printflags64(btrfs_qgroup_limit_flags, lim->flags,
+		     "BTRFS_QGROUP_LIMIT_???");
+	tprintf(", max_rfer=%" PRI__u64 ", max_excl=%" PRI__u64
+		", rsv_rfer=%" PRI__u64 ", rsv_excl=%" PRI__u64 "}",
+		lim->max_rfer, lim->max_excl,
+		lim->rsv_rfer, lim->rsv_excl);
+}
+
+static void
+btrfs_print_key_type(uint32_t type)
+{
+	const char *str = xlookup(btrfs_key_types, type);
+	tprintf("%u", type);
+	if (str)
+		tprintf(" /* %s */", str);
+}
+
+static void
+btrfs_print_objectid(uint64_t objectid)
+{
+	const char *str = xlookup(btrfs_tree_objectids, objectid);
+	tprintf("%" PRIu64, objectid);
+	if (str)
+		tprintf(" /* %s */", str);
+}
+
+static void
+btrfs_print_data_container_header(const struct btrfs_data_container *container)
+{
+	tprintf("{bytes_left=%u, bytes_missing=%u"
+		", elem_cnt=%u, elem_missed=%u, val=",
+		container->bytes_left, container->bytes_missing,
+		container->elem_cnt, container->elem_missed);
+}
+
+static void
+btrfs_print_data_container_footer(void)
+{
+	tprints("}");
+}
+
+static bool
+print_btrfs_data_container_logical_ino(struct tcb *tcp, void *elem_buf,
+				       size_t elem_size, void *data)
+{
+	const uint64_t *const record = elem_buf;
+
+	tprintf("{inum=%" PRIu64 ", offset=%" PRIu64 ", root=%" PRIu64 "}",
+		record[0], record[1], record[2]);
+
+	return true;
+}
+
+static void
+btrfs_print_logical_ino_container(struct tcb *tcp,
+				  const uint64_t inodes_addr)
+{
+	struct btrfs_data_container container;
+
+	if (umove_or_printaddr(tcp, inodes_addr, &container))
+		return;
+
+	btrfs_print_data_container_header(&container);
+
+	if (abbrev(tcp)) {
+		tprints("...");
+	} else {
+		const uint64_t val_addr =
+			inodes_addr + offsetof(typeof(container), val);
+		uint64_t record[3];
+		print_array(tcp, val_addr, container.elem_cnt / 3,
+			    record, sizeof(record),
+			    umoven_or_printaddr,
+			    print_btrfs_data_container_logical_ino, 0);
+	}
+
+	btrfs_print_data_container_footer();
+}
+
+static bool
+print_btrfs_data_container_ino_path(struct tcb *tcp, void *elem_buf,
+				       size_t elem_size, void *data)
+{
+	const uint64_t *const offset = elem_buf;
+	const uint64_t *const val_addr = data;
+
+	printpath(tcp, *val_addr + *offset);
+
+	return true;
+}
+
+static void
+btrfs_print_ino_path_container(struct tcb *tcp,
+			       const uint64_t fspath_addr)
+{
+	struct btrfs_data_container container;
+
+	if (umove_or_printaddr(tcp, fspath_addr, &container))
+		return;
+
+	btrfs_print_data_container_header(&container);
+
+	if (abbrev(tcp)) {
+		tprints("...");
+	} else {
+		uint64_t val_addr =
+			fspath_addr + offsetof(typeof(container), val);
+		uint64_t offset;
+		print_array(tcp, val_addr, container.elem_cnt,
+			    &offset, sizeof(offset),
+			    umoven_or_printaddr,
+			    print_btrfs_data_container_ino_path, &val_addr);
+	}
+
+	btrfs_print_data_container_footer();
+}
+
+static bool
+print_uint64(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data)
+{
+	tprintf("%" PRIu64, * (uint64_t *) elem_buf);
+
+	return true;
+}
+
+static void
+btrfs_print_qgroup_inherit(struct tcb *tcp, const uint64_t qgi_addr)
+{
+	struct btrfs_qgroup_inherit inherit;
+
+	if (umove_or_printaddr(tcp, qgi_addr, &inherit))
+		return;
+
+	tprintf("{flags=");
+	printflags64(btrfs_qgroup_inherit_flags, inherit.flags,
+		     "BTRFS_QGROUP_INHERIT_???");
+	tprintf(", num_qgroups=%" PRI__u64 ", num_ref_copies=%" PRI__u64
+		", num_excl_copies=%" PRI__u64 ", lim=",
+		inherit.num_qgroups, inherit.num_ref_copies,
+		inherit.num_excl_copies);
+
+	btrfs_print_qgroup_limit(&inherit.lim);
+
+	tprints(", qgroups=");
+
+	if (abbrev(tcp)) {
+		tprints("...");
+	} else {
+		uint64_t record;
+		print_array(tcp, qgi_addr + offsetof(typeof(inherit), qgroups),
+			    inherit.num_qgroups, &record, sizeof(record),
+			    umoven_or_printaddr, print_uint64, 0);
+	}
+	tprints("}");
+}
+
+static void
+print_key_value_internal(struct tcb *tcp, const char *name, uint64_t value)
+{
+	if (value) {
+		tprintf(", %s=%" PRIu64, name, value);
+		if (value == UINT64_MAX)
+			tprints(" /* UINT64_MAX */");
+	}
+}
+#define print_key_value(tcp, key, name)					\
+	print_key_value_internal((tcp), #name, (key)->name)
+
+static void
+btrfs_print_tree_search(struct tcb *tcp, struct btrfs_ioctl_search_key *key,
+			uint64_t buf_addr, uint64_t buf_size, bool print_size)
+{
+	if (entering(tcp)) {
+		tprintf("{key={tree_id=");
+		btrfs_print_objectid(key->tree_id);
+
+		if (key->min_objectid != BTRFS_FIRST_FREE_OBJECTID ||
+		    !abbrev(tcp)) {
+			tprints(", min_objectid=");
+			btrfs_print_objectid(key->min_objectid);
+		}
+
+		if (key->max_objectid != BTRFS_LAST_FREE_OBJECTID ||
+		    !abbrev(tcp)) {
+			tprints(", max_objectid=");
+			btrfs_print_objectid(key->max_objectid);
+		}
+
+		print_key_value(tcp, key, min_offset);
+		print_key_value(tcp, key, max_offset);
+		print_key_value(tcp, key, min_transid);
+		print_key_value(tcp, key, max_transid);
+
+		tprints(", min_type=");
+		btrfs_print_key_type(key->min_type);
+		tprints(", max_type=");
+		btrfs_print_key_type(key->max_type);
+		tprintf(", nr_items=%u}", key->nr_items);
+		if (print_size)
+			tprintf(", buf_size=%" PRIu64, buf_size);
+		tprints("}");
+	} else {
+		tprintf("{key={nr_items=%u}", key->nr_items);
+		if (print_size)
+			tprintf(", buf_size=%" PRIu64, buf_size);
+		tprints(", buf=");
+		if (abbrev(tcp))
+			tprints("...");
+		else {
+			uint64_t i;
+			uint64_t off = 0;
+			tprints("[");
+			for (i = 0; i < key->nr_items; i++) {
+				struct btrfs_ioctl_search_header sh;
+				uint64_t addr = buf_addr + off;
+				if (i)
+					tprints(", ");
+				if (i > max_strlen ||
+				    umove(tcp, addr, &sh)) {
+					tprints("...");
+					break;
+				}
+				tprintf("{transid=%" PRI__u64 ", objectid=",
+					sh.transid);
+				btrfs_print_objectid(sh.objectid);
+				tprintf(", offset=%" PRI__u64 ", type=", sh.offset);
+				btrfs_print_key_type(sh.type);
+				tprintf(", len=%u}", sh.len);
+				off += sizeof(sh) + sh.len;
+
+			}
+			tprints("]");
+		}
+		tprints("}");
+	}
+}
+
+static bool
+print_objectid_callback(struct tcb *tcp, void *elem_buf,
+			size_t elem_size, void *data)
+{
+	btrfs_print_objectid(* (uint64_t *) elem_buf);
+
+	return true;
+}
+
+static bool
+print_btrfs_ioctl_space_info(struct tcb *tcp, void *elem_buf,
+			     size_t elem_size, void *data)
+{
+	const struct btrfs_ioctl_space_info *info = elem_buf;
+
+	tprints("{flags=");
+	printflags64(btrfs_space_info_flags, info->flags,
+		     "BTRFS_SPACE_INFO_???");
+	tprintf(", total_bytes=%" PRI__u64 ", used_bytes=%" PRI__u64 "}",
+		info->total_bytes, info->used_bytes);
+
+	return true;
+}
+
+MPERS_PRINTER_DECL(int, btrfs_ioctl,
+		   struct tcb *tcp, const unsigned int code, const long arg)
+{
+	switch (code) {
+	/* Take no arguments; command only. */
+	case BTRFS_IOC_TRANS_START:
+	case BTRFS_IOC_TRANS_END:
+	case BTRFS_IOC_SYNC:
+	case BTRFS_IOC_SCRUB_CANCEL:
+	case BTRFS_IOC_QUOTA_RESCAN_WAIT:
+	/*
+	 * The codes for these ioctls are based on each accepting a
+	 * vol_args but none of them actually consume an argument.
+	 */
+	case BTRFS_IOC_DEFRAG:
+	case BTRFS_IOC_BALANCE:
+		break;
+
+	/* takes a signed int */
+	case BTRFS_IOC_BALANCE_CTL:
+		tprints(", ");
+		printxval(btrfs_balance_ctl_cmds, arg, "BTRFS_BALANCE_CTL_???");
+		break;
+
+	/* returns a 64 */
+	case BTRFS_IOC_START_SYNC: /* R */
+		if (entering(tcp))
+			return 0;
+	/* fall through */
+	/* takes a u64 */
+	case BTRFS_IOC_DEFAULT_SUBVOL: /* W */
+	case BTRFS_IOC_WAIT_SYNC: /* W */
+		tprints(", ");
+		printnum_int64(tcp, arg, "%" PRIu64);
+		break;
+
+	/* u64 but describe a flags bitfield; we can make that symbolic */
+	case BTRFS_IOC_SUBVOL_GETFLAGS: { /* R */
+		uint64_t flags;
+
+		if (entering(tcp))
+			return 0;
+
+		tprints(", ");
+
+		if (umove_or_printaddr(tcp, arg, &flags))
+			break;
+
+		printflags64(btrfs_snap_flags_v2, flags, "BTRFS_SUBVOL_???");
+		break;
+	}
+
+	case BTRFS_IOC_SUBVOL_SETFLAGS: { /* W */
+		uint64_t flags;
+
+		tprints(", ");
+
+		if (umove_or_printaddr(tcp, arg, &flags))
+			break;
+
+		printflags64(btrfs_snap_flags_v2, flags, "BTRFS_SUBVOL_???");
+		break;
+	}
+
+	/* More complex types */
+	case BTRFS_IOC_BALANCE_V2: /* RW */
+		if (entering(tcp)) {
+			tprints(", ");
+			btrfs_print_balance(tcp, arg, false);
+			return 0;
+		}
+
+		if (syserror(tcp))
+			break;
+
+		tprints(" => ");
+		btrfs_print_balance(tcp, arg, true);
+		break;
+	case BTRFS_IOC_BALANCE_PROGRESS: /* R */
+		if (entering(tcp))
+			return 0;
+
+		tprints(", ");
+		btrfs_print_balance(tcp, arg, true);
+		break;
+
+	case BTRFS_IOC_DEFRAG_RANGE: { /* W */
+		struct btrfs_ioctl_defrag_range_args args;
+
+		tprints(", ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprintf("{start=%" PRIu64 ", len=", (uint64_t)args.start);
+
+		tprintf("%" PRIu64, (uint64_t) args.len);
+		if (args.len == UINT64_MAX)
+			tprints(" /* UINT64_MAX */");
+
+		tprints(", flags=");
+		printflags64(btrfs_defrag_flags, args.flags,
+			     "BTRFS_DEFRAG_RANGE_???");
+		tprintf(", extent_thresh=%u, compress_type=",
+			args.extent_thresh);
+		printxval(btrfs_compress_types, args.compress_type,
+			  "BTRFS_COMPRESS_???");
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_DEV_INFO: { /* RW */
+		struct btrfs_ioctl_dev_info_args args;
+		char uuid[UUID_STRING_SIZE+1];
+		int valid;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+		tprints("{");
+
+		valid = btrfs_unparse_uuid(args.uuid, uuid);
+		if (entering(tcp)) {
+			tprintf("devid=%" PRI__u64, args.devid);
+			if (valid)
+				tprintf(", uuid=%s", uuid);
+			tprints("}");
+			return 0;
+		}
+		if (valid)
+			tprintf("uuid=%s, ", uuid);
+		tprintf("bytes_used=%" PRI__u64
+			", total_bytes=%" PRI__u64 ", path=",
+			args.bytes_used, args.total_bytes);
+		print_quoted_string((const char *)args.path, sizeof(args.path),
+				    QUOTE_0_TERMINATED);
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_DEV_REPLACE: { /* RW */
+		struct_btrfs_ioctl_dev_replace_args args;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		if (entering(tcp)) {
+			tprints("{cmd=");
+			printxval64(btrfs_dev_replace_cmds, args.cmd,
+				    "BTRFS_IOCTL_DEV_REPLACE_CMD_???");
+			if (args.cmd == BTRFS_IOCTL_DEV_REPLACE_CMD_START) {
+				const char *str;
+				tprintf(", start={srcdevid=%" PRIu64
+				   ", cont_reading_from_srcdev_mode=%" PRIu64
+				   ", srcdev_name=",
+				   (uint64_t) args.start.srcdevid,
+				   (uint64_t) args.start.cont_reading_from_srcdev_mode);
+
+				str = (const char*) args.start.srcdev_name;
+				print_quoted_string(str,
+						sizeof(args.start.srcdev_name),
+						QUOTE_0_TERMINATED);
+				tprints(", tgtdev_name=");
+				str = (const char*) args.start.tgtdev_name;
+				print_quoted_string(str,
+						sizeof(args.start.tgtdev_name),
+						QUOTE_0_TERMINATED);
+				tprints("}");
+
+			}
+			tprints("}");
+			return 0;
+		}
+
+		tprints("{result=");
+		printxval64(btrfs_dev_replace_results, args.result,
+			    "BTRFS_IOCTL_DEV_REPLACE_RESULT_???");
+		if (args.cmd == BTRFS_IOCTL_DEV_REPLACE_CMD_STATUS) {
+			char buf[sizeof("HH:MM:SS") + 1];
+			time_t time;
+			tprints(", ");
+			printxval64(btrfs_dev_replace_state,
+				   args.status.replace_state,
+				   "BTRFS_IOCTL_DEV_REPLACE_STATE_???");
+			tprintf(", progress_1000=%" PRIu64 " /* ",
+				(uint64_t) args.status.progress_1000);
+			if (args.status.progress_1000 <= 1000)
+				tprintf("%" PRIu64 ".%.2" PRIu64 "%%",
+					(uint64_t) args.status.progress_1000 / 10,
+					(uint64_t) args.status.progress_1000 % 10);
+			else
+				tprints("???");
+			tprints(" */ ,");
+
+			time = args.status.time_started;
+			strftime(buf, sizeof(buf), "%T",
+				 localtime(&time));
+			tprintf("time_started=%" PRIu64" /* %s */, ",
+				(uint64_t) args.status.time_started, buf);
+
+			time = args.status.time_stopped;
+			strftime(buf, sizeof(buf), "%T",
+				 localtime(&time));
+			tprintf("time_stopped=%" PRIu64" /* %s */, ",
+				(uint64_t) args.status.time_stopped, buf);
+
+			tprintf("num_write_errors=%" PRIu64
+				", num_uncorrectable_read_errors=%" PRIu64,
+				(uint64_t) args.status.num_write_errors,
+				(uint64_t) args.status.num_uncorrectable_read_errors);
+		}
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_GET_FEATURES: { /* R */
+		struct btrfs_ioctl_feature_flags flags;
+
+		if (entering(tcp))
+			return 0;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &flags))
+			break;
+
+		btrfs_print_features(&flags);
+		break;
+	}
+
+	case BTRFS_IOC_SET_FEATURES: { /* W */
+		struct btrfs_ioctl_feature_flags flarg[2];
+
+		tprints(", ");
+
+		if (umove_or_printaddr(tcp, arg, &flarg))
+			break;
+
+		tprints("[");
+		btrfs_print_features(&flarg[0]);
+		tprints(", ");
+		btrfs_print_features(&flarg[1]);
+		tprints("]");
+		break;
+	}
+
+	case BTRFS_IOC_GET_SUPPORTED_FEATURES: { /* R */
+		struct btrfs_ioctl_feature_flags flarg[3];
+
+		if (entering(tcp))
+			return 0;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &flarg))
+			break;
+
+		tprints("[ /* supported */ ");
+		btrfs_print_features(&flarg[0]);
+
+		tprints(", /* safe to set */ ");
+		btrfs_print_features(&flarg[1]);
+
+		tprints(", /* safe to clear */ ");
+		btrfs_print_features(&flarg[2]);
+		tprints("]");
+
+		break;
+	}
+
+	case BTRFS_IOC_FS_INFO: { /* R */
+		struct btrfs_ioctl_fs_info_args args;
+		char uuid[UUID_STRING_SIZE+1];
+		uint32_t nodesize, sectorsize, clone_alignment;
+#ifndef HAVE_STRUCT_BTRFS_IOCTL_FS_INFO_ARGS_NODESIZE
+		__u32 *reserved32;
+#endif
+
+		if (entering(tcp))
+			return 0;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+#ifdef HAVE_STRUCT_BTRFS_IOCTL_FS_INFO_ARGS_NODESIZE
+		nodesize = args.nodesize,
+		sectorsize = args.sectorsize,
+		clone_alignment = args.clone_alignment;
+#else
+		reserved32 = (__u32 *) (void *) args.reserved;
+		nodesize = reserved32[0];
+		sectorsize = reserved32[1];
+		clone_alignment = reserved32[2];
+#endif
+		btrfs_unparse_uuid(args.fsid, uuid);
+
+		tprints("{");
+		tprintf("max_id=%" PRI__u64 ", num_devices=%" PRI__u64
+			", fsid=%s, nodesize=%u, sectorsize=%u"
+			", clone_alignment=%u",
+			args.max_id, args.num_devices, uuid,
+			nodesize, sectorsize, clone_alignment);
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_GET_DEV_STATS: { /* RW */
+		struct btrfs_ioctl_get_dev_stats args;
+		uint64_t i;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprints("{");
+
+		if (entering(tcp))
+			tprintf("devid=%" PRI__u64 ", ", args.devid);
+
+		tprintf("nr_items=%" PRI__u64 ", flags=", args.nr_items);
+		printflags64(btrfs_dev_stats_flags, args.flags,
+			     "BTRFS_DEV_STATS_???");
+
+		if (entering(tcp)) {
+			tprints("}");
+			return 0;
+		}
+
+		/*
+		 * The structure has a 1k limit; Let's make sure we don't
+		 * go off into the middle of nowhere with a bad nr_items
+		 * value.
+		 */
+		tprints(", [");
+		for (i = 0; i < args.nr_items; i++) {
+			if (i)
+				tprints(", ");
+			if (i >= ARRAY_SIZE(args.values)) {
+				tprints("...");
+				break;
+			}
+			const char *name = xlookup(btrfs_dev_stats_values, i);
+			if (name)
+				tprintf("/* %s */ ", name);
+			tprintf("%" PRI__u64, args.values[i]);
+		}
+		tprints("]}");
+		break;
+	}
+
+	case BTRFS_IOC_INO_LOOKUP: { /* RW */
+		struct btrfs_ioctl_ino_lookup_args args;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		if (entering(tcp)) {
+			/* Use subvolume id of the containing root */
+			if (args.treeid == 0)
+				set_tcb_priv_ulong(tcp, 1);
+
+			tprints("{treeid=");
+			btrfs_print_objectid(args.treeid);
+			tprints(", objectid=");
+			btrfs_print_objectid(args.objectid);
+			tprints("}");
+			return 0;
+		}
+
+		tprints("{");
+		if (get_tcb_priv_ulong(tcp)) {
+			tprints("treeid=");
+			btrfs_print_objectid(args.treeid);
+			tprints(", ");
+		}
+
+		tprints("name=");
+		print_quoted_string(args.name, sizeof(args.name),
+				    QUOTE_0_TERMINATED);
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_INO_PATHS: { /* RW */
+		struct btrfs_ioctl_ino_path_args args;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprints("{");
+
+		if (entering(tcp)) {
+			tprintf("inum=%" PRI__u64 ", size=%" PRI__u64,
+				args.inum, args.size);
+			tprintf(", fspath=0x%" PRI__x64 "}", args.fspath);
+			return 0;
+		}
+
+		tprints("fspath=");
+		btrfs_print_ino_path_container(tcp, args.fspath);
+
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_LOGICAL_INO: { /* RW */
+		struct btrfs_ioctl_logical_ino_args args;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprints("{");
+
+		if (entering(tcp)) {
+			tprintf("logical=%" PRI__u64 ", size=%" PRI__u64,
+				args.logical, args.size);
+			tprintf(", inodes=0x%" PRI__x64 "}", args.inodes);
+			return 0;
+		}
+
+		tprints("inodes=");
+		btrfs_print_logical_ino_container(tcp, args.inodes);
+
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_QGROUP_ASSIGN: { /* W */
+		struct btrfs_ioctl_qgroup_assign_args args;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprintf("{assign=%" PRI__u64 ", src=%" PRI__u64
+			", dst=%" PRI__u64 "}",
+			args.assign, args.src, args.dst);
+		break;
+	}
+
+	case BTRFS_IOC_QGROUP_CREATE: { /* W */
+		struct btrfs_ioctl_qgroup_create_args args;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprintf("{create=%" PRI__u64 ", qgroupid=%" PRI__u64 "}",
+			args.create, args.qgroupid);
+		break;
+	}
+
+	case BTRFS_IOC_QGROUP_LIMIT: { /* R */
+		struct btrfs_ioctl_qgroup_limit_args args;
+
+		if (entering(tcp))
+			return 0;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprintf("{qgroupid=%" PRI__u64 ", lim=", args.qgroupid);
+		btrfs_print_qgroup_limit(&args.lim);
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_QUOTA_CTL: { /* W */
+		struct btrfs_ioctl_quota_ctl_args args;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		printxval64(btrfs_qgroup_ctl_cmds, args.cmd,
+			    "BTRFS_QUOTA_CTL_???");
+		tprints("}");
+
+		break;
+	}
+
+	case BTRFS_IOC_QUOTA_RESCAN: { /* W */
+		struct btrfs_ioctl_quota_rescan_args args;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprintf("{flags=%" PRIu64 "}", (uint64_t) args.flags);
+		break;
+	}
+
+	case BTRFS_IOC_QUOTA_RESCAN_STATUS: { /* R */
+		struct btrfs_ioctl_quota_rescan_args args;
+
+		if (entering(tcp))
+			return 0;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprintf("{flags=%" PRIu64 ", progress=", (uint64_t) args.flags);
+		btrfs_print_objectid(args.progress);
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_SET_RECEIVED_SUBVOL: { /* RW */
+		struct_btrfs_ioctl_received_subvol_args args;
+		char uuid[UUID_STRING_SIZE+1];
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		if (entering(tcp)) {
+			btrfs_unparse_uuid((unsigned char *)args.uuid, uuid);
+			tprintf("{uuid=%s, stransid=%" PRIu64
+				", stime=%" PRIu64 ".%u, flags=%" PRIu64
+				"}", uuid, (uint64_t) args.stransid,
+				(uint64_t) args.stime.sec, args.stime.nsec,
+				(uint64_t) args.flags);
+			return 0;
+		}
+		tprintf("{rtransid=%" PRIu64 ", rtime=%" PRIu64 ".%u}",
+			(uint64_t) args.rtransid, (uint64_t) args.rtime.sec,
+			args.rtime.nsec);
+		break;
+	}
+
+	case BTRFS_IOC_SCRUB: /* RW */
+	case BTRFS_IOC_SCRUB_PROGRESS: { /* RW */
+		struct btrfs_ioctl_scrub_args args;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		if (entering(tcp)) {
+			tprintf("{devid=%" PRI__u64, args.devid);
+			if (code == BTRFS_IOC_SCRUB) {
+				tprintf(", start=%" PRI__u64 ", end=",
+					args.start);
+				tprintf("%" PRI__u64, args.end);
+				if (args.end == UINT64_MAX)
+					tprints(" /* UINT64_MAX */");
+				tprints(", flags=");
+				printflags64(btrfs_scrub_flags, args.flags,
+					     "BTRFS_SCRUB_???");
+			}
+			tprints("}");
+			return 0;
+		}
+		tprintf("{data_extents_scrubbed=%" PRI__u64
+			", tree_extents_scrubbed=%" PRI__u64
+			", data_bytes_scrubbed=%" PRI__u64
+			", tree_bytes_scrubbed=%" PRI__u64
+			", read_errors=%" PRI__u64
+			", csum_errors=%" PRI__u64
+			", verify_errors=%" PRI__u64
+			", no_csum=%" PRI__u64
+			", csum_discards=%" PRI__u64
+			", super_errors=%" PRI__u64
+			", malloc_errors=%" PRI__u64
+			", uncorrectable_errors=%" PRI__u64
+			", corrected_errors=%" PRI__u64
+			", last_physical=%" PRI__u64
+			", unverified_errors=%" PRI__u64 "}",
+			args.progress.data_extents_scrubbed,
+			args.progress.tree_extents_scrubbed,
+			args.progress.data_bytes_scrubbed,
+			args.progress.tree_bytes_scrubbed,
+			args.progress.read_errors,
+			args.progress.csum_errors,
+			args.progress.verify_errors,
+			args.progress.no_csum,
+			args.progress.csum_discards,
+			args.progress.super_errors,
+			args.progress.malloc_errors,
+			args.progress.uncorrectable_errors,
+			args.progress.corrected_errors,
+			args.progress.last_physical,
+			args.progress.unverified_errors);
+		break;
+	}
+
+	case BTRFS_IOC_TREE_SEARCH: { /* RW */
+		struct btrfs_ioctl_search_args args;
+		uint64_t buf_offset;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		buf_offset = offsetof(struct btrfs_ioctl_search_args, buf);
+		btrfs_print_tree_search(tcp, &args.key, arg + buf_offset,
+					sizeof(args.buf), false);
+		if (entering(tcp))
+			return 0;
+		break;
+	}
+
+	case BTRFS_IOC_TREE_SEARCH_V2: { /* RW */
+		struct btrfs_ioctl_search_args_v2 args;
+		uint64_t buf_offset;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp)) {
+			if (tcp->u_error == EOVERFLOW) {
+				tprints(" => ");
+				tcp->u_error = 0;
+				if (!umove_or_printaddr(tcp, arg, &args))
+					tprintf("{buf_size=%" PRIu64 "}",
+						(uint64_t)args.buf_size);
+				tcp->u_error = EOVERFLOW;
+			}
+			break;
+		} else
+			tprints(" => ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		buf_offset = offsetof(struct btrfs_ioctl_search_args_v2, buf);
+		btrfs_print_tree_search(tcp, &args.key, arg + buf_offset,
+					args.buf_size, true);
+		if (entering(tcp))
+			return 0;
+		break;
+	}
+
+	case BTRFS_IOC_SEND: { /* W */
+		struct_btrfs_ioctl_send_args args;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprints("{send_fd=");
+		printfd(tcp, args.send_fd);
+		tprintf(", clone_sources_count=%" PRIu64 ", clone_sources=",
+			(uint64_t) args.clone_sources_count);
+
+		if (abbrev(tcp))
+			tprints("...");
+		else {
+			uint64_t record;
+			print_array(tcp, (unsigned long) args.clone_sources,
+				    args.clone_sources_count,
+				    &record, sizeof(record),
+				    umoven_or_printaddr,
+				    print_objectid_callback, 0);
+		}
+		tprints(", parent_root=");
+		btrfs_print_objectid(args.parent_root);
+		tprints(", flags=");
+		printflags64(btrfs_send_flags, args.flags,
+			     "BTRFS_SEND_FLAGS_???");
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_SPACE_INFO: { /* RW */
+		struct btrfs_ioctl_space_args args;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprints("{");
+		if (entering(tcp)) {
+			tprintf("space_slots=%" PRI__u64 "}", args.space_slots);
+			return 0;
+		}
+
+		tprintf("total_spaces=%" PRI__u64, args.total_spaces);
+
+		if (args.space_slots == 0 && args.total_spaces) {
+			tprints("}");
+			break;
+		}
+
+		tprints(", spaces=");
+
+		if (abbrev(tcp))
+			tprints("...");
+		else {
+			struct btrfs_ioctl_space_info info;
+			print_array(tcp, arg + offsetof(typeof(args), spaces),
+				    args.total_spaces,
+				    &info, sizeof(info), umoven_or_printaddr,
+				    print_btrfs_ioctl_space_info, 0);
+		}
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_SNAP_CREATE:
+	case BTRFS_IOC_RESIZE:
+	case BTRFS_IOC_SCAN_DEV:
+	case BTRFS_IOC_ADD_DEV:
+	case BTRFS_IOC_RM_DEV:
+	case BTRFS_IOC_SUBVOL_CREATE:
+	case BTRFS_IOC_SNAP_DESTROY:
+	case BTRFS_IOC_DEVICES_READY: { /* W */
+		struct btrfs_ioctl_vol_args args;
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		tprints("{fd=");
+		printfd(tcp, args.fd);
+		tprints(", name=");
+		print_quoted_string(args.name, sizeof(args.name),
+				    QUOTE_0_TERMINATED);
+		tprints("}");
+		break;
+	}
+
+	case BTRFS_IOC_SNAP_CREATE_V2:
+	case BTRFS_IOC_SUBVOL_CREATE_V2: { /* code is W, but is actually RW */
+		struct btrfs_ioctl_vol_args_v2 args;
+
+		if (entering(tcp))
+			tprints(", ");
+		else if (syserror(tcp))
+			break;
+		else
+			tprints(" => ");
+
+		if (umove_or_printaddr(tcp, arg, &args))
+			break;
+
+		if (entering(tcp)) {
+			tprints("{fd=");
+			printfd(tcp, args.fd);
+			tprints(", flags=");
+			printflags64(btrfs_snap_flags_v2, args.flags,
+				     "BTRFS_SUBVOL_???");
+			if (args.flags & BTRFS_SUBVOL_QGROUP_INHERIT) {
+				tprintf(", size=%" PRI__u64 ", qgroup_inherit=",
+					args.size);
+
+				btrfs_print_qgroup_inherit(tcp,
+					(unsigned long)args.qgroup_inherit);
+			}
+			tprintf(", name=");
+			print_quoted_string(args.name, sizeof(args.name),
+					    QUOTE_0_TERMINATED);
+			tprints("}");
+			return 0;
+		}
+		tprintf("{transid=%" PRI__u64 "}", args.transid);
+		break;
+	}
+
+	case BTRFS_IOC_GET_FSLABEL: /* R */
+		if (entering(tcp))
+			return 0;
+		/* fall through */
+	case BTRFS_IOC_SET_FSLABEL: { /* W */
+		char label[BTRFS_LABEL_SIZE];
+
+		tprints(", ");
+		if (umove_or_printaddr(tcp, arg, &label))
+			break;
+		print_quoted_string(label, sizeof(label), QUOTE_0_TERMINATED);
+		break;
+	}
+
+	case BTRFS_IOC_CLONE:			/* FICLONE */
+	case BTRFS_IOC_CLONE_RANGE:		/* FICLONERANGE */
+#ifdef BTRFS_IOC_FILE_EXTENT_SAME
+	case BTRFS_IOC_FILE_EXTENT_SAME:	/* FIDEDUPERANGE */
+#endif
+		/*
+		 * FICLONE, FICLONERANGE, and FIDEDUPERANGE started out as
+		 * btrfs ioctls and the code was kept for the generic
+		 * implementations.  We use the BTRFS_* names here because
+		 * they will be available on older systems.
+		 */
+		return file_ioctl(tcp, code, arg);
+
+	default:
+		return RVAL_DECODED;
+	};
+	return RVAL_DECODED | 1;
+}
+#endif /* HAVE_LINUX_BTRFS_H */
diff --git a/strace/cacheflush.c b/strace/cacheflush.c
new file mode 100644
index 0000000..8c2c05c
--- /dev/null
+++ b/strace/cacheflush.c
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 1999 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+ * Copyright (c) 2010 Mike Frysinger <vapier@gentoo.org>
+ * Copyright (c) 2010 Carmelo Amoroso <carmelo.amoroso@st.com>
+ * Copyright (c) 2015 Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
+ * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#ifdef HAVE_ASM_CACHECTL_H
+# include <asm/cachectl.h>
+#endif
+
+#ifdef M68K
+# include "xlat/cacheflush_scope.h"
+
+static const struct xlat cacheflush_flags[] = {
+#ifdef FLUSH_CACHE_BOTH
+	XLAT(FLUSH_CACHE_BOTH),
+#endif
+#ifdef FLUSH_CACHE_DATA
+	XLAT(FLUSH_CACHE_DATA),
+#endif
+#ifdef FLUSH_CACHE_INSN
+	XLAT(FLUSH_CACHE_INSN),
+#endif
+	XLAT_END
+};
+
+SYS_FUNC(cacheflush)
+{
+	/* addr */
+	printaddr(tcp->u_arg[0]);
+	tprints(", ");
+	/* scope */
+	printxval(cacheflush_scope, tcp->u_arg[1], "FLUSH_SCOPE_???");
+	tprints(", ");
+	/* flags */
+	printflags(cacheflush_flags, tcp->u_arg[2], "FLUSH_CACHE_???");
+	/* len */
+	tprintf(", %lu", tcp->u_arg[3]);
+
+	return RVAL_DECODED;
+}
+#endif /* M68K */
+
+#ifdef BFIN
+static const struct xlat cacheflush_flags[] = {
+	XLAT(ICACHE),
+	XLAT(DCACHE),
+	XLAT(BCACHE),
+	XLAT_END
+};
+
+SYS_FUNC(cacheflush)
+{
+	/* start addr */
+	printaddr(tcp->u_arg[0]);
+	/* length */
+	tprintf(", %lu, ", tcp->u_arg[1]);
+	/* flags */
+	printxval(cacheflush_flags, tcp->u_arg[2], "?CACHE");
+
+	return RVAL_DECODED;
+}
+#endif /* BFIN */
+
+#ifdef SH
+static const struct xlat cacheflush_flags[] = {
+#ifdef CACHEFLUSH_D_INVAL
+	XLAT(CACHEFLUSH_D_INVAL),
+#endif
+#ifdef CACHEFLUSH_D_WB
+	XLAT(CACHEFLUSH_D_WB),
+#endif
+#ifdef CACHEFLUSH_D_PURGE
+	XLAT(CACHEFLUSH_D_PURGE),
+#endif
+#ifdef CACHEFLUSH_I
+	XLAT(CACHEFLUSH_I),
+#endif
+	XLAT_END
+};
+
+SYS_FUNC(cacheflush)
+{
+	/* addr */
+	printaddr(tcp->u_arg[0]);
+	/* len */
+	tprintf(", %lu, ", tcp->u_arg[1]);
+	/* flags */
+	printflags(cacheflush_flags, tcp->u_arg[2], "CACHEFLUSH_???");
+
+	return RVAL_DECODED;
+}
+#endif /* SH */
+
+#ifdef NIOS2
+SYS_FUNC(cacheflush)
+{
+	/* addr */
+	printaddr(tcp->u_arg[0]);
+	/* len */
+	tprintf(", %lu, ", tcp->u_arg[3]);
+	/* scope and flags (cache type) are currently ignored */
+
+	return RVAL_DECODED;
+}
+#endif /* NIOS2 */
diff --git a/strace/capability.c b/strace/capability.c
new file mode 100644
index 0000000..421649d
--- /dev/null
+++ b/strace/capability.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2000 Wichert Akkerman <wakkerma@debian.org>
+ * Copyright (c) 2011 Denys Vlasenko <dvlasenk@redhat.com>
+ * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+/* these constants are the same as in <linux/capability.h> */
+enum {
+#include "caps0.h"
+};
+
+#include "xlat/cap_mask0.h"
+
+/* these constants are CAP_TO_INDEX'ed constants from <linux/capability.h> */
+enum {
+#include "caps1.h"
+};
+
+#include "xlat/cap_mask1.h"
+
+/* these constants are the same as in <linux/capability.h> */
+enum {
+	_LINUX_CAPABILITY_VERSION_1 = 0x19980330,
+	_LINUX_CAPABILITY_VERSION_2 = 0x20071026,
+	_LINUX_CAPABILITY_VERSION_3 = 0x20080522
+};
+
+#include "xlat/cap_version.h"
+
+typedef struct user_cap_header_struct {
+	uint32_t version;
+	int pid;
+} *cap_user_header_t;
+
+typedef struct user_cap_data_struct {
+	uint32_t effective;
+	uint32_t permitted;
+	uint32_t inheritable;
+} *cap_user_data_t;
+
+static cap_user_header_t
+get_cap_header(struct tcb *tcp, unsigned long addr)
+{
+	static struct user_cap_header_struct header;
+
+	if (!addr || !verbose(tcp))
+		return NULL;
+
+	if (umove(tcp, addr, &header) < 0)
+		return NULL;
+
+	return &header;
+}
+
+static void
+print_cap_header(struct tcb *tcp, unsigned long addr, cap_user_header_t h)
+{
+	if (!addr || !h) {
+		printaddr(addr);
+		return;
+	}
+
+	tprints("{");
+	printxval(cap_version, h->version,
+		  "_LINUX_CAPABILITY_VERSION_???");
+	tprintf(", %d}", h->pid);
+}
+
+static void
+print_cap_bits(const uint32_t lo, const uint32_t hi)
+{
+	if (lo || !hi)
+		printflags(cap_mask0, lo, "CAP_???");
+
+	if (hi) {
+		if (lo)
+			tprints("|");
+		printflags(cap_mask1, hi, "CAP_???");
+	}
+}
+
+static void
+print_cap_data(struct tcb *tcp, unsigned long addr, const cap_user_header_t h)
+{
+	struct user_cap_data_struct data[2];
+	unsigned int len;
+
+	if (!addr || !h) {
+		printaddr(addr);
+		return;
+	}
+
+	if (_LINUX_CAPABILITY_VERSION_2 == h->version ||
+	    _LINUX_CAPABILITY_VERSION_3 == h->version)
+		len = 2;
+	else
+		len = 1;
+
+	if (umoven_or_printaddr(tcp, addr, len * sizeof(data[0]), data))
+		return;
+
+	tprints("{");
+	print_cap_bits(data[0].effective, len > 1 ? data[1].effective : 0);
+	tprints(", ");
+	print_cap_bits(data[0].permitted, len > 1 ? data[1].permitted : 0);
+	tprints(", ");
+	print_cap_bits(data[0].inheritable, len > 1 ? data[1].inheritable : 0);
+	tprints("}");
+}
+
+SYS_FUNC(capget)
+{
+	cap_user_header_t h;
+
+	if (entering(tcp)) {
+		h = get_cap_header(tcp, tcp->u_arg[0]);
+		print_cap_header(tcp, tcp->u_arg[0], h);
+		tprints(", ");
+	} else {
+		h = syserror(tcp) ? NULL : get_cap_header(tcp, tcp->u_arg[0]);
+		print_cap_data(tcp, tcp->u_arg[1], h);
+	}
+	return 0;
+}
+
+SYS_FUNC(capset)
+{
+	cap_user_header_t h = get_cap_header(tcp, tcp->u_arg[0]);
+	print_cap_header(tcp, tcp->u_arg[0], h);
+	tprints(", ");
+	print_cap_data(tcp, tcp->u_arg[1], h);
+
+	return RVAL_DECODED;
+}
diff --git a/strace/caps0.h b/strace/caps0.h
new file mode 100644
index 0000000..ad206ff
--- /dev/null
+++ b/strace/caps0.h
@@ -0,0 +1,32 @@
+CAP_CHOWN,
+CAP_DAC_OVERRIDE,
+CAP_DAC_READ_SEARCH,
+CAP_FOWNER,
+CAP_FSETID,
+CAP_KILL,
+CAP_SETGID,
+CAP_SETUID,
+CAP_SETPCAP,
+CAP_LINUX_IMMUTABLE,
+CAP_NET_BIND_SERVICE,
+CAP_NET_BROADCAST,
+CAP_NET_ADMIN,
+CAP_NET_RAW,
+CAP_IPC_LOCK,
+CAP_IPC_OWNER,
+CAP_SYS_MODULE,
+CAP_SYS_RAWIO,
+CAP_SYS_CHROOT,
+CAP_SYS_PTRACE,
+CAP_SYS_PACCT,
+CAP_SYS_ADMIN,
+CAP_SYS_BOOT,
+CAP_SYS_NICE,
+CAP_SYS_RESOURCE,
+CAP_SYS_TIME,
+CAP_SYS_TTY_CONFIG,
+CAP_MKNOD,
+CAP_LEASE,
+CAP_AUDIT_WRITE,
+CAP_AUDIT_CONTROL,
+CAP_SETFCAP,
diff --git a/strace/caps1.h b/strace/caps1.h
new file mode 100644
index 0000000..d8fa6f4
--- /dev/null
+++ b/strace/caps1.h
@@ -0,0 +1,6 @@
+CAP_MAC_OVERRIDE,
+CAP_MAC_ADMIN,
+CAP_SYSLOG,
+CAP_WAKE_ALARM,
+CAP_BLOCK_SUSPEND,
+CAP_AUDIT_READ,
diff --git a/strace/chdir.c b/strace/chdir.c
new file mode 100644
index 0000000..e8ac285
--- /dev/null
+++ b/strace/chdir.c
@@ -0,0 +1,8 @@
+#include "defs.h"
+
+SYS_FUNC(chdir)
+{
+	printpath(tcp, tcp->u_arg[0]);
+
+	return RVAL_DECODED;
+}
diff --git a/strace/chmod.c b/strace/chmod.c
new file mode 100644
index 0000000..83741c9
--- /dev/null
+++ b/strace/chmod.c
@@ -0,0 +1,31 @@
+#include "defs.h"
+
+static void
+decode_chmod(struct tcb *tcp, const int offset)
+{
+	printpath(tcp, tcp->u_arg[offset]);
+	tprintf(", %#lo", tcp->u_arg[offset + 1]);
+}
+
+SYS_FUNC(chmod)
+{
+	decode_chmod(tcp, 0);
+
+	return RVAL_DECODED;
+}
+
+SYS_FUNC(fchmodat)
+{
+	print_dirfd(tcp, tcp->u_arg[0]);
+	decode_chmod(tcp, 1);
+
+	return RVAL_DECODED;
+}
+
+SYS_FUNC(fchmod)
+{
+	printfd(tcp, tcp->u_arg[0]);
+	tprintf(", %#lo", tcp->u_arg[1]);
+
+	return RVAL_DECODED;
+}
diff --git a/strace/clone.c b/strace/clone.c
new file mode 100644
index 0000000..99d0da7
--- /dev/null
+++ b/strace/clone.c
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 1999-2000 Wichert Akkerman <wichert@cistron.nl>
+ * Copyright (c) 2002-2005 Roland McGrath <roland@redhat.com>
+ * Copyright (c) 2008 Jan Kratochvil <jan.kratochvil@redhat.com>
+ * Copyright (c) 2009-2013 Denys Vlasenko <dvlasenk@redhat.com>
+ * Copyright (c) 2006-2015 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+#include <sched.h>
+
+#ifndef CSIGNAL
+# define CSIGNAL 0x000000ff
+#endif
+
+#include "xlat/clone_flags.h"
+
+#if defined IA64
+# define ARG_FLAGS	0
+# define ARG_STACK	1
+# define ARG_STACKSIZE	(tcp->scno == SYS_clone2 ? 2 : -1)
+# define ARG_PTID	(tcp->scno == SYS_clone2 ? 3 : 2)
+# define ARG_CTID	(tcp->scno == SYS_clone2 ? 4 : 3)
+# define ARG_TLS	(tcp->scno == SYS_clone2 ? 5 : 4)
+#elif defined S390 || defined S390X || defined CRISV10 || defined CRISV32
+# define ARG_STACK	0
+# define ARG_FLAGS	1
+# define ARG_PTID	2
+# define ARG_CTID	3
+# define ARG_TLS	4
+#elif defined X86_64 || defined X32
+/* x86 personality processes have the last two arguments flipped. */
+# define ARG_FLAGS	0
+# define ARG_STACK	1
+# define ARG_PTID	2
+# define ARG_CTID	((current_personality != 1) ? 3 : 4)
+# define ARG_TLS	((current_personality != 1) ? 4 : 3)
+#elif defined ALPHA || defined TILE || defined OR1K
+# define ARG_FLAGS	0
+# define ARG_STACK	1
+# define ARG_PTID	2
+# define ARG_CTID	3
+# define ARG_TLS	4
+#else
+# define ARG_FLAGS	0
+# define ARG_STACK	1
+# define ARG_PTID	2
+# define ARG_TLS	3
+# define ARG_CTID	4
+#endif
+
+#if defined I386 || defined X86_64 || defined X32
+extern void print_user_desc(struct tcb *, long);
+#endif /* I386 || X86_64 || X32 */
+
+SYS_FUNC(clone)
+{
+	if (exiting(tcp)) {
+		const char *sep = "|";
+		unsigned long flags = tcp->u_arg[ARG_FLAGS];
+		tprints("child_stack=");
+		printaddr(tcp->u_arg[ARG_STACK]);
+		tprints(", ");
+#ifdef ARG_STACKSIZE
+		if (ARG_STACKSIZE != -1)
+			tprintf("stack_size=%#lx, ",
+				tcp->u_arg[ARG_STACKSIZE]);
+#endif
+		tprints("flags=");
+		if (!printflags(clone_flags, flags &~ CSIGNAL, NULL))
+			sep = "";
+		if ((flags & CSIGNAL) != 0)
+			tprintf("%s%s", sep, signame(flags & CSIGNAL));
+		if ((flags & (CLONE_PARENT_SETTID|CLONE_CHILD_SETTID
+			      |CLONE_CHILD_CLEARTID|CLONE_SETTLS)) == 0)
+			return 0;
+		if (flags & CLONE_PARENT_SETTID) {
+			tprints(", parent_tidptr=");
+			printaddr(tcp->u_arg[ARG_PTID]);
+		}
+		if (flags & CLONE_SETTLS) {
+#if defined I386 || defined X86_64 || defined X32
+# ifndef I386
+			if (current_personality == 1)
+# endif
+			{
+				tprints(", tls=");
+				print_user_desc(tcp, tcp->u_arg[ARG_TLS]);
+			}
+# ifndef I386
+			else
+# endif
+#endif /* I386 || X86_64 || X32 */
+			{
+				tprints(", tls=");
+				printaddr(tcp->u_arg[ARG_TLS]);
+			}
+		}
+		if (flags & (CLONE_CHILD_SETTID|CLONE_CHILD_CLEARTID)) {
+			tprints(", child_tidptr=");
+			printaddr(tcp->u_arg[ARG_CTID]);
+		}
+	}
+	/* TODO on syscall entry:
+	 * We can clear CLONE_PTRACE here since it is an ancient hack
+	 * to allow us to catch children, and we use another hack for that.
+	 * But CLONE_PTRACE can conceivably be used by malicious programs
+	 * to subvert us. By clearing this bit, we can defend against it:
+	 * in untraced execution, CLONE_PTRACE should have no effect.
+	 *
+	 * We can also clear CLONE_UNTRACED, since it allows to start
+	 * children outside of our control. At the moment
+	 * I'm trying to figure out whether there is a *legitimate*
+	 * use of this flag which we should respect.
+	 */
+	return 0;
+}
+
+SYS_FUNC(setns)
+{
+	printfd(tcp, tcp->u_arg[0]);
+	tprints(", ");
+	printflags(clone_flags, tcp->u_arg[1], "CLONE_???");
+
+	return RVAL_DECODED;
+}
+
+SYS_FUNC(unshare)
+{
+	printflags_long(clone_flags, tcp->u_arg[0], "CLONE_???");
+	return RVAL_DECODED;
+}
+
+SYS_FUNC(fork)
+{
+	return RVAL_DECODED | RVAL_UDECIMAL;
+}
diff --git a/strace/configure.ac b/strace/configure.ac
new file mode 100644
index 0000000..4af1649
--- /dev/null
+++ b/strace/configure.ac
@@ -0,0 +1,790 @@
+# Configure template for strace.
+#
+# Copyright (c) 1999-2001 Wichert Akkerman <wichert@deephackmode.org>
+# Copyright (c) 2002-2009 Roland McGrath <roland@redhat.com>
+# Copyright (c) 2006-2016 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2008-2015 Mike Frysinger <vapier@gentoo.org>
+# Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+AC_PREREQ(2.57)
+AC_INIT([strace],
+	m4_esyscmd([./git-version-gen .tarball-version]),
+	[strace-devel@lists.sourceforge.net])
+AC_CONFIG_SRCDIR([strace.c])
+AC_CONFIG_AUX_DIR([.])
+AC_CONFIG_HEADERS([config.h])
+AM_INIT_AUTOMAKE([foreign nostdinc dist-xz silent-rules parallel-tests])
+AM_MAINTAINER_MODE
+AC_CANONICAL_HOST
+
+RPM_CHANGELOGTIME="$(LC_TIME=C date '+%a %b %d %Y')"
+AC_SUBST(RPM_CHANGELOGTIME)
+DEB_CHANGELOGTIME="$(LC_TIME=C date -R)"
+AC_SUBST(DEB_CHANGELOGTIME)
+
+AC_PROG_CC
+AC_PROG_CPP
+AX_PROG_CC_FOR_BUILD
+AC_PROG_INSTALL
+AC_PROG_RANLIB
+
+AC_USE_SYSTEM_EXTENSIONS
+AX_CODE_COVERAGE
+
+AC_MSG_CHECKING([for supported architecture])
+arch_m32=
+arch_mx32=
+case "$host_cpu" in
+bfin)
+	arch=bfin
+	AC_DEFINE([BFIN], 1, [Define for the Blackfin architecture.])
+	;;
+i[[3456]]86|pentium)
+	arch=i386
+	AC_DEFINE([I386], 1, [Define for the i386 architecture.])
+	;;
+ia64)
+	arch=ia64
+	AC_DEFINE([IA64], 1, [Define for the IA64 architecture.])
+	;;
+m68k)
+	arch=m68k
+	AC_DEFINE([M68K], 1, [Define for the m68k architecture.])
+	;;
+sparc64*)
+	arch=sparc64
+	arch_m32=sparc
+	AC_DEFINE([SPARC64], 1, [Define for the SPARC64 architecture.])
+	;;
+sparc*)
+	arch=sparc
+	AC_DEFINE([SPARC], 1, [Define for the SPARC architecture.])
+	;;
+metag*)
+	arch=metag
+	AC_DEFINE([METAG], 1, [Define for the Meta architecture.])
+	;;
+mips*)
+	arch=mips
+	AC_DEFINE([MIPS], 1, [Define for the MIPS architecture.])
+	;;
+alpha*)
+	arch=alpha
+	AC_DEFINE([ALPHA], 1, [Define for the Alpha architecture.])
+	;;
+powerpc*)
+	AC_DEFINE([POWERPC], 1, [Define for the PowerPC architecture.])
+	AC_TRY_COMPILE(
+[#ifndef __LP64__
+# error 32 bit
+#endif], [], arch=powerpc64, arch=powerpc)
+	if test "$arch" = "powerpc64"; then
+		arch_m32=powerpc
+		AC_DEFINE([POWERPC64], 1, [Define for the PowerPC64 architecture.])
+	fi
+	;;
+arm*)
+	arch=arm
+	AC_DEFINE([ARM], 1, [Define for the ARM architecture.])
+	;;
+aarch64*)
+	arch=aarch64
+	arch_m32=arm
+	AC_DEFINE([AARCH64], 1, [Define for the AArch64 architecture.])
+	;;
+avr32*)
+	arch=avr32
+	AC_DEFINE([AVR32], 1, [Define for the AVR32 architecture.])
+	;;
+arc*)
+	arch=arc
+	AC_DEFINE([ARC], 1, [Define for the ARC architecture.])
+	;;
+s390)
+	arch=s390
+	AC_DEFINE([S390], 1, [Define for the S390 architecture.])
+	;;
+s390x)
+	arch=s390x
+	AC_DEFINE([S390X], 1, [Define for the S390x architecture.])
+	;;
+hppa*|parisc*)
+	arch=hppa
+	AC_DEFINE([HPPA], 1, [Define for the HPPA architecture.])
+	;;
+sh64*)
+	arch=sh64
+	AC_DEFINE([SH64], 1, [Define for the SH64 architecture.])
+	;;
+sh*)
+	arch=sh
+	AC_DEFINE([SH], 1, [Define for the SH architecture.])
+	;;
+x86?64*)
+	arch_m32=i386
+	AC_TRY_COMPILE(
+[#ifndef __ILP32__
+# error not x32
+#endif], [], arch=x32, arch=x86_64)
+	if test "$arch" = "x86_64"; then
+		arch_mx32=x32
+		AC_DEFINE([X86_64], 1, [Define for the 64bit AMD x86-64 architecture.])
+	else
+		AC_DEFINE([X32], 1, [Define for the 32bit AMD x86-64 architecture.])
+	fi
+	;;
+cris|crisv10)
+	arch=crisv10
+	AC_DEFINE([CRISV10], 1, [Define for the CRISv10 architecture.])
+	;;
+crisv32)
+	arch=crisv32
+	AC_DEFINE([CRISV32], 1, [Define for the CRISv32 architecture.])
+	;;
+tile*)
+	arch=tile
+	AC_DEFINE([TILE], 1, [Define for the Tile architecture])
+	;;
+microblaze*)
+	arch=microblaze
+	AC_DEFINE([MICROBLAZE], 1, [Define for the MicroBlaze architecture.])
+	;;
+nios2*)
+	arch=nios2
+	AC_DEFINE([NIOS2], 1, [Define for the Nios-II architecture.])
+	;;
+
+or1k*)
+	arch=or1k
+	AC_DEFINE([OR1K], 1, [Define for the OpenRISC 1000 architecture.])
+	;;
+
+xtensa*)
+	arch=xtensa
+	AC_DEFINE([XTENSA], 1, [Define for the Xtensa architecture])
+	;;
+
+*)
+	AC_MSG_RESULT([NO!])
+	AC_MSG_ERROR([architecture $host_cpu is not supported by strace])
+	;;
+esac
+AC_MSG_RESULT($arch)
+
+test -n "$arch_m32" ||
+	arch_m32=$arch
+test -n "$arch_mx32" ||
+	arch_mx32=$arch
+AC_SUBST(arch)
+AC_SUBST(arch_m32)
+AC_SUBST(arch_mx32)
+
+if test "$arch" = mips; then
+	AC_CACHE_CHECK([for _MIPS_SIM], [st_cv__MIPS_SIM],
+		       [AC_COMPUTE_INT([st_cv__MIPS_SIM], [_MIPS_SIM],
+				       [#include <sgidefs.h>],
+				       [AC_MSG_ERROR([_MIPS_SIM cannot be determined])])])
+
+	AC_CACHE_CHECK([for MIPS ABI], [st_cv_mips_abi],
+		[AC_COMPILE_IFELSE(
+			[AC_LANG_PROGRAM([[#include <sgidefs.h>]],
+					 [[int i[_MIPS_SIM == _MIPS_SIM_ABI32 ? 1 : - 1];]])],
+			[st_cv_mips_abi=o32],
+		[AC_COMPILE_IFELSE(
+			[AC_LANG_PROGRAM([[#include <sgidefs.h>]],
+					 [[int i[_MIPS_SIM == _MIPS_SIM_NABI32 ? 1 : - 1];]])],
+			[st_cv_mips_abi=n32],
+		[AC_COMPILE_IFELSE(
+			[AC_LANG_PROGRAM([[#include <sgidefs.h>]],
+					 [[int i[_MIPS_SIM == _MIPS_SIM_ABI64 ? 1 : - 1];]])],
+			[st_cv_mips_abi=n64],
+			[st_cv_mips_abi=unknown])])])])
+
+	case "$st_cv_mips_abi" in
+		o32) AC_DEFINE([LINUX_MIPSO32], [1], [Define for _MIPS_SIM_ABI32.]);;
+		n32) AC_DEFINE([LINUX_MIPSN32], [1], [Define for _MIPS_SIM_NABI32.]);;
+		n64) AC_DEFINE([LINUX_MIPSN64], [1], [Define for _MIPS_SIM_ABI64.]);;
+		*) AC_MSG_ERROR([Unsupported _MIPS_SIM]);;
+	esac
+fi
+
+AC_ARG_ENABLE([arm-oabi],
+	      [AS_HELP_STRING([--enable-arm-oabi],
+			      [enable OABI support on ARM EABI])],
+	      [], [enable_arm_oabi=no])
+case "$enable_arm_oabi" in
+	yes) enable_arm_oabi=1 ;;
+	no) enable_arm_oabi=0 ;;
+	*) AC_MSG_ERROR([bad value $enable_arm_oabi for arm-oabi option]) ;;
+esac
+AC_DEFINE_UNQUOTED([ENABLE_ARM_OABI], [$enable_arm_oabi],
+		   [Define to 1 if you want OABI support on ARM EABI.])
+
+gl_WARN_ADD([-Wall])
+gl_WARN_ADD([-Wempty-body])
+gl_WARN_ADD([-Wformat-security])
+gl_WARN_ADD([-Wignored-qualifiers])
+gl_WARN_ADD([-Winit-self])
+gl_WARN_ADD([-Wlogical-op])
+gl_WARN_ADD([-Wmissing-parameter-type])
+gl_WARN_ADD([-Wnested-externs])
+gl_WARN_ADD([-Wold-style-declaration])
+gl_WARN_ADD([-Wold-style-definition])
+gl_WARN_ADD([-Wsign-compare])
+gl_WARN_ADD([-Wtype-limits])
+gl_WARN_ADD([-Wwrite-strings])
+AC_ARG_ENABLE([gcc-Werror],
+  [AS_HELP_STRING([--enable-gcc-Werror], [turn on gcc's -Werror option])],
+  [case $enableval in
+     yes) gl_WARN_ADD([-Werror]) ;;
+     no)  ;;
+     *)   AC_MSG_ERROR([bad value $enableval for gcc-Werror option]) ;;
+   esac]
+)
+AC_SUBST([WARN_CFLAGS])
+
+AC_C_BIGENDIAN
+AC_C_CONST
+AC_C_TYPEOF
+
+AC_TYPE_GETGROUPS
+AC_TYPE_MODE_T
+AC_TYPE_SIGNAL
+AC_TYPE_UID_T
+
+AC_HEADER_DIRENT
+AC_HEADER_MAJOR
+AC_HEADER_STAT
+AC_HEADER_STDBOOL
+AC_HEADER_STDC
+
+AC_CHECK_FUNCS(m4_normalize([
+	accept4
+	fanotify_mark
+	fopen64
+	fork
+	fputs_unlocked
+	fstatat
+	ftruncate
+	futimens
+	if_indextoname
+	open64
+	pipe2
+	prctl
+	preadv
+	process_vm_readv
+	pwritev
+	sigaction
+	signalfd
+	stpcpy
+	strerror
+	strsignal
+	sync_file_range
+	utimensat
+]))
+
+AC_CHECK_TYPES([sig_atomic_t, struct sigcontext],,, [#include <signal.h>])
+
+AC_CHECK_TYPES([struct mmsghdr],,, [#include <sys/socket.h>])
+
+AC_CHECK_TYPES([__kernel_long_t, __kernel_ulong_t],,,
+[#include <asm/posix_types.h>])
+
+AC_CHECK_TYPES([struct stat64, struct __old_kernel_stat],,,
+[#include <sys/types.h>
+#include <asm/stat.h>])
+
+AC_CHECK_TYPES(m4_normalize([
+	struct pt_all_user_regs,
+	struct ia64_fpreg,
+	struct ptrace_peeksiginfo_args
+]),,, [#include <sys/ptrace.h>])
+
+AC_CHECK_TYPES(m4_normalize([
+	struct flock,
+	struct flock64,
+	struct __kernel_flock,
+	struct __kernel_flock64
+]),,,
+[#include <sys/types.h>
+#include <linux/fcntl.h>])
+
+AC_CHECK_MEMBERS(m4_normalize([
+	struct stat.st_atim.tv_nsec,
+	struct stat.st_blksize,
+	struct stat.st_blocks,
+	struct stat.st_ctim.tv_nsec,
+	struct stat.st_flags,
+	struct stat.st_fstype,
+	struct stat.st_gen,
+	struct stat.st_mtim.tv_nsec,
+	struct stat.st_rdev
+]))
+
+AC_CHECK_MEMBERS([struct timex.tai],,, [#include <sys/timex.h>])
+
+AC_CHECK_MEMBERS([struct utsname.domainname],,, [#include <sys/utsname.h>])
+
+AC_CHECK_MEMBERS(m4_normalize([
+	struct stat.st_atime_nsec,
+	struct stat.st_ctime_nsec,
+	struct stat.st_mtime_nsec
+]),,, [#include <sys/types.h>
+#include <asm/stat.h>])
+
+AC_CHECK_MEMBERS(m4_normalize([
+	siginfo_t.si_syscall,
+	siginfo_t.si_timerid,
+	siginfo_t.si_overrun
+]),,, [#include <signal.h>])
+
+AC_CHECK_HEADERS(m4_normalize([
+	asm/cachectl.h
+	asm/sysmips.h
+	bluetooth/bluetooth.h
+	elf.h
+	inttypes.h
+	linux/bsg.h
+	linux/falloc.h
+	linux/fiemap.h
+	linux/filter.h
+	linux/hiddev.h
+	linux/ip_vs.h
+	linux/ipc.h
+	linux/mmtimer.h
+	linux/msg.h
+	linux/perf_event.h
+	linux/seccomp.h
+	linux/securebits.h
+	linux/sem.h
+	linux/shm.h
+	linux/userfaultfd.h
+	linux/utsname.h
+	mqueue.h
+	netinet/sctp.h
+	netipx/ipx.h
+	scsi/sg.h
+	stropts.h
+	sys/conf.h
+	sys/eventfd.h
+	sys/fanotify.h
+	sys/ipc.h
+	sys/msg.h
+	sys/reg.h
+	sys/sem.h
+	sys/shm.h
+	sys/signalfd.h
+	sys/xattr.h
+]))
+
+AC_CHECK_HEADERS([asm/sigcontext.h],,, [#include <signal.h>])
+
+AC_CHECK_HEADERS([netinet/tcp.h netinet/udp.h],,, [#include <netinet/in.h>])
+
+AC_CHECK_HEADERS([linux/mqueue.h],,, [#include <linux/types.h>])
+
+AC_CHECK_HEADERS(m4_normalize([
+	linux/netfilter_arp/arp_tables.h
+	linux/netfilter_bridge/ebtables.h
+	linux/netfilter_ipv4/ip_tables.h
+	linux/netfilter_ipv6/ip6_tables.h
+]),,, [#include <netinet/in.h>
+#include <net/if.h>])
+
+AC_CHECK_HEADERS([linux/input.h], [
+	AC_CHECK_MEMBERS([struct input_absinfo.resolution],,, [#include <linux/input.h>])
+])
+
+AC_CHECK_HEADERS([linux/bpf.h], [
+	AC_CACHE_CHECK([whether union bpf_attr.log_buf initialization works],
+		       [st_cv_have_union_bpf_attr_log_buf],
+		[AC_COMPILE_IFELSE(
+			[AC_LANG_PROGRAM([[#include <linux/bpf.h>]],
+					 [[union bpf_attr a = { .log_buf = 0 };]])],
+			[st_cv_have_union_bpf_attr_log_buf=yes],
+			[st_cv_have_union_bpf_attr_log_buf=no])])
+	if test $st_cv_have_union_bpf_attr_log_buf = yes; then
+		AC_DEFINE(HAVE_UNION_BPF_ATTR_LOG_BUF, [1],
+			  [Define to 1 if union bpf_attr.log_buf initialization works])
+	fi
+])
+
+AC_CHECK_TYPES([struct statfs], [
+	AC_CHECK_MEMBERS([struct statfs.f_frsize],,, [#include <linux/types.h>
+#include <asm/statfs.h>])
+	AC_CHECK_MEMBERS([struct statfs.f_flags],,, [#include <linux/types.h>
+#include <asm/statfs.h>])
+	AC_CHECK_MEMBERS([struct statfs.f_fsid.val],,, [#include <linux/types.h>
+#include <asm/statfs.h>])
+	AC_CHECK_MEMBERS([struct statfs.f_fsid.__val],,, [#include <linux/types.h>
+#include <asm/statfs.h>])
+],, [#include <linux/types.h>
+#include <asm/statfs.h>])
+
+AC_CHECK_TYPES([struct statfs64], [
+	AC_CHECK_MEMBERS([struct statfs64.f_frsize],,, [#include <linux/types.h>
+#include <asm/statfs.h>])
+	AC_CHECK_MEMBERS([struct statfs64.f_flags],,, [#include <linux/types.h>
+#include <asm/statfs.h>])
+	AC_CHECK_MEMBERS([struct statfs64.f_fsid.val],,, [#include <linux/types.h>
+#include <asm/statfs.h>])
+	AC_CHECK_MEMBERS([struct statfs64.f_fsid.__val],,, [#include <linux/types.h>
+#include <asm/statfs.h>])
+],, [#include <linux/types.h>
+#include <asm/statfs.h>])
+
+AC_CHECK_TYPES([struct blk_user_trace_setup],,, [#include <linux/blktrace_api.h>])
+
+AC_CHECK_HEADERS([linux/btrfs.h], [
+	AC_CHECK_MEMBERS(m4_normalize([
+		struct btrfs_ioctl_feature_flags.compat_flags,
+		struct btrfs_ioctl_fs_info_args.nodesize,
+		struct btrfs_ioctl_defrag_range_args.start,
+		struct btrfs_ioctl_search_args_v2.buf_size
+		]),,, [ #include <stdio.h>
+#include <linux/btrfs.h>])
+        AC_CHECK_DECLS(m4_normalize([BTRFS_COMPRESS_NONE, BTRFS_COMPRESS_ZLIB,
+	                        BTRFS_COMPRESS_LZO]),,,[ #include <stdio.h>
+#include <linux/btrfs.h>])])
+
+AC_CHECK_DECLS([sys_errlist])
+AC_CHECK_DECLS(m4_normalize([
+	PTRACE_PEEKUSER,
+	PTRACE_POKEUSER
+]),,, [#include <sys/ptrace.h>])
+
+AC_CHECK_DECLS(m4_normalize([
+	P_PID,
+	P_PPID,
+	P_PGID,
+	P_SID,
+	P_CID,
+	P_UID,
+	P_GID,
+	P_ALL,
+	P_LWPID
+]),,, [#include <sys/wait.h>])
+
+AC_CHECK_DECLS(m4_normalize([
+	LO_FLAGS_READ_ONLY,
+	LO_FLAGS_AUTOCLEAR,
+	LO_FLAGS_PARTSCAN
+]),,, [#include <linux/loop.h>])
+
+AC_CHECK_DECLS(m4_normalize([
+	CTL_PROC,
+	CTL_ARLAN,
+	CTL_S390DBF,
+	CTL_SUNRPC,
+	CTL_PM,
+	CTL_FRV,
+	KERN_PRINTK_RATELIMIT,
+	KERN_PRINTK_RATELIMIT_BURST,
+	KERN_PTY,
+	KERN_NGROUPS_MAX,
+	KERN_SPARC_SCONS_PWROFF,
+	KERN_HZ_TIMER,
+	KERN_UNKNOWN_NMI_PANIC,
+	KERN_BOOTLOADER_TYPE,
+	KERN_RANDOMIZE,
+	KERN_SETUID_DUMPABLE,
+	KERN_SPIN_RETRY,
+	KERN_ACPI_VIDEO_FLAGS,
+	KERN_IA64_UNALIGNED,
+	KERN_COMPAT_LOG,
+	KERN_MAX_LOCK_DEPTH,
+	KERN_NMI_WATCHDOG,
+	KERN_PANIC_ON_NMI,
+	NET_LLC,
+	NET_NETFILTER,
+	NET_DCCP,
+	NET_IRDA,
+	NET_CORE_DESTROY_DELAY,
+	NET_CORE_BUDGET,
+	NET_CORE_AEVENT_ETIME,
+	NET_CORE_AEVENT_RSEQTH,
+	NET_CORE_WARNINGS,
+	NET_IPV4_IGMP_MAX_MSF,
+	NET_TCP_NO_METRICS_SAVE,
+	NET_TCP_DEFAULT_WIN_SCALE,
+	NET_TCP_MODERATE_RCVBUF,
+	NET_TCP_TSO_WIN_DIVISOR,
+	NET_TCP_BIC_BETA,
+	NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR,
+	NET_TCP_CONG_CONTROL,
+	NET_TCP_ABC,
+	NET_IPV4_IPFRAG_MAX_DIST,
+	NET_TCP_MTU_PROBING,
+	NET_TCP_BASE_MSS,
+	NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS,
+	NET_TCP_DMA_COPYBREAK,
+	NET_TCP_SLOW_START_AFTER_IDLE,
+	NET_CIPSOV4_CACHE_ENABLE,
+	NET_CIPSOV4_CACHE_BUCKET_SIZE,
+	NET_CIPSOV4_RBM_OPTFMT,
+	NET_CIPSOV4_RBM_STRICTVALID,
+	NET_TCP_AVAIL_CONG_CONTROL,
+	NET_TCP_ALLOWED_CONG_CONTROL,
+	NET_TCP_MAX_SSTHRESH,
+	NET_TCP_FRTO_RESPONSE,
+	NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS,
+	NET_IPV4_CONF_FORCE_IGMP_VERSION,
+	NET_IPV4_CONF_ARP_ANNOUNCE,
+	NET_IPV4_CONF_ARP_IGNORE,
+	NET_IPV4_CONF_PROMOTE_SECONDARIES,
+	NET_IPV4_CONF_ARP_ACCEPT,
+	NET_IPV4_CONF_ARP_NOTIFY,
+	NET_IPV6_MLD_MAX_MSF,
+	NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS,
+	VM_MAX_MAP_COUNT,
+	VM_LAPTOP_MODE,
+	VM_BLOCK_DUMP,
+	VM_HUGETLB_GROUP,
+	VM_VFS_CACHE_PRESSURE,
+	VM_LEGACY_VA_LAYOUT,
+	VM_SWAP_TOKEN_TIMEOUT
+]),,,
+[#include <sys/types.h>
+#include <linux/sysctl.h>])
+
+AC_CHECK_DECLS(m4_normalize([
+	V4L2_FIELD_ANY,
+	V4L2_FIELD_NONE,
+	V4L2_FIELD_TOP,
+	V4L2_FIELD_BOTTOM,
+	V4L2_FIELD_INTERLACED,
+	V4L2_FIELD_SEQ_TB,
+	V4L2_FIELD_SEQ_BT,
+	V4L2_FIELD_ALTERNATE,
+	V4L2_FIELD_INTERLACED_TB,
+	V4L2_FIELD_INTERLACED_BT,
+	V4L2_BUF_TYPE_VIDEO_CAPTURE,
+	V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
+	V4L2_BUF_TYPE_VIDEO_OUTPUT,
+	V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+	V4L2_BUF_TYPE_VIDEO_OVERLAY,
+	V4L2_BUF_TYPE_VBI_CAPTURE,
+	V4L2_BUF_TYPE_VBI_OUTPUT,
+	V4L2_BUF_TYPE_SLICED_VBI_CAPTURE,
+	V4L2_BUF_TYPE_SLICED_VBI_OUTPUT,
+	V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY,
+	V4L2_TUNER_RADIO,
+	V4L2_TUNER_ANALOG_TV,
+	V4L2_TUNER_DIGITAL_TV,
+	V4L2_MEMORY_MMAP,
+	V4L2_MEMORY_USERPTR,
+	V4L2_MEMORY_OVERLAY,
+	V4L2_MEMORY_DMABUF,
+	V4L2_COLORSPACE_SMPTE170M,
+	V4L2_COLORSPACE_SMPTE240M,
+	V4L2_COLORSPACE_REC709,
+	V4L2_COLORSPACE_BT878,
+	V4L2_COLORSPACE_470_SYSTEM_M,
+	V4L2_COLORSPACE_470_SYSTEM_BG,
+	V4L2_COLORSPACE_JPEG,
+	V4L2_COLORSPACE_SRGB,
+	V4L2_PRIORITY_UNSET,
+	V4L2_PRIORITY_BACKGROUND,
+	V4L2_PRIORITY_INTERACTIVE,
+	V4L2_PRIORITY_RECORD,
+	V4L2_FRMSIZE_TYPE_DISCRETE,
+	V4L2_FRMSIZE_TYPE_CONTINUOUS,
+	V4L2_FRMSIZE_TYPE_STEPWISE,
+	V4L2_FRMIVAL_TYPE_DISCRETE,
+	V4L2_FRMIVAL_TYPE_CONTINUOUS,
+	V4L2_FRMIVAL_TYPE_STEPWISE,
+	V4L2_CTRL_TYPE_INTEGER,
+	V4L2_CTRL_TYPE_BOOLEAN,
+	V4L2_CTRL_TYPE_MENU,
+	V4L2_CTRL_TYPE_BUTTON,
+	V4L2_CTRL_TYPE_INTEGER64,
+	V4L2_CTRL_TYPE_CTRL_CLASS,
+	V4L2_CTRL_TYPE_STRING,
+	V4L2_CTRL_TYPE_BITMASK,
+	V4L2_CTRL_TYPE_INTEGER_MENU
+]),,, [#include <sys/time.h>
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/videodev2.h>])
+
+AC_CACHE_CHECK([for BLKGETSIZE64], [ac_cv_have_blkgetsize64],
+	[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
+#include <stdlib.h>
+#include <linux/fs.h>], [return !BLKGETSIZE64;])],
+			   [ac_cv_have_blkgetsize64=yes], [ac_cv_have_blkgetsize64=no])]
+	if test $ac_cv_have_blkgetsize64 = yes; then
+		AC_DEFINE([HAVE_BLKGETSIZE64], [1], [Define to 1 if you have BLKGETSIZE64.])
+	fi)
+
+AC_CHECK_SIZEOF([long])
+AC_CHECK_SIZEOF([long long])
+AC_CHECK_SIZEOF([off_t],,[#include <sys/types.h>])
+AC_CHECK_SIZEOF([struct i64_i32],,[struct i64_i32 {long long i64; int i32;};])
+
+AC_CACHE_CHECK([for SIGRTMIN], [st_cv_SIGRTMIN],
+	       [[st_cv_SIGRTMIN="$(echo SIGRTMIN |
+			$CPP $CPPFLAGS -P -imacros asm/signal.h - |
+			grep '^[0-9]')"
+	         test -n "$st_cv_SIGRTMIN" || st_cv_SIGRTMIN=no]])
+if test "x$st_cv_SIGRTMIN" != xno; then
+	AC_DEFINE_UNQUOTED([ASM_SIGRTMIN], [$st_cv_SIGRTMIN],
+			   [SIGRTMIN defined in <asm/signal.h>])
+fi
+AC_CACHE_CHECK([for SA_RESTORER], [st_cv_SA_RESTORER],
+	       [st_cv_SA_RESTORER="$(echo SA_RESTORER |
+			$CPP $CPPFLAGS -P -imacros asm/signal.h - |
+			grep ^0x)"
+	        test -n "$st_cv_SA_RESTORER" || st_cv_SA_RESTORER=no])
+if test "x$st_cv_SA_RESTORER" != xno; then
+	AC_DEFINE_UNQUOTED([ASM_SA_RESTORER], [$st_cv_SA_RESTORER],
+			   [SA_RESTORER defined in <asm/signal.h>])
+fi
+
+AC_CACHE_CHECK([for __builtin_popcount], [st_cv_have___builtin_popcount],
+	       [AC_LINK_IFELSE([AC_LANG_PROGRAM([], [__builtin_popcount(0)])],
+			       [st_cv_have___builtin_popcount=yes],
+			       [st_cv_have___builtin_popcount=no])])
+if test "x$st_cv_have___builtin_popcount" = xyes; then
+	AC_DEFINE([HAVE___BUILTIN_POPCOUNT], [1],
+		  [Define to 1 if the system provides __builtin_popcount function])
+fi
+
+AC_CHECK_LIB([dl], [dladdr], [dl_LIBS='-ldl'], [dl_LIBS=])
+if test "x$ac_cv_lib_dl_dladdr" = xyes; then
+	AC_DEFINE([HAVE_DLADDR], [1], [Define to 1 if the system provides dladdr])
+fi
+AC_SUBST(dl_LIBS)
+
+AC_PATH_PROG([PERL], [perl])
+
+dnl stack trace with libunwind
+libunwind_CPPFLAGS=
+libunwind_LDFLAGS=
+libunwind_LIBS=
+AC_ARG_WITH([libunwind],
+            [AS_HELP_STRING([--with-libunwind],
+                            [use libunwind to implement stack tracing support])],
+            [case "${withval}" in
+             yes|no|check) ;;
+             *) with_libunwind=yes
+                libunwind_CPPFLAGS="-I${withval}/include"
+                libunwind_LDFLAGS="-L${withval}/lib" ;;
+             esac],
+            [with_libunwind=check]
+)
+
+use_libunwind=no
+AS_IF([test "x$with_libunwind" != xno],
+      [saved_CPPFLAGS="$CPPFLAGS"
+       CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS"
+
+       AC_CHECK_HEADERS([libunwind-ptrace.h],
+         [saved_LDFLAGS="$LDFLAGS"
+          LDFLAGS="$LDFLAGS $libunwind_LDFLAGS"
+
+          AC_CHECK_LIB([unwind], [backtrace],
+            [libunwind_LIBS="-lunwind $libunwind_LIBS"
+
+             AC_MSG_CHECKING([for unw_create_addr_space in libunwind-generic])
+             saved_LIBS="$LIBS"
+             LIBS="-lunwind-generic $libunwind_LIBS $LIBS"
+
+             AC_LINK_IFELSE(
+               [AC_LANG_PROGRAM([[#include <libunwind-ptrace.h>]],
+                                [[return !unw_create_addr_space(0, 0)]])
+               ],
+               [AC_MSG_RESULT([yes])
+                libunwind_LIBS="-lunwind-generic $libunwind_LIBS"
+
+                AC_CHECK_LIB([unwind-ptrace], [_UPT_create],
+                  [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"
+                   use_libunwind=yes
+                  ],
+                  [if test "x$with_libunwind" != xcheck; then
+                     AC_MSG_FAILURE([failed to find _UPT_create in libunwind-ptrace])
+                   fi
+                  ],
+                  [$libunwind_LIBS]
+                )
+               ],
+               [AC_MSG_RESULT([no])
+                if test "x$with_libunwind" != xcheck; then
+                  AC_MSG_FAILURE([failed to find unw_create_addr_space in libunwind-generic])
+                fi
+               ]
+             )
+
+             LIBS="$saved_LIBS"
+            ],
+            [if test "x$with_libunwind" != xcheck; then
+               AC_MSG_FAILURE([failed to find libunwind])
+             fi
+            ],
+            [$libunwind_LIBS]
+          )
+
+          LDFLAGS="$saved_LDFLAGS"
+         ],
+         [if test "x$with_libunwind" != xcheck; then
+            AC_MSG_FAILURE([failed to find libunwind-ptrace.h])
+          fi
+         ]
+       )
+
+       CPPFLAGS="$saved_CPPFLAGS"
+      ]
+)
+
+dnl enable libunwind
+AC_MSG_CHECKING([whether to enable stack tracing support using libunwind])
+if test "x$use_libunwind" = xyes; then
+	AC_DEFINE([USE_LIBUNWIND], 1, [Compile stack tracing functionality])
+	AC_SUBST(libunwind_LIBS)
+	AC_SUBST(libunwind_LDFLAGS)
+	AC_SUBST(libunwind_CPPFLAGS)
+fi
+AM_CONDITIONAL([USE_LIBUNWIND], [test "x$use_libunwind" = xyes])
+AC_MSG_RESULT([$use_libunwind])
+
+if test "$arch" = mips && test "$no_create" != yes; then
+	mkdir -p linux/mips
+	if $srcdir/linux/mips/genstub.sh linux/mips; then
+		AC_MSG_RESULT([Generated MIPS syscallent stubs])
+	else
+		AC_MSG_FAILURE([Failed to generate syscallent stubs])
+	fi
+fi
+
+st_MPERS([m32], [aarch64|powerpc64|sparc64|tile|x32|x86_64])
+st_MPERS([mx32], [x86_64])
+
+AC_CONFIG_FILES([Makefile
+		 tests/Makefile
+		 tests-m32/Makefile
+		 tests-mx32/Makefile
+		 strace.spec
+		 debian/changelog])
+AC_OUTPUT
diff --git a/strace/copy_file_range.c b/strace/copy_file_range.c
new file mode 100644
index 0000000..8e711d1
--- /dev/null
+++ b/strace/copy_file_range.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+SYS_FUNC(copy_file_range)
+{
+	/* int fd_in */
+	printfd(tcp, tcp->u_arg[0]);
+	tprints(", ");
+	/* loff_t *off_in */
+	printnum_int64(tcp, tcp->u_arg[1], "%" PRId64);
+	tprints(", ");
+	/* int fd_out */
+	printfd(tcp, tcp->u_arg[2]);
+	tprints(", ");
+	/* loff_t *off_out */
+	printnum_int64(tcp, tcp->u_arg[3], "%" PRId64);
+	tprints(", ");
+	/* size_t len */
+	tprintf("%lu, ", tcp->u_arg[4]);
+	/* unsigned int flags */
+	tprintf("%u", (unsigned int) tcp->u_arg[5]);
+
+	return RVAL_DECODED;
+}
diff --git a/strace/count.c b/strace/count.c
new file mode 100644
index 0000000..1393b6e
--- /dev/null
+++ b/strace/count.c
@@ -0,0 +1,246 @@
+/*
+ * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+ * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+ * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+ * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
+ * Copyright (c) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
+ *                     Linux for s390 port by D.J. Barrow
+ *                    <barrow_dj@mail.yahoo.com,djbarrow@de.ibm.com>
+ * Copyright (c) 2004 Roland McGrath <roland@redhat.com>
+ * Copyright (c) 2006 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+/* Per-syscall stats structure */
+struct call_counts {
+	/* time may be total latency or system time */
+	struct timeval time;
+	int calls, errors;
+};
+
+static struct call_counts *countv[SUPPORTED_PERSONALITIES];
+#define counts (countv[current_personality])
+
+static struct timeval shortest = { 1000000, 0 };
+
+void
+count_syscall(struct tcb *tcp, const struct timeval *syscall_exiting_tv)
+{
+	struct timeval wtv;
+	struct timeval *tv = &wtv;
+	struct call_counts *cc;
+	unsigned long scno = tcp->scno;
+
+	if (!SCNO_IN_RANGE(scno))
+		return;
+
+	if (!counts)
+		counts = xcalloc(nsyscalls, sizeof(*counts));
+	cc = &counts[scno];
+
+	cc->calls++;
+	if (tcp->u_error)
+		cc->errors++;
+
+	/* tv = wall clock time spent while in syscall */
+	tv_sub(tv, syscall_exiting_tv, &tcp->etime);
+
+	/* Spent more wall clock time than spent system time? (usually yes) */
+	if (tv_cmp(tv, &tcp->dtime) > 0) {
+		static struct timeval one_tick = { -1, 0 };
+
+		if (one_tick.tv_sec == -1) {
+			/* Initialize it.  */
+			struct itimerval it;
+
+			memset(&it, 0, sizeof it);
+			it.it_interval.tv_usec = 1;
+			setitimer(ITIMER_REAL, &it, NULL);
+			getitimer(ITIMER_REAL, &it);
+			one_tick = it.it_interval;
+//FIXME: this hack doesn't work (tested on linux-3.6.11): one_tick = 0.000000
+//tprintf(" one_tick.tv_usec:%u\n", (unsigned)one_tick.tv_usec);
+		}
+
+		if (tv_nz(&tcp->dtime))
+			/* tv = system time spent, if it isn't 0 */
+			tv = &tcp->dtime;
+		else if (tv_cmp(tv, &one_tick) > 0) {
+			/* tv = smallest "sane" time interval */
+			if (tv_cmp(&shortest, &one_tick) < 0)
+				tv = &shortest;
+			else
+				tv = &one_tick;
+		}
+	}
+	if (tv_cmp(tv, &shortest) < 0)
+		shortest = *tv;
+	tv_add(&cc->time, &cc->time, count_wallclock ? &wtv : tv);
+}
+
+static int
+time_cmp(void *a, void *b)
+{
+	return -tv_cmp(&counts[*((int *) a)].time,
+		       &counts[*((int *) b)].time);
+}
+
+static int
+syscall_cmp(void *a, void *b)
+{
+	const char *a_name = sysent[*((int *) a)].sys_name;
+	const char *b_name = sysent[*((int *) b)].sys_name;
+	return strcmp(a_name ? a_name : "", b_name ? b_name : "");
+}
+
+static int
+count_cmp(void *a, void *b)
+{
+	int     m = counts[*((int *) a)].calls;
+	int     n = counts[*((int *) b)].calls;
+
+	return (m < n) ? 1 : (m > n) ? -1 : 0;
+}
+
+static int (*sortfun)();
+static struct timeval overhead = { -1, -1 };
+
+void
+set_sortby(const char *sortby)
+{
+	if (strcmp(sortby, "time") == 0)
+		sortfun = time_cmp;
+	else if (strcmp(sortby, "calls") == 0)
+		sortfun = count_cmp;
+	else if (strcmp(sortby, "name") == 0)
+		sortfun = syscall_cmp;
+	else if (strcmp(sortby, "nothing") == 0)
+		sortfun = NULL;
+	else {
+		error_msg_and_help("invalid sortby: '%s'", sortby);
+	}
+}
+
+void set_overhead(int n)
+{
+	overhead.tv_sec = n / 1000000;
+	overhead.tv_usec = n % 1000000;
+}
+
+static void
+call_summary_pers(FILE *outf)
+{
+	unsigned int i;
+	int     call_cum, error_cum;
+	struct timeval tv_cum, dtv;
+	double  float_tv_cum;
+	double  percent;
+	const char *dashes = "----------------";
+	char    error_str[sizeof(int)*3];
+	int    *sorted_count;
+
+	fprintf(outf, "%6.6s %11.11s %11.11s %9.9s %9.9s %s\n",
+		"% time", "seconds", "usecs/call",
+		"calls", "errors", "syscall");
+	fprintf(outf, "%6.6s %11.11s %11.11s %9.9s %9.9s %s\n",
+		dashes, dashes, dashes, dashes, dashes, dashes);
+
+	sorted_count = xcalloc(sizeof(int), nsyscalls);
+	call_cum = error_cum = tv_cum.tv_sec = tv_cum.tv_usec = 0;
+	if (overhead.tv_sec == -1) {
+		tv_mul(&overhead, &shortest, 8);
+		tv_div(&overhead, &overhead, 10);
+	}
+	for (i = 0; i < nsyscalls; i++) {
+		sorted_count[i] = i;
+		if (counts == NULL || counts[i].calls == 0)
+			continue;
+		tv_mul(&dtv, &overhead, counts[i].calls);
+		tv_sub(&counts[i].time, &counts[i].time, &dtv);
+		call_cum += counts[i].calls;
+		error_cum += counts[i].errors;
+		tv_add(&tv_cum, &tv_cum, &counts[i].time);
+	}
+	float_tv_cum = tv_float(&tv_cum);
+	if (counts) {
+		if (sortfun)
+			qsort((void *) sorted_count, nsyscalls, sizeof(int), sortfun);
+		for (i = 0; i < nsyscalls; i++) {
+			double float_syscall_time;
+			int idx = sorted_count[i];
+			struct call_counts *cc = &counts[idx];
+			if (cc->calls == 0)
+				continue;
+			tv_div(&dtv, &cc->time, cc->calls);
+			error_str[0] = '\0';
+			if (cc->errors)
+				sprintf(error_str, "%u", cc->errors);
+			float_syscall_time = tv_float(&cc->time);
+			percent = (100.0 * float_syscall_time);
+			if (percent != 0.0)
+				   percent /= float_tv_cum;
+			/* else: float_tv_cum can be 0.0 too and we get 0/0 = NAN */
+			fprintf(outf, "%6.2f %11.6f %11lu %9u %9.9s %s\n",
+				percent, float_syscall_time,
+				(long) (1000000 * dtv.tv_sec + dtv.tv_usec),
+				cc->calls,
+				error_str, sysent[idx].sys_name);
+		}
+	}
+	free(sorted_count);
+
+	fprintf(outf, "%6.6s %11.11s %11.11s %9.9s %9.9s %s\n",
+		dashes, dashes, dashes, dashes, dashes, dashes);
+	error_str[0] = '\0';
+	if (error_cum)
+		sprintf(error_str, "%u", error_cum);
+	fprintf(outf, "%6.6s %11.6f %11.11s %9u %9.9s %s\n",
+		"100.00", float_tv_cum, "",
+		call_cum, error_str, "total");
+}
+
+void
+call_summary(FILE *outf)
+{
+	unsigned int i, old_pers = current_personality;
+
+	for (i = 0; i < SUPPORTED_PERSONALITIES; ++i) {
+		if (!countv[i])
+			continue;
+
+		if (current_personality != i)
+			set_personality(i);
+		if (i)
+			fprintf(outf,
+				"System call usage summary for %d bit mode:\n",
+				current_wordsize * 8);
+		call_summary_pers(outf);
+	}
+
+	if (old_pers != current_personality)
+		set_personality(old_pers);
+}
diff --git a/strace/debian/changelog.in b/strace/debian/changelog.in
new file mode 100644
index 0000000..3f4bd04
--- /dev/null
+++ b/strace/debian/changelog.in
@@ -0,0 +1,919 @@
+strace (@PACKAGE_VERSION@-1) experimental; urgency=low
+
+  * @PACKAGE_STRING@ snapshot.
+
+ -- Strace <@PACKAGE_BUGREPORT@>  @DEB_CHANGELOGTIME@
+
+strace (4.13-1) unstable; urgency=medium
+
+  * New upstream version.
+
+ -- Dmitry V. Levin <ldv@altlinux.org>  Tue, 26 Jul 2016 16:17:18 +0000
+
+strace (4.12-3) unstable; urgency=medium
+
+  * Fix up 32/64-bit test output in strace -S test to fix i386 build
+  * Run make check with VERBOSE=1 so we get useful information in build logs
+
+ -- Steve McIntyre <93sam@debian.org>  Sat, 04 Jun 2016 02:37:44 +0100
+
+strace (4.12-2) unstable; urgency=medium
+
+  * Remove libunwind dependency. Closes: #826223
+
+ -- Steve McIntyre <93sam@debian.org>  Fri, 03 Jun 2016 13:43:44 +0100
+
+strace (4.12-1) unstable; urgency=low
+
+  [ Dmitry V. Levin ]
+  * New upstream version.
+    + implemented simultaneous use of -p option and tracing of a command,
+      closes: #549942
+    + fixed decoding of syscalls unknown to the kernel on s390/s390x,
+      closes: #485979
+
+ -- Dmitry V. Levin <ldv@altlinux.org>  Tue, 31 May 2016 11:12:13 +0000
+
+strace (4.11-1) unstable; urgency=low
+
+  [ Dmitry V. Levin ]
+  * New upstream version.
+    + fixed decoding of path argument of umount2 syscall, closes: #785050
+
+  [ Steve McIntyre ]
+  * Drop patches against old upstream - all upstream now.
+  * Add simple upstream patch to fix printing of 32-bit times syscall
+    return value on 64-bit architectures.
+
+ -- Steve McIntyre <93sam@debian.org>  Fri, 08 Jan 2015 00:52:05 +0000
+
+strace (4.10-3) unstable; urgency=medium
+
+  * Really fix mips* builds - fix sys_syscall() handling.
+    Closes: #781753
+  * Clean up strace64.substvars at clean time
+  * Remove ancient changelog entries that annoy lintian
+  * Update Standards-Version to 3.9.6 (no changes needed)
+
+ -- Steve McIntyre <93sam@debian.org>  Wed, 08 Jul 2015 23:44:03 +0100
+
+strace (4.10-2) unstable; urgency=medium
+
+  * Fix building on arm64 using patches from upstream. Closes: #790770
+  * Fix various test suite failures using patches from upstream.
+    Closes: #781040
+  * Fix mips o32 build. Thanks to Arturo Borrero Gonzalez
+    <arturo.borrero.glez@gmail.com> for tracking this.
+  * Add build-dependency on gawk for the test suite. Closes: #780992
+
+ -- Steve McIntyre <93sam@debian.org>  Thu, 02 Jul 2015 02:03:25 +0100
+
+strace (4.10-1) unstable; urgency=low
+
+  [ Dmitry V. Levin ]
+  * New upstream version.
+    + enhanced ioctl decoding,  closes: #692913
+    + enabled mips64el build, closes: #773375
+    + updated signal and errno numbers, closes: #768642
+    + updated generic and added arch-specific PTRACE_* constants,
+      closes: #734554
+
+ -- Steve McIntyre <93sam@debian.org>  Sat, 21 Mar 2015 22:18:25 +0000
+
+strace (4.9-2) unstable; urgency=medium
+
+  * Turn on support for ppc64el, code is already in upstream.
+    Closes: #744121.
+
+ -- Steve McIntyre <93sam@debian.org>  Wed, 20 Aug 2014 18:00:20 +0100
+
+strace (4.9-1) unstable; urgency=medium
+
+  [ Dmitry V. Levin ]
+  * New upstream version.
+    + added -w option to produce stats on syscall latency, closes: #457497
+    + applied miscellaneous corrections to the manpage, closes: #725987
+    + fixed a typo in package description, closes: #697625
+    + enabled or1k build, closes: #742235
+    + enabled maximum security hardening, thanks to Markus <waldeck@gmx.de>
+
+  [ Steve McIntyre ]
+  * New maintainer. Thanks to Frederik for all his prior work!
+
+ -- Steve McIntyre <93sam@debian.org>  Wed, 20 Aug 2014 15:11:36 +0100
+
+strace (4.8-1.1) unstable; urgency=low
+
+  * NMU
+  * Uploading 4.8 to unstable to fix long-standing bugs that have been
+    fixed for ages in experimental only.
+  * enable arm64 build, Closes: #749956
+  * enable x32 build, Closes: #727018
+  * lintian-inspired fixes:
+    + add build-arch and build-indep targets in debian/rules
+    + update standards-version to 3.9.5
+    + remove ancient changelog entries causing syntax checker errors
+    + add hardening using buildflags.mk
+    + trivial changes to Description: fields
+
+ -- Steve McIntyre <93sam@debian.org>  Thu, 10 Jul 2014 14:22:18 +0000
+
+strace (4.8-1) experimental; urgency=low
+
+  * New upstream version.
+    + Added aarch64 support, closes: #693074
+    + Fixed kernel release string parsing, closes: #702309
+
+ -- Dmitry V. Levin <ldv@altlinux.org>  Mon, 03 Jun 2013 15:16:17 +0000
+
+strace (4.7-1) experimental; urgency=low
+
+  [ Dmitry V. Levin ]
+  * New upstream version.
+    + Fixed sockaddr_un.sun_path name in decoded output, closes: #554946
+    + Avoid potential core file clobbering on exit, closes: #656398
+    + Fixed a typo in documentation, closes: #653309
+
+ -- Frederik Schüler <fs@debian.org>  Tue, 12 Feb 2013 10:35:22 +0100
+
+strace (4.6-1) unstable; urgency=low
+
+  * New upstream version.
+    + Added HDIO_* ioctl names, closes: #450953
+    + Fixed stat64 decoding on mips, closes: #599028
+    + Fixed misleading italics in the manual page, closes: #589323
+
+ -- Dmitry V. Levin <ldv@altlinux.org>  Mon, 14 Mar 2011 15:16:17 +0000
+
+strace (4.5.20-2.3) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Add sh4 to arch list.
+  * Add powerpcspe to arch list (Closes: #579842).
+
+ -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 22 Mar 2011 09:03:49 +0900
+
+strace (4.5.20-2.2) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Add sh4 to arch list (Closes: #537105).
+
+ -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 09 Mar 2011 09:22:01 +0900
+
+strace (4.5.20-2.1) unstable; urgency=low
+
+  * NMU, added armhf support. (Closes: #596960)
+
+ -- Konstantinos Margaritis <markos@debian.org>  Thu, 24 Feb 2011 14:47:54 +0000
+
+strace (4.5.20-2) unstable; urgency=low
+
+  * Add missing sparc syscall defines to fix FTBFS on sparc.
+
+ -- Frederik Schüler <fs@debian.org>  Tue, 04 May 2010 14:31:46 +0200
+
+strace (4.5.20-1) unstable; urgency=low
+
+  [ Dmitry V. Levin ]
+  * New upstream version.
+    + Corrected decoding of 64bit syscalls, closes: #570603
+    + Corrected getsockopt decoding on architectures where
+      sizeof(long) > sizeof(int), closes: #494844
+    + Corrected decoding of epoll_pwait, closes: #513014
+    + Implemented -C option to combine regular and -c output, closes: #466196
+
+  [ Frederik Schüler ]
+  * Update standards-version to 3.8.4.
+  * debian/rules: allow parallel building.
+  * debian/rules: comment out verbose build, only needed for debugging.
+  * debian/rules: clean up clean: target, dh_clean does most of the work
+    already.
+  * debian/rules: use *-stamp instead of stamp-*, so dh_clean can tidy
+    up for us.
+
+ -- Frederik Schüler <fs@debian.org>  Tue, 13 Apr 2010 13:02:57 +0200
+
+strace (4.5.19-2) unstable; urgency=low
+
+  * Add sparc64 to the architectures list, closes: #560062
+  * Fix FTBFS, thanks to Aurelien Jarno <aurelien@aurel32.net> for pointing
+    out the solution. Closes: #560516
+  * Rebuild as normal package, closes: #566968
+  * Update standards-version to 3.8.3.
+  * Lower package priority to optional, matching the archive override.
+  * Add watch file.
+
+ -- Frederik Schüler <fs@debian.org>  Tue, 26 Jan 2010 12:20:51 +0100
+
+strace (4.5.19-1) unstable; urgency=low
+
+  [ Dmitry V. Levin ]
+  * New upstream release.
+    + Fixed FTBFS on armel, closes: #520084, #535564
+    + Marked sendfile(2) as a network syscall, closes: #509499
+    + Fixed syscall numbers for tee and sync_file_range, closes: #503124
+    + Corrected accept(2) decoding, closes: #507573
+    + Changed strace to exit/kill with traced process
+      exitcode/signal, closes: #37665
+
+  [ Frederik Schüler ]
+  * Move myself from uploaders to maintainers, and drop Roland from the list,
+    closes: #521458
+  * Apply hppa fixes, thanks to Carlos O'Donell <carlos@systemhalted.org>
+    and Helge Deller <deller@gmx.de> for the fixes, closes: #546619, #437928
+  * Update standards-version to 3.8.1.
+
+ -- Frederik Schüler <fs@debian.org>  Mon, 05 Oct 2009 22:39:54 +0200
+
+strace (4.5.18-1) unstable; urgency=low
+
+  * New upstream release, closes: #515655
+    + Fix FTBFS, closes: #518852
+  * Backported patch from CVS: Fix support for NUL-terminated
+    string, closes: #508484
+  * Build-depend on debhelper (>= 7.0.0).
+
+ -- Frederik Schüler <fs@debian.org>  Mon, 09 Mar 2009 14:39:42 +0100
+
+strace (4.5.17+cvs080723-2) unstable; urgency=low
+
+  * Pull Fix for sparc FTBFS from CVS, closes: #492774
+  * Make strace64 priority extra.
+
+ -- Frederik Schüler <fs@debian.org>  Sat, 02 Aug 2008 10:36:59 +0200
+
+strace (4.5.17+cvs080723-1) unstable; urgency=low
+
+  * New upstream cvs snapshot.
+    - fixes arm and armel FTBFS.
+
+ -- Frederik Schüler <fs@debian.org>  Wed, 23 Jul 2008 15:23:22 +0200
+
+strace (4.5.17-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Frederik Schüler <fs@debian.org>  Sat, 19 Jul 2008 21:38:30 +0200
+
+strace (4.5.16+cvs20080708-2) unstable; urgency=low
+
+  * Rerun autotools in correct order.
+  * Add strace64 package on i386, powerpc, s390 and sparc,
+    closes: #491167, #491188
+
+ -- Frederik Schüler <fs@debian.org>  Thu, 17 Jul 2008 17:21:27 +0200
+
+strace (4.5.16+cvs20080708-1) unstable; urgency=low
+
+  * New upstream snapshot.
+    + Fix chmod/chown typo in debian/rules, closes: #459255.
+    + Install strace-graph too, closes: 469068.
+    + Fix m68k build, closes: 456879.
+    + Arm updates, closes: #441000.
+    + fix build on mips/mipsel, closes: #448802.
+    + show poll() parameters before blocking, closes: #369651.
+    + use dh_strip instead of install -s, closes: #438055, #396682.
+    + fix sparc build, closes: #469379.
+  * Acknowledge NMU, closes: #469380.
+  * Remove Wichert Akkerman from uploaders list.
+  * Bump standards version to 3.8.0.
+    - Add Homepage field.
+  * Add dh_md5sums call, closes: #439428.
+  * Fix dpkg-gencontrol call.
+  * Update debian/copyright.
+
+ -- Frederik Schüler <fs@debian.org>  Tue, 01 Jul 2008 23:05:51 +0200
+
+strace (4.5.16-1) unstable; urgency=low
+
+  * New upstream version.
+    + 64-bit builds, closes: #435303.
+    + LFS build fix, closes: #385310.
+    + Fix multithread issues
+    + Fix spurious SIGSTOP on early interrupt.
+    + Fix utime for biarch.
+    + Fix -u error message.
+    + Better futex syscall printing.
+    + Fix argv/envp printing with small -s settings, and for biarch.
+    + New syscalls: getcpu, eventfd, timerfd, signalfd, epoll_pwait,
+      move_pages, utimensat.
+
+ -- Roland McGrath <frob@debian.org>  Fri, 03 Aug 2007 03:24:21 -0700
+
+strace (4.5.15-1) unstable; urgency=high
+
+  [ Roland McGrath ]
+  * New upstream version.
+    + Fix -ff -o behavior, closes: #353935.
+    + Fail when nonoption args follow -p switches, closes: #361302.
+    + Fix semtimedop, closes: #340239.
+    + ARM support fixes, closes: #360152, #360154.
+
+  [ Frederik Schüler ]
+  * Fix configure script, closes: #428997
+
+ -- Frederik Schüler <fs@debian.org>  Fri, 22 Jun 2007 16:28:08 +0000
+
+strace (4.5.14-2) unstable; urgency=low
+
+  * New comaintainer.
+  * Fix build failure with linux-2.6.18, thanks to Andreas Henriksson for the
+    patch, closes: #392556.
+  * Fix build with libc6 2.5.
+  * Acknowledge NMUs, closes: #315500, #355733
+
+ -- Frederik Schüler <fs@debian.org>  Thu, 26 Oct 2006 22:11:25 +0200
+
+strace (4.5.14-1) unstable; urgency=low
+
+  * New upstream version.
+    + Fix crash in printing sysctl, closes: #339117.
+    + Respect DEB_BUILD_OPTIONS=nostrip, closes: #325132.
+    + Fix ipc syscall decoding, closes: #340239.
+    + Add missing source files to tarball, closes: #336197.
+    + Build on armeb, closes: #335681.
+
+ -- Roland McGrath <frob@debian.org>  Mon, 16 Jan 2006 22:17:38 -0800
+
+strace (4.5.13-1) unstable; urgency=low
+
+  * New upstream version.
+    + Fix m68k build, closes: #315500.
+    + Fix setsockopt decoding on 64-bit.
+    + Fix typos in socket option name strings.
+    + Display more IPV6 socket options by name.
+    + Don't display inappropriate syscalls for -e trace=file.
+    + New selector type -e trace=desc for file-descriptor using calls.
+    + Fix 32-bit old_mmap syscall decoding on x86-64.
+    + Fix errors detaching from multithreaded process on interrupt.
+    + Note 4.5.12 fix for crash handling bad signal numbers.
+
+ -- Roland McGrath <frob@debian.org>  Wed,  3 Aug 2005 04:41:49 -0700
+
+strace (4.5.12-1) unstable; urgency=low
+
+  * New upstream version.
+    + Build on ppc64, closes: #301089.
+    + Refuse negative -s argument value, closes: #303256.
+    + Fix known syscall recognition for IA32 processes on x86-64.
+    + Fix bad output for ptrace on x86-64.
+    + Fix potential buffer overruns.
+    + Make some diagnostics more consistent.
+    + Update PowerPC system calls.
+    + Better printing for Linux aio system calls.
+    + Don't truncate statfs64 fields to 32 bits in output.
+    + Cosmetic code cleanups.
+
+ -- Roland McGrath <frob@debian.org>  Wed,  8 Jun 2005 13:52:39 -0700
+
+strace (4.5.11-1) unstable; urgency=low
+
+  * New upstream version.
+    + Update MIPS system call table, closes: #256684.
+    + Fix build on s390 and sparc, closes: #294172, #293564.
+    + Fix select handling on nonstandard fd_set sizes, closes: #65654, #284290.
+    + Don't print errors for null file name pointers, closes: #63093.
+    + Fix initial execve output with -i.
+    + Fix build nits, closes: #300598.
+
+ -- Roland McGrath <frob@debian.org>  Tue, 22 Mar 2005 15:12:22 -0800
+
+strace (4.5.9-1) unstable; urgency=low
+
+  * New upstream version.
+    + Fix potential crash in getxattr printing, closes: #283704.
+    + Improve socket ioctl printing, closes: #192164.
+    + Fix sparc build, closes: #278449.
+    + Update ia64 syscall list.
+    + Fix x86_64 syscall argument extraction for 32-bit processes.
+    + Fix -e signal=NAME parsing.
+    + Fix x86_64 exit_group syscall handling.
+    + Improve mount flags printing.
+    + Support symbolic printing of x86_64 arch_prctl parameters.
+    + Add strace-udeb package for Debian installer debugging, closes: #268294.
+
+ -- Roland McGrath <frob@debian.org>  Fri,  4 Feb 2005 01:53:01 -0800
+
+strace (4.5.8-1) unstable; urgency=low
+
+  * New upstream version.
+    + Fix strace64 man page symlink, closes: #269220.
+    + Update syscall tables for Alpha, ARM, HPPA, closes: #273887.
+    + Build strace64 for s390, closes: #271500.
+    + Fix some endian issues in 64-bit argument output on 32-bit machines.
+    + 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.
+
+ -- Roland McGrath <frob@debian.org>  Tue, 19 Oct 2004 18:05:28 -0700
+
+strace (4.5.7-1) unstable; urgency=low
+
+  * New upstream version.
+    + Update man page about -c, closes: #254438.
+    + Include pread/pwrite calls in -e read/write tracing, closes: #239947.
+    + Update SO_* and IP_* value lists, closes: #171653.
+    + Print attribute values in *xattr system calls.
+    + Print clock_t values symbolically in Linux clock_* system calls.
+    + Show PER_* values correctly, closes: #40588.
+    + Fix `strace64' build on sparc, closes: #254728.
+
+ -- Roland McGrath <frob@debian.org>  Tue, 31 Aug 2004 01:41:19 -0700
+
+strace (4.5.6-1) unstable; urgency=low
+
+  * New upstream version.
+    + Update Linux ioctl lists and decode some more network ioctls.
+    + Fix `quotactl' argument decoding on 64-bit.
+    + Linux/SPARC64 support, closes: #254728.
+
+ -- Roland McGrath <frob@debian.org>  Mon, 12 Jul 2004 00:18:32 -0700
+
+strace (4.5.5-1) unstable; urgency=low
+
+  * New upstream version.
+    + Fix support for 32-bit (i386) binaries on Linux/AMD64.
+
+ -- Roland McGrath <frob@debian.org>  Sun, 27 Jun 2004 22:19:15 -0700
+
+strace (4.5.4-1) unstable; urgency=low
+
+  * Build package on amd64, closes: #246568.
+  * New upstream version.
+    + Recognize more PF_* and AF_* values, closes: #250506.
+    + Other  fixes.
+
+ -- Roland McGrath <frob@debian.org>  Thu,  3 Jun 2004 19:35:37 -0700
+
+strace (4.5.3-1) unstable; urgency=low
+
+  * New upstream version.
+    + Finish fix for -f on Linux/S390(x).
+    + Print extra wait status bits, closes: #240062.
+
+ -- Roland McGrath <frob@debian.org>  Fri, 16 Apr 2004 15:27:43 -0700
+
+strace (4.5.2-1) unstable; urgency=low
+
+  * New upstream version.
+    + Check for errors writing to -o file, closes: #218762
+    + Print multiple ioctl code matches on Linux.
+    + Various other fixes.
+    + Update typos and obsolete bits in man page, closes: #217008, #223390
+    + Fix compilation problems with newer kernel headers, closes: #223207
+    + Update HPPA system calls, closes: #231632
+    + Fix PID in messages, closes: #229802
+    + Fix s390 brokenness in 4.5, closes: #226098
+
+ -- Roland McGrath <frob@debian.org>  Mon,  1 Mar 2004 22:44:55 -0800
+
+strace (4.5-1) unstable; urgency=low
+
+  * New upstream version.
+    + Fix mlock syscall printing.
+    + MIPS & S390 updates.
+    + Print names for SIGRT_* in sets.
+
+ -- Roland McGrath <frob@debian.org>  Wed, 24 Sep 2003 15:20:18 -0700
+
+strace (4.4.99-1) unstable; urgency=low
+
+  * New upstream version.
+    + Alpha updates.
+    + Add a few more new Linux 2.5 system calls.
+    + Stephen Thomas contributed a port to Linux/SH64.
+    + Print protocol names for PF_INET6 sockets.
+
+ -- Roland McGrath <frob@debian.org>  Thu, 17 Jul 2003 02:04:43 -0700
+
+strace (4.4.98-1) unstable; urgency=low
+
+  * New upstream version.
+    + Fixes clone argument bugs.
+    + Fixes sem* printing bugs.
+    + Fixes -e argument parsing, closes: #188379.
+    + Fixes hanging parent in odd wait cases, closes: #47608, #109656.
+    + Fixes -q defaulting, closes: #47113, #153678.
+    + Fixes trying to execute directories, closes: #137103.
+    + Updates ARM support, thanks to Russell King.
+    + Updates S390/S390x support.
+  * Bump standards-version to 3.5.10
+
+ -- Roland McGrath <frob@debian.org>  Mon,  2 Jun 2003 12:26:29 -0700
+
+strace (4.4.96-1) unstable; urgency=low
+
+  * New upstream version.
+    + Handles yet more new Linux 2.5 system calls.
+    + Fixes x86_64 and ia64 clone printing.
+    + Updates SH port.
+
+ -- Roland McGrath <frob@debian.org>  Sun, 30 Mar 2003 17:14:34 -0800
+
+strace (4.4.95-1) unstable; urgency=low
+
+  * New upstream version.
+    + Fixes printing of getresuid and getresgid values.
+
+ -- Roland McGrath <frob@debian.org>  Mon, 24 Feb 2003 02:50:43 -0800
+
+strace (4.4.94-1) unstable; urgency=low
+
+  * New upstream version.
+    + New option -E to set environment variables.
+    + Build fixes for sparc, closes: #178636.
+
+ -- Roland McGrath <frob@debian.org>  Wed, 19 Feb 2003 19:12:40 -0800
+
+strace (4.4.93-1) unstable; urgency=low
+
+  * New upstream version.
+    + Grok new quotactl arguments, closes: #154067.
+    + Fix m68k build problem, closes: #176528.
+    + Old bugs prior release actually closes: #154068.
+    + Fix S390 bugs with -f, and bugs with execve.
+  * Switched to non-native packaging (empty .diff), closes: #176388.
+
+ -- Roland McGrath <frob@debian.org>  Tue, 21 Jan 2003 12:22:08 -0800
+
+strace (4.4.92-1) unstable; urgency=low
+
+  * New upstream version.
+    + Updated config.guess and config.sub, closes: #176241.
+    + Several fixes for PPC, closes: #144326.
+    + Fixed ptrace output for unknown requests, closes: #77728.
+    + Fixed output of getdents64, truncate64, ftruncate64, closes: #169528.
+    + Old bugs the last release actually closes: #153750, #38467, #109993,
+      #109815, #104594, #113087, #134803, #166622, #96356, #94725, #32147,
+      #32798, #36801, #41066, #81637, #138300, #143791.
+
+ -- Roland McGrath <frob@debian.org>  Tue, 14 Jan 2003 02:02:44 -0800
+
+strace (4.4.91-1) unstable; urgency=low
+
+  * New upstream version.
+    + Fixes -f on x86-64.
+
+ -- Roland McGrath <frob@debian.org>  Fri, 10 Jan 2003 12:55:34 -0800
+
+strace (4.4.90-1) unstable; urgency=low
+
+  * New maintainer.
+  * New upstream version.
+
+ -- Roland McGrath <frob@debian.org>  Fri, 10 Jan 2003 01:58:40 -0800
+
+strace (4.4-1.2) unstable; urgency=low
+
+  * NMU
+  * Quick one-liner to allow building on the ARM. Closes: #109993.
+  * Re-ran autoconf, hopefully I didn't break other arches.
+
+ -- Anand Kumria <wildfire@progsoc.org>  Mon,  1 Oct 2001 14:22:25 +1000
+
+strace (4.4-1.1) unstable; urgency=low
+
+  * NMU.
+  * Added patch from David Mosberger which fixes some ia64 issues.
+    Closes: #113087.
+  * Added ia64-specific Build-Depends on libc6.1-dev.  Closes:
+    #109815.
+  * Ran autoheader, so the s390 patch applies.  Closes: #104594.
+
+ -- Jeff Licquia <jlicquia@progeny.com>  Tue, 25 Sep 2001 13:15:28 -0500
+
+strace (4.4-1) unstable; urgency=low
+
+  * New upstream version
+    + Added S390 support. Closes: Bug#104594
+    + New config.{guess,sub}. Closes: Bug#92532
+    + LFS support for Linux/sparc. Closes: Bug#99215
+    * Works on IA64 again. Closes: Bug#103854
+  * Don't override CFLAGS in debian/rules
+  * Remove rules to create configure & friends. Closes: Bug#92483
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sun, 19 Aug 2001 14:10:58 +0200
+
+strace (4.3-3.1) unstable; urgency=low
+
+  * copy in new config.{guess,sub} to get support for new architectures.
+    Closes: #94725
+
+ -- LaMont Jones <lamont@debian.org>  Mon,  9 Jul 2001 21:39:34 -0600
+
+strace (4.3-3) unstable; urgency=low
+
+  * Update architecture list
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sat, 14 Apr 2001 10:42:19 +0200
+
+strace (4.3-2) unstable; urgency=low
+
+  * Run cvsbuild so we don't need to run autohead & friends
+  * Sync to current CVS
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Fri, 13 Apr 2001 19:08:53 +0200
+
+strace (4.3-1) unstable; urgency=low
+
+  * New upstream version
+  * Updated Build-Depends to use a recent glibc so we get the 2.4 kernel
+    headers
+  * Changed Architecture so we only build on Linux
+  * Include section and priority in control info
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sun,  1 Apr 2001 16:35:32 +0200
+
+strace (4.2-4) frozen unstable; urgency=low
+
+  * Actually install postinst and prerm so we get the proper /usr/doc/strace
+    symlink
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Thu, 17 Feb 2000 21:49:17 +0100
+
+strace (4.2-3) frozen unstable; urgency=low
+
+  * Fix typo in aclocal.m4 that prevented compilation on architectures without
+    LFS
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sun, 13 Feb 2000 01:19:11 +0100
+
+strace (4.2-2) frozen unstable; urgency=low
+
+  * only include linux/ptrace.h if sys/reg.h hasn't been found by configure,
+    Closes: Bug# 39556
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Thu, 27 Jan 2000 03:22:55 +0100
+
+strace (4.2-1) frozen unstable; urgency=low
+
+  * New upstream version:
+    + Builds correctly on glibc2.0 again, Closes: Bug# 51648
+    + Small y2k fix in printtimes, Closes: Bug# 54592
+    + semop is handled now, Closes: Bug# 52684
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Fri, 21 Jan 2000 21:45:41 +0100
+
+strace (4.1-1) unstable; urgency=low
+
+  * New upstream version
+  * Bump standards-version to 3.1.0
+  * FHS 2.1 compliant
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Fri, 26 Nov 1999 01:42:07 +0100
+
+strace (4.0-1) unstable; urgency=low
+
+  * New upstream version
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Fri,  9 Jul 1999 16:12:34 +0200
+
+strace (3.99.1-1) unstable; urgency=low
+
+  * New upstream version, second pre-release for 4.0
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Wed,  9 Jun 1999 15:20:42 +0200
+
+strace (3.99-1) unstable; urgency=low
+
+  * New upstream maintainer (me :)
+  * New upstream version, pre-release for strace 4.0
+  * See upstream changelog for changes
+  * Build with glibc2.1
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Tue, 27 Apr 1999 14:00:15 +0200
+
+strace (3.1.0.1-12) unstable; urgency=low
+
+  * Only i386 has a LDT, so check for architecture in mem.c (Bug# 32798)
+  * Check for nsignals properly, closes: #34445
+  * Fix check for overruns in umove*, patch by Nate Eldredge <nate@cartsys.com>
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Mon, 15 Mar 1999 00:43:14 +0100
+
+strace (3.1.0.1-11) unstable; urgency=low
+
+  * Merge some ARM stuff that got stuck in my mailbox
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sun, 31 Jan 1999 13:04:13 +0100
+
+strace (3.1.0.1-10) unstable; urgency=low
+
+  * Move sys_poll to the DONE section in linux/dummy.h
+  * Support subarchitectures for alpha (Bug# 32147)
+  * Incorporate changes from Ulrich Drepper
+    + up number of supported personalities on Linux sparc to 3
+    + add O_DIRECT, O_LARGEFILE and O_DIRECTORY to openmodes
+    + change prefix for printxval to SEEK_ in sys_lseek
+    + add a support for a whole bunch of syscalls
+    + updated sys_pread and sys_pwrite for SVR4
+    + handle sys_delete_module properly
+    + change SYS_socket_subcall to 230 for non-powerpc architectures
+    + sys_chown is now lchown
+    + looks like a whole lot of syscalls is moved from 180 to 230
+    + Revamp a lot of the signal handling code
+    + handle sys_clone
+    + Lots more (it was a 6494-line patch and I'm too lazy to put all
+      changes in here..)
+  * Please note you need to have 2.1 or 2.2 kernel sources in /usr/src/linux
+    in order to compile this.
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Fri, 29 Jan 1999 02:04:12 +0100
+
+strace (3.1.0.1-9) unstable; urgency=low
+
+  * Add support for poll() systemcall
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Thu, 31 Dec 1998 16:03:44 +0100
+
+strace (3.1.0.1-8) frozen unstable; urgency=low
+
+  * Use new_stat from libc6 now, except for powerpc and sparc
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Thu, 24 Dec 1998 11:35:32 +0100
+
+strace (3.1.0.1-7) frozen unstable; urgency=low
+
+  * Fix sparc support
+  * Display nanosleep call correctly (Bug# 25904)
+  * Honour -v flag in printargs (Bug# 10426)
+  * Play with #define to get proper kernel struct stat
+  * Compile with 2.1.131 kernel source
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sat, 19 Dec 1998 15:02:14 +0100
+
+strace (3.1.0.1-6) frozen unstable; urgency=low
+
+  * Set NSIG correctly for ARM
+  * Include strace-graph script from Richard Braakman <dark@debian.org>
+    as an example. Try it and be amazed!
+  * Fix sigaction problem, patch from Topi Miettinen
+    <Topi.Miettinen@medialab.sonera.net>
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Mon,  7 Dec 1998 02:10:30 +0100
+
+strace (3.1.0.1-5) unstable; urgency=low
+
+  * Patched from Richard Braakman <dark@debian.org>:
+    + use correct dirent.h on Linux
+    + remove debugging code left from the powerpc patch
+    + fix output for execve when -v is used
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Fri, 13 Nov 1998 15:59:17 +0100
+
+strace (3.1.0.1-5) unstable; urgency=low
+
+  * Add location of upstream sources to the copyright
+  * Merged ARM architecture support from Jim Studt <jim@federated.com>
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Mon,  9 Nov 1998 16:43:24 +0100
+
+strace (3.1.0.1-4) unstable; urgency=low
+
+  * More ppc patches from Daniel Jacobowitz <dan@debian.org>
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Mon, 12 Oct 1998 00:59:44 +0200
+
+strace (3.1.0.1-3) unstable; urgency=low
+
+  * Added support for sys_query_module, patch from Brian J. Murrell
+    <brian@interlinx.bc.ca>
+  * Preserve timestamps for documentation when installed
+  * Incorporate patches from Daniel Jacobowitz <dan@debian.org>:
+    + powerpc patches
+    + Patches include changing SYS_socket_subcall and SYS_ipc_subcall,
+      check for stray syscall exit after execv, and completely regenerated
+      syscall, errno, and ioctl lists.
+    + Decode capget and capset arguments.
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Sun, 11 Oct 1998 22:42:56 +0200
+
+strace (3.1.0.1-2) unstable; urgency=low
+
+  * Patch to support sparc, courtesy of RedHat
+  * Cleaned up some stuff the patch left broken
+  * Fix some more compilation-issues for IPX with current kernels
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Fri, 24 Jul 1998 22:53:43 +0200
+
+strace (3.1.0.1-1) unstable; urgency=low
+
+  * New (actually very old) upstream version. Fixes something we
+    already had fixed
+  * Compiled with current kernel-headers from libc6-dev
+  * Fixed spelling-error
+  * Compress changelog
+  * Bumped standard-version to 2.4.1.0
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Wed, 22 Jul 1998 15:53:23 +0200
+
+strace (3.1-14) unstable; urgency=low
+
+  * Don't let libc6 trick us anymore with {f,l,}stat() calls
+  * Fix configure.in to support PentiumII processors
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Mon, 22 Jun 1998 20:17:20 +0200
+
+strace (3.1-13) unstable; urgency=low
+
+  * Corrected error on PowerPC patch that broke other archictectures
+    (Bug# 13837)
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Tue, 14 Oct 1997 15:41:29 +0200
+
+strace (3.1-12) unstable; urgency=low
+
+  * PowerPC patches by Klee Dienes (Bug# 10788, 10790)
+  * Create correct md5sums (Bug# 13363)
+  * Put changelog in correct place (Bug# 13363)
+  * Pristine sources
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Mon,  6 Oct 1997 15:42:25 +0200
+
+strace (3.1-11) unstable; urgency=low
+
+  * Ported to libc6 / glibc2 (Bug# 11729)
+  * Compress manpage
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Fri,  1 Aug 1997 00:13:38 +0200
+
+strace (3.1-10) unstable; urgency=low
+
+  * Install upstream changelog
+  * Added dependencies to control file for libc
+  * Added md5sums to .deb file
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Fri, 11 Jul 1997 12:26:12 +0200
+
+strace (3.1-9) stable; urgency=low
+
+  * Fixed bug with hanging children. Patch by Matthias Urlichs
+  * Added some more constants to net.c.
+  * glibc patches, courtesy of Klee Dienes (Bug# 7735)
+
+ -- Wichert Akkerman <wakkerma@debian.org>  Mon, 21 Apr 1997 11:59:45 +0200
+
+strace (3.1-8) frozen unstable; urgency=low
+
+  * Added detection of ROSE networking
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Tue, 12 Nov 1996 22:21:22 +0100
+
+strace (3.1-7) stable; urgency=low
+
+  * Install manpage with correct mode (0644) (Bug#4813)
+  * Renamed debian changelog to changelog.Debian
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sat, 26 Oct 1996 18:15:41 +0200
+
+strace (3.1-6) stable; urgency=low
+
+  * Small patch for compilation on kernels 2.1.0 and later (see signal.c)
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Fri, 18 Oct 1996 00:28:47 +0200
+
+strace (3.1-5) stable unstable; urgency=low
+
+  * Moved to new packagingformat
+  * Fixed umoven bug (Bug# 4523)
+  * Corrected number of parameters for mmap systemcall (bug# 4508)
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sat, 23 Sep 1996 23:33:58 +0200
+
+strace (3.1-4) unstable; urgency=low
+
+  * Fixed changestemplate
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>, Thu Sep 12 14:59:44 MET DST 1996
+
+strace (3.1-3) unstable; urgency=low
+
+  * Revamped debian files
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>, Thu Jul 11 20:19:11 MET DST 1996
+
+
+strace (3.1-2) unstable; urgency=low
+  * Added some #ifdef's around IPX stuff to make it compilable on non-Linux
+    systems.
+  * changed debian.control and debian.rules to conform to new debian naming
+    schemes
+  * added architecture-option to debian.rules and debian.control
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>
+
+strace (3.1-1) unstable; urgency=low
+
+  * Moved to new upstream version
+  * added more protocol families to domains
+  * added IPIP-protocol to protocols
+  * added MSG_PROXY and MSG_CTRUNC to msg_flags
+  * added SO_BSDCOMPAT and SO_REUSEPORT to sockoptions
+  * added IP, IPX and TCP-options
+  * added IP, IPX and TCP support to get-/setsockopt()
+  * added IPX support
+
+ -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>
diff --git a/strace/debian/compat b/strace/debian/compat
new file mode 100644
index 0000000..7f8f011
--- /dev/null
+++ b/strace/debian/compat
@@ -0,0 +1 @@
+7
diff --git a/strace/debian/control b/strace/debian/control
new file mode 100644
index 0000000..570542f
--- /dev/null
+++ b/strace/debian/control
@@ -0,0 +1,56 @@
+Source: strace
+Maintainer: Steve McIntyre <93sam@debian.org>
+Section: utils
+Priority: optional
+Build-Depends: libc6-dev (>= 2.2.2) [!alpha !ia64], libc6.1-dev (>= 2.2.2) [alpha ia64], gcc-multilib [amd64 i386 powerpc ppc64 s390 sparc sparc64 x32], debhelper (>= 7.0.0), gawk
+Standards-Version: 3.9.6
+Homepage: http://sourceforge.net/projects/strace/
+
+Package: strace
+Architecture: alpha amd64 arm64 armeb armel armhf hppa i386 ia64 m68k mips mipsel mips64 mips64el or1k powerpc powerpcspe ppc64 ppc64el s390 s390x sh4 sparc sparc64 x32
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: System call tracer
+ strace is a system call tracer, i.e. a debugging tool which prints out
+ a trace of all the system calls made by a another process/program.
+ The program to be traced need not be recompiled for this, so you can
+ use it on binaries for which you don't have source.
+ .
+ System calls and signals are events that happen at the user/kernel
+ interface. A close examination of this boundary is very useful for bug
+ isolation, sanity checking and attempting to capture race conditions.
+
+Package: strace64
+Architecture: i386 powerpc s390 sparc
+Priority: extra
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: System call tracer for 64bit binaries
+ strace is a system call tracer, i.e. a debugging tool which prints out
+ a trace of all the system calls made by a another process/program.
+ The program to be traced need not be recompiled for this, so you can
+ use it on binaries for which you don't have source.
+ .
+ This package contains the 64bit version of the binary, intended for
+ biarch systems with 32bit userland and 64bit kernel.
+ .
+ System calls and signals are events that happen at the user/kernel
+ interface. A close examination of this boundary is very useful for bug
+ isolation, sanity checking and attempting to capture race conditions.
+
+Package: strace-udeb
+Section: debian-installer
+XC-Package-Type: udeb
+Priority: extra
+Architecture: alpha amd64 arm64 armeb armel armhf hppa i386 ia64 m68k mips mipsel mips64 mips64el or1k powerpc powerpcspe ppc64 ppc64el s390 sh4 sparc sparc64 x32
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: System call tracer
+ strace is a system call tracer, i.e. a debugging tool which prints out
+ a trace of all the system calls made by a another process/program.
+ The program to be traced need not be recompiled for this, so you can
+ use it on binaries for which you don't have source.
+ .
+ System calls and signals are events that happen at the user/kernel
+ interface. A close examination of this boundary is very useful for bug
+ isolation, sanity checking and attempting to capture race conditions.
+ .
+ This is a stripped down package intended for debugging use in the Debian
+ installer.
diff --git a/strace/debian/copyright b/strace/debian/copyright
new file mode 100644
index 0000000..fd35507
--- /dev/null
+++ b/strace/debian/copyright
@@ -0,0 +1,39 @@
+This is the Debian packaged version of strace. For a complete list of
+changes from the upstream version please see the changelog.
+
+The upstream sources can be found at http://sourceforge.net/projects/strace/
+
+This is the copyright as found in the upstream sources:
+
+Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+Copyright (c) 1993 Ulrich Pegelow <pegelow@moorea.uni-muenster.de>
+Copyright (c) 1995, 1996 Michael Elizabeth Chastain <mec@duracef.shout.net>
+Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+Copyright (C) 1998-2003 Wichert Akkerman <wakkerma@deephackmode.org>
+Copyright (c) 2002-2008 Roland McGrath  <roland@redhat.com>
+Copyright (c) 2003-2008 Dmitry V. Levin <ldv@altlinux.org>
+Copyright (c) 2007-2008 Jan Kratochvil  <jan.kratochvil@redhat.com>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/strace/debian/rules b/strace/debian/rules
new file mode 100755
index 0000000..4b556a7
--- /dev/null
+++ b/strace/debian/rules
@@ -0,0 +1,95 @@
+#! /usr/bin/make -f
+
+#export DH_VERBOSE=1
+
+export DEB_BUILD_MAINT_OPTIONS = hardening=+all
+DPKG_EXPORT_BUILDFLAGS = 1
+include /usr/share/dpkg/buildflags.mk
+
+CFLAGS += -Wall -g
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+  CFLAGS += -O0
+else
+  CFLAGS += -O2
+endif
+
+ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+  NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+  MAKEFLAGS += -j$(NUMJOBS)
+endif
+
+DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH)
+
+arch64_map = i386=x86_64 powerpc=powerpc64 sparc=sparc64 s390=s390x
+ifneq (,$(filter $(DEB_HOST_ARCH)=%, $(arch64_map)))
+  HOST64 = $(strip $(patsubst $(DEB_HOST_ARCH)=%, %, \
+	     $(filter $(DEB_HOST_ARCH)=%, $(arch64_map))))-linux-gnu
+  CC64 = gcc -m64
+  extra_build_targets += build64-stamp
+endif
+
+ifeq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
+  CONFIG_OPTS = --build=$(DEB_BUILD_GNU_TYPE)
+else
+  CONFIG_OPTS = --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
+endif
+
+all: build
+
+build: build-arch build-indep
+
+build-arch: build-stamp $(extra_build_targets)
+build-indep: build-stamp $(extra_build_targets)
+
+%-stamp: %/Makefile
+	$(MAKE) -C $*
+ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
+	$(MAKE) -C $* check VERBOSE=1
+endif
+	touch $@
+
+build/Makefile:
+	mkdir -p $(@D)
+	cd $(@D); sh ../configure --prefix=/usr $(CONFIG_OPTS)
+
+build64/Makefile:
+	mkdir -p $(@D)
+	cd $(@D); CC="$(CC64)" sh ../configure --prefix=/usr --build=$(DEB_BUILD_GNU_TYPE) --host=$(HOST64)
+
+clean:
+	dh_testdir
+	dh_testroot
+	rm -rf build build64 strace64.1 debian/strace64.substvars
+	dh_clean
+
+binary: binary-indep binary-arch
+
+binary-indep:
+
+binary-arch: build
+	test -f build-stamp || make $(MFLAGS) -f debian/rules build
+
+	# prepare 64bit executable and manpage, if it has been built
+	test -f build64-stamp && ( mv build64/strace build64/strace64 ; \
+		cp strace.1 strace64.1 ) || true
+
+	dh_testdir -s
+	dh_testroot -s
+	dh_installdirs -s
+	dh_installdocs -s
+	dh_installman -s
+	dh_installexamples -s
+	dh_installchangelogs -s
+	dh_install -s
+	dh_link -s
+	dh_strip -s
+	dh_compress -s
+	dh_fixperms -s
+	dh_installdeb -s
+	dh_shlibdeps -s
+	dh_gencontrol -s
+	dh_md5sums -s
+	dh_builddeb -s
diff --git a/strace/debian/source/format b/strace/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/strace/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/strace/debian/strace-udeb.install b/strace/debian/strace-udeb.install
new file mode 100644
index 0000000..1f41928
--- /dev/null
+++ b/strace/debian/strace-udeb.install
@@ -0,0 +1 @@
+build/strace usr/bin
diff --git a/strace/debian/strace.docs b/strace/debian/strace.docs
new file mode 100644
index 0000000..edc0071
--- /dev/null
+++ b/strace/debian/strace.docs
@@ -0,0 +1 @@
+NEWS
diff --git a/strace/debian/strace.examples b/strace/debian/strace.examples
new file mode 100644
index 0000000..06b4d96
--- /dev/null
+++ b/strace/debian/strace.examples
@@ -0,0 +1 @@
+strace-graph
diff --git a/strace/debian/strace.install b/strace/debian/strace.install
new file mode 100644
index 0000000..1f41928
--- /dev/null
+++ b/strace/debian/strace.install
@@ -0,0 +1 @@
+build/strace usr/bin
diff --git a/strace/debian/strace.manpages b/strace/debian/strace.manpages
new file mode 100644
index 0000000..5e74dd7
--- /dev/null
+++ b/strace/debian/strace.manpages
@@ -0,0 +1 @@
+strace.1
diff --git a/strace/debian/strace64.install b/strace/debian/strace64.install
new file mode 100644
index 0000000..2d3036d
--- /dev/null
+++ b/strace/debian/strace64.install
@@ -0,0 +1 @@
+build64/strace64 usr/bin
diff --git a/strace/debian/strace64.manpages b/strace/debian/strace64.manpages
new file mode 100644
index 0000000..e3adc93
--- /dev/null
+++ b/strace/debian/strace64.manpages
@@ -0,0 +1 @@
+strace64.1
diff --git a/strace/debian/watch b/strace/debian/watch
new file mode 100644
index 0000000..5e4f652
--- /dev/null
+++ b/strace/debian/watch
@@ -0,0 +1,2 @@
+version=3
+opts="uversionmangle=s/-/./g" http://sf.net/strace/strace-([[:digit:].-]*)\.tar\.xz
diff --git a/strace/defs.h b/strace/defs.h
new file mode 100644
index 0000000..4b7e8ed
--- /dev/null
+++ b/strace/defs.h
@@ -0,0 +1,901 @@
+/*
+ * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+ * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+ * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <features.h>
+#ifdef HAVE_STDBOOL_H
+# include <stdbool.h>
+#endif
+#include <stdint.h>
+#include <inttypes.h>
+#include <sys/types.h>
+#ifdef STDC_HEADERS
+# include <stddef.h>
+#endif
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+/* Open-coding isprint(ch) et al proved more efficient than calling
+ * generalized libc interface. We don't *want* to do non-ASCII anyway.
+ */
+/* #include <ctype.h> */
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/syscall.h>
+
+#include "mpers_type.h"
+#include "gcc_compat.h"
+
+#ifndef HAVE_STRERROR
+const char *strerror(int);
+#endif
+#ifndef HAVE_STPCPY
+/* Some libc have stpcpy, some don't. Sigh...
+ * Roll our private implementation...
+ */
+#undef stpcpy
+#define stpcpy strace_stpcpy
+extern char *stpcpy(char *dst, const char *src);
+#endif
+
+#ifndef offsetof
+# define offsetof(type, member)	\
+	(((char *) &(((type *) NULL)->member)) - ((char *) (type *) NULL))
+#endif
+
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
+
+/* macros */
+#ifndef MAX
+# define MAX(a, b)		(((a) > (b)) ? (a) : (b))
+#endif
+#ifndef MIN
+# define MIN(a, b)		(((a) < (b)) ? (a) : (b))
+#endif
+#define CLAMP(val, min, max) MIN(MAX(min, val), max)
+
+/* Glibc has an efficient macro for sigemptyset
+ * (it just does one or two assignments of 0 to internal vector of longs).
+ */
+#if defined(__GLIBC__) && defined(__sigemptyset) && !defined(sigemptyset)
+# define sigemptyset __sigemptyset
+#endif
+
+/* Configuration section */
+#ifndef DEFAULT_STRLEN
+/* default maximum # of bytes printed in `printstr', change with -s switch */
+# define DEFAULT_STRLEN	32
+#endif
+#ifndef DEFAULT_ACOLUMN
+# define DEFAULT_ACOLUMN	40	/* default alignment column for results */
+#endif
+/*
+ * Maximum number of args to a syscall.
+ *
+ * Make sure that all entries in all syscallent.h files have nargs <= MAX_ARGS!
+ * linux/<ARCH>/syscallent*.h:
+ * 	all have nargs <= 6 except mips o32 which has nargs <= 7.
+ */
+#ifndef MAX_ARGS
+# ifdef LINUX_MIPSO32
+#  define MAX_ARGS	7
+# else
+#  define MAX_ARGS	6
+# endif
+#endif
+/* default sorting method for call profiling */
+#ifndef DEFAULT_SORTBY
+# define DEFAULT_SORTBY "time"
+#endif
+/*
+ * Experimental code using PTRACE_SEIZE can be enabled here.
+ * This needs Linux kernel 3.4.x or later to work.
+ */
+#define USE_SEIZE 1
+/* To force NOMMU build, set to 1 */
+#define NOMMU_SYSTEM 0
+/*
+ * Set to 1 to use speed-optimized vfprintf implementation.
+ * It results in strace using about 5% less CPU in user space
+ * (compared to glibc version).
+ * But strace spends a lot of time in kernel space,
+ * so overall it does not appear to be a significant win.
+ * Thus disabled by default.
+ */
+#define USE_CUSTOM_PRINTF 0
+
+#ifndef ERESTARTSYS
+# define ERESTARTSYS    512
+#endif
+#ifndef ERESTARTNOINTR
+# define ERESTARTNOINTR 513
+#endif
+#ifndef ERESTARTNOHAND
+# define ERESTARTNOHAND 514
+#endif
+#ifndef ERESTART_RESTARTBLOCK
+# define ERESTART_RESTARTBLOCK 516
+#endif
+
+#if defined(SPARC) || defined(SPARC64)
+# define PERSONALITY0_WORDSIZE 4
+# if defined(SPARC64)
+#  define SUPPORTED_PERSONALITIES 2
+#  define PERSONALITY1_WORDSIZE 8
+#  ifdef HAVE_M32_MPERS
+#   define PERSONALITY1_INCLUDE_FUNCS "m32_funcs.h"
+#   define PERSONALITY1_INCLUDE_PRINTERS_DECLS "m32_printer_decls.h"
+#   define PERSONALITY1_INCLUDE_PRINTERS_DEFS "m32_printer_defs.h"
+#   define MPERS_m32_IOCTL_MACROS "ioctl_redefs1.h"
+#  endif
+# endif
+#endif
+
+#ifdef X86_64
+# define SUPPORTED_PERSONALITIES 3
+# define PERSONALITY0_WORDSIZE 8
+# define PERSONALITY1_WORDSIZE 4
+# define PERSONALITY2_WORDSIZE 4
+# ifdef HAVE_M32_MPERS
+#  define PERSONALITY1_INCLUDE_FUNCS "m32_funcs.h"
+#  define PERSONALITY1_INCLUDE_PRINTERS_DECLS "m32_printer_decls.h"
+#  define PERSONALITY1_INCLUDE_PRINTERS_DEFS "m32_printer_defs.h"
+#  define MPERS_m32_IOCTL_MACROS "ioctl_redefs1.h"
+# endif
+# ifdef HAVE_MX32_MPERS
+#  define PERSONALITY2_INCLUDE_FUNCS "mx32_funcs.h"
+#  define PERSONALITY2_INCLUDE_PRINTERS_DECLS "mx32_printer_decls.h"
+#  define PERSONALITY2_INCLUDE_PRINTERS_DEFS "mx32_printer_defs.h"
+#  define MPERS_mx32_IOCTL_MACROS "ioctl_redefs2.h"
+# endif
+#endif
+
+#ifdef X32
+# define SUPPORTED_PERSONALITIES 2
+# define PERSONALITY0_WORDSIZE 4
+# define PERSONALITY1_WORDSIZE 4
+# ifdef HAVE_M32_MPERS
+#  define PERSONALITY1_INCLUDE_FUNCS "m32_funcs.h"
+#  define PERSONALITY1_INCLUDE_PRINTERS_DECLS "m32_printer_decls.h"
+#  define PERSONALITY1_INCLUDE_PRINTERS_DEFS "m32_printer_defs.h"
+#  define MPERS_m32_IOCTL_MACROS "ioctl_redefs1.h"
+# endif
+#endif
+
+#ifdef ARM
+/* one personality */
+#endif
+
+#ifdef AARCH64
+/* The existing ARM personality, then AArch64 */
+# define SUPPORTED_PERSONALITIES 2
+# define PERSONALITY0_WORDSIZE 8
+# define PERSONALITY1_WORDSIZE 4
+# ifdef HAVE_M32_MPERS
+#  define PERSONALITY1_INCLUDE_FUNCS "m32_funcs.h"
+#  define PERSONALITY1_INCLUDE_PRINTERS_DECLS "m32_printer_decls.h"
+#  define PERSONALITY1_INCLUDE_PRINTERS_DEFS "m32_printer_defs.h"
+#  define MPERS_m32_IOCTL_MACROS "ioctl_redefs1.h"
+# endif
+#endif
+
+#ifdef POWERPC64
+# define SUPPORTED_PERSONALITIES 2
+# define PERSONALITY0_WORDSIZE 8
+# define PERSONALITY1_WORDSIZE 4
+# ifdef HAVE_M32_MPERS
+#  define PERSONALITY1_INCLUDE_FUNCS "m32_funcs.h"
+#  define PERSONALITY1_INCLUDE_PRINTERS_DECLS "m32_printer_decls.h"
+#  define PERSONALITY1_INCLUDE_PRINTERS_DEFS "m32_printer_defs.h"
+#  define MPERS_m32_IOCTL_MACROS "ioctl_redefs1.h"
+# endif
+#endif
+
+#ifdef TILE
+# define SUPPORTED_PERSONALITIES 2
+# define PERSONALITY0_WORDSIZE 8
+# define PERSONALITY1_WORDSIZE 4
+# ifdef __tilepro__
+#  define DEFAULT_PERSONALITY 1
+# endif
+# ifdef HAVE_M32_MPERS
+#  define PERSONALITY1_INCLUDE_FUNCS "m32_funcs.h"
+#  define PERSONALITY1_INCLUDE_PRINTERS_DECLS "m32_printer_decls.h"
+#  define PERSONALITY1_INCLUDE_PRINTERS_DEFS "m32_printer_defs.h"
+#  define MPERS_m32_IOCTL_MACROS "ioctl_redefs1.h"
+# endif
+#endif
+
+#ifndef SUPPORTED_PERSONALITIES
+# define SUPPORTED_PERSONALITIES 1
+#endif
+#ifndef DEFAULT_PERSONALITY
+# define DEFAULT_PERSONALITY 0
+#endif
+#ifndef PERSONALITY0_WORDSIZE
+# define PERSONALITY0_WORDSIZE SIZEOF_LONG
+#endif
+
+#ifndef PERSONALITY0_INCLUDE_PRINTERS_DECLS
+# define PERSONALITY0_INCLUDE_PRINTERS_DECLS "native_printer_decls.h"
+#endif
+#ifndef PERSONALITY0_INCLUDE_PRINTERS_DEFS
+# define PERSONALITY0_INCLUDE_PRINTERS_DEFS "native_printer_defs.h"
+#endif
+
+#ifndef PERSONALITY1_INCLUDE_PRINTERS_DECLS
+# define PERSONALITY1_INCLUDE_PRINTERS_DECLS "native_printer_decls.h"
+#endif
+#ifndef PERSONALITY1_INCLUDE_PRINTERS_DEFS
+# define PERSONALITY1_INCLUDE_PRINTERS_DEFS "native_printer_defs.h"
+#endif
+
+#ifndef PERSONALITY2_INCLUDE_PRINTERS_DECLS
+# define PERSONALITY2_INCLUDE_PRINTERS_DECLS "native_printer_decls.h"
+#endif
+#ifndef PERSONALITY2_INCLUDE_PRINTERS_DEFS
+# define PERSONALITY2_INCLUDE_PRINTERS_DEFS "native_printer_defs.h"
+#endif
+
+#ifndef PERSONALITY1_INCLUDE_FUNCS
+# define PERSONALITY1_INCLUDE_FUNCS "empty.h"
+#endif
+#ifndef PERSONALITY2_INCLUDE_FUNCS
+# define PERSONALITY2_INCLUDE_FUNCS "empty.h"
+#endif
+
+typedef struct sysent {
+	unsigned nargs;
+	int	sys_flags;
+	int	sen;
+	int	(*sys_func)();
+	const char *sys_name;
+} struct_sysent;
+
+typedef struct ioctlent {
+	const char *symbol;
+	unsigned int code;
+} struct_ioctlent;
+
+#if defined LINUX_MIPSN32 || defined X32
+# define HAVE_STRUCT_TCB_EXT_ARG 1
+#else
+# define HAVE_STRUCT_TCB_EXT_ARG 0
+#endif
+
+/* Trace Control Block */
+struct tcb {
+	int flags;		/* See below for TCB_ values */
+	int pid;		/* If 0, this tcb is free */
+	int qual_flg;		/* qual_flags[scno] or DEFAULT_QUAL_FLAGS + RAW */
+	int u_error;		/* Error code */
+	long scno;		/* System call number */
+	long u_arg[MAX_ARGS];	/* System call arguments */
+#if HAVE_STRUCT_TCB_EXT_ARG
+	long long ext_arg[MAX_ARGS];
+	long long u_lrval;	/* long long return value */
+#endif
+	long u_rval;		/* Return value */
+#if SUPPORTED_PERSONALITIES > 1
+	unsigned int currpers;	/* Personality at the time of scno update */
+#endif
+	int sys_func_rval;	/* Syscall entry parser's return value */
+	int curcol;		/* Output column for this process */
+	FILE *outf;		/* Output file for this process */
+	const char *auxstr;	/* Auxiliary info from syscall (see RVAL_STR) */
+	void *_priv_data;	/* Private data for syscall decoding functions */
+	void (*_free_priv_data)(void *); /* Callback for freeing priv_data */
+	const struct_sysent *s_ent; /* sysent[scno] or dummy struct for bad scno */
+	const struct_sysent *s_prev_ent; /* for "resuming interrupted SYSCALL" msg */
+	struct timeval stime;	/* System time usage as of last process wait */
+	struct timeval dtime;	/* Delta for system time usage */
+	struct timeval etime;	/* Syscall entry time */
+
+#ifdef USE_LIBUNWIND
+	struct UPT_info* libunwind_ui;
+	struct mmap_cache_t* mmap_cache;
+	unsigned int mmap_cache_size;
+	unsigned int mmap_cache_generation;
+	struct queue_t* queue;
+#endif
+};
+
+/* TCB flags */
+/* We have attached to this process, but did not see it stopping yet */
+#define TCB_STARTUP		0x01
+#define TCB_IGNORE_ONE_SIGSTOP	0x02	/* Next SIGSTOP is to be ignored */
+/*
+ * Are we in system call entry or in syscall exit?
+ *
+ * This bit is set after all syscall entry processing is done.
+ * Therefore, this bit will be set when next ptrace stop occurs,
+ * which should be syscall exit stop. Other stops which are possible
+ * directly after syscall entry (death, ptrace event stop)
+ * are simpler and handled without calling trace_syscall(), therefore
+ * the places where TCB_INSYSCALL can be set but we aren't in syscall stop
+ * are limited to trace(), this condition is never observed in trace_syscall()
+ * and below.
+ * The bit is cleared after all syscall exit processing is done.
+ *
+ * Use entering(tcp) / exiting(tcp) to check this bit to make code more readable.
+ */
+#define TCB_INSYSCALL	0x04
+#define TCB_ATTACHED	0x08	/* We attached to it already */
+#define TCB_REPRINT	0x10	/* We should reprint this syscall on exit */
+#define TCB_FILTERED	0x20	/* This system call has been filtered out */
+
+/* qualifier flags */
+#define QUAL_TRACE	0x001	/* this system call should be traced */
+#define QUAL_ABBREV	0x002	/* abbreviate the structures of this syscall */
+#define QUAL_VERBOSE	0x004	/* decode the structures of this syscall */
+#define QUAL_RAW	0x008	/* print all args in hex for this syscall */
+#define QUAL_SIGNAL	0x010	/* report events with this signal */
+#define QUAL_READ	0x020	/* dump data read on this file descriptor */
+#define QUAL_WRITE	0x040	/* dump data written to this file descriptor */
+typedef uint8_t qualbits_t;
+
+#define DEFAULT_QUAL_FLAGS (QUAL_TRACE | QUAL_ABBREV | QUAL_VERBOSE)
+
+#define entering(tcp)	(!((tcp)->flags & TCB_INSYSCALL))
+#define exiting(tcp)	((tcp)->flags & TCB_INSYSCALL)
+#define syserror(tcp)	((tcp)->u_error != 0)
+#define verbose(tcp)	((tcp)->qual_flg & QUAL_VERBOSE)
+#define abbrev(tcp)	((tcp)->qual_flg & QUAL_ABBREV)
+#define filtered(tcp)	((tcp)->flags & TCB_FILTERED)
+
+#include "xlat.h"
+
+extern const struct xlat addrfams[];
+extern const struct xlat at_flags[];
+extern const struct xlat dirent_types[];
+extern const struct xlat evdev_abs[];
+extern const struct xlat msg_flags[];
+extern const struct xlat open_access_modes[];
+extern const struct xlat open_mode_flags[];
+extern const struct xlat resource_flags[];
+extern const struct xlat socketlayers[];
+extern const struct xlat whence_codes[];
+
+/* Format of syscall return values */
+#define RVAL_DECIMAL	000	/* decimal format */
+#define RVAL_HEX	001	/* hex format */
+#define RVAL_OCTAL	002	/* octal format */
+#define RVAL_UDECIMAL	003	/* unsigned decimal format */
+#if HAVE_STRUCT_TCB_EXT_ARG
+# if 0 /* unused so far */
+#  define RVAL_LDECIMAL	004	/* long decimal format */
+#  define RVAL_LHEX	005	/* long hex format */
+#  define RVAL_LOCTAL	006	/* long octal format */
+# endif
+# define RVAL_LUDECIMAL	007	/* long unsigned decimal format */
+#endif /* HAVE_STRUCT_TCB_EXT_ARG */
+#define RVAL_FD		010	/* file descriptor */
+#define RVAL_MASK	017	/* mask for these values */
+
+#define RVAL_STR	020	/* Print `auxstr' field after return val */
+#define RVAL_NONE	040	/* Print nothing */
+
+#define RVAL_DECODED	0100	/* syscall decoding finished */
+
+#define TRACE_FILE	001	/* Trace file-related syscalls. */
+#define TRACE_IPC	002	/* Trace IPC-related syscalls. */
+#define TRACE_NETWORK	004	/* Trace network-related syscalls. */
+#define TRACE_PROCESS	010	/* Trace process-related syscalls. */
+#define TRACE_SIGNAL	020	/* Trace signal-related syscalls. */
+#define TRACE_DESC	040	/* Trace file descriptor-related syscalls. */
+#define TRACE_MEMORY	0100	/* Trace memory mapping-related syscalls. */
+#define SYSCALL_NEVER_FAILS	0200	/* Syscall is always successful. */
+#define STACKTRACE_INVALIDATE_CACHE 0400  /* Trigger proc/maps cache updating */
+#define STACKTRACE_CAPTURE_ON_ENTER 01000 /* Capture stacktrace on "entering" stage */
+#define TRACE_INDIRECT_SUBCALL	02000	/* Syscall is an indirect socket/ipc subcall. */
+
+#define IOCTL_NUMBER_UNKNOWN 0
+#define IOCTL_NUMBER_HANDLED 1
+#define IOCTL_NUMBER_STOP_LOOKUP 010
+
+#define indirect_ipccall(tcp) (tcp->s_ent->sys_flags & TRACE_INDIRECT_SUBCALL)
+
+#if defined(ARM) || defined(AARCH64) \
+ || defined(I386) || defined(X32) || defined(X86_64) \
+ || defined(IA64) \
+ || defined(BFIN) \
+ || defined(M68K) \
+ || defined(MICROBLAZE) \
+ || defined(S390) \
+ || defined(SH) || defined(SH64) \
+ || defined(SPARC) || defined(SPARC64) \
+ /**/
+# define NEED_UID16_PARSERS 1
+#else
+# define NEED_UID16_PARSERS 0
+#endif
+
+enum sock_proto {
+	SOCK_PROTO_UNKNOWN,
+	SOCK_PROTO_UNIX,
+	SOCK_PROTO_TCP,
+	SOCK_PROTO_UDP,
+	SOCK_PROTO_TCPv6,
+	SOCK_PROTO_UDPv6,
+	SOCK_PROTO_NETLINK
+};
+extern enum sock_proto get_proto_by_name(const char *);
+
+enum iov_decode {
+	IOV_DECODE_ADDR,
+	IOV_DECODE_STR,
+	IOV_DECODE_NETLINK
+};
+
+typedef enum {
+	CFLAG_NONE = 0,
+	CFLAG_ONLY_STATS,
+	CFLAG_BOTH
+} cflag_t;
+extern cflag_t cflag;
+extern bool debug_flag;
+extern bool Tflag;
+extern bool iflag;
+extern bool count_wallclock;
+extern unsigned int qflag;
+extern bool not_failing_only;
+extern unsigned int show_fd_path;
+extern bool hide_log_until_execve;
+/* are we filtering traces based on paths? */
+extern const char **paths_selected;
+#define tracing_paths (paths_selected != NULL)
+extern unsigned xflag;
+extern unsigned followfork;
+#ifdef USE_LIBUNWIND
+/* if this is true do the stack trace for every system call */
+extern bool stack_trace_enabled;
+#endif
+extern unsigned ptrace_setoptions;
+extern unsigned max_strlen;
+extern unsigned os_release;
+#undef KERNEL_VERSION
+#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+
+void error_msg(const char *fmt, ...) ATTRIBUTE_FORMAT((printf, 1, 2));
+void perror_msg(const char *fmt, ...) ATTRIBUTE_FORMAT((printf, 1, 2));
+void error_msg_and_die(const char *fmt, ...)
+	ATTRIBUTE_FORMAT((printf, 1, 2)) ATTRIBUTE_NORETURN;
+void error_msg_and_help(const char *fmt, ...)
+	ATTRIBUTE_FORMAT((printf, 1, 2)) ATTRIBUTE_NORETURN;
+void perror_msg_and_die(const char *fmt, ...)
+	ATTRIBUTE_FORMAT((printf, 1, 2)) ATTRIBUTE_NORETURN;
+void die_out_of_memory(void) ATTRIBUTE_NORETURN;
+
+void *xmalloc(size_t size) ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((1));
+void *xcalloc(size_t nmemb, size_t size)
+	ATTRIBUTE_MALLOC ATTRIBUTE_ALLOC_SIZE((1, 2));
+void *xreallocarray(void *ptr, size_t nmemb, size_t size)
+	ATTRIBUTE_ALLOC_SIZE((2, 3));
+char *xstrdup(const char *str) ATTRIBUTE_MALLOC;
+
+#if USE_CUSTOM_PRINTF
+/*
+ * See comment in vsprintf.c for allowed formats.
+ * Short version: %h[h]u, %zu, %tu are not allowed, use %[l[l]]u.
+ */
+int strace_vfprintf(FILE *fp, const char *fmt, va_list args);
+#else
+# define strace_vfprintf vfprintf
+#endif
+
+extern int read_int_from_file(const char *, int *);
+
+extern void set_sortby(const char *);
+extern void set_overhead(int);
+extern void qualify(const char *);
+extern void print_pc(struct tcb *);
+extern int trace_syscall(struct tcb *);
+extern void count_syscall(struct tcb *, const struct timeval *);
+extern void call_summary(FILE *);
+
+extern void clear_regs(void);
+extern void get_regs(pid_t pid);
+extern int get_scno(struct tcb *tcp);
+extern const char *syscall_name(long scno);
+
+extern bool is_erestart(struct tcb *);
+extern void temporarily_clear_syserror(struct tcb *);
+extern void restore_cleared_syserror(struct tcb *);
+
+extern void *get_tcb_priv_data(const struct tcb *);
+extern int set_tcb_priv_data(struct tcb *, void *priv_data,
+			     void (*free_priv_data)(void *));
+extern void free_tcb_priv_data(struct tcb *);
+
+static inline unsigned long get_tcb_priv_ulong(const struct tcb *tcp)
+{
+	return (unsigned long) get_tcb_priv_data(tcp);
+}
+
+static inline int set_tcb_priv_ulong(struct tcb *tcp, unsigned long val)
+{
+	return set_tcb_priv_data(tcp, (void *) val, 0);
+}
+
+extern int umoven(struct tcb *, long, unsigned int, void *);
+#define umove(pid, addr, objp)	\
+	umoven((pid), (addr), sizeof(*(objp)), (void *) (objp))
+extern int umoven_or_printaddr(struct tcb *, long, unsigned int, void *);
+#define umove_or_printaddr(pid, addr, objp)	\
+	umoven_or_printaddr((pid), (addr), sizeof(*(objp)), (void *) (objp))
+extern int umovestr(struct tcb *, long, unsigned int, char *);
+extern int upeek(int pid, long, long *);
+
+extern bool
+print_array(struct tcb *tcp,
+	    const unsigned long start_addr,
+	    const size_t nmemb,
+	    void *const elem_buf,
+	    const size_t elem_size,
+	    int (*const umoven_func)(struct tcb *,
+				     long,
+				     unsigned int,
+				     void *),
+	    bool (*const print_func)(struct tcb *,
+				     void *elem_buf,
+				     size_t elem_size,
+				     void *opaque_data),
+	    void *const opaque_data);
+
+#if defined ALPHA || defined IA64 || defined MIPS \
+ || defined SH || defined SPARC || defined SPARC64
+# define HAVE_GETRVAL2
+extern long getrval2(struct tcb *);
+#else
+# undef HAVE_GETRVAL2
+#endif
+
+extern const char *signame(const int);
+extern void pathtrace_select(const char *);
+extern int pathtrace_match(struct tcb *);
+extern int getfdpath(struct tcb *, int, char *, unsigned);
+extern enum sock_proto getfdproto(struct tcb *, int);
+
+extern const char *xlookup(const struct xlat *, const uint64_t);
+extern const char *xlat_search(const struct xlat *, const size_t, const uint64_t);
+
+extern unsigned long get_pagesize(void);
+extern int string_to_uint(const char *str);
+extern int next_set_bit(const void *bit_array, unsigned cur_bit, unsigned size_bits);
+
+#define QUOTE_0_TERMINATED			0x01
+#define QUOTE_OMIT_LEADING_TRAILING_QUOTES	0x02
+
+extern int string_quote(const char *, char *, unsigned int, unsigned int);
+extern int print_quoted_string(const char *, unsigned int, unsigned int);
+
+/* a refers to the lower numbered u_arg,
+ * b refers to the higher numbered u_arg
+ */
+#ifdef WORDS_BIGENDIAN
+# define LONG_LONG(a,b) \
+	((long long)((unsigned long long)(unsigned)(b) | ((unsigned long long)(a)<<32)))
+#else
+# define LONG_LONG(a,b) \
+	((long long)((unsigned long long)(unsigned)(a) | ((unsigned long long)(b)<<32)))
+#endif
+extern int getllval(struct tcb *, unsigned long long *, int);
+extern int printllval(struct tcb *, const char *, int)
+	ATTRIBUTE_FORMAT((printf, 2, 0));
+
+extern void printaddr(long);
+extern void printxvals(const uint64_t, const char *, const struct xlat *, ...)
+	ATTRIBUTE_SENTINEL;
+extern int printargs(struct tcb *);
+extern int printargs_u(struct tcb *);
+extern int printargs_d(struct tcb *);
+
+extern void addflags(const struct xlat *, uint64_t);
+extern int printflags64(const struct xlat *, uint64_t, const char *);
+extern const char *sprintflags(const char *, const struct xlat *, uint64_t);
+extern const char *sprintmode(unsigned int);
+extern const char *sprinttime(time_t);
+extern void dumpiov_in_msghdr(struct tcb *, long, unsigned long);
+extern void dumpiov_in_mmsghdr(struct tcb *, long);
+extern void dumpiov_upto(struct tcb *, int, long, unsigned long);
+#define dumpiov(tcp, len, addr) \
+	dumpiov_upto((tcp), (len), (addr), (unsigned long) -1L)
+extern void dumpstr(struct tcb *, long, int);
+extern void printstr(struct tcb *, long, long);
+extern bool printnum_short(struct tcb *, long, const char *)
+	ATTRIBUTE_FORMAT((printf, 3, 0));
+extern bool printnum_int(struct tcb *, long, const char *)
+	ATTRIBUTE_FORMAT((printf, 3, 0));
+extern bool printnum_int64(struct tcb *, long, const char *)
+	ATTRIBUTE_FORMAT((printf, 3, 0));
+
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+extern bool printnum_long_int(struct tcb *, long, const char *, const char *)
+	ATTRIBUTE_FORMAT((printf, 3, 0))
+	ATTRIBUTE_FORMAT((printf, 4, 0));
+# define printnum_slong(tcp, addr) \
+	printnum_long_int((tcp), (addr), "%" PRId64, "%d")
+# define printnum_ulong(tcp, addr) \
+	printnum_long_int((tcp), (addr), "%" PRIu64, "%u")
+# define printnum_ptr(tcp, addr) \
+	printnum_long_int((tcp), (addr), "%#" PRIx64, "%#x")
+#elif SIZEOF_LONG > 4
+# define printnum_slong(tcp, addr) \
+	printnum_int64((tcp), (addr), "%" PRId64)
+# define printnum_ulong(tcp, addr) \
+	printnum_int64((tcp), (addr), "%" PRIu64)
+# define printnum_ptr(tcp, addr) \
+	printnum_int64((tcp), (addr), "%#" PRIx64)
+#else
+# define printnum_slong(tcp, addr) \
+	printnum_int((tcp), (addr), "%d")
+# define printnum_ulong(tcp, addr) \
+	printnum_int((tcp), (addr), "%u")
+# define printnum_ptr(tcp, addr) \
+	printnum_int((tcp), (addr), "%#x")
+#endif
+
+extern bool printpair_int(struct tcb *, long, const char *)
+	ATTRIBUTE_FORMAT((printf, 3, 0));
+extern bool printpair_int64(struct tcb *, long, const char *)
+	ATTRIBUTE_FORMAT((printf, 3, 0));
+extern void printpath(struct tcb *, long);
+extern void printpathn(struct tcb *, long, unsigned int);
+#define TIMESPEC_TEXT_BUFSIZE \
+		(sizeof(intmax_t)*3 * 2 + sizeof("{tv_sec=%jd, tv_nsec=%jd}"))
+extern void printfd(struct tcb *, int);
+extern void print_sockaddr(struct tcb *tcp, const void *, int);
+extern bool print_sockaddr_by_inode(const unsigned long, const enum sock_proto);
+extern bool print_sockaddr_by_inode_cached(const unsigned long);
+extern void print_dirfd(struct tcb *, int);
+extern int decode_sockaddr(struct tcb *, long, int);
+#ifdef ALPHA
+extern void printrusage32(struct tcb *, long);
+extern const char *sprint_timeval32(struct tcb *tcp, long);
+extern void print_timeval32(struct tcb *tcp, long);
+extern void print_timeval32_pair(struct tcb *tcp, long);
+extern void print_itimerval32(struct tcb *tcp, long);
+#endif
+extern void printuid(const char *, const unsigned int);
+extern void print_sigset_addr_len(struct tcb *, long, long);
+extern const char *sprintsigmask_n(const char *, const void *, unsigned int);
+#define tprintsigmask_addr(prefix, mask) \
+	tprints(sprintsigmask_n((prefix), (mask), sizeof(mask)))
+extern void printsignal(int);
+extern void tprint_iov(struct tcb *, unsigned long, unsigned long, enum iov_decode);
+extern void tprint_iov_upto(struct tcb *, unsigned long, unsigned long,
+			    enum iov_decode, unsigned long);
+extern void decode_netlink(struct tcb *, unsigned long, unsigned long);
+extern void tprint_open_modes(unsigned int);
+extern const char *sprint_open_modes(unsigned int);
+extern void print_seccomp_filter(struct tcb *, unsigned long);
+extern void print_seccomp_fprog(struct tcb *, unsigned long, unsigned short);
+
+struct strace_statfs;
+extern void print_struct_statfs(struct tcb *tcp, long);
+extern void print_struct_statfs64(struct tcb *tcp, long, unsigned long);
+
+extern void print_ifindex(unsigned int);
+
+extern int file_ioctl(struct tcb *, const unsigned int, long);
+extern int fs_x_ioctl(struct tcb *, const unsigned int, long);
+extern int loop_ioctl(struct tcb *, const unsigned int, long);
+extern int ptp_ioctl(struct tcb *, const unsigned int, long);
+extern int scsi_ioctl(struct tcb *, const unsigned int, long);
+extern int sock_ioctl(struct tcb *, const unsigned int, long);
+extern int term_ioctl(struct tcb *, const unsigned int, long);
+extern int ubi_ioctl(struct tcb *, const unsigned int, long);
+extern int uffdio_ioctl(struct tcb *, const unsigned int, long);
+
+extern int tv_nz(const struct timeval *);
+extern int tv_cmp(const struct timeval *, const struct timeval *);
+extern double tv_float(const struct timeval *);
+extern void tv_add(struct timeval *, const struct timeval *, const struct timeval *);
+extern void tv_sub(struct timeval *, const struct timeval *, const struct timeval *);
+extern void tv_mul(struct timeval *, const struct timeval *, int);
+extern void tv_div(struct timeval *, const struct timeval *, int);
+
+#ifdef USE_LIBUNWIND
+extern void unwind_init(void);
+extern void unwind_tcb_init(struct tcb *tcp);
+extern void unwind_tcb_fin(struct tcb *tcp);
+extern void unwind_cache_invalidate(struct tcb* tcp);
+extern void unwind_print_stacktrace(struct tcb* tcp);
+extern void unwind_capture_stacktrace(struct tcb* tcp);
+#endif
+
+static inline int
+printflags(const struct xlat *x, unsigned int flags, const char *dflt)
+{
+	return printflags64(x, flags, dflt);
+}
+
+static inline int
+printflags_long(const struct xlat *x, unsigned long flags, const char *dflt)
+{
+	return printflags64(x, flags, dflt);
+}
+
+static inline void
+printxval64(const struct xlat *x, const uint64_t val, const char *dflt)
+{
+	printxvals(val, dflt, x, NULL);
+}
+
+static inline void
+printxval(const struct xlat *x, const unsigned int val, const char *dflt)
+{
+	printxvals(val, dflt, x, NULL);
+}
+
+static inline void
+printxval_long(const struct xlat *x, const unsigned long val, const char *dflt)
+{
+	printxvals(val, dflt, x, NULL);
+}
+
+/* Strace log generation machinery.
+ *
+ * printing_tcp: tcb which has incomplete line being printed right now.
+ * NULL if last line has been completed ('\n'-terminated).
+ * printleader(tcp) examines it, finishes incomplete line if needed,
+ * the sets it to tcp.
+ * line_ended() clears printing_tcp and resets ->curcol = 0.
+ * tcp->curcol == 0 check is also used to detect completeness
+ * of last line, since in -ff mode just checking printing_tcp for NULL
+ * is not enough.
+ *
+ * If you change this code, test log generation in both -f and -ff modes
+ * using:
+ * strace -oLOG -f[f] test/threaded_execve
+ * strace -oLOG -f[f] test/sigkill_rain
+ * strace -oLOG -f[f] -p "`pidof web_browser`"
+ */
+extern struct tcb *printing_tcp;
+extern void printleader(struct tcb *);
+extern void line_ended(void);
+extern void tabto(void);
+extern void tprintf(const char *fmt, ...) ATTRIBUTE_FORMAT((printf, 1, 2));
+extern void tprints(const char *str);
+
+#if SUPPORTED_PERSONALITIES > 1
+extern void set_personality(int personality);
+extern unsigned current_personality;
+#else
+# define set_personality(personality) ((void)0)
+# define current_personality 0
+#endif
+
+#if SUPPORTED_PERSONALITIES == 1
+# define current_wordsize PERSONALITY0_WORDSIZE
+#else
+# if SUPPORTED_PERSONALITIES == 2 && PERSONALITY0_WORDSIZE == PERSONALITY1_WORDSIZE
+#  define current_wordsize PERSONALITY0_WORDSIZE
+# else
+extern unsigned current_wordsize;
+# endif
+#endif
+
+/* In many, many places we play fast and loose and use
+ * tprintf("%d", (int) tcp->u_arg[N]) to print fds, pids etc.
+ * We probably need to use widen_to_long() instead:
+ */
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+# define widen_to_long(v) (current_wordsize == 4 ? (long)(int32_t)(v) : (long)(v))
+#else
+# define widen_to_long(v) ((long)(v))
+#endif
+
+/*
+ * Widen without sign-extension a signed integer type to unsigned long long.
+ */
+#define widen_to_ull(v) \
+	(sizeof(v) == sizeof(int) ? (unsigned long long) (unsigned int) (v) : \
+	 sizeof(v) == sizeof(long) ? (unsigned long long) (unsigned long) (v) : \
+	 (unsigned long long) (v))
+
+extern const struct_sysent sysent0[];
+extern const char *const errnoent0[];
+extern const char *const signalent0[];
+extern const struct_ioctlent ioctlent0[];
+extern qualbits_t *qual_vec[SUPPORTED_PERSONALITIES];
+#define qual_flags (qual_vec[current_personality])
+
+#if SUPPORTED_PERSONALITIES > 1
+extern const struct_sysent *sysent;
+extern const char *const *errnoent;
+extern const char *const *signalent;
+extern const struct_ioctlent *ioctlent;
+#else
+# define sysent     sysent0
+# define errnoent   errnoent0
+# define signalent  signalent0
+# define ioctlent   ioctlent0
+#endif
+
+extern unsigned nsyscalls;
+extern unsigned nerrnos;
+extern unsigned nsignals;
+extern unsigned nioctlents;
+extern unsigned num_quals;
+
+#ifdef IN_MPERS_BOOTSTRAP
+/* Transform multi-line MPERS_PRINTER_DECL statements to one-liners.  */
+# define MPERS_PRINTER_DECL(type, name, ...) MPERS_PRINTER_DECL(type, name, __VA_ARGS__)
+#else /* !IN_MPERS_BOOTSTRAP */
+# if SUPPORTED_PERSONALITIES > 1
+#  include "printers.h"
+# else
+#  include "native_printer_decls.h"
+# endif
+# define MPERS_PRINTER_DECL(type, name, ...) type MPERS_FUNC_NAME(name)(__VA_ARGS__)
+#endif /* !IN_MPERS_BOOTSTRAP */
+
+/*
+ * If you need non-NULL sysent[scno].sys_func and sysent[scno].sys_name
+ */
+#define SCNO_IS_VALID(scno) \
+	((unsigned long)(scno) < nsyscalls && sysent[scno].sys_func)
+
+/* Only ensures that sysent[scno] isn't out of range */
+#define SCNO_IN_RANGE(scno) \
+	((unsigned long)(scno) < nsyscalls)
+
+#define MPERS_FUNC_NAME__(prefix, name) prefix ## name
+#define MPERS_FUNC_NAME_(prefix, name) MPERS_FUNC_NAME__(prefix, name)
+#define MPERS_FUNC_NAME(name) MPERS_FUNC_NAME_(MPERS_PREFIX, name)
+
+#define SYS_FUNC_NAME(syscall_name) MPERS_FUNC_NAME(syscall_name)
+
+#define SYS_FUNC(syscall_name) int SYS_FUNC_NAME(sys_ ## syscall_name)(struct tcb *tcp)
+
+/*
+ * The kernel used to define 64-bit types on 64-bit systems on a per-arch
+ * basis.  Some architectures would use unsigned long and others would use
+ * unsigned long long.  These types were exported as part of the
+ * kernel-userspace ABI and now must be maintained forever.  This matches
+ * what the kernel exports for each architecture so we don't need to cast
+ * every printing of __u64 or __s64 to stdint types.
+ */
+#if SIZEOF_LONG == 4
+# define PRI__64 "ll"
+#elif defined ALPHA || defined IA64 || defined MIPS || defined POWERPC
+# define PRI__64 "l"
+#else
+# define PRI__64 "ll"
+#endif
+
+#define PRI__d64 PRI__64"d"
+#define PRI__u64 PRI__64"u"
+#define PRI__x64 PRI__64"x"
diff --git a/strace/desc.c b/strace/desc.c
new file mode 100644
index 0000000..4695db5
--- /dev/null
+++ b/strace/desc.c
@@ -0,0 +1,271 @@
+/*
+ * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
+ * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
+ * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
+ * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "defs.h"
+
+SYS_FUNC(close)
+{