summaryrefslogtreecommitdiff
path: root/patches
diff options
context:
space:
mode:
Diffstat (limited to 'patches')
-rw-r--r--patches/binutils/2.27/120-sh-conf.patch33
-rw-r--r--patches/binutils/2.27/300-001_ld_makefile_patch.patch26
-rw-r--r--patches/binutils/2.27/300-012_check_ldrunpath_length.patch22
-rw-r--r--patches/binutils/2.27/320-MinGW-w64-winpthreads-doesnt-have-pthread_mutexattr_settype.patch11
-rw-r--r--patches/binutils/2.27/330-Dont-link-to-libfl-as-its-unnecessary.patch108
-rw-r--r--patches/binutils/2.27/340-Darwin-gold-binary-cc-include-string-not-cstring.patch13
-rw-r--r--patches/binutils/2.27/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch77
-rw-r--r--patches/binutils/2.27/500-sysroot.patch37
-rw-r--r--patches/binutils/2.27/600-poison-system-directories.patch285
-rw-r--r--patches/binutils/2.27/999-xtensa-reverse-shift-count.patch33
-rw-r--r--patches/gcc/4.8.5/1000-libtool-leave-framework-alone.patch14
-rw-r--r--patches/gcc/4.9.4/1000-libtool-leave-framework-alone.patch14
-rw-r--r--patches/gcc/5.4.0/1000-libtool-leave-framework-alone.patch14
-rw-r--r--patches/gcc/6.3.0/100-uclibc-conf.patch (renamed from patches/gcc/6.2.0/100-uclibc-conf.patch)0
-rw-r--r--patches/gcc/6.3.0/1000-libtool-leave-framework-alone.patch14
-rw-r--r--patches/gcc/6.3.0/301-missing-execinfo_h.patch (renamed from patches/gcc/6.2.0/301-missing-execinfo_h.patch)0
-rw-r--r--patches/gcc/6.3.0/370-gcc-plugin-Win-Dont-need-undefined-extern-var-refs-nor-fpic.patch (renamed from patches/gcc/6.2.0/370-gcc-plugin-Win-Dont-need-undefined-extern-var-refs-nor-fpic.patch)0
-rw-r--r--patches/gcc/6.3.0/380-gcc-plugin-POSIX-include-sys-select-h.patch (renamed from patches/gcc/6.2.0/380-gcc-plugin-POSIX-include-sys-select-h.patch)0
-rw-r--r--patches/gcc/6.3.0/810-arm-softfloat-libgcc.patch (renamed from patches/gcc/6.2.0/810-arm-softfloat-libgcc.patch)0
-rw-r--r--patches/gcc/6.3.0/830-arm_unbreak_armv4t.patch (renamed from patches/gcc/6.2.0/830-arm_unbreak_armv4t.patch)0
-rw-r--r--patches/gcc/6.3.0/831-ARM-PR-target-70473-Reduce-size-of-Cortex-A8-automat.patch (renamed from patches/gcc/6.2.0/831-ARM-PR-target-70473-Reduce-size-of-Cortex-A8-automat.patch)0
-rw-r--r--patches/gcc/6.3.0/860-cilk-wchar.patch (renamed from patches/gcc/6.2.0/860-cilk-wchar.patch)0
-rw-r--r--patches/gcc/6.3.0/870-xtensa-don-t-use-unwind-dw2-fde-dip-with-elf-targets.patch (renamed from patches/gcc/6.2.0/870-xtensa-don-t-use-unwind-dw2-fde-dip-with-elf-targets.patch)0
-rw-r--r--patches/gcc/6.3.0/871-xtensa-Fix-PR-target-78118.patch (renamed from patches/gcc/6.2.0/871-xtensa-Fix-PR-target-78118.patch)0
-rw-r--r--patches/gcc/6.3.0/872-xtensa-Fix-PR-target-78603.patch (renamed from patches/gcc/6.2.0/872-xtensa-Fix-PR-target-78603.patch)0
-rw-r--r--patches/gcc/6.3.0/890-fix-m68k-compile.patch (renamed from patches/gcc/6.2.0/890-fix-m68k-compile.patch)0
-rw-r--r--patches/gcc/6.3.0/891-fix-m68k-uclinux.patch (renamed from patches/gcc/6.2.0/891-fix-m68k-uclinux.patch)0
-rw-r--r--patches/gcc/6.3.0/892-libgcc-mkmap-symver-support-skip_underscore.patch (renamed from patches/gcc/6.2.0/892-libgcc-mkmap-symver-support-skip_underscore.patch)0
-rw-r--r--patches/gcc/6.3.0/893-libgcc-config-bfin-use-the-generic-linker-version-in.patch (renamed from patches/gcc/6.2.0/893-libgcc-config-bfin-use-the-generic-linker-version-in.patch)0
-rw-r--r--patches/gcc/6.3.0/894-libgcc-fix-DWARF-compilation-with-FDPIC-targets.patch (renamed from patches/gcc/6.2.0/894-libgcc-fix-DWARF-compilation-with-FDPIC-targets.patch)0
-rw-r--r--patches/gcc/6.3.0/895-bfin-define-REENTRANT.patch (renamed from patches/gcc/6.2.0/895-bfin-define-REENTRANT.patch)0
-rw-r--r--patches/gcc/6.3.0/910-nios2-bad-multilib-default.patch (renamed from patches/gcc/6.2.0/910-nios2-bad-multilib-default.patch)0
-rw-r--r--patches/gcc/6.3.0/930-libgcc-disable-split-stack-nothreads.patch (renamed from patches/gcc/6.2.0/930-libgcc-disable-split-stack-nothreads.patch)0
-rw-r--r--patches/gcc/6.3.0/940-uclinux-enable-threads.patch (renamed from patches/gcc/6.2.0/940-uclinux-enable-threads.patch)0
-rw-r--r--patches/gdb/7.12/100-musl_fix.patch28
-rw-r--r--patches/gdb/7.12/101-uclibc-no-gettimeofday-clobber.patch30
-rw-r--r--patches/gdb/7.12/111-xtensa-make-sure-ar_base-is-initialized.patch35
-rw-r--r--patches/gdb/7.12/112-WIP-end-of-prologue-detection-hack.patch31
-rw-r--r--patches/musl/1.0.4/0001-max_align_t.patch140
-rw-r--r--patches/musl/1.1.4/0001-max_align_t.patch153
-rw-r--r--patches/strace/4.10/007_fix_bexecve64_test.patch2
-rw-r--r--patches/strace/4.10/008_decode_mips_indirect_syscall.patch1
-rw-r--r--patches/strace/4.10/009-upstream-musl_includes.patch2
-rw-r--r--patches/strace/4.10/010-use-host-ioctl.patch142
-rw-r--r--patches/strace/4.11/010-use-host-ioctl.patch144
-rw-r--r--patches/strace/4.12/010-use-host-ioctl.patch145
-rw-r--r--patches/strace/4.13/010-use-host-ioctl.patch145
-rw-r--r--patches/strace/4.14/010-use-host-ioctl.patch145
-rw-r--r--patches/strace/4.15/010-use-host-ioctl.patch145
49 files changed, 1696 insertions, 293 deletions
diff --git a/patches/binutils/2.27/120-sh-conf.patch b/patches/binutils/2.27/120-sh-conf.patch
new file mode 100644
index 0000000..c12a023
--- /dev/null
+++ b/patches/binutils/2.27/120-sh-conf.patch
@@ -0,0 +1,33 @@
+r10231 | lethal | 2005-05-02 09:58:00 -0400 (Mon, 02 May 2005) | 13 lines
+
+Likewise, binutils has no idea about any of these new targets either, so we
+fix that up too.. now we're able to actually build a real toolchain for
+sh2a_nofpu- and other more ineptly named toolchains (and yes, there are more
+inept targets than that one, really. Go look, I promise).
+
+diff --git a/configure b/configure
+index 87677bc..2d916f1 100755
+--- a/configure
++++ b/configure
+@@ -3812,7 +3812,7 @@ case "${target}" in
+ or1k*-*-*)
+ noconfigdirs="$noconfigdirs gdb"
+ ;;
+- sh-*-* | sh64-*-*)
++ sh*-*-* | sh64-*-*)
+ case "${target}" in
+ sh*-*-elf)
+ ;;
+diff --git a/configure.ac b/configure.ac
+index 8fe0eca..b10a99f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1140,7 +1140,7 @@ case "${target}" in
+ or1k*-*-*)
+ noconfigdirs="$noconfigdirs gdb"
+ ;;
+- sh-*-* | sh64-*-*)
++ sh*-*-* | sh64-*-*)
+ case "${target}" in
+ sh*-*-elf)
+ ;;
diff --git a/patches/binutils/2.27/300-001_ld_makefile_patch.patch b/patches/binutils/2.27/300-001_ld_makefile_patch.patch
new file mode 100644
index 0000000..2a1320c
--- /dev/null
+++ b/patches/binutils/2.27/300-001_ld_makefile_patch.patch
@@ -0,0 +1,26 @@
+diff --git a/ld/Makefile.am b/ld/Makefile.am
+index 9575f1f..84df0bf 100644
+--- a/ld/Makefile.am
++++ b/ld/Makefile.am
+@@ -54,7 +54,7 @@ endif
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+diff --git a/ld/Makefile.in b/ld/Makefile.in
+index 9f56ca1..272860f 100644
+--- a/ld/Makefile.in
++++ b/ld/Makefile.in
+@@ -388,7 +388,7 @@ AM_CFLAGS = $(WARN_CFLAGS)
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ BASEDIR = $(srcdir)/..
+ BFDDIR = $(BASEDIR)/bfd
+ INCDIR = $(BASEDIR)/include
diff --git a/patches/binutils/2.27/300-012_check_ldrunpath_length.patch b/patches/binutils/2.27/300-012_check_ldrunpath_length.patch
new file mode 100644
index 0000000..f1f31af
--- /dev/null
+++ b/patches/binutils/2.27/300-012_check_ldrunpath_length.patch
@@ -0,0 +1,22 @@
+diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
+index 137446f..bb8391a 100644
+--- a/ld/emultempl/elf32.em
++++ b/ld/emultempl/elf32.em
+@@ -1195,6 +1195,8 @@ fragment <<EOF
+ && command_line.rpath == NULL)
+ {
+ lib_path = (const char *) getenv ("LD_RUN_PATH");
++ if ((lib_path) && (strlen (lib_path) == 0))
++ lib_path = NULL;
+ if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+ force))
+ break;
+@@ -1458,6 +1460,8 @@ gld${EMULATION_NAME}_before_allocation (void)
+ rpath = command_line.rpath;
+ if (rpath == NULL)
+ rpath = (const char *) getenv ("LD_RUN_PATH");
++ if ((rpath) && (*rpath == '\0'))
++ rpath = NULL;
+
+ for (abfd = link_info.input_bfds; abfd; abfd = abfd->link.next)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
diff --git a/patches/binutils/2.27/320-MinGW-w64-winpthreads-doesnt-have-pthread_mutexattr_settype.patch b/patches/binutils/2.27/320-MinGW-w64-winpthreads-doesnt-have-pthread_mutexattr_settype.patch
new file mode 100644
index 0000000..2956385
--- /dev/null
+++ b/patches/binutils/2.27/320-MinGW-w64-winpthreads-doesnt-have-pthread_mutexattr_settype.patch
@@ -0,0 +1,11 @@
+--- binutils-2.27/gold/gold-threads.cc.orig 2016-12-26 16:44:23.691075600 +1100
++++ binutils-2.27/gold/gold-threads.cc 2016-12-26 16:46:21.071855200 +1100
+@@ -101,7 +101,7 @@
+ int err = pthread_mutexattr_init(&attr);
+ if (err != 0)
+ gold_fatal(_("pthead_mutexattr_init failed: %s"), strerror(err));
+-#ifdef PTHREAD_MUTEX_ADAPTIVE_NP
++#if defined(PTHREAD_MUTEX_ADAPTIVE_NP) && !defined(_WIN32)
+ err = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ADAPTIVE_NP);
+ if (err != 0)
+ gold_fatal(_("pthread_mutexattr_settype failed: %s"), strerror(err));
diff --git a/patches/binutils/2.27/330-Dont-link-to-libfl-as-its-unnecessary.patch b/patches/binutils/2.27/330-Dont-link-to-libfl-as-its-unnecessary.patch
new file mode 100644
index 0000000..c52af05
--- /dev/null
+++ b/patches/binutils/2.27/330-Dont-link-to-libfl-as-its-unnecessary.patch
@@ -0,0 +1,108 @@
+diff --git a/binutils/configure b/binutils/configure
+index 6e1f21e..78bf4ae 100755
+--- a/binutils/configure
++++ b/binutils/configure
+@@ -12106,6 +12106,7 @@
+ done
+ test -n "$YACC" || YACC="yacc"
+
++save_LIBS=$LIBS
+ for ac_prog in flex lex
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+@@ -12267,6 +12268,8 @@
+ if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+ fi
++LIBS=$save_LIBS
++LEXLIB=
+
+ ALL_LINGUAS="bg da es fi fr id it ja ro ru rw sk sv tr uk vi zh_CN zh_TW hr ca"
+ # If we haven't got the data from the intl directory,
+diff --git a/binutils/configure.ac b/binutils/configure.ac
+index defe781..8fd236a 100644
+--- a/binutils/configure.ac
++++ b/binutils/configure.ac
+@@ -87,7 +87,10 @@
+ fi
+
+ AC_PROG_YACC
++save_LIBS=$LIBS
+ AM_PROG_LEX
++LIBS=$save_LIBS
++LEXLIB=
+
+ ALL_LINGUAS="bg da es fi fr id it ja ro ru rw sk sv tr uk vi zh_CN zh_TW hr ca"
+ ZW_GNU_GETTEXT_SISTER_DIR
+diff --git a/gas/configure b/gas/configure
+index f959e95..9bb4043 100755
+--- a/gas/configure
++++ b/gas/configure
+@@ -12819,6 +12819,7 @@ fi
+ done
+ test -n "$YACC" || YACC="yacc"
+
++save_LIBS=$LIBS
+ for ac_prog in flex lex
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+@@ -12980,6 +12981,8 @@ esac
+ if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+ fi
++LIBS=$save_LIBS
++LEXLIB=
+
+ ALL_LINGUAS="fr tr es rw id ru fi ja zh_CN"
+ # If we haven't got the data from the intl directory,
+diff --git a/gas/configure.ac b/gas/configure.ac
+index 07f825d..c552b7e 100644
+--- a/gas/configure.ac
++++ b/gas/configure.ac
+@@ -734,7 +734,10 @@ AC_DEFINE_UNQUOTED(TARGET_VENDOR, "${target_vendor}", [Target vendor.])
+ AC_DEFINE_UNQUOTED(TARGET_OS, "${target_os}", [Target OS.])
+
+ AC_PROG_YACC
++save_LIBS=$LIBS
+ AM_PROG_LEX
++LIBS=$save_LIBS
++LEXLIB=
+
+ ALL_LINGUAS="fr tr es rw id ru fi ja zh_CN"
+ ZW_GNU_GETTEXT_SISTER_DIR
+diff --git a/ld/configure b/ld/configure
+index a446283..1a6bf81 100755
+--- a/ld/configure
++++ b/ld/configure
+@@ -16087,6 +16087,7 @@ fi
+ done
+ test -n "$YACC" || YACC="yacc"
+
++save_LIBS=$LIBS
+ for ac_prog in flex lex
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+@@ -16248,6 +16249,8 @@ esac
+ if test "$LEX" = :; then
+ LEX=${am_missing_run}flex
+ fi
++LIBS=$save_LIBS
++LEXLIB=
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+diff --git a/ld/configure.ac b/ld/configure.ac
+index 188172d..45eec53 100644
+--- a/ld/configure.ac
++++ b/ld/configure.ac
+@@ -186,7 +186,10 @@ AM_PO_SUBDIRS
+ AC_EXEEXT
+
+ AC_PROG_YACC
++save_LIBS=$LIBS
+ AM_PROG_LEX
++LIBS=$save_LIBS
++LEXLIB=
+
+ AM_MAINTAINER_MODE
+ AM_CONDITIONAL(GENINSRC_NEVER, false)
diff --git a/patches/binutils/2.27/340-Darwin-gold-binary-cc-include-string-not-cstring.patch b/patches/binutils/2.27/340-Darwin-gold-binary-cc-include-string-not-cstring.patch
new file mode 100644
index 0000000..e4f235b
--- /dev/null
+++ b/patches/binutils/2.27/340-Darwin-gold-binary-cc-include-string-not-cstring.patch
@@ -0,0 +1,13 @@
+diff --git a/gold/binary.cc b/gold/binary.cc
+index 52df81a..03a8f20 100644
+--- a/gold/binary.cc
++++ b/gold/binary.cc
+@@ -23,7 +23,7 @@
+ #include "gold.h"
+
+ #include <cerrno>
+-#include <cstring>
++#include <string>
+
+ #include "elfcpp.h"
+ #include "stringpool.h"
diff --git a/patches/binutils/2.27/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch b/patches/binutils/2.27/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch
new file mode 100644
index 0000000..6168b31
--- /dev/null
+++ b/patches/binutils/2.27/350-Darwin-Two-fixes-from-Android-NDK-PTHREAD_ONCE_INIT-wcsncasecmp.patch
@@ -0,0 +1,77 @@
+From c39479f4ab4d372b518957871e1f205a03e7c3d6 Mon Sep 17 00:00:00 2001
+From: Andrew Hsieh <andrewhsieh@google.com>
+Date: Wed, 18 Mar 2015 10:57:24 +0800
+Subject: [PATCH] Fix darwin build
+
+1. In Drawin PTHREAD_ONCE_INIT is {0x30B1BCBA, {0}} and the GCC < 4.4
+ doesn't support ended initializer list
+2. wcsncasecmp doesn't exist in MacSDK10.6.x
+
+Change-Id: I69204a72f853f5263dffedc448379d75ed4eca2e
+---
+ binutils-2.25/bfd/peXXigen.c | 22 ++++++++++++++++++++++
+ binutils-2.25/gold/gold-threads.cc | 15 ++++++++++++---
+ 2 files changed, 34 insertions(+), 3 deletions(-)
+
+diff --git binutils-2.25.orig/bfd/peXXigen.c binutils-2.25/bfd/peXXigen.c
+index 13e39e4..7a98306 100644
+--- binutils-2.25.orig/bfd/peXXigen.c
++++ binutils-2.25/bfd/peXXigen.c
+@@ -3522,6 +3522,28 @@ u16_mbtouc (wchar_t * puc, const unsigned short * s, unsigned int n)
+ }
+ #endif /* HAVE_WCHAR_H and not Cygwin/Mingw */
+
++#if defined __APPLE__ && __DARWIN_C_LEVEL < 200809L
++/* wcsncasecmp isn't always defined in Mac SDK */
++static int
++wcsncasecmp(const wchar_t *s1, const wchar_t *s2, size_t n)
++{
++ wchar_t c1, c2;
++
++ if (n == 0)
++ return (0);
++ for (; *s1; s1++, s2++)
++ {
++ c1 = towlower(*s1);
++ c2 = towlower(*s2);
++ if (c1 != c2)
++ return ((int)c1 - c2);
++ if (--n == 0)
++ return (0);
++ }
++ return (-*s2);
++}
++#endif
++
+ /* Perform a comparison of two entries. */
+ static signed int
+ rsrc_cmp (bfd_boolean is_name, rsrc_entry * a, rsrc_entry * b)
+diff --git binutils-2.25.orig/gold/gold-threads.cc binutils-2.25/gold/gold-threads.cc
+index ff5a8ac..45140e0 100644
+--- binutils-2.25.orig/gold/gold-threads.cc
++++ binutils-2.25/gold/gold-threads.cc
+@@ -284,9 +284,18 @@ Condvar::~Condvar()
+ class Once_initialize
+ {
+ public:
+- Once_initialize()
+- : once_(PTHREAD_ONCE_INIT)
+- { }
++ Once_initialize()
++#if !defined(__APPLE__)
++ : once_(PTHREAD_ONCE_INIT)
++ { }
++#else
++// In Drawin PTHREAD_ONCE_INIT is {0x30B1BCBA, {0}} and the GCC < 4.4 doesn't support
++// extended initializer list as above */
++ {
++ pthread_once_t once_2 = PTHREAD_ONCE_INIT;
++ once_ = once_2;
++ }
++#endif
+
+ // Return a pointer to the pthread_once_t variable.
+ pthread_once_t*
+--
+2.1.3
+
diff --git a/patches/binutils/2.27/500-sysroot.patch b/patches/binutils/2.27/500-sysroot.patch
new file mode 100644
index 0000000..4cb9bc7
--- /dev/null
+++ b/patches/binutils/2.27/500-sysroot.patch
@@ -0,0 +1,37 @@
+Signed-off-by: Sven Rebhan <odinshorse@googlemail.com>
+
+Always try to prepend the sysroot prefix to absolute filenames first.
+
+http://bugs.gentoo.org/275666
+http://sourceware.org/bugzilla/show_bug.cgi?id=10340
+
+--- a/ld/ldfile.c
++++ b/ld/ldfile.c
+@@ -336,18 +336,25 @@
+ directory first. */
+ if (!entry->flags.maybe_archive)
+ {
+- if (entry->flags.sysrooted && IS_ABSOLUTE_PATH (entry->filename))
++ /* For absolute pathnames, try to always open the file in the
++ sysroot first. If this fails, try to open the file at the
++ given location. */
++ entry->flags.sysrooted = is_sysrooted_pathname (entry->filename);
++ if (!entry->flags.sysrooted && IS_ABSOLUTE_PATH (entry->filename)
++ && ld_sysroot)
+ {
+ char *name = concat (ld_sysroot, entry->filename,
+ (const char *) NULL);
+ if (ldfile_try_open_bfd (name, entry))
+ {
+ entry->filename = name;
++ entry->flags.sysrooted = TRUE;
+ return TRUE;
+ }
+ free (name);
+ }
+- else if (ldfile_try_open_bfd (entry->filename, entry))
++
++ if (ldfile_try_open_bfd (entry->filename, entry))
+ return TRUE;
+
+ if (IS_ABSOLUTE_PATH (entry->filename))
diff --git a/patches/binutils/2.27/600-poison-system-directories.patch b/patches/binutils/2.27/600-poison-system-directories.patch
new file mode 100644
index 0000000..ff235e3
--- /dev/null
+++ b/patches/binutils/2.27/600-poison-system-directories.patch
@@ -0,0 +1,285 @@
+Patch adapted to binutils 2.23.2 and extended to use
+BR_COMPILER_PARANOID_UNSAFE_PATH by Thomas Petazzoni.
+
+[Gustavo: adapt to binutils 2.25]
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
+
+Upstream-Status: Inappropriate [distribution: codesourcery]
+
+Patch originally created by Mark Hatle, forward-ported to
+binutils 2.21 by Scott Garman.
+
+purpose: warn for uses of system directories when cross linking
+
+Code Merged from Sourcery G++ binutils 2.19 - 4.4-277
+
+2008-07-02 Joseph Myers <joseph@codesourcery.com>
+
+ ld/
+ * ld.h (args_type): Add error_poison_system_directories.
+ * ld.texinfo (--error-poison-system-directories): Document.
+ * ldfile.c (ldfile_add_library_path): Check
+ command_line.error_poison_system_directories.
+ * ldmain.c (main): Initialize
+ command_line.error_poison_system_directories.
+ * lexsup.c (enum option_values): Add
+ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES.
+ (ld_options): Add --error-poison-system-directories.
+ (parse_args): Handle new option.
+
+2007-06-13 Joseph Myers <joseph@codesourcery.com>
+
+ ld/
+ * config.in: Regenerate.
+ * ld.h (args_type): Add poison_system_directories.
+ * ld.texinfo (--no-poison-system-directories): Document.
+ * ldfile.c (ldfile_add_library_path): Check
+ command_line.poison_system_directories.
+ * ldmain.c (main): Initialize
+ command_line.poison_system_directories.
+ * lexsup.c (enum option_values): Add
+ OPTION_NO_POISON_SYSTEM_DIRECTORIES.
+ (ld_options): Add --no-poison-system-directories.
+ (parse_args): Handle new option.
+
+2007-04-20 Joseph Myers <joseph@codesourcery.com>
+
+ Merge from Sourcery G++ binutils 2.17:
+
+ 2007-03-20 Joseph Myers <joseph@codesourcery.com>
+ Based on patch by Mark Hatle <mark.hatle@windriver.com>.
+ ld/
+ * configure.ac (--enable-poison-system-directories): New option.
+ * configure, config.in: Regenerate.
+ * ldfile.c (ldfile_add_library_path): If
+ ENABLE_POISON_SYSTEM_DIRECTORIES defined, warn for use of /lib,
+ /usr/lib, /usr/local/lib or /usr/X11R6/lib.
+
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+Signed-off-by: Scott Garman <scott.a.garman@intel.com>
+
+diff --git a/ld/config.in b/ld/config.in
+index 276fb77..35c58eb 100644
+--- a/ld/config.in
++++ b/ld/config.in
+@@ -17,6 +17,9 @@
+ language is requested. */
+ #undef ENABLE_NLS
+
++/* Define to warn for use of native system library directories */
++#undef ENABLE_POISON_SYSTEM_DIRECTORIES
++
+ /* Additional extension a shared object might have. */
+ #undef EXTRA_SHLIB_EXTENSION
+
+diff --git a/ld/configure b/ld/configure
+index a446283..d1f9504 100755
+--- a/ld/configure
++++ b/ld/configure
+@@ -788,6 +788,7 @@ with_lib_path
+ enable_targets
+ enable_64_bit_bfd
+ with_sysroot
++enable_poison_system_directories
+ enable_gold
+ enable_got
+ enable_compressed_debug_sections
+@@ -1445,6 +1446,8 @@ Optional Features:
+ --disable-largefile omit support for large files
+ --enable-targets alternative target configurations
+ --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)
++ --enable-poison-system-directories
++ warn for use of native system library directories
+ --enable-gold[=ARG] build gold [ARG={default,yes,no}]
+ --enable-got=<type> GOT handling scheme (target, single, negative,
+ multigot)
+@@ -15498,7 +15501,18 @@ else
+ fi
+
+
++# Check whether --enable-poison-system-directories was given.
++if test "${enable_poison_system_directories+set}" = set; then :
++ enableval=$enable_poison_system_directories;
++else
++ enable_poison_system_directories=no
++fi
++
++if test "x${enable_poison_system_directories}" = "xyes"; then
+
++$as_echo "#define ENABLE_POISON_SYSTEM_DIRECTORIES 1" >>confdefs.h
++
++fi
+
+ # Check whether --enable-got was given.
+ if test "${enable_got+set}" = set; then :
+diff --git a/ld/configure.ac b/ld/configure.ac
+index 188172d..2cd8443 100644
+--- a/ld/configure.ac
++++ b/ld/configure.ac
+@@ -95,6 +95,16 @@ AC_SUBST(use_sysroot)
+ AC_SUBST(TARGET_SYSTEM_ROOT)
+ AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
+
++AC_ARG_ENABLE([poison-system-directories],
++ AS_HELP_STRING([--enable-poison-system-directories],
++ [warn for use of native system library directories]),,
++ [enable_poison_system_directories=no])
++if test "x${enable_poison_system_directories}" = "xyes"; then
++ AC_DEFINE([ENABLE_POISON_SYSTEM_DIRECTORIES],
++ [1],
++ [Define to warn for use of native system library directories])
++fi
++
+ dnl Use --enable-gold to decide if this linker should be the default.
+ dnl "install_as_default" is set to false if gold is the default linker.
+ dnl "installed_linker" is the installed BFD linker name.
+diff --git a/ld/ld.h b/ld/ld.h
+index d84ec4e..3476b26 100644
+--- a/ld/ld.h
++++ b/ld/ld.h
+@@ -169,6 +169,14 @@ typedef struct {
+ /* If set, display the target memory usage (per memory region). */
+ bfd_boolean print_memory_usage;
+
++ /* If TRUE (the default) warn for uses of system directories when
++ cross linking. */
++ bfd_boolean poison_system_directories;
++
++ /* If TRUE (default FALSE) give an error for uses of system
++ directories when cross linking instead of a warning. */
++ bfd_boolean error_poison_system_directories;
++
+ /* Big or little endian as set on command line. */
+ enum endian_enum endian;
+
+diff --git a/ld/ld.texinfo b/ld/ld.texinfo
+index 1dd7492..fb1438e 100644
+--- a/ld/ld.texinfo
++++ b/ld/ld.texinfo
+@@ -2357,6 +2357,18 @@ string identifying the original linked file does not change.
+
+ Passing @code{none} for @var{style} disables the setting from any
+ @code{--build-id} options earlier on the command line.
++
++@kindex --no-poison-system-directories
++@item --no-poison-system-directories
++Do not warn for @option{-L} options using system directories such as
++@file{/usr/lib} when cross linking. This option is intended for use
++in chroot environments when such directories contain the correct
++libraries for the target system rather than the host.
++
++@kindex --error-poison-system-directories
++@item --error-poison-system-directories
++Give an error instead of a warning for @option{-L} options using
++system directories when cross linking.
+ @end table
+
+ @c man end
+diff --git a/ld/ldfile.c b/ld/ldfile.c
+index 96f9ecc..af231c0 100644
+--- a/ld/ldfile.c
++++ b/ld/ldfile.c
+@@ -114,6 +114,23 @@ ldfile_add_library_path (const char *name, bfd_boolean cmdline)
+ new_dirs->name = concat (ld_sysroot, name + 1, (const char *) NULL);
+ else
+ new_dirs->name = xstrdup (name);
++
++#ifdef ENABLE_POISON_SYSTEM_DIRECTORIES
++ if (command_line.poison_system_directories
++ && ((!strncmp (name, "/lib", 4))
++ || (!strncmp (name, "/usr/lib", 8))
++ || (!strncmp (name, "/usr/local/lib", 14))
++ || (!strncmp (name, "/usr/X11R6/lib", 14))))
++ {
++ if (command_line.error_poison_system_directories)
++ einfo (_("%X%P: error: library search path \"%s\" is unsafe for "
++ "cross-compilation\n"), name);
++ else
++ einfo (_("%P: warning: library search path \"%s\" is unsafe for "
++ "cross-compilation\n"), name);
++ }
++#endif
++
+ }
+
+ /* Try to open a BFD for a lang_input_statement. */
+diff --git a/ld/ldlex.h b/ld/ldlex.h
+index 6f11e7b..0ca3110 100644
+--- a/ld/ldlex.h
++++ b/ld/ldlex.h
+@@ -144,6 +144,8 @@ enum option_values
+ OPTION_PRINT_MEMORY_USAGE,
+ OPTION_REQUIRE_DEFINED_SYMBOL,
+ OPTION_ORPHAN_HANDLING,
++ OPTION_NO_POISON_SYSTEM_DIRECTORIES,
++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES,
+ };
+
+ /* The initial parser states. */
+diff --git a/ld/ldmain.c b/ld/ldmain.c
+index bb0b9cc..a23c56c 100644
+--- a/ld/ldmain.c
++++ b/ld/ldmain.c
+@@ -257,6 +257,8 @@ main (int argc, char **argv)
+ command_line.warn_mismatch = TRUE;
+ command_line.warn_search_mismatch = TRUE;
+ command_line.check_section_addresses = -1;
++ command_line.poison_system_directories = TRUE;
++ command_line.error_poison_system_directories = FALSE;
+
+ /* We initialize DEMANGLING based on the environment variable
+ COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
+diff --git a/ld/lexsup.c b/ld/lexsup.c
+index 4cad209..be7d584 100644
+--- a/ld/lexsup.c
++++ b/ld/lexsup.c
+@@ -530,6 +530,14 @@ static const struct ld_option ld_options[] =
+ { {"orphan-handling", required_argument, NULL, OPTION_ORPHAN_HANDLING},
+ '\0', N_("=MODE"), N_("Control how orphan sections are handled."),
+ TWO_DASHES },
++ { {"no-poison-system-directories", no_argument, NULL,
++ OPTION_NO_POISON_SYSTEM_DIRECTORIES},
++ '\0', NULL, N_("Do not warn for -L options using system directories"),
++ TWO_DASHES },
++ { {"error-poison-system-directories", no_argument, NULL,
++ OPTION_ERROR_POISON_SYSTEM_DIRECTORIES},
++ '\0', NULL, N_("Give an error for -L options using system directories"),
++ TWO_DASHES },
+ };
+
+ #define OPTION_COUNT ARRAY_SIZE (ld_options)
+@@ -542,6 +550,7 @@ parse_args (unsigned argc, char **argv)
+ int ingroup = 0;
+ char *default_dirlist = NULL;
+ char *shortopts;
++ char *BR_paranoid_env;
+ struct option *longopts;
+ struct option *really_longopts;
+ int last_optind;
+@@ -1516,6 +1525,14 @@ parse_args (unsigned argc, char **argv)
+ }
+ break;
+
++ case OPTION_NO_POISON_SYSTEM_DIRECTORIES:
++ command_line.poison_system_directories = FALSE;
++ break;
++
++ case OPTION_ERROR_POISON_SYSTEM_DIRECTORIES:
++ command_line.error_poison_system_directories = TRUE;
++ break;
++
+ case OPTION_PUSH_STATE:
+ input_flags.pushed = xmemdup (&input_flags,
+ sizeof (input_flags),
+@@ -1559,6 +1576,10 @@ parse_args (unsigned argc, char **argv)
+ command_line.soname = NULL;
+ }
+
++ BR_paranoid_env = getenv("BR_COMPILER_PARANOID_UNSAFE_PATH");
++ if (BR_paranoid_env && strlen(BR_paranoid_env) > 0)
++ command_line.error_poison_system_directories = TRUE;
++
+ while (ingroup)
+ {
+ lang_leave_group ();
diff --git a/patches/binutils/2.27/999-xtensa-reverse-shift-count.patch b/patches/binutils/2.27/999-xtensa-reverse-shift-count.patch
new file mode 100644
index 0000000..f8bb9c1
--- /dev/null
+++ b/patches/binutils/2.27/999-xtensa-reverse-shift-count.patch
@@ -0,0 +1,33 @@
+From 78fb7e37eb8bb08ae537d6c487996ff17c810332 Mon Sep 17 00:00:00 2001
+From: Trevor Saunders <tbsaunde+binutils@tbsaunde.org>
+Date: Mon, 26 Sep 2016 12:42:11 -0400
+Subject: [PATCH] tc-xtensa.c: fixup xg_reverse_shift_count typo
+
+gas/ChangeLog:
+
+2016-09-26 Trevor Saunders <tbsaunde+binutils@tbsaunde.org>
+
+ * config/tc-xtensa.c (xg_reverse_shift_count): Pass cnt_arg instead of
+ cnt_argp to concat.
+---
+ gas/ChangeLog | 5 +++++
+ gas/config/tc-xtensa.c | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+[[ ChangeLog skipped, fails to apply on 2.27 ]]
+diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c
+index d062044..ca261ae 100644
+--- a/gas/config/tc-xtensa.c
++++ b/gas/config/tc-xtensa.c
+@@ -2228,7 +2228,7 @@ xg_reverse_shift_count (char **cnt_argp)
+ cnt_arg = *cnt_argp;
+
+ /* replace the argument with "31-(argument)" */
+- new_arg = concat ("31-(", cnt_argp, ")", (char *) NULL);
++ new_arg = concat ("31-(", cnt_arg, ")", (char *) NULL);
+
+ free (cnt_arg);
+ *cnt_argp = new_arg;
+--
+2.9.3
+
diff --git a/patches/gcc/4.8.5/1000-libtool-leave-framework-alone.patch b/patches/gcc/4.8.5/1000-libtool-leave-framework-alone.patch
new file mode 100644
index 0000000..525592e
--- /dev/null
+++ b/patches/gcc/4.8.5/1000-libtool-leave-framework-alone.patch
@@ -0,0 +1,14 @@
+--- gcc-4.9.4/libtool-ldflags 2016-12-20 11:13:12.669668125 -0800
++++ gcc-4.9.4/libtool-ldflags 2016-12-20 11:28:34.894826286 -0800
+@@ -36,6 +36,11 @@
+ for arg
+ do
+ case $arg in
++ -framework)
++ # libtool handles this option. It should not be prefixed with
++ # -Xcompiler, as that would split it from the argument that
++ # follows.
++ ;;
+ -f*|--*)
+ # Libtool does not ascribe any special meaning options
+ # that begin with -f or with a double-dash. So, it will
diff --git a/patches/gcc/4.9.4/1000-libtool-leave-framework-alone.patch b/patches/gcc/4.9.4/1000-libtool-leave-framework-alone.patch
new file mode 100644
index 0000000..525592e
--- /dev/null
+++ b/patches/gcc/4.9.4/1000-libtool-leave-framework-alone.patch
@@ -0,0 +1,14 @@
+--- gcc-4.9.4/libtool-ldflags 2016-12-20 11:13:12.669668125 -0800
++++ gcc-4.9.4/libtool-ldflags 2016-12-20 11:28:34.894826286 -0800
+@@ -36,6 +36,11 @@
+ for arg
+ do
+ case $arg in
++ -framework)
++ # libtool handles this option. It should not be prefixed with
++ # -Xcompiler, as that would split it from the argument that
++ # follows.
++ ;;
+ -f*|--*)
+ # Libtool does not ascribe any special meaning options
+ # that begin with -f or with a double-dash. So, it will
diff --git a/patches/gcc/5.4.0/1000-libtool-leave-framework-alone.patch b/patches/gcc/5.4.0/1000-libtool-leave-framework-alone.patch
new file mode 100644
index 0000000..0f4912a
--- /dev/null
+++ b/patches/gcc/5.4.0/1000-libtool-leave-framework-alone.patch
@@ -0,0 +1,14 @@
+--- gcc-5.4.0/libtool-ldflags 2016-12-20 11:13:12.669668125 -0800
++++ gcc-5.4.0/libtool-ldflags 2016-12-20 11:28:34.894826286 -0800
+@@ -36,6 +36,11 @@
+ for arg
+ do
+ case $arg in
++ -framework)
++ # libtool handles this option. It should not be prefixed with
++ # -Xcompiler, as that would split it from the argument that
++ # follows.
++ ;;
+ -f*|--*|-static-lib*|-shared-lib*|-B*)
+ # Libtool does not ascribe any special meaning options
+ # that begin with -f or with a double-dash. So, it will
diff --git a/patches/gcc/6.2.0/100-uclibc-conf.patch b/patches/gcc/6.3.0/100-uclibc-conf.patch
index 73d1f0d..73d1f0d 100644
--- a/patches/gcc/6.2.0/100-uclibc-conf.patch
+++ b/patches/gcc/6.3.0/100-uclibc-conf.patch
diff --git a/patches/gcc/6.3.0/1000-libtool-leave-framework-alone.patch b/patches/gcc/6.3.0/1000-libtool-leave-framework-alone.patch
new file mode 100644
index 0000000..bce09eb
--- /dev/null
+++ b/patches/gcc/6.3.0/1000-libtool-leave-framework-alone.patch
@@ -0,0 +1,14 @@
+--- gcc-6.2.0/libtool-ldflags 2016-12-20 11:13:12.669668125 -0800
++++ gcc-6.2.0/libtool-ldflags 2016-12-20 11:28:34.894826286 -0800
+@@ -36,6 +36,11 @@
+ for arg
+ do
+ case $arg in
++ -framework)
++ # libtool handles this option. It should not be prefixed with
++ # -Xcompiler, as that would split it from the argument that
++ # follows.
++ ;;
+ -f*|--*|-static-lib*|-shared-lib*|-B*)
+ # Libtool does not ascribe any special meaning options
+ # that begin with -f or with a double-dash. So, it will
diff --git a/patches/gcc/6.2.0/301-missing-execinfo_h.patch b/patches/gcc/6.3.0/301-missing-execinfo_h.patch
index 2d0e7ba..2d0e7ba 100644
--- a/patches/gcc/6.2.0/301-missing-execinfo_h.patch
+++ b/patches/gcc/6.3.0/301-missing-execinfo_h.patch
diff --git a/patches/gcc/6.2.0/370-gcc-plugin-Win-Dont-need-undefined-extern-var-refs-nor-fpic.patch b/patches/gcc/6.3.0/370-gcc-plugin-Win-Dont-need-undefined-extern-var-refs-nor-fpic.patch
index d8986d5..d8986d5 100644
--- a/patches/gcc/6.2.0/370-gcc-plugin-Win-Dont-need-undefined-extern-var-refs-nor-fpic.patch
+++ b/patches/gcc/6.3.0/370-gcc-plugin-Win-Dont-need-undefined-extern-var-refs-nor-fpic.patch
diff --git a/patches/gcc/6.2.0/380-gcc-plugin-POSIX-include-sys-select-h.patch b/patches/gcc/6.3.0/380-gcc-plugin-POSIX-include-sys-select-h.patch
index 12ef48e..12ef48e 100644
--- a/patches/gcc/6.2.0/380-gcc-plugin-POSIX-include-sys-select-h.patch
+++ b/patches/gcc/6.3.0/380-gcc-plugin-POSIX-include-sys-select-h.patch
diff --git a/patches/gcc/6.2.0/810-arm-softfloat-libgcc.patch b/patches/gcc/6.3.0/810-arm-softfloat-libgcc.patch
index 5efa7fd..5efa7fd 100644
--- a/patches/gcc/6.2.0/810-arm-softfloat-libgcc.patch
+++ b/patches/gcc/6.3.0/810-arm-softfloat-libgcc.patch
diff --git a/patches/gcc/6.2.0/830-arm_unbreak_armv4t.patch b/patches/gcc/6.3.0/830-arm_unbreak_armv4t.patch
index b730059..b730059 100644
--- a/patches/gcc/6.2.0/830-arm_unbreak_armv4t.patch
+++ b/patches/gcc/6.3.0/830-arm_unbreak_armv4t.patch
diff --git a/patches/gcc/6.2.0/831-ARM-PR-target-70473-Reduce-size-of-Cortex-A8-automat.patch b/patches/gcc/6.3.0/831-ARM-PR-target-70473-Reduce-size-of-Cortex-A8-automat.patch
index af9fb1d..af9fb1d 100644
--- a/patches/gcc/6.2.0/831-ARM-PR-target-70473-Reduce-size-of-Cortex-A8-automat.patch
+++ b/patches/gcc/6.3.0/831-ARM-PR-target-70473-Reduce-size-of-Cortex-A8-automat.patch
diff --git a/patches/gcc/6.2.0/860-cilk-wchar.patch b/patches/gcc/6.3.0/860-cilk-wchar.patch
index 1d9916f..1d9916f 100644
--- a/patches/gcc/6.2.0/860-cilk-wchar.patch
+++ b/patches/gcc/6.3.0/860-cilk-wchar.patch
diff --git a/patches/gcc/6.2.0/870-xtensa-don-t-use-unwind-dw2-fde-dip-with-elf-targets.patch b/patches/gcc/6.3.0/870-xtensa-don-t-use-unwind-dw2-fde-dip-with-elf-targets.patch
index 6e0ce6e..6e0ce6e 100644
--- a/patches/gcc/6.2.0/870-xtensa-don-t-use-unwind-dw2-fde-dip-with-elf-targets.patch
+++ b/patches/gcc/6.3.0/870-xtensa-don-t-use-unwind-dw2-fde-dip-with-elf-targets.patch
diff --git a/patches/gcc/6.2.0/871-xtensa-Fix-PR-target-78118.patch b/patches/gcc/6.3.0/871-xtensa-Fix-PR-target-78118.patch
index c6ae103..c6ae103 100644
--- a/patches/gcc/6.2.0/871-xtensa-Fix-PR-target-78118.patch
+++ b/patches/gcc/6.3.0/871-xtensa-Fix-PR-target-78118.patch
diff --git a/patches/gcc/6.2.0/872-xtensa-Fix-PR-target-78603.patch b/patches/gcc/6.3.0/872-xtensa-Fix-PR-target-78603.patch
index 669097c..669097c 100644
--- a/patches/gcc/6.2.0/872-xtensa-Fix-PR-target-78603.patch
+++ b/patches/gcc/6.3.0/872-xtensa-Fix-PR-target-78603.patch
diff --git a/patches/gcc/6.2.0/890-fix-m68k-compile.patch b/patches/gcc/6.3.0/890-fix-m68k-compile.patch
index 6e63de0..6e63de0 100644
--- a/patches/gcc/6.2.0/890-fix-m68k-compile.patch
+++ b/patches/gcc/6.3.0/890-fix-m68k-compile.patch
diff --git a/patches/gcc/6.2.0/891-fix-m68k-uclinux.patch b/patches/gcc/6.3.0/891-fix-m68k-uclinux.patch
index 4e186bd..4e186bd 100644
--- a/patches/gcc/6.2.0/891-fix-m68k-uclinux.patch
+++ b/patches/gcc/6.3.0/891-fix-m68k-uclinux.patch
diff --git a/patches/gcc/6.2.0/892-libgcc-mkmap-symver-support-skip_underscore.patch b/patches/gcc/6.3.0/892-libgcc-mkmap-symver-support-skip_underscore.patch
index 73ee6c5..73ee6c5 100644
--- a/patches/gcc/6.2.0/892-libgcc-mkmap-symver-support-skip_underscore.patch
+++ b/patches/gcc/6.3.0/892-libgcc-mkmap-symver-support-skip_underscore.patch
diff --git a/patches/gcc/6.2.0/893-libgcc-config-bfin-use-the-generic-linker-version-in.patch b/patches/gcc/6.3.0/893-libgcc-config-bfin-use-the-generic-linker-version-in.patch
index 454295d..454295d 100644
--- a/patches/gcc/6.2.0/893-libgcc-config-bfin-use-the-generic-linker-version-in.patch
+++ b/patches/gcc/6.3.0/893-libgcc-config-bfin-use-the-generic-linker-version-in.patch
diff --git a/patches/gcc/6.2.0/894-libgcc-fix-DWARF-compilation-with-FDPIC-targets.patch b/patches/gcc/6.3.0/894-libgcc-fix-DWARF-compilation-with-FDPIC-targets.patch
index ce49de7..ce49de7 100644
--- a/patches/gcc/6.2.0/894-libgcc-fix-DWARF-compilation-with-FDPIC-targets.patch
+++ b/patches/gcc/6.3.0/894-libgcc-fix-DWARF-compilation-with-FDPIC-targets.patch
diff --git a/patches/gcc/6.2.0/895-bfin-define-REENTRANT.patch b/patches/gcc/6.3.0/895-bfin-define-REENTRANT.patch
index e2828a5..e2828a5 100644
--- a/patches/gcc/6.2.0/895-bfin-define-REENTRANT.patch
+++ b/patches/gcc/6.3.0/895-bfin-define-REENTRANT.patch
diff --git a/patches/gcc/6.2.0/910-nios2-bad-multilib-default.patch b/patches/gcc/6.3.0/910-nios2-bad-multilib-default.patch
index 61989e5..61989e5 100644
--- a/patches/gcc/6.2.0/910-nios2-bad-multilib-default.patch
+++ b/patches/gcc/6.3.0/910-nios2-bad-multilib-default.patch
diff --git a/patches/gcc/6.2.0/930-libgcc-disable-split-stack-nothreads.patch b/patches/gcc/6.3.0/930-libgcc-disable-split-stack-nothreads.patch
index 07f9a73..07f9a73 100644
--- a/patches/gcc/6.2.0/930-libgcc-disable-split-stack-nothreads.patch
+++ b/patches/gcc/6.3.0/930-libgcc-disable-split-stack-nothreads.patch
diff --git a/patches/gcc/6.2.0/940-uclinux-enable-threads.patch b/patches/gcc/6.3.0/940-uclinux-enable-threads.patch
index 490a55b..490a55b 100644
--- a/patches/gcc/6.2.0/940-uclinux-enable-threads.patch
+++ b/patches/gcc/6.3.0/940-uclinux-enable-threads.patch
diff --git a/patches/gdb/7.12/100-musl_fix.patch b/patches/gdb/7.12/100-musl_fix.patch
new file mode 100644
index 0000000..c0c1e0a
--- /dev/null
+++ b/patches/gdb/7.12/100-musl_fix.patch
@@ -0,0 +1,28 @@
+--- a/gdb/linux-nat.c
++++ b/gdb/linux-nat.c
+@@ -17,6 +17,7 @@
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
++#include "stopcode.h"
+ #include "defs.h"
+ #include "inferior.h"
+ #include "infrun.h"
+@@ -73,6 +74,10 @@
+ #define SPUFS_MAGIC 0x23c9b64e
+ #endif
+
++#ifndef __SIGRTMIN
++#define __SIGRTMIN SIGRTMIN
++#endif
++
+ /* This comment documents high-level logic of this file.
+
+ Waiting for events in sync mode
+--- /dev/null
++++ b/gdb/stopcode.h
+@@ -0,0 +1,4 @@
++#ifndef W_STOPCODE
++#define W_STOPCODE(sig) ((sig) << 8 | 0x7f)
++#endif
++
diff --git a/patches/gdb/7.12/101-uclibc-no-gettimeofday-clobber.patch b/patches/gdb/7.12/101-uclibc-no-gettimeofday-clobber.patch
new file mode 100644
index 0000000..cd7a4c6
--- /dev/null
+++ b/patches/gdb/7.12/101-uclibc-no-gettimeofday-clobber.patch
@@ -0,0 +1,30 @@
+Improve gnulib in gdb's guess work, gettimeofday() works in uClibcm promise.
+
+This patch helps building x86_64-unknown-linux-uclibc toolchains, the final
+gdb-native step otherwise fails when linking the libinproctrace.so
+
+Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
+Signed-off-by: Alexey Neyman <stilor@att.net>
+
+diff -urpN gdb-7.12.orig/gdb/gnulib/configure gdb-7.12/gdb/gnulib/configure
+--- gdb-7.12.orig/gdb/gnulib/configure 2017-01-13 13:42:11.773027566 -0800
++++ gdb-7.12/gdb/gnulib/configure 2017-01-13 13:44:32.518082618 -0800
+@@ -13522,6 +13522,7 @@ else
+ case "$host_os" in
+ # Guess all is fine on glibc systems.
+ *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;;
++ *-uclibc*) gl_cv_func_gettimeofday_clobber="guessing no" ;;
+ # If we don't know, assume the worst.
+ *) gl_cv_func_gettimeofday_clobber="guessing yes" ;;
+ esac
+diff -urpN gdb-7.12.orig/gdb/gnulib/import/m4/gettimeofday.m4 gdb-7.12/gdb/gnulib/import/m4/gettimeofday.m4
+--- gdb-7.12.orig/gdb/gnulib/import/m4/gettimeofday.m4 2017-01-13 13:42:11.777027595 -0800
++++ gdb-7.12/gdb/gnulib/import/m4/gettimeofday.m4 2017-01-13 13:43:55.781797640 -0800
+@@ -111,6 +111,7 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
+ case "$host_os" in
+ # Guess all is fine on glibc systems.
+ *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;;
++ *-uclibc*) gl_cv_func_gettimeofday_clobber="guessing no" ;;
+ # If we don't know, assume the worst.
+ *) gl_cv_func_gettimeofday_clobber="guessing yes" ;;
+ esac
diff --git a/patches/gdb/7.12/111-xtensa-make-sure-ar_base-is-initialized.patch b/patches/gdb/7.12/111-xtensa-make-sure-ar_base-is-initialized.patch
new file mode 100644
index 0000000..982bd7f
--- /dev/null
+++ b/patches/gdb/7.12/111-xtensa-make-sure-ar_base-is-initialized.patch
@@ -0,0 +1,35 @@
+From 208ea73d38c9c16cf983b6419f58050dbadcb6a9 Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Sun, 7 Jun 2015 22:43:49 +0300
+Subject: [PATCH 2/2] xtensa: make sure ar_base is initialized
+
+ar_base is uninitialized for cores w/o windowed registers as their
+regmap doesn't have register 0x0100.
+Check that ar_base is initialized and if not initialize it with a0_base.
+
+gdb/
+ * xtensa-tdep.c (xtensa_derive_tdep): Make sure ar_base is
+ initialized.
+
+Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
+---
+ gdb/xtensa-tdep.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
+index 55e7d98..41f5ec1 100644
+--- a/gdb/xtensa-tdep.c
++++ b/gdb/xtensa-tdep.c
+@@ -3175,6 +3175,9 @@ xtensa_derive_tdep (struct gdbarch_tdep *tdep)
+ tdep->num_regs = n;
+ }
+
++ if (tdep->ar_base == -1)
++ tdep->ar_base = tdep->a0_base;
++
+ /* Number of pseudo registers. */
+ tdep->num_pseudo_regs = n - tdep->num_regs;
+
+--
+1.8.1.4
+
diff --git a/patches/gdb/7.12/112-WIP-end-of-prologue-detection-hack.patch b/patches/gdb/7.12/112-WIP-end-of-prologue-detection-hack.patch
new file mode 100644
index 0000000..506a57c
--- /dev/null
+++ b/patches/gdb/7.12/112-WIP-end-of-prologue-detection-hack.patch
@@ -0,0 +1,31 @@
+From 7f8eacbb468575fb67db7fd1155a3aedaa91911b Mon Sep 17 00:00:00 2001
+From: Max Filippov <jcmvbkbc@gmail.com>
+Date: Sun, 7 Jun 2015 23:15:39 +0300
+Subject: [PATCH] WIP: *end of prologue* detection hack
+
+see
+ http://www.esp8266.com/viewtopic.php?p=18461#p18461
+ http://www.esp8266.com/viewtopic.php?p=19026#p19026
+ http://www.esp8266.com/viewtopic.php?p=19683#p19683
+
+Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
+---
+ gdb/xtensa-tdep.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
+index 41f5ec1..6a7dba7 100644
+--- a/gdb/xtensa-tdep.c
++++ b/gdb/xtensa-tdep.c
+@@ -2410,7 +2410,7 @@ call0_analyze_prologue (struct gdbarch *gdbarch,
+ /* Find out, if we have an information about the prologue from DWARF. */
+ prologue_sal = find_pc_line (start, 0);
+ if (prologue_sal.line != 0) /* Found debug info. */
+- body_pc = prologue_sal.end;
++ body_pc = prologue_sal.end + 40;
+
+ /* If we are going to analyze the prologue in general without knowing about
+ the current PC, make the best assumtion for the end of the prologue. */
+--
+1.8.1.4
+
diff --git a/patches/musl/1.0.4/0001-max_align_t.patch b/patches/musl/1.0.4/0001-max_align_t.patch
deleted file mode 100644
index 766f667..0000000
--- a/patches/musl/1.0.4/0001-max_align_t.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-From 321f4fa9067185aa6bb47403dfba46e8cfe917d3 Mon Sep 17 00:00:00 2001
-From: Rich Felker <dalias@aerifal.cx>
-Date: Wed, 20 Aug 2014 21:20:14 +0000
-Subject: add max_align_t definition for C11 and C++11
-
-unfortunately this needs to be able to vary by arch, because of a huge
-mess GCC made: the GCC definition, which became the ABI, depends on
-quirks in GCC's definition of __alignof__, which does not match the
-formal alignment of the type.
-
-GCC's __alignof__ unexpectedly exposes the an implementation detail,
-its "preferred alignment" for the type, rather than the formal/ABI
-alignment of the type, which it only actually uses in structures. on
-most archs the two values are the same, but on some (at least i386)
-the preferred alignment is greater than the ABI alignment.
-
-I considered using _Alignas(8) unconditionally, but on at least one
-arch (or1k), the alignment of max_align_t with GCC's definition is
-only 4 (even the "preferred alignment" for these types is only 4).
-
-[bryanhundven@gmail.com: remove the or1k hunk]
-[yann.morin.1998@free.fr: add the commit log]
-diff --git a/arch/arm/bits/alltypes.h.in b/arch/arm/bits/alltypes.h.in
-index bd23a6a..3482874 100644
---- a/arch/arm/bits/alltypes.h.in
-+++ b/arch/arm/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/i386/bits/alltypes.h.in b/arch/i386/bits/alltypes.h.in
-index efd2c07..8a62c80 100644
---- a/arch/i386/bits/alltypes.h.in
-+++ b/arch/i386/bits/alltypes.h.in
-@@ -27,6 +27,8 @@ TYPEDEF long double float_t;
- TYPEDEF long double double_t;
- #endif
-
-+TYPEDEF struct { _Alignas(8) long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/microblaze/bits/alltypes.h.in b/arch/microblaze/bits/alltypes.h.in
-index 6bd7942..27006b0 100644
---- a/arch/microblaze/bits/alltypes.h.in
-+++ b/arch/microblaze/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/mips/bits/alltypes.h.in b/arch/mips/bits/alltypes.h.in
-index 6bd7942..27006b0 100644
---- a/arch/mips/bits/alltypes.h.in
-+++ b/arch/mips/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/powerpc/bits/alltypes.h.in b/arch/powerpc/bits/alltypes.h.in
-index e9d8dd8..040157e 100644
---- a/arch/powerpc/bits/alltypes.h.in
-+++ b/arch/powerpc/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/sh/bits/alltypes.h.in b/arch/sh/bits/alltypes.h.in
-index e9d8dd8..040157e 100644
---- a/arch/sh/bits/alltypes.h.in
-+++ b/arch/sh/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/x32/bits/alltypes.h.in b/arch/x32/bits/alltypes.h.in
-index b077fc9..c98a3d7 100644
---- a/arch/x32/bits/alltypes.h.in
-+++ b/arch/x32/bits/alltypes.h.in
-@@ -18,6 +18,8 @@ TYPEDEF float float_t;
- TYPEDEF double double_t;
- #endif
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long long time_t;
- TYPEDEF long long suseconds_t;
-
-diff --git a/arch/x86_64/bits/alltypes.h.in b/arch/x86_64/bits/alltypes.h.in
-index 277e944..c4898c7 100644
---- a/arch/x86_64/bits/alltypes.h.in
-+++ b/arch/x86_64/bits/alltypes.h.in
-@@ -18,6 +18,8 @@ TYPEDEF float float_t;
- TYPEDEF double double_t;
- #endif
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/include/stddef.h b/include/stddef.h
-index 0a32919..bd75385 100644
---- a/include/stddef.h
-+++ b/include/stddef.h
-@@ -10,6 +10,9 @@
- #define __NEED_ptrdiff_t
- #define __NEED_size_t
- #define __NEED_wchar_t
-+#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
-+#define __NEED_max_align_t
-+#endif
-
- #include <bits/alltypes.h>
-
diff --git a/patches/musl/1.1.4/0001-max_align_t.patch b/patches/musl/1.1.4/0001-max_align_t.patch
deleted file mode 100644
index 6423337..0000000
--- a/patches/musl/1.1.4/0001-max_align_t.patch
+++ /dev/null
@@ -1,153 +0,0 @@
-From 321f4fa9067185aa6bb47403dfba46e8cfe917d3 Mon Sep 17 00:00:00 2001
-From: Rich Felker <dalias@aerifal.cx>
-Date: Wed, 20 Aug 2014 21:20:14 +0000
-Subject: add max_align_t definition for C11 and C++11
-
-unfortunately this needs to be able to vary by arch, because of a huge
-mess GCC made: the GCC definition, which became the ABI, depends on
-quirks in GCC's definition of __alignof__, which does not match the
-formal alignment of the type.
-
-GCC's __alignof__ unexpectedly exposes the an implementation detail,
-its "preferred alignment" for the type, rather than the formal/ABI
-alignment of the type, which it only actually uses in structures. on
-most archs the two values are the same, but on some (at least i386)
-the preferred alignment is greater than the ABI alignment.
-
-I considered using _Alignas(8) unconditionally, but on at least one
-arch (or1k), the alignment of max_align_t with GCC's definition is
-only 4 (even the "preferred alignment" for these types is only 4).
----
-diff --git a/arch/arm/bits/alltypes.h.in b/arch/arm/bits/alltypes.h.in
-index 0d750cc..183c4c4 100644
---- a/arch/arm/bits/alltypes.h.in
-+++ b/arch/arm/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/i386/bits/alltypes.h.in b/arch/i386/bits/alltypes.h.in
-index 502c882..8ba8f6f 100644
---- a/arch/i386/bits/alltypes.h.in
-+++ b/arch/i386/bits/alltypes.h.in
-@@ -27,6 +27,8 @@ TYPEDEF long double float_t;
- TYPEDEF long double double_t;
- #endif
-
-+TYPEDEF struct { _Alignas(8) long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/microblaze/bits/alltypes.h.in b/arch/microblaze/bits/alltypes.h.in
-index 4657d14..a03e1b8 100644
---- a/arch/microblaze/bits/alltypes.h.in
-+++ b/arch/microblaze/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/mips/bits/alltypes.h.in b/arch/mips/bits/alltypes.h.in
-index 4657d14..a03e1b8 100644
---- a/arch/mips/bits/alltypes.h.in
-+++ b/arch/mips/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/or1k/bits/alltypes.h.in b/arch/or1k/bits/alltypes.h.in
-index 0d750cc..183c4c4 100644
---- a/arch/or1k/bits/alltypes.h.in
-+++ b/arch/or1k/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/powerpc/bits/alltypes.h.in b/arch/powerpc/bits/alltypes.h.in
-index 378124c..ee7f137 100644
---- a/arch/powerpc/bits/alltypes.h.in
-+++ b/arch/powerpc/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/sh/bits/alltypes.h.in b/arch/sh/bits/alltypes.h.in
-index 378124c..ee7f137 100644
---- a/arch/sh/bits/alltypes.h.in
-+++ b/arch/sh/bits/alltypes.h.in
-@@ -13,6 +13,8 @@ TYPEDEF unsigned wint_t;
- TYPEDEF float float_t;
- TYPEDEF double double_t;
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/arch/x32/bits/alltypes.h.in b/arch/x32/bits/alltypes.h.in
-index 8930efa..8e396c9 100644
---- a/arch/x32/bits/alltypes.h.in
-+++ b/arch/x32/bits/alltypes.h.in
-@@ -18,6 +18,8 @@ TYPEDEF float float_t;
- TYPEDEF double double_t;
- #endif
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long long time_t;
- TYPEDEF long long suseconds_t;
-
-diff --git a/arch/x86_64/bits/alltypes.h.in b/arch/x86_64/bits/alltypes.h.in
-index 34b7d6a..7b4f3e7 100644
---- a/arch/x86_64/bits/alltypes.h.in
-+++ b/arch/x86_64/bits/alltypes.h.in
-@@ -18,6 +18,8 @@ TYPEDEF float float_t;
- TYPEDEF double double_t;
- #endif
-
-+TYPEDEF struct { long long __ll; long double __ld; } max_align_t;
-+
- TYPEDEF long time_t;
- TYPEDEF long suseconds_t;
-
-diff --git a/include/stddef.h b/include/stddef.h
-index 0a32919..bd75385 100644
---- a/include/stddef.h
-+++ b/include/stddef.h
-@@ -10,6 +10,9 @@
- #define __NEED_ptrdiff_t
- #define __NEED_size_t
- #define __NEED_wchar_t
-+#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
-+#define __NEED_max_align_t
-+#endif
-
- #include <bits/alltypes.h>
-
---
-cgit v0.9.0.3-65-g4555
diff --git a/patches/strace/4.10/007_fix_bexecve64_test.patch b/patches/strace/4.10/007_fix_bexecve64_test.patch
index 09cd8ad..6dc9b46 100644
--- a/patches/strace/4.10/007_fix_bexecve64_test.patch
+++ b/patches/strace/4.10/007_fix_bexecve64_test.patch
@@ -1,3 +1,5 @@
+commit b704e8fbb4d9cf90ac56f3c889de5b779c444db4
+(loosely based on)
--- a/tests/bexecve.test
+++ b/tests/bexecve.test
@@ -24,13 +24,14 @@
diff --git a/patches/strace/4.10/008_decode_mips_indirect_syscall.patch b/patches/strace/4.10/008_decode_mips_indirect_syscall.patch
index de0004c..d2d7217 100644
--- a/patches/strace/4.10/008_decode_mips_indirect_syscall.patch
+++ b/patches/strace/4.10/008_decode_mips_indirect_syscall.patch
@@ -1,3 +1,4 @@
+commit f34b97f89dd3893ef3652a6899487771402fc13c
Index: strace-4.10/linux/mips/syscallent-o32.h
===================================================================
--- strace-4.10.orig/linux/mips/syscallent-o32.h
diff --git a/patches/strace/4.10/009-upstream-musl_includes.patch b/patches/strace/4.10/009-upstream-musl_includes.patch
index a35d7fd..c68f8d8 100644
--- a/patches/strace/4.10/009-upstream-musl_includes.patch
+++ b/patches/strace/4.10/009-upstream-musl_includes.patch
@@ -1,3 +1,5 @@
+commit 3460dc486d333231998de0f19918204aacee9ae3
+commit d34e00b293942b1012ddc49ed3ab379a32337611
--- a/evdev.c
+++ b/evdev.c
@@ -28,6 +28,8 @@
diff --git a/patches/strace/4.10/010-use-host-ioctl.patch b/patches/strace/4.10/010-use-host-ioctl.patch
new file mode 100644
index 0000000..e9c34d3
--- /dev/null
+++ b/patches/strace/4.10/010-use-host-ioctl.patch
@@ -0,0 +1,142 @@
+diff -urpN strace-4.10.orig/ioctl_iocdef.c strace-4.10/ioctl_iocdef.c
+--- strace-4.10.orig/ioctl_iocdef.c 1969-12-31 16:00:00.000000000 -0800
++++ strace-4.10/ioctl_iocdef.c 2017-01-14 15:05:49.505335680 -0800
+@@ -0,0 +1,43 @@
++/*
++ * Copyright (c) 2017 Alexey Neyman <stilor@att.net>
++ * 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.
++ */
++
++/*
++ * This file is *PREPROCESSED*, not *COMPILED* for host and the result
++ * is included into ioctlsort (which is compiled for build). Since some
++ * of these values are used in structure initializers, they cannot be
++ * defined as 'const unsigned int' - instead, they have to be macros.
++ * Hence, the result of preprocessing will be run through sed to change
++ * 'DEFINE' into '#define'
++ */
++#include <linux/ioctl.h>
++
++DEFINE HOST_IOC_NONE _IOC_NONE
++DEFINE HOST_IOC_READ _IOC_READ
++DEFINE HOST_IOC_WRITE _IOC_WRITE
++
++DEFINE HOST_IOC_SIZESHIFT _IOC_SIZESHIFT
++DEFINE HOST_IOC_DIRSHIFT _IOC_DIRSHIFT
+diff -urpN strace-4.10.orig/ioctlsort.c strace-4.10/ioctlsort.c
+--- strace-4.10.orig/ioctlsort.c 2015-02-15 18:35:58.000000000 -0800
++++ strace-4.10/ioctlsort.c 2017-01-14 15:20:30.597371979 -0800
+@@ -33,7 +33,8 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#include <linux/ioctl.h>
++
++#include "ioctl_iocdef.h"
+
+ struct ioctlent {
+ const char *info;
+diff -urpN strace-4.10.orig/Makefile.am strace-4.10/Makefile.am
+--- strace-4.10.orig/Makefile.am 2015-03-05 18:19:01.000000000 -0800
++++ strace-4.10/Makefile.am 2017-01-14 15:07:28.978244260 -0800
+@@ -159,6 +159,7 @@ EXTRA_DIST = \
+ debian/strace64.manpages \
+ debian/watch \
+ errnoent.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/syscallent.h \
+@@ -416,15 +417,24 @@ ioctlsort_LDFLAGS = $(AM_LDFLAGS) $(LDFL
+ ioctls_inc_h = $(wildcard $(srcdir)/$(OS)/$(ARCH)/ioctls_inc*.h)
+ ioctlent_h = $(patsubst $(srcdir)/$(OS)/$(ARCH)/ioctls_inc%,ioctlent%,$(ioctls_inc_h))
+ BUILT_SOURCES += $(ioctlent_h)
+-CLEANFILES = $(ioctlent_h)
++CLEANFILES = $(ioctlent_h) ioctl_iocdef.h
+
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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
+diff -urpN strace-4.10.orig/Makefile.in strace-4.10/Makefile.in
+--- strace-4.10.orig/Makefile.in 2015-03-06 07:16:46.000000000 -0800
++++ strace-4.10/Makefile.in 2017-01-14 15:23:06.718794409 -0800
+@@ -687,6 +687,7 @@ EXTRA_DIST = \
+ debian/strace64.manpages \
+ debian/watch \
+ errnoent.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/syscallent.h \
+@@ -921,7 +922,7 @@ ioctlsort_CFLAGS = $(AM_CFLAGS) $(CFLAGS
+ 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))
+-CLEANFILES = $(ioctlent_h)
++CLEANFILES = $(ioctlent_h) ioctl_iocdef.h
+ @MAINTAINER_MODE_TRUE@gen_changelog_start_date = 2009-07-08 20:00
+ all: $(BUILT_SOURCES) config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+@@ -3414,13 +3415,22 @@ news-check: NEWS
+ exit 1; \
+ fi
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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
diff --git a/patches/strace/4.11/010-use-host-ioctl.patch b/patches/strace/4.11/010-use-host-ioctl.patch
new file mode 100644
index 0000000..5155200
--- /dev/null
+++ b/patches/strace/4.11/010-use-host-ioctl.patch
@@ -0,0 +1,144 @@
+diff -urpN strace-4.11.orig/ioctl_iocdef.c strace-4.11/ioctl_iocdef.c
+--- strace-4.11.orig/ioctl_iocdef.c 1969-12-31 16:00:00.000000000 -0800
++++ strace-4.11/ioctl_iocdef.c 2017-01-14 15:31:16.925139193 -0800
+@@ -0,0 +1,43 @@
++/*
++ * Copyright (c) 2017 Alexey Neyman <stilor@att.net>
++ * 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.
++ */
++
++/*
++ * This file is *PREPROCESSED*, not *COMPILED* for host and the result
++ * is included into ioctlsort (which is compiled for build). Since some
++ * of these values are used in structure initializers, they cannot be
++ * defined as 'const unsigned int' - instead, they have to be macros.
++ * Hence, the result of preprocessing will be run through sed to change
++ * 'DEFINE' into '#define'
++ */
++#include <linux/ioctl.h>
++
++DEFINE HOST_IOC_NONE _IOC_NONE
++DEFINE HOST_IOC_READ _IOC_READ
++DEFINE HOST_IOC_WRITE _IOC_WRITE
++
++DEFINE HOST_IOC_SIZESHIFT _IOC_SIZESHIFT
++DEFINE HOST_IOC_DIRSHIFT _IOC_DIRSHIFT
+diff -urpN strace-4.11.orig/ioctlsort.c strace-4.11/ioctlsort.c
+--- strace-4.11.orig/ioctlsort.c 2015-03-28 15:37:30.000000000 -0700
++++ strace-4.11/ioctlsort.c 2017-01-14 15:32:13.373831957 -0800
+@@ -33,7 +33,8 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#include <linux/ioctl.h>
++
++#include "ioctl_iocdef.h"
+
+ struct ioctlent {
+ const char *info;
+diff -urpN strace-4.11.orig/Makefile.am strace-4.11/Makefile.am
+--- strace-4.11.orig/Makefile.am 2015-12-17 09:56:48.000000000 -0800
++++ strace-4.11/Makefile.am 2017-01-14 15:33:39.186837242 -0800
+@@ -239,6 +239,7 @@ EXTRA_DIST = \
+ debian/watch \
+ errnoent.sh \
+ generate_sen.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/ioctls_inc_align32.h \
+@@ -666,17 +667,26 @@ ioctlent_h = $(patsubst $(srcdir)/$(OS)/
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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 = $(ioctlent_h) native_printer_decls.h native_printer_defs.h printers.h sen.h sys_func.h .version
+-CLEANFILES = $(ioctlent_h) native_printer_decls.h native_printer_defs.h printers.h sen.h sys_func.h
++CLEANFILES = $(ioctlent_h) ioctl_iocdef.h 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
+diff -urpN strace-4.11.orig/Makefile.in strace-4.11/Makefile.in
+--- strace-4.11.orig/Makefile.in 2015-12-21 15:24:05.000000000 -0800
++++ strace-4.11/Makefile.in 2017-01-14 15:34:34.803440359 -0800
+@@ -848,6 +848,7 @@ EXTRA_DIST = \
+ debian/watch \
+ errnoent.sh \
+ generate_sen.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/ioctls_inc_align32.h \
+@@ -1243,7 +1244,7 @@ ioctlent_h = $(patsubst $(srcdir)/$(OS)/
+ BUILT_SOURCES = $(ioctlent_h) native_printer_decls.h \
+ native_printer_defs.h printers.h sen.h sys_func.h .version \
+ $(am__append_7) $(am__append_11)
+-CLEANFILES = $(ioctlent_h) native_printer_decls.h \
++CLEANFILES = $(ioctlent_h) ioctl_iocdef.h native_printer_decls.h \
+ native_printer_defs.h printers.h sen.h sys_func.h \
+ $(am__append_8) $(am__append_12)
+ DISTCLEANFILES = gnu/stubs-32.h gnu/stubs-x32.h
+@@ -4829,13 +4830,22 @@ news-check: NEWS
+ exit 1; \
+ fi
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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
diff --git a/patches/strace/4.12/010-use-host-ioctl.patch b/patches/strace/4.12/010-use-host-ioctl.patch
new file mode 100644
index 0000000..bd5a40e
--- /dev/null
+++ b/patches/strace/4.12/010-use-host-ioctl.patch
@@ -0,0 +1,145 @@
+diff -urpN strace-4.12.orig/ioctl_iocdef.c strace-4.12/ioctl_iocdef.c
+--- strace-4.12.orig/ioctl_iocdef.c 1969-12-31 16:00:00.000000000 -0800
++++ strace-4.12/ioctl_iocdef.c 2017-01-14 15:35:21.055924401 -0800
+@@ -0,0 +1,43 @@
++/*
++ * Copyright (c) 2017 Alexey Neyman <stilor@att.net>
++ * 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.
++ */
++
++/*
++ * This file is *PREPROCESSED*, not *COMPILED* for host and the result
++ * is included into ioctlsort (which is compiled for build). Since some
++ * of these values are used in structure initializers, they cannot be
++ * defined as 'const unsigned int' - instead, they have to be macros.
++ * Hence, the result of preprocessing will be run through sed to change
++ * 'DEFINE' into '#define'
++ */
++#include <linux/ioctl.h>
++
++DEFINE HOST_IOC_NONE _IOC_NONE
++DEFINE HOST_IOC_READ _IOC_READ
++DEFINE HOST_IOC_WRITE _IOC_WRITE
++
++DEFINE HOST_IOC_SIZESHIFT _IOC_SIZESHIFT
++DEFINE HOST_IOC_DIRSHIFT _IOC_DIRSHIFT
+diff -urpN strace-4.12.orig/ioctlsort.c strace-4.12/ioctlsort.c
+--- strace-4.12.orig/ioctlsort.c 2015-03-28 15:37:30.000000000 -0700
++++ strace-4.12/ioctlsort.c 2017-01-14 15:35:21.055924401 -0800
+@@ -33,7 +33,8 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#include <linux/ioctl.h>
++
++#include "ioctl_iocdef.h"
+
+ struct ioctlent {
+ const char *info;
+diff -urpN strace-4.12.orig/Makefile.am strace-4.12/Makefile.am
+--- strace-4.12.orig/Makefile.am 2016-05-28 03:29:30.000000000 -0700
++++ strace-4.12/Makefile.am 2017-01-14 15:36:46.916796883 -0800
+@@ -274,6 +274,7 @@ EXTRA_DIST = \
+ debian/watch \
+ errnoent.sh \
+ generate_sen.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/ioctls_inc_align32.h \
+@@ -712,10 +713,19 @@ ioctl_redefs%.h: ioctlent%.h ioctlent0.h
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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
+@@ -723,7 +733,7 @@ ioctls_all%.h: $(srcdir)/$(OS)/$(ARCH)/i
+
+ 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) \
++CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) ioctl_iocdef.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
+
+diff -urpN strace-4.12.orig/Makefile.in strace-4.12/Makefile.in
+--- strace-4.12.orig/Makefile.in 2016-05-31 04:35:57.000000000 -0700
++++ strace-4.12/Makefile.in 2017-01-14 15:37:33.353259891 -0800
+@@ -952,6 +952,7 @@ EXTRA_DIST = \
+ debian/watch \
+ errnoent.sh \
+ generate_sen.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/ioctls_inc_align32.h \
+@@ -1351,7 +1352,7 @@ ioctl_redefs_h = $(filter-out ioctl_rede
+ BUILT_SOURCES = $(ioctl_redefs_h) $(ioctlent_h) native_printer_decls.h \
+ native_printer_defs.h printers.h sen.h sys_func.h .version \
+ $(am__append_7) $(am__append_11)
+-CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) \
++CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) octl_iocdef.h $(mpers_preproc_files) \
+ native_printer_decls.h native_printer_defs.h printers.h sen.h \
+ sys_func.h $(am__append_8) $(am__append_12)
+ DISTCLEANFILES = gnu/stubs-32.h gnu/stubs-x32.h
+@@ -5506,13 +5507,22 @@ ioctl_redefs%.h: ioctlent%.h ioctlent0.h
+ rm -f $<-t
+ mv $@-t $@
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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
diff --git a/patches/strace/4.13/010-use-host-ioctl.patch b/patches/strace/4.13/010-use-host-ioctl.patch
new file mode 100644
index 0000000..40ebbf3
--- /dev/null
+++ b/patches/strace/4.13/010-use-host-ioctl.patch
@@ -0,0 +1,145 @@
+diff -urpN strace-4.13.orig/ioctl_iocdef.c strace-4.13/ioctl_iocdef.c
+--- strace-4.13.orig/ioctl_iocdef.c 1969-12-31 16:00:00.000000000 -0800
++++ strace-4.13/ioctl_iocdef.c 2017-01-14 15:50:14.368196376 -0800
+@@ -0,0 +1,43 @@
++/*
++ * Copyright (c) 2017 Alexey Neyman <stilor@att.net>
++ * 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.
++ */
++
++/*
++ * This file is *PREPROCESSED*, not *COMPILED* for host and the result
++ * is included into ioctlsort (which is compiled for build). Since some
++ * of these values are used in structure initializers, they cannot be
++ * defined as 'const unsigned int' - instead, they have to be macros.
++ * Hence, the result of preprocessing will be run through sed to change
++ * 'DEFINE' into '#define'
++ */
++#include <linux/ioctl.h>
++
++DEFINE HOST_IOC_NONE _IOC_NONE
++DEFINE HOST_IOC_READ _IOC_READ
++DEFINE HOST_IOC_WRITE _IOC_WRITE
++
++DEFINE HOST_IOC_SIZESHIFT _IOC_SIZESHIFT
++DEFINE HOST_IOC_DIRSHIFT _IOC_DIRSHIFT
+diff -urpN strace-4.13.orig/ioctlsort.c strace-4.13/ioctlsort.c
+--- strace-4.13.orig/ioctlsort.c 2015-03-28 15:37:30.000000000 -0700
++++ strace-4.13/ioctlsort.c 2017-01-14 15:50:14.368196376 -0800
+@@ -33,7 +33,8 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#include <linux/ioctl.h>
++
++#include "ioctl_iocdef.h"
+
+ struct ioctlent {
+ const char *info;
+diff -urpN strace-4.13.orig/Makefile.am strace-4.13/Makefile.am
+--- strace-4.13.orig/Makefile.am 2016-07-22 12:28:06.000000000 -0700
++++ strace-4.13/Makefile.am 2017-01-14 15:50:14.368196376 -0800
+@@ -283,6 +283,7 @@ EXTRA_DIST = \
+ debian/watch \
+ errnoent.sh \
+ generate_sen.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/ioctls_inc_align32.h \
+@@ -721,10 +722,19 @@ ioctl_redefs%.h: ioctlent%.h ioctlent0.h
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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
+@@ -732,7 +742,7 @@ ioctls_all%.h: $(srcdir)/$(OS)/$(ARCH)/i
+
+ 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) \
++CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) ioctl_iocdef.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
+
+diff -urpN strace-4.13.orig/Makefile.in strace-4.13/Makefile.in
+--- strace-4.13.orig/Makefile.in 2016-07-26 09:17:18.000000000 -0700
++++ strace-4.13/Makefile.in 2017-01-14 15:50:14.368196376 -0800
+@@ -978,6 +978,7 @@ EXTRA_DIST = \
+ debian/watch \
+ errnoent.sh \
+ generate_sen.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/ioctls_inc_align32.h \
+@@ -1377,7 +1378,7 @@ ioctl_redefs_h = $(filter-out ioctl_rede
+ BUILT_SOURCES = $(ioctl_redefs_h) $(ioctlent_h) native_printer_decls.h \
+ native_printer_defs.h printers.h sen.h sys_func.h .version \
+ $(am__append_7) $(am__append_11)
+-CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) \
++CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) octl_iocdef.h $(mpers_preproc_files) \
+ native_printer_decls.h native_printer_defs.h printers.h sen.h \
+ sys_func.h $(am__append_8) $(am__append_12)
+ DISTCLEANFILES = gnu/stubs-32.h gnu/stubs-x32.h
+@@ -5730,13 +5731,22 @@ ioctl_redefs%.h: ioctlent%.h ioctlent0.h
+ rm -f $<-t
+ mv $@-t $@
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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
diff --git a/patches/strace/4.14/010-use-host-ioctl.patch b/patches/strace/4.14/010-use-host-ioctl.patch
new file mode 100644
index 0000000..2c7671f
--- /dev/null
+++ b/patches/strace/4.14/010-use-host-ioctl.patch
@@ -0,0 +1,145 @@
+diff -urpN strace-4.14.orig/ioctl_iocdef.c strace-4.14/ioctl_iocdef.c
+--- strace-4.14.orig/ioctl_iocdef.c 1969-12-31 16:00:00.000000000 -0800
++++ strace-4.14/ioctl_iocdef.c 2017-01-14 15:50:38.748425119 -0800
+@@ -0,0 +1,43 @@
++/*
++ * Copyright (c) 2017 Alexey Neyman <stilor@att.net>
++ * 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.
++ */
++
++/*
++ * This file is *PREPROCESSED*, not *COMPILED* for host and the result
++ * is included into ioctlsort (which is compiled for build). Since some
++ * of these values are used in structure initializers, they cannot be
++ * defined as 'const unsigned int' - instead, they have to be macros.
++ * Hence, the result of preprocessing will be run through sed to change
++ * 'DEFINE' into '#define'
++ */
++#include <linux/ioctl.h>
++
++DEFINE HOST_IOC_NONE _IOC_NONE
++DEFINE HOST_IOC_READ _IOC_READ
++DEFINE HOST_IOC_WRITE _IOC_WRITE
++
++DEFINE HOST_IOC_SIZESHIFT _IOC_SIZESHIFT
++DEFINE HOST_IOC_DIRSHIFT _IOC_DIRSHIFT
+diff -urpN strace-4.14.orig/ioctlsort.c strace-4.14/ioctlsort.c
+--- strace-4.14.orig/ioctlsort.c 2015-03-28 15:37:30.000000000 -0700
++++ strace-4.14/ioctlsort.c 2017-01-14 15:50:38.748425119 -0800
+@@ -33,7 +33,8 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#include <linux/ioctl.h>
++
++#include "ioctl_iocdef.h"
+
+ struct ioctlent {
+ const char *info;
+diff -urpN strace-4.14.orig/Makefile.am strace-4.14/Makefile.am
+--- strace-4.14.orig/Makefile.am 2016-09-05 12:52:57.000000000 -0700
++++ strace-4.14/Makefile.am 2017-01-14 15:50:38.748425119 -0800
+@@ -289,6 +289,7 @@ EXTRA_DIST = \
+ debian/watch \
+ errnoent.sh \
+ generate_sen.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/ioctls_inc_align32.h \
+@@ -739,10 +740,19 @@ ioctl_redefs%.h: ioctlent%.h ioctlent0.h
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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
+@@ -750,7 +760,7 @@ ioctls_all%.h: $(srcdir)/$(OS)/$(ARCH)/i
+
+ 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) \
++CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) ioctl_iocdef.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
+
+diff -urpN strace-4.14.orig/Makefile.in strace-4.14/Makefile.in
+--- strace-4.14.orig/Makefile.in 2016-10-04 12:13:20.000000000 -0700
++++ strace-4.14/Makefile.in 2017-01-14 15:50:38.752425155 -0800
+@@ -995,6 +995,7 @@ EXTRA_DIST = \
+ debian/watch \
+ errnoent.sh \
+ generate_sen.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/ioctls_inc_align32.h \
+@@ -1406,7 +1407,7 @@ ioctl_redefs_h = $(filter-out ioctl_rede
+ BUILT_SOURCES = $(ioctl_redefs_h) $(ioctlent_h) native_printer_decls.h \
+ native_printer_defs.h printers.h sen.h sys_func.h .version \
+ $(am__append_7) $(am__append_11)
+-CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) \
++CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) octl_iocdef.h $(mpers_preproc_files) \
+ native_printer_decls.h native_printer_defs.h printers.h sen.h \
+ sys_func.h $(am__append_8) $(am__append_12)
+ DISTCLEANFILES = gnu/stubs-32.h gnu/stubs-x32.h
+@@ -5896,13 +5897,22 @@ ioctl_redefs%.h: ioctlent%.h ioctlent0.h
+ rm -f $<-t
+ mv $@-t $@
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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
diff --git a/patches/strace/4.15/010-use-host-ioctl.patch b/patches/strace/4.15/010-use-host-ioctl.patch
new file mode 100644
index 0000000..71d380a
--- /dev/null
+++ b/patches/strace/4.15/010-use-host-ioctl.patch
@@ -0,0 +1,145 @@
+diff -urpN strace-4.15.orig/ioctl_iocdef.c strace-4.15/ioctl_iocdef.c
+--- strace-4.15.orig/ioctl_iocdef.c 1969-12-31 16:00:00.000000000 -0800
++++ strace-4.15/ioctl_iocdef.c 2017-01-14 15:50:56.388590804 -0800
+@@ -0,0 +1,43 @@
++/*
++ * Copyright (c) 2017 Alexey Neyman <stilor@att.net>
++ * 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.
++ */
++
++/*
++ * This file is *PREPROCESSED*, not *COMPILED* for host and the result
++ * is included into ioctlsort (which is compiled for build). Since some
++ * of these values are used in structure initializers, they cannot be
++ * defined as 'const unsigned int' - instead, they have to be macros.
++ * Hence, the result of preprocessing will be run through sed to change
++ * 'DEFINE' into '#define'
++ */
++#include <linux/ioctl.h>
++
++DEFINE HOST_IOC_NONE _IOC_NONE
++DEFINE HOST_IOC_READ _IOC_READ
++DEFINE HOST_IOC_WRITE _IOC_WRITE
++
++DEFINE HOST_IOC_SIZESHIFT _IOC_SIZESHIFT
++DEFINE HOST_IOC_DIRSHIFT _IOC_DIRSHIFT
+diff -urpN strace-4.15.orig/ioctlsort.c strace-4.15/ioctlsort.c
+--- strace-4.15.orig/ioctlsort.c 2015-03-28 15:37:30.000000000 -0700
++++ strace-4.15/ioctlsort.c 2017-01-14 15:50:56.388590804 -0800
+@@ -33,7 +33,8 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#include <linux/ioctl.h>
++
++#include "ioctl_iocdef.h"
+
+ struct ioctlent {
+ const char *info;
+diff -urpN strace-4.15.orig/Makefile.am strace-4.15/Makefile.am
+--- strace-4.15.orig/Makefile.am 2016-12-07 07:53:13.000000000 -0800
++++ strace-4.15/Makefile.am 2017-01-14 15:50:56.392590842 -0800
+@@ -298,6 +298,7 @@ EXTRA_DIST = \
+ debian/watch \
+ errnoent.sh \
+ generate_sen.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/ioctls_inc_align16.h \
+@@ -815,10 +816,19 @@ ioctl_redefs%.h: ioctlent%.h ioctlent0.h
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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
+@@ -826,7 +836,7 @@ ioctls_all%.h: $(srcdir)/$(OS)/$(ARCH)/i
+
+ 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) \
++CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) ioctl_iocdef.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
+
+diff -urpN strace-4.15.orig/Makefile.in strace-4.15/Makefile.in
+--- strace-4.15.orig/Makefile.in 2016-12-14 01:17:46.000000000 -0800
++++ strace-4.15/Makefile.in 2017-01-14 15:50:56.392590842 -0800
+@@ -1036,6 +1036,7 @@ EXTRA_DIST = \
+ debian/watch \
+ errnoent.sh \
+ generate_sen.sh \
++ ioctl_iocdef.c \
+ ioctlsort.c \
+ linux/32/ioctls_inc.h \
+ linux/32/ioctls_inc_align16.h \
+@@ -1514,7 +1515,7 @@ ioctl_redefs_h = $(filter-out ioctl_rede
+ BUILT_SOURCES = $(ioctl_redefs_h) $(ioctlent_h) native_printer_decls.h \
+ native_printer_defs.h printers.h sen.h sys_func.h .version \
+ $(am__append_7) $(am__append_11)
+-CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) \
++CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) octl_iocdef.h $(mpers_preproc_files) \
+ native_printer_decls.h native_printer_defs.h printers.h sen.h \
+ sys_func.h $(am__append_8) $(am__append_12)
+ DISTCLEANFILES = gnu/stubs-32.h gnu/stubs-x32.h
+@@ -6177,13 +6178,22 @@ ioctl_redefs%.h: ioctlent%.h ioctlent0.h
+ rm -f $<-t
+ mv $@-t $@
+
++# Need to pick up <linux/ioctl.h> definitions *for host* while compiling
++# ioctlsort *for build*, hence this magic.
++ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c
++ $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@
++
++ioctl_iocdef.h: ioctl_iocdef.i
++ sed -n 's/^DEFINE HOST/#define /p' $< > $@
++
+ ioctlent%.h: ioctlsort%
+ ./$< > $@
+
+ ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o
+ $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@
+
+-ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c
++ioctlsort%.o: ioctls_all%.h ioctl_iocdef.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