]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
Merge remote-tracking branch 'meitelwein/web-gui-ipv6' into next
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 23 Jan 2016 00:39:24 +0000 (00:39 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 23 Jan 2016 00:39:24 +0000 (00:39 +0000)
157 files changed:
config/etc/modprobe.d/nf_conntrack.conf [new file with mode: 0644]
config/kernel/kernel.config.armv5tel-ipfire-kirkwood
config/kernel/kernel.config.armv5tel-ipfire-multi
config/kernel/kernel.config.armv5tel-ipfire-rpi
config/kernel/kernel.config.i586-ipfire
config/kernel/kernel.config.i586-ipfire-pae
config/kernel/kernel.config.x86_64-ipfire
config/rootfiles/common/armv5tel/binutils
config/rootfiles/common/armv5tel/gcc
config/rootfiles/common/armv5tel/initscripts
config/rootfiles/common/diffutils
config/rootfiles/common/i586/binutils
config/rootfiles/common/i586/gcc
config/rootfiles/common/i586/initscripts
config/rootfiles/common/libmpc [new file with mode: 0644]
config/rootfiles/common/lua [new file with mode: 0644]
config/rootfiles/common/ncurses
config/rootfiles/common/ntp
config/rootfiles/common/stage2
config/rootfiles/common/x86_64/binutils
config/rootfiles/common/x86_64/gcc
config/rootfiles/common/x86_64/initscripts
config/rootfiles/core/97/exclude [moved from config/rootfiles/core/96/exclude with 100% similarity]
config/rootfiles/core/97/filelists/bind [new symlink]
config/rootfiles/core/97/filelists/dnsmasq [moved from config/rootfiles/core/96/filelists/dnsmasq with 100% similarity]
config/rootfiles/core/97/filelists/files [new file with mode: 0644]
config/rootfiles/core/97/filelists/ntp [moved from config/rootfiles/core/96/filelists/ntp with 100% similarity]
config/rootfiles/core/97/filelists/openssh [new symlink]
config/rootfiles/core/97/filelists/openvpn [new symlink]
config/rootfiles/core/97/meta [moved from config/rootfiles/core/96/meta with 100% similarity]
config/rootfiles/core/97/update.sh [new file with mode: 0644]
config/rootfiles/oldcore/96/exclude [new file with mode: 0644]
config/rootfiles/oldcore/96/filelists/curl [moved from config/rootfiles/core/96/filelists/curl with 100% similarity]
config/rootfiles/oldcore/96/filelists/dma [moved from config/rootfiles/core/96/filelists/dma with 100% similarity]
config/rootfiles/oldcore/96/filelists/dnsmasq [new symlink]
config/rootfiles/oldcore/96/filelists/files [moved from config/rootfiles/core/96/filelists/files with 100% similarity]
config/rootfiles/oldcore/96/filelists/i586/grub [moved from config/rootfiles/core/96/filelists/i586/grub with 100% similarity]
config/rootfiles/oldcore/96/filelists/i586/openssl-sse2 [moved from config/rootfiles/core/96/filelists/i586/openssl-sse2 with 100% similarity]
config/rootfiles/oldcore/96/filelists/i586/strongswan-padlock [moved from config/rootfiles/core/96/filelists/i586/strongswan-padlock with 100% similarity]
config/rootfiles/oldcore/96/filelists/libnet [moved from config/rootfiles/core/96/filelists/libnet with 100% similarity]
config/rootfiles/oldcore/96/filelists/mdadm [moved from config/rootfiles/core/96/filelists/mdadm with 100% similarity]
config/rootfiles/oldcore/96/filelists/ntp [new symlink]
config/rootfiles/oldcore/96/filelists/openssl [moved from config/rootfiles/core/96/filelists/openssl with 100% similarity]
config/rootfiles/oldcore/96/filelists/rrdtool [moved from config/rootfiles/core/96/filelists/rrdtool with 100% similarity]
config/rootfiles/oldcore/96/filelists/strongswan [moved from config/rootfiles/core/96/filelists/strongswan with 100% similarity]
config/rootfiles/oldcore/96/filelists/x86_64/grub [moved from config/rootfiles/core/96/filelists/x86_64/grub with 100% similarity]
config/rootfiles/oldcore/96/meta [new file with mode: 0644]
config/rootfiles/oldcore/96/update.sh [moved from config/rootfiles/core/96/update.sh with 100% similarity]
config/rootfiles/packages/dnsdist [new file with mode: 0644]
config/rootfiles/packages/mediatomb.off [moved from config/rootfiles/packages/mediatomb with 100% similarity]
config/rootfiles/packages/nano
config/rootfiles/packages/owncloud
doc/language_issues.de
doc/language_issues.en
doc/language_issues.es
doc/language_issues.fr
doc/language_issues.it
doc/language_issues.nl
doc/language_issues.pl
doc/language_issues.ru
doc/language_issues.tr
doc/language_missings
html/cgi-bin/optionsfw.cgi
html/cgi-bin/ovpnmain.cgi
html/cgi-bin/qos.cgi
html/cgi-bin/webaccess.cgi
langs/de/cgi-bin/de.pl
langs/en/cgi-bin/en.pl
lfs/Config
lfs/bind
lfs/binutils
lfs/ccache
lfs/cleanup-toolchain
lfs/cmake
lfs/configroot
lfs/dnsdist [new file with mode: 0644]
lfs/dnsmasq
lfs/gcc
lfs/glibc
lfs/grub
lfs/libmpc [new file with mode: 0644]
lfs/linux
lfs/lua [new file with mode: 0644]
lfs/nano
lfs/ntp
lfs/openssh
lfs/openvpn
lfs/owncloud
lfs/vdr_eepg
make.sh
src/initscripts/init.d/dnsdist [new file with mode: 0644]
src/initscripts/init.d/firewall
src/misc-progs/qosctrl.c
src/misc-progs/timectrl.c
src/patches/arm-multi-grsec-compile-fixes.patch [new file with mode: 0644]
src/patches/binutils-2.22-pt-pax-flags-20111121.patch [deleted file]
src/patches/binutils-2.24-pt-pax-flags-20131231.patch [new file with mode: 0644]
src/patches/dnsmasq/025-Major_tidy_up_of_EDNS0_handling_and_computation_use_of_udp.patch [new file with mode: 0644]
src/patches/dnsmasq/026-More_tweaks_in_handling_unknown_DNSSEC_algorithms.patch [new file with mode: 0644]
src/patches/dnsmasq/027-Nasty_rare_and_obscure_off-by-one_in_DNSSEC_hostname_cmp.patch [new file with mode: 0644]
src/patches/dnsmasq/028-Minor_tweak_to_previous_commit.patch [new file with mode: 0644]
src/patches/dnsmasq/029-NSEC3_check_RFC5155_para_8_2.patch [new file with mode: 0644]
src/patches/gcc/gcc-fix-inlining-issues.patch [new file with mode: 0644]
src/patches/gcc/gcc44-build-id.patch [deleted file]
src/patches/gcc/gcc44-c++-builtin-redecl.patch [deleted file]
src/patches/gcc/gcc44-i386-libgomp.patch [deleted file]
src/patches/gcc/gcc44-no-add-needed.patch [deleted file]
src/patches/gcc/gcc44-pr33763.patch [deleted file]
src/patches/gcc/gcc44-rh330771.patch [deleted file]
src/patches/gcc/gcc44-rh533181.patch [deleted file]
src/patches/gcc/gcc44-rh610785.patch [deleted file]
src/patches/gcc/gcc44-unwind-debug-hook.patch [deleted file]
src/patches/gcc/gcc49-i386-libgomp.patch [new file with mode: 0644]
src/patches/gcc/gcc49-libtool-no-rpath.patch [moved from src/patches/gcc/gcc44-libtool-no-rpath.patch with 100% similarity]
src/patches/gcc/gcc49-no-add-needed.patch [new file with mode: 0644]
src/patches/gcc/gcc49-pr38757.patch [new file with mode: 0644]
src/patches/gcc/gcc49-pr64336.patch [new file with mode: 0644]
src/patches/glibc/glibc-mq_open.patch [new file with mode: 0644]
src/patches/linux/0001-Drivers-net-hyperv-Get-rid-of-the-rndis_filter_packe.patch [new file with mode: 0644]
src/patches/linux/0001-hyperv-Add-support-for-virtual-Receive-Side-Scaling-.patch [new file with mode: 0644]
src/patches/linux/0002-Drivers-net-hyperv-Cleanup-the-receive-path.patch [new file with mode: 0644]
src/patches/linux/0002-hyperv-Remove-recv_pkt_list-and-lock.patch [new file with mode: 0644]
src/patches/linux/0003-Drivers-net-hyperv-Cleanup-the-netvsc-receive-callba.patch [new file with mode: 0644]
src/patches/linux/0003-hyperv-Simplify-the-send_completion-variables.patch [new file with mode: 0644]
src/patches/linux/0004-hyperv-Add-latest-NetVSP-versions-to-auto-negotiatio.patch [new file with mode: 0644]
src/patches/linux/0004-hyperv-Enable-sendbuf-mechanism-on-the-send-path.patch [new file with mode: 0644]
src/patches/linux/0005-Add-support-for-netvsc-build-without-CONFIG_SYSFS-fl.patch [new file with mode: 0644]
src/patches/linux/0005-Drivers-net-hyperv-Enable-scatter-gather-I-O.patch [new file with mode: 0644]
src/patches/linux/0006-Drivers-net-hyperv-Cleanup-the-send-path.patch [new file with mode: 0644]
src/patches/linux/0006-net-get-rid-of-SET_ETHTOOL_OPS.patch [new file with mode: 0644]
src/patches/linux/0007-Drivers-net-hyperv-Enable-offloads-on-the-host.patch [new file with mode: 0644]
src/patches/linux/0007-hyperv-Add-hash-value-into-RNDIS-Per-packet-info.patch [new file with mode: 0644]
src/patches/linux/0008-Drivers-net-hyperv-Enable-receive-side-IP-checksum-o.patch [new file with mode: 0644]
src/patches/linux/0008-hyperv-fix-apparent-cut-n-paste-error-in-send-path-t.patch [new file with mode: 0644]
src/patches/linux/0009-Drivers-net-hyperv-Enable-send-side-checksum-offload.patch [new file with mode: 0644]
src/patches/linux/0009-hyperv-Fix-error-return-code-in-netvsc_init_buf.patch [new file with mode: 0644]
src/patches/linux/0010-Drivers-net-hyperv-Enable-large-send-offload.patch [new file with mode: 0644]
src/patches/linux/0010-hyperv-Fix-a-bug-in-netvsc_start_xmit.patch [new file with mode: 0644]
src/patches/linux/0011-hyperv-Change-the-receive-buffer-size-for-legacy-hos.patch [moved from src/patches/linux-3.14.x-hyperv-2008-fix.patch with 81% similarity]
src/patches/linux/0011-hyperv-Fix-a-bug-in-netvsc_send.patch [new file with mode: 0644]
src/patches/linux/0012-Drivers-net-hyperv-Allocate-memory-for-all-possible-.patch [new file with mode: 0644]
src/patches/linux/0013-Drivers-net-hyperv-Negotiate-suitable-ndis-version-f.patch [new file with mode: 0644]
src/patches/linux/0014-Drivers-net-hyperv-Address-UDP-checksum-issues.patch [new file with mode: 0644]
src/patches/linux/0015-hyperv-Properly-handle-checksum-offload.patch [new file with mode: 0644]
src/patches/linux/0016-hyperv-Add-support-for-virtual-Receive-Side-Scaling-.patch [new file with mode: 0644]
src/patches/linux/0017-hyperv-Remove-recv_pkt_list-and-lock.patch [new file with mode: 0644]
src/patches/linux/0018-hyperv-Simplify-the-send_completion-variables.patch [new file with mode: 0644]
src/patches/linux/0019-hyperv-Enable-sendbuf-mechanism-on-the-send-path.patch [new file with mode: 0644]
src/patches/linux/0020-Add-support-for-netvsc-build-without-CONFIG_SYSFS-fl.patch [new file with mode: 0644]
src/patches/linux/0021-hyperv-Add-hash-value-into-RNDIS-Per-packet-info.patch [new file with mode: 0644]
src/patches/linux/0022-hyperv-fix-apparent-cut-n-paste-error-in-send-path-t.patch [new file with mode: 0644]
src/patches/linux/0023-hyperv-Fix-error-return-code-in-netvsc_init_buf.patch [new file with mode: 0644]
src/patches/linux/0024-hyperv-Fix-a-bug-in-netvsc_send.patch [new file with mode: 0644]
src/patches/linux/0025-Drivers-hv-vmbus-Support-per-channel-driver-state.patch [new file with mode: 0644]
src/patches/lua-5.3.0-autotoolize.patch [new file with mode: 0644]
src/patches/ntp-fix-sycing-with-local-clock.patch [deleted file]
tools/make-functions

diff --git a/config/etc/modprobe.d/nf_conntrack.conf b/config/etc/modprobe.d/nf_conntrack.conf
new file mode 100644 (file)
index 0000000..d5a1813
--- /dev/null
@@ -0,0 +1,2 @@
+# Disable automatic conntrack helper assignment
+options nf_conntrack nf_conntrack_helper=0
index 325add296e0f07daece734a745708323f2af4c51..a35ec0bec0d0e4287b6dfd13162fd0a8bcc57582 100644 (file)
@@ -194,10 +194,10 @@ CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_SECCOMP_FILTER=y
 CONFIG_HAVE_CC_STACKPROTECTOR=y
-CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR is not set
 # CONFIG_CC_STACKPROTECTOR_NONE is not set
 CONFIG_CC_STACKPROTECTOR_REGULAR=y
-# CONFIG_CC_STACKPROTECTOR_STRONG is not set
+CONFIG_CC_STACKPROTECTOR_STRONG=y
 CONFIG_HAVE_CONTEXT_TRACKING=y
 CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
@@ -5238,8 +5238,7 @@ CONFIG_GRKERNSEC_PROC_MEMMAP=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
-CONFIG_GRKERNSEC_RANDSTRUCT=y
-CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
+# CONFIG_GRKERNSEC_RANDSTRUCT is not set
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
 
 #
index 9729903a7d3a42e2d532f211f49a554861536119..50106bc001b6223cd224b83bfca702c1c977fe9f 100644 (file)
@@ -217,10 +217,10 @@ CONFIG_HAVE_ARCH_JUMP_LABEL=y
 CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_HAVE_CC_STACKPROTECTOR=y
-CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR is not set
 # CONFIG_CC_STACKPROTECTOR_NONE is not set
 CONFIG_CC_STACKPROTECTOR_REGULAR=y
-# CONFIG_CC_STACKPROTECTOR_STRONG is not set
+CONFIG_CC_STACKPROTECTOR_STRONG=y
 CONFIG_HAVE_CONTEXT_TRACKING=y
 CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
@@ -5726,8 +5726,7 @@ CONFIG_GRKERNSEC_PROC_MEMMAP=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
-CONFIG_GRKERNSEC_RANDSTRUCT=y
-CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
+# CONFIG_GRKERNSEC_RANDSTRUCT is not set
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
 CONFIG_GRKERNSEC_OLD_ARM_USERLAND=y
 
index 6e584cbfd546e3bc445bdf766ae1741c646a1b94..5bde32234e4346350a2fc96e30ef85a07bb18a44 100644 (file)
@@ -194,10 +194,10 @@ CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_SECCOMP_FILTER=y
 CONFIG_HAVE_CC_STACKPROTECTOR=y
-CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR is not set
 # CONFIG_CC_STACKPROTECTOR_NONE is not set
 CONFIG_CC_STACKPROTECTOR_REGULAR=y
-# CONFIG_CC_STACKPROTECTOR_STRONG is not set
+CONFIG_CC_STACKPROTECTOR_STRONG=y
 CONFIG_HAVE_CONTEXT_TRACKING=y
 CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
@@ -3820,8 +3820,7 @@ CONFIG_GRKERNSEC_PROC_MEMMAP=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
-CONFIG_GRKERNSEC_RANDSTRUCT=y
-CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
+# CONFIG_GRKERNSEC_RANDSTRUCT is not set
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
 CONFIG_GRKERNSEC_OLD_ARM_USERLAND=y
 
index 734bea68436aa714b147667aa147c9cb8433da6b..6a7309ab06a5173c720415feb9f004f2070392f2 100644 (file)
@@ -245,10 +245,10 @@ CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_SECCOMP_FILTER=y
 CONFIG_HAVE_CC_STACKPROTECTOR=y
-CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR is not set
 # CONFIG_CC_STACKPROTECTOR_NONE is not set
 CONFIG_CC_STACKPROTECTOR_REGULAR=y
-# CONFIG_CC_STACKPROTECTOR_STRONG is not set
+CONFIG_CC_STACKPROTECTOR_STRONG=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
 CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
 CONFIG_HAVE_ARCH_SOFT_DIRTY=y
@@ -5731,8 +5731,7 @@ CONFIG_GRKERNSEC_PROC_MEMMAP=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
-CONFIG_GRKERNSEC_RANDSTRUCT=y
-CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
+# CONFIG_GRKERNSEC_RANDSTRUCT is not set
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
 
 #
index d6b5a7f5ce2d8e5268a8d8e6615f1b4b16e57889..d45c303e57c3da66463daf949e17266324adc04e 100644 (file)
@@ -244,10 +244,10 @@ CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_SECCOMP_FILTER=y
 CONFIG_HAVE_CC_STACKPROTECTOR=y
-CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR is not set
 # CONFIG_CC_STACKPROTECTOR_NONE is not set
 CONFIG_CC_STACKPROTECTOR_REGULAR=y
-# CONFIG_CC_STACKPROTECTOR_STRONG is not set
+CONFIG_CC_STACKPROTECTOR_STRONG=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
 CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
 CONFIG_HAVE_ARCH_SOFT_DIRTY=y
@@ -5772,8 +5772,7 @@ CONFIG_GRKERNSEC_PROC_MEMMAP=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
-CONFIG_GRKERNSEC_RANDSTRUCT=y
-CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
+# CONFIG_GRKERNSEC_RANDSTRUCT is not set
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
 
 #
index 09503d7f2e77ed430fc68558c6d4d0f769c90bb3..4dd6ba69a8d82b057a7d5f463a1d53aea9c89f58 100644 (file)
@@ -251,10 +251,10 @@ CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_SECCOMP_FILTER=y
 CONFIG_HAVE_CC_STACKPROTECTOR=y
-CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR is not set
 # CONFIG_CC_STACKPROTECTOR_NONE is not set
 CONFIG_CC_STACKPROTECTOR_REGULAR=y
-# CONFIG_CC_STACKPROTECTOR_STRONG is not set
+CONFIG_CC_STACKPROTECTOR_STRONG=y
 CONFIG_HAVE_CONTEXT_TRACKING=y
 CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
@@ -5590,8 +5590,7 @@ CONFIG_GRKERNSEC_KSTACKOVERFLOW=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
-CONFIG_GRKERNSEC_RANDSTRUCT=y
-CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
+# CONFIG_GRKERNSEC_RANDSTRUCT is not set
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
 
 #
index b3d281d85d88a428d3abffae35e8d76c7638a61d..ba6423716356c6bea659bc270e11877650c95b52 100644 (file)
 #usr/lib/ldscripts/armelfb_linux_eabi.xsw
 #usr/lib/ldscripts/armelfb_linux_eabi.xu
 #usr/lib/ldscripts/armelfb_linux_eabi.xw
-usr/lib/libbfd-2.22.so
+usr/lib/libbfd-2.24.so
 #usr/lib/libbfd.a
 #usr/lib/libbfd.la
 #usr/lib/libbfd.so
 #usr/lib/libiberty.a
-usr/lib/libopcodes-2.22.so
+usr/lib/libopcodes-2.24.so
 #usr/lib/libopcodes.a
 #usr/lib/libopcodes.la
 #usr/lib/libopcodes.so
index ee9d800353e32efe1f72ba660c5760312dbb632d..121ac1759097158ad26c3d3558d764bd863e1ed7 100644 (file)
 #usr/bin/armv5tel-unknown-linux-gnueabi-c++
 #usr/bin/armv5tel-unknown-linux-gnueabi-g++
 #usr/bin/armv5tel-unknown-linux-gnueabi-gcc
-#usr/bin/armv5tel-unknown-linux-gnueabi-gcc-4.4.7
+#usr/bin/armv5tel-unknown-linux-gnueabi-gcc-4.9.3
+#usr/bin/armv5tel-unknown-linux-gnueabi-gcc-ar
+#usr/bin/armv5tel-unknown-linux-gnueabi-gcc-nm
+#usr/bin/armv5tel-unknown-linux-gnueabi-gcc-ranlib
 #usr/bin/c++
 #usr/bin/cc
 #usr/bin/cpp
 #usr/bin/g++
 #usr/bin/gcc
-#usr/bin/gccbug
+#usr/bin/gcc-ar
+#usr/bin/gcc-nm
+#usr/bin/gcc-ranlib
 #usr/bin/gcov
 #usr/include/c++
-#usr/include/c++/4.4.7
-#usr/include/c++/4.4.7/algorithm
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/atomic_word.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/basic_file.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/c++allocator.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/c++config.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/c++io.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/c++locale.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/cpu_defines.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/ctype_base.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/ctype_inline.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/ctype_noninline.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/cxxabi_tweaks.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/error_constants.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/extc++.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/gthr-default.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/gthr-posix.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/gthr-single.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/gthr-tpf.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/gthr.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/messages_members.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/os_defines.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/stdc++.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/stdtr1c++.h
-#usr/include/c++/4.4.7/armv5tel-unknown-linux-gnueabi/bits/time_members.h
-#usr/include/c++/4.4.7/array
-#usr/include/c++/4.4.7/backward
-#usr/include/c++/4.4.7/backward/auto_ptr.h
-#usr/include/c++/4.4.7/backward/backward_warning.h
-#usr/include/c++/4.4.7/backward/binders.h
-#usr/include/c++/4.4.7/backward/hash_fun.h
-#usr/include/c++/4.4.7/backward/hash_map
-#usr/include/c++/4.4.7/backward/hash_set
-#usr/include/c++/4.4.7/backward/hashtable.h
-#usr/include/c++/4.4.7/backward/strstream
-#usr/include/c++/4.4.7/bits
-#usr/include/c++/4.4.7/bits/algorithmfwd.h
-#usr/include/c++/4.4.7/bits/allocator.h
-#usr/include/c++/4.4.7/bits/atomic_0.h
-#usr/include/c++/4.4.7/bits/atomic_2.h
-#usr/include/c++/4.4.7/bits/atomicfwd_c.h
-#usr/include/c++/4.4.7/bits/atomicfwd_cxx.h
-#usr/include/c++/4.4.7/bits/basic_ios.h
-#usr/include/c++/4.4.7/bits/basic_ios.tcc
-#usr/include/c++/4.4.7/bits/basic_string.h
-#usr/include/c++/4.4.7/bits/basic_string.tcc
-#usr/include/c++/4.4.7/bits/boost_concept_check.h
-#usr/include/c++/4.4.7/bits/char_traits.h
-#usr/include/c++/4.4.7/bits/cmath.tcc
-#usr/include/c++/4.4.7/bits/codecvt.h
-#usr/include/c++/4.4.7/bits/concept_check.h
-#usr/include/c++/4.4.7/bits/cpp_type_traits.h
-#usr/include/c++/4.4.7/bits/deque.tcc
-#usr/include/c++/4.4.7/bits/forward_list.h
-#usr/include/c++/4.4.7/bits/forward_list.tcc
-#usr/include/c++/4.4.7/bits/fstream.tcc
-#usr/include/c++/4.4.7/bits/functexcept.h
-#usr/include/c++/4.4.7/bits/functional_hash.h
-#usr/include/c++/4.4.7/bits/gslice.h
-#usr/include/c++/4.4.7/bits/gslice_array.h
-#usr/include/c++/4.4.7/bits/hashtable.h
-#usr/include/c++/4.4.7/bits/indirect_array.h
-#usr/include/c++/4.4.7/bits/ios_base.h
-#usr/include/c++/4.4.7/bits/istream.tcc
-#usr/include/c++/4.4.7/bits/list.tcc
-#usr/include/c++/4.4.7/bits/locale_classes.h
-#usr/include/c++/4.4.7/bits/locale_classes.tcc
-#usr/include/c++/4.4.7/bits/locale_facets.h
-#usr/include/c++/4.4.7/bits/locale_facets.tcc
-#usr/include/c++/4.4.7/bits/locale_facets_nonio.h
-#usr/include/c++/4.4.7/bits/locale_facets_nonio.tcc
-#usr/include/c++/4.4.7/bits/localefwd.h
-#usr/include/c++/4.4.7/bits/mask_array.h
-#usr/include/c++/4.4.7/bits/move.h
-#usr/include/c++/4.4.7/bits/ostream.tcc
-#usr/include/c++/4.4.7/bits/ostream_insert.h
-#usr/include/c++/4.4.7/bits/postypes.h
-#usr/include/c++/4.4.7/bits/shared_ptr.h
-#usr/include/c++/4.4.7/bits/slice_array.h
-#usr/include/c++/4.4.7/bits/sstream.tcc
-#usr/include/c++/4.4.7/bits/stl_algo.h
-#usr/include/c++/4.4.7/bits/stl_algobase.h
-#usr/include/c++/4.4.7/bits/stl_bvector.h
-#usr/include/c++/4.4.7/bits/stl_construct.h
-#usr/include/c++/4.4.7/bits/stl_deque.h
-#usr/include/c++/4.4.7/bits/stl_function.h
-#usr/include/c++/4.4.7/bits/stl_heap.h
-#usr/include/c++/4.4.7/bits/stl_iterator.h
-#usr/include/c++/4.4.7/bits/stl_iterator_base_funcs.h
-#usr/include/c++/4.4.7/bits/stl_iterator_base_types.h
-#usr/include/c++/4.4.7/bits/stl_list.h
-#usr/include/c++/4.4.7/bits/stl_map.h
-#usr/include/c++/4.4.7/bits/stl_multimap.h
-#usr/include/c++/4.4.7/bits/stl_multiset.h
-#usr/include/c++/4.4.7/bits/stl_numeric.h
-#usr/include/c++/4.4.7/bits/stl_pair.h
-#usr/include/c++/4.4.7/bits/stl_queue.h
-#usr/include/c++/4.4.7/bits/stl_raw_storage_iter.h
-#usr/include/c++/4.4.7/bits/stl_relops.h
-#usr/include/c++/4.4.7/bits/stl_set.h
-#usr/include/c++/4.4.7/bits/stl_stack.h
-#usr/include/c++/4.4.7/bits/stl_tempbuf.h
-#usr/include/c++/4.4.7/bits/stl_tree.h
-#usr/include/c++/4.4.7/bits/stl_uninitialized.h
-#usr/include/c++/4.4.7/bits/stl_vector.h
-#usr/include/c++/4.4.7/bits/stream_iterator.h
-#usr/include/c++/4.4.7/bits/streambuf.tcc
-#usr/include/c++/4.4.7/bits/streambuf_iterator.h
-#usr/include/c++/4.4.7/bits/stringfwd.h
-#usr/include/c++/4.4.7/bits/unique_ptr.h
-#usr/include/c++/4.4.7/bits/valarray_after.h
-#usr/include/c++/4.4.7/bits/valarray_array.h
-#usr/include/c++/4.4.7/bits/valarray_array.tcc
-#usr/include/c++/4.4.7/bits/valarray_before.h
-#usr/include/c++/4.4.7/bits/vector.tcc
-#usr/include/c++/4.4.7/bitset
-#usr/include/c++/4.4.7/c++0x_warning.h
-#usr/include/c++/4.4.7/cassert
-#usr/include/c++/4.4.7/ccomplex
-#usr/include/c++/4.4.7/cctype
-#usr/include/c++/4.4.7/cerrno
-#usr/include/c++/4.4.7/cfenv
-#usr/include/c++/4.4.7/cfloat
-#usr/include/c++/4.4.7/chrono
-#usr/include/c++/4.4.7/cinttypes
-#usr/include/c++/4.4.7/ciso646
-#usr/include/c++/4.4.7/climits
-#usr/include/c++/4.4.7/clocale
-#usr/include/c++/4.4.7/cmath
-#usr/include/c++/4.4.7/complex
-#usr/include/c++/4.4.7/complex.h
-#usr/include/c++/4.4.7/condition_variable
-#usr/include/c++/4.4.7/csetjmp
-#usr/include/c++/4.4.7/csignal
-#usr/include/c++/4.4.7/cstdarg
-#usr/include/c++/4.4.7/cstdatomic
-#usr/include/c++/4.4.7/cstdbool
-#usr/include/c++/4.4.7/cstddef
-#usr/include/c++/4.4.7/cstdint
-#usr/include/c++/4.4.7/cstdio
-#usr/include/c++/4.4.7/cstdlib
-#usr/include/c++/4.4.7/cstring
-#usr/include/c++/4.4.7/ctgmath
-#usr/include/c++/4.4.7/ctime
-#usr/include/c++/4.4.7/cwchar
-#usr/include/c++/4.4.7/cwctype
-#usr/include/c++/4.4.7/cxxabi-forced.h
-#usr/include/c++/4.4.7/cxxabi.h
-#usr/include/c++/4.4.7/debug
-#usr/include/c++/4.4.7/debug/bitset
-#usr/include/c++/4.4.7/debug/debug.h
-#usr/include/c++/4.4.7/debug/deque
-#usr/include/c++/4.4.7/debug/formatter.h
-#usr/include/c++/4.4.7/debug/functions.h
-#usr/include/c++/4.4.7/debug/list
-#usr/include/c++/4.4.7/debug/macros.h
-#usr/include/c++/4.4.7/debug/map
-#usr/include/c++/4.4.7/debug/map.h
-#usr/include/c++/4.4.7/debug/multimap.h
-#usr/include/c++/4.4.7/debug/multiset.h
-#usr/include/c++/4.4.7/debug/safe_base.h
-#usr/include/c++/4.4.7/debug/safe_iterator.h
-#usr/include/c++/4.4.7/debug/safe_iterator.tcc
-#usr/include/c++/4.4.7/debug/safe_sequence.h
-#usr/include/c++/4.4.7/debug/set
-#usr/include/c++/4.4.7/debug/set.h
-#usr/include/c++/4.4.7/debug/string
-#usr/include/c++/4.4.7/debug/unordered_map
-#usr/include/c++/4.4.7/debug/unordered_set
-#usr/include/c++/4.4.7/debug/vector
-#usr/include/c++/4.4.7/deque
-#usr/include/c++/4.4.7/exception
-#usr/include/c++/4.4.7/exception_defines.h
-#usr/include/c++/4.4.7/exception_ptr.h
-#usr/include/c++/4.4.7/ext
-#usr/include/c++/4.4.7/ext/algorithm
-#usr/include/c++/4.4.7/ext/array_allocator.h
-#usr/include/c++/4.4.7/ext/atomicity.h
-#usr/include/c++/4.4.7/ext/bitmap_allocator.h
-#usr/include/c++/4.4.7/ext/cast.h
-#usr/include/c++/4.4.7/ext/codecvt_specializations.h
-#usr/include/c++/4.4.7/ext/concurrence.h
-#usr/include/c++/4.4.7/ext/debug_allocator.h
-#usr/include/c++/4.4.7/ext/enc_filebuf.h
-#usr/include/c++/4.4.7/ext/extptr_allocator.h
-#usr/include/c++/4.4.7/ext/functional
-#usr/include/c++/4.4.7/ext/hash_map
-#usr/include/c++/4.4.7/ext/hash_set
-#usr/include/c++/4.4.7/ext/iterator
-#usr/include/c++/4.4.7/ext/malloc_allocator.h
-#usr/include/c++/4.4.7/ext/memory
-#usr/include/c++/4.4.7/ext/mt_allocator.h
-#usr/include/c++/4.4.7/ext/new_allocator.h
-#usr/include/c++/4.4.7/ext/numeric
-#usr/include/c++/4.4.7/ext/numeric_traits.h
-#usr/include/c++/4.4.7/ext/pb_ds
-#usr/include/c++/4.4.7/ext/pb_ds/assoc_container.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_types.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cond_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/container_base_dispatch.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/debug_map_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/eq_fn
-#usr/include/c++/4.4.7/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/direct_mask_range_hashing_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/direct_mod_range_hashing_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/linear_probe_fn_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/quadratic_probe_fn_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/child_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/head.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/internal_node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/leaf.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/node_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/node_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/point_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/cc_hash_max_collision_check_resize_trigger_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_exponential_size_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_standard_resize_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/standard_policies.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_trace_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/type_utils.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/types_traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/exception.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/hash_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/list_update_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/priority_queue.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/tag_and_trait.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/tree_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/trie_policy.hpp
-#usr/include/c++/4.4.7/ext/pod_char_traits.h
-#usr/include/c++/4.4.7/ext/pointer.h
-#usr/include/c++/4.4.7/ext/pool_allocator.h
-#usr/include/c++/4.4.7/ext/rb_tree
-#usr/include/c++/4.4.7/ext/rc_string_base.h
-#usr/include/c++/4.4.7/ext/rope
-#usr/include/c++/4.4.7/ext/ropeimpl.h
-#usr/include/c++/4.4.7/ext/slist
-#usr/include/c++/4.4.7/ext/sso_string_base.h
-#usr/include/c++/4.4.7/ext/stdio_filebuf.h
-#usr/include/c++/4.4.7/ext/stdio_sync_filebuf.h
-#usr/include/c++/4.4.7/ext/string_conversions.h
-#usr/include/c++/4.4.7/ext/throw_allocator.h
-#usr/include/c++/4.4.7/ext/type_traits.h
-#usr/include/c++/4.4.7/ext/typelist.h
-#usr/include/c++/4.4.7/ext/vstring.h
-#usr/include/c++/4.4.7/ext/vstring.tcc
-#usr/include/c++/4.4.7/ext/vstring_fwd.h
-#usr/include/c++/4.4.7/ext/vstring_util.h
-#usr/include/c++/4.4.7/fenv.h
-#usr/include/c++/4.4.7/forward_list
-#usr/include/c++/4.4.7/fstream
-#usr/include/c++/4.4.7/functional
-#usr/include/c++/4.4.7/initializer_list
-#usr/include/c++/4.4.7/iomanip
-#usr/include/c++/4.4.7/ios
-#usr/include/c++/4.4.7/iosfwd
-#usr/include/c++/4.4.7/iostream
-#usr/include/c++/4.4.7/istream
-#usr/include/c++/4.4.7/iterator
-#usr/include/c++/4.4.7/limits
-#usr/include/c++/4.4.7/list
-#usr/include/c++/4.4.7/locale
-#usr/include/c++/4.4.7/map
-#usr/include/c++/4.4.7/memory
-#usr/include/c++/4.4.7/mutex
-#usr/include/c++/4.4.7/new
-#usr/include/c++/4.4.7/numeric
-#usr/include/c++/4.4.7/ostream
-#usr/include/c++/4.4.7/parallel
-#usr/include/c++/4.4.7/parallel/algo.h
-#usr/include/c++/4.4.7/parallel/algobase.h
-#usr/include/c++/4.4.7/parallel/algorithm
-#usr/include/c++/4.4.7/parallel/algorithmfwd.h
-#usr/include/c++/4.4.7/parallel/balanced_quicksort.h
-#usr/include/c++/4.4.7/parallel/base.h
-#usr/include/c++/4.4.7/parallel/basic_iterator.h
-#usr/include/c++/4.4.7/parallel/checkers.h
-#usr/include/c++/4.4.7/parallel/compatibility.h
-#usr/include/c++/4.4.7/parallel/compiletime_settings.h
-#usr/include/c++/4.4.7/parallel/equally_split.h
-#usr/include/c++/4.4.7/parallel/features.h
-#usr/include/c++/4.4.7/parallel/find.h
-#usr/include/c++/4.4.7/parallel/find_selectors.h
-#usr/include/c++/4.4.7/parallel/for_each.h
-#usr/include/c++/4.4.7/parallel/for_each_selectors.h
-#usr/include/c++/4.4.7/parallel/iterator.h
-#usr/include/c++/4.4.7/parallel/list_partition.h
-#usr/include/c++/4.4.7/parallel/losertree.h
-#usr/include/c++/4.4.7/parallel/merge.h
-#usr/include/c++/4.4.7/parallel/multiseq_selection.h
-#usr/include/c++/4.4.7/parallel/multiway_merge.h
-#usr/include/c++/4.4.7/parallel/multiway_mergesort.h
-#usr/include/c++/4.4.7/parallel/numeric
-#usr/include/c++/4.4.7/parallel/numericfwd.h
-#usr/include/c++/4.4.7/parallel/omp_loop.h
-#usr/include/c++/4.4.7/parallel/omp_loop_static.h
-#usr/include/c++/4.4.7/parallel/par_loop.h
-#usr/include/c++/4.4.7/parallel/parallel.h
-#usr/include/c++/4.4.7/parallel/partial_sum.h
-#usr/include/c++/4.4.7/parallel/partition.h
-#usr/include/c++/4.4.7/parallel/queue.h
-#usr/include/c++/4.4.7/parallel/quicksort.h
-#usr/include/c++/4.4.7/parallel/random_number.h
-#usr/include/c++/4.4.7/parallel/random_shuffle.h
-#usr/include/c++/4.4.7/parallel/search.h
-#usr/include/c++/4.4.7/parallel/set_operations.h
-#usr/include/c++/4.4.7/parallel/settings.h
-#usr/include/c++/4.4.7/parallel/sort.h
-#usr/include/c++/4.4.7/parallel/tags.h
-#usr/include/c++/4.4.7/parallel/types.h
-#usr/include/c++/4.4.7/parallel/unique_copy.h
-#usr/include/c++/4.4.7/parallel/workstealing.h
-#usr/include/c++/4.4.7/queue
-#usr/include/c++/4.4.7/random
-#usr/include/c++/4.4.7/ratio
-#usr/include/c++/4.4.7/regex
-#usr/include/c++/4.4.7/set
-#usr/include/c++/4.4.7/sstream
-#usr/include/c++/4.4.7/stack
-#usr/include/c++/4.4.7/stdatomic.h
-#usr/include/c++/4.4.7/stdexcept
-#usr/include/c++/4.4.7/streambuf
-#usr/include/c++/4.4.7/string
-#usr/include/c++/4.4.7/system_error
-#usr/include/c++/4.4.7/tgmath.h
-#usr/include/c++/4.4.7/thread
-#usr/include/c++/4.4.7/tr1
-#usr/include/c++/4.4.7/tr1/array
-#usr/include/c++/4.4.7/tr1/bessel_function.tcc
-#usr/include/c++/4.4.7/tr1/beta_function.tcc
-#usr/include/c++/4.4.7/tr1/ccomplex
-#usr/include/c++/4.4.7/tr1/cctype
-#usr/include/c++/4.4.7/tr1/cfenv
-#usr/include/c++/4.4.7/tr1/cfloat
-#usr/include/c++/4.4.7/tr1/cinttypes
-#usr/include/c++/4.4.7/tr1/climits
-#usr/include/c++/4.4.7/tr1/cmath
-#usr/include/c++/4.4.7/tr1/complex
-#usr/include/c++/4.4.7/tr1/complex.h
-#usr/include/c++/4.4.7/tr1/cstdarg
-#usr/include/c++/4.4.7/tr1/cstdbool
-#usr/include/c++/4.4.7/tr1/cstdint
-#usr/include/c++/4.4.7/tr1/cstdio
-#usr/include/c++/4.4.7/tr1/cstdlib
-#usr/include/c++/4.4.7/tr1/ctgmath
-#usr/include/c++/4.4.7/tr1/ctime
-#usr/include/c++/4.4.7/tr1/ctype.h
-#usr/include/c++/4.4.7/tr1/cwchar
-#usr/include/c++/4.4.7/tr1/cwctype
-#usr/include/c++/4.4.7/tr1/ell_integral.tcc
-#usr/include/c++/4.4.7/tr1/exp_integral.tcc
-#usr/include/c++/4.4.7/tr1/fenv.h
-#usr/include/c++/4.4.7/tr1/float.h
-#usr/include/c++/4.4.7/tr1/functional
-#usr/include/c++/4.4.7/tr1/functional_hash.h
-#usr/include/c++/4.4.7/tr1/gamma.tcc
-#usr/include/c++/4.4.7/tr1/hashtable.h
-#usr/include/c++/4.4.7/tr1/hypergeometric.tcc
-#usr/include/c++/4.4.7/tr1/inttypes.h
-#usr/include/c++/4.4.7/tr1/legendre_function.tcc
-#usr/include/c++/4.4.7/tr1/limits.h
-#usr/include/c++/4.4.7/tr1/math.h
-#usr/include/c++/4.4.7/tr1/memory
-#usr/include/c++/4.4.7/tr1/modified_bessel_func.tcc
-#usr/include/c++/4.4.7/tr1/poly_hermite.tcc
-#usr/include/c++/4.4.7/tr1/poly_laguerre.tcc
-#usr/include/c++/4.4.7/tr1/random
-#usr/include/c++/4.4.7/tr1/regex
-#usr/include/c++/4.4.7/tr1/riemann_zeta.tcc
-#usr/include/c++/4.4.7/tr1/shared_ptr.h
-#usr/include/c++/4.4.7/tr1/special_function_util.h
-#usr/include/c++/4.4.7/tr1/stdarg.h
-#usr/include/c++/4.4.7/tr1/stdbool.h
-#usr/include/c++/4.4.7/tr1/stdint.h
-#usr/include/c++/4.4.7/tr1/stdio.h
-#usr/include/c++/4.4.7/tr1/stdlib.h
-#usr/include/c++/4.4.7/tr1/tgmath.h
-#usr/include/c++/4.4.7/tr1/tuple
-#usr/include/c++/4.4.7/tr1/type_traits
-#usr/include/c++/4.4.7/tr1/unordered_map
-#usr/include/c++/4.4.7/tr1/unordered_set
-#usr/include/c++/4.4.7/tr1/utility
-#usr/include/c++/4.4.7/tr1/wchar.h
-#usr/include/c++/4.4.7/tr1/wctype.h
-#usr/include/c++/4.4.7/tr1_impl
-#usr/include/c++/4.4.7/tr1_impl/array
-#usr/include/c++/4.4.7/tr1_impl/boost_sp_counted_base.h
-#usr/include/c++/4.4.7/tr1_impl/cctype
-#usr/include/c++/4.4.7/tr1_impl/cfenv
-#usr/include/c++/4.4.7/tr1_impl/cinttypes
-#usr/include/c++/4.4.7/tr1_impl/cmath
-#usr/include/c++/4.4.7/tr1_impl/complex
-#usr/include/c++/4.4.7/tr1_impl/cstdint
-#usr/include/c++/4.4.7/tr1_impl/cstdio
-#usr/include/c++/4.4.7/tr1_impl/cstdlib
-#usr/include/c++/4.4.7/tr1_impl/cwchar
-#usr/include/c++/4.4.7/tr1_impl/cwctype
-#usr/include/c++/4.4.7/tr1_impl/functional
-#usr/include/c++/4.4.7/tr1_impl/functional_hash.h
-#usr/include/c++/4.4.7/tr1_impl/hashtable
-#usr/include/c++/4.4.7/tr1_impl/hashtable_policy.h
-#usr/include/c++/4.4.7/tr1_impl/random
-#usr/include/c++/4.4.7/tr1_impl/random.tcc
-#usr/include/c++/4.4.7/tr1_impl/regex
-#usr/include/c++/4.4.7/tr1_impl/type_traits
-#usr/include/c++/4.4.7/tr1_impl/unordered_map
-#usr/include/c++/4.4.7/tr1_impl/unordered_set
-#usr/include/c++/4.4.7/tr1_impl/utility
-#usr/include/c++/4.4.7/tuple
-#usr/include/c++/4.4.7/type_traits
-#usr/include/c++/4.4.7/typeinfo
-#usr/include/c++/4.4.7/unordered_map
-#usr/include/c++/4.4.7/unordered_set
-#usr/include/c++/4.4.7/utility
-#usr/include/c++/4.4.7/valarray
-#usr/include/c++/4.4.7/vector
-#usr/info
-#usr/info/cpp.info
-#usr/info/cppinternals.info
-#usr/info/dir
-#usr/info/gcc.info
-#usr/info/gccinstall.info
-#usr/info/gccint.info
-#usr/info/libgomp.info
+#usr/include/c++/4.9.3
+#usr/include/c++/4.9.3/algorithm
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/atomic_word.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/basic_file.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/c++allocator.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/c++config.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/c++io.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/c++locale.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/cpu_defines.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/ctype_base.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/ctype_inline.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/cxxabi_tweaks.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/error_constants.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/extc++.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/gthr-default.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/gthr-posix.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/gthr-single.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/gthr.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/messages_members.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/opt_random.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/os_defines.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/stdc++.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/stdtr1c++.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/bits/time_members.h
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/ext
+#usr/include/c++/4.9.3/armv5tel-unknown-linux-gnueabi/ext/opt_random.h
+#usr/include/c++/4.9.3/array
+#usr/include/c++/4.9.3/atomic
+#usr/include/c++/4.9.3/backward
+#usr/include/c++/4.9.3/backward/auto_ptr.h
+#usr/include/c++/4.9.3/backward/backward_warning.h
+#usr/include/c++/4.9.3/backward/binders.h
+#usr/include/c++/4.9.3/backward/hash_fun.h
+#usr/include/c++/4.9.3/backward/hash_map
+#usr/include/c++/4.9.3/backward/hash_set
+#usr/include/c++/4.9.3/backward/hashtable.h
+#usr/include/c++/4.9.3/backward/strstream
+#usr/include/c++/4.9.3/bits
+#usr/include/c++/4.9.3/bits/algorithmfwd.h
+#usr/include/c++/4.9.3/bits/alloc_traits.h
+#usr/include/c++/4.9.3/bits/allocator.h
+#usr/include/c++/4.9.3/bits/atomic_base.h
+#usr/include/c++/4.9.3/bits/atomic_lockfree_defines.h
+#usr/include/c++/4.9.3/bits/basic_ios.h
+#usr/include/c++/4.9.3/bits/basic_ios.tcc
+#usr/include/c++/4.9.3/bits/basic_string.h
+#usr/include/c++/4.9.3/bits/basic_string.tcc
+#usr/include/c++/4.9.3/bits/boost_concept_check.h
+#usr/include/c++/4.9.3/bits/c++0x_warning.h
+#usr/include/c++/4.9.3/bits/c++14_warning.h
+#usr/include/c++/4.9.3/bits/char_traits.h
+#usr/include/c++/4.9.3/bits/codecvt.h
+#usr/include/c++/4.9.3/bits/concept_check.h
+#usr/include/c++/4.9.3/bits/cpp_type_traits.h
+#usr/include/c++/4.9.3/bits/cxxabi_forced.h
+#usr/include/c++/4.9.3/bits/deque.tcc
+#usr/include/c++/4.9.3/bits/enable_special_members.h
+#usr/include/c++/4.9.3/bits/exception_defines.h
+#usr/include/c++/4.9.3/bits/exception_ptr.h
+#usr/include/c++/4.9.3/bits/forward_list.h
+#usr/include/c++/4.9.3/bits/forward_list.tcc
+#usr/include/c++/4.9.3/bits/fstream.tcc
+#usr/include/c++/4.9.3/bits/functexcept.h
+#usr/include/c++/4.9.3/bits/functional_hash.h
+#usr/include/c++/4.9.3/bits/gslice.h
+#usr/include/c++/4.9.3/bits/gslice_array.h
+#usr/include/c++/4.9.3/bits/hash_bytes.h
+#usr/include/c++/4.9.3/bits/hashtable.h
+#usr/include/c++/4.9.3/bits/hashtable_policy.h
+#usr/include/c++/4.9.3/bits/indirect_array.h
+#usr/include/c++/4.9.3/bits/ios_base.h
+#usr/include/c++/4.9.3/bits/istream.tcc
+#usr/include/c++/4.9.3/bits/list.tcc
+#usr/include/c++/4.9.3/bits/locale_classes.h
+#usr/include/c++/4.9.3/bits/locale_classes.tcc
+#usr/include/c++/4.9.3/bits/locale_facets.h
+#usr/include/c++/4.9.3/bits/locale_facets.tcc
+#usr/include/c++/4.9.3/bits/locale_facets_nonio.h
+#usr/include/c++/4.9.3/bits/locale_facets_nonio.tcc
+#usr/include/c++/4.9.3/bits/localefwd.h
+#usr/include/c++/4.9.3/bits/mask_array.h
+#usr/include/c++/4.9.3/bits/memoryfwd.h
+#usr/include/c++/4.9.3/bits/move.h
+#usr/include/c++/4.9.3/bits/nested_exception.h
+#usr/include/c++/4.9.3/bits/ostream.tcc
+#usr/include/c++/4.9.3/bits/ostream_insert.h
+#usr/include/c++/4.9.3/bits/parse_numbers.h
+#usr/include/c++/4.9.3/bits/postypes.h
+#usr/include/c++/4.9.3/bits/predefined_ops.h
+#usr/include/c++/4.9.3/bits/ptr_traits.h
+#usr/include/c++/4.9.3/bits/random.h
+#usr/include/c++/4.9.3/bits/random.tcc
+#usr/include/c++/4.9.3/bits/range_access.h
+#usr/include/c++/4.9.3/bits/regex.h
+#usr/include/c++/4.9.3/bits/regex.tcc
+#usr/include/c++/4.9.3/bits/regex_automaton.h
+#usr/include/c++/4.9.3/bits/regex_automaton.tcc
+#usr/include/c++/4.9.3/bits/regex_compiler.h
+#usr/include/c++/4.9.3/bits/regex_compiler.tcc
+#usr/include/c++/4.9.3/bits/regex_constants.h
+#usr/include/c++/4.9.3/bits/regex_error.h
+#usr/include/c++/4.9.3/bits/regex_executor.h
+#usr/include/c++/4.9.3/bits/regex_executor.tcc
+#usr/include/c++/4.9.3/bits/regex_scanner.h
+#usr/include/c++/4.9.3/bits/regex_scanner.tcc
+#usr/include/c++/4.9.3/bits/shared_ptr.h
+#usr/include/c++/4.9.3/bits/shared_ptr_base.h
+#usr/include/c++/4.9.3/bits/slice_array.h
+#usr/include/c++/4.9.3/bits/sstream.tcc
+#usr/include/c++/4.9.3/bits/stl_algo.h
+#usr/include/c++/4.9.3/bits/stl_algobase.h
+#usr/include/c++/4.9.3/bits/stl_bvector.h
+#usr/include/c++/4.9.3/bits/stl_construct.h
+#usr/include/c++/4.9.3/bits/stl_deque.h
+#usr/include/c++/4.9.3/bits/stl_function.h
+#usr/include/c++/4.9.3/bits/stl_heap.h
+#usr/include/c++/4.9.3/bits/stl_iterator.h
+#usr/include/c++/4.9.3/bits/stl_iterator_base_funcs.h
+#usr/include/c++/4.9.3/bits/stl_iterator_base_types.h
+#usr/include/c++/4.9.3/bits/stl_list.h
+#usr/include/c++/4.9.3/bits/stl_map.h
+#usr/include/c++/4.9.3/bits/stl_multimap.h
+#usr/include/c++/4.9.3/bits/stl_multiset.h
+#usr/include/c++/4.9.3/bits/stl_numeric.h
+#usr/include/c++/4.9.3/bits/stl_pair.h
+#usr/include/c++/4.9.3/bits/stl_queue.h
+#usr/include/c++/4.9.3/bits/stl_raw_storage_iter.h
+#usr/include/c++/4.9.3/bits/stl_relops.h
+#usr/include/c++/4.9.3/bits/stl_set.h
+#usr/include/c++/4.9.3/bits/stl_stack.h
+#usr/include/c++/4.9.3/bits/stl_tempbuf.h
+#usr/include/c++/4.9.3/bits/stl_tree.h
+#usr/include/c++/4.9.3/bits/stl_uninitialized.h
+#usr/include/c++/4.9.3/bits/stl_vector.h
+#usr/include/c++/4.9.3/bits/stream_iterator.h
+#usr/include/c++/4.9.3/bits/streambuf.tcc
+#usr/include/c++/4.9.3/bits/streambuf_iterator.h
+#usr/include/c++/4.9.3/bits/stringfwd.h
+#usr/include/c++/4.9.3/bits/unique_ptr.h
+#usr/include/c++/4.9.3/bits/unordered_map.h
+#usr/include/c++/4.9.3/bits/unordered_set.h
+#usr/include/c++/4.9.3/bits/uses_allocator.h
+#usr/include/c++/4.9.3/bits/valarray_after.h
+#usr/include/c++/4.9.3/bits/valarray_array.h
+#usr/include/c++/4.9.3/bits/valarray_array.tcc
+#usr/include/c++/4.9.3/bits/valarray_before.h
+#usr/include/c++/4.9.3/bits/vector.tcc
+#usr/include/c++/4.9.3/bitset
+#usr/include/c++/4.9.3/cassert
+#usr/include/c++/4.9.3/ccomplex
+#usr/include/c++/4.9.3/cctype
+#usr/include/c++/4.9.3/cerrno
+#usr/include/c++/4.9.3/cfenv
+#usr/include/c++/4.9.3/cfloat
+#usr/include/c++/4.9.3/chrono
+#usr/include/c++/4.9.3/cinttypes
+#usr/include/c++/4.9.3/ciso646
+#usr/include/c++/4.9.3/climits
+#usr/include/c++/4.9.3/clocale
+#usr/include/c++/4.9.3/cmath
+#usr/include/c++/4.9.3/complex
+#usr/include/c++/4.9.3/complex.h
+#usr/include/c++/4.9.3/condition_variable
+#usr/include/c++/4.9.3/csetjmp
+#usr/include/c++/4.9.3/csignal
+#usr/include/c++/4.9.3/cstdalign
+#usr/include/c++/4.9.3/cstdarg
+#usr/include/c++/4.9.3/cstdbool
+#usr/include/c++/4.9.3/cstddef
+#usr/include/c++/4.9.3/cstdint
+#usr/include/c++/4.9.3/cstdio
+#usr/include/c++/4.9.3/cstdlib
+#usr/include/c++/4.9.3/cstring
+#usr/include/c++/4.9.3/ctgmath
+#usr/include/c++/4.9.3/ctime
+#usr/include/c++/4.9.3/cwchar
+#usr/include/c++/4.9.3/cwctype
+#usr/include/c++/4.9.3/cxxabi.h
+#usr/include/c++/4.9.3/debug
+#usr/include/c++/4.9.3/debug/array
+#usr/include/c++/4.9.3/debug/bitset
+#usr/include/c++/4.9.3/debug/debug.h
+#usr/include/c++/4.9.3/debug/deque
+#usr/include/c++/4.9.3/debug/formatter.h
+#usr/include/c++/4.9.3/debug/forward_list
+#usr/include/c++/4.9.3/debug/functions.h
+#usr/include/c++/4.9.3/debug/list
+#usr/include/c++/4.9.3/debug/macros.h
+#usr/include/c++/4.9.3/debug/map
+#usr/include/c++/4.9.3/debug/map.h
+#usr/include/c++/4.9.3/debug/multimap.h
+#usr/include/c++/4.9.3/debug/multiset.h
+#usr/include/c++/4.9.3/debug/safe_base.h
+#usr/include/c++/4.9.3/debug/safe_iterator.h
+#usr/include/c++/4.9.3/debug/safe_iterator.tcc
+#usr/include/c++/4.9.3/debug/safe_local_iterator.h
+#usr/include/c++/4.9.3/debug/safe_local_iterator.tcc
+#usr/include/c++/4.9.3/debug/safe_sequence.h
+#usr/include/c++/4.9.3/debug/safe_sequence.tcc
+#usr/include/c++/4.9.3/debug/safe_unordered_base.h
+#usr/include/c++/4.9.3/debug/safe_unordered_container.h
+#usr/include/c++/4.9.3/debug/safe_unordered_container.tcc
+#usr/include/c++/4.9.3/debug/set
+#usr/include/c++/4.9.3/debug/set.h
+#usr/include/c++/4.9.3/debug/string
+#usr/include/c++/4.9.3/debug/unordered_map
+#usr/include/c++/4.9.3/debug/unordered_set
+#usr/include/c++/4.9.3/debug/vector
+#usr/include/c++/4.9.3/decimal
+#usr/include/c++/4.9.3/decimal/decimal
+#usr/include/c++/4.9.3/decimal/decimal.h
+#usr/include/c++/4.9.3/deque
+#usr/include/c++/4.9.3/exception
+#usr/include/c++/4.9.3/experimental
+#usr/include/c++/4.9.3/experimental/optional
+#usr/include/c++/4.9.3/experimental/string_view
+#usr/include/c++/4.9.3/experimental/string_view.tcc
+#usr/include/c++/4.9.3/ext
+#usr/include/c++/4.9.3/ext/algorithm
+#usr/include/c++/4.9.3/ext/aligned_buffer.h
+#usr/include/c++/4.9.3/ext/alloc_traits.h
+#usr/include/c++/4.9.3/ext/array_allocator.h
+#usr/include/c++/4.9.3/ext/atomicity.h
+#usr/include/c++/4.9.3/ext/bitmap_allocator.h
+#usr/include/c++/4.9.3/ext/cast.h
+#usr/include/c++/4.9.3/ext/cmath
+#usr/include/c++/4.9.3/ext/codecvt_specializations.h
+#usr/include/c++/4.9.3/ext/concurrence.h
+#usr/include/c++/4.9.3/ext/debug_allocator.h
+#usr/include/c++/4.9.3/ext/enc_filebuf.h
+#usr/include/c++/4.9.3/ext/extptr_allocator.h
+#usr/include/c++/4.9.3/ext/functional
+#usr/include/c++/4.9.3/ext/hash_map
+#usr/include/c++/4.9.3/ext/hash_set
+#usr/include/c++/4.9.3/ext/iterator
+#usr/include/c++/4.9.3/ext/malloc_allocator.h
+#usr/include/c++/4.9.3/ext/memory
+#usr/include/c++/4.9.3/ext/mt_allocator.h
+#usr/include/c++/4.9.3/ext/new_allocator.h
+#usr/include/c++/4.9.3/ext/numeric
+#usr/include/c++/4.9.3/ext/numeric_traits.h
+#usr/include/c++/4.9.3/ext/pb_ds
+#usr/include/c++/4.9.3/ext/pb_ds/assoc_container.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy/branch_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cond_dealtor.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/container_base_dispatch.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/debug_map_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/eq_fn
+#usr/include/c++/4.9.3/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/direct_mask_range_hashing_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/direct_mod_range_hashing_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/linear_probe_fn_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/quadratic_probe_fn_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/node.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/cc_hash_max_collision_check_resize_trigger_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_exponential_size_policy_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_standard_resize_policy_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/node.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/standard_policies.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_trace_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/type_utils.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/types_traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/exception.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/hash_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/list_update_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/priority_queue.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/tag_and_trait.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/tree_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/trie_policy.hpp
+#usr/include/c++/4.9.3/ext/pod_char_traits.h
+#usr/include/c++/4.9.3/ext/pointer.h
+#usr/include/c++/4.9.3/ext/pool_allocator.h
+#usr/include/c++/4.9.3/ext/random
+#usr/include/c++/4.9.3/ext/random.tcc
+#usr/include/c++/4.9.3/ext/rb_tree
+#usr/include/c++/4.9.3/ext/rc_string_base.h
+#usr/include/c++/4.9.3/ext/rope
+#usr/include/c++/4.9.3/ext/ropeimpl.h
+#usr/include/c++/4.9.3/ext/slist
+#usr/include/c++/4.9.3/ext/sso_string_base.h
+#usr/include/c++/4.9.3/ext/stdio_filebuf.h
+#usr/include/c++/4.9.3/ext/stdio_sync_filebuf.h
+#usr/include/c++/4.9.3/ext/string_conversions.h
+#usr/include/c++/4.9.3/ext/throw_allocator.h
+#usr/include/c++/4.9.3/ext/type_traits.h
+#usr/include/c++/4.9.3/ext/typelist.h
+#usr/include/c++/4.9.3/ext/vstring.h
+#usr/include/c++/4.9.3/ext/vstring.tcc
+#usr/include/c++/4.9.3/ext/vstring_fwd.h
+#usr/include/c++/4.9.3/ext/vstring_util.h
+#usr/include/c++/4.9.3/fenv.h
+#usr/include/c++/4.9.3/forward_list
+#usr/include/c++/4.9.3/fstream
+#usr/include/c++/4.9.3/functional
+#usr/include/c++/4.9.3/future
+#usr/include/c++/4.9.3/initializer_list
+#usr/include/c++/4.9.3/iomanip
+#usr/include/c++/4.9.3/ios
+#usr/include/c++/4.9.3/iosfwd
+#usr/include/c++/4.9.3/iostream
+#usr/include/c++/4.9.3/istream
+#usr/include/c++/4.9.3/iterator
+#usr/include/c++/4.9.3/limits
+#usr/include/c++/4.9.3/list
+#usr/include/c++/4.9.3/locale
+#usr/include/c++/4.9.3/map
+#usr/include/c++/4.9.3/memory
+#usr/include/c++/4.9.3/mutex
+#usr/include/c++/4.9.3/new
+#usr/include/c++/4.9.3/numeric
+#usr/include/c++/4.9.3/ostream
+#usr/include/c++/4.9.3/parallel
+#usr/include/c++/4.9.3/parallel/algo.h
+#usr/include/c++/4.9.3/parallel/algobase.h
+#usr/include/c++/4.9.3/parallel/algorithm
+#usr/include/c++/4.9.3/parallel/algorithmfwd.h
+#usr/include/c++/4.9.3/parallel/balanced_quicksort.h
+#usr/include/c++/4.9.3/parallel/base.h
+#usr/include/c++/4.9.3/parallel/basic_iterator.h
+#usr/include/c++/4.9.3/parallel/checkers.h
+#usr/include/c++/4.9.3/parallel/compatibility.h
+#usr/include/c++/4.9.3/parallel/compiletime_settings.h
+#usr/include/c++/4.9.3/parallel/equally_split.h
+#usr/include/c++/4.9.3/parallel/features.h
+#usr/include/c++/4.9.3/parallel/find.h
+#usr/include/c++/4.9.3/parallel/find_selectors.h
+#usr/include/c++/4.9.3/parallel/for_each.h
+#usr/include/c++/4.9.3/parallel/for_each_selectors.h
+#usr/include/c++/4.9.3/parallel/iterator.h
+#usr/include/c++/4.9.3/parallel/list_partition.h
+#usr/include/c++/4.9.3/parallel/losertree.h
+#usr/include/c++/4.9.3/parallel/merge.h
+#usr/include/c++/4.9.3/parallel/multiseq_selection.h
+#usr/include/c++/4.9.3/parallel/multiway_merge.h
+#usr/include/c++/4.9.3/parallel/multiway_mergesort.h
+#usr/include/c++/4.9.3/parallel/numeric
+#usr/include/c++/4.9.3/parallel/numericfwd.h
+#usr/include/c++/4.9.3/parallel/omp_loop.h
+#usr/include/c++/4.9.3/parallel/omp_loop_static.h
+#usr/include/c++/4.9.3/parallel/par_loop.h
+#usr/include/c++/4.9.3/parallel/parallel.h
+#usr/include/c++/4.9.3/parallel/partial_sum.h
+#usr/include/c++/4.9.3/parallel/partition.h
+#usr/include/c++/4.9.3/parallel/queue.h
+#usr/include/c++/4.9.3/parallel/quicksort.h
+#usr/include/c++/4.9.3/parallel/random_number.h
+#usr/include/c++/4.9.3/parallel/random_shuffle.h
+#usr/include/c++/4.9.3/parallel/search.h
+#usr/include/c++/4.9.3/parallel/set_operations.h
+#usr/include/c++/4.9.3/parallel/settings.h
+#usr/include/c++/4.9.3/parallel/sort.h
+#usr/include/c++/4.9.3/parallel/tags.h
+#usr/include/c++/4.9.3/parallel/types.h
+#usr/include/c++/4.9.3/parallel/unique_copy.h
+#usr/include/c++/4.9.3/parallel/workstealing.h
+#usr/include/c++/4.9.3/profile
+#usr/include/c++/4.9.3/profile/array
+#usr/include/c++/4.9.3/profile/base.h
+#usr/include/c++/4.9.3/profile/bitset
+#usr/include/c++/4.9.3/profile/deque
+#usr/include/c++/4.9.3/profile/forward_list
+#usr/include/c++/4.9.3/profile/impl
+#usr/include/c++/4.9.3/profile/impl/profiler.h
+#usr/include/c++/4.9.3/profile/impl/profiler_algos.h
+#usr/include/c++/4.9.3/profile/impl/profiler_container_size.h
+#usr/include/c++/4.9.3/profile/impl/profiler_hash_func.h
+#usr/include/c++/4.9.3/profile/impl/profiler_hashtable_size.h
+#usr/include/c++/4.9.3/profile/impl/profiler_list_to_slist.h
+#usr/include/c++/4.9.3/profile/impl/profiler_list_to_vector.h
+#usr/include/c++/4.9.3/profile/impl/profiler_map_to_unordered_map.h
+#usr/include/c++/4.9.3/profile/impl/profiler_node.h
+#usr/include/c++/4.9.3/profile/impl/profiler_state.h
+#usr/include/c++/4.9.3/profile/impl/profiler_trace.h
+#usr/include/c++/4.9.3/profile/impl/profiler_vector_size.h
+#usr/include/c++/4.9.3/profile/impl/profiler_vector_to_list.h
+#usr/include/c++/4.9.3/profile/iterator_tracker.h
+#usr/include/c++/4.9.3/profile/list
+#usr/include/c++/4.9.3/profile/map
+#usr/include/c++/4.9.3/profile/map.h
+#usr/include/c++/4.9.3/profile/multimap.h
+#usr/include/c++/4.9.3/profile/multiset.h
+#usr/include/c++/4.9.3/profile/set
+#usr/include/c++/4.9.3/profile/set.h
+#usr/include/c++/4.9.3/profile/unordered_base.h
+#usr/include/c++/4.9.3/profile/unordered_map
+#usr/include/c++/4.9.3/profile/unordered_set
+#usr/include/c++/4.9.3/profile/vector
+#usr/include/c++/4.9.3/queue
+#usr/include/c++/4.9.3/random
+#usr/include/c++/4.9.3/ratio
+#usr/include/c++/4.9.3/regex
+#usr/include/c++/4.9.3/scoped_allocator
+#usr/include/c++/4.9.3/set
+#usr/include/c++/4.9.3/shared_mutex
+#usr/include/c++/4.9.3/sstream
+#usr/include/c++/4.9.3/stack
+#usr/include/c++/4.9.3/stdexcept
+#usr/include/c++/4.9.3/streambuf
+#usr/include/c++/4.9.3/string
+#usr/include/c++/4.9.3/system_error
+#usr/include/c++/4.9.3/tgmath.h
+#usr/include/c++/4.9.3/thread
+#usr/include/c++/4.9.3/tr1
+#usr/include/c++/4.9.3/tr1/array
+#usr/include/c++/4.9.3/tr1/bessel_function.tcc
+#usr/include/c++/4.9.3/tr1/beta_function.tcc
+#usr/include/c++/4.9.3/tr1/ccomplex
+#usr/include/c++/4.9.3/tr1/cctype
+#usr/include/c++/4.9.3/tr1/cfenv
+#usr/include/c++/4.9.3/tr1/cfloat
+#usr/include/c++/4.9.3/tr1/cinttypes
+#usr/include/c++/4.9.3/tr1/climits
+#usr/include/c++/4.9.3/tr1/cmath
+#usr/include/c++/4.9.3/tr1/complex
+#usr/include/c++/4.9.3/tr1/complex.h
+#usr/include/c++/4.9.3/tr1/cstdarg
+#usr/include/c++/4.9.3/tr1/cstdbool
+#usr/include/c++/4.9.3/tr1/cstdint
+#usr/include/c++/4.9.3/tr1/cstdio
+#usr/include/c++/4.9.3/tr1/cstdlib
+#usr/include/c++/4.9.3/tr1/ctgmath
+#usr/include/c++/4.9.3/tr1/ctime
+#usr/include/c++/4.9.3/tr1/ctype.h
+#usr/include/c++/4.9.3/tr1/cwchar
+#usr/include/c++/4.9.3/tr1/cwctype
+#usr/include/c++/4.9.3/tr1/ell_integral.tcc
+#usr/include/c++/4.9.3/tr1/exp_integral.tcc
+#usr/include/c++/4.9.3/tr1/fenv.h
+#usr/include/c++/4.9.3/tr1/float.h
+#usr/include/c++/4.9.3/tr1/functional
+#usr/include/c++/4.9.3/tr1/functional_hash.h
+#usr/include/c++/4.9.3/tr1/gamma.tcc
+#usr/include/c++/4.9.3/tr1/hashtable.h
+#usr/include/c++/4.9.3/tr1/hashtable_policy.h
+#usr/include/c++/4.9.3/tr1/hypergeometric.tcc
+#usr/include/c++/4.9.3/tr1/inttypes.h
+#usr/include/c++/4.9.3/tr1/legendre_function.tcc
+#usr/include/c++/4.9.3/tr1/limits.h
+#usr/include/c++/4.9.3/tr1/math.h
+#usr/include/c++/4.9.3/tr1/memory
+#usr/include/c++/4.9.3/tr1/modified_bessel_func.tcc
+#usr/include/c++/4.9.3/tr1/poly_hermite.tcc
+#usr/include/c++/4.9.3/tr1/poly_laguerre.tcc
+#usr/include/c++/4.9.3/tr1/random
+#usr/include/c++/4.9.3/tr1/random.h
+#usr/include/c++/4.9.3/tr1/random.tcc
+#usr/include/c++/4.9.3/tr1/regex
+#usr/include/c++/4.9.3/tr1/riemann_zeta.tcc
+#usr/include/c++/4.9.3/tr1/shared_ptr.h
+#usr/include/c++/4.9.3/tr1/special_function_util.h
+#usr/include/c++/4.9.3/tr1/stdarg.h
+#usr/include/c++/4.9.3/tr1/stdbool.h
+#usr/include/c++/4.9.3/tr1/stdint.h
+#usr/include/c++/4.9.3/tr1/stdio.h
+#usr/include/c++/4.9.3/tr1/stdlib.h
+#usr/include/c++/4.9.3/tr1/tgmath.h
+#usr/include/c++/4.9.3/tr1/tuple
+#usr/include/c++/4.9.3/tr1/type_traits
+#usr/include/c++/4.9.3/tr1/unordered_map
+#usr/include/c++/4.9.3/tr1/unordered_map.h
+#usr/include/c++/4.9.3/tr1/unordered_set
+#usr/include/c++/4.9.3/tr1/unordered_set.h
+#usr/include/c++/4.9.3/tr1/utility
+#usr/include/c++/4.9.3/tr1/wchar.h
+#usr/include/c++/4.9.3/tr1/wctype.h
+#usr/include/c++/4.9.3/tr2
+#usr/include/c++/4.9.3/tr2/bool_set
+#usr/include/c++/4.9.3/tr2/bool_set.tcc
+#usr/include/c++/4.9.3/tr2/dynamic_bitset
+#usr/include/c++/4.9.3/tr2/dynamic_bitset.tcc
+#usr/include/c++/4.9.3/tr2/ratio
+#usr/include/c++/4.9.3/tr2/type_traits
+#usr/include/c++/4.9.3/tuple
+#usr/include/c++/4.9.3/type_traits
+#usr/include/c++/4.9.3/typeindex
+#usr/include/c++/4.9.3/typeinfo
+#usr/include/c++/4.9.3/unordered_map
+#usr/include/c++/4.9.3/unordered_set
+#usr/include/c++/4.9.3/utility
+#usr/include/c++/4.9.3/valarray
+#usr/include/c++/4.9.3/vector
 #usr/lib/gcc
 #usr/lib/gcc/armv5tel-unknown-linux-gnueabi
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/cc1
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/cc1plus
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/collect2
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/crtbegin.o
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/crtbeginS.o
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/crtbeginT.o
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/crtend.o
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/crtendS.o
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/finclude
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include-fixed
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include-fixed/README
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include-fixed/limits.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include-fixed/syslimits.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/arm_neon.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/float.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/iso646.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/mf-runtime.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/mmintrin.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/omp.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/ssp
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/ssp/ssp.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/ssp/stdio.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/ssp/string.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/ssp/unistd.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/stdarg.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/stdbool.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/stddef.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/stdfix.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/unwind.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/include/varargs.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/fixinc.sh
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/fixinc_list
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/fixincl
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/gsyslimits.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/include
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/include/README
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/include/limits.h
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/macro_list
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/mkheaders
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/mkheaders.conf
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/install-tools/mkinstalldirs
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/libgcc.a
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/libgcc_eh.a
-#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.4.7/libgcov.a
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/cc1
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/cc1plus
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/collect2
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/crtbegin.o
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/crtbeginS.o
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/crtbeginT.o
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/crtend.o
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/crtendS.o
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/finclude
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include-fixed
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include-fixed/README
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include-fixed/limits.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include-fixed/syslimits.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/arm_acle.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/arm_neon.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/float.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/iso646.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/mmintrin.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/omp.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/sanitizer
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/sanitizer/asan_interface.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/sanitizer/common_interface_defs.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/sanitizer/lsan_interface.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/ssp
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/ssp/ssp.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/ssp/stdio.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/ssp/string.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/ssp/unistd.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/stdalign.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/stdarg.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/stdatomic.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/stdbool.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/stddef.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/stdfix.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/stdint-gcc.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/stdint.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/stdnoreturn.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/unwind-arm-common.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/unwind.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/include/varargs.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/fixinc.sh
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/fixinc_list
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/fixincl
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/gsyslimits.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/include
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/include/README
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/include/limits.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/macro_list
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/mkheaders
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/mkheaders.conf
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/install-tools/mkinstalldirs
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/libgcc.a
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/libgcc_eh.a
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/libgcov.a
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/liblto_plugin.la
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/liblto_plugin.so
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/liblto_plugin.so.0
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/liblto_plugin.so.0.0.0
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/lto-wrapper
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/lto1
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/gengtype
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/gtype.state
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ada
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ada/gcc-interface
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ada/gcc-interface/ada-tree.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/alias.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/all-tree.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/alloc-pool.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ansidecl.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/attribs.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/auto-host.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/b-header-vars
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/basic-block.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/bitmap.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/builtins.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/bversion.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/c-family
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/c-family/c-common.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/c-family/c-common.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/c-family/c-objc.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/c-family/c-pragma.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/c-family/c-pretty-print.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/c-tree.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/calls.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cfg-flags.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cfgexpand.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cfghooks.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cfgloop.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cgraph.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cif-code.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cilk-builtins.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cilkplus.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/aarch-common-protos.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/aout.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/arm-cores.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/arm-opts.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/arm-protos.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/arm.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/bpabi.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/elf.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/linux-eabi.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/linux-elf.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/arm/linux-gas.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/dbxelf.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/elfos.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/glibc-stdint.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/gnu-user.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/initfini-array.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/linux-android.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/linux-protos.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/linux.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/config/vxworks-dummy.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/configargs.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/context.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/coretypes.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cp
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cp/cp-tree.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cp/cp-tree.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cp/cxx-pretty-print.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cp/name-lookup.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cp/type-utils.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cppdefault.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/cpplib.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/debug.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/defaults.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/df.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/diagnostic-color.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/diagnostic-core.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/diagnostic.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/diagnostic.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/double-int.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/dumpfile.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/emit-rtl.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/except.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/filenames.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/fixed-value.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/flag-types.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/flags.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/fold-const.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/function.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gcc-plugin.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gcc-symtab.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/genrtl.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ggc.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimple-builder.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimple-expr.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimple-fold.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimple-iterator.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimple-low.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimple-pretty-print.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimple-ssa.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimple-walk.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimple.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimple.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimplify-me.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gimplify.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gsstruct.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gtm-builtins.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/gtype-desc.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/hard-reg-set.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/hash-table.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/hashtab.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/highlev-plugin-common.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/hwint.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/incpath.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/input.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/insn-codes.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/insn-constants.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/insn-flags.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/insn-modes.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/insn-notes.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/internal-fn.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/internal-fn.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/intl.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ipa-prop.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ipa-ref-inline.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ipa-ref.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ipa-reference.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ipa-utils.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/is-a.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/java
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/java/java-tree.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/langhooks.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/libiberty.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/line-map.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/machmode.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/md5.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/mode-classes.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/objc
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/objc/objc-tree.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/obstack.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/omp-builtins.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/options.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/opts.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/output.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/params.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/params.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/pass-instances.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/pass_manager.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/plugin-api.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/plugin-version.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/plugin.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/plugin.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/pointer-set.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/predict.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/predict.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/prefix.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/pretty-print.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/print-rtl.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/print-tree.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/real.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/realmpfr.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/reg-notes.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/regset.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/resource.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/rtl.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/rtl.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/safe-ctype.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/sanitizer.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/sbitmap.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/splay-tree.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/ssa-iterators.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/statistics.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/stmt.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/stor-layout.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/stringpool.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/symtab.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/sync-builtins.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/system.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/target-hooks-macros.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/target.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/target.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/timevar.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/timevar.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tm-preds.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tm.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tm_p.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/toplev.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-cfg.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-cfgcleanup.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-check.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-core.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-dfa.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-dump.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-eh.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-hasher.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-inline.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-into-ssa.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-iterator.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-nested.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-object-size.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-outof-ssa.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-parloops.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-pass.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-phinodes.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-pretty-print.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-address.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-alias.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-coalesce.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-dom.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-loop-ivopts.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-loop-manip.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-loop-niter.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-loop.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-operands.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-sccvn.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-ter.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-threadedge.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa-threadupdate.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssa.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree-ssanames.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/tree.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/treestruct.def
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/varasm.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/vec.h
+#usr/lib/gcc/armv5tel-unknown-linux-gnueabi/4.9.3/plugin/include/version.h
+#usr/lib/libasan.a
+#usr/lib/libasan.la
+#usr/lib/libasan.so
+usr/lib/libasan.so.1
+usr/lib/libasan.so.1.0.0
+#usr/lib/libasan_preinit.o
+#usr/lib/libatomic.a
+#usr/lib/libatomic.la
+#usr/lib/libatomic.so
+usr/lib/libatomic.so.1
+usr/lib/libatomic.so.1.1.0
 #usr/lib/libgomp.a
 #usr/lib/libgomp.la
 #usr/lib/libgomp.so
 usr/lib/libgomp.so.1
 usr/lib/libgomp.so.1.0.0
 #usr/lib/libgomp.spec
-#usr/lib/libmudflap.a
-#usr/lib/libmudflap.la
-#usr/lib/libmudflap.so
-usr/lib/libmudflap.so.0
-usr/lib/libmudflap.so.0.0.0
-#usr/lib/libmudflapth.a
-#usr/lib/libmudflapth.la
-#usr/lib/libmudflapth.so
-usr/lib/libmudflapth.so.0
-usr/lib/libmudflapth.so.0.0.0
+#usr/lib/libitm.a
+#usr/lib/libitm.la
+#usr/lib/libitm.so
+usr/lib/libitm.so.1
+usr/lib/libitm.so.1.0.0
+#usr/lib/libitm.spec
+#usr/lib/libsanitizer.spec
 #usr/lib/libssp.a
 #usr/lib/libssp.la
 #usr/lib/libssp.so
@@ -766,16 +1058,34 @@ usr/lib/libssp.so.0.0.0
 #usr/lib/libssp_nonshared.a
 #usr/lib/libssp_nonshared.la
 #usr/lib/libstdc++.a
-usr/lib/libstdc++.so.6.0.13
+usr/lib/libstdc++.so.6.0.20
+#usr/lib/libstdc++.so.6.0.20-gdb.py
 #usr/lib/libsupc++.a
 #usr/lib/libsupc++.la
-#usr/man
-#usr/man/man1
-#usr/man/man1/cpp.1
-#usr/man/man1/g++.1
-#usr/man/man1/gcc.1
-#usr/man/man1/gcov.1
-#usr/man/man7
-#usr/man/man7/fsf-funding.7
-#usr/man/man7/gfdl.7
-#usr/man/man7/gpl.7
+#usr/lib/libubsan.a
+#usr/lib/libubsan.la
+#usr/lib/libubsan.so
+usr/lib/libubsan.so.0
+usr/lib/libubsan.so.0.0.0
+#usr/share/gcc-4.9.3
+#usr/share/gcc-4.9.3/python
+#usr/share/gcc-4.9.3/python/libstdcxx
+#usr/share/gcc-4.9.3/python/libstdcxx/__init__.py
+#usr/share/gcc-4.9.3/python/libstdcxx/v6
+#usr/share/gcc-4.9.3/python/libstdcxx/v6/__init__.py
+#usr/share/gcc-4.9.3/python/libstdcxx/v6/printers.py
+#usr/share/info/cpp.info
+#usr/share/info/cppinternals.info
+#usr/share/info/gcc.info
+#usr/share/info/gccinstall.info
+#usr/share/info/gccint.info
+#usr/share/info/libgomp.info
+#usr/share/info/libitm.info
+#usr/share/info/libquadmath.info
+#usr/share/man/man1/cpp.1
+#usr/share/man/man1/g++.1
+#usr/share/man/man1/gcc.1
+#usr/share/man/man1/gcov.1
+#usr/share/man/man7/fsf-funding.7
+#usr/share/man/man7/gfdl.7
+#usr/share/man/man7/gpl.7
index a2a2ea015fbbdd0bbcc9aa4eaf0caae2635be722..e6d328bb5ae9f636964bcac219bfa623f1e152f9 100644 (file)
@@ -25,6 +25,7 @@ etc/rc.d/init.d/console
 #etc/rc.d/init.d/cyrus-sasl
 etc/rc.d/init.d/dhcp
 etc/rc.d/init.d/dhcrelay
+#etc/rc.d/init.d/dnsdist
 etc/rc.d/init.d/dnsmasq
 etc/rc.d/init.d/fcron
 #etc/rc.d/init.d/fetchmail
index 9fe53d18a1a6be3b8228ea266afdf2bb10cb1d0a..b00abdb9e33fde40711d58714e9611a567d52cf5 100644 (file)
@@ -2,7 +2,9 @@ usr/bin/cmp
 usr/bin/diff
 #usr/bin/diff3
 #usr/bin/sdiff
+#usr/info
 #usr/info/diff.info
+#usr/info/dir
 #usr/man/man1/cmp.1
 #usr/man/man1/diff.1
 #usr/man/man1/diff3.1
index d0997bfb297a29d6129291c949fb94ae4d862c70..fd5bfb8d0a39c6cddc73d9946b8dc25785ea9ac4 100644 (file)
 #usr/lib/ldscripts/i386linux.xn
 #usr/lib/ldscripts/i386linux.xr
 #usr/lib/ldscripts/i386linux.xu
-usr/lib/libbfd-2.22.so
+usr/lib/libbfd-2.24.so
 #usr/lib/libbfd.a
 #usr/lib/libbfd.la
 #usr/lib/libbfd.so
 #usr/lib/libiberty.a
-usr/lib/libopcodes-2.22.so
+usr/lib/libopcodes-2.24.so
 #usr/lib/libopcodes.a
 #usr/lib/libopcodes.la
 #usr/lib/libopcodes.so
index 10c712a7589fd9b6eb69244c233a6351f7a4d0fc..0e4b5c7baa045737fc747d4f7b7053ccdf5dbcdd 100644 (file)
 #usr/bin/cpp
 #usr/bin/g++
 #usr/bin/gcc
-#usr/bin/gccbug
+#usr/bin/gcc-ar
+#usr/bin/gcc-nm
+#usr/bin/gcc-ranlib
 #usr/bin/gcov
 #usr/bin/i586-pc-linux-gnu-c++
 #usr/bin/i586-pc-linux-gnu-g++
 #usr/bin/i586-pc-linux-gnu-gcc
-#usr/bin/i586-pc-linux-gnu-gcc-4.4.7
+#usr/bin/i586-pc-linux-gnu-gcc-4.9.3
+#usr/bin/i586-pc-linux-gnu-gcc-ar
+#usr/bin/i586-pc-linux-gnu-gcc-nm
+#usr/bin/i586-pc-linux-gnu-gcc-ranlib
 #usr/include/c++
-#usr/include/c++/4.4.7
-#usr/include/c++/4.4.7/algorithm
-#usr/include/c++/4.4.7/array
-#usr/include/c++/4.4.7/backward
-#usr/include/c++/4.4.7/backward/auto_ptr.h
-#usr/include/c++/4.4.7/backward/backward_warning.h
-#usr/include/c++/4.4.7/backward/binders.h
-#usr/include/c++/4.4.7/backward/hash_fun.h
-#usr/include/c++/4.4.7/backward/hash_map
-#usr/include/c++/4.4.7/backward/hash_set
-#usr/include/c++/4.4.7/backward/hashtable.h
-#usr/include/c++/4.4.7/backward/strstream
-#usr/include/c++/4.4.7/bits
-#usr/include/c++/4.4.7/bits/algorithmfwd.h
-#usr/include/c++/4.4.7/bits/allocator.h
-#usr/include/c++/4.4.7/bits/atomic_0.h
-#usr/include/c++/4.4.7/bits/atomic_2.h
-#usr/include/c++/4.4.7/bits/atomicfwd_c.h
-#usr/include/c++/4.4.7/bits/atomicfwd_cxx.h
-#usr/include/c++/4.4.7/bits/basic_ios.h
-#usr/include/c++/4.4.7/bits/basic_ios.tcc
-#usr/include/c++/4.4.7/bits/basic_string.h
-#usr/include/c++/4.4.7/bits/basic_string.tcc
-#usr/include/c++/4.4.7/bits/boost_concept_check.h
-#usr/include/c++/4.4.7/bits/char_traits.h
-#usr/include/c++/4.4.7/bits/cmath.tcc
-#usr/include/c++/4.4.7/bits/codecvt.h
-#usr/include/c++/4.4.7/bits/concept_check.h
-#usr/include/c++/4.4.7/bits/cpp_type_traits.h
-#usr/include/c++/4.4.7/bits/deque.tcc
-#usr/include/c++/4.4.7/bits/forward_list.h
-#usr/include/c++/4.4.7/bits/forward_list.tcc
-#usr/include/c++/4.4.7/bits/fstream.tcc
-#usr/include/c++/4.4.7/bits/functexcept.h
-#usr/include/c++/4.4.7/bits/functional_hash.h
-#usr/include/c++/4.4.7/bits/gslice.h
-#usr/include/c++/4.4.7/bits/gslice_array.h
-#usr/include/c++/4.4.7/bits/hashtable.h
-#usr/include/c++/4.4.7/bits/indirect_array.h
-#usr/include/c++/4.4.7/bits/ios_base.h
-#usr/include/c++/4.4.7/bits/istream.tcc
-#usr/include/c++/4.4.7/bits/list.tcc
-#usr/include/c++/4.4.7/bits/locale_classes.h
-#usr/include/c++/4.4.7/bits/locale_classes.tcc
-#usr/include/c++/4.4.7/bits/locale_facets.h
-#usr/include/c++/4.4.7/bits/locale_facets.tcc
-#usr/include/c++/4.4.7/bits/locale_facets_nonio.h
-#usr/include/c++/4.4.7/bits/locale_facets_nonio.tcc
-#usr/include/c++/4.4.7/bits/localefwd.h
-#usr/include/c++/4.4.7/bits/mask_array.h
-#usr/include/c++/4.4.7/bits/move.h
-#usr/include/c++/4.4.7/bits/ostream.tcc
-#usr/include/c++/4.4.7/bits/ostream_insert.h
-#usr/include/c++/4.4.7/bits/postypes.h
-#usr/include/c++/4.4.7/bits/shared_ptr.h
-#usr/include/c++/4.4.7/bits/slice_array.h
-#usr/include/c++/4.4.7/bits/sstream.tcc
-#usr/include/c++/4.4.7/bits/stl_algo.h
-#usr/include/c++/4.4.7/bits/stl_algobase.h
-#usr/include/c++/4.4.7/bits/stl_bvector.h
-#usr/include/c++/4.4.7/bits/stl_construct.h
-#usr/include/c++/4.4.7/bits/stl_deque.h
-#usr/include/c++/4.4.7/bits/stl_function.h
-#usr/include/c++/4.4.7/bits/stl_heap.h
-#usr/include/c++/4.4.7/bits/stl_iterator.h
-#usr/include/c++/4.4.7/bits/stl_iterator_base_funcs.h
-#usr/include/c++/4.4.7/bits/stl_iterator_base_types.h
-#usr/include/c++/4.4.7/bits/stl_list.h
-#usr/include/c++/4.4.7/bits/stl_map.h
-#usr/include/c++/4.4.7/bits/stl_multimap.h
-#usr/include/c++/4.4.7/bits/stl_multiset.h
-#usr/include/c++/4.4.7/bits/stl_numeric.h
-#usr/include/c++/4.4.7/bits/stl_pair.h
-#usr/include/c++/4.4.7/bits/stl_queue.h
-#usr/include/c++/4.4.7/bits/stl_raw_storage_iter.h
-#usr/include/c++/4.4.7/bits/stl_relops.h
-#usr/include/c++/4.4.7/bits/stl_set.h
-#usr/include/c++/4.4.7/bits/stl_stack.h
-#usr/include/c++/4.4.7/bits/stl_tempbuf.h
-#usr/include/c++/4.4.7/bits/stl_tree.h
-#usr/include/c++/4.4.7/bits/stl_uninitialized.h
-#usr/include/c++/4.4.7/bits/stl_vector.h
-#usr/include/c++/4.4.7/bits/stream_iterator.h
-#usr/include/c++/4.4.7/bits/streambuf.tcc
-#usr/include/c++/4.4.7/bits/streambuf_iterator.h
-#usr/include/c++/4.4.7/bits/stringfwd.h
-#usr/include/c++/4.4.7/bits/unique_ptr.h
-#usr/include/c++/4.4.7/bits/valarray_after.h
-#usr/include/c++/4.4.7/bits/valarray_array.h
-#usr/include/c++/4.4.7/bits/valarray_array.tcc
-#usr/include/c++/4.4.7/bits/valarray_before.h
-#usr/include/c++/4.4.7/bits/vector.tcc
-#usr/include/c++/4.4.7/bitset
-#usr/include/c++/4.4.7/c++0x_warning.h
-#usr/include/c++/4.4.7/cassert
-#usr/include/c++/4.4.7/ccomplex
-#usr/include/c++/4.4.7/cctype
-#usr/include/c++/4.4.7/cerrno
-#usr/include/c++/4.4.7/cfenv
-#usr/include/c++/4.4.7/cfloat
-#usr/include/c++/4.4.7/chrono
-#usr/include/c++/4.4.7/cinttypes
-#usr/include/c++/4.4.7/ciso646
-#usr/include/c++/4.4.7/climits
-#usr/include/c++/4.4.7/clocale
-#usr/include/c++/4.4.7/cmath
-#usr/include/c++/4.4.7/complex
-#usr/include/c++/4.4.7/complex.h
-#usr/include/c++/4.4.7/condition_variable
-#usr/include/c++/4.4.7/csetjmp
-#usr/include/c++/4.4.7/csignal
-#usr/include/c++/4.4.7/cstdarg
-#usr/include/c++/4.4.7/cstdatomic
-#usr/include/c++/4.4.7/cstdbool
-#usr/include/c++/4.4.7/cstddef
-#usr/include/c++/4.4.7/cstdint
-#usr/include/c++/4.4.7/cstdio
-#usr/include/c++/4.4.7/cstdlib
-#usr/include/c++/4.4.7/cstring
-#usr/include/c++/4.4.7/ctgmath
-#usr/include/c++/4.4.7/ctime
-#usr/include/c++/4.4.7/cwchar
-#usr/include/c++/4.4.7/cwctype
-#usr/include/c++/4.4.7/cxxabi-forced.h
-#usr/include/c++/4.4.7/cxxabi.h
-#usr/include/c++/4.4.7/debug
-#usr/include/c++/4.4.7/debug/bitset
-#usr/include/c++/4.4.7/debug/debug.h
-#usr/include/c++/4.4.7/debug/deque
-#usr/include/c++/4.4.7/debug/formatter.h
-#usr/include/c++/4.4.7/debug/functions.h
-#usr/include/c++/4.4.7/debug/list
-#usr/include/c++/4.4.7/debug/macros.h
-#usr/include/c++/4.4.7/debug/map
-#usr/include/c++/4.4.7/debug/map.h
-#usr/include/c++/4.4.7/debug/multimap.h
-#usr/include/c++/4.4.7/debug/multiset.h
-#usr/include/c++/4.4.7/debug/safe_base.h
-#usr/include/c++/4.4.7/debug/safe_iterator.h
-#usr/include/c++/4.4.7/debug/safe_iterator.tcc
-#usr/include/c++/4.4.7/debug/safe_sequence.h
-#usr/include/c++/4.4.7/debug/set
-#usr/include/c++/4.4.7/debug/set.h
-#usr/include/c++/4.4.7/debug/string
-#usr/include/c++/4.4.7/debug/unordered_map
-#usr/include/c++/4.4.7/debug/unordered_set
-#usr/include/c++/4.4.7/debug/vector
-#usr/include/c++/4.4.7/deque
-#usr/include/c++/4.4.7/exception
-#usr/include/c++/4.4.7/exception_defines.h
-#usr/include/c++/4.4.7/exception_ptr.h
-#usr/include/c++/4.4.7/ext
-#usr/include/c++/4.4.7/ext/algorithm
-#usr/include/c++/4.4.7/ext/array_allocator.h
-#usr/include/c++/4.4.7/ext/atomicity.h
-#usr/include/c++/4.4.7/ext/bitmap_allocator.h
-#usr/include/c++/4.4.7/ext/cast.h
-#usr/include/c++/4.4.7/ext/codecvt_specializations.h
-#usr/include/c++/4.4.7/ext/concurrence.h
-#usr/include/c++/4.4.7/ext/debug_allocator.h
-#usr/include/c++/4.4.7/ext/enc_filebuf.h
-#usr/include/c++/4.4.7/ext/extptr_allocator.h
-#usr/include/c++/4.4.7/ext/functional
-#usr/include/c++/4.4.7/ext/hash_map
-#usr/include/c++/4.4.7/ext/hash_set
-#usr/include/c++/4.4.7/ext/iterator
-#usr/include/c++/4.4.7/ext/malloc_allocator.h
-#usr/include/c++/4.4.7/ext/memory
-#usr/include/c++/4.4.7/ext/mt_allocator.h
-#usr/include/c++/4.4.7/ext/new_allocator.h
-#usr/include/c++/4.4.7/ext/numeric
-#usr/include/c++/4.4.7/ext/numeric_traits.h
-#usr/include/c++/4.4.7/ext/pb_ds
-#usr/include/c++/4.4.7/ext/pb_ds/assoc_container.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_types.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cond_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/container_base_dispatch.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/debug_map_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/eq_fn
-#usr/include/c++/4.4.7/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/direct_mask_range_hashing_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/direct_mod_range_hashing_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/linear_probe_fn_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/quadratic_probe_fn_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/child_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/head.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/internal_node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/leaf.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/node_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/node_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/point_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/cc_hash_max_collision_check_resize_trigger_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_exponential_size_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_standard_resize_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/standard_policies.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_trace_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/type_utils.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/types_traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/exception.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/hash_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/list_update_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/priority_queue.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/tag_and_trait.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/tree_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/trie_policy.hpp
-#usr/include/c++/4.4.7/ext/pod_char_traits.h
-#usr/include/c++/4.4.7/ext/pointer.h
-#usr/include/c++/4.4.7/ext/pool_allocator.h
-#usr/include/c++/4.4.7/ext/rb_tree
-#usr/include/c++/4.4.7/ext/rc_string_base.h
-#usr/include/c++/4.4.7/ext/rope
-#usr/include/c++/4.4.7/ext/ropeimpl.h
-#usr/include/c++/4.4.7/ext/slist
-#usr/include/c++/4.4.7/ext/sso_string_base.h
-#usr/include/c++/4.4.7/ext/stdio_filebuf.h
-#usr/include/c++/4.4.7/ext/stdio_sync_filebuf.h
-#usr/include/c++/4.4.7/ext/string_conversions.h
-#usr/include/c++/4.4.7/ext/throw_allocator.h
-#usr/include/c++/4.4.7/ext/type_traits.h
-#usr/include/c++/4.4.7/ext/typelist.h
-#usr/include/c++/4.4.7/ext/vstring.h
-#usr/include/c++/4.4.7/ext/vstring.tcc
-#usr/include/c++/4.4.7/ext/vstring_fwd.h
-#usr/include/c++/4.4.7/ext/vstring_util.h
-#usr/include/c++/4.4.7/fenv.h
-#usr/include/c++/4.4.7/forward_list
-#usr/include/c++/4.4.7/fstream
-#usr/include/c++/4.4.7/functional
-#usr/include/c++/4.4.7/i586-pc-linux-gnu
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/atomic_word.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/basic_file.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/c++allocator.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/c++config.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/c++io.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/c++locale.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/cpu_defines.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/ctype_base.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/ctype_inline.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/ctype_noninline.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/cxxabi_tweaks.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/error_constants.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/extc++.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/gthr-default.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/gthr-posix.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/gthr-single.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/gthr-tpf.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/gthr.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/messages_members.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/os_defines.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/stdc++.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/stdtr1c++.h
-#usr/include/c++/4.4.7/i586-pc-linux-gnu/bits/time_members.h
-#usr/include/c++/4.4.7/initializer_list
-#usr/include/c++/4.4.7/iomanip
-#usr/include/c++/4.4.7/ios
-#usr/include/c++/4.4.7/iosfwd
-#usr/include/c++/4.4.7/iostream
-#usr/include/c++/4.4.7/istream
-#usr/include/c++/4.4.7/iterator
-#usr/include/c++/4.4.7/limits
-#usr/include/c++/4.4.7/list
-#usr/include/c++/4.4.7/locale
-#usr/include/c++/4.4.7/map
-#usr/include/c++/4.4.7/memory
-#usr/include/c++/4.4.7/mutex
-#usr/include/c++/4.4.7/new
-#usr/include/c++/4.4.7/numeric
-#usr/include/c++/4.4.7/ostream
-#usr/include/c++/4.4.7/parallel
-#usr/include/c++/4.4.7/parallel/algo.h
-#usr/include/c++/4.4.7/parallel/algobase.h
-#usr/include/c++/4.4.7/parallel/algorithm
-#usr/include/c++/4.4.7/parallel/algorithmfwd.h
-#usr/include/c++/4.4.7/parallel/balanced_quicksort.h
-#usr/include/c++/4.4.7/parallel/base.h
-#usr/include/c++/4.4.7/parallel/basic_iterator.h
-#usr/include/c++/4.4.7/parallel/checkers.h
-#usr/include/c++/4.4.7/parallel/compatibility.h
-#usr/include/c++/4.4.7/parallel/compiletime_settings.h
-#usr/include/c++/4.4.7/parallel/equally_split.h
-#usr/include/c++/4.4.7/parallel/features.h
-#usr/include/c++/4.4.7/parallel/find.h
-#usr/include/c++/4.4.7/parallel/find_selectors.h
-#usr/include/c++/4.4.7/parallel/for_each.h
-#usr/include/c++/4.4.7/parallel/for_each_selectors.h
-#usr/include/c++/4.4.7/parallel/iterator.h
-#usr/include/c++/4.4.7/parallel/list_partition.h
-#usr/include/c++/4.4.7/parallel/losertree.h
-#usr/include/c++/4.4.7/parallel/merge.h
-#usr/include/c++/4.4.7/parallel/multiseq_selection.h
-#usr/include/c++/4.4.7/parallel/multiway_merge.h
-#usr/include/c++/4.4.7/parallel/multiway_mergesort.h
-#usr/include/c++/4.4.7/parallel/numeric
-#usr/include/c++/4.4.7/parallel/numericfwd.h
-#usr/include/c++/4.4.7/parallel/omp_loop.h
-#usr/include/c++/4.4.7/parallel/omp_loop_static.h
-#usr/include/c++/4.4.7/parallel/par_loop.h
-#usr/include/c++/4.4.7/parallel/parallel.h
-#usr/include/c++/4.4.7/parallel/partial_sum.h
-#usr/include/c++/4.4.7/parallel/partition.h
-#usr/include/c++/4.4.7/parallel/queue.h
-#usr/include/c++/4.4.7/parallel/quicksort.h
-#usr/include/c++/4.4.7/parallel/random_number.h
-#usr/include/c++/4.4.7/parallel/random_shuffle.h
-#usr/include/c++/4.4.7/parallel/search.h
-#usr/include/c++/4.4.7/parallel/set_operations.h
-#usr/include/c++/4.4.7/parallel/settings.h
-#usr/include/c++/4.4.7/parallel/sort.h
-#usr/include/c++/4.4.7/parallel/tags.h
-#usr/include/c++/4.4.7/parallel/types.h
-#usr/include/c++/4.4.7/parallel/unique_copy.h
-#usr/include/c++/4.4.7/parallel/workstealing.h
-#usr/include/c++/4.4.7/queue
-#usr/include/c++/4.4.7/random
-#usr/include/c++/4.4.7/ratio
-#usr/include/c++/4.4.7/regex
-#usr/include/c++/4.4.7/set
-#usr/include/c++/4.4.7/sstream
-#usr/include/c++/4.4.7/stack
-#usr/include/c++/4.4.7/stdatomic.h
-#usr/include/c++/4.4.7/stdexcept
-#usr/include/c++/4.4.7/streambuf
-#usr/include/c++/4.4.7/string
-#usr/include/c++/4.4.7/system_error
-#usr/include/c++/4.4.7/tgmath.h
-#usr/include/c++/4.4.7/thread
-#usr/include/c++/4.4.7/tr1
-#usr/include/c++/4.4.7/tr1/array
-#usr/include/c++/4.4.7/tr1/bessel_function.tcc
-#usr/include/c++/4.4.7/tr1/beta_function.tcc
-#usr/include/c++/4.4.7/tr1/ccomplex
-#usr/include/c++/4.4.7/tr1/cctype
-#usr/include/c++/4.4.7/tr1/cfenv
-#usr/include/c++/4.4.7/tr1/cfloat
-#usr/include/c++/4.4.7/tr1/cinttypes
-#usr/include/c++/4.4.7/tr1/climits
-#usr/include/c++/4.4.7/tr1/cmath
-#usr/include/c++/4.4.7/tr1/complex
-#usr/include/c++/4.4.7/tr1/complex.h
-#usr/include/c++/4.4.7/tr1/cstdarg
-#usr/include/c++/4.4.7/tr1/cstdbool
-#usr/include/c++/4.4.7/tr1/cstdint
-#usr/include/c++/4.4.7/tr1/cstdio
-#usr/include/c++/4.4.7/tr1/cstdlib
-#usr/include/c++/4.4.7/tr1/ctgmath
-#usr/include/c++/4.4.7/tr1/ctime
-#usr/include/c++/4.4.7/tr1/ctype.h
-#usr/include/c++/4.4.7/tr1/cwchar
-#usr/include/c++/4.4.7/tr1/cwctype
-#usr/include/c++/4.4.7/tr1/ell_integral.tcc
-#usr/include/c++/4.4.7/tr1/exp_integral.tcc
-#usr/include/c++/4.4.7/tr1/fenv.h
-#usr/include/c++/4.4.7/tr1/float.h
-#usr/include/c++/4.4.7/tr1/functional
-#usr/include/c++/4.4.7/tr1/functional_hash.h
-#usr/include/c++/4.4.7/tr1/gamma.tcc
-#usr/include/c++/4.4.7/tr1/hashtable.h
-#usr/include/c++/4.4.7/tr1/hypergeometric.tcc
-#usr/include/c++/4.4.7/tr1/inttypes.h
-#usr/include/c++/4.4.7/tr1/legendre_function.tcc
-#usr/include/c++/4.4.7/tr1/limits.h
-#usr/include/c++/4.4.7/tr1/math.h
-#usr/include/c++/4.4.7/tr1/memory
-#usr/include/c++/4.4.7/tr1/modified_bessel_func.tcc
-#usr/include/c++/4.4.7/tr1/poly_hermite.tcc
-#usr/include/c++/4.4.7/tr1/poly_laguerre.tcc
-#usr/include/c++/4.4.7/tr1/random
-#usr/include/c++/4.4.7/tr1/regex
-#usr/include/c++/4.4.7/tr1/riemann_zeta.tcc
-#usr/include/c++/4.4.7/tr1/shared_ptr.h
-#usr/include/c++/4.4.7/tr1/special_function_util.h
-#usr/include/c++/4.4.7/tr1/stdarg.h
-#usr/include/c++/4.4.7/tr1/stdbool.h
-#usr/include/c++/4.4.7/tr1/stdint.h
-#usr/include/c++/4.4.7/tr1/stdio.h
-#usr/include/c++/4.4.7/tr1/stdlib.h
-#usr/include/c++/4.4.7/tr1/tgmath.h
-#usr/include/c++/4.4.7/tr1/tuple
-#usr/include/c++/4.4.7/tr1/type_traits
-#usr/include/c++/4.4.7/tr1/unordered_map
-#usr/include/c++/4.4.7/tr1/unordered_set
-#usr/include/c++/4.4.7/tr1/utility
-#usr/include/c++/4.4.7/tr1/wchar.h
-#usr/include/c++/4.4.7/tr1/wctype.h
-#usr/include/c++/4.4.7/tr1_impl
-#usr/include/c++/4.4.7/tr1_impl/array
-#usr/include/c++/4.4.7/tr1_impl/boost_sp_counted_base.h
-#usr/include/c++/4.4.7/tr1_impl/cctype
-#usr/include/c++/4.4.7/tr1_impl/cfenv
-#usr/include/c++/4.4.7/tr1_impl/cinttypes
-#usr/include/c++/4.4.7/tr1_impl/cmath
-#usr/include/c++/4.4.7/tr1_impl/complex
-#usr/include/c++/4.4.7/tr1_impl/cstdint
-#usr/include/c++/4.4.7/tr1_impl/cstdio
-#usr/include/c++/4.4.7/tr1_impl/cstdlib
-#usr/include/c++/4.4.7/tr1_impl/cwchar
-#usr/include/c++/4.4.7/tr1_impl/cwctype
-#usr/include/c++/4.4.7/tr1_impl/functional
-#usr/include/c++/4.4.7/tr1_impl/functional_hash.h
-#usr/include/c++/4.4.7/tr1_impl/hashtable
-#usr/include/c++/4.4.7/tr1_impl/hashtable_policy.h
-#usr/include/c++/4.4.7/tr1_impl/random
-#usr/include/c++/4.4.7/tr1_impl/random.tcc
-#usr/include/c++/4.4.7/tr1_impl/regex
-#usr/include/c++/4.4.7/tr1_impl/type_traits
-#usr/include/c++/4.4.7/tr1_impl/unordered_map
-#usr/include/c++/4.4.7/tr1_impl/unordered_set
-#usr/include/c++/4.4.7/tr1_impl/utility
-#usr/include/c++/4.4.7/tuple
-#usr/include/c++/4.4.7/type_traits
-#usr/include/c++/4.4.7/typeinfo
-#usr/include/c++/4.4.7/unordered_map
-#usr/include/c++/4.4.7/unordered_set
-#usr/include/c++/4.4.7/utility
-#usr/include/c++/4.4.7/valarray
-#usr/include/c++/4.4.7/vector
-#usr/info
-#usr/info/cpp.info
-#usr/info/cppinternals.info
-#usr/info/dir
-#usr/info/gcc.info
-#usr/info/gccinstall.info
-#usr/info/gccint.info
-#usr/info/libgomp.info
+#usr/include/c++/4.9.3
+#usr/include/c++/4.9.3/algorithm
+#usr/include/c++/4.9.3/array
+#usr/include/c++/4.9.3/atomic
+#usr/include/c++/4.9.3/backward
+#usr/include/c++/4.9.3/backward/auto_ptr.h
+#usr/include/c++/4.9.3/backward/backward_warning.h
+#usr/include/c++/4.9.3/backward/binders.h
+#usr/include/c++/4.9.3/backward/hash_fun.h
+#usr/include/c++/4.9.3/backward/hash_map
+#usr/include/c++/4.9.3/backward/hash_set
+#usr/include/c++/4.9.3/backward/hashtable.h
+#usr/include/c++/4.9.3/backward/strstream
+#usr/include/c++/4.9.3/bits
+#usr/include/c++/4.9.3/bits/algorithmfwd.h
+#usr/include/c++/4.9.3/bits/alloc_traits.h
+#usr/include/c++/4.9.3/bits/allocator.h
+#usr/include/c++/4.9.3/bits/atomic_base.h
+#usr/include/c++/4.9.3/bits/atomic_lockfree_defines.h
+#usr/include/c++/4.9.3/bits/basic_ios.h
+#usr/include/c++/4.9.3/bits/basic_ios.tcc
+#usr/include/c++/4.9.3/bits/basic_string.h
+#usr/include/c++/4.9.3/bits/basic_string.tcc
+#usr/include/c++/4.9.3/bits/boost_concept_check.h
+#usr/include/c++/4.9.3/bits/c++0x_warning.h
+#usr/include/c++/4.9.3/bits/c++14_warning.h
+#usr/include/c++/4.9.3/bits/char_traits.h
+#usr/include/c++/4.9.3/bits/codecvt.h
+#usr/include/c++/4.9.3/bits/concept_check.h
+#usr/include/c++/4.9.3/bits/cpp_type_traits.h
+#usr/include/c++/4.9.3/bits/cxxabi_forced.h
+#usr/include/c++/4.9.3/bits/deque.tcc
+#usr/include/c++/4.9.3/bits/enable_special_members.h
+#usr/include/c++/4.9.3/bits/exception_defines.h
+#usr/include/c++/4.9.3/bits/exception_ptr.h
+#usr/include/c++/4.9.3/bits/forward_list.h
+#usr/include/c++/4.9.3/bits/forward_list.tcc
+#usr/include/c++/4.9.3/bits/fstream.tcc
+#usr/include/c++/4.9.3/bits/functexcept.h
+#usr/include/c++/4.9.3/bits/functional_hash.h
+#usr/include/c++/4.9.3/bits/gslice.h
+#usr/include/c++/4.9.3/bits/gslice_array.h
+#usr/include/c++/4.9.3/bits/hash_bytes.h
+#usr/include/c++/4.9.3/bits/hashtable.h
+#usr/include/c++/4.9.3/bits/hashtable_policy.h
+#usr/include/c++/4.9.3/bits/indirect_array.h
+#usr/include/c++/4.9.3/bits/ios_base.h
+#usr/include/c++/4.9.3/bits/istream.tcc
+#usr/include/c++/4.9.3/bits/list.tcc
+#usr/include/c++/4.9.3/bits/locale_classes.h
+#usr/include/c++/4.9.3/bits/locale_classes.tcc
+#usr/include/c++/4.9.3/bits/locale_facets.h
+#usr/include/c++/4.9.3/bits/locale_facets.tcc
+#usr/include/c++/4.9.3/bits/locale_facets_nonio.h
+#usr/include/c++/4.9.3/bits/locale_facets_nonio.tcc
+#usr/include/c++/4.9.3/bits/localefwd.h
+#usr/include/c++/4.9.3/bits/mask_array.h
+#usr/include/c++/4.9.3/bits/memoryfwd.h
+#usr/include/c++/4.9.3/bits/move.h
+#usr/include/c++/4.9.3/bits/nested_exception.h
+#usr/include/c++/4.9.3/bits/ostream.tcc
+#usr/include/c++/4.9.3/bits/ostream_insert.h
+#usr/include/c++/4.9.3/bits/parse_numbers.h
+#usr/include/c++/4.9.3/bits/postypes.h
+#usr/include/c++/4.9.3/bits/predefined_ops.h
+#usr/include/c++/4.9.3/bits/ptr_traits.h
+#usr/include/c++/4.9.3/bits/random.h
+#usr/include/c++/4.9.3/bits/random.tcc
+#usr/include/c++/4.9.3/bits/range_access.h
+#usr/include/c++/4.9.3/bits/regex.h
+#usr/include/c++/4.9.3/bits/regex.tcc
+#usr/include/c++/4.9.3/bits/regex_automaton.h
+#usr/include/c++/4.9.3/bits/regex_automaton.tcc
+#usr/include/c++/4.9.3/bits/regex_compiler.h
+#usr/include/c++/4.9.3/bits/regex_compiler.tcc
+#usr/include/c++/4.9.3/bits/regex_constants.h
+#usr/include/c++/4.9.3/bits/regex_error.h
+#usr/include/c++/4.9.3/bits/regex_executor.h
+#usr/include/c++/4.9.3/bits/regex_executor.tcc
+#usr/include/c++/4.9.3/bits/regex_scanner.h
+#usr/include/c++/4.9.3/bits/regex_scanner.tcc
+#usr/include/c++/4.9.3/bits/shared_ptr.h
+#usr/include/c++/4.9.3/bits/shared_ptr_base.h
+#usr/include/c++/4.9.3/bits/slice_array.h
+#usr/include/c++/4.9.3/bits/sstream.tcc
+#usr/include/c++/4.9.3/bits/stl_algo.h
+#usr/include/c++/4.9.3/bits/stl_algobase.h
+#usr/include/c++/4.9.3/bits/stl_bvector.h
+#usr/include/c++/4.9.3/bits/stl_construct.h
+#usr/include/c++/4.9.3/bits/stl_deque.h
+#usr/include/c++/4.9.3/bits/stl_function.h
+#usr/include/c++/4.9.3/bits/stl_heap.h
+#usr/include/c++/4.9.3/bits/stl_iterator.h
+#usr/include/c++/4.9.3/bits/stl_iterator_base_funcs.h
+#usr/include/c++/4.9.3/bits/stl_iterator_base_types.h
+#usr/include/c++/4.9.3/bits/stl_list.h
+#usr/include/c++/4.9.3/bits/stl_map.h
+#usr/include/c++/4.9.3/bits/stl_multimap.h
+#usr/include/c++/4.9.3/bits/stl_multiset.h
+#usr/include/c++/4.9.3/bits/stl_numeric.h
+#usr/include/c++/4.9.3/bits/stl_pair.h
+#usr/include/c++/4.9.3/bits/stl_queue.h
+#usr/include/c++/4.9.3/bits/stl_raw_storage_iter.h
+#usr/include/c++/4.9.3/bits/stl_relops.h
+#usr/include/c++/4.9.3/bits/stl_set.h
+#usr/include/c++/4.9.3/bits/stl_stack.h
+#usr/include/c++/4.9.3/bits/stl_tempbuf.h
+#usr/include/c++/4.9.3/bits/stl_tree.h
+#usr/include/c++/4.9.3/bits/stl_uninitialized.h
+#usr/include/c++/4.9.3/bits/stl_vector.h
+#usr/include/c++/4.9.3/bits/stream_iterator.h
+#usr/include/c++/4.9.3/bits/streambuf.tcc
+#usr/include/c++/4.9.3/bits/streambuf_iterator.h
+#usr/include/c++/4.9.3/bits/stringfwd.h
+#usr/include/c++/4.9.3/bits/unique_ptr.h
+#usr/include/c++/4.9.3/bits/unordered_map.h
+#usr/include/c++/4.9.3/bits/unordered_set.h
+#usr/include/c++/4.9.3/bits/uses_allocator.h
+#usr/include/c++/4.9.3/bits/valarray_after.h
+#usr/include/c++/4.9.3/bits/valarray_array.h
+#usr/include/c++/4.9.3/bits/valarray_array.tcc
+#usr/include/c++/4.9.3/bits/valarray_before.h
+#usr/include/c++/4.9.3/bits/vector.tcc
+#usr/include/c++/4.9.3/bitset
+#usr/include/c++/4.9.3/cassert
+#usr/include/c++/4.9.3/ccomplex
+#usr/include/c++/4.9.3/cctype
+#usr/include/c++/4.9.3/cerrno
+#usr/include/c++/4.9.3/cfenv
+#usr/include/c++/4.9.3/cfloat
+#usr/include/c++/4.9.3/chrono
+#usr/include/c++/4.9.3/cinttypes
+#usr/include/c++/4.9.3/ciso646
+#usr/include/c++/4.9.3/climits
+#usr/include/c++/4.9.3/clocale
+#usr/include/c++/4.9.3/cmath
+#usr/include/c++/4.9.3/complex
+#usr/include/c++/4.9.3/complex.h
+#usr/include/c++/4.9.3/condition_variable
+#usr/include/c++/4.9.3/csetjmp
+#usr/include/c++/4.9.3/csignal
+#usr/include/c++/4.9.3/cstdalign
+#usr/include/c++/4.9.3/cstdarg
+#usr/include/c++/4.9.3/cstdbool
+#usr/include/c++/4.9.3/cstddef
+#usr/include/c++/4.9.3/cstdint
+#usr/include/c++/4.9.3/cstdio
+#usr/include/c++/4.9.3/cstdlib
+#usr/include/c++/4.9.3/cstring
+#usr/include/c++/4.9.3/ctgmath
+#usr/include/c++/4.9.3/ctime
+#usr/include/c++/4.9.3/cwchar
+#usr/include/c++/4.9.3/cwctype
+#usr/include/c++/4.9.3/cxxabi.h
+#usr/include/c++/4.9.3/debug
+#usr/include/c++/4.9.3/debug/array
+#usr/include/c++/4.9.3/debug/bitset
+#usr/include/c++/4.9.3/debug/debug.h
+#usr/include/c++/4.9.3/debug/deque
+#usr/include/c++/4.9.3/debug/formatter.h
+#usr/include/c++/4.9.3/debug/forward_list
+#usr/include/c++/4.9.3/debug/functions.h
+#usr/include/c++/4.9.3/debug/list
+#usr/include/c++/4.9.3/debug/macros.h
+#usr/include/c++/4.9.3/debug/map
+#usr/include/c++/4.9.3/debug/map.h
+#usr/include/c++/4.9.3/debug/multimap.h
+#usr/include/c++/4.9.3/debug/multiset.h
+#usr/include/c++/4.9.3/debug/safe_base.h
+#usr/include/c++/4.9.3/debug/safe_iterator.h
+#usr/include/c++/4.9.3/debug/safe_iterator.tcc
+#usr/include/c++/4.9.3/debug/safe_local_iterator.h
+#usr/include/c++/4.9.3/debug/safe_local_iterator.tcc
+#usr/include/c++/4.9.3/debug/safe_sequence.h
+#usr/include/c++/4.9.3/debug/safe_sequence.tcc
+#usr/include/c++/4.9.3/debug/safe_unordered_base.h
+#usr/include/c++/4.9.3/debug/safe_unordered_container.h
+#usr/include/c++/4.9.3/debug/safe_unordered_container.tcc
+#usr/include/c++/4.9.3/debug/set
+#usr/include/c++/4.9.3/debug/set.h
+#usr/include/c++/4.9.3/debug/string
+#usr/include/c++/4.9.3/debug/unordered_map
+#usr/include/c++/4.9.3/debug/unordered_set
+#usr/include/c++/4.9.3/debug/vector
+#usr/include/c++/4.9.3/decimal
+#usr/include/c++/4.9.3/decimal/decimal
+#usr/include/c++/4.9.3/decimal/decimal.h
+#usr/include/c++/4.9.3/deque
+#usr/include/c++/4.9.3/exception
+#usr/include/c++/4.9.3/experimental
+#usr/include/c++/4.9.3/experimental/optional
+#usr/include/c++/4.9.3/experimental/string_view
+#usr/include/c++/4.9.3/experimental/string_view.tcc
+#usr/include/c++/4.9.3/ext
+#usr/include/c++/4.9.3/ext/algorithm
+#usr/include/c++/4.9.3/ext/aligned_buffer.h
+#usr/include/c++/4.9.3/ext/alloc_traits.h
+#usr/include/c++/4.9.3/ext/array_allocator.h
+#usr/include/c++/4.9.3/ext/atomicity.h
+#usr/include/c++/4.9.3/ext/bitmap_allocator.h
+#usr/include/c++/4.9.3/ext/cast.h
+#usr/include/c++/4.9.3/ext/cmath
+#usr/include/c++/4.9.3/ext/codecvt_specializations.h
+#usr/include/c++/4.9.3/ext/concurrence.h
+#usr/include/c++/4.9.3/ext/debug_allocator.h
+#usr/include/c++/4.9.3/ext/enc_filebuf.h
+#usr/include/c++/4.9.3/ext/extptr_allocator.h
+#usr/include/c++/4.9.3/ext/functional
+#usr/include/c++/4.9.3/ext/hash_map
+#usr/include/c++/4.9.3/ext/hash_set
+#usr/include/c++/4.9.3/ext/iterator
+#usr/include/c++/4.9.3/ext/malloc_allocator.h
+#usr/include/c++/4.9.3/ext/memory
+#usr/include/c++/4.9.3/ext/mt_allocator.h
+#usr/include/c++/4.9.3/ext/new_allocator.h
+#usr/include/c++/4.9.3/ext/numeric
+#usr/include/c++/4.9.3/ext/numeric_traits.h
+#usr/include/c++/4.9.3/ext/pb_ds
+#usr/include/c++/4.9.3/ext/pb_ds/assoc_container.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy/branch_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cond_dealtor.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/container_base_dispatch.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/debug_map_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/eq_fn
+#usr/include/c++/4.9.3/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/direct_mask_range_hashing_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/direct_mod_range_hashing_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/linear_probe_fn_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/quadratic_probe_fn_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/node.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/cc_hash_max_collision_check_resize_trigger_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_exponential_size_policy_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_standard_resize_policy_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/node.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/standard_policies.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_trace_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/type_utils.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/types_traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/exception.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/hash_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/list_update_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/priority_queue.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/tag_and_trait.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/tree_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/trie_policy.hpp
+#usr/include/c++/4.9.3/ext/pod_char_traits.h
+#usr/include/c++/4.9.3/ext/pointer.h
+#usr/include/c++/4.9.3/ext/pool_allocator.h
+#usr/include/c++/4.9.3/ext/random
+#usr/include/c++/4.9.3/ext/random.tcc
+#usr/include/c++/4.9.3/ext/rb_tree
+#usr/include/c++/4.9.3/ext/rc_string_base.h
+#usr/include/c++/4.9.3/ext/rope
+#usr/include/c++/4.9.3/ext/ropeimpl.h
+#usr/include/c++/4.9.3/ext/slist
+#usr/include/c++/4.9.3/ext/sso_string_base.h
+#usr/include/c++/4.9.3/ext/stdio_filebuf.h
+#usr/include/c++/4.9.3/ext/stdio_sync_filebuf.h
+#usr/include/c++/4.9.3/ext/string_conversions.h
+#usr/include/c++/4.9.3/ext/throw_allocator.h
+#usr/include/c++/4.9.3/ext/type_traits.h
+#usr/include/c++/4.9.3/ext/typelist.h
+#usr/include/c++/4.9.3/ext/vstring.h
+#usr/include/c++/4.9.3/ext/vstring.tcc
+#usr/include/c++/4.9.3/ext/vstring_fwd.h
+#usr/include/c++/4.9.3/ext/vstring_util.h
+#usr/include/c++/4.9.3/fenv.h
+#usr/include/c++/4.9.3/forward_list
+#usr/include/c++/4.9.3/fstream
+#usr/include/c++/4.9.3/functional
+#usr/include/c++/4.9.3/future
+#usr/include/c++/4.9.3/i586-pc-linux-gnu
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/atomic_word.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/basic_file.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/c++allocator.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/c++config.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/c++io.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/c++locale.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/cpu_defines.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/ctype_base.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/ctype_inline.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/cxxabi_tweaks.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/error_constants.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/extc++.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/gthr-default.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/gthr-posix.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/gthr-single.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/gthr.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/messages_members.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/opt_random.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/os_defines.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/stdc++.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/stdtr1c++.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/bits/time_members.h
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/ext
+#usr/include/c++/4.9.3/i586-pc-linux-gnu/ext/opt_random.h
+#usr/include/c++/4.9.3/initializer_list
+#usr/include/c++/4.9.3/iomanip
+#usr/include/c++/4.9.3/ios
+#usr/include/c++/4.9.3/iosfwd
+#usr/include/c++/4.9.3/iostream
+#usr/include/c++/4.9.3/istream
+#usr/include/c++/4.9.3/iterator
+#usr/include/c++/4.9.3/limits
+#usr/include/c++/4.9.3/list
+#usr/include/c++/4.9.3/locale
+#usr/include/c++/4.9.3/map
+#usr/include/c++/4.9.3/memory
+#usr/include/c++/4.9.3/mutex
+#usr/include/c++/4.9.3/new
+#usr/include/c++/4.9.3/numeric
+#usr/include/c++/4.9.3/ostream
+#usr/include/c++/4.9.3/parallel
+#usr/include/c++/4.9.3/parallel/algo.h
+#usr/include/c++/4.9.3/parallel/algobase.h
+#usr/include/c++/4.9.3/parallel/algorithm
+#usr/include/c++/4.9.3/parallel/algorithmfwd.h
+#usr/include/c++/4.9.3/parallel/balanced_quicksort.h
+#usr/include/c++/4.9.3/parallel/base.h
+#usr/include/c++/4.9.3/parallel/basic_iterator.h
+#usr/include/c++/4.9.3/parallel/checkers.h
+#usr/include/c++/4.9.3/parallel/compatibility.h
+#usr/include/c++/4.9.3/parallel/compiletime_settings.h
+#usr/include/c++/4.9.3/parallel/equally_split.h
+#usr/include/c++/4.9.3/parallel/features.h
+#usr/include/c++/4.9.3/parallel/find.h
+#usr/include/c++/4.9.3/parallel/find_selectors.h
+#usr/include/c++/4.9.3/parallel/for_each.h
+#usr/include/c++/4.9.3/parallel/for_each_selectors.h
+#usr/include/c++/4.9.3/parallel/iterator.h
+#usr/include/c++/4.9.3/parallel/list_partition.h
+#usr/include/c++/4.9.3/parallel/losertree.h
+#usr/include/c++/4.9.3/parallel/merge.h
+#usr/include/c++/4.9.3/parallel/multiseq_selection.h
+#usr/include/c++/4.9.3/parallel/multiway_merge.h
+#usr/include/c++/4.9.3/parallel/multiway_mergesort.h
+#usr/include/c++/4.9.3/parallel/numeric
+#usr/include/c++/4.9.3/parallel/numericfwd.h
+#usr/include/c++/4.9.3/parallel/omp_loop.h
+#usr/include/c++/4.9.3/parallel/omp_loop_static.h
+#usr/include/c++/4.9.3/parallel/par_loop.h
+#usr/include/c++/4.9.3/parallel/parallel.h
+#usr/include/c++/4.9.3/parallel/partial_sum.h
+#usr/include/c++/4.9.3/parallel/partition.h
+#usr/include/c++/4.9.3/parallel/queue.h
+#usr/include/c++/4.9.3/parallel/quicksort.h
+#usr/include/c++/4.9.3/parallel/random_number.h
+#usr/include/c++/4.9.3/parallel/random_shuffle.h
+#usr/include/c++/4.9.3/parallel/search.h
+#usr/include/c++/4.9.3/parallel/set_operations.h
+#usr/include/c++/4.9.3/parallel/settings.h
+#usr/include/c++/4.9.3/parallel/sort.h
+#usr/include/c++/4.9.3/parallel/tags.h
+#usr/include/c++/4.9.3/parallel/types.h
+#usr/include/c++/4.9.3/parallel/unique_copy.h
+#usr/include/c++/4.9.3/parallel/workstealing.h
+#usr/include/c++/4.9.3/profile
+#usr/include/c++/4.9.3/profile/array
+#usr/include/c++/4.9.3/profile/base.h
+#usr/include/c++/4.9.3/profile/bitset
+#usr/include/c++/4.9.3/profile/deque
+#usr/include/c++/4.9.3/profile/forward_list
+#usr/include/c++/4.9.3/profile/impl
+#usr/include/c++/4.9.3/profile/impl/profiler.h
+#usr/include/c++/4.9.3/profile/impl/profiler_algos.h
+#usr/include/c++/4.9.3/profile/impl/profiler_container_size.h
+#usr/include/c++/4.9.3/profile/impl/profiler_hash_func.h
+#usr/include/c++/4.9.3/profile/impl/profiler_hashtable_size.h
+#usr/include/c++/4.9.3/profile/impl/profiler_list_to_slist.h
+#usr/include/c++/4.9.3/profile/impl/profiler_list_to_vector.h
+#usr/include/c++/4.9.3/profile/impl/profiler_map_to_unordered_map.h
+#usr/include/c++/4.9.3/profile/impl/profiler_node.h
+#usr/include/c++/4.9.3/profile/impl/profiler_state.h
+#usr/include/c++/4.9.3/profile/impl/profiler_trace.h
+#usr/include/c++/4.9.3/profile/impl/profiler_vector_size.h
+#usr/include/c++/4.9.3/profile/impl/profiler_vector_to_list.h
+#usr/include/c++/4.9.3/profile/iterator_tracker.h
+#usr/include/c++/4.9.3/profile/list
+#usr/include/c++/4.9.3/profile/map
+#usr/include/c++/4.9.3/profile/map.h
+#usr/include/c++/4.9.3/profile/multimap.h
+#usr/include/c++/4.9.3/profile/multiset.h
+#usr/include/c++/4.9.3/profile/set
+#usr/include/c++/4.9.3/profile/set.h
+#usr/include/c++/4.9.3/profile/unordered_base.h
+#usr/include/c++/4.9.3/profile/unordered_map
+#usr/include/c++/4.9.3/profile/unordered_set
+#usr/include/c++/4.9.3/profile/vector
+#usr/include/c++/4.9.3/queue
+#usr/include/c++/4.9.3/random
+#usr/include/c++/4.9.3/ratio
+#usr/include/c++/4.9.3/regex
+#usr/include/c++/4.9.3/scoped_allocator
+#usr/include/c++/4.9.3/set
+#usr/include/c++/4.9.3/shared_mutex
+#usr/include/c++/4.9.3/sstream
+#usr/include/c++/4.9.3/stack
+#usr/include/c++/4.9.3/stdexcept
+#usr/include/c++/4.9.3/streambuf
+#usr/include/c++/4.9.3/string
+#usr/include/c++/4.9.3/system_error
+#usr/include/c++/4.9.3/tgmath.h
+#usr/include/c++/4.9.3/thread
+#usr/include/c++/4.9.3/tr1
+#usr/include/c++/4.9.3/tr1/array
+#usr/include/c++/4.9.3/tr1/bessel_function.tcc
+#usr/include/c++/4.9.3/tr1/beta_function.tcc
+#usr/include/c++/4.9.3/tr1/ccomplex
+#usr/include/c++/4.9.3/tr1/cctype
+#usr/include/c++/4.9.3/tr1/cfenv
+#usr/include/c++/4.9.3/tr1/cfloat
+#usr/include/c++/4.9.3/tr1/cinttypes
+#usr/include/c++/4.9.3/tr1/climits
+#usr/include/c++/4.9.3/tr1/cmath
+#usr/include/c++/4.9.3/tr1/complex
+#usr/include/c++/4.9.3/tr1/complex.h
+#usr/include/c++/4.9.3/tr1/cstdarg
+#usr/include/c++/4.9.3/tr1/cstdbool
+#usr/include/c++/4.9.3/tr1/cstdint
+#usr/include/c++/4.9.3/tr1/cstdio
+#usr/include/c++/4.9.3/tr1/cstdlib
+#usr/include/c++/4.9.3/tr1/ctgmath
+#usr/include/c++/4.9.3/tr1/ctime
+#usr/include/c++/4.9.3/tr1/ctype.h
+#usr/include/c++/4.9.3/tr1/cwchar
+#usr/include/c++/4.9.3/tr1/cwctype
+#usr/include/c++/4.9.3/tr1/ell_integral.tcc
+#usr/include/c++/4.9.3/tr1/exp_integral.tcc
+#usr/include/c++/4.9.3/tr1/fenv.h
+#usr/include/c++/4.9.3/tr1/float.h
+#usr/include/c++/4.9.3/tr1/functional
+#usr/include/c++/4.9.3/tr1/functional_hash.h
+#usr/include/c++/4.9.3/tr1/gamma.tcc
+#usr/include/c++/4.9.3/tr1/hashtable.h
+#usr/include/c++/4.9.3/tr1/hashtable_policy.h
+#usr/include/c++/4.9.3/tr1/hypergeometric.tcc
+#usr/include/c++/4.9.3/tr1/inttypes.h
+#usr/include/c++/4.9.3/tr1/legendre_function.tcc
+#usr/include/c++/4.9.3/tr1/limits.h
+#usr/include/c++/4.9.3/tr1/math.h
+#usr/include/c++/4.9.3/tr1/memory
+#usr/include/c++/4.9.3/tr1/modified_bessel_func.tcc
+#usr/include/c++/4.9.3/tr1/poly_hermite.tcc
+#usr/include/c++/4.9.3/tr1/poly_laguerre.tcc
+#usr/include/c++/4.9.3/tr1/random
+#usr/include/c++/4.9.3/tr1/random.h
+#usr/include/c++/4.9.3/tr1/random.tcc
+#usr/include/c++/4.9.3/tr1/regex
+#usr/include/c++/4.9.3/tr1/riemann_zeta.tcc
+#usr/include/c++/4.9.3/tr1/shared_ptr.h
+#usr/include/c++/4.9.3/tr1/special_function_util.h
+#usr/include/c++/4.9.3/tr1/stdarg.h
+#usr/include/c++/4.9.3/tr1/stdbool.h
+#usr/include/c++/4.9.3/tr1/stdint.h
+#usr/include/c++/4.9.3/tr1/stdio.h
+#usr/include/c++/4.9.3/tr1/stdlib.h
+#usr/include/c++/4.9.3/tr1/tgmath.h
+#usr/include/c++/4.9.3/tr1/tuple
+#usr/include/c++/4.9.3/tr1/type_traits
+#usr/include/c++/4.9.3/tr1/unordered_map
+#usr/include/c++/4.9.3/tr1/unordered_map.h
+#usr/include/c++/4.9.3/tr1/unordered_set
+#usr/include/c++/4.9.3/tr1/unordered_set.h
+#usr/include/c++/4.9.3/tr1/utility
+#usr/include/c++/4.9.3/tr1/wchar.h
+#usr/include/c++/4.9.3/tr1/wctype.h
+#usr/include/c++/4.9.3/tr2
+#usr/include/c++/4.9.3/tr2/bool_set
+#usr/include/c++/4.9.3/tr2/bool_set.tcc
+#usr/include/c++/4.9.3/tr2/dynamic_bitset
+#usr/include/c++/4.9.3/tr2/dynamic_bitset.tcc
+#usr/include/c++/4.9.3/tr2/ratio
+#usr/include/c++/4.9.3/tr2/type_traits
+#usr/include/c++/4.9.3/tuple
+#usr/include/c++/4.9.3/type_traits
+#usr/include/c++/4.9.3/typeindex
+#usr/include/c++/4.9.3/typeinfo
+#usr/include/c++/4.9.3/unordered_map
+#usr/include/c++/4.9.3/unordered_set
+#usr/include/c++/4.9.3/utility
+#usr/include/c++/4.9.3/valarray
+#usr/include/c++/4.9.3/vector
 #usr/lib/gcc
 #usr/lib/gcc/i586-pc-linux-gnu
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/cc1
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/cc1plus
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/collect2
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/crtbegin.o
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/crtbeginS.o
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/crtbeginT.o
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/crtend.o
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/crtendS.o
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/crtfastmath.o
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/crtprec32.o
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/crtprec64.o
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/crtprec80.o
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/finclude
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include-fixed
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include-fixed/README
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include-fixed/limits.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include-fixed/syslimits.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/ammintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/avxintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/bmmintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/cpuid.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/cross-stdarg.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/emmintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/float.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/immintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/iso646.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/mf-runtime.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/mm3dnow.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/mm_malloc.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/mmintrin-common.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/mmintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/nmmintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/omp.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/pmmintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/smmintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/ssp
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/ssp/ssp.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/ssp/stdio.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/ssp/string.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/ssp/unistd.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/stdarg.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/stdbool.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/stddef.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/stdfix.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/tmmintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/unwind.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/varargs.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/wmmintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/x86intrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/include/xmmintrin.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/fixinc.sh
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/fixinc_list
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/fixincl
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/gsyslimits.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/include
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/include/README
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/include/limits.h
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/macro_list
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/mkheaders
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/mkheaders.conf
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/install-tools/mkinstalldirs
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/libgcc.a
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/libgcc_eh.a
-#usr/lib/gcc/i586-pc-linux-gnu/4.4.7/libgcov.a
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/cc1
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/cc1plus
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/collect2
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/crtbegin.o
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/crtbeginS.o
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/crtbeginT.o
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/crtend.o
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/crtendS.o
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/crtfastmath.o
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/crtprec32.o
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/crtprec64.o
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/crtprec80.o
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/finclude
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include-fixed
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include-fixed/README
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include-fixed/limits.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include-fixed/syslimits.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/adxintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/ammintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/avx2intrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/avx512cdintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/avx512erintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/avx512fintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/avx512pfintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/avxintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/bmi2intrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/bmiintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/bmmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/cilk.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/cilk_api.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/cilk_api_linux.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/cilk_stub.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/cilk_undocumented.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/common.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/holder.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/hyperobject_base.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/metaprogramming.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_file.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_list.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_max.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_min.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_min_max.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_opadd.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_opand.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_opmul.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_opor.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_opxor.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_ostream.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cilk/reducer_string.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cpuid.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/cross-stdarg.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/emmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/f16cintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/float.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/fma4intrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/fmaintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/fxsrintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/ia32intrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/immintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/iso646.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/lwpintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/lzcntintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/mm3dnow.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/mm_malloc.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/mmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/nmmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/omp.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/pmmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/popcntintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/prfchwintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/quadmath.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/quadmath_weak.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/rdseedintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/rtmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/sanitizer
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/sanitizer/asan_interface.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/sanitizer/common_interface_defs.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/sanitizer/lsan_interface.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/shaintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/smmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/ssp
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/ssp/ssp.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/ssp/stdio.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/ssp/string.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/ssp/unistd.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/stdalign.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/stdarg.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/stdatomic.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/stdbool.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/stddef.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/stdfix.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/stdint-gcc.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/stdint.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/stdnoreturn.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/tbmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/tmmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/unwind.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/varargs.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/wmmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/x86intrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/xmmintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/xopintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/xsaveintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/xsaveoptintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/include/xtestintrin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/fixinc.sh
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/fixinc_list
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/fixincl
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/gsyslimits.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/include
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/include/README
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/include/limits.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/macro_list
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/mkheaders
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/mkheaders.conf
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/install-tools/mkinstalldirs
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/libgcc.a
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/libgcc_eh.a
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/libgcov.a
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/liblto_plugin.la
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/liblto_plugin.so
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/liblto_plugin.so.0
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/liblto_plugin.so.0.0.0
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/lto-wrapper
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/lto1
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/gengtype
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/gtype.state
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ada
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ada/gcc-interface
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ada/gcc-interface/ada-tree.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/alias.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/all-tree.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/alloc-pool.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ansidecl.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/attribs.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/auto-host.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/b-header-vars
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/basic-block.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/bitmap.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/builtins.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/bversion.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/c-family
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/c-family/c-common.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/c-family/c-common.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/c-family/c-objc.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/c-family/c-pragma.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/c-family/c-pretty-print.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/c-tree.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/calls.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cfg-flags.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cfgexpand.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cfghooks.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cfgloop.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cgraph.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cif-code.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cilk-builtins.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cilkplus.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/dbxelf.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/elfos.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/glibc-stdint.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/gnu-user.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/att.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/gnu-user-common.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/gnu-user.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/i386-opts.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/i386-protos.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/i386.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/linux-common.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/linux.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/stringop.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/unix.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/i386/x86-tune.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/initfini-array.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/linux-android.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/linux-protos.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/linux.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/config/vxworks-dummy.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/configargs.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/context.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/coretypes.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cp
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cp/cp-tree.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cp/cp-tree.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cp/cxx-pretty-print.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cp/name-lookup.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cp/type-utils.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cppdefault.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/cpplib.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/debug.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/defaults.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/df.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/diagnostic-color.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/diagnostic-core.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/diagnostic.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/diagnostic.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/double-int.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/dumpfile.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/emit-rtl.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/except.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/filenames.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/fixed-value.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/flag-types.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/flags.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/fold-const.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/function.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gcc-plugin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gcc-symtab.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/genrtl.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ggc.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimple-builder.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimple-expr.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimple-fold.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimple-iterator.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimple-low.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimple-pretty-print.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimple-ssa.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimple-walk.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimple.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimple.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimplify-me.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gimplify.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gsstruct.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gtm-builtins.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/gtype-desc.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/hard-reg-set.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/hash-table.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/hashtab.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/highlev-plugin-common.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/hwint.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/incpath.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/input.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/insn-codes.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/insn-constants.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/insn-flags.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/insn-modes.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/insn-notes.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/internal-fn.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/internal-fn.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/intl.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ipa-prop.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ipa-ref-inline.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ipa-ref.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ipa-reference.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ipa-utils.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/is-a.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/java
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/java/java-tree.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/langhooks.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/libiberty.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/line-map.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/machmode.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/md5.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/mode-classes.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/objc
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/objc/objc-tree.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/obstack.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/omp-builtins.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/options.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/opts.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/output.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/params.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/params.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/pass-instances.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/pass_manager.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/plugin-api.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/plugin-version.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/plugin.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/plugin.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/pointer-set.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/predict.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/predict.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/prefix.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/pretty-print.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/print-rtl.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/print-tree.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/real.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/realmpfr.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/reg-notes.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/regset.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/resource.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/rtl.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/rtl.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/safe-ctype.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/sanitizer.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/sbitmap.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/splay-tree.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/ssa-iterators.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/statistics.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/stmt.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/stor-layout.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/stringpool.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/symtab.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/sync-builtins.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/system.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/target-hooks-macros.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/target.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/target.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/timevar.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/timevar.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tm-preds.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tm.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tm_p.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/toplev.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-cfg.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-cfgcleanup.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-check.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-core.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-dfa.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-dump.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-eh.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-hasher.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-inline.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-into-ssa.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-iterator.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-nested.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-object-size.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-outof-ssa.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-parloops.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-pass.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-phinodes.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-pretty-print.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-address.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-alias.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-coalesce.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-dom.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-loop-ivopts.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-loop-manip.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-loop-niter.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-loop.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-operands.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-sccvn.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-ter.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-threadedge.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa-threadupdate.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssa.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree-ssanames.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/tree.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/treestruct.def
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/varasm.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/vec.h
+#usr/lib/gcc/i586-pc-linux-gnu/4.9.3/plugin/include/version.h
+#usr/lib/libasan.a
+#usr/lib/libasan.la
+#usr/lib/libasan.so
+usr/lib/libasan.so.1
+usr/lib/libasan.so.1.0.0
+usr/lib/libasan_preinit.o
+#usr/lib/libatomic.a
+#usr/lib/libatomic.la
+usr/lib/libatomic.so
+usr/lib/libatomic.so.1
+usr/lib/libatomic.so.1.1.0
+#usr/lib/libcilkrts.a
+#usr/lib/libcilkrts.la
+#usr/lib/libcilkrts.so
+usr/lib/libcilkrts.so.5
+usr/lib/libcilkrts.so.5.0.0
+#usr/lib/libcilkrts.spec
 #usr/lib/libgomp.a
 #usr/lib/libgomp.la
 #usr/lib/libgomp.so
 usr/lib/libgomp.so.1
 usr/lib/libgomp.so.1.0.0
 #usr/lib/libgomp.spec
-#usr/lib/libmudflap.a
-#usr/lib/libmudflap.la
-#usr/lib/libmudflap.so
-usr/lib/libmudflap.so.0
-usr/lib/libmudflap.so.0.0.0
-#usr/lib/libmudflapth.a
-#usr/lib/libmudflapth.la
-#usr/lib/libmudflapth.so
-usr/lib/libmudflapth.so.0
-usr/lib/libmudflapth.so.0.0.0
+#usr/lib/libitm.a
+#usr/lib/libitm.la
+#usr/lib/libitm.so
+usr/lib/libitm.so.1
+usr/lib/libitm.so.1.0.0
+#usr/lib/libitm.spec
+#usr/lib/libquadmath.a
+#usr/lib/libquadmath.la
+#usr/lib/libquadmath.so
+usr/lib/libquadmath.so.0
+usr/lib/libquadmath.so.0.0.0
+#usr/lib/libsanitizer.spec
 #usr/lib/libssp.a
 #usr/lib/libssp.la
 #usr/lib/libssp.so
@@ -786,16 +1136,39 @@ usr/lib/libssp.so.0.0.0
 #usr/lib/libssp_nonshared.a
 #usr/lib/libssp_nonshared.la
 #usr/lib/libstdc++.a
-usr/lib/libstdc++.so.6.0.13
+usr/lib/libstdc++.so.6.0.20
+#usr/lib/libstdc++.so.6.0.20-gdb.py
 #usr/lib/libsupc++.a
 #usr/lib/libsupc++.la
-#usr/man
-#usr/man/man1
-#usr/man/man1/cpp.1
-#usr/man/man1/g++.1
-#usr/man/man1/gcc.1
-#usr/man/man1/gcov.1
-#usr/man/man7
-#usr/man/man7/fsf-funding.7
-#usr/man/man7/gfdl.7
-#usr/man/man7/gpl.7
+#usr/lib/libubsan.a
+#usr/lib/libubsan.la
+#usr/lib/libubsan.so
+usr/lib/libubsan.so.0
+usr/lib/libubsan.so.0.0.0
+#usr/lib/libvtv.a
+#usr/lib/libvtv.la
+#usr/lib/libvtv.so
+usr/lib/libvtv.so.0
+usr/lib/libvtv.so.0.0.0
+#usr/share/gcc-4.9.3
+#usr/share/gcc-4.9.3/python
+#usr/share/gcc-4.9.3/python/libstdcxx
+#usr/share/gcc-4.9.3/python/libstdcxx/__init__.py
+#usr/share/gcc-4.9.3/python/libstdcxx/v6
+#usr/share/gcc-4.9.3/python/libstdcxx/v6/__init__.py
+#usr/share/gcc-4.9.3/python/libstdcxx/v6/printers.py
+#usr/share/info/cpp.info
+#usr/share/info/cppinternals.info
+#usr/share/info/gcc.info
+#usr/share/info/gccinstall.info
+#usr/share/info/gccint.info
+#usr/share/info/libgomp.info
+#usr/share/info/libitm.info
+#usr/share/info/libquadmath.info
+#usr/share/man/man1/cpp.1
+#usr/share/man/man1/g++.1
+#usr/share/man/man1/gcc.1
+#usr/share/man/man1/gcov.1
+#usr/share/man/man7/fsf-funding.7
+#usr/share/man/man7/gfdl.7
+#usr/share/man/man7/gpl.7
index aabc8a68c3c1695b0e891994bc96001496b4a114..80ae0dd2d762a3fad31bf5613775bb55fc766bd7 100644 (file)
@@ -27,6 +27,7 @@ etc/rc.d/init.d/console
 #etc/rc.d/init.d/cyrus-sasl
 etc/rc.d/init.d/dhcp
 etc/rc.d/init.d/dhcrelay
+#etc/rc.d/init.d/dnsdist
 etc/rc.d/init.d/dnsmasq
 etc/rc.d/init.d/fcron
 #etc/rc.d/init.d/fetchmail
diff --git a/config/rootfiles/common/libmpc b/config/rootfiles/common/libmpc
new file mode 100644 (file)
index 0000000..c8684ce
--- /dev/null
@@ -0,0 +1,7 @@
+#usr/include/mpc.h
+#usr/lib/libmpc.a
+#usr/lib/libmpc.la
+#usr/lib/libmpc.so
+usr/lib/libmpc.so.3
+usr/lib/libmpc.so.3.0.0
+#usr/share/info/mpc.info
diff --git a/config/rootfiles/common/lua b/config/rootfiles/common/lua
new file mode 100644 (file)
index 0000000..15d5995
--- /dev/null
@@ -0,0 +1,14 @@
+usr/bin/lua
+usr/bin/luac
+#usr/include/lauxlib.h
+#usr/include/lua.h
+#usr/include/lua.hpp
+#usr/include/luaconf.h
+#usr/include/lualib.h
+usr/lib/liblua-5.3.so
+#usr/lib/liblua.a
+#usr/lib/liblua.la
+usr/lib/liblua.so
+#usr/lib/pkgconfig/lua.pc
+#usr/share/man/man1/lua.1
+#usr/share/man/man1/luac.1
index 46b3bd9c967078a9cda4d75e2eff69fe7eef0326..da434e92df6f40d3339969cec1b31c09cf6be8e2 100644 (file)
@@ -77,6 +77,8 @@ usr/lib/libtic.so.5.9
 usr/lib/libtinfo.so.5
 usr/lib/libtinfo.so.5.9
 #usr/lib/terminfo
+#usr/man
+#usr/man/man1
 #usr/man/man1/captoinfo.1m
 #usr/man/man1/clear.1
 #usr/man/man1/infocmp.1m
@@ -941,6 +943,7 @@ usr/lib/libtinfo.so.5.9
 #usr/man/man5
 #usr/man/man5/term.5
 #usr/man/man5/terminfo.5
+#usr/man/man7
 #usr/man/man7/term.7
 #usr/share/tabset
 #usr/share/tabset/std
index c6b95a56b91cabe9201c338e5c310020449057ed..fd1262e9bdc531151a003ae0da9faba88e421fe9 100644 (file)
@@ -10,6 +10,7 @@ usr/bin/ntpd
 usr/bin/ntpdate
 usr/bin/ntpdc
 usr/bin/ntpq
+#usr/bin/ntpsnmpd
 usr/bin/ntptime
 usr/bin/ntptrace
 usr/bin/sntp
@@ -276,6 +277,7 @@ usr/bin/update-leap
 #usr/share/man/man1/ntpdc.1
 #usr/share/man/man1/ntpq.1
 #usr/share/man/man1/ntptrace.1
+#usr/share/man/man1/ntpsnmpd.1
 #usr/share/man/man1/sntp.1
 #usr/share/man/man1/update-leap.1
 #usr/share/man/man5/ntp.conf.5
index 5b763fd874749b6f5c04e57f5f1b59d1cc8f3ad3..07446b73b175ef5d7222af27b5cc2db556f3c4ac 100644 (file)
@@ -22,6 +22,7 @@ etc/mime.types
 etc/modprobe.d
 etc/modprobe.d/btmrvl_sdio.conf
 etc/modprobe.d/cfg80211.conf
+etc/modprobe.d/nf_conntrack.conf
 etc/modprobe.d/pcspeaker.conf
 etc/modules.conf
 etc/mtab
index ce6a6fe4c27f180b0643f2e082e2028f62983143..b1f819c9cf2698f31940753edf83a3358644c6ac 100644 (file)
 #usr/lib/ldscripts/i386linux.xn
 #usr/lib/ldscripts/i386linux.xr
 #usr/lib/ldscripts/i386linux.xu
-#usr/lib/libbfd-2.22.so
+#usr/lib/libbfd-2.24.so
 #usr/lib/libbfd.a
 #usr/lib/libbfd.la
 #usr/lib/libbfd.so
 #usr/lib/libiberty.a
-#usr/lib/libopcodes-2.22.so
+#usr/lib/libopcodes-2.24.so
 #usr/lib/libopcodes.a
 #usr/lib/libopcodes.la
 #usr/lib/libopcodes.so
index 3c1a63f74d30070d92e6cedb26ee0206cd2f844d..e378d930bcf010be0f64ec3879df56d90f11718d 100644 (file)
 #usr/bin/cpp
 #usr/bin/g++
 #usr/bin/gcc
-#usr/bin/gccbug
+#usr/bin/gcc-ar
+#usr/bin/gcc-nm
+#usr/bin/gcc-ranlib
 #usr/bin/gcov
 #usr/bin/x86_64-unknown-linux-gnu-c++
 #usr/bin/x86_64-unknown-linux-gnu-g++
 #usr/bin/x86_64-unknown-linux-gnu-gcc
-#usr/bin/x86_64-unknown-linux-gnu-gcc-4.4.7
+#usr/bin/x86_64-unknown-linux-gnu-gcc-4.9.3
+#usr/bin/x86_64-unknown-linux-gnu-gcc-ar
+#usr/bin/x86_64-unknown-linux-gnu-gcc-nm
+#usr/bin/x86_64-unknown-linux-gnu-gcc-ranlib
 #usr/include/c++
-#usr/include/c++/4.4.7
-#usr/include/c++/4.4.7/algorithm
-#usr/include/c++/4.4.7/array
-#usr/include/c++/4.4.7/backward
-#usr/include/c++/4.4.7/backward/auto_ptr.h
-#usr/include/c++/4.4.7/backward/backward_warning.h
-#usr/include/c++/4.4.7/backward/binders.h
-#usr/include/c++/4.4.7/backward/hash_fun.h
-#usr/include/c++/4.4.7/backward/hash_map
-#usr/include/c++/4.4.7/backward/hash_set
-#usr/include/c++/4.4.7/backward/hashtable.h
-#usr/include/c++/4.4.7/backward/strstream
-#usr/include/c++/4.4.7/bits
-#usr/include/c++/4.4.7/bits/algorithmfwd.h
-#usr/include/c++/4.4.7/bits/allocator.h
-#usr/include/c++/4.4.7/bits/atomic_0.h
-#usr/include/c++/4.4.7/bits/atomic_2.h
-#usr/include/c++/4.4.7/bits/atomicfwd_c.h
-#usr/include/c++/4.4.7/bits/atomicfwd_cxx.h
-#usr/include/c++/4.4.7/bits/basic_ios.h
-#usr/include/c++/4.4.7/bits/basic_ios.tcc
-#usr/include/c++/4.4.7/bits/basic_string.h
-#usr/include/c++/4.4.7/bits/basic_string.tcc
-#usr/include/c++/4.4.7/bits/boost_concept_check.h
-#usr/include/c++/4.4.7/bits/char_traits.h
-#usr/include/c++/4.4.7/bits/cmath.tcc
-#usr/include/c++/4.4.7/bits/codecvt.h
-#usr/include/c++/4.4.7/bits/concept_check.h
-#usr/include/c++/4.4.7/bits/cpp_type_traits.h
-#usr/include/c++/4.4.7/bits/deque.tcc
-#usr/include/c++/4.4.7/bits/forward_list.h
-#usr/include/c++/4.4.7/bits/forward_list.tcc
-#usr/include/c++/4.4.7/bits/fstream.tcc
-#usr/include/c++/4.4.7/bits/functexcept.h
-#usr/include/c++/4.4.7/bits/functional_hash.h
-#usr/include/c++/4.4.7/bits/gslice.h
-#usr/include/c++/4.4.7/bits/gslice_array.h
-#usr/include/c++/4.4.7/bits/hashtable.h
-#usr/include/c++/4.4.7/bits/indirect_array.h
-#usr/include/c++/4.4.7/bits/ios_base.h
-#usr/include/c++/4.4.7/bits/istream.tcc
-#usr/include/c++/4.4.7/bits/list.tcc
-#usr/include/c++/4.4.7/bits/locale_classes.h
-#usr/include/c++/4.4.7/bits/locale_classes.tcc
-#usr/include/c++/4.4.7/bits/locale_facets.h
-#usr/include/c++/4.4.7/bits/locale_facets.tcc
-#usr/include/c++/4.4.7/bits/locale_facets_nonio.h
-#usr/include/c++/4.4.7/bits/locale_facets_nonio.tcc
-#usr/include/c++/4.4.7/bits/localefwd.h
-#usr/include/c++/4.4.7/bits/mask_array.h
-#usr/include/c++/4.4.7/bits/move.h
-#usr/include/c++/4.4.7/bits/ostream.tcc
-#usr/include/c++/4.4.7/bits/ostream_insert.h
-#usr/include/c++/4.4.7/bits/postypes.h
-#usr/include/c++/4.4.7/bits/shared_ptr.h
-#usr/include/c++/4.4.7/bits/slice_array.h
-#usr/include/c++/4.4.7/bits/sstream.tcc
-#usr/include/c++/4.4.7/bits/stl_algo.h
-#usr/include/c++/4.4.7/bits/stl_algobase.h
-#usr/include/c++/4.4.7/bits/stl_bvector.h
-#usr/include/c++/4.4.7/bits/stl_construct.h
-#usr/include/c++/4.4.7/bits/stl_deque.h
-#usr/include/c++/4.4.7/bits/stl_function.h
-#usr/include/c++/4.4.7/bits/stl_heap.h
-#usr/include/c++/4.4.7/bits/stl_iterator.h
-#usr/include/c++/4.4.7/bits/stl_iterator_base_funcs.h
-#usr/include/c++/4.4.7/bits/stl_iterator_base_types.h
-#usr/include/c++/4.4.7/bits/stl_list.h
-#usr/include/c++/4.4.7/bits/stl_map.h
-#usr/include/c++/4.4.7/bits/stl_multimap.h
-#usr/include/c++/4.4.7/bits/stl_multiset.h
-#usr/include/c++/4.4.7/bits/stl_numeric.h
-#usr/include/c++/4.4.7/bits/stl_pair.h
-#usr/include/c++/4.4.7/bits/stl_queue.h
-#usr/include/c++/4.4.7/bits/stl_raw_storage_iter.h
-#usr/include/c++/4.4.7/bits/stl_relops.h
-#usr/include/c++/4.4.7/bits/stl_set.h
-#usr/include/c++/4.4.7/bits/stl_stack.h
-#usr/include/c++/4.4.7/bits/stl_tempbuf.h
-#usr/include/c++/4.4.7/bits/stl_tree.h
-#usr/include/c++/4.4.7/bits/stl_uninitialized.h
-#usr/include/c++/4.4.7/bits/stl_vector.h
-#usr/include/c++/4.4.7/bits/stream_iterator.h
-#usr/include/c++/4.4.7/bits/streambuf.tcc
-#usr/include/c++/4.4.7/bits/streambuf_iterator.h
-#usr/include/c++/4.4.7/bits/stringfwd.h
-#usr/include/c++/4.4.7/bits/unique_ptr.h
-#usr/include/c++/4.4.7/bits/valarray_after.h
-#usr/include/c++/4.4.7/bits/valarray_array.h
-#usr/include/c++/4.4.7/bits/valarray_array.tcc
-#usr/include/c++/4.4.7/bits/valarray_before.h
-#usr/include/c++/4.4.7/bits/vector.tcc
-#usr/include/c++/4.4.7/bitset
-#usr/include/c++/4.4.7/c++0x_warning.h
-#usr/include/c++/4.4.7/cassert
-#usr/include/c++/4.4.7/ccomplex
-#usr/include/c++/4.4.7/cctype
-#usr/include/c++/4.4.7/cerrno
-#usr/include/c++/4.4.7/cfenv
-#usr/include/c++/4.4.7/cfloat
-#usr/include/c++/4.4.7/chrono
-#usr/include/c++/4.4.7/cinttypes
-#usr/include/c++/4.4.7/ciso646
-#usr/include/c++/4.4.7/climits
-#usr/include/c++/4.4.7/clocale
-#usr/include/c++/4.4.7/cmath
-#usr/include/c++/4.4.7/complex
-#usr/include/c++/4.4.7/complex.h
-#usr/include/c++/4.4.7/condition_variable
-#usr/include/c++/4.4.7/csetjmp
-#usr/include/c++/4.4.7/csignal
-#usr/include/c++/4.4.7/cstdarg
-#usr/include/c++/4.4.7/cstdatomic
-#usr/include/c++/4.4.7/cstdbool
-#usr/include/c++/4.4.7/cstddef
-#usr/include/c++/4.4.7/cstdint
-#usr/include/c++/4.4.7/cstdio
-#usr/include/c++/4.4.7/cstdlib
-#usr/include/c++/4.4.7/cstring
-#usr/include/c++/4.4.7/ctgmath
-#usr/include/c++/4.4.7/ctime
-#usr/include/c++/4.4.7/cwchar
-#usr/include/c++/4.4.7/cwctype
-#usr/include/c++/4.4.7/cxxabi-forced.h
-#usr/include/c++/4.4.7/cxxabi.h
-#usr/include/c++/4.4.7/debug
-#usr/include/c++/4.4.7/debug/bitset
-#usr/include/c++/4.4.7/debug/debug.h
-#usr/include/c++/4.4.7/debug/deque
-#usr/include/c++/4.4.7/debug/formatter.h
-#usr/include/c++/4.4.7/debug/functions.h
-#usr/include/c++/4.4.7/debug/list
-#usr/include/c++/4.4.7/debug/macros.h
-#usr/include/c++/4.4.7/debug/map
-#usr/include/c++/4.4.7/debug/map.h
-#usr/include/c++/4.4.7/debug/multimap.h
-#usr/include/c++/4.4.7/debug/multiset.h
-#usr/include/c++/4.4.7/debug/safe_base.h
-#usr/include/c++/4.4.7/debug/safe_iterator.h
-#usr/include/c++/4.4.7/debug/safe_iterator.tcc
-#usr/include/c++/4.4.7/debug/safe_sequence.h
-#usr/include/c++/4.4.7/debug/set
-#usr/include/c++/4.4.7/debug/set.h
-#usr/include/c++/4.4.7/debug/string
-#usr/include/c++/4.4.7/debug/unordered_map
-#usr/include/c++/4.4.7/debug/unordered_set
-#usr/include/c++/4.4.7/debug/vector
-#usr/include/c++/4.4.7/deque
-#usr/include/c++/4.4.7/exception
-#usr/include/c++/4.4.7/exception_defines.h
-#usr/include/c++/4.4.7/exception_ptr.h
-#usr/include/c++/4.4.7/ext
-#usr/include/c++/4.4.7/ext/algorithm
-#usr/include/c++/4.4.7/ext/array_allocator.h
-#usr/include/c++/4.4.7/ext/atomicity.h
-#usr/include/c++/4.4.7/ext/bitmap_allocator.h
-#usr/include/c++/4.4.7/ext/cast.h
-#usr/include/c++/4.4.7/ext/codecvt_specializations.h
-#usr/include/c++/4.4.7/ext/concurrence.h
-#usr/include/c++/4.4.7/ext/debug_allocator.h
-#usr/include/c++/4.4.7/ext/enc_filebuf.h
-#usr/include/c++/4.4.7/ext/extptr_allocator.h
-#usr/include/c++/4.4.7/ext/functional
-#usr/include/c++/4.4.7/ext/hash_map
-#usr/include/c++/4.4.7/ext/hash_set
-#usr/include/c++/4.4.7/ext/iterator
-#usr/include/c++/4.4.7/ext/malloc_allocator.h
-#usr/include/c++/4.4.7/ext/memory
-#usr/include/c++/4.4.7/ext/mt_allocator.h
-#usr/include/c++/4.4.7/ext/new_allocator.h
-#usr/include/c++/4.4.7/ext/numeric
-#usr/include/c++/4.4.7/ext/numeric_traits.h
-#usr/include/c++/4.4.7/ext/pb_ds
-#usr/include/c++/4.4.7/ext/pb_ds/assoc_container.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy/basic_tree_policy_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy/null_node_metadata.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_tree_policy/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/basic_types.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/cond_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/cond_key_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/bin_search_tree_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/const_point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/standard_policies.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/cond_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/container_base_dispatch.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/debug_map_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/eq_fn
-#usr/include/c++/4.4.7/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/standard_policies.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/direct_mask_range_hashing_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/direct_mod_range_hashing_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/linear_probe_fn_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/quadratic_probe_fn_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/const_point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/null_metadata.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/counter_lu_metadata.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/counter_lu_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/mtf_lu_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/cond_dtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/ov_tree_map_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/child_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/cond_dtor_entry_dealtor.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/const_child_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/head.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/internal_node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/leaf.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/node_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/node_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/node_metadata_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/point_iterators.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/split_join_branch_bag.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/synth_e_access_traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rb_tree_map_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/cc_hash_max_collision_check_resize_trigger_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_exponential_size_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/hash_standard_resize_policy_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/node.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/splay_tree_/traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/standard_policies.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/null_node_update_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/tree_trace_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/null_node_update_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/sample_trie_e_access_traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/string_trie_e_access_traits_imp.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/type_utils.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/types_traits.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/const_point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/exception.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/hash_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/list_update_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/priority_queue.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/tag_and_trait.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/tree_policy.hpp
-#usr/include/c++/4.4.7/ext/pb_ds/trie_policy.hpp
-#usr/include/c++/4.4.7/ext/pod_char_traits.h
-#usr/include/c++/4.4.7/ext/pointer.h
-#usr/include/c++/4.4.7/ext/pool_allocator.h
-#usr/include/c++/4.4.7/ext/rb_tree
-#usr/include/c++/4.4.7/ext/rc_string_base.h
-#usr/include/c++/4.4.7/ext/rope
-#usr/include/c++/4.4.7/ext/ropeimpl.h
-#usr/include/c++/4.4.7/ext/slist
-#usr/include/c++/4.4.7/ext/sso_string_base.h
-#usr/include/c++/4.4.7/ext/stdio_filebuf.h
-#usr/include/c++/4.4.7/ext/stdio_sync_filebuf.h
-#usr/include/c++/4.4.7/ext/string_conversions.h
-#usr/include/c++/4.4.7/ext/throw_allocator.h
-#usr/include/c++/4.4.7/ext/type_traits.h
-#usr/include/c++/4.4.7/ext/typelist.h
-#usr/include/c++/4.4.7/ext/vstring.h
-#usr/include/c++/4.4.7/ext/vstring.tcc
-#usr/include/c++/4.4.7/ext/vstring_fwd.h
-#usr/include/c++/4.4.7/ext/vstring_util.h
-#usr/include/c++/4.4.7/fenv.h
-#usr/include/c++/4.4.7/forward_list
-#usr/include/c++/4.4.7/fstream
-#usr/include/c++/4.4.7/functional
-#usr/include/c++/4.4.7/initializer_list
-#usr/include/c++/4.4.7/iomanip
-#usr/include/c++/4.4.7/ios
-#usr/include/c++/4.4.7/iosfwd
-#usr/include/c++/4.4.7/iostream
-#usr/include/c++/4.4.7/istream
-#usr/include/c++/4.4.7/iterator
-#usr/include/c++/4.4.7/limits
-#usr/include/c++/4.4.7/list
-#usr/include/c++/4.4.7/locale
-#usr/include/c++/4.4.7/map
-#usr/include/c++/4.4.7/memory
-#usr/include/c++/4.4.7/mutex
-#usr/include/c++/4.4.7/new
-#usr/include/c++/4.4.7/numeric
-#usr/include/c++/4.4.7/ostream
-#usr/include/c++/4.4.7/parallel
-#usr/include/c++/4.4.7/parallel/algo.h
-#usr/include/c++/4.4.7/parallel/algobase.h
-#usr/include/c++/4.4.7/parallel/algorithm
-#usr/include/c++/4.4.7/parallel/algorithmfwd.h
-#usr/include/c++/4.4.7/parallel/balanced_quicksort.h
-#usr/include/c++/4.4.7/parallel/base.h
-#usr/include/c++/4.4.7/parallel/basic_iterator.h
-#usr/include/c++/4.4.7/parallel/checkers.h
-#usr/include/c++/4.4.7/parallel/compatibility.h
-#usr/include/c++/4.4.7/parallel/compiletime_settings.h
-#usr/include/c++/4.4.7/parallel/equally_split.h
-#usr/include/c++/4.4.7/parallel/features.h
-#usr/include/c++/4.4.7/parallel/find.h
-#usr/include/c++/4.4.7/parallel/find_selectors.h
-#usr/include/c++/4.4.7/parallel/for_each.h
-#usr/include/c++/4.4.7/parallel/for_each_selectors.h
-#usr/include/c++/4.4.7/parallel/iterator.h
-#usr/include/c++/4.4.7/parallel/list_partition.h
-#usr/include/c++/4.4.7/parallel/losertree.h
-#usr/include/c++/4.4.7/parallel/merge.h
-#usr/include/c++/4.4.7/parallel/multiseq_selection.h
-#usr/include/c++/4.4.7/parallel/multiway_merge.h
-#usr/include/c++/4.4.7/parallel/multiway_mergesort.h
-#usr/include/c++/4.4.7/parallel/numeric
-#usr/include/c++/4.4.7/parallel/numericfwd.h
-#usr/include/c++/4.4.7/parallel/omp_loop.h
-#usr/include/c++/4.4.7/parallel/omp_loop_static.h
-#usr/include/c++/4.4.7/parallel/par_loop.h
-#usr/include/c++/4.4.7/parallel/parallel.h
-#usr/include/c++/4.4.7/parallel/partial_sum.h
-#usr/include/c++/4.4.7/parallel/partition.h
-#usr/include/c++/4.4.7/parallel/queue.h
-#usr/include/c++/4.4.7/parallel/quicksort.h
-#usr/include/c++/4.4.7/parallel/random_number.h
-#usr/include/c++/4.4.7/parallel/random_shuffle.h
-#usr/include/c++/4.4.7/parallel/search.h
-#usr/include/c++/4.4.7/parallel/set_operations.h
-#usr/include/c++/4.4.7/parallel/settings.h
-#usr/include/c++/4.4.7/parallel/sort.h
-#usr/include/c++/4.4.7/parallel/tags.h
-#usr/include/c++/4.4.7/parallel/types.h
-#usr/include/c++/4.4.7/parallel/unique_copy.h
-#usr/include/c++/4.4.7/parallel/workstealing.h
-#usr/include/c++/4.4.7/queue
-#usr/include/c++/4.4.7/random
-#usr/include/c++/4.4.7/ratio
-#usr/include/c++/4.4.7/regex
-#usr/include/c++/4.4.7/set
-#usr/include/c++/4.4.7/sstream
-#usr/include/c++/4.4.7/stack
-#usr/include/c++/4.4.7/stdatomic.h
-#usr/include/c++/4.4.7/stdexcept
-#usr/include/c++/4.4.7/streambuf
-#usr/include/c++/4.4.7/string
-#usr/include/c++/4.4.7/system_error
-#usr/include/c++/4.4.7/tgmath.h
-#usr/include/c++/4.4.7/thread
-#usr/include/c++/4.4.7/tr1
-#usr/include/c++/4.4.7/tr1/array
-#usr/include/c++/4.4.7/tr1/bessel_function.tcc
-#usr/include/c++/4.4.7/tr1/beta_function.tcc
-#usr/include/c++/4.4.7/tr1/ccomplex
-#usr/include/c++/4.4.7/tr1/cctype
-#usr/include/c++/4.4.7/tr1/cfenv
-#usr/include/c++/4.4.7/tr1/cfloat
-#usr/include/c++/4.4.7/tr1/cinttypes
-#usr/include/c++/4.4.7/tr1/climits
-#usr/include/c++/4.4.7/tr1/cmath
-#usr/include/c++/4.4.7/tr1/complex
-#usr/include/c++/4.4.7/tr1/complex.h
-#usr/include/c++/4.4.7/tr1/cstdarg
-#usr/include/c++/4.4.7/tr1/cstdbool
-#usr/include/c++/4.4.7/tr1/cstdint
-#usr/include/c++/4.4.7/tr1/cstdio
-#usr/include/c++/4.4.7/tr1/cstdlib
-#usr/include/c++/4.4.7/tr1/ctgmath
-#usr/include/c++/4.4.7/tr1/ctime
-#usr/include/c++/4.4.7/tr1/ctype.h
-#usr/include/c++/4.4.7/tr1/cwchar
-#usr/include/c++/4.4.7/tr1/cwctype
-#usr/include/c++/4.4.7/tr1/ell_integral.tcc
-#usr/include/c++/4.4.7/tr1/exp_integral.tcc
-#usr/include/c++/4.4.7/tr1/fenv.h
-#usr/include/c++/4.4.7/tr1/float.h
-#usr/include/c++/4.4.7/tr1/functional
-#usr/include/c++/4.4.7/tr1/functional_hash.h
-#usr/include/c++/4.4.7/tr1/gamma.tcc
-#usr/include/c++/4.4.7/tr1/hashtable.h
-#usr/include/c++/4.4.7/tr1/hypergeometric.tcc
-#usr/include/c++/4.4.7/tr1/inttypes.h
-#usr/include/c++/4.4.7/tr1/legendre_function.tcc
-#usr/include/c++/4.4.7/tr1/limits.h
-#usr/include/c++/4.4.7/tr1/math.h
-#usr/include/c++/4.4.7/tr1/memory
-#usr/include/c++/4.4.7/tr1/modified_bessel_func.tcc
-#usr/include/c++/4.4.7/tr1/poly_hermite.tcc
-#usr/include/c++/4.4.7/tr1/poly_laguerre.tcc
-#usr/include/c++/4.4.7/tr1/random
-#usr/include/c++/4.4.7/tr1/regex
-#usr/include/c++/4.4.7/tr1/riemann_zeta.tcc
-#usr/include/c++/4.4.7/tr1/shared_ptr.h
-#usr/include/c++/4.4.7/tr1/special_function_util.h
-#usr/include/c++/4.4.7/tr1/stdarg.h
-#usr/include/c++/4.4.7/tr1/stdbool.h
-#usr/include/c++/4.4.7/tr1/stdint.h
-#usr/include/c++/4.4.7/tr1/stdio.h
-#usr/include/c++/4.4.7/tr1/stdlib.h
-#usr/include/c++/4.4.7/tr1/tgmath.h
-#usr/include/c++/4.4.7/tr1/tuple
-#usr/include/c++/4.4.7/tr1/type_traits
-#usr/include/c++/4.4.7/tr1/unordered_map
-#usr/include/c++/4.4.7/tr1/unordered_set
-#usr/include/c++/4.4.7/tr1/utility
-#usr/include/c++/4.4.7/tr1/wchar.h
-#usr/include/c++/4.4.7/tr1/wctype.h
-#usr/include/c++/4.4.7/tr1_impl
-#usr/include/c++/4.4.7/tr1_impl/array
-#usr/include/c++/4.4.7/tr1_impl/boost_sp_counted_base.h
-#usr/include/c++/4.4.7/tr1_impl/cctype
-#usr/include/c++/4.4.7/tr1_impl/cfenv
-#usr/include/c++/4.4.7/tr1_impl/cinttypes
-#usr/include/c++/4.4.7/tr1_impl/cmath
-#usr/include/c++/4.4.7/tr1_impl/complex
-#usr/include/c++/4.4.7/tr1_impl/cstdint
-#usr/include/c++/4.4.7/tr1_impl/cstdio
-#usr/include/c++/4.4.7/tr1_impl/cstdlib
-#usr/include/c++/4.4.7/tr1_impl/cwchar
-#usr/include/c++/4.4.7/tr1_impl/cwctype
-#usr/include/c++/4.4.7/tr1_impl/functional
-#usr/include/c++/4.4.7/tr1_impl/functional_hash.h
-#usr/include/c++/4.4.7/tr1_impl/hashtable
-#usr/include/c++/4.4.7/tr1_impl/hashtable_policy.h
-#usr/include/c++/4.4.7/tr1_impl/random
-#usr/include/c++/4.4.7/tr1_impl/random.tcc
-#usr/include/c++/4.4.7/tr1_impl/regex
-#usr/include/c++/4.4.7/tr1_impl/type_traits
-#usr/include/c++/4.4.7/tr1_impl/unordered_map
-#usr/include/c++/4.4.7/tr1_impl/unordered_set
-#usr/include/c++/4.4.7/tr1_impl/utility
-#usr/include/c++/4.4.7/tuple
-#usr/include/c++/4.4.7/type_traits
-#usr/include/c++/4.4.7/typeinfo
-#usr/include/c++/4.4.7/unordered_map
-#usr/include/c++/4.4.7/unordered_set
-#usr/include/c++/4.4.7/utility
-#usr/include/c++/4.4.7/valarray
-#usr/include/c++/4.4.7/vector
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/atomic_word.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/basic_file.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/c++allocator.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/c++config.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/c++io.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/c++locale.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/cpu_defines.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/ctype_base.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/ctype_inline.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/ctype_noninline.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/cxxabi_tweaks.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/error_constants.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/extc++.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/gthr-default.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/gthr-posix.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/gthr-single.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/gthr-tpf.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/gthr.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/messages_members.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/os_defines.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/stdc++.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/stdtr1c++.h
-#usr/include/c++/4.4.7/x86_64-unknown-linux-gnu/bits/time_members.h
-#usr/info
-#usr/info/cpp.info
-#usr/info/cppinternals.info
-#usr/info/dir
-#usr/info/gcc.info
-#usr/info/gccinstall.info
-#usr/info/gccint.info
-#usr/info/libgomp.info
+#usr/include/c++/4.9.3
+#usr/include/c++/4.9.3/algorithm
+#usr/include/c++/4.9.3/array
+#usr/include/c++/4.9.3/atomic
+#usr/include/c++/4.9.3/backward
+#usr/include/c++/4.9.3/backward/auto_ptr.h
+#usr/include/c++/4.9.3/backward/backward_warning.h
+#usr/include/c++/4.9.3/backward/binders.h
+#usr/include/c++/4.9.3/backward/hash_fun.h
+#usr/include/c++/4.9.3/backward/hash_map
+#usr/include/c++/4.9.3/backward/hash_set
+#usr/include/c++/4.9.3/backward/hashtable.h
+#usr/include/c++/4.9.3/backward/strstream
+#usr/include/c++/4.9.3/bits
+#usr/include/c++/4.9.3/bits/algorithmfwd.h
+#usr/include/c++/4.9.3/bits/alloc_traits.h
+#usr/include/c++/4.9.3/bits/allocator.h
+#usr/include/c++/4.9.3/bits/atomic_base.h
+#usr/include/c++/4.9.3/bits/atomic_lockfree_defines.h
+#usr/include/c++/4.9.3/bits/basic_ios.h
+#usr/include/c++/4.9.3/bits/basic_ios.tcc
+#usr/include/c++/4.9.3/bits/basic_string.h
+#usr/include/c++/4.9.3/bits/basic_string.tcc
+#usr/include/c++/4.9.3/bits/boost_concept_check.h
+#usr/include/c++/4.9.3/bits/c++0x_warning.h
+#usr/include/c++/4.9.3/bits/c++14_warning.h
+#usr/include/c++/4.9.3/bits/char_traits.h
+#usr/include/c++/4.9.3/bits/codecvt.h
+#usr/include/c++/4.9.3/bits/concept_check.h
+#usr/include/c++/4.9.3/bits/cpp_type_traits.h
+#usr/include/c++/4.9.3/bits/cxxabi_forced.h
+#usr/include/c++/4.9.3/bits/deque.tcc
+#usr/include/c++/4.9.3/bits/enable_special_members.h
+#usr/include/c++/4.9.3/bits/exception_defines.h
+#usr/include/c++/4.9.3/bits/exception_ptr.h
+#usr/include/c++/4.9.3/bits/forward_list.h
+#usr/include/c++/4.9.3/bits/forward_list.tcc
+#usr/include/c++/4.9.3/bits/fstream.tcc
+#usr/include/c++/4.9.3/bits/functexcept.h
+#usr/include/c++/4.9.3/bits/functional_hash.h
+#usr/include/c++/4.9.3/bits/gslice.h
+#usr/include/c++/4.9.3/bits/gslice_array.h
+#usr/include/c++/4.9.3/bits/hash_bytes.h
+#usr/include/c++/4.9.3/bits/hashtable.h
+#usr/include/c++/4.9.3/bits/hashtable_policy.h
+#usr/include/c++/4.9.3/bits/indirect_array.h
+#usr/include/c++/4.9.3/bits/ios_base.h
+#usr/include/c++/4.9.3/bits/istream.tcc
+#usr/include/c++/4.9.3/bits/list.tcc
+#usr/include/c++/4.9.3/bits/locale_classes.h
+#usr/include/c++/4.9.3/bits/locale_classes.tcc
+#usr/include/c++/4.9.3/bits/locale_facets.h
+#usr/include/c++/4.9.3/bits/locale_facets.tcc
+#usr/include/c++/4.9.3/bits/locale_facets_nonio.h
+#usr/include/c++/4.9.3/bits/locale_facets_nonio.tcc
+#usr/include/c++/4.9.3/bits/localefwd.h
+#usr/include/c++/4.9.3/bits/mask_array.h
+#usr/include/c++/4.9.3/bits/memoryfwd.h
+#usr/include/c++/4.9.3/bits/move.h
+#usr/include/c++/4.9.3/bits/nested_exception.h
+#usr/include/c++/4.9.3/bits/ostream.tcc
+#usr/include/c++/4.9.3/bits/ostream_insert.h
+#usr/include/c++/4.9.3/bits/parse_numbers.h
+#usr/include/c++/4.9.3/bits/postypes.h
+#usr/include/c++/4.9.3/bits/predefined_ops.h
+#usr/include/c++/4.9.3/bits/ptr_traits.h
+#usr/include/c++/4.9.3/bits/random.h
+#usr/include/c++/4.9.3/bits/random.tcc
+#usr/include/c++/4.9.3/bits/range_access.h
+#usr/include/c++/4.9.3/bits/regex.h
+#usr/include/c++/4.9.3/bits/regex.tcc
+#usr/include/c++/4.9.3/bits/regex_automaton.h
+#usr/include/c++/4.9.3/bits/regex_automaton.tcc
+#usr/include/c++/4.9.3/bits/regex_compiler.h
+#usr/include/c++/4.9.3/bits/regex_compiler.tcc
+#usr/include/c++/4.9.3/bits/regex_constants.h
+#usr/include/c++/4.9.3/bits/regex_error.h
+#usr/include/c++/4.9.3/bits/regex_executor.h
+#usr/include/c++/4.9.3/bits/regex_executor.tcc
+#usr/include/c++/4.9.3/bits/regex_scanner.h
+#usr/include/c++/4.9.3/bits/regex_scanner.tcc
+#usr/include/c++/4.9.3/bits/shared_ptr.h
+#usr/include/c++/4.9.3/bits/shared_ptr_base.h
+#usr/include/c++/4.9.3/bits/slice_array.h
+#usr/include/c++/4.9.3/bits/sstream.tcc
+#usr/include/c++/4.9.3/bits/stl_algo.h
+#usr/include/c++/4.9.3/bits/stl_algobase.h
+#usr/include/c++/4.9.3/bits/stl_bvector.h
+#usr/include/c++/4.9.3/bits/stl_construct.h
+#usr/include/c++/4.9.3/bits/stl_deque.h
+#usr/include/c++/4.9.3/bits/stl_function.h
+#usr/include/c++/4.9.3/bits/stl_heap.h
+#usr/include/c++/4.9.3/bits/stl_iterator.h
+#usr/include/c++/4.9.3/bits/stl_iterator_base_funcs.h
+#usr/include/c++/4.9.3/bits/stl_iterator_base_types.h
+#usr/include/c++/4.9.3/bits/stl_list.h
+#usr/include/c++/4.9.3/bits/stl_map.h
+#usr/include/c++/4.9.3/bits/stl_multimap.h
+#usr/include/c++/4.9.3/bits/stl_multiset.h
+#usr/include/c++/4.9.3/bits/stl_numeric.h
+#usr/include/c++/4.9.3/bits/stl_pair.h
+#usr/include/c++/4.9.3/bits/stl_queue.h
+#usr/include/c++/4.9.3/bits/stl_raw_storage_iter.h
+#usr/include/c++/4.9.3/bits/stl_relops.h
+#usr/include/c++/4.9.3/bits/stl_set.h
+#usr/include/c++/4.9.3/bits/stl_stack.h
+#usr/include/c++/4.9.3/bits/stl_tempbuf.h
+#usr/include/c++/4.9.3/bits/stl_tree.h
+#usr/include/c++/4.9.3/bits/stl_uninitialized.h
+#usr/include/c++/4.9.3/bits/stl_vector.h
+#usr/include/c++/4.9.3/bits/stream_iterator.h
+#usr/include/c++/4.9.3/bits/streambuf.tcc
+#usr/include/c++/4.9.3/bits/streambuf_iterator.h
+#usr/include/c++/4.9.3/bits/stringfwd.h
+#usr/include/c++/4.9.3/bits/unique_ptr.h
+#usr/include/c++/4.9.3/bits/unordered_map.h
+#usr/include/c++/4.9.3/bits/unordered_set.h
+#usr/include/c++/4.9.3/bits/uses_allocator.h
+#usr/include/c++/4.9.3/bits/valarray_after.h
+#usr/include/c++/4.9.3/bits/valarray_array.h
+#usr/include/c++/4.9.3/bits/valarray_array.tcc
+#usr/include/c++/4.9.3/bits/valarray_before.h
+#usr/include/c++/4.9.3/bits/vector.tcc
+#usr/include/c++/4.9.3/bitset
+#usr/include/c++/4.9.3/cassert
+#usr/include/c++/4.9.3/ccomplex
+#usr/include/c++/4.9.3/cctype
+#usr/include/c++/4.9.3/cerrno
+#usr/include/c++/4.9.3/cfenv
+#usr/include/c++/4.9.3/cfloat
+#usr/include/c++/4.9.3/chrono
+#usr/include/c++/4.9.3/cinttypes
+#usr/include/c++/4.9.3/ciso646
+#usr/include/c++/4.9.3/climits
+#usr/include/c++/4.9.3/clocale
+#usr/include/c++/4.9.3/cmath
+#usr/include/c++/4.9.3/complex
+#usr/include/c++/4.9.3/complex.h
+#usr/include/c++/4.9.3/condition_variable
+#usr/include/c++/4.9.3/csetjmp
+#usr/include/c++/4.9.3/csignal
+#usr/include/c++/4.9.3/cstdalign
+#usr/include/c++/4.9.3/cstdarg
+#usr/include/c++/4.9.3/cstdbool
+#usr/include/c++/4.9.3/cstddef
+#usr/include/c++/4.9.3/cstdint
+#usr/include/c++/4.9.3/cstdio
+#usr/include/c++/4.9.3/cstdlib
+#usr/include/c++/4.9.3/cstring
+#usr/include/c++/4.9.3/ctgmath
+#usr/include/c++/4.9.3/ctime
+#usr/include/c++/4.9.3/cwchar
+#usr/include/c++/4.9.3/cwctype
+#usr/include/c++/4.9.3/cxxabi.h
+#usr/include/c++/4.9.3/debug
+#usr/include/c++/4.9.3/debug/array
+#usr/include/c++/4.9.3/debug/bitset
+#usr/include/c++/4.9.3/debug/debug.h
+#usr/include/c++/4.9.3/debug/deque
+#usr/include/c++/4.9.3/debug/formatter.h
+#usr/include/c++/4.9.3/debug/forward_list
+#usr/include/c++/4.9.3/debug/functions.h
+#usr/include/c++/4.9.3/debug/list
+#usr/include/c++/4.9.3/debug/macros.h
+#usr/include/c++/4.9.3/debug/map
+#usr/include/c++/4.9.3/debug/map.h
+#usr/include/c++/4.9.3/debug/multimap.h
+#usr/include/c++/4.9.3/debug/multiset.h
+#usr/include/c++/4.9.3/debug/safe_base.h
+#usr/include/c++/4.9.3/debug/safe_iterator.h
+#usr/include/c++/4.9.3/debug/safe_iterator.tcc
+#usr/include/c++/4.9.3/debug/safe_local_iterator.h
+#usr/include/c++/4.9.3/debug/safe_local_iterator.tcc
+#usr/include/c++/4.9.3/debug/safe_sequence.h
+#usr/include/c++/4.9.3/debug/safe_sequence.tcc
+#usr/include/c++/4.9.3/debug/safe_unordered_base.h
+#usr/include/c++/4.9.3/debug/safe_unordered_container.h
+#usr/include/c++/4.9.3/debug/safe_unordered_container.tcc
+#usr/include/c++/4.9.3/debug/set
+#usr/include/c++/4.9.3/debug/set.h
+#usr/include/c++/4.9.3/debug/string
+#usr/include/c++/4.9.3/debug/unordered_map
+#usr/include/c++/4.9.3/debug/unordered_set
+#usr/include/c++/4.9.3/debug/vector
+#usr/include/c++/4.9.3/decimal
+#usr/include/c++/4.9.3/decimal/decimal
+#usr/include/c++/4.9.3/decimal/decimal.h
+#usr/include/c++/4.9.3/deque
+#usr/include/c++/4.9.3/exception
+#usr/include/c++/4.9.3/experimental
+#usr/include/c++/4.9.3/experimental/optional
+#usr/include/c++/4.9.3/experimental/string_view
+#usr/include/c++/4.9.3/experimental/string_view.tcc
+#usr/include/c++/4.9.3/ext
+#usr/include/c++/4.9.3/ext/algorithm
+#usr/include/c++/4.9.3/ext/aligned_buffer.h
+#usr/include/c++/4.9.3/ext/alloc_traits.h
+#usr/include/c++/4.9.3/ext/array_allocator.h
+#usr/include/c++/4.9.3/ext/atomicity.h
+#usr/include/c++/4.9.3/ext/bitmap_allocator.h
+#usr/include/c++/4.9.3/ext/cast.h
+#usr/include/c++/4.9.3/ext/cmath
+#usr/include/c++/4.9.3/ext/codecvt_specializations.h
+#usr/include/c++/4.9.3/ext/concurrence.h
+#usr/include/c++/4.9.3/ext/debug_allocator.h
+#usr/include/c++/4.9.3/ext/enc_filebuf.h
+#usr/include/c++/4.9.3/ext/extptr_allocator.h
+#usr/include/c++/4.9.3/ext/functional
+#usr/include/c++/4.9.3/ext/hash_map
+#usr/include/c++/4.9.3/ext/hash_set
+#usr/include/c++/4.9.3/ext/iterator
+#usr/include/c++/4.9.3/ext/malloc_allocator.h
+#usr/include/c++/4.9.3/ext/memory
+#usr/include/c++/4.9.3/ext/mt_allocator.h
+#usr/include/c++/4.9.3/ext/new_allocator.h
+#usr/include/c++/4.9.3/ext/numeric
+#usr/include/c++/4.9.3/ext/numeric_traits.h
+#usr/include/c++/4.9.3/ext/pb_ds
+#usr/include/c++/4.9.3/ext/pb_ds/assoc_container.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/node_iterators.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/point_iterators.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/r_erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/rotate_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/bin_search_tree_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/binary_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/entry_cmp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/entry_pred.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/point_const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/resize_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binary_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_/binomial_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/binomial_heap_base_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/binomial_heap_base_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy/branch_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy/null_node_metadata.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/branch_policy/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/cmp_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/cond_key_dtor_entry_dealtor.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/debug_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/debug_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/entry_list_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/erase_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/erase_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/find_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/insert_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/insert_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/resize_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/resize_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/resize_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/size_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cc_hash_table_map_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/cond_dealtor.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/container_base_dispatch.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/debug_map_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/eq_fn
+#usr/include/c++/4.9.3/ext/pb_ds/detail/eq_fn/eq_by_less.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/eq_fn/hash_eq_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/constructor_destructor_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/debug_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/debug_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/erase_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/erase_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/find_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/find_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/gp_ht_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/insert_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/insert_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/iterator_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/resize_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/resize_no_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/resize_store_hash_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/gp_hash_table_map_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/direct_mask_range_hashing_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/direct_mod_range_hashing_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/linear_probe_fn_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/mask_based_range_hashing.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/mod_based_range_hashing.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/probe_fn_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/quadratic_probe_fn_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/ranged_hash_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/ranged_probe_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_probe_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_range_hashing.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_ranged_hash_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/hash_fn/sample_ranged_probe_fn.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/left_child_next_sibling_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/node.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/point_const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/left_child_next_sibling_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/constructor_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/entry_metadata_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/lu_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_map_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_policy/lu_counter_metadata.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/list_update_policy/sample_update_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/node_iterators.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/ov_tree_map_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/ov_tree_map_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/pairing_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pairing_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/insert_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/iterators_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/pat_trie_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/pat_trie_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/policy_access_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/r_erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/rotate_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/split_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/synth_access_traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/pat_trie_/update_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/priority_queue_base_dispatch.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/node.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/rb_tree_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rb_tree_map_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/rc.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/rc_binomial_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/rc_binomial_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/cc_hash_max_collision_check_resize_trigger_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_exponential_size_policy_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_load_check_resize_trigger_size_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_prime_size_policy_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/hash_standard_resize_policy_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/sample_resize_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/sample_resize_trigger.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/resize_policy/sample_size_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/info_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/node.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/splay_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/splay_tree_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/splay_tree_/traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/standard_policies.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/constructors_destructor_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/debug_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/erase_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/find_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/insert_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/split_join_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/thin_heap_.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/thin_heap_/trace_fn_imps.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy/node_metadata_selector.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy/order_statistics_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_policy/sample_tree_node_update.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/tree_trace_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/node_metadata_selector.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/order_statistics_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/prefix_search_node_update_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/sample_trie_access_traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/sample_trie_node_update.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/trie_policy_base.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/trie_policy/trie_string_access_traits_imp.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/type_utils.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/types_traits.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/point_const_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/detail/unordered_iterator/point_iterator.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/exception.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/hash_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/list_update_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/priority_queue.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/tag_and_trait.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/tree_policy.hpp
+#usr/include/c++/4.9.3/ext/pb_ds/trie_policy.hpp
+#usr/include/c++/4.9.3/ext/pod_char_traits.h
+#usr/include/c++/4.9.3/ext/pointer.h
+#usr/include/c++/4.9.3/ext/pool_allocator.h
+#usr/include/c++/4.9.3/ext/random
+#usr/include/c++/4.9.3/ext/random.tcc
+#usr/include/c++/4.9.3/ext/rb_tree
+#usr/include/c++/4.9.3/ext/rc_string_base.h
+#usr/include/c++/4.9.3/ext/rope
+#usr/include/c++/4.9.3/ext/ropeimpl.h
+#usr/include/c++/4.9.3/ext/slist
+#usr/include/c++/4.9.3/ext/sso_string_base.h
+#usr/include/c++/4.9.3/ext/stdio_filebuf.h
+#usr/include/c++/4.9.3/ext/stdio_sync_filebuf.h
+#usr/include/c++/4.9.3/ext/string_conversions.h
+#usr/include/c++/4.9.3/ext/throw_allocator.h
+#usr/include/c++/4.9.3/ext/type_traits.h
+#usr/include/c++/4.9.3/ext/typelist.h
+#usr/include/c++/4.9.3/ext/vstring.h
+#usr/include/c++/4.9.3/ext/vstring.tcc
+#usr/include/c++/4.9.3/ext/vstring_fwd.h
+#usr/include/c++/4.9.3/ext/vstring_util.h
+#usr/include/c++/4.9.3/fenv.h
+#usr/include/c++/4.9.3/forward_list
+#usr/include/c++/4.9.3/fstream
+#usr/include/c++/4.9.3/functional
+#usr/include/c++/4.9.3/future
+#usr/include/c++/4.9.3/initializer_list
+#usr/include/c++/4.9.3/iomanip
+#usr/include/c++/4.9.3/ios
+#usr/include/c++/4.9.3/iosfwd
+#usr/include/c++/4.9.3/iostream
+#usr/include/c++/4.9.3/istream
+#usr/include/c++/4.9.3/iterator
+#usr/include/c++/4.9.3/limits
+#usr/include/c++/4.9.3/list
+#usr/include/c++/4.9.3/locale
+#usr/include/c++/4.9.3/map
+#usr/include/c++/4.9.3/memory
+#usr/include/c++/4.9.3/mutex
+#usr/include/c++/4.9.3/new
+#usr/include/c++/4.9.3/numeric
+#usr/include/c++/4.9.3/ostream
+#usr/include/c++/4.9.3/parallel
+#usr/include/c++/4.9.3/parallel/algo.h
+#usr/include/c++/4.9.3/parallel/algobase.h
+#usr/include/c++/4.9.3/parallel/algorithm
+#usr/include/c++/4.9.3/parallel/algorithmfwd.h
+#usr/include/c++/4.9.3/parallel/balanced_quicksort.h
+#usr/include/c++/4.9.3/parallel/base.h
+#usr/include/c++/4.9.3/parallel/basic_iterator.h
+#usr/include/c++/4.9.3/parallel/checkers.h
+#usr/include/c++/4.9.3/parallel/compatibility.h
+#usr/include/c++/4.9.3/parallel/compiletime_settings.h
+#usr/include/c++/4.9.3/parallel/equally_split.h
+#usr/include/c++/4.9.3/parallel/features.h
+#usr/include/c++/4.9.3/parallel/find.h
+#usr/include/c++/4.9.3/parallel/find_selectors.h
+#usr/include/c++/4.9.3/parallel/for_each.h
+#usr/include/c++/4.9.3/parallel/for_each_selectors.h
+#usr/include/c++/4.9.3/parallel/iterator.h
+#usr/include/c++/4.9.3/parallel/list_partition.h
+#usr/include/c++/4.9.3/parallel/losertree.h
+#usr/include/c++/4.9.3/parallel/merge.h
+#usr/include/c++/4.9.3/parallel/multiseq_selection.h
+#usr/include/c++/4.9.3/parallel/multiway_merge.h
+#usr/include/c++/4.9.3/parallel/multiway_mergesort.h
+#usr/include/c++/4.9.3/parallel/numeric
+#usr/include/c++/4.9.3/parallel/numericfwd.h
+#usr/include/c++/4.9.3/parallel/omp_loop.h
+#usr/include/c++/4.9.3/parallel/omp_loop_static.h
+#usr/include/c++/4.9.3/parallel/par_loop.h
+#usr/include/c++/4.9.3/parallel/parallel.h
+#usr/include/c++/4.9.3/parallel/partial_sum.h
+#usr/include/c++/4.9.3/parallel/partition.h
+#usr/include/c++/4.9.3/parallel/queue.h
+#usr/include/c++/4.9.3/parallel/quicksort.h
+#usr/include/c++/4.9.3/parallel/random_number.h
+#usr/include/c++/4.9.3/parallel/random_shuffle.h
+#usr/include/c++/4.9.3/parallel/search.h
+#usr/include/c++/4.9.3/parallel/set_operations.h
+#usr/include/c++/4.9.3/parallel/settings.h
+#usr/include/c++/4.9.3/parallel/sort.h
+#usr/include/c++/4.9.3/parallel/tags.h
+#usr/include/c++/4.9.3/parallel/types.h
+#usr/include/c++/4.9.3/parallel/unique_copy.h
+#usr/include/c++/4.9.3/parallel/workstealing.h
+#usr/include/c++/4.9.3/profile
+#usr/include/c++/4.9.3/profile/array
+#usr/include/c++/4.9.3/profile/base.h
+#usr/include/c++/4.9.3/profile/bitset
+#usr/include/c++/4.9.3/profile/deque
+#usr/include/c++/4.9.3/profile/forward_list
+#usr/include/c++/4.9.3/profile/impl
+#usr/include/c++/4.9.3/profile/impl/profiler.h
+#usr/include/c++/4.9.3/profile/impl/profiler_algos.h
+#usr/include/c++/4.9.3/profile/impl/profiler_container_size.h
+#usr/include/c++/4.9.3/profile/impl/profiler_hash_func.h
+#usr/include/c++/4.9.3/profile/impl/profiler_hashtable_size.h
+#usr/include/c++/4.9.3/profile/impl/profiler_list_to_slist.h
+#usr/include/c++/4.9.3/profile/impl/profiler_list_to_vector.h
+#usr/include/c++/4.9.3/profile/impl/profiler_map_to_unordered_map.h
+#usr/include/c++/4.9.3/profile/impl/profiler_node.h
+#usr/include/c++/4.9.3/profile/impl/profiler_state.h
+#usr/include/c++/4.9.3/profile/impl/profiler_trace.h
+#usr/include/c++/4.9.3/profile/impl/profiler_vector_size.h
+#usr/include/c++/4.9.3/profile/impl/profiler_vector_to_list.h
+#usr/include/c++/4.9.3/profile/iterator_tracker.h
+#usr/include/c++/4.9.3/profile/list
+#usr/include/c++/4.9.3/profile/map
+#usr/include/c++/4.9.3/profile/map.h
+#usr/include/c++/4.9.3/profile/multimap.h
+#usr/include/c++/4.9.3/profile/multiset.h
+#usr/include/c++/4.9.3/profile/set
+#usr/include/c++/4.9.3/profile/set.h
+#usr/include/c++/4.9.3/profile/unordered_base.h
+#usr/include/c++/4.9.3/profile/unordered_map
+#usr/include/c++/4.9.3/profile/unordered_set
+#usr/include/c++/4.9.3/profile/vector
+#usr/include/c++/4.9.3/queue
+#usr/include/c++/4.9.3/random
+#usr/include/c++/4.9.3/ratio
+#usr/include/c++/4.9.3/regex
+#usr/include/c++/4.9.3/scoped_allocator
+#usr/include/c++/4.9.3/set
+#usr/include/c++/4.9.3/shared_mutex
+#usr/include/c++/4.9.3/sstream
+#usr/include/c++/4.9.3/stack
+#usr/include/c++/4.9.3/stdexcept
+#usr/include/c++/4.9.3/streambuf
+#usr/include/c++/4.9.3/string
+#usr/include/c++/4.9.3/system_error
+#usr/include/c++/4.9.3/tgmath.h
+#usr/include/c++/4.9.3/thread
+#usr/include/c++/4.9.3/tr1
+#usr/include/c++/4.9.3/tr1/array
+#usr/include/c++/4.9.3/tr1/bessel_function.tcc
+#usr/include/c++/4.9.3/tr1/beta_function.tcc
+#usr/include/c++/4.9.3/tr1/ccomplex
+#usr/include/c++/4.9.3/tr1/cctype
+#usr/include/c++/4.9.3/tr1/cfenv
+#usr/include/c++/4.9.3/tr1/cfloat
+#usr/include/c++/4.9.3/tr1/cinttypes
+#usr/include/c++/4.9.3/tr1/climits
+#usr/include/c++/4.9.3/tr1/cmath
+#usr/include/c++/4.9.3/tr1/complex
+#usr/include/c++/4.9.3/tr1/complex.h
+#usr/include/c++/4.9.3/tr1/cstdarg
+#usr/include/c++/4.9.3/tr1/cstdbool
+#usr/include/c++/4.9.3/tr1/cstdint
+#usr/include/c++/4.9.3/tr1/cstdio
+#usr/include/c++/4.9.3/tr1/cstdlib
+#usr/include/c++/4.9.3/tr1/ctgmath
+#usr/include/c++/4.9.3/tr1/ctime
+#usr/include/c++/4.9.3/tr1/ctype.h
+#usr/include/c++/4.9.3/tr1/cwchar
+#usr/include/c++/4.9.3/tr1/cwctype
+#usr/include/c++/4.9.3/tr1/ell_integral.tcc
+#usr/include/c++/4.9.3/tr1/exp_integral.tcc
+#usr/include/c++/4.9.3/tr1/fenv.h
+#usr/include/c++/4.9.3/tr1/float.h
+#usr/include/c++/4.9.3/tr1/functional
+#usr/include/c++/4.9.3/tr1/functional_hash.h
+#usr/include/c++/4.9.3/tr1/gamma.tcc
+#usr/include/c++/4.9.3/tr1/hashtable.h
+#usr/include/c++/4.9.3/tr1/hashtable_policy.h
+#usr/include/c++/4.9.3/tr1/hypergeometric.tcc
+#usr/include/c++/4.9.3/tr1/inttypes.h
+#usr/include/c++/4.9.3/tr1/legendre_function.tcc
+#usr/include/c++/4.9.3/tr1/limits.h
+#usr/include/c++/4.9.3/tr1/math.h
+#usr/include/c++/4.9.3/tr1/memory
+#usr/include/c++/4.9.3/tr1/modified_bessel_func.tcc
+#usr/include/c++/4.9.3/tr1/poly_hermite.tcc
+#usr/include/c++/4.9.3/tr1/poly_laguerre.tcc
+#usr/include/c++/4.9.3/tr1/random
+#usr/include/c++/4.9.3/tr1/random.h
+#usr/include/c++/4.9.3/tr1/random.tcc
+#usr/include/c++/4.9.3/tr1/regex
+#usr/include/c++/4.9.3/tr1/riemann_zeta.tcc
+#usr/include/c++/4.9.3/tr1/shared_ptr.h
+#usr/include/c++/4.9.3/tr1/special_function_util.h
+#usr/include/c++/4.9.3/tr1/stdarg.h
+#usr/include/c++/4.9.3/tr1/stdbool.h
+#usr/include/c++/4.9.3/tr1/stdint.h
+#usr/include/c++/4.9.3/tr1/stdio.h
+#usr/include/c++/4.9.3/tr1/stdlib.h
+#usr/include/c++/4.9.3/tr1/tgmath.h
+#usr/include/c++/4.9.3/tr1/tuple
+#usr/include/c++/4.9.3/tr1/type_traits
+#usr/include/c++/4.9.3/tr1/unordered_map
+#usr/include/c++/4.9.3/tr1/unordered_map.h
+#usr/include/c++/4.9.3/tr1/unordered_set
+#usr/include/c++/4.9.3/tr1/unordered_set.h
+#usr/include/c++/4.9.3/tr1/utility
+#usr/include/c++/4.9.3/tr1/wchar.h
+#usr/include/c++/4.9.3/tr1/wctype.h
+#usr/include/c++/4.9.3/tr2
+#usr/include/c++/4.9.3/tr2/bool_set
+#usr/include/c++/4.9.3/tr2/bool_set.tcc
+#usr/include/c++/4.9.3/tr2/dynamic_bitset
+#usr/include/c++/4.9.3/tr2/dynamic_bitset.tcc
+#usr/include/c++/4.9.3/tr2/ratio
+#usr/include/c++/4.9.3/tr2/type_traits
+#usr/include/c++/4.9.3/tuple
+#usr/include/c++/4.9.3/type_traits
+#usr/include/c++/4.9.3/typeindex
+#usr/include/c++/4.9.3/typeinfo
+#usr/include/c++/4.9.3/unordered_map
+#usr/include/c++/4.9.3/unordered_set
+#usr/include/c++/4.9.3/utility
+#usr/include/c++/4.9.3/valarray
+#usr/include/c++/4.9.3/vector
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/atomic_word.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/basic_file.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/c++allocator.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/c++config.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/c++io.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/c++locale.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/cpu_defines.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/ctype_base.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/ctype_inline.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/cxxabi_tweaks.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/error_constants.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/extc++.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/gthr-default.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/gthr-posix.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/gthr-single.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/gthr.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/messages_members.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/opt_random.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/os_defines.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/stdc++.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/stdtr1c++.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/bits/time_members.h
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/ext
+#usr/include/c++/4.9.3/x86_64-unknown-linux-gnu/ext/opt_random.h
 #usr/lib/gcc
 #usr/lib/gcc/x86_64-unknown-linux-gnu
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/cc1
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/cc1plus
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/collect2
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/crtbegin.o
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/crtbeginS.o
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/crtbeginT.o
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/crtend.o
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/crtendS.o
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/crtfastmath.o
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/crtprec32.o
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/crtprec64.o
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/crtprec80.o
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/finclude
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include-fixed
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include-fixed/README
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include-fixed/limits.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include-fixed/syslimits.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/ammintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/avxintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/bmmintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/cpuid.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/cross-stdarg.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/emmintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/float.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/immintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/iso646.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/mf-runtime.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/mm3dnow.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/mm_malloc.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/mmintrin-common.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/mmintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/nmmintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/omp.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/pmmintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/smmintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/ssp
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/ssp/ssp.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/ssp/stdio.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/ssp/string.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/ssp/unistd.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/stdarg.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/stdbool.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/stddef.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/stdfix.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/tmmintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/unwind.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/varargs.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/wmmintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/x86intrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/include/xmmintrin.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/fixinc.sh
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/fixinc_list
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/fixincl
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/gsyslimits.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/include
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/include/README
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/include/limits.h
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/macro_list
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/mkheaders
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/mkheaders.conf
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/install-tools/mkinstalldirs
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/libgcc.a
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/libgcc_eh.a
-#usr/lib/gcc/x86_64-unknown-linux-gnu/4.4.7/libgcov.a
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/cc1
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/cc1plus
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/collect2
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/crtbegin.o
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/crtbeginS.o
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/crtbeginT.o
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/crtend.o
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/crtendS.o
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/crtfastmath.o
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/crtprec32.o
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/crtprec64.o
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/crtprec80.o
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/finclude
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include-fixed
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include-fixed/README
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include-fixed/limits.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include-fixed/syslimits.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/adxintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/ammintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/avx2intrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/avx512cdintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/avx512erintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/avx512fintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/avx512pfintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/avxintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/bmi2intrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/bmiintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/bmmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/cilk.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/cilk_api.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/cilk_api_linux.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/cilk_stub.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/cilk_undocumented.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/common.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/holder.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/hyperobject_base.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/metaprogramming.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_file.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_list.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_max.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_min.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_min_max.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_opadd.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_opand.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_opmul.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_opor.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_opxor.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_ostream.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cilk/reducer_string.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cpuid.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/cross-stdarg.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/emmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/f16cintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/float.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/fma4intrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/fmaintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/fxsrintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/ia32intrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/immintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/iso646.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/lwpintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/lzcntintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/mm3dnow.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/mm_malloc.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/mmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/nmmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/omp.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/pmmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/popcntintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/prfchwintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/quadmath.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/quadmath_weak.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/rdseedintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/rtmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/sanitizer
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/sanitizer/asan_interface.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/sanitizer/common_interface_defs.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/sanitizer/lsan_interface.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/shaintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/smmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/ssp
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/ssp/ssp.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/ssp/stdio.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/ssp/string.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/ssp/unistd.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/stdalign.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/stdarg.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/stdatomic.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/stdbool.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/stddef.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/stdfix.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/stdint-gcc.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/stdint.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/stdnoreturn.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/tbmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/tmmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/unwind.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/varargs.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/wmmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/x86intrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/xmmintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/xopintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/xsaveintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/xsaveoptintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/include/xtestintrin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/fixinc.sh
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/fixinc_list
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/fixincl
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/gsyslimits.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/include
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/include/README
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/include/limits.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/macro_list
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/mkheaders
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/mkheaders.conf
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/install-tools/mkinstalldirs
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/libgcc.a
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/libgcc_eh.a
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/libgcov.a
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/liblto_plugin.la
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/liblto_plugin.so
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/liblto_plugin.so.0
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/liblto_plugin.so.0.0.0
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/lto-wrapper
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/lto1
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/gengtype
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/gtype.state
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ada
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ada/gcc-interface
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ada/gcc-interface/ada-tree.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/alias.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/all-tree.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/alloc-pool.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ansidecl.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/attribs.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/auto-host.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/b-header-vars
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/basic-block.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/bitmap.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/builtins.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/bversion.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/c-family
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/c-family/c-common.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/c-family/c-common.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/c-family/c-objc.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/c-family/c-pragma.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/c-family/c-pretty-print.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/c-tree.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/calls.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cfg-flags.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cfgexpand.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cfghooks.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cfgloop.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cgraph.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cif-code.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cilk-builtins.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cilkplus.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/dbxelf.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/elfos.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/glibc-stdint.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/gnu-user.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/att.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/biarch64.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/gnu-user-common.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/gnu-user64.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/i386-opts.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/i386-protos.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/i386.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/linux-common.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/linux64.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/stringop.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/unix.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/x86-64.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/i386/x86-tune.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/initfini-array.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/linux-android.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/linux-protos.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/linux.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/config/vxworks-dummy.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/configargs.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/context.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/coretypes.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cp
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cp/cp-tree.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cp/cp-tree.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cp/cxx-pretty-print.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cp/name-lookup.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cp/type-utils.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cppdefault.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/cpplib.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/debug.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/defaults.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/df.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/diagnostic-color.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/diagnostic-core.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/diagnostic.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/diagnostic.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/double-int.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/dumpfile.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/emit-rtl.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/except.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/filenames.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/fixed-value.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/flag-types.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/flags.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/fold-const.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/function.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gcc-plugin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gcc-symtab.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/genrtl.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ggc.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimple-builder.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimple-expr.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimple-fold.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimple-iterator.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimple-low.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimple-pretty-print.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimple-ssa.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimple-walk.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimple.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimple.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimplify-me.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gimplify.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gsstruct.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gtm-builtins.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/gtype-desc.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/hard-reg-set.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/hash-table.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/hashtab.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/highlev-plugin-common.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/hwint.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/incpath.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/input.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/insn-codes.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/insn-constants.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/insn-flags.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/insn-modes.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/insn-notes.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/internal-fn.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/internal-fn.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/intl.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ipa-prop.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ipa-ref-inline.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ipa-ref.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ipa-reference.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ipa-utils.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/is-a.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/java
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/java/java-tree.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/langhooks.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/libiberty.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/line-map.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/machmode.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/md5.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/mode-classes.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/objc
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/objc/objc-tree.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/obstack.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/omp-builtins.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/options.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/opts.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/output.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/params.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/params.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/pass-instances.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/pass_manager.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/plugin-api.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/plugin-version.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/plugin.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/plugin.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/pointer-set.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/predict.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/predict.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/prefix.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/pretty-print.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/print-rtl.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/print-tree.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/real.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/realmpfr.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/reg-notes.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/regset.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/resource.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/rtl.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/rtl.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/safe-ctype.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/sanitizer.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/sbitmap.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/splay-tree.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/ssa-iterators.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/statistics.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/stmt.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/stor-layout.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/stringpool.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/symtab.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/sync-builtins.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/system.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/target-hooks-macros.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/target.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/target.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/timevar.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/timevar.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tm-preds.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tm.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tm_p.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/toplev.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-cfg.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-cfgcleanup.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-check.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-core.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-dfa.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-dump.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-eh.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-hasher.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-inline.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-into-ssa.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-iterator.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-nested.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-object-size.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-outof-ssa.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-parloops.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-pass.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-phinodes.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-pretty-print.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-address.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-alias.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-coalesce.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-dom.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-loop-ivopts.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-loop-manip.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-loop-niter.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-loop.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-operands.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-sccvn.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-ter.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-threadedge.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa-threadupdate.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssa.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree-ssanames.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/tree.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/treestruct.def
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/varasm.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/vec.h
+#usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.3/plugin/include/version.h
+#usr/lib/libasan.a
+#usr/lib/libasan.la
+#usr/lib/libasan.so
+usr/lib/libasan.so.1
+usr/lib/libasan.so.1.0.0
+#usr/lib/libasan_preinit.o
+#usr/lib/libatomic.a
+#usr/lib/libatomic.la
+#usr/lib/libatomic.so
+usr/lib/libatomic.so.1
+usr/lib/libatomic.so.1.1.0
+#usr/lib/libcilkrts.a
+#usr/lib/libcilkrts.la
+#usr/lib/libcilkrts.so
+usr/lib/libcilkrts.so.5
+usr/lib/libcilkrts.so.5.0.0
+#usr/lib/libcilkrts.spec
 #usr/lib/libgomp.a
 #usr/lib/libgomp.la
 #usr/lib/libgomp.so
 usr/lib/libgomp.so.1
 usr/lib/libgomp.so.1.0.0
 #usr/lib/libgomp.spec
-#usr/lib/libmudflap.a
-#usr/lib/libmudflap.la
-#usr/lib/libmudflap.so
-usr/lib/libmudflap.so.0
-usr/lib/libmudflap.so.0.0.0
-#usr/lib/libmudflapth.a
-#usr/lib/libmudflapth.la
-#usr/lib/libmudflapth.so
-usr/lib/libmudflapth.so.0
-usr/lib/libmudflapth.so.0.0.0
+#usr/lib/libitm.a
+#usr/lib/libitm.la
+#usr/lib/libitm.so
+usr/lib/libitm.so.1
+usr/lib/libitm.so.1.0.0
+#usr/lib/libitm.spec
+#usr/lib/liblsan.a
+#usr/lib/liblsan.la
+#usr/lib/liblsan.so
+usr/lib/liblsan.so.0
+usr/lib/liblsan.so.0.0.0
+#usr/lib/libquadmath.a
+#usr/lib/libquadmath.la
+#usr/lib/libquadmath.so
+usr/lib/libquadmath.so.0
+usr/lib/libquadmath.so.0.0.0
+#usr/lib/libsanitizer.spec
 #usr/lib/libssp.a
 #usr/lib/libssp.la
 #usr/lib/libssp.so
@@ -786,16 +1143,44 @@ usr/lib/libmudflapth.so.0.0.0
 #usr/lib/libssp_nonshared.a
 #usr/lib/libssp_nonshared.la
 #usr/lib/libstdc++.a
-usr/lib/libstdc++.so.6.0.13
+usr/lib/libstdc++.so.6.0.20
+#usr/lib/libstdc++.so.6.0.20-gdb.py
 #usr/lib/libsupc++.a
 #usr/lib/libsupc++.la
-#usr/man
-#usr/man/man1
-#usr/man/man1/cpp.1
-#usr/man/man1/g++.1
-#usr/man/man1/gcc.1
-#usr/man/man1/gcov.1
-#usr/man/man7
-#usr/man/man7/fsf-funding.7
-#usr/man/man7/gfdl.7
-#usr/man/man7/gpl.7
+#usr/lib/libtsan.a
+#usr/lib/libtsan.la
+#usr/lib/libtsan.so
+usr/lib/libtsan.so.0
+usr/lib/libtsan.so.0.0.0
+#usr/lib/libubsan.a
+#usr/lib/libubsan.la
+#usr/lib/libubsan.so
+usr/lib/libubsan.so.0
+usr/lib/libubsan.so.0.0.0
+#usr/lib/libvtv.a
+#usr/lib/libvtv.la
+#usr/lib/libvtv.so
+usr/lib/libvtv.so.0
+usr/lib/libvtv.so.0.0.0
+#usr/share/gcc-4.9.3
+#usr/share/gcc-4.9.3/python
+#usr/share/gcc-4.9.3/python/libstdcxx
+#usr/share/gcc-4.9.3/python/libstdcxx/__init__.py
+#usr/share/gcc-4.9.3/python/libstdcxx/v6
+#usr/share/gcc-4.9.3/python/libstdcxx/v6/__init__.py
+#usr/share/gcc-4.9.3/python/libstdcxx/v6/printers.py
+#usr/share/info/cpp.info
+#usr/share/info/cppinternals.info
+#usr/share/info/gcc.info
+#usr/share/info/gccinstall.info
+#usr/share/info/gccint.info
+#usr/share/info/libgomp.info
+#usr/share/info/libitm.info
+#usr/share/info/libquadmath.info
+#usr/share/man/man1/cpp.1
+#usr/share/man/man1/g++.1
+#usr/share/man/man1/gcc.1
+#usr/share/man/man1/gcov.1
+#usr/share/man/man7/fsf-funding.7
+#usr/share/man/man7/gfdl.7
+#usr/share/man/man7/gpl.7
index aabc8a68c3c1695b0e891994bc96001496b4a114..80ae0dd2d762a3fad31bf5613775bb55fc766bd7 100644 (file)
@@ -27,6 +27,7 @@ etc/rc.d/init.d/console
 #etc/rc.d/init.d/cyrus-sasl
 etc/rc.d/init.d/dhcp
 etc/rc.d/init.d/dhcrelay
+#etc/rc.d/init.d/dnsdist
 etc/rc.d/init.d/dnsmasq
 etc/rc.d/init.d/fcron
 #etc/rc.d/init.d/fetchmail
diff --git a/config/rootfiles/core/97/filelists/bind b/config/rootfiles/core/97/filelists/bind
new file mode 120000 (symlink)
index 0000000..48a0eba
--- /dev/null
@@ -0,0 +1 @@
+../../../common/bind
\ No newline at end of file
diff --git a/config/rootfiles/core/97/filelists/files b/config/rootfiles/core/97/filelists/files
new file mode 100644 (file)
index 0000000..3d9d483
--- /dev/null
@@ -0,0 +1,11 @@
+etc/system-release
+etc/issue
+etc/rc.d/init.d/firewall
+etc/modprobe.d/nf_conntrack.conf
+srv/web/ipfire/cgi-bin/optionsfw.cgi
+srv/web/ipfire/cgi-bin/ovpnmain.cgi
+srv/web/ipfire/cgi-bin/qos.cgi
+srv/web/ipfire/cgi-bin/webaccess.cgi
+usr/bin/pgrep
+usr/local/bin/qosctrl
+usr/local/bin/timectrl
diff --git a/config/rootfiles/core/97/filelists/openssh b/config/rootfiles/core/97/filelists/openssh
new file mode 120000 (symlink)
index 0000000..d8c77fd
--- /dev/null
@@ -0,0 +1 @@
+../../../common/openssh
\ No newline at end of file
diff --git a/config/rootfiles/core/97/filelists/openvpn b/config/rootfiles/core/97/filelists/openvpn
new file mode 120000 (symlink)
index 0000000..493f3f7
--- /dev/null
@@ -0,0 +1 @@
+../../../common/openvpn
\ No newline at end of file
diff --git a/config/rootfiles/core/97/update.sh b/config/rootfiles/core/97/update.sh
new file mode 100644 (file)
index 0000000..4cd6abe
--- /dev/null
@@ -0,0 +1,66 @@
+#!/bin/bash
+############################################################################
+#                                                                          #
+# This file is part of the IPFire Firewall.                                #
+#                                                                          #
+# IPFire is free software; you can redistribute it and/or modify           #
+# it under the terms of the GNU General Public License as published by     #
+# the Free Software Foundation; either version 3 of the License, or        #
+# (at your option) any later version.                                      #
+#                                                                          #
+# IPFire is distributed in the hope that it will be useful,                #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of           #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
+# GNU General Public License for more details.                             #
+#                                                                          #
+# You should have received a copy of the GNU General Public License        #
+# along with IPFire; if not, write to the Free Software                    #
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
+#                                                                          #
+# Copyright (C) 2015 IPFire-Team <info@ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+# Remove old core updates from pakfire cache to save space...
+core=97
+for (( i=1; i<=$core; i++ ))
+do
+       rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
+done
+
+# Stop services
+/etc/init.d/dnsmasq stop
+
+# Extract files
+extract_files
+
+# Fix hardening flags in grub
+paxctl -mpexs /usr/bin/grub-script-check
+
+# Update Language cache
+# /usr/local/bin/update-lang-cache
+
+# Start services
+/etc/init.d/dnsmasq start
+/etc/init.d/sshd restart
+
+# Delete old QoS enabled indicator
+rm -f /var/ipfire/qos/enable
+
+# This update need a reboot...
+#touch /var/run/need_reboot
+
+# Finish
+/etc/init.d/fireinfo start
+sendprofile
+# Update grub config to display new core version
+if [ -e /boot/grub/grub.cfg ]; then
+       grub-mkconfig -o /boot/grub/grub.cfg
+fi
+sync
+
+# Don't report the exitcode last command
+exit 0
diff --git a/config/rootfiles/oldcore/96/exclude b/config/rootfiles/oldcore/96/exclude
new file mode 100644 (file)
index 0000000..d87f175
--- /dev/null
@@ -0,0 +1,25 @@
+boot/config.txt
+etc/alternatives
+etc/collectd.custom
+etc/ipsec.conf
+etc/ipsec.secrets
+etc/ipsec.user.conf
+etc/ipsec.user.secrets
+etc/localtime
+etc/shadow
+etc/snort/snort.conf
+etc/ssh/ssh_config
+etc/ssh/sshd_config
+etc/ssl/openssl.cnf
+etc/sudoers
+etc/sysconfig/firewall.local
+etc/sysconfig/rc.local
+etc/udev/rules.d/30-persistent-network.rules
+srv/web/ipfire/html/proxy.pac
+var/ipfire/dma
+var/ipfire/time
+var/ipfire/ovpn
+var/lib/alternatives
+var/log/cache
+var/state/dhcp/dhcpd.leases
+var/updatecache
diff --git a/config/rootfiles/oldcore/96/filelists/dnsmasq b/config/rootfiles/oldcore/96/filelists/dnsmasq
new file mode 120000 (symlink)
index 0000000..d469c74
--- /dev/null
@@ -0,0 +1 @@
+../../../common/dnsmasq
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/96/filelists/ntp b/config/rootfiles/oldcore/96/filelists/ntp
new file mode 120000 (symlink)
index 0000000..7542d86
--- /dev/null
@@ -0,0 +1 @@
+../../../common/ntp
\ No newline at end of file
diff --git a/config/rootfiles/oldcore/96/meta b/config/rootfiles/oldcore/96/meta
new file mode 100644 (file)
index 0000000..d547fa8
--- /dev/null
@@ -0,0 +1 @@
+DEPS=""
diff --git a/config/rootfiles/packages/dnsdist b/config/rootfiles/packages/dnsdist
new file mode 100644 (file)
index 0000000..ba7381f
--- /dev/null
@@ -0,0 +1,3 @@
+usr/bin/dnsdist
+#usr/share/man/man1/dnsdist.1
+etc/rc.d/init.d/dnsdist
index d31753c17c783424535d39c0a95778d67e12f3d8..3582f36184fa9afad8e6579d3ef0339d707a55d3 100644 (file)
@@ -14,6 +14,7 @@ usr/bin/rnano
 #usr/share/man/man5/nanorc.5
 #usr/share/nano
 usr/share/nano/asm.nanorc
+usr/share/nano/autoconf.nanorc
 usr/share/nano/awk.nanorc
 usr/share/nano/c.nanorc
 #usr/share/nano/changelog.nanorc
@@ -37,6 +38,7 @@ usr/share/nano/man.nanorc
 usr/share/nano/mgp.nanorc
 usr/share/nano/mutt.nanorc
 usr/share/nano/nanorc.nanorc
+usr/share/nano/nftables.nanorc
 usr/share/nano/objc.nanorc
 usr/share/nano/ocaml.nanorc
 usr/share/nano/patch.nanorc
index 5ce778929daceede65a59e9fb5092bdca1940c6b..9ea21e352811a0843d8afa4544def6d84009167c 100644 (file)
@@ -8,7 +8,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/Console/Getopt.php
 #srv/web/owncloud/3rdparty/Jcrop
 #srv/web/owncloud/3rdparty/Jcrop/MIT-LICENSE.txt
-#srv/web/owncloud/3rdparty/Jcrop/README.md
 #srv/web/owncloud/3rdparty/Jcrop/css
 #srv/web/owncloud/3rdparty/Jcrop/css/Jcrop.gif
 #srv/web/owncloud/3rdparty/Jcrop/css/jquery.Jcrop.css
@@ -220,7 +219,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/Patchwork/PHP/Shim/unidata/compatibilityDecomposition.ser
 #srv/web/owncloud/3rdparty/Patchwork/PHP/Shim/unidata/lowerCase.ser
 #srv/web/owncloud/3rdparty/Patchwork/PHP/Shim/unidata/upperCase.ser
-#srv/web/owncloud/3rdparty/Patchwork/README.md
 #srv/web/owncloud/3rdparty/Patchwork/Utf8
 #srv/web/owncloud/3rdparty/Patchwork/Utf8.php
 #srv/web/owncloud/3rdparty/Patchwork/Utf8/Bootup
@@ -253,13 +251,11 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/css/chosen/chosen.css
 #srv/web/owncloud/3rdparty/css/strengthify
 #srv/web/owncloud/3rdparty/css/strengthify/LICENSE
-#srv/web/owncloud/3rdparty/css/strengthify/README.md
 #srv/web/owncloud/3rdparty/css/strengthify/strengthify.css
 #srv/web/owncloud/3rdparty/doctrine
 #srv/web/owncloud/3rdparty/doctrine/common
 #srv/web/owncloud/3rdparty/doctrine/common/.gitmodules
 #srv/web/owncloud/3rdparty/doctrine/common/LICENSE
-#srv/web/owncloud/3rdparty/doctrine/common/README.md
 #srv/web/owncloud/3rdparty/doctrine/common/UPGRADE_TO_2_1
 #srv/web/owncloud/3rdparty/doctrine/common/UPGRADE_TO_2_2
 #srv/web/owncloud/3rdparty/doctrine/common/build.properties
@@ -498,7 +494,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/doctrine/dbal
 #srv/web/owncloud/3rdparty/doctrine/dbal/.gitmodules
 #srv/web/owncloud/3rdparty/doctrine/dbal/LICENSE
-#srv/web/owncloud/3rdparty/doctrine/dbal/README.md
 #srv/web/owncloud/3rdparty/doctrine/dbal/UPGRADE
 #srv/web/owncloud/3rdparty/doctrine/dbal/bin
 #srv/web/owncloud/3rdparty/doctrine/dbal/bin/doctrine-dbal
@@ -512,7 +507,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/doctrine/dbal/docs/design/SHARDING.md
 #srv/web/owncloud/3rdparty/doctrine/dbal/docs/examples
 #srv/web/owncloud/3rdparty/doctrine/dbal/docs/examples/sharding
-#srv/web/owncloud/3rdparty/doctrine/dbal/docs/examples/sharding/README.md
 #srv/web/owncloud/3rdparty/doctrine/dbal/docs/examples/sharding/bootstrap.php
 #srv/web/owncloud/3rdparty/doctrine/dbal/docs/examples/sharding/composer.json
 #srv/web/owncloud/3rdparty/doctrine/dbal/docs/examples/sharding/create_schema.php
@@ -847,7 +841,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/doctrine/dbal/tests/travis/pgsql.travis.xml
 #srv/web/owncloud/3rdparty/doctrine/dbal/tests/travis/sqlite.travis.xml
 #srv/web/owncloud/3rdparty/fontawesome
-#srv/web/owncloud/3rdparty/fontawesome/README.md
 #srv/web/owncloud/3rdparty/fontawesome/css
 #srv/web/owncloud/3rdparty/fontawesome/css/font-awesome-ie7.min.css
 #srv/web/owncloud/3rdparty/fontawesome/css/font-awesome.css
@@ -970,7 +963,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/james-heinrich
 #srv/web/owncloud/3rdparty/james-heinrich/getid3
 #srv/web/owncloud/3rdparty/james-heinrich/getid3/.gitattributes
-#srv/web/owncloud/3rdparty/james-heinrich/getid3/README.md
 #srv/web/owncloud/3rdparty/james-heinrich/getid3/changelog.txt
 #srv/web/owncloud/3rdparty/james-heinrich/getid3/composer.json
 #srv/web/owncloud/3rdparty/james-heinrich/getid3/dependencies.txt
@@ -1061,19 +1053,16 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/js
 #srv/web/owncloud/3rdparty/js/chosen
 #srv/web/owncloud/3rdparty/js/chosen/LICENSE.md
-#srv/web/owncloud/3rdparty/js/chosen/README.md
 #srv/web/owncloud/3rdparty/js/chosen/VERSION
 #srv/web/owncloud/3rdparty/js/chosen/chosen.jquery.js
 #srv/web/owncloud/3rdparty/js/chosen/chosen.jquery.min.js
 #srv/web/owncloud/3rdparty/js/chosen/chosen.proto.js
 #srv/web/owncloud/3rdparty/js/chosen/chosen.proto.min.js
 #srv/web/owncloud/3rdparty/js/md5
-#srv/web/owncloud/3rdparty/js/md5/README.md
 #srv/web/owncloud/3rdparty/js/md5/md5.js
 #srv/web/owncloud/3rdparty/js/md5/md5.min.js
 #srv/web/owncloud/3rdparty/js/strengthify
 #srv/web/owncloud/3rdparty/js/strengthify/LICENSE
-#srv/web/owncloud/3rdparty/js/strengthify/README.md
 #srv/web/owncloud/3rdparty/js/strengthify/jquery.strengthify.js
 #srv/web/owncloud/3rdparty/kriswallsmith
 #srv/web/owncloud/3rdparty/kriswallsmith/assetic
@@ -1083,7 +1072,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/kriswallsmith/assetic/CHANGELOG-1.2.md
 #srv/web/owncloud/3rdparty/kriswallsmith/assetic/Gemfile
 #srv/web/owncloud/3rdparty/kriswallsmith/assetic/LICENSE
-#srv/web/owncloud/3rdparty/kriswallsmith/assetic/README.md
 #srv/web/owncloud/3rdparty/kriswallsmith/assetic/composer.json
 #srv/web/owncloud/3rdparty/kriswallsmith/assetic/docs
 #srv/web/owncloud/3rdparty/kriswallsmith/assetic/docs/en
@@ -1400,7 +1388,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/mcnetic
 #srv/web/owncloud/3rdparty/mcnetic/phpzipstreamer
 #srv/web/owncloud/3rdparty/mcnetic/phpzipstreamer/COPYING
-#srv/web/owncloud/3rdparty/mcnetic/phpzipstreamer/README.md
 #srv/web/owncloud/3rdparty/mcnetic/phpzipstreamer/ZipStreamer.php
 #srv/web/owncloud/3rdparty/miniColors
 #srv/web/owncloud/3rdparty/miniColors/GPL-LICENSE.txt
@@ -1421,7 +1408,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/phpmailer/phpmailer
 #srv/web/owncloud/3rdparty/phpmailer/phpmailer/LICENSE
 #srv/web/owncloud/3rdparty/phpmailer/phpmailer/PHPMailerAutoload.php
-#srv/web/owncloud/3rdparty/phpmailer/phpmailer/README.md
 #srv/web/owncloud/3rdparty/phpmailer/phpmailer/changelog.md
 #srv/web/owncloud/3rdparty/phpmailer/phpmailer/class.phpmailer.php
 #srv/web/owncloud/3rdparty/phpmailer/phpmailer/class.pop3.php
@@ -1538,7 +1524,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/phpseclib/phpseclib/.gitattributes
 #srv/web/owncloud/3rdparty/phpseclib/phpseclib/AUTHORS
 #srv/web/owncloud/3rdparty/phpseclib/phpseclib/LICENSE
-#srv/web/owncloud/3rdparty/phpseclib/phpseclib/README.md
 #srv/web/owncloud/3rdparty/phpseclib/phpseclib/build
 #srv/web/owncloud/3rdparty/phpseclib/phpseclib/build/code-sniffer-ruleset-tests.xml
 #srv/web/owncloud/3rdparty/phpseclib/phpseclib/build/code-sniffer-ruleset.xml
@@ -1606,7 +1591,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/.coveralls.yml
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/CONTRIBUTING.md
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/LICENSE
-#srv/web/owncloud/3rdparty/rackspace/php-opencloud/README.md
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/composer.json
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/docs
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/docs/changelog
@@ -1647,7 +1631,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/docs/userguide/Identity/Users.md
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/docs/userguide/Iterators.md
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/docs/userguide/LoadBalancer
-#srv/web/owncloud/3rdparty/rackspace/php-opencloud/docs/userguide/LoadBalancer/README.md
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/docs/userguide/LoadBalancer/USERGUIDE.md
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/docs/userguide/ObjectStore
 #srv/web/owncloud/3rdparty/rackspace/php-opencloud/docs/userguide/ObjectStore/Access.md
@@ -2186,7 +2169,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/sabre/dav
 #srv/web/owncloud/3rdparty/sabre/dav/ChangeLog
 #srv/web/owncloud/3rdparty/sabre/dav/LICENSE
-#srv/web/owncloud/3rdparty/sabre/dav/README.md
 #srv/web/owncloud/3rdparty/sabre/dav/bin
 #srv/web/owncloud/3rdparty/sabre/dav/bin/googlecode_upload.py
 #srv/web/owncloud/3rdparty/sabre/dav/bin/migrateto17.php
@@ -2645,7 +2627,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/sabre/vobject
 #srv/web/owncloud/3rdparty/sabre/vobject/ChangeLog
 #srv/web/owncloud/3rdparty/sabre/vobject/LICENSE
-#srv/web/owncloud/3rdparty/sabre/vobject/README.md
 #srv/web/owncloud/3rdparty/sabre/vobject/bin
 #srv/web/owncloud/3rdparty/sabre/vobject/bin/bench.php
 #srv/web/owncloud/3rdparty/sabre/vobject/bin/generateicalendardata.php
@@ -2786,7 +2767,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/symfony/console/Symfony/Component/Console/Output/Output.php
 #srv/web/owncloud/3rdparty/symfony/console/Symfony/Component/Console/Output/OutputInterface.php
 #srv/web/owncloud/3rdparty/symfony/console/Symfony/Component/Console/Output/StreamOutput.php
-#srv/web/owncloud/3rdparty/symfony/console/Symfony/Component/Console/README.md
 #srv/web/owncloud/3rdparty/symfony/console/Symfony/Component/Console/Shell.php
 #srv/web/owncloud/3rdparty/symfony/console/Symfony/Component/Console/Tester
 #srv/web/owncloud/3rdparty/symfony/console/Symfony/Component/Console/Tester/ApplicationTester.php
@@ -2939,7 +2919,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/symfony/event-dispatcher/Symfony/Component/EventDispatcher/GenericEvent.php
 #srv/web/owncloud/3rdparty/symfony/event-dispatcher/Symfony/Component/EventDispatcher/ImmutableEventDispatcher.php
 #srv/web/owncloud/3rdparty/symfony/event-dispatcher/Symfony/Component/EventDispatcher/LICENSE
-#srv/web/owncloud/3rdparty/symfony/event-dispatcher/Symfony/Component/EventDispatcher/README.md
 #srv/web/owncloud/3rdparty/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests
 #srv/web/owncloud/3rdparty/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/ContainerAwareEventDispatcherTest.php
 #srv/web/owncloud/3rdparty/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/Debug
@@ -2973,7 +2952,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/symfony/process/Symfony/Component/Process/ProcessBuilder.php
 #srv/web/owncloud/3rdparty/symfony/process/Symfony/Component/Process/ProcessPipes.php
 #srv/web/owncloud/3rdparty/symfony/process/Symfony/Component/Process/ProcessUtils.php
-#srv/web/owncloud/3rdparty/symfony/process/Symfony/Component/Process/README.md
 #srv/web/owncloud/3rdparty/symfony/process/Symfony/Component/Process/Tests
 #srv/web/owncloud/3rdparty/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
 #srv/web/owncloud/3rdparty/symfony/process/Symfony/Component/Process/Tests/NonStopableProcess.php
@@ -3034,7 +3012,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/symfony/routing/Symfony/Component/Routing/Matcher/RedirectableUrlMatcherInterface.php
 #srv/web/owncloud/3rdparty/symfony/routing/Symfony/Component/Routing/Matcher/UrlMatcher.php
 #srv/web/owncloud/3rdparty/symfony/routing/Symfony/Component/Routing/Matcher/UrlMatcherInterface.php
-#srv/web/owncloud/3rdparty/symfony/routing/Symfony/Component/Routing/README.md
 #srv/web/owncloud/3rdparty/symfony/routing/Symfony/Component/Routing/RequestContext.php
 #srv/web/owncloud/3rdparty/symfony/routing/Symfony/Component/Routing/RequestContextAwareInterface.php
 #srv/web/owncloud/3rdparty/symfony/routing/Symfony/Component/Routing/Route.php
@@ -3107,7 +3084,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/timepicker/releases.txt
 #srv/web/owncloud/3rdparty/zxcvbn
 #srv/web/owncloud/3rdparty/zxcvbn/LICENSE.txt
-#srv/web/owncloud/3rdparty/zxcvbn/README.md
 #srv/web/owncloud/3rdparty/zxcvbn/js
 #srv/web/owncloud/3rdparty/zxcvbn/js/zxcvbn.js
 #srv/web/owncloud/3rdparty/zxcvbn/js/zxcvbn.min.js
@@ -3115,7 +3091,6 @@ srv/web/owncloud
 #srv/web/owncloud/COPYING-AGPL
 #srv/web/owncloud/apps
 #srv/web/owncloud/apps/activity
-#srv/web/owncloud/apps/activity/README.md
 #srv/web/owncloud/apps/activity/ajax
 #srv/web/owncloud/apps/activity/ajax/fetch.php
 #srv/web/owncloud/apps/activity/ajax/rssfeed.php
@@ -3124,6 +3099,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/activity/appinfo/app.php
 #srv/web/owncloud/apps/activity/appinfo/database.xml
 #srv/web/owncloud/apps/activity/appinfo/info.xml
+#srv/web/owncloud/apps/activity/appinfo/preupdate.php
 #srv/web/owncloud/apps/activity/appinfo/routes.php
 #srv/web/owncloud/apps/activity/appinfo/update.php
 #srv/web/owncloud/apps/activity/appinfo/version
@@ -3296,78 +3272,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/activity/tests/parameterhelpertest.php
 #srv/web/owncloud/apps/activity/tests/phpunit.xml
 #srv/web/owncloud/apps/activity/tests/usersettingstest.php
-#srv/web/owncloud/apps/admin_dependencies_chk
-#srv/web/owncloud/apps/admin_dependencies_chk/appinfo
-#srv/web/owncloud/apps/admin_dependencies_chk/appinfo/app.php
-#srv/web/owncloud/apps/admin_dependencies_chk/appinfo/info.xml
-#srv/web/owncloud/apps/admin_dependencies_chk/appinfo/version
-#srv/web/owncloud/apps/admin_dependencies_chk/css
-#srv/web/owncloud/apps/admin_dependencies_chk/css/style.css
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ar.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ast.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/bg_BG.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/bn_BD.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ca.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/cs_CZ.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/da.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/de.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/de_CH.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/de_DE.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/el.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/en_GB.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/eo.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/es.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/es_AR.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/es_CL.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/es_MX.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/et_EE.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/eu.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/eu_ES.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/fa.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/fi_FI.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/fr.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/gl.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/hu_HU.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/id.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/is.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/it.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ja.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ja_JP.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/jv.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ka_GE.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/km.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ko.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/lb.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/lt_LT.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/lv.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/mk.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/nb_NO.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/nl.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/nn_NO.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/pl.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/pt_BR.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/pt_PT.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ro.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ru.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/si_LK.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/sk_SK.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/sl.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/sq.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/sr.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/sr@latin.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/sv.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ta_LK.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/th_TH.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/tr.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/ug.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/uk.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/vi.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/zh_CN.php
-#srv/web/owncloud/apps/admin_dependencies_chk/l10n/zh_TW.php
-#srv/web/owncloud/apps/admin_dependencies_chk/settings.php
-#srv/web/owncloud/apps/admin_dependencies_chk/templates
-#srv/web/owncloud/apps/admin_dependencies_chk/templates/settings.php
 #srv/web/owncloud/apps/bookmarks
 #srv/web/owncloud/apps/bookmarks/3rdparty
 #srv/web/owncloud/apps/bookmarks/3rdparty/css
@@ -3375,7 +3279,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/bookmarks/3rdparty/js
 #srv/web/owncloud/apps/bookmarks/3rdparty/js/js_tpl.js
 #srv/web/owncloud/apps/bookmarks/3rdparty/js/tag-it.js
-#srv/web/owncloud/apps/bookmarks/README.md
 #srv/web/owncloud/apps/bookmarks/addBm.php
 #srv/web/owncloud/apps/bookmarks/ajax
 #srv/web/owncloud/apps/bookmarks/ajax/delBookmark.php
@@ -3640,7 +3543,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/calendar/3rdparty/fullcalendar/js/fullcalendar.js
 #srv/web/owncloud/apps/calendar/3rdparty/fullcalendar/js/fullcalendar.min.js
 #srv/web/owncloud/apps/calendar/3rdparty/fullcalendar/js/gcal.js
-#srv/web/owncloud/apps/calendar/README.md
 #srv/web/owncloud/apps/calendar/ajax
 #srv/web/owncloud/apps/calendar/ajax/cache
 #srv/web/owncloud/apps/calendar/ajax/cache/rescan.php
@@ -4073,10 +3975,8 @@ srv/web/owncloud
 #srv/web/owncloud/apps/calendar/tests
 #srv/web/owncloud/apps/calendar/tests/calendar.php
 #srv/web/owncloud/apps/contacts
-#srv/web/owncloud/apps/contacts/.jshintrc
 #srv/web/owncloud/apps/contacts/COPYING-README
 #srv/web/owncloud/apps/contacts/Changelog
-#srv/web/owncloud/apps/contacts/README.md
 #srv/web/owncloud/apps/contacts/admin.php
 #srv/web/owncloud/apps/contacts/appinfo
 #srv/web/owncloud/apps/contacts/appinfo/app.php
@@ -4551,7 +4451,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/contacts/tests/preseed-config.php
 #srv/web/owncloud/apps/contacts/tests/setup_owncloud.sh
 #srv/web/owncloud/apps/documents
-#srv/web/owncloud/apps/documents/README.md
 #srv/web/owncloud/apps/documents/admin.php
 #srv/web/owncloud/apps/documents/ajax
 #srv/web/owncloud/apps/documents/ajax/admin.php
@@ -5154,6 +5053,8 @@ srv/web/owncloud
 #srv/web/owncloud/apps/documents/js/3rdparty/resources/dojo/resources/images/dndNoCopy.png
 #srv/web/owncloud/apps/documents/js/3rdparty/resources/dojo/resources/images/dndNoMove.png
 #srv/web/owncloud/apps/documents/js/3rdparty/resources/dojox
+#srv/web/owncloud/apps/documents/js/3rdparty/resources/dojox/html
+#srv/web/owncloud/apps/documents/js/3rdparty/resources/dojox/html/entities.js
 #srv/web/owncloud/apps/documents/js/3rdparty/resources/dojox/layout
 #srv/web/owncloud/apps/documents/js/3rdparty/resources/dojox/layout/resources
 #srv/web/owncloud/apps/documents/js/3rdparty/resources/dojox/layout/resources/DndGridContainer.css
@@ -6008,6 +5909,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_encryption/tests/proxy.php
 #srv/web/owncloud/apps/files_encryption/tests/share.php
 #srv/web/owncloud/apps/files_encryption/tests/stream.php
+#srv/web/owncloud/apps/files_encryption/tests/testcase.php
 #srv/web/owncloud/apps/files_encryption/tests/trashbin.php
 #srv/web/owncloud/apps/files_encryption/tests/util.php
 #srv/web/owncloud/apps/files_encryption/tests/webdav.php
@@ -6028,7 +5930,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_external/3rdparty/Dropbox/OAuth/Consumer
 #srv/web/owncloud/apps/files_external/3rdparty/Dropbox/OAuth/Consumer/Dropbox.php
 #srv/web/owncloud/apps/files_external/3rdparty/Dropbox/OAuth/Curl.php
-#srv/web/owncloud/apps/files_external/3rdparty/Dropbox/README.md
 #srv/web/owncloud/apps/files_external/3rdparty/Dropbox/autoload.php
 #srv/web/owncloud/apps/files_external/3rdparty/aws-sdk-php
 #srv/web/owncloud/apps/files_external/3rdparty/aws-sdk-php/Aws
@@ -7142,7 +7043,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_pdfviewer/3rdparty/pdfjs/pdf.worker.js
 #srv/web/owncloud/apps/files_pdfviewer/3rdparty/pdfjs/viewer.css
 #srv/web/owncloud/apps/files_pdfviewer/3rdparty/pdfjs/viewer.js
-#srv/web/owncloud/apps/files_pdfviewer/README.md
 #srv/web/owncloud/apps/files_pdfviewer/appinfo
 #srv/web/owncloud/apps/files_pdfviewer/appinfo/app.php
 #srv/web/owncloud/apps/files_pdfviewer/appinfo/info.xml
@@ -7281,6 +7181,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_sharing/lib/proxy.php
 #srv/web/owncloud/apps/files_sharing/lib/readonlycache.php
 #srv/web/owncloud/apps/files_sharing/lib/readonlywrapper.php
+#srv/web/owncloud/apps/files_sharing/lib/scanner.php
 #srv/web/owncloud/apps/files_sharing/lib/share
 #srv/web/owncloud/apps/files_sharing/lib/share/file.php
 #srv/web/owncloud/apps/files_sharing/lib/share/folder.php
@@ -7310,6 +7211,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_sharing/tests/js/shareSpec.js
 #srv/web/owncloud/apps/files_sharing/tests/js/sharedfilelistSpec.js
 #srv/web/owncloud/apps/files_sharing/tests/permissions.php
+#srv/web/owncloud/apps/files_sharing/tests/propagation.php
 #srv/web/owncloud/apps/files_sharing/tests/proxy.php
 #srv/web/owncloud/apps/files_sharing/tests/share.php
 #srv/web/owncloud/apps/files_sharing/tests/sharedmount.php
@@ -7318,7 +7220,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_sharing/tests/updater.php
 #srv/web/owncloud/apps/files_sharing/tests/watcher.php
 #srv/web/owncloud/apps/files_texteditor
-#srv/web/owncloud/apps/files_texteditor/README.md
 #srv/web/owncloud/apps/files_texteditor/ajax
 #srv/web/owncloud/apps/files_texteditor/ajax/loadfile.php
 #srv/web/owncloud/apps/files_texteditor/ajax/savefile.php
@@ -7677,6 +7578,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_trashbin/appinfo/app.php
 #srv/web/owncloud/apps/files_trashbin/appinfo/database.xml
 #srv/web/owncloud/apps/files_trashbin/appinfo/info.xml
+#srv/web/owncloud/apps/files_trashbin/appinfo/preupdate.php
 #srv/web/owncloud/apps/files_trashbin/appinfo/routes.php
 #srv/web/owncloud/apps/files_trashbin/appinfo/update.php
 #srv/web/owncloud/apps/files_trashbin/appinfo/version
@@ -7923,7 +7825,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_videoviewer/src/silverlight/SilverlightMediaElement.csproj.user
 #srv/web/owncloud/apps/files_videoviewer/src/silverlight/SilverlightMediaElement.sln
 #srv/web/owncloud/apps/firstrunwizard
-#srv/web/owncloud/apps/firstrunwizard/README.md
 #srv/web/owncloud/apps/firstrunwizard/ajax
 #srv/web/owncloud/apps/firstrunwizard/ajax/disable.php
 #srv/web/owncloud/apps/firstrunwizard/ajax/enable.php
@@ -8016,7 +7917,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/firstrunwizard/templates/wizard.php
 #srv/web/owncloud/apps/firstrunwizard/wizard.php
 #srv/web/owncloud/apps/gallery
-#srv/web/owncloud/apps/gallery/README.md
 #srv/web/owncloud/apps/gallery/ajax
 #srv/web/owncloud/apps/gallery/ajax/gallery.php
 #srv/web/owncloud/apps/gallery/ajax/getimages.php
@@ -8696,7 +8596,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/templateeditor/templates/settings-admin.php
 #srv/web/owncloud/apps/updater
 #srv/web/owncloud/apps/updater/COPYING-AGPL
-#srv/web/owncloud/apps/updater/README.md
 #srv/web/owncloud/apps/updater/admin.php
 #srv/web/owncloud/apps/updater/ajax
 #srv/web/owncloud/apps/updater/ajax/backup
@@ -8817,7 +8716,6 @@ srv/web/owncloud
 #srv/web/owncloud/apps/updater/templates/update.php
 #srv/web/owncloud/apps/updater/update.php
 #srv/web/owncloud/apps/user_external
-#srv/web/owncloud/apps/user_external/README.md
 #srv/web/owncloud/apps/user_external/appinfo
 #srv/web/owncloud/apps/user_external/appinfo/app.php
 #srv/web/owncloud/apps/user_external/appinfo/database.xml
@@ -8851,8 +8749,11 @@ srv/web/owncloud
 #srv/web/owncloud/apps/user_ldap/appinfo/update.php
 #srv/web/owncloud/apps/user_ldap/appinfo/version
 #srv/web/owncloud/apps/user_ldap/command
+#srv/web/owncloud/apps/user_ldap/command/checkuser.php
+#srv/web/owncloud/apps/user_ldap/command/search.php
 #srv/web/owncloud/apps/user_ldap/command/setconfig.php
 #srv/web/owncloud/apps/user_ldap/command/showconfig.php
+#srv/web/owncloud/apps/user_ldap/command/showremnants.php
 #srv/web/owncloud/apps/user_ldap/command/testconfig.php
 #srv/web/owncloud/apps/user_ldap/css
 #srv/web/owncloud/apps/user_ldap/css/settings.css
@@ -8986,14 +8887,18 @@ srv/web/owncloud
 #srv/web/owncloud/apps/user_ldap/lib/filesystemhelper.php
 #srv/web/owncloud/apps/user_ldap/lib/helper.php
 #srv/web/owncloud/apps/user_ldap/lib/ildapwrapper.php
+#srv/web/owncloud/apps/user_ldap/lib/jobs
 #srv/web/owncloud/apps/user_ldap/lib/jobs.php
+#srv/web/owncloud/apps/user_ldap/lib/jobs/cleanup.php
 #srv/web/owncloud/apps/user_ldap/lib/ldap.php
 #srv/web/owncloud/apps/user_ldap/lib/ldaputility.php
 #srv/web/owncloud/apps/user_ldap/lib/logwrapper.php
 #srv/web/owncloud/apps/user_ldap/lib/proxy.php
 #srv/web/owncloud/apps/user_ldap/lib/user
+#srv/web/owncloud/apps/user_ldap/lib/user/deletedusersindex.php
 #srv/web/owncloud/apps/user_ldap/lib/user/iusertools.php
 #srv/web/owncloud/apps/user_ldap/lib/user/manager.php
+#srv/web/owncloud/apps/user_ldap/lib/user/offlineuser.php
 #srv/web/owncloud/apps/user_ldap/lib/user/user.php
 #srv/web/owncloud/apps/user_ldap/lib/wizard.php
 #srv/web/owncloud/apps/user_ldap/lib/wizardresult.php
@@ -9009,10 +8914,10 @@ srv/web/owncloud
 #srv/web/owncloud/apps/user_ldap/tests
 #srv/web/owncloud/apps/user_ldap/tests/access.php
 #srv/web/owncloud/apps/user_ldap/tests/connection.php
-#srv/web/owncloud/apps/user_ldap/tests/data
-#srv/web/owncloud/apps/user_ldap/tests/data/sid.dat
 #srv/web/owncloud/apps/user_ldap/tests/group_ldap.php
 #srv/web/owncloud/apps/user_ldap/tests/helper.php
+#srv/web/owncloud/apps/user_ldap/tests/jobs
+#srv/web/owncloud/apps/user_ldap/tests/jobs/cleanup.php
 #srv/web/owncloud/apps/user_ldap/tests/user
 #srv/web/owncloud/apps/user_ldap/tests/user/manager.php
 #srv/web/owncloud/apps/user_ldap/tests/user/user.php
@@ -9132,6 +9037,7 @@ srv/web/owncloud
 #srv/web/owncloud/core/command/status.php
 #srv/web/owncloud/core/command/upgrade.php
 #srv/web/owncloud/core/command/user
+#srv/web/owncloud/core/command/user/delete.php
 #srv/web/owncloud/core/command/user/lastseen.php
 #srv/web/owncloud/core/command/user/report.php
 #srv/web/owncloud/core/command/user/resetpassword.php
@@ -9170,243 +9076,277 @@ srv/web/owncloud
 #srv/web/owncloud/core/css/styles.css
 #srv/web/owncloud/core/doc
 #srv/web/owncloud/core/doc/admin
-#srv/web/owncloud/core/doc/admin/_images
-#srv/web/owncloud/core/doc/admin/_images/antivirus-app.png
-#srv/web/owncloud/core/doc/admin/_images/antivirus-config.png
-#srv/web/owncloud/core/doc/admin/_images/antivirus-daemon-socket.png
-#srv/web/owncloud/core/doc/admin/_images/antivirus-executable.png
-#srv/web/owncloud/core/doc/admin/_images/antivirus-logging.png
-#srv/web/owncloud/core/doc/admin/_images/create_public_share.png
-#srv/web/owncloud/core/doc/admin/_images/documents_app_enable.png
-#srv/web/owncloud/core/doc/admin/_images/encryption1.png
-#srv/web/owncloud/core/doc/admin/_images/encryption2.png
-#srv/web/owncloud/core/doc/admin/_images/encryption3.png
-#srv/web/owncloud/core/doc/admin/_images/encryption4.png
-#srv/web/owncloud/core/doc/admin/_images/encryption5.png
-#srv/web/owncloud/core/doc/admin/_images/encryption6.png
-#srv/web/owncloud/core/doc/admin/_images/encryption7.png
-#srv/web/owncloud/core/doc/admin/_images/encryption8.png
-#srv/web/owncloud/core/doc/admin/_images/encryption9.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-amazons3.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-app-add.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-app-enable.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-app-local.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-app-usermounts.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-allowshare.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-app.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-configapp.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-oc.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-ftp.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive-0auth.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive-9.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive-sdk.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive1.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive2.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive5.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive7.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive8.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-smb.png
-#srv/web/owncloud/core/doc/admin/_images/external-storage-webdav.png
-#srv/web/owncloud/core/doc/admin/_images/install-wizard-advanced.png
-#srv/web/owncloud/core/doc/admin/_images/install-wizard.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-advanced-1-connection.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-advanced-2-directory.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-advanced-3-attributes.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-expert.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-fetched-avatar.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-settings-invalid-oc45.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-settings-valid-oc45.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-wizard-1-server.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-wizard-2-user.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-wizard-3-login.png
-#srv/web/owncloud/core/doc/admin/_images/ldap-wizard-4-group.png
-#srv/web/owncloud/core/doc/admin/_images/lucene-search-enable.png
-#srv/web/owncloud/core/doc/admin/_images/lucene-search-user.png
-#srv/web/owncloud/core/doc/admin/_images/oc_admin_app_page.png
-#srv/web/owncloud/core/doc/admin/_images/preview_images.png
-#srv/web/owncloud/core/doc/admin/_images/remote_shares.png
-#srv/web/owncloud/core/doc/admin/_images/sharing-admin.png
-#srv/web/owncloud/core/doc/admin/_images/sharing-user-local.png
-#srv/web/owncloud/core/doc/admin/_images/sharing-user.png
-#srv/web/owncloud/core/doc/admin/_images/smtp-config-php-sendmail.png
-#srv/web/owncloud/core/doc/admin/_images/smtp-config-smtp.png
-#srv/web/owncloud/core/doc/admin/_images/smtp-config-wizard.png
-#srv/web/owncloud/core/doc/admin/_images/ucs-app-center-install.png
-#srv/web/owncloud/core/doc/admin/_images/ucs-app-center-module.png
-#srv/web/owncloud/core/doc/admin/_images/ucsint.png
-#srv/web/owncloud/core/doc/admin/_images/ucsint1.png
-#srv/web/owncloud/core/doc/admin/_images/ucsint2.png
-#srv/web/owncloud/core/doc/admin/_images/untrusted-domain.png
-#srv/web/owncloud/core/doc/admin/_images/updater-1.png
-#srv/web/owncloud/core/doc/admin/_images/updater-2.png
-#srv/web/owncloud/core/doc/admin/_images/updater-3.png
-#srv/web/owncloud/core/doc/admin/_images/updater-4.png
-#srv/web/owncloud/core/doc/admin/_images/updater-5.png
-#srv/web/owncloud/core/doc/admin/_images/updater-6.png
-#srv/web/owncloud/core/doc/admin/_images/updater-7.png
-#srv/web/owncloud/core/doc/admin/_images/users-config.png
-#srv/web/owncloud/core/doc/admin/_images/users-create.png
-#srv/web/owncloud/core/doc/admin/_images/users-groups.png
-#srv/web/owncloud/core/doc/admin/_images/win7features.jpg
-#srv/web/owncloud/core/doc/admin/_images/winserverroles.jpg
-#srv/web/owncloud/core/doc/admin/_sources
-#srv/web/owncloud/core/doc/admin/_sources/configuration
-#srv/web/owncloud/core/doc/admin/_sources/configuration/auth_ldap.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/background_jobs.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration-antivirus.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_3rdparty.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_apps.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_assets.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_automation.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_config_sample_php.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_custom_clients.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_database.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_encryption.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_file_sharing.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_files_locking.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_knowledgebase.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_language.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_logging.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_mail.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_preview.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_reverseproxy.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_users.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuring_big_file_upload.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuring_documents.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuring_search.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/custom_mount_config.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/custom_mount_config_gui.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/custom_user_backend.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/server_to_server_managing.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/xsendfile.txt
-#srv/web/owncloud/core/doc/admin/_sources/contents.txt
-#srv/web/owncloud/core/doc/admin/_sources/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation
-#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_hiawatha.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_lighttpd.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_nginx.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_yaws.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/installation_appliance.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/installation_linux.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/installation_macos.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/installation_others.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/installation_source.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/installation_ucs.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/installation_windows.txt
-#srv/web/owncloud/core/doc/admin/_sources/installation/installation_wizard.txt
-#srv/web/owncloud/core/doc/admin/_sources/issues
-#srv/web/owncloud/core/doc/admin/_sources/issues/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/maintenance
-#srv/web/owncloud/core/doc/admin/_sources/maintenance/backup.txt
-#srv/web/owncloud/core/doc/admin/_sources/maintenance/convert_db.txt
-#srv/web/owncloud/core/doc/admin/_sources/maintenance/enable_maintenance.txt
-#srv/web/owncloud/core/doc/admin/_sources/maintenance/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/maintenance/migrating.txt
-#srv/web/owncloud/core/doc/admin/_sources/maintenance/restore.txt
-#srv/web/owncloud/core/doc/admin/_sources/maintenance/update.txt
-#srv/web/owncloud/core/doc/admin/_sources/maintenance/upgrade.txt
-#srv/web/owncloud/core/doc/admin/_sources/whats_new_admin.txt
-#srv/web/owncloud/core/doc/admin/_static
-#srv/web/owncloud/core/doc/admin/_static/ajax-loader.gif
-#srv/web/owncloud/core/doc/admin/_static/basic.css
-#srv/web/owncloud/core/doc/admin/_static/bootstrap-responsive.css
-#srv/web/owncloud/core/doc/admin/_static/bootstrap-sphinx.css
-#srv/web/owncloud/core/doc/admin/_static/bootstrap.css
-#srv/web/owncloud/core/doc/admin/_static/bootstrap.js
-#srv/web/owncloud/core/doc/admin/_static/comment-bright.png
-#srv/web/owncloud/core/doc/admin/_static/comment-close.png
-#srv/web/owncloud/core/doc/admin/_static/comment.png
-#srv/web/owncloud/core/doc/admin/_static/doctools.js
-#srv/web/owncloud/core/doc/admin/_static/down-pressed.png
-#srv/web/owncloud/core/doc/admin/_static/down.png
-#srv/web/owncloud/core/doc/admin/_static/file.png
-#srv/web/owncloud/core/doc/admin/_static/img
-#srv/web/owncloud/core/doc/admin/_static/img/glyphicons-halflings-white.png
-#srv/web/owncloud/core/doc/admin/_static/img/glyphicons-halflings.png
-#srv/web/owncloud/core/doc/admin/_static/img/note.svg
-#srv/web/owncloud/core/doc/admin/_static/img/todo.svg
-#srv/web/owncloud/core/doc/admin/_static/jquery.js
-#srv/web/owncloud/core/doc/admin/_static/logo-blue.pdf
-#srv/web/owncloud/core/doc/admin/_static/logo-blue.png
-#srv/web/owncloud/core/doc/admin/_static/minus.png
-#srv/web/owncloud/core/doc/admin/_static/plus.png
-#srv/web/owncloud/core/doc/admin/_static/pygments.css
-#srv/web/owncloud/core/doc/admin/_static/searchtools.js
-#srv/web/owncloud/core/doc/admin/_static/style.css
-#srv/web/owncloud/core/doc/admin/_static/underscore.js
-#srv/web/owncloud/core/doc/admin/_static/up-pressed.png
-#srv/web/owncloud/core/doc/admin/_static/up.png
-#srv/web/owncloud/core/doc/admin/_static/websupport.js
-#srv/web/owncloud/core/doc/admin/configuration
-#srv/web/owncloud/core/doc/admin/configuration/auth_ldap.html
-#srv/web/owncloud/core/doc/admin/configuration/background_jobs.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration-antivirus.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_3rdparty.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_apps.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_assets.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_automation.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_config_sample_php.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_custom_clients.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_database.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_encryption.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_file_sharing.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_files_locking.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_knowledgebase.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_language.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_logging.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_mail.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_preview.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_reverseproxy.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_users.html
-#srv/web/owncloud/core/doc/admin/configuration/configuring_big_file_upload.html
-#srv/web/owncloud/core/doc/admin/configuration/configuring_documents.html
-#srv/web/owncloud/core/doc/admin/configuration/configuring_search.html
-#srv/web/owncloud/core/doc/admin/configuration/custom_mount_config.html
-#srv/web/owncloud/core/doc/admin/configuration/custom_mount_config_gui.html
-#srv/web/owncloud/core/doc/admin/configuration/custom_user_backend.html
-#srv/web/owncloud/core/doc/admin/configuration/index.html
-#srv/web/owncloud/core/doc/admin/configuration/server_to_server_managing.html
-#srv/web/owncloud/core/doc/admin/configuration/xsendfile.html
-#srv/web/owncloud/core/doc/admin/contents.html
-#srv/web/owncloud/core/doc/admin/genindex.html
 #srv/web/owncloud/core/doc/admin/index.html
-#srv/web/owncloud/core/doc/admin/installation
-#srv/web/owncloud/core/doc/admin/installation/configuration_hiawatha.html
-#srv/web/owncloud/core/doc/admin/installation/configuration_lighttpd.html
-#srv/web/owncloud/core/doc/admin/installation/configuration_nginx.html
-#srv/web/owncloud/core/doc/admin/installation/configuration_yaws.html
-#srv/web/owncloud/core/doc/admin/installation/index.html
-#srv/web/owncloud/core/doc/admin/installation/installation_appliance.html
-#srv/web/owncloud/core/doc/admin/installation/installation_linux.html
-#srv/web/owncloud/core/doc/admin/installation/installation_macos.html
-#srv/web/owncloud/core/doc/admin/installation/installation_others.html
-#srv/web/owncloud/core/doc/admin/installation/installation_source.html
-#srv/web/owncloud/core/doc/admin/installation/installation_ucs.html
-#srv/web/owncloud/core/doc/admin/installation/installation_windows.html
-#srv/web/owncloud/core/doc/admin/installation/installation_wizard.html
-#srv/web/owncloud/core/doc/admin/issues
-#srv/web/owncloud/core/doc/admin/issues/index.html
-#srv/web/owncloud/core/doc/admin/maintenance
-#srv/web/owncloud/core/doc/admin/maintenance/backup.html
-#srv/web/owncloud/core/doc/admin/maintenance/convert_db.html
-#srv/web/owncloud/core/doc/admin/maintenance/enable_maintenance.html
-#srv/web/owncloud/core/doc/admin/maintenance/index.html
-#srv/web/owncloud/core/doc/admin/maintenance/migrating.html
-#srv/web/owncloud/core/doc/admin/maintenance/restore.html
-#srv/web/owncloud/core/doc/admin/maintenance/update.html
-#srv/web/owncloud/core/doc/admin/maintenance/upgrade.html
-#srv/web/owncloud/core/doc/admin/objects.inv
-#srv/web/owncloud/core/doc/admin/search.html
-#srv/web/owncloud/core/doc/admin/searchindex.js
-#srv/web/owncloud/core/doc/admin/whats_new_admin.html
+#srv/web/owncloud/core/doc/admin/release
+#srv/web/owncloud/core/doc/admin/release/.buildinfo
+#srv/web/owncloud/core/doc/admin/release/_images
+#srv/web/owncloud/core/doc/admin/release/_images/antivirus-app.png
+#srv/web/owncloud/core/doc/admin/release/_images/antivirus-config.png
+#srv/web/owncloud/core/doc/admin/release/_images/antivirus-daemon-socket.png
+#srv/web/owncloud/core/doc/admin/release/_images/antivirus-executable.png
+#srv/web/owncloud/core/doc/admin/release/_images/antivirus-logging.png
+#srv/web/owncloud/core/doc/admin/release/_images/create_public_share.png
+#srv/web/owncloud/core/doc/admin/release/_images/documents_app_enable.png
+#srv/web/owncloud/core/doc/admin/release/_images/documents_apply_test.png
+#srv/web/owncloud/core/doc/admin/release/_images/encryption1.png
+#srv/web/owncloud/core/doc/admin/release/_images/encryption2.png
+#srv/web/owncloud/core/doc/admin/release/_images/encryption3.png
+#srv/web/owncloud/core/doc/admin/release/_images/encryption4.png
+#srv/web/owncloud/core/doc/admin/release/_images/encryption5.png
+#srv/web/owncloud/core/doc/admin/release/_images/encryption6.png
+#srv/web/owncloud/core/doc/admin/release/_images/encryption7.png
+#srv/web/owncloud/core/doc/admin/release/_images/encryption8.png
+#srv/web/owncloud/core/doc/admin/release/_images/encryption9.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-sites-1.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-sites-2.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-sites-3.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-sites-4.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-sites-5.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-amazons3.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-app-add.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-app-enable.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-app-local.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-app-usermounts.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-dropbox-allowshare.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-dropbox-app.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-dropbox-configapp.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-dropbox-oc.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-dropbox.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-ftp.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-google-drive-0auth.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-google-drive-9.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-google-drive-sdk.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-google-drive.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-google-drive1.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-google-drive2.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-google-drive5.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-google-drive7.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-google-drive8.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-smb.png
+#srv/web/owncloud/core/doc/admin/release/_images/external-storage-webdav.png
+#srv/web/owncloud/core/doc/admin/release/_images/install-wizard-advanced.png
+#srv/web/owncloud/core/doc/admin/release/_images/install-wizard.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-advanced-1-connection.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-advanced-2-directory.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-advanced-3-attributes.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-expert.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-fetched-avatar.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-settings-invalid-oc45.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-settings-valid-oc45.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-wizard-1-server.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-wizard-2-user.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-wizard-3-login.png
+#srv/web/owncloud/core/doc/admin/release/_images/ldap-wizard-4-group.png
+#srv/web/owncloud/core/doc/admin/release/_images/lucene-search-enable.png
+#srv/web/owncloud/core/doc/admin/release/_images/lucene-search-user.png
+#srv/web/owncloud/core/doc/admin/release/_images/oc-video-1.png
+#srv/web/owncloud/core/doc/admin/release/_images/oc-video-2.png
+#srv/web/owncloud/core/doc/admin/release/_images/oc_admin_app_page.png
+#srv/web/owncloud/core/doc/admin/release/_images/preview_images.png
+#srv/web/owncloud/core/doc/admin/release/_images/remote_shares.png
+#srv/web/owncloud/core/doc/admin/release/_images/sharing-admin.png
+#srv/web/owncloud/core/doc/admin/release/_images/sharing-user-local.png
+#srv/web/owncloud/core/doc/admin/release/_images/sharing-user.png
+#srv/web/owncloud/core/doc/admin/release/_images/smtp-config-php-sendmail.png
+#srv/web/owncloud/core/doc/admin/release/_images/smtp-config-smtp.png
+#srv/web/owncloud/core/doc/admin/release/_images/smtp-config-wizard.png
+#srv/web/owncloud/core/doc/admin/release/_images/ucs-app-center-install.png
+#srv/web/owncloud/core/doc/admin/release/_images/ucs-app-center-module.png
+#srv/web/owncloud/core/doc/admin/release/_images/ucsint.png
+#srv/web/owncloud/core/doc/admin/release/_images/ucsint1.png
+#srv/web/owncloud/core/doc/admin/release/_images/ucsint2.png
+#srv/web/owncloud/core/doc/admin/release/_images/untrusted-domain.png
+#srv/web/owncloud/core/doc/admin/release/_images/updater-1.png
+#srv/web/owncloud/core/doc/admin/release/_images/updater-2.png
+#srv/web/owncloud/core/doc/admin/release/_images/updater-3.png
+#srv/web/owncloud/core/doc/admin/release/_images/updater-4.png
+#srv/web/owncloud/core/doc/admin/release/_images/updater-5.png
+#srv/web/owncloud/core/doc/admin/release/_images/updater-6.png
+#srv/web/owncloud/core/doc/admin/release/_images/updater-7.png
+#srv/web/owncloud/core/doc/admin/release/_images/users-config.png
+#srv/web/owncloud/core/doc/admin/release/_images/users-create.png
+#srv/web/owncloud/core/doc/admin/release/_images/users-groups.png
+#srv/web/owncloud/core/doc/admin/release/_images/win7features.jpg
+#srv/web/owncloud/core/doc/admin/release/_images/winserverroles.jpg
+#srv/web/owncloud/core/doc/admin/release/_sources
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/activity_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/antivirus_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/automatic_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/background_jobs_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/big_file_upload_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/collaborative_documents_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/config_sample_php_parameters.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/custom_client_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/database_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/email_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/encryption_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/external_sites.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/external_storage_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/external_storage_configuration_gui.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/file_sharing_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/files_locking_enabling.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/harden_server.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/index.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/js_css_asset_management_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/knowledgebase_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/language_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/logging_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/occ_command.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/performance_tips.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/previews_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/reset_admin_password.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/reverse_proxy_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/search_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/server_to_server_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/serving_static_files_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/thirdparty_php_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/user_auth_ftp_smb_imap.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/user_auth_ldap.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/user_auth_ldap_cleanup.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/configuration/user_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/contents.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/index.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/appliance_installation.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/apps_management_installation.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/hiawatha_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/index.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/installation_wizard.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/lighttpd_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/linux_installation.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/macos_installation.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/nginx_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/others_installation.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/selinux_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/source_installation.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/ucs_installation.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/windows_installation.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/installation/yaws_configuration.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/issues
+#srv/web/owncloud/core/doc/admin/release/_sources/issues/index.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/maintenance
+#srv/web/owncloud/core/doc/admin/release/_sources/maintenance/backup.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/maintenance/convert_db.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/maintenance/enable_maintenance.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/maintenance/index.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/maintenance/migrating.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/maintenance/restore.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/maintenance/update.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/maintenance/upgrade.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/release_notes.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/videos.txt
+#srv/web/owncloud/core/doc/admin/release/_sources/whats_new_admin.txt
+#srv/web/owncloud/core/doc/admin/release/_static
+#srv/web/owncloud/core/doc/admin/release/_static/ajax-loader.gif
+#srv/web/owncloud/core/doc/admin/release/_static/basic.css
+#srv/web/owncloud/core/doc/admin/release/_static/bootstrap-responsive.css
+#srv/web/owncloud/core/doc/admin/release/_static/bootstrap-sphinx.css
+#srv/web/owncloud/core/doc/admin/release/_static/bootstrap.css
+#srv/web/owncloud/core/doc/admin/release/_static/bootstrap.js
+#srv/web/owncloud/core/doc/admin/release/_static/comment-bright.png
+#srv/web/owncloud/core/doc/admin/release/_static/comment-close.png
+#srv/web/owncloud/core/doc/admin/release/_static/comment.png
+#srv/web/owncloud/core/doc/admin/release/_static/doctools.js
+#srv/web/owncloud/core/doc/admin/release/_static/down-pressed.png
+#srv/web/owncloud/core/doc/admin/release/_static/down.png
+#srv/web/owncloud/core/doc/admin/release/_static/file.png
+#srv/web/owncloud/core/doc/admin/release/_static/img
+#srv/web/owncloud/core/doc/admin/release/_static/img/glyphicons-halflings-white.png
+#srv/web/owncloud/core/doc/admin/release/_static/img/glyphicons-halflings.png
+#srv/web/owncloud/core/doc/admin/release/_static/img/note.svg
+#srv/web/owncloud/core/doc/admin/release/_static/img/todo.svg
+#srv/web/owncloud/core/doc/admin/release/_static/jquery.js
+#srv/web/owncloud/core/doc/admin/release/_static/logo-blue.pdf
+#srv/web/owncloud/core/doc/admin/release/_static/logo-blue.png
+#srv/web/owncloud/core/doc/admin/release/_static/minus.png
+#srv/web/owncloud/core/doc/admin/release/_static/plus.png
+#srv/web/owncloud/core/doc/admin/release/_static/pygments.css
+#srv/web/owncloud/core/doc/admin/release/_static/searchtools.js
+#srv/web/owncloud/core/doc/admin/release/_static/style.css
+#srv/web/owncloud/core/doc/admin/release/_static/underscore.js
+#srv/web/owncloud/core/doc/admin/release/_static/up-pressed.png
+#srv/web/owncloud/core/doc/admin/release/_static/up.png
+#srv/web/owncloud/core/doc/admin/release/_static/websupport.js
+#srv/web/owncloud/core/doc/admin/release/configuration
+#srv/web/owncloud/core/doc/admin/release/configuration/activity_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/antivirus_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/automatic_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/background_jobs_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/big_file_upload_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/collaborative_documents_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/config_sample_php_parameters.html
+#srv/web/owncloud/core/doc/admin/release/configuration/custom_client_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/database_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/email_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/encryption_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/external_sites.html
+#srv/web/owncloud/core/doc/admin/release/configuration/external_storage_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/external_storage_configuration_gui.html
+#srv/web/owncloud/core/doc/admin/release/configuration/file_sharing_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/files_locking_enabling.html
+#srv/web/owncloud/core/doc/admin/release/configuration/harden_server.html
+#srv/web/owncloud/core/doc/admin/release/configuration/index.html
+#srv/web/owncloud/core/doc/admin/release/configuration/js_css_asset_management_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/knowledgebase_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/language_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/logging_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/occ_command.html
+#srv/web/owncloud/core/doc/admin/release/configuration/performance_tips.html
+#srv/web/owncloud/core/doc/admin/release/configuration/previews_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/reset_admin_password.html
+#srv/web/owncloud/core/doc/admin/release/configuration/reverse_proxy_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/search_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/server_to_server_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/serving_static_files_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/thirdparty_php_configuration.html
+#srv/web/owncloud/core/doc/admin/release/configuration/user_auth_ftp_smb_imap.html
+#srv/web/owncloud/core/doc/admin/release/configuration/user_auth_ldap.html
+#srv/web/owncloud/core/doc/admin/release/configuration/user_auth_ldap_cleanup.html
+#srv/web/owncloud/core/doc/admin/release/configuration/user_configuration.html
+#srv/web/owncloud/core/doc/admin/release/contents.html
+#srv/web/owncloud/core/doc/admin/release/genindex.html
+#srv/web/owncloud/core/doc/admin/release/index.html
+#srv/web/owncloud/core/doc/admin/release/installation
+#srv/web/owncloud/core/doc/admin/release/installation/appliance_installation.html
+#srv/web/owncloud/core/doc/admin/release/installation/apps_management_installation.html
+#srv/web/owncloud/core/doc/admin/release/installation/hiawatha_configuration.html
+#srv/web/owncloud/core/doc/admin/release/installation/index.html
+#srv/web/owncloud/core/doc/admin/release/installation/installation_wizard.html
+#srv/web/owncloud/core/doc/admin/release/installation/lighttpd_configuration.html
+#srv/web/owncloud/core/doc/admin/release/installation/linux_installation.html
+#srv/web/owncloud/core/doc/admin/release/installation/macos_installation.html
+#srv/web/owncloud/core/doc/admin/release/installation/nginx_configuration.html
+#srv/web/owncloud/core/doc/admin/release/installation/others_installation.html
+#srv/web/owncloud/core/doc/admin/release/installation/selinux_configuration.html
+#srv/web/owncloud/core/doc/admin/release/installation/source_installation.html
+#srv/web/owncloud/core/doc/admin/release/installation/ucs_installation.html
+#srv/web/owncloud/core/doc/admin/release/installation/windows_installation.html
+#srv/web/owncloud/core/doc/admin/release/installation/yaws_configuration.html
+#srv/web/owncloud/core/doc/admin/release/issues
+#srv/web/owncloud/core/doc/admin/release/issues/index.html
+#srv/web/owncloud/core/doc/admin/release/maintenance
+#srv/web/owncloud/core/doc/admin/release/maintenance/backup.html
+#srv/web/owncloud/core/doc/admin/release/maintenance/convert_db.html
+#srv/web/owncloud/core/doc/admin/release/maintenance/enable_maintenance.html
+#srv/web/owncloud/core/doc/admin/release/maintenance/index.html
+#srv/web/owncloud/core/doc/admin/release/maintenance/migrating.html
+#srv/web/owncloud/core/doc/admin/release/maintenance/restore.html
+#srv/web/owncloud/core/doc/admin/release/maintenance/update.html
+#srv/web/owncloud/core/doc/admin/release/maintenance/upgrade.html
+#srv/web/owncloud/core/doc/admin/release/objects.inv
+#srv/web/owncloud/core/doc/admin/release/release_notes.html
+#srv/web/owncloud/core/doc/admin/release/search.html
+#srv/web/owncloud/core/doc/admin/release/searchindex.js
+#srv/web/owncloud/core/doc/admin/release/videos.html
+#srv/web/owncloud/core/doc/admin/release/whats_new_admin.html
 #srv/web/owncloud/core/doc/user
 #srv/web/owncloud/core/doc/user/_images
 #srv/web/owncloud/core/doc/user/_images/bookmark_addurl.png
 #srv/web/owncloud/core/doc/user/_images/bookmark_setting.png
+#srv/web/owncloud/core/doc/user/_images/calendar_caldav_icon.png
+#srv/web/owncloud/core/doc/user/_images/calendar_caldav_ios.png
+#srv/web/owncloud/core/doc/user/_images/calendar_caldav_link.png
 #srv/web/owncloud/core/doc/user/_images/calendar_create_event.png
 #srv/web/owncloud/core/doc/user/_images/calendar_create_event_repeat.png
 #srv/web/owncloud/core/doc/user/_images/calendar_create_event_share.png
@@ -9431,9 +9371,7 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/user/_images/contact_vcfpick.jpg
 #srv/web/owncloud/core/doc/user/_images/contacts_empty.png
 #srv/web/owncloud/core/doc/user/_images/contacts_settings.png
-#srv/web/owncloud/core/doc/user/_images/deleted_files.png
 #srv/web/owncloud/core/doc/user/_images/documents_personal_settings.png
-#srv/web/owncloud/core/doc/user/_images/dolphin_webdav.png
 #srv/web/owncloud/core/doc/user/_images/download.png
 #srv/web/owncloud/core/doc/user/_images/email_address_personal_settings.png
 #srv/web/owncloud/core/doc/user/_images/encryption1.png
@@ -9444,7 +9382,7 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/user/_images/explorer_webdav.png
 #srv/web/owncloud/core/doc/user/_images/files_versioning.png
 #srv/web/owncloud/core/doc/user/_images/full_name.png
-#srv/web/owncloud/core/doc/user/_images/gnome3_nautilus_webdav.png
+#srv/web/owncloud/core/doc/user/_images/gear.png
 #srv/web/owncloud/core/doc/user/_images/kdes.png
 #srv/web/owncloud/core/doc/user/_images/kdes1.png
 #srv/web/owncloud/core/doc/user/_images/kdes2.png
@@ -9484,6 +9422,10 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/user/_images/users-share-local.png
 #srv/web/owncloud/core/doc/user/_images/users-share-local2.png
 #srv/web/owncloud/core/doc/user/_images/users-share-public.png
+#srv/web/owncloud/core/doc/user/_images/users-share-public2.jpg
+#srv/web/owncloud/core/doc/user/_images/users-share-public3.jpg
+#srv/web/owncloud/core/doc/user/_images/webdav_dolphin.png
+#srv/web/owncloud/core/doc/user/_images/webdav_gnome3_nautilus.png
 #srv/web/owncloud/core/doc/user/_sources
 #srv/web/owncloud/core/doc/user/_sources/bookmarks.txt
 #srv/web/owncloud/core/doc/user/_sources/contents.txt
@@ -9502,7 +9444,6 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/user/_sources/files/sync.txt
 #srv/web/owncloud/core/doc/user/_sources/files/versioncontrol.txt
 #srv/web/owncloud/core/doc/user/_sources/index.txt
-#srv/web/owncloud/core/doc/user/_sources/installing_apps.txt
 #srv/web/owncloud/core/doc/user/_sources/pim
 #srv/web/owncloud/core/doc/user/_sources/pim/calendar.txt
 #srv/web/owncloud/core/doc/user/_sources/pim/contacts.txt
@@ -9564,7 +9505,6 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/user/files/versioncontrol.html
 #srv/web/owncloud/core/doc/user/genindex.html
 #srv/web/owncloud/core/doc/user/index.html
-#srv/web/owncloud/core/doc/user/installing_apps.html
 #srv/web/owncloud/core/doc/user/objects.inv
 #srv/web/owncloud/core/doc/user/pim
 #srv/web/owncloud/core/doc/user/pim/calendar.html
@@ -9840,7 +9780,6 @@ srv/web/owncloud
 #srv/web/owncloud/core/js/placeholders.js
 #srv/web/owncloud/core/js/select2
 #srv/web/owncloud/core/js/select2/LICENSE
-#srv/web/owncloud/core/js/select2/README.md
 #srv/web/owncloud/core/js/select2/bower.json
 #srv/web/owncloud/core/js/select2/component.json
 #srv/web/owncloud/core/js/select2/composer.json
@@ -10083,6 +10022,8 @@ srv/web/owncloud
 #srv/web/owncloud/core/templates/untrustedDomain.php
 #srv/web/owncloud/core/templates/update.admin.php
 #srv/web/owncloud/core/templates/update.user.php
+#srv/web/owncloud/core/user
+#srv/web/owncloud/core/user/controller.php
 #srv/web/owncloud/cron.php
 #srv/web/owncloud/data
 #srv/web/owncloud/db_structure.xml
@@ -11650,7 +11591,6 @@ srv/web/owncloud
 #srv/web/owncloud/lib/l10n/tzm.php
 #srv/web/owncloud/lib/l10n/ug.php
 #srv/web/owncloud/lib/l10n/uk.php
-#srv/web/owncloud/lib/l10n/ur.php
 #srv/web/owncloud/lib/l10n/ur_PK.php
 #srv/web/owncloud/lib/l10n/uz.php
 #srv/web/owncloud/lib/l10n/vi.php
@@ -11897,7 +11837,7 @@ srv/web/owncloud
 #srv/web/owncloud/lib/private/preview
 #srv/web/owncloud/lib/private/preview.php
 #srv/web/owncloud/lib/private/preview/image.php
-#srv/web/owncloud/lib/private/preview/movies.php
+#srv/web/owncloud/lib/private/preview/movie.php
 #srv/web/owncloud/lib/private/preview/mp3.php
 #srv/web/owncloud/lib/private/preview/office-cl.php
 #srv/web/owncloud/lib/private/preview/office.php
@@ -11923,7 +11863,11 @@ srv/web/owncloud
 #srv/web/owncloud/lib/private/search/result/file.php
 #srv/web/owncloud/lib/private/search/result/folder.php
 #srv/web/owncloud/lib/private/search/result/image.php
+#srv/web/owncloud/lib/private/security
+#srv/web/owncloud/lib/private/security/crypto.php
+#srv/web/owncloud/lib/private/security/stringutils.php
 #srv/web/owncloud/lib/private/server.php
+#srv/web/owncloud/lib/private/servernotavailableexception.php
 #srv/web/owncloud/lib/private/serviceunavailableexception.php
 #srv/web/owncloud/lib/private/session
 #srv/web/owncloud/lib/private/session/internal.php
@@ -11956,6 +11900,7 @@ srv/web/owncloud
 #srv/web/owncloud/lib/private/template/resourcelocator.php
 #srv/web/owncloud/lib/private/template/templatefilelocator.php
 #srv/web/owncloud/lib/private/templatelayout.php
+#srv/web/owncloud/lib/private/tempmanager.php
 #srv/web/owncloud/lib/private/updater.php
 #srv/web/owncloud/lib/private/urlgenerator.php
 #srv/web/owncloud/lib/private/user
@@ -11967,6 +11912,7 @@ srv/web/owncloud
 #srv/web/owncloud/lib/private/user/http.php
 #srv/web/owncloud/lib/private/user/interface.php
 #srv/web/owncloud/lib/private/user/manager.php
+#srv/web/owncloud/lib/private/user/nouserexception.php
 #srv/web/owncloud/lib/private/user/session.php
 #srv/web/owncloud/lib/private/user/user.php
 #srv/web/owncloud/lib/private/util.php
@@ -12057,6 +12003,7 @@ srv/web/owncloud
 #srv/web/owncloud/lib/public/isession.php
 #srv/web/owncloud/lib/public/itagmanager.php
 #srv/web/owncloud/lib/public/itags.php
+#srv/web/owncloud/lib/public/itempmanager.php
 #srv/web/owncloud/lib/public/iurlgenerator.php
 #srv/web/owncloud/lib/public/iuser.php
 #srv/web/owncloud/lib/public/iusermanager.php
@@ -12069,6 +12016,9 @@ srv/web/owncloud
 #srv/web/owncloud/lib/public/search
 #srv/web/owncloud/lib/public/search/provider.php
 #srv/web/owncloud/lib/public/search/result.php
+#srv/web/owncloud/lib/public/security
+#srv/web/owncloud/lib/public/security/icrypto.php
+#srv/web/owncloud/lib/public/security/stringutils.php
 #srv/web/owncloud/lib/public/share.php
 #srv/web/owncloud/lib/public/template.php
 #srv/web/owncloud/lib/public/user.php
@@ -12078,6 +12028,7 @@ srv/web/owncloud
 #srv/web/owncloud/lib/repair/collation.php
 #srv/web/owncloud/lib/repair/innodb.php
 #srv/web/owncloud/lib/repair/preview.php
+#srv/web/owncloud/lib/repair/repairconfig.php
 #srv/web/owncloud/lib/repair/repairmimetypes.php
 #srv/web/owncloud/lib/repair/searchlucenetables.php
 #srv/web/owncloud/occ
index 36603567e0ff21abd2af028d91cf27a96cf7ae14..421c40eca3a9bc555953c2f870ec1a1ba917b79b 100644 (file)
@@ -34,13 +34,11 @@ WARNING: translation string unused: advproxy chgwebpwd new password
 WARNING: translation string unused: advproxy chgwebpwd new password confirm
 WARNING: translation string unused: advproxy chgwebpwd old password
 WARNING: translation string unused: advproxy chgwebpwd username
-WARNING: translation string unused: advproxy cre disabled
 WARNING: translation string unused: advproxy errmsg change fail
 WARNING: translation string unused: advproxy errmsg change success
 WARNING: translation string unused: advproxy errmsg invalid user
 WARNING: translation string unused: advproxy errmsg no password
 WARNING: translation string unused: advproxy errmsg password incorrect
-WARNING: translation string unused: advproxy no cre groups
 WARNING: translation string unused: advproxy ssadvanced proxy
 WARNING: translation string unused: advproxy update notification
 WARNING: translation string unused: again
index a419afa9d3b438676c617e9746bee3dfc6ecb7b5..0a1756f563513f350a249a6a1095a431be48e31e 100644 (file)
@@ -33,13 +33,11 @@ WARNING: translation string unused: advproxy chgwebpwd new password
 WARNING: translation string unused: advproxy chgwebpwd new password confirm
 WARNING: translation string unused: advproxy chgwebpwd old password
 WARNING: translation string unused: advproxy chgwebpwd username
-WARNING: translation string unused: advproxy cre disabled
 WARNING: translation string unused: advproxy errmsg change fail
 WARNING: translation string unused: advproxy errmsg change success
 WARNING: translation string unused: advproxy errmsg invalid user
 WARNING: translation string unused: advproxy errmsg no password
 WARNING: translation string unused: advproxy errmsg password incorrect
-WARNING: translation string unused: advproxy no cre groups
 WARNING: translation string unused: advproxy ssadvanced proxy
 WARNING: translation string unused: advproxy update information
 WARNING: translation string unused: advproxy update notification
index d375f69623c2f6c35a80d7a68b4981ecf5346554..17347f665ab2c0c84000d1ff612cf9c1bd2a049a 100644 (file)
@@ -33,13 +33,11 @@ WARNING: translation string unused: advproxy chgwebpwd new password
 WARNING: translation string unused: advproxy chgwebpwd new password confirm
 WARNING: translation string unused: advproxy chgwebpwd old password
 WARNING: translation string unused: advproxy chgwebpwd username
-WARNING: translation string unused: advproxy cre disabled
 WARNING: translation string unused: advproxy errmsg change fail
 WARNING: translation string unused: advproxy errmsg change success
 WARNING: translation string unused: advproxy errmsg invalid user
 WARNING: translation string unused: advproxy errmsg no password
 WARNING: translation string unused: advproxy errmsg password incorrect
-WARNING: translation string unused: advproxy no cre groups
 WARNING: translation string unused: advproxy ssadvanced proxy
 WARNING: translation string unused: advproxy update information
 WARNING: translation string unused: advproxy update notification
@@ -640,6 +638,7 @@ WARNING: untranslated string: advproxy group access control
 WARNING: untranslated string: advproxy group required
 WARNING: untranslated string: advproxy proxy port transparent
 WARNING: untranslated string: age second
+WARNING: untranslated string: application layer gateways
 WARNING: untranslated string: atm device
 WARNING: untranslated string: attention
 WARNING: untranslated string: bit
index f0f5ec4e40847e3b0c1a9773abe42924edc64b9b..a93453f01517cf32b3477fba11835a1d847fad69 100644 (file)
@@ -33,13 +33,11 @@ WARNING: translation string unused: advproxy chgwebpwd new password
 WARNING: translation string unused: advproxy chgwebpwd new password confirm
 WARNING: translation string unused: advproxy chgwebpwd old password
 WARNING: translation string unused: advproxy chgwebpwd username
-WARNING: translation string unused: advproxy cre disabled
 WARNING: translation string unused: advproxy errmsg change fail
 WARNING: translation string unused: advproxy errmsg change success
 WARNING: translation string unused: advproxy errmsg invalid user
 WARNING: translation string unused: advproxy errmsg no password
 WARNING: translation string unused: advproxy errmsg password incorrect
-WARNING: translation string unused: advproxy no cre groups
 WARNING: translation string unused: advproxy ssadvanced proxy
 WARNING: translation string unused: advproxy update information
 WARNING: translation string unused: advproxy update notification
@@ -647,6 +645,7 @@ WARNING: untranslated string: advproxy group access control
 WARNING: untranslated string: advproxy group required
 WARNING: untranslated string: advproxy proxy port transparent
 WARNING: untranslated string: age second
+WARNING: untranslated string: application layer gateways
 WARNING: untranslated string: atm device
 WARNING: untranslated string: attention
 WARNING: untranslated string: bit
index 65643e8757bf5a4c4f568a342e962116c73efd66..776b9328bf471f6307ce2fcd84eeff6dd4e65fd5 100644 (file)
@@ -33,13 +33,11 @@ WARNING: translation string unused: advproxy chgwebpwd new password
 WARNING: translation string unused: advproxy chgwebpwd new password confirm
 WARNING: translation string unused: advproxy chgwebpwd old password
 WARNING: translation string unused: advproxy chgwebpwd username
-WARNING: translation string unused: advproxy cre disabled
 WARNING: translation string unused: advproxy errmsg change fail
 WARNING: translation string unused: advproxy errmsg change success
 WARNING: translation string unused: advproxy errmsg invalid user
 WARNING: translation string unused: advproxy errmsg no password
 WARNING: translation string unused: advproxy errmsg password incorrect
-WARNING: translation string unused: advproxy no cre groups
 WARNING: translation string unused: advproxy ssadvanced proxy
 WARNING: translation string unused: advproxy update information
 WARNING: translation string unused: advproxy update notification
@@ -700,6 +698,7 @@ WARNING: untranslated string: advproxy AUTH method ntlm auth
 WARNING: untranslated string: advproxy basic authentication
 WARNING: untranslated string: advproxy group access control
 WARNING: untranslated string: advproxy group required
+WARNING: untranslated string: application layer gateways
 WARNING: untranslated string: bytes
 WARNING: untranslated string: check all
 WARNING: untranslated string: dhcp dns enable update
index 3b57bdfe93de3391115223613756ea50a88b31dd..77fa1f58d47581be17d6319a37207bd6d29a7003 100644 (file)
@@ -33,13 +33,11 @@ WARNING: translation string unused: advproxy chgwebpwd new password
 WARNING: translation string unused: advproxy chgwebpwd new password confirm
 WARNING: translation string unused: advproxy chgwebpwd old password
 WARNING: translation string unused: advproxy chgwebpwd username
-WARNING: translation string unused: advproxy cre disabled
 WARNING: translation string unused: advproxy errmsg change fail
 WARNING: translation string unused: advproxy errmsg change success
 WARNING: translation string unused: advproxy errmsg invalid user
 WARNING: translation string unused: advproxy errmsg no password
 WARNING: translation string unused: advproxy errmsg password incorrect
-WARNING: translation string unused: advproxy no cre groups
 WARNING: translation string unused: advproxy ssadvanced proxy
 WARNING: translation string unused: advproxy update information
 WARNING: translation string unused: advproxy update notification
@@ -697,6 +695,7 @@ WARNING: untranslated string: advproxy AUTH method ntlm auth
 WARNING: untranslated string: advproxy basic authentication
 WARNING: untranslated string: advproxy group access control
 WARNING: untranslated string: advproxy group required
+WARNING: untranslated string: application layer gateways
 WARNING: untranslated string: atm device
 WARNING: untranslated string: bytes
 WARNING: untranslated string: capabilities
index d375f69623c2f6c35a80d7a68b4981ecf5346554..17347f665ab2c0c84000d1ff612cf9c1bd2a049a 100644 (file)
@@ -33,13 +33,11 @@ WARNING: translation string unused: advproxy chgwebpwd new password
 WARNING: translation string unused: advproxy chgwebpwd new password confirm
 WARNING: translation string unused: advproxy chgwebpwd old password
 WARNING: translation string unused: advproxy chgwebpwd username
-WARNING: translation string unused: advproxy cre disabled
 WARNING: translation string unused: advproxy errmsg change fail
 WARNING: translation string unused: advproxy errmsg change success
 WARNING: translation string unused: advproxy errmsg invalid user
 WARNING: translation string unused: advproxy errmsg no password
 WARNING: translation string unused: advproxy errmsg password incorrect
-WARNING: translation string unused: advproxy no cre groups
 WARNING: translation string unused: advproxy ssadvanced proxy
 WARNING: translation string unused: advproxy update information
 WARNING: translation string unused: advproxy update notification
@@ -640,6 +638,7 @@ WARNING: untranslated string: advproxy group access control
 WARNING: untranslated string: advproxy group required
 WARNING: untranslated string: advproxy proxy port transparent
 WARNING: untranslated string: age second
+WARNING: untranslated string: application layer gateways
 WARNING: untranslated string: atm device
 WARNING: untranslated string: attention
 WARNING: untranslated string: bit
index 05d9e91194c494849c4323e2a4bcd081d8472d2c..6446a7425c21a1cc06297f13d56f098a3de8b54e 100644 (file)
@@ -33,13 +33,11 @@ WARNING: translation string unused: advproxy chgwebpwd new password
 WARNING: translation string unused: advproxy chgwebpwd new password confirm
 WARNING: translation string unused: advproxy chgwebpwd old password
 WARNING: translation string unused: advproxy chgwebpwd username
-WARNING: translation string unused: advproxy cre disabled
 WARNING: translation string unused: advproxy errmsg change fail
 WARNING: translation string unused: advproxy errmsg change success
 WARNING: translation string unused: advproxy errmsg invalid user
 WARNING: translation string unused: advproxy errmsg no password
 WARNING: translation string unused: advproxy errmsg password incorrect
-WARNING: translation string unused: advproxy no cre groups
 WARNING: translation string unused: advproxy ssadvanced proxy
 WARNING: translation string unused: advproxy update information
 WARNING: translation string unused: advproxy update notification
@@ -640,6 +638,7 @@ WARNING: untranslated string: advproxy group access control
 WARNING: untranslated string: advproxy group required
 WARNING: untranslated string: advproxy proxy port transparent
 WARNING: untranslated string: age second
+WARNING: untranslated string: application layer gateways
 WARNING: untranslated string: atm device
 WARNING: untranslated string: attention
 WARNING: untranslated string: bit
index a419afa9d3b438676c617e9746bee3dfc6ecb7b5..547985901f05571713dc4d11a50c11698197586c 100644 (file)
@@ -33,13 +33,11 @@ WARNING: translation string unused: advproxy chgwebpwd new password
 WARNING: translation string unused: advproxy chgwebpwd new password confirm
 WARNING: translation string unused: advproxy chgwebpwd old password
 WARNING: translation string unused: advproxy chgwebpwd username
-WARNING: translation string unused: advproxy cre disabled
 WARNING: translation string unused: advproxy errmsg change fail
 WARNING: translation string unused: advproxy errmsg change success
 WARNING: translation string unused: advproxy errmsg invalid user
 WARNING: translation string unused: advproxy errmsg no password
 WARNING: translation string unused: advproxy errmsg password incorrect
-WARNING: translation string unused: advproxy no cre groups
 WARNING: translation string unused: advproxy ssadvanced proxy
 WARNING: translation string unused: advproxy update information
 WARNING: translation string unused: advproxy update notification
@@ -703,6 +701,7 @@ WARNING: translation string unused: xtaccess bad transfert
 WARNING: translation string unused: year-graph
 WARNING: translation string unused: yearly firewallhits
 WARNING: untranslated string: Scan for Songs
+WARNING: untranslated string: application layer gateways
 WARNING: untranslated string: bytes
 WARNING: untranslated string: fwhost cust geoipgrp
 WARNING: untranslated string: fwhost err hostip
index c490f2df95f11a3565d3dd017a76786c5127578f..32e1e48ecc43d8d8f6774a23363397606fcc8ab4 100644 (file)
@@ -26,6 +26,7 @@
 < age shour
 < age sminute
 < age ssecond
+< application layer gateways
 < atm device
 < attention
 < bit
 < age shour
 < age sminute
 < age ssecond
+< application layer gateways
 < Async logging enabled
 < atm device
 < attention
 < age shour
 < age sminute
 < age ssecond
+< application layer gateways
 < atm device
 < attention
 < bit
 < age shour
 < age sminute
 < age ssecond
+< application layer gateways
 < atm device
 < attention
 < bit
index 34e0cdcabac6a8bb037faa65441f6d36226034a5..7a0e8e0c4ebc4cc455a239e84455c808e41b2e45 100644 (file)
@@ -120,6 +120,21 @@ $checked{'SHOWTABLES'}{$settings{'SHOWTABLES'}} = "checked='checked'";
 $checked{'SHOWDROPDOWN'}{'off'} = '';
 $checked{'SHOWDROPDOWN'}{'on'} = '';
 $checked{'SHOWDROPDOWN'}{$settings{'SHOWDROPDOWN'}} = "checked='checked'";
+$checked{'CONNTRACK_FTP'}{'off'} = '';
+$checked{'CONNTRACK_FTP'}{'on'} = '';
+$checked{'CONNTRACK_FTP'}{$settings{'CONNTRACK_FTP'}} = "checked='checked'";
+$checked{'CONNTRACK_H323'}{'off'} = '';
+$checked{'CONNTRACK_H323'}{'on'} = '';
+$checked{'CONNTRACK_H323'}{$settings{'CONNTRACK_H323'}} = "checked='checked'";
+$checked{'CONNTRACK_IRC'}{'off'} = '';
+$checked{'CONNTRACK_IRC'}{'on'} = '';
+$checked{'CONNTRACK_IRC'}{$settings{'CONNTRACK_IRC'}} = "checked='checked'";
+$checked{'CONNTRACK_SIP'}{'off'} = '';
+$checked{'CONNTRACK_SIP'}{'on'} = '';
+$checked{'CONNTRACK_SIP'}{$settings{'CONNTRACK_SIP'}} = "checked='checked'";
+$checked{'CONNTRACK_TFTP'}{'off'} = '';
+$checked{'CONNTRACK_TFTP'}{'on'} = '';
+$checked{'CONNTRACK_TFTP'}{$settings{'CONNTRACK_TFTP'}} = "checked='checked'";
 $selected{'FWPOLICY'}{$settings{'FWPOLICY'}}= 'selected';
 $selected{'FWPOLICY1'}{$settings{'FWPOLICY1'}}= 'selected';
 $selected{'FWPOLICY2'}{$settings{'FWPOLICY2'}}= 'selected';
@@ -223,7 +238,22 @@ END
                                                                                                                                                                                <input type='radio' name='SHOWTABLES' value='off' $checked{'SHOWTABLES'}{'off'} /> off</td></tr>
 <tr><td align='left' width='60%'>$Lang::tr{'fw settings dropdown'}</td><td align='left'>on <input type='radio' name='SHOWDROPDOWN' value='on' $checked{'SHOWDROPDOWN'}{'on'} />/
                                                                                                                                                                                <input type='radio' name='SHOWDROPDOWN' value='off' $checked{'SHOWDROPDOWN'}{'off'} /> off</td></tr>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
-</table>                                                                                                                                                                               
+</table>
+<br />
+<table width='95%' cellspacing='0'>
+<tr bgcolor='$color{'color20'}'><td colspan='2' align='left'><b>$Lang::tr{'application layer gateways'}</b></td></tr>
+<tr><td align='left' width='60%'>FTP</td><td align='left'>on <input type='radio' name='CONNTRACK_FTP' value='on' $checked{'CONNTRACK_FTP'}{'on'} />/
+                                                                                                                                                                               <input type='radio' name='CONNTRACK_FTP' value='off' $checked{'CONNTRACK_FTP'}{'off'} /> off</td></tr>
+<tr><td align='left' width='60%'>H.323</td><td align='left'>on <input type='radio' name='CONNTRACK_H323' value='on' $checked{'CONNTRACK_H323'}{'on'} />/
+                                                                                                                                                                               <input type='radio' name='CONNTRACK_H323' value='off' $checked{'CONNTRACK_H323'}{'off'} /> off</td></tr>
+<tr><td align='left' width='60%'>IRC</td><td align='left'>on <input type='radio' name='CONNTRACK_IRC' value='on' $checked{'CONNTRACK_IRC'}{'on'} />/
+                                                                                                                                                                               <input type='radio' name='CONNTRACK_IRC' value='off' $checked{'CONNTRACK_IRC'}{'off'} /> off</td></tr>
+<tr><td align='left' width='60%'>SIP</td><td align='left'>on <input type='radio' name='CONNTRACK_SIP' value='on' $checked{'CONNTRACK_SIP'}{'on'} />/
+                                                                                                                                                                               <input type='radio' name='CONNTRACK_SIP' value='off' $checked{'CONNTRACK_SIP'}{'off'} /> off</td></tr>
+<tr><td align='left' width='60%'>TFTP</td><td align='left'>on <input type='radio' name='CONNTRACK_TFTP' value='on' $checked{'CONNTRACK_TFTP'}{'on'} />/
+                                                                                                                                                                               <input type='radio' name='CONNTRACK_TFTP' value='off' $checked{'CONNTRACK_TFTP'}{'off'} /> off</td></tr>
+
+</table>
 <br />
 <table width='95%' cellspacing='0'>
 <tr bgcolor='$color{'color20'}'><td colspan='2' align='left'><b>$Lang::tr{'fw default drop'}</b></td></tr>
index 62af54ed8a1c6e0b294e4545666af34cae904310..037894d50bf941d870e55e311932a71c04dbf94b 100644 (file)
@@ -2333,7 +2333,7 @@ else
     }
     print CLIENTCONF "verb 3\r\n";
     print CLIENTCONF "ns-cert-type server\r\n";
-    print CLIENTCONF "tls-remote $vpnsettings{ROOTCERT_HOSTNAME}\r\n"; 
+    print CLIENTCONF "verify-x509-name $vpnsettings{ROOTCERT_HOSTNAME} name\r\n";
     if ($vpnsettings{MSSFIX} eq 'on') {
        print CLIENTCONF "mssfix\r\n";
     }
index 39c3ed8431155b0ebf422cfa6d00adf4f8eccd4f..590ad15bff37e60e45b8fa2b8a34b0763d56da8b 100644 (file)
@@ -463,18 +463,16 @@ if ($qossettings{'ACTION'} eq $Lang::tr{'start'})
        $qossettings{'ENABLED'} = 'on';
        &General::writehash("${General::swroot}/qos/settings", \%qossettings);
        system("/usr/local/bin/qosctrl generate >/dev/null 2>&1");
-       system("/usr/bin/touch /var/ipfire/qos/enable");
        system("/usr/local/bin/qosctrl start >/dev/null 2>&1");
        system("logger -t ipfire 'QoS started'");
 }
 elsif ($qossettings{'ACTION'} eq $Lang::tr{'stop'})
 {
-       system("/usr/local/bin/qosctrl stop >/dev/null 2>&1");
-       unlink "/var/ipfire/qos/bin/qos.sh";
-       unlink "/var/ipfire/qos/enable";
-       system("logger -t ipfire 'QoS stopped'");
        $qossettings{'ENABLED'} = 'off';
        &General::writehash("${General::swroot}/qos/settings", \%qossettings);
+       system("/usr/local/bin/qosctrl stop >/dev/null 2>&1");
+       system("/usr/local/bin/qosctrl generate >/dev/null 2>&1");
+       system("logger -t ipfire 'QoS stopped'");
 }
 elsif ($qossettings{'ACTION'} eq $Lang::tr{'restart'})
 {
@@ -587,7 +585,6 @@ END
                $qossettings{'ENABLED'} = 'on';
                &General::writehash("${General::swroot}/qos/settings", \%qossettings);
                system("/usr/local/bin/qosctrl generate >/dev/null 2>&1");
-               system("/usr/bin/touch /var/ipfire/qos/enable");
                system("/usr/local/bin/qosctrl start >/dev/null 2>&1");
                system("logger -t ipfire 'QoS started'");
        } else {
index afa3770cf93f05a7bd2635e30b0c08a8093952ad..0d50f01b1b49f9d15b2fd9749630d639b781ec45 100644 (file)
 #                                                                             #
 ###############################################################################
 
+use strict;
+
+#usable only the following on debugging purpose
+#use warnings;
+#use CGI::Carp 'fatalsToBrowser';
 use CGI;
 
+require '/var/ipfire/general-functions.pl';
+require "${General::swroot}/lang.pl";
+require "${General::swroot}/header.pl";
+
+
 my $swroot = "/var/ipfire";
 my $apdir  = "$swroot/proxy/advanced";
 my $group_def_file = "$apdir/cre/classrooms";
@@ -31,6 +41,7 @@ my $acl_src_noaccess_mac = "$apdir/acls/src_noaccess_mac.acl";
 my $banner = "A D V A N C E D &nbsp; P R O X Y &nbsp; - &nbsp; W E B &nbsp; A C C E S S &nbsp; M A N A G E R";
 my %cgiparams;
 my %proxysettings;
+my %temp;
 
 my %acl=();
 my @group_defs=();
@@ -49,8 +60,8 @@ require "${swroot}/lang.pl";
 
 foreach (@groups)
 {
-       if ($cgiparams{$_} eq $tr{'advproxy mode deny'})  { $acl{$_}='on'; }
-       if ($cgiparams{$_} eq $tr{'advproxy mode allow'}) { $acl{$_}='off'; }
+       if ($cgiparams{$_} eq $Lang::tr{'advproxy mode deny'}) { $acl{$_}='on'; }
+       if ($cgiparams{$_} eq $Lang::tr{'advproxy mode allow'}) { $acl{$_}='off'; }
 }
 
 &read_all_groups;
@@ -144,7 +155,7 @@ if (($is_supervisor) && ((defined($proxysettings{'SUPERVISOR_PASSWORD'})) && (!(
 {
 print <<END
                   <td align='center'>
-                     <font face='verdana,arial,helvetica' color='#000000' size='2'>$tr{'advproxy supervisor password'}:</font>
+                     <font face='verdana,arial,helvetica' color='#000000' size='2'>$Lang::tr{'advproxy supervisor password'}:</font>
                   </td>
                   <td align='center'><input type='password' name='PASSWORD' size='15'></td>
 END
@@ -176,11 +187,11 @@ END
                        if ((defined($acl{$_})) && ($acl{$_} eq 'on'))
                        {
                        print "</td><td width='120' align='center'>";
-                               print "<input type='submit' name='$_' value=' $tr{'advproxy mode allow'} '>";
+                               print "<input type='submit' name='$_' value=' $Lang::tr{'advproxy mode allow'} '>";
                        print "</td><td width='16' bgcolor='#D00000'>&nbsp;</td>\n";
                        } else {
                        print "</td><td width='120' align='center'>";
-                               print "<input type='submit' name='$_' value=' $tr{'advproxy mode deny'} '>";
+                               print "<input type='submit' name='$_' value=' $Lang::tr{'advproxy mode deny'} '>";
                        print "</td><td width='16' bgcolor='#00A000'>&nbsp;</td>\n";
                        }
                }
@@ -199,14 +210,14 @@ END
 } else {
             print "      <tr>\n";
             print "         <td align='center'>\n";
-            print "            <font face='verdana,arial,helvetica' color='#000000' size='2'>$tr{'advproxy no cre groups'}</font>\n";
+            print "            <font face='verdana,arial,helvetica' color='#000000' size='2'>$Lang::tr{'advproxy no cre groups'}</font>\n";
             print "         </td>\n";
             print "      </tr>\n";
 }
 } else {
             print "      <tr>\n";
             print "         <td align='center'>\n";
-            print "            <font face='verdana,arial,helvetica' color='#000000' size='2'>$tr{'advproxy cre disabled'}</font>\n";
+            print "            <font face='verdana,arial,helvetica' color='#000000' size='2'>$Lang::tr{'advproxy cre disabled'}</font>\n";
             print "         </td>\n";
             print "      </tr>\n";
 }
index 2bca854ff1aadcb4ef0c76604dc6a5df5135e4f6..7c330bb0fe1d00e8e0eccb09ea9a124eeae89445 100644 (file)
 'alt vpn' => 'VPNs',
 'and' => 'Und',
 'apcupsd' => 'APC-UPS Status',
+'application layer gateways' => 'Application-Layer-Gateways',
 'apply' => 'Jetzt anwenden',
 'april' => 'April',
 'archive not exist' => 'Konfigurationsarchiv existiert nicht',
index 4c523921ce6633816130ca355a03b2d5757754f9..23f63102bf014ec57d3949aee5ac3adaa9f0746d 100644 (file)
 'and' => 'And',
 'ansi t1.483' => 'TO BE REMOVED',
 'apcupsd' => 'APC-UPS status',
+'application layer gateways' => 'Application Layer Gateways',
 'apply' => 'Apply now',
 'april' => 'April',
 'archive not exist' => 'Configuration archive does not exist',
index a65b0cf4e410950858222ab0895e71a835548f93..e2396459cff3e3a5a5f9ee11149bc2bd7a2e3c12 100644 (file)
@@ -57,6 +57,9 @@ DIR_CONF    = $(LFS_BASEDIR)/config
 DIR_INFO    = $(LFS_BASEDIR)/log
 DIR_TMP     = /tmp
 
+# Add the compiler location and version and specs to the ccache hash
+CCACHE_COMPILERCHECK += $(shell gcc -dumpspecs 2>/dev/null | md5sum | cut -d ' ' -f1)
+
 ###############################################################################
 # Common Macro Definitions
 ###############################################################################
index 0814cde1889b6d2ce90dc99aae8b23886afd6c9c..b0d518554bce87eba8818673623f908089fcd753 100644 (file)
--- a/lfs/bind
+++ b/lfs/bind
@@ -25,7 +25,7 @@
 
 include Config
 
-VER        = 9.10.2-P4
+VER        = 9.10.3-P2
 
 THISAPP    = bind-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -43,7 +43,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 8b1f5064837756c938eadc1537dec5c7
+$(DL_FILE)_MD5 = 672dd3c2796b12ac8440f55bcaecfa82
 
 install : $(TARGET)
 
index 27c83fb45be12662151d36a22b6765eb905c39ec..5afaeec2fbceae60413ee1a622599f52eeef6ce9 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2015  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2016  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.22
+VER        = 2.24
 
 THISAPP    = binutils-$(VER)
 DL_FILE    = $(THISAPP).tar.bz2
@@ -38,17 +38,21 @@ ifeq "$(ROOT)" ""
   EXTRA_CONFIG = \
        --prefix=/usr \
        --enable-shared \
-       --disable-nls
+       --disable-nls \
+       --disable-werror
   EXTRA_MAKE = tooldir=/usr
   EXTRA_INSTALL = tooldir=/usr
 else
 ifeq "$(PASS)" "1"
   CFLAGS := $(patsubst -march=%,,$(CFLAGS))
   CFLAGS := $(patsubst -mfloat-abi=%,,$(CFLAGS))
+  CFLAGS := $(patsubst -fstack-protector-strong,-fstack-protector-all,$(CFLAGS))
   TARGET = $(DIR_INFO)/$(THISAPP)-tools1
   EXTRA_CONFIG = \
        --target=$(CROSSTARGET) \
        --prefix=/tools \
+       --with-sysroot=$(ROOT) \
+       --with-lib-path=/tools/lib \
        --disable-nls \
        --disable-werror
   EXTRA_MAKE =
@@ -64,7 +68,8 @@ else
        --build=$(BUILDTARGET) \
        --prefix=/tools \
        --with-lib-path=/tools/lib \
-       --disable-nls
+       --disable-nls \
+       --disable-werror
   EXTRA_MAKE = 
   EXTRA_INSTALL = 
 endif
@@ -87,7 +92,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = ee0f10756c84979622b992a4a61ea3f5
+$(DL_FILE)_MD5 = e0f71a7b2ddab0f8612336ac81d9636b
 
 install : $(TARGET)
 
@@ -117,11 +122,7 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) $(DIR_SRC)/binutils-build && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/binutils-2.22-pt-pax-flags-20111121.patch
-
-       # texinfo 5 syntax-fix.
-       cd $(DIR_APP) && sed -i -e "s/@colophon/@@colophon/" \
-                               -e "s/doc@cygnus/doc@@cygnus/" bfd/doc/bfd.texinfo
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/binutils-2.24-pt-pax-flags-20131231.patch
 
        @mkdir $(DIR_SRC)/binutils-build
 
index 64b09d1fa34a6529aa403d6fd524896c75708e7f..682f4998a67ebccfc9efb5701e442b1146bf01b3 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2010  IPFire Team  <info@ipfire.org>                          #
+# Copyright (C) 2007-2016  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -35,6 +35,7 @@ TARGET     = $(DIR_INFO)/$(THISAPP)-pass$(PASS)
 ifeq "$(PASS)" "1"
        CFLAGS := $(patsubst -march=%,,$(CFLAGS))
        CFLAGS := $(patsubst -mfloat-abi=%,,$(CFLAGS))
+       CFLAGS := $(patsubst -fstack-protector-strong,-fstack-protector-all,$(CFLAGS))
 endif
 
 # Set max cache size to 5GB
index 0b3252f9f4f23185f2696d32e88d1ad543f7f718..90369889d95e1539172c2fab9c09fc35423ddf7a 100644 (file)
@@ -54,7 +54,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 ifeq "$(PASS)" "1"
        SPECS=$$(dirname $$(/tools/bin/$(CROSSTARGET)-gcc -print-libgcc-file-name))/specs; \
        /tools/bin/$(CROSSTARGET)-gcc -dumpspecs | sed \
-               -e 's@/lib\(64\)\?/ld@/tools&@g' \
                -e "/^\*cpp:$$/{n;s,$$, -isystem /tools/include,}" > $$SPECS
 endif
 
index e3d211910cb9b999017f544245d7a42add480f2b..a9ada50ca8570536c1fb2270c36a31f1b144c489 100644 (file)
--- a/lfs/cmake
+++ b/lfs/cmake
@@ -32,9 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 
-ifeq "$(MACHINE)" "armv5tel"
-       MAKETUNING = -j2
-endif
+MAKETUNING = -j2
 
 ###############################################################################
 # Top-level Rules
index cb749969446fdb0e048fcf16e381c5fbe0c9f860..f8e9ce417197f5d1acbcd110465eb1575f2469e1 100644 (file)
@@ -135,6 +135,16 @@ $(TARGET) :
        echo  "POLICY=MODE2"            >> $(CONFIG_ROOT)/firewall/settings
        echo  "POLICY1=MODE2"           >> $(CONFIG_ROOT)/firewall/settings
 
+       # Add conntrack helper default settings
+       for proto in FTP H323 IRC SIP TFTP; do \
+               echo "CONNTRACK_$${proto}=on" >> $(CONFIG_ROOT)/optionsfw/settings; \
+       done
+
+       # Do not enable these by default because these are broken
+       for proto in AMANDA PPTP; do \
+               echo "CONNTRACK_$${proto}=off" >> $(CONFIG_ROOT)/optionsfw/settings; \
+       done
+
        # set converters executable
        chmod 755 /usr/sbin/convert-*
 
diff --git a/lfs/dnsdist b/lfs/dnsdist
new file mode 100644 (file)
index 0000000..62c17cf
--- /dev/null
@@ -0,0 +1,86 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2015  IPFire Team  <info@ipfire.org>                          #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+###############################################################################
+# Definitions
+###############################################################################
+
+include Config
+
+VER        = 0.0.498gac688af
+
+THISAPP    = dnsdist-$(VER)
+DL_FILE    = $(THISAPP).tar.bz2
+DL_FROM    = $(URL_IPFIRE)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+TARGET     = $(DIR_INFO)/$(THISAPP)
+SUP_ARCH   = x86_64 i586
+PROG       = dnsdist
+PAK_VER    = 1
+
+DEPS       = ""
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = b1bc53b3a35aef7006b74086919847bf
+
+install : $(TARGET)
+
+check : $(patsubst %,$(DIR_CHK)/%,$(objects))
+
+download :$(patsubst %,$(DIR_DL)/%,$(objects))
+
+md5 : $(subst %,%_MD5,$(objects))
+
+dist: 
+       @$(PAK)
+
+###############################################################################
+# Downloading, checking, md5sum
+###############################################################################
+
+$(patsubst %,$(DIR_CHK)/%,$(objects)) :
+       @$(CHECK)
+
+$(patsubst %,$(DIR_DL)/%,$(objects)) :
+       @$(LOAD)
+
+$(subst %,%_MD5,$(objects)) :
+       @$(MD5)
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+       @$(PREBUILD)
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && ./configure --prefix=/usr --sysconfdir=/etc
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
+
index c8fd7db7555e4cb8e33b2d7aa34325ce3bf4d283..8058663acef3a315904eda108644a9b769c249e6 100644 (file)
@@ -97,6 +97,11 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/022-Tidy_up_DNSSEC_non-existence_code_Check_zone_status_is_NSEC_proof_bad.patch
        cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/023-Fix_brace_botch_in_dnssec_validate_ds.patch
        cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/024-Do_a_better_job_of_determining_which_DNSSEC_sig_algos_are_supported.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/025-Major_tidy_up_of_EDNS0_handling_and_computation_use_of_udp.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/026-More_tweaks_in_handling_unknown_DNSSEC_algorithms.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/027-Nasty_rare_and_obscure_off-by-one_in_DNSSEC_hostname_cmp.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/028-Minor_tweak_to_previous_commit.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/029-NSEC3_check_RFC5155_para_8_2.patch
        cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-Add-support-to-read-ISC-DHCP-lease-file.patch
 
        cd $(DIR_APP) && sed -i src/config.h \
diff --git a/lfs/gcc b/lfs/gcc
index ff8723a1e85dfe40d4b4715727bc0b172eb2fbe9..52d1daefcfa28746cefae8b17ee275d9c5e47940 100644 (file)
--- a/lfs/gcc
+++ b/lfs/gcc
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2011  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2016  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
 
 include Config
 
-VER        = 4.4.7
+VER        = 4.9.3
 
 GMP_VER    = 5.0.5
 MPFR_VER   = 2.4.2
+MPC_VER    = 1.0.3
 
 THISAPP    = gcc-$(VER)
-DL_FILE    = $(THISAPP).tar.bz2
+DL_FILE    = $(THISAPP).tar.gz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 
 CFLAGS    := $(patsubst -march=%,,$(CFLAGS))
 CFLAGS    := $(patsubst -mtune=%,,$(CFLAGS))
 CFLAGS    := $(patsubst -mfloat-abi=%,,$(CFLAGS))
-
-# https://bugzilla.redhat.com/show_bug.cgi?id=476370
-CFLAGS += -fgnu89-inline
+CFLAGS    := $(filter-out -fexceptions,$(CFLAGS))
+CXXFLAGS  := $(CFLAGS)
 
 # Normal build or /tools build.
 #
@@ -59,29 +59,40 @@ ifeq "$(ROOT)" ""
   EXTRA_INSTALL =
 else
 ifeq "$(PASS)" "1"
+  CFLAGS    := $(patsubst -fstack-protector-strong,-fstack-protector-all,$(CFLAGS))
+  CXXFLAGS  := $(patsubst -fstack-protector-strong,-fstack-protector-all,$(CXXFLAGS))
   TARGET = $(DIR_INFO)/$(THISAPP)-tools1
   EXTRA_CONFIG = \
        --target=$(CROSSTARGET) \
        --prefix=/tools \
+       --with-sysroot=$(ROOT) \
        --disable-nls \
        --disable-shared \
        --disable-decimal-float \
        --disable-threads \
+       --disable-libatomic \
        --disable-libmudflap \
        --disable-libssp \
        --disable-libgomp \
        --disable-libquadmath \
+       --disable-libstdc++-v3 \
+       --disable-libvtv \
+       --disable-libcilkrts \
+       --disable-libitm \
+       --disable-libsanitizer \
        --with-newlib \
        --without-headers \
        --without-ppl \
        --without-cloog \
-       --enable-languages=c
+       --enable-languages=c,c++
   EXTRA_MAKE = 
   EXTRA_INSTALL = 
 else
+ifeq "$(PASS)" "2"
   TARGET = $(DIR_INFO)/$(THISAPP)-tools2
   EXTRA_ENV = \
        CC="$(CROSSTARGET)-gcc -B/tools/lib/" \
+       CXX="$(CROSSTARGET)-g++" \
        AR="$(CROSSTARGET)-ar" \
        RANLIB="$(CROSSTARGET)-ranlib"
   EXTRA_CONFIG = \
@@ -90,15 +101,35 @@ else
        --target=$(BUILDTARGET) \
        --prefix=/tools \
        --with-local-prefix=/tools \
+       --with-native-system-header-dir=/tools/include \
        --enable-clocale=gnu \
        --enable-shared \
        --enable-threads=posix \
        --enable-__cxa_atexit \
        --enable-languages=c,c++ \
        --disable-libstdcxx-pch \
-       --disable-bootstrap
+       --enable-bootstrap
+  EXTRA_MAKE = 
+  EXTRA_INSTALL = 
+else
+  # PASS=L # libstdc++-v3
+  TARGET = $(DIR_INFO)/$(THISAPP)-libstdc++
+  EXTRA_ENV = \
+       CC="$(CROSSTARGET)-gcc -B/tools/lib/" \
+       AR="$(CROSSTARGET)-ar" \
+       RANLIB="$(CROSSTARGET)-ranlib"
+  EXTRA_CONFIG = \
+       --host=$(CROSSTARGET) \
+       --prefix=/tools \
+       --with-sysroot=$(ROOT) \
+       --disable-shared \
+       --disable-nls \
+       --disable-libstdcxx-threads \
+       --disable-libstdcxx-pch \
+       --with-gxx-include-dir=/tools/$(CROSSTARGET)/include/c++/$(VER)
   EXTRA_MAKE = 
   EXTRA_INSTALL = 
+endif
 endif
 
   # Disable stack protection in toolchain.
@@ -136,15 +167,18 @@ export TCFLAGS = $(CFLAGS)
 
 objects = $(DL_FILE) \
        gmp-$(GMP_VER).tar.bz2 \
-       mpfr-$(MPFR_VER).tar.bz2
+       mpfr-$(MPFR_VER).tar.bz2 \
+       mpc-$(MPC_VER).tar.gz
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 gmp-$(GMP_VER).tar.bz2 = $(DL_FROM)/gmp-$(GMP_VER).tar.bz2
 mpfr-$(MPFR_VER).tar.bz2 = $(DL_FROM)/mpfr-$(MPFR_VER).tar.bz2
+mpc-$(MPC_VER).tar.gz = $(DL_FROM)/mpc-$(MPC_VER).tar.gz
 
-$(DL_FILE)_MD5                 = 295709feb4441b04e87dea3f1bab4281
+$(DL_FILE)_MD5                 = 648bfba342bb41a4b5350fb685f85bc5
 gmp-$(GMP_VER).tar.bz2_MD5     = 041487d25e9c230b0c42b106361055fe
 mpfr-$(MPFR_VER).tar.bz2_MD5   = 89e59fe665e2b3ad44a6789f40b059a0
+mpc-$(MPC_VER).tar.gz_MD5      = d6a1d5f8ddea3abd2cc3e98f58352d26
 
 install : $(TARGET)
 
@@ -173,23 +207,16 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) $(DIR_SRC)/gcc-build && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
+       @rm -rf $(DIR_APP) $(DIR_SRC)/gcc-build && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
        @mkdir $(DIR_SRC)/gcc-build
 
        # Apply patches.
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc44-build-id.patch
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc44-c++-builtin-redecl.patch
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc44-i386-libgomp.patch
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc44-libtool-no-rpath.patch
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc44-no-add-needed.patch
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc44-pr33763.patch
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc44-rh330771.patch
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc44-rh533181.patch
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc44-rh610785.patch
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc44-unwind-debug-hook.patch
-
-       # texinfo 5 syntax-fixes
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/gcc-4.4.7-texinfo-5.patch
+       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc49-i386-libgomp.patch
+       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc49-libtool-no-rpath.patch
+       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc49-no-add-needed.patch
+       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc49-pr38757.patch
+       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/gcc/gcc49-pr64336.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/gcc/gcc-fix-inlining-issues.patch
 
 ifneq "$(ROOT)" ""
        # Build gmp and mpfr internally in toolchain.
@@ -197,25 +224,39 @@ ifneq "$(ROOT)" ""
        cd $(DIR_APP) && mv -v gmp-$(GMP_VER) gmp
        cd $(DIR_APP) && tar xfa $(DIR_DL)/mpfr-$(MPFR_VER).tar.bz2
        cd $(DIR_APP) && mv -v mpfr-$(MPFR_VER) mpfr
+       cd $(DIR_APP) && tar xfa $(DIR_DL)/mpc-$(MPC_VER).tar.gz
+       cd $(DIR_APP) && mv -v mpc-$(MPC_VER) mpc
 
 ifeq    "$(PASS)" "1"
        # GCC does not detect stack protection correctly, which causes problems
        # for the build of libresolv_pic.a.
        cd $(DIR_APP) && sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure
+
+       for file in $$(find $(DIR_APP)/gcc/config -name linux64.h -o -name linux.h \
+                       -o -name sysv4.h -o -name linux-eabi.h -o -name linux-elf.h); do \
+               echo "Processing $${file}..."; \
+               sed -i $${file} \
+                       -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
+                       -e 's@/usr@/tools@g'; \
+               echo '#undef STANDARD_STARTFILE_PREFIX_1' >> $${file}; \
+               echo '#undef STANDARD_STARTFILE_PREFIX_2' >> $${file}; \
+               echo '#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"' >> $${file}; \
+               echo '#define STANDARD_STARTFILE_PREFIX_2 ""' >> $${file}; \
+       done
 endif
 
 ifeq    "$(PASS)" "2"
-       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/gcc-4.4.3-startfiles_fix-1.patch
-
+       cd $(DIR_APP) && cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
+                       `dirname $$(/tools/bin/$(CROSSTARGET)-gcc -print-libgcc-file-name)`/include-fixed/limits.h
        for file in $$(find $(DIR_APP)/gcc/config -name linux64.h -o -name linux.h \
                        -o -name sysv4.h -o -name linux-eabi.h -o -name linux-elf.h); do \
                echo "Processing $${file}..."; \
                sed -i $${file} \
                        -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \
                        -e 's@/usr@/tools@g'; \
-               echo '#undef STANDARD_INCLUDE_DIR' >> $${file}; \
-               echo '#define STANDARD_INCLUDE_DIR 0' >> $${file}; \
-               echo '#define STANDARD_STARTFILE_PREFIX_1 ""' >> $${file}; \
+               echo '#undef STANDARD_STARTFILE_PREFIX_1' >> $${file}; \
+               echo '#undef STANDARD_STARTFILE_PREFIX_2' >> $${file}; \
+               echo '#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"' >> $${file}; \
                echo '#define STANDARD_STARTFILE_PREFIX_2 ""' >> $${file}; \
        done
 endif
@@ -226,6 +267,15 @@ endif
                -e 's@\./fixinc\.sh@-c true@' \
                -e 's/^T_CFLAGS =$$/& -fomit-frame-pointer/'
 
+ifeq    "$(PASS)" "L"
+       # libstdc++ pass
+       cd $(DIR_SRC)/gcc-build && \
+               $(EXTRA_ENV) \
+               $(DIR_APP)/libstdc++-v3/configure \
+                       $(EXTRA_CONFIG)
+       cd $(DIR_SRC)/gcc-build && make $(MAKETUNING) $(EXTRA_MAKE)
+       cd $(DIR_SRC)/gcc-build && make $(EXTRA_INSTALL) install
+else
        # The actual build.
        cd $(DIR_SRC)/gcc-build && \
                $(EXTRA_ENV) \
@@ -233,15 +283,20 @@ endif
                        $(EXTRA_CONFIG)
        cd $(DIR_SRC)/gcc-build && make $(MAKETUNING) $(EXTRA_MAKE)
        cd $(DIR_SRC)/gcc-build && make $(EXTRA_INSTALL) install
+endif
 
 ifeq "$(ROOT)" ""
        ln -svf ../usr/bin/cpp /lib
        ln -svf gcc /usr/bin/cc
+       # remove gdb python files from libdir
+       rm -rf /usr/lib/*-gdb.py
 else
 ifeq    "$(PASS)" "1"
        ln -svf libgcc.a $$(/tools/bin/$(CROSSTARGET)-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/')
 else
        ln -svf gcc /tools/bin/cc
+       # remove gdb python files from libdir
+       rm -rf /tools/lib/*-gdb.py
 endif
 endif
        @rm -rf $(DIR_APP) $(DIR_SRC)/gcc-build
index d7d51cf8cba5e996a426f9d2d687b5333431461d..56a35333914e9b2209660cca23ca02817652e91e 100644 (file)
--- a/lfs/glibc
+++ b/lfs/glibc
@@ -51,7 +51,8 @@ else
        --with-headers=/tools/include \
        libc_cv_forced_unwind=yes \
        libc_cv_ctors_header=yes \
-       libc_cv_c_cleanup=yes
+       libc_cv_c_cleanup=yes \
+       CC=/tools/bin/$(CROSSTARGET)-gcc
   EXTRA_MAKE =
   EXTRA_INSTALL =
 endif
@@ -292,6 +293,7 @@ endif
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-test-installation.pl-nss_test1.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-test-installation.pl-libgcc_s.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-2.12-accept-make-versions-4.0-and-greater.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-mq_open.patch
 
        # Fixes:
        #   Makefile:235: *** mixed implicit and normal rules.  Stop.
index 3e613a824f66a586993714977b8b34e7d389b6ae..ba744087cf6b2ebb96b335f5aab5ca2b08a93f85 100644 (file)
--- a/lfs/grub
+++ b/lfs/grub
@@ -101,6 +101,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 
        # Disable hardening.
        paxctl -mpes /usr/sbin/grub-bios-setup /usr/sbin/grub-probe
+       paxctl -mpexs /usr/bin/grub-script-check
 
        # We don't need to install unifont just to generate a grub2 compatible
        # font archive for the graphical boot menu. The following command only
diff --git a/lfs/libmpc b/lfs/libmpc
new file mode 100644 (file)
index 0000000..5aa43d9
--- /dev/null
@@ -0,0 +1,77 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+###############################################################################
+# Definitions
+###############################################################################
+
+include Config
+
+VER        = 1.0.3
+
+THISAPP    = mpc-$(VER)
+DL_FILE    = $(THISAPP).tar.gz
+DL_FROM    = $(URL_IPFIRE)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+TARGET     = $(DIR_INFO)/$(THISAPP)
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = d6a1d5f8ddea3abd2cc3e98f58352d26
+
+install : $(TARGET)
+
+check : $(patsubst %,$(DIR_CHK)/%,$(objects))
+
+download :$(patsubst %,$(DIR_DL)/%,$(objects))
+
+md5 : $(subst %,%_MD5,$(objects))
+
+###############################################################################
+# Downloading, checking, md5sum
+###############################################################################
+
+$(patsubst %,$(DIR_CHK)/%,$(objects)) :
+       @$(CHECK)
+
+$(patsubst %,$(DIR_DL)/%,$(objects)) :
+       @$(LOAD)
+
+$(subst %,%_MD5,$(objects)) :
+       @$(MD5)
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+       @$(PREBUILD)
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && ./configure --prefix=/usr
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
index 829b21e3e4d1d0e83a2cd1914c4fb8a778ca7033..3fd8d8c236e11b3ab7fa15d3112b003cf41816f8 100644 (file)
--- a/lfs/linux
+++ b/lfs/linux
@@ -170,8 +170,32 @@ endif
        # update the queued trim blacklist from kernel 4.2rc1
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.43_new_qtrim_blacklist.patch
 
-       # HyperV 2008 patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.x-hyperv-2008-fix.patch
+       # Hyper-V patches
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0001-Drivers-net-hyperv-Get-rid-of-the-rndis_filter_packe.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0002-Drivers-net-hyperv-Cleanup-the-receive-path.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0003-Drivers-net-hyperv-Cleanup-the-netvsc-receive-callba.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0004-hyperv-Add-latest-NetVSP-versions-to-auto-negotiatio.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0005-Drivers-net-hyperv-Enable-scatter-gather-I-O.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0006-Drivers-net-hyperv-Cleanup-the-send-path.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0007-Drivers-net-hyperv-Enable-offloads-on-the-host.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0008-Drivers-net-hyperv-Enable-receive-side-IP-checksum-o.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0009-Drivers-net-hyperv-Enable-send-side-checksum-offload.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0010-Drivers-net-hyperv-Enable-large-send-offload.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0011-hyperv-Change-the-receive-buffer-size-for-legacy-hos.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0012-Drivers-net-hyperv-Allocate-memory-for-all-possible-.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0013-Drivers-net-hyperv-Negotiate-suitable-ndis-version-f.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0014-Drivers-net-hyperv-Address-UDP-checksum-issues.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0015-hyperv-Properly-handle-checksum-offload.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0016-hyperv-Add-support-for-virtual-Receive-Side-Scaling-.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0017-hyperv-Remove-recv_pkt_list-and-lock.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0018-hyperv-Simplify-the-send_completion-variables.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0019-hyperv-Enable-sendbuf-mechanism-on-the-send-path.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0020-Add-support-for-netvsc-build-without-CONFIG_SYSFS-fl.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0021-hyperv-Add-hash-value-into-RNDIS-Per-packet-info.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0022-hyperv-fix-apparent-cut-n-paste-error-in-send-path-t.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0023-hyperv-Fix-error-return-code-in-netvsc_init_buf.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0024-hyperv-Fix-a-bug-in-netvsc_send.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/0025-Drivers-hv-vmbus-Support-per-channel-driver-state.patch
 
        # fix empty symbol crc's
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-genksyms_fix_typeof_handling.patch
@@ -186,6 +210,7 @@ ifeq "$(KCFG)" "-multi"
 
        # Apply Arm7-multiarch kernel patches.
        cd $(DIR_APP) && xzcat $(DIR_DL)/arm7-multi-patches-$(A7M_PATCHES).patch.xz | patch -Np1
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/arm-multi-grsec-compile-fixes.patch
 
        # Install switch api userspace header
        cd $(DIR_APP) && install -v -m644 include/uapi/linux/switch.h /usr/include/linux/
diff --git a/lfs/lua b/lfs/lua
new file mode 100644 (file)
index 0000000..6a6a959
--- /dev/null
+++ b/lfs/lua
@@ -0,0 +1,80 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+###############################################################################
+# Definitions
+###############################################################################
+
+include Config
+
+VER        = 5.3.0
+
+THISAPP    = lua-$(VER)
+DL_FILE    = $(THISAPP).tar.gz
+DL_FROM    = $(URL_IPFIRE)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+TARGET     = $(DIR_INFO)/$(THISAPP)
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = a1b0a7e92d0c85bbff7a8d27bf29f8af
+
+install : $(TARGET)
+
+check : $(patsubst %,$(DIR_CHK)/%,$(objects))
+
+download :$(patsubst %,$(DIR_DL)/%,$(objects))
+
+md5 : $(subst %,%_MD5,$(objects))
+
+###############################################################################
+# Downloading, checking, md5sum
+###############################################################################
+
+$(patsubst %,$(DIR_CHK)/%,$(objects)) :
+       @$(CHECK)
+
+$(patsubst %,$(DIR_DL)/%,$(objects)) :
+       @$(LOAD)
+
+$(subst %,%_MD5,$(objects)) :
+       @$(MD5)
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+       @$(PREBUILD)
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && cp -v src/luaconf.h src/luaconf.h.template.in
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/lua-5.3.0-autotoolize.patch
+       cd $(DIR_APP) && autoreconf -vfi
+       cd $(DIR_APP) && ./configure --prefix=/usr
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
index c08ec883cc4b0610e1f8cd96872af8674fa726de..0d92c6be5eb1e113d499f40de3fd45217952b9ed 100644 (file)
--- a/lfs/nano
+++ b/lfs/nano
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2015  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2016  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.5.0
+VER        = 2.5.1
 
 THISAPP    = nano-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = nano
-PAK_VER    = 7
+PAK_VER    = 8
 
 DEPS       = ""
 
@@ -44,7 +44,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 751ed96457017572bab15be18cb873ba
+$(DL_FILE)_MD5 = f25c7da9813ae5f1df7e5dd1072de4ce
 
 install : $(TARGET)
 
diff --git a/lfs/ntp b/lfs/ntp
index 2d04b17ba02dab9ad6e3f6a4e13459071c79b5fd..3393f9059f1155d8a03684a9485898a95156fa0a 100644 (file)
--- a/lfs/ntp
+++ b/lfs/ntp
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2015  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2016  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 4.2.8p4
+VER        = 4.2.8p5
 
 THISAPP    = ntp-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 6af96862b09324a8ef965ca76b759c8b
+$(DL_FILE)_MD5 = 9f02b2a0acc1617ce2716d529a58d2d8
 
 install : $(TARGET)
 
@@ -70,7 +70,6 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ntp-fix-sycing-with-local-clock.patch
        cd $(DIR_APP) && \
                ./configure \
                        --prefix=/usr \
index 0bba1ecd9c712ab21e88f93380ded9a6192c0360..546bc7ed8223b83a67effcfed3102ccd069625d9 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 7.1p1
+VER        = 7.1p2
 
 THISAPP    = openssh-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 8709736bc8a8c253bc4eeb4829888ca5
+$(DL_FILE)_MD5 = 4d8547670e2a220d5ef805ad9e47acf2
 
 install : $(TARGET)
 
index a19ac1ff15d2834eaa0f909e47ac8c261514af07..96e37f7d479b21cf94800594e15604bd85d54ca9 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2014  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2015  IPFire Team  <info@ipfire.org>                          #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.3.6
+VER        = 2.3.7
 
 THISAPP    = openvpn-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = bcc30c296566df14feebdd8aa0e408ca
+$(DL_FILE)_MD5 = 5b819f7cd0b875f55f20a947224967aa
 
 install : $(TARGET)
 
index 88c5f4590fd41bbcd86ddace3e2e18191625b698..e021a4c63aed6b7b379be66dd52bf5d8d75e1e6f 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 7.0.3
+VER        = 7.0.11
 
 THISAPP    = owncloud-$(VER)
 DL_FILE    = $(THISAPP).tar.bz2
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = owncloud
-PAK_VER           = 4
+PAK_VER           = 6
 
 DEPS       = ""
 
@@ -44,7 +44,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = d5d2ad068046e6ddb322cf001a9bb3d5
+$(DL_FILE)_MD5 = 1f4839e43bc910a9acd8700fb9923b3a
 
 install : $(TARGET)
 
index fddd0756bb210c62fbd351f948443dc164497e26..3a91256f1081a90ffce9bebc40f848a44f45370c 100644 (file)
@@ -29,7 +29,9 @@ VER        = master
 THISAPP    = vdr-plugin-eepg-$(VER)
 DL_FILE    = vdr-plugin-eepg-$(GIT_VER).tar.bz2
 
-DL_FROM    = http://projects.vdr-developer.org/git/vdr-plugin-eepg.git/snapshot
+# SOURCE http://projects.vdr-developer.org/git/vdr-plugin-eepg.git/snapshot
+
+DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = vdr_eepg
diff --git a/make.sh b/make.sh
index 39089cd88785b7d1441b46e62b169f32fc8c4444..67320cf4be7d42395f4ae0ec48d0d2848aa38dc3 100755 (executable)
--- a/make.sh
+++ b/make.sh
@@ -17,7 +17,7 @@
 # along with IPFire; if not, write to the Free Software                    #
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
 #                                                                          #
-# Copyright (C) 2007-2015 IPFire Team <info@ipfire.org>.                   #
+# Copyright (C) 2007-2016 IPFire Team <info@ipfire.org>.                   #
 #                                                                          #
 ############################################################################
 #
@@ -25,7 +25,7 @@
 NAME="IPFire"                                                  # Software name
 SNAME="ipfire"                                                 # Short name
 VERSION="2.17"                                                 # Version number
-CORE="96"                                                      # Core Level (Filename)
+CORE="97"                                                      # Core Level (Filename)
 PAKFIRE_CORE="96"                                              # Core Level (PAKFIRE)
 GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`                   # Git Branch
 SLOGAN="www.ipfire.org"                                                # Software slogan
@@ -36,7 +36,7 @@ BUILD_IMAGES=1                                                        # Flash and Xen Downloader
 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
 GIT_TAG=$(git tag | tail -1)                                   # Git Tag
 GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8) # Last commit
-TOOLCHAINVER=10
+TOOLCHAINVER=11
 
 # New architecture variables
 BUILD_ARCH="$(uname -m)"
@@ -221,7 +221,7 @@ prepareenv() {
     # Run LFS static binary creation scripts one by one
     export CCACHE_DIR=$BASEDIR/ccache
     export CCACHE_COMPRESS=1
-    export CCACHE_COMPILERCHECK="string:toolchain-${TOOLCHAINVER}:${TARGET_ARCH}"
+    export CCACHE_COMPILERCHECK="string:toolchain-${TOOLCHAINVER} ${TARGET_ARCH}"
 
     # Remove pre-install list of installed files in case user erase some files before rebuild
     rm -f $BASEDIR/build/usr/src/lsalr 2>/dev/null
@@ -287,6 +287,7 @@ buildtoolchain() {
     lfsmake1 linux                     TOOLS=1 KCFG="-headers"
     lfsmake1 glibc
     lfsmake1 cleanup-toolchain         PASS=1
+    lfsmake1 gcc                       PASS=L
     lfsmake1 binutils                  PASS=2
     lfsmake1 gcc                       PASS=2
     lfsmake1 ccache                    PASS=2
@@ -330,6 +331,7 @@ buildbase() {
     lfsmake2 gmp
     lfsmake2 gmp-compat
     lfsmake2 mpfr
+    lfsmake2 libmpc
     lfsmake2 file
     lfsmake2 gcc
     lfsmake2 sed
@@ -746,7 +748,7 @@ buildipfire() {
   ipfiremake streamripper
   ipfiremake sshfs
   ipfiremake taglib
-  ipfiremake mediatomb
+  #ipfiremake mediatomb
   ipfiremake sslh
   ipfiremake perl-gettext
   ipfiremake perl-Sort-Naturally
@@ -844,6 +846,8 @@ buildipfire() {
   ipfiremake swconfig
   ipfiremake haproxy
   ipfiremake ipset
+  ipfiremake lua
+  ipfiremake dnsdist
 }
 
 buildinstaller() {
diff --git a/src/initscripts/init.d/dnsdist b/src/initscripts/init.d/dnsdist
new file mode 100644 (file)
index 0000000..03e6ab8
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/dnsdist
+#
+# Description : dnsdist - A DNS load-balancer and more
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+[ -r "/etc/sysconfig/dnsdist" ] && . /etc/sysconfig/dnsdist
+
+case "${1}" in
+       start)
+               boot_mesg "Starting dnsdist..."
+               loadproc /usr/bin/dnsdist -d ${ARGS}
+               ;;
+
+       stop)
+               boot_mesg "Stopping dnsdist..."
+               killproc /usr/bin/dnsdist
+               ;;
+
+       reload)
+               boot_mesg "Reloading dnsdist..."
+               reloadproc /usr/bin/dnsdist
+               ;;
+
+       restart)
+               ${0} stop
+               sleep 1
+               ${0} start
+               ;;
+
+       status)
+               statusproc /usr/bin/dnsdist
+               ;;
+
+       *)
+               echo "Usage: ${0} {start|stop|reload|restart|status}"
+               exit 1
+               ;;
+esac
+
+# End $rc_base/init.d/dnsdist
index 66220715306171a167cc6b65121ce73bc1f6fb05..cb52670d6a5e42c5dbf7fd809fd1350d66a8a00d 100644 (file)
@@ -21,9 +21,11 @@ iptables_init() {
        iptables -F
        iptables -t nat -F
        iptables -t mangle -F
+       iptables -t raw -F
        iptables -X
        iptables -t nat -X
        iptables -t mangle -X
+       iptables -t raw -X
 
        # Set up policies
        iptables -P INPUT DROP
@@ -84,10 +86,71 @@ iptables_init() {
        iptables -A INPUT   -p tcp -j BADTCP
        iptables -A FORWARD -p tcp -j BADTCP
 
-       # Connection tracking chain
+       # Connection tracking chains
        iptables -N CONNTRACK
-       iptables -A CONNTRACK -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
+       iptables -A CONNTRACK -m conntrack --ctstate ESTABLISHED -j ACCEPT
        iptables -A CONNTRACK -m conntrack --ctstate INVALID -j DROP
+       iptables -A CONNTRACK -p icmp -m conntrack --ctstate RELATED -j ACCEPT
+       iptables -t raw -N CONNTRACK
+       iptables -t raw -A PREROUTING -j CONNTRACK
+
+       # Conntrack helpers (https://home.regit.org/netfilter-en/secure-use-of-helpers/)
+
+       # SIP
+       if [ "${CONNTRACK_SIP}" = "on" ]; then
+               iptables -A CONNTRACK -m conntrack --ctstate RELATED \
+                       -m helper --helper sip -j ACCEPT
+               for proto in udp tcp; do
+                       iptables -t raw -A CONNTRACK -p "${proto}" --dport 5060 -j CT --helper sip
+               done
+       fi
+
+       # H.323
+       if [ "${CONNTRACK_H323}" = "on" ]; then
+               iptables -A CONNTRACK -m conntrack --ctstate RELATED \
+                       -m helper --helper h323 -j ACCEPT
+
+               # Gatekeeper RAS
+               iptables -t raw -A CONNTRACK -p udp --dport 1719 -j CT --helper RAS
+
+               # Q.931
+               iptables -t raw -A CONNTRACK -p tcp --dport 1720 -j CT --helper Q.931
+       fi
+
+       # FTP
+       if [ "${CONNTRACK_FTP}" = "on" ]; then
+               iptables -A CONNTRACK -m conntrack --ctstate RELATED \
+                       -m helper --helper ftp -p tcp --dport 1024: -j ACCEPT
+               iptables -t raw -A CONNTRACK -p tcp --dport 21 -j CT --helper ftp
+       fi
+
+       # PPTP
+       if [ "${CONNTRACK_PPTP}" = "on" ]; then
+               iptables -A CONNTRACK -m conntrack --ctstate RELATED \
+                       -m helper --helper pptp -j ACCEPT
+               iptables -t raw -A CONNTRACK -p udp --dport 1723 -j CT --helper pptp
+       fi
+
+       # TFTP
+       if [ "${CONNTRACK_TFTP}" = "on" ]; then
+               iptables -A CONNTRACK -m conntrack --ctstate RELATED \
+                       -m helper --helper tftp -j ACCEPT
+               iptables -t raw -A CONNTRACK -p udp --dport 69 -j CT --helper tftp
+       fi
+
+       # IRC
+       if [ "${CONNTRACK_IRC}" = "on" ]; then
+               iptables -A CONNTRACK -m conntrack --ctstate RELATED \
+                       -m helper --helper irc -j ACCEPT
+               iptables -t raw -A CONNTRACK -p tcp --dport 6667 -j CT --helper irc
+       fi
+
+       # Amanda
+       if [ "${CONNTRACK_AMANDA}" = "on" ]; then
+               iptables -A CONNTRACK -m conntrack --ctstate RELATED \
+                       -m helper --helper amanda -j ACCEPT
+               iptables -t raw -A CONNTRACK -p tcp -j CT --helper amanda
+       fi
 
        # Fix for braindead ISP's
        iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
@@ -400,24 +463,6 @@ iptables_red_down() {
 # See how we were called.
 case "$1" in
   start)
-       boot_mesg "Loading firewall modules into the kernel"
-       modprobe iptable_nat || failed=1
-       for i in $(find /lib/modules/$(uname -r) -name nf_conntrack*); do
-               modprobe $(basename $i | cut -d. -f1) || failed=1
-       done
-       for i in $(find /lib/modules/$(uname -r) -name nf_nat*); do
-               modprobe $(basename $i | cut -d. -f1) || failed=1
-       done
-       (exit ${failed})
-       evaluate_retval
-
-       if [ -e /var/ipfire/main/disable_nf_sip ]; then
-               rmmod nf_nat_sip
-               rmmod nf_conntrack_sip
-               rmmod nf_nat_h323
-               rmmod nf_conntrack_h323
-       fi
-
        boot_mesg "Setting up firewall"
        iptables_init
        evaluate_retval
index 5e1420b9d28f06cc224811e4210327db949b3acd..c00dbcf7ceac5f82c52ee71f1fd0f7dc3fc748ed 100644 (file)
 #include <sys/types.h>
 #include <fcntl.h>
 #include "setuid.h"
+#include "libsmooth.h"
 
-int main(int argc, char *argv[]) {
+#define QOS_SH "/var/ipfire/qos/bin/qos.sh"
 
+int main(int argc, char *argv[]) {
+       struct keyvalue* kv = NULL;
         int fd = -1;
+       int r = 0;
 
         if (!(initsetuid()))
                 exit(1);
@@ -26,30 +30,48 @@ int main(int argc, char *argv[]) {
         }
 
         if (strcmp(argv[1], "generate") == 0) {
-                safe_system("/usr/bin/perl /var/ipfire/qos/bin/makeqosscripts.pl > /var/ipfire/qos/bin/qos.sh");
+               kv = initkeyvalues();
+               if (!readkeyvalues(kv, CONFIG_ROOT "/qos/settings")) {
+                       fprintf(stderr, "Cannot read QoS settings\n");
+                       r = 1;
+                       goto END;
+               }
+
+               char enabled[STRING_SIZE];
+               if (!findkey(kv, "ENABLED", enabled))
+                       strcpy(enabled, "off");
+
+               if (strcmp(enabled, "on") == 0)
+                       safe_system("/usr/bin/perl /var/ipfire/qos/bin/makeqosscripts.pl > " QOS_SH);
+               else
+                       unlink(QOS_SH);
         }
 
-        if ((fd = open("/var/ipfire/qos/bin/qos.sh", O_RDONLY)) != -1) {
+        if ((fd = open(QOS_SH, O_RDONLY)) != -1) {
                 close(fd);
         } else {
                 // If there is no qos.sh do nothing.
-                exit(0);
+                goto END;
         }
 
-        safe_system("chmod 755 /var/ipfire/qos/bin/qos.sh &>/dev/null");
+        safe_system("chmod 755 " QOS_SH " &>/dev/null");
         if (strcmp(argv[1], "start") == 0) {
-                safe_system("/var/ipfire/qos/bin/qos.sh start");
+                safe_system(QOS_SH " start");
         } else if (strcmp(argv[1], "stop") == 0) {
-                safe_system("/var/ipfire/qos/bin/qos.sh clear");
+                safe_system(QOS_SH " clear");
         } else if (strcmp(argv[1], "status") == 0) {
-                safe_system("/var/ipfire/qos/bin/qos.sh status");
+                safe_system(QOS_SH " status");
         } else if (strcmp(argv[1], "restart") == 0) {
-                safe_system("/var/ipfire/qos/bin/qos.sh restart");
+                safe_system(QOS_SH " restart");
         } else {
                 if (strcmp(argv[1], "generate") == 0) {exit(0);}
                 fprintf(stderr, "\nBad argument given.\n\nqosctrl (start|stop|restart|status|generate)\n\n");
                 exit(1);
         }
 
-        return 0;
+END:
+       if (kv)
+               freekeyvalues(kv);
+
+        return r;
 }
index 48b0978d78a927e0a6b9e1a434e3e6d42667d7c2..109d267a4fe833f63794f49472d5309a0c0a10f7 100644 (file)
@@ -35,7 +35,7 @@ int main(int argc, char *argv[]) {
                safe_system("ln -fs ../init.d/ntp /etc/rc.d/rc6.d/K46ntpd >/dev/null 2>&1");
                safe_system("/etc/rc.d/init.d/ntp start");
        } else if (strcmp(argv[1], "disable") == 0) {
-               safe_system("/etc/rc.d/init.d/ntpd stop");
+               safe_system("/etc/rc.d/init.d/ntp stop");
                safe_system("rm -f /etc/rc.d/rc*.d/*ntpd >/dev/null 2>&1");
        } else {
                fprintf(stderr, "\nBad argument given.\n\ntimectrl (start|stop|restart)\n\n");
diff --git a/src/patches/arm-multi-grsec-compile-fixes.patch b/src/patches/arm-multi-grsec-compile-fixes.patch
new file mode 100644 (file)
index 0000000..530d69e
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/arch/arm/mach-omap2/cclock3xxx_data.c~   2015-12-12 11:00:10.474423373 +0000
++++ b/arch/arm/mach-omap2/cclock3xxx_data.c    2015-12-12 11:30:31.198452547 +0000
+@@ -250,7 +250,7 @@
+ static struct clk dpll1_ck;
+-static struct clk_ops dpll1_ck_ops;
++static clk_ops_no_const dpll1_ck_ops;
+ static struct clk_ops dpll1_ck_ops_34xx __initdata = {
+       .init           = &omap2_init_clk_clkdm,
diff --git a/src/patches/binutils-2.22-pt-pax-flags-20111121.patch b/src/patches/binutils-2.22-pt-pax-flags-20111121.patch
deleted file mode 100644 (file)
index 3ba1a87..0000000
+++ /dev/null
@@ -1,1859 +0,0 @@
---- binutils-2.22/bfd/elf-bfd.h
-+++ binutils-2.22/bfd/elf-bfd.h
-@@ -1577,6 +1577,9 @@ struct elf_obj_tdata
-   /* Segment flags for the PT_GNU_STACK segment.  */
-   unsigned int stack_flags;
-+  /* Segment flags for the PT_PAX_FLAGS segment.  */
-+  unsigned int pax_flags;
-+
-   /* Symbol version definitions in external objects.  */
-   Elf_Internal_Verdef *verdef;
---- binutils-2.22/bfd/elf.c
-+++ binutils-2.22/bfd/elf.c
-@@ -1158,6 +1158,7 @@ get_segment_type (unsigned int p_type)
-     case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
-     case PT_GNU_STACK: pt = "STACK"; break;
-     case PT_GNU_RELRO: pt = "RELRO"; break;
-+    case PT_PAX_FLAGS: pt = "PAX_FLAGS"; break;
-     default: pt = NULL; break;
-     }
-   return pt;
-@@ -2477,6 +2478,9 @@ bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
-     case PT_GNU_RELRO:
-       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
-+    case PT_PAX_FLAGS:
-+      return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "pax_flags");
-+
-     default:
-       /* Check for any processor-specific program segment types.  */
-       bed = get_elf_backend_data (abfd);
-@@ -3551,6 +3555,11 @@ get_program_header_size (bfd *abfd, struct bfd_link_info *info)
-       ++segs;
-     }
-+    {
-+      /* We need a PT_PAX_FLAGS segment.  */
-+      ++segs;
-+    }
-+
-   for (s = abfd->sections; s != NULL; s = s->next)
-     {
-       if ((s->flags & SEC_LOAD) != 0
-@@ -4153,6 +4162,20 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
-           }
-       }
-+    {
-+      amt = sizeof (struct elf_segment_map);
-+      m = bfd_zalloc (abfd, amt);
-+      if (m == NULL)
-+      goto error_return;
-+      m->next = NULL;
-+      m->p_type = PT_PAX_FLAGS;
-+      m->p_flags = elf_tdata (abfd)->pax_flags;
-+      m->p_flags_valid = 1;
-+
-+      *pm = m;
-+      pm = &m->next;
-+    }
-+
-       free (sections);
-       elf_tdata (abfd)->segment_map = mfirst;
-     }
-@@ -5417,7 +5440,8 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
-        6. PT_TLS segment includes only SHF_TLS sections.
-        7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
-        8. PT_DYNAMIC should not contain empty sections at the beginning
--        (with the possible exception of .dynamic).  */
-+        (with the possible exception of .dynamic).
-+       9. PT_PAX_FLAGS segments do not include any sections.  */
- #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed)            \
-   ((((segment->p_paddr                                                        \
-       ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr)      \
-@@ -5425,6 +5449,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
-      && (section->flags & SEC_ALLOC) != 0)                            \
-     || IS_NOTE (segment, section))                                    \
-    && segment->p_type != PT_GNU_STACK                                 \
-+   && segment->p_type != PT_PAX_FLAGS                                 \
-    && (segment->p_type != PT_TLS                                      \
-        || (section->flags & SEC_THREAD_LOCAL))                                \
-    && (segment->p_type == PT_LOAD                                     \
---- binutils-2.22/bfd/elflink.c
-+++ binutils-2.22/bfd/elflink.c
-@@ -5545,16 +5545,30 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
-     return TRUE;
-   bed = get_elf_backend_data (output_bfd);
-+
-+  elf_tdata (output_bfd)->pax_flags = PF_NORANDEXEC;
-+  if (info->execheap)
-+    elf_tdata (output_bfd)->pax_flags |= PF_NOMPROTECT;
-+  else if (info->noexecheap)
-+    elf_tdata (output_bfd)->pax_flags |= PF_MPROTECT;
-+
-   if (info->execstack)
--    elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
-+    {
-+      elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
-+      elf_tdata (output_bfd)->pax_flags |= PF_EMUTRAMP;
-+    }
-   else if (info->noexecstack)
--    elf_tdata (output_bfd)->stack_flags = PF_R | PF_W;
-+    {
-+      elf_tdata (output_bfd)->stack_flags = PF_R | PF_W;
-+      elf_tdata (output_bfd)->pax_flags |= PF_NOEMUTRAMP;
-+    }
-   else
-     {
-       bfd *inputobj;
-       asection *notesec = NULL;
-       int exec = 0;
-+      elf_tdata (output_bfd)->pax_flags |= PF_NOEMUTRAMP;
-       for (inputobj = info->input_bfds;
-          inputobj;
-          inputobj = inputobj->link_next)
-@@ -5567,7 +5581,11 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
-         if (s)
-           {
-             if (s->flags & SEC_CODE)
--              exec = PF_X;
-+              {
-+                elf_tdata (output_bfd)->pax_flags &= ~PF_NOEMUTRAMP;
-+                elf_tdata (output_bfd)->pax_flags |= PF_EMUTRAMP;
-+                exec = PF_X;
-+              }
-             notesec = s;
-           }
-         else if (bed->default_execstack)
---- binutils-2.22/binutils/readelf.c
-+++ binutils-2.22/binutils/readelf.c
-@@ -2740,6 +2740,7 @@ get_segment_type (unsigned long p_type)
-                       return "GNU_EH_FRAME";
-     case PT_GNU_STACK:        return "GNU_STACK";
-     case PT_GNU_RELRO:  return "GNU_RELRO";
-+    case PT_PAX_FLAGS:  return "PAX_FLAGS";
-     default:
-       if ((p_type >= PT_LOPROC) && (p_type <= PT_HIPROC))
---- binutils-2.22/include/bfdlink.h
-+++ binutils-2.22/include/bfdlink.h
-@@ -322,6 +322,14 @@ struct bfd_link_info
-   /* TRUE if PT_GNU_RELRO segment should be created.  */
-   unsigned int relro: 1;
-+  /* TRUE if PT_PAX_FLAGS segment should be created with PF_NOMPROTECT
-+     flags.  */
-+  unsigned int execheap: 1;
-+
-+  /* TRUE if PT_PAX_FLAGS segment should be created with PF_MPROTECT
-+     flags.  */
-+  unsigned int noexecheap: 1;
-+
-   /* TRUE if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
-      should be created.  */
-   unsigned int eh_frame_hdr: 1;
---- binutils-2.22/include/elf/common.h
-+++ binutils-2.22/include/elf/common.h
-@@ -429,6 +429,7 @@
- #define PT_SUNW_EH_FRAME PT_GNU_EH_FRAME      /* Solaris uses the same value */
- #define PT_GNU_STACK  (PT_LOOS + 0x474e551) /* Stack flags */
- #define PT_GNU_RELRO  (PT_LOOS + 0x474e552) /* Read-only after relocation */
-+#define PT_PAX_FLAGS  (PT_LOOS + 0x5041580) /* PaX flags */
- /* Program segment permissions, in program header p_flags field.  */
-@@ -439,6 +440,21 @@
- #define PF_MASKOS     0x0FF00000      /* New value, Oct 4, 1999 Draft */
- #define PF_MASKPROC   0xF0000000      /* Processor-specific reserved bits */
-+/* Flags to control PaX behavior.  */
-+
-+#define PF_PAGEEXEC   (1 << 4)        /* Enable  PAGEEXEC */
-+#define PF_NOPAGEEXEC (1 << 5)        /* Disable PAGEEXEC */
-+#define PF_SEGMEXEC   (1 << 6)        /* Enable  SEGMEXEC */
-+#define PF_NOSEGMEXEC (1 << 7)        /* Disable SEGMEXEC */
-+#define PF_MPROTECT   (1 << 8)        /* Enable  MPROTECT */
-+#define PF_NOMPROTECT (1 << 9)        /* Disable MPROTECT */
-+#define PF_RANDEXEC   (1 << 10)       /* Enable  RANDEXEC */
-+#define PF_NORANDEXEC (1 << 11)       /* Disable RANDEXEC */
-+#define PF_EMUTRAMP   (1 << 12)       /* Enable  EMUTRAMP */
-+#define PF_NOEMUTRAMP (1 << 13)       /* Disable EMUTRAMP */
-+#define PF_RANDMMAP   (1 << 14)       /* Enable  RANDMMAP */
-+#define PF_NORANDMMAP (1 << 15)       /* Disable RANDMMAP */
-+
- /* Values for section header, sh_type field.  */
- #define SHT_NULL      0               /* Section header table entry unused */
---- binutils-2.22/ld/emultempl/elf32.em
-+++ binutils-2.22/ld/emultempl/elf32.em
-@@ -2285,6 +2285,16 @@ fragment <<EOF
-         link_info.noexecstack = TRUE;
-         link_info.execstack = FALSE;
-       }
-+      else if (strcmp (optarg, "execheap") == 0)
-+      {
-+        link_info.execheap = TRUE;
-+        link_info.noexecheap = FALSE;
-+      }
-+      else if (strcmp (optarg, "noexecheap") == 0)
-+      {
-+        link_info.noexecheap = TRUE;
-+        link_info.execheap = FALSE;
-+      }
- EOF
- if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
- fragment <<EOF
-@@ -2368,6 +2378,8 @@ fragment <<EOF
-   -z defs                     Report unresolved symbols in object files.\n"));
-   fprintf (file, _("\
-   -z execstack                Mark executable as requiring executable stack\n"));
-+  fprintf (file, _("\
-+  -z execheap                 Mark executable as requiring executable heap\n"));
- EOF
- if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
-@@ -2391,6 +2403,8 @@ fragment <<EOF
- fragment <<EOF
-   fprintf (file, _("\
-   -z noexecstack              Mark executable as not requiring executable stack\n"));
-+  fprintf (file, _("\
-+  -z noexecheap               Mark executable as not requiring executable heap\n"));
- EOF
- if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
- fragment <<EOF
---- binutils-2.22/ld/ldgram.y
-+++ binutils-2.22/ld/ldgram.y
-@@ -1119,6 +1119,8 @@ phdr_type:
-                           $$ = exp_intop (0x6474e550);
-                         else if (strcmp (s, "PT_GNU_STACK") == 0)
-                           $$ = exp_intop (0x6474e551);
-+                        else if (strcmp (s, "PT_PAX_FLAGS") == 0)
-+                          $$ = exp_intop (0x65041580);
-                         else
-                           {
-                             einfo (_("\
---- binutils-2.22/ld/testsuite/ld-alpha/tlsbin.rd
-+++ binutils-2.22/ld/testsuite/ld-alpha/tlsbin.rd
-@@ -35,13 +35,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
- Program Headers:
-   Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
--  PHDR +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+150 R E 0x8
-+  PHDR +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+188 R E 0x8
-   INTERP +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x1
- .*Requesting program interpreter.*
-   LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x10000
-   LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x10000
-   DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x8
-   TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 3 entries:
---- binutils-2.22/ld/testsuite/ld-alpha/tlsbinr.rd
-+++ binutils-2.22/ld/testsuite/ld-alpha/tlsbinr.rd
-@@ -42,6 +42,7 @@ Program Headers:
-  +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x10000
-  +DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x8
-  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
---- binutils-2.22/ld/testsuite/ld-alpha/tlspic.rd
-+++ binutils-2.22/ld/testsuite/ld-alpha/tlspic.rd
-@@ -38,6 +38,7 @@ Program Headers:
-  +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x10000
-  +DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x8
-  +TLS +0x0+10e0 0x0+110e0 0x0+110e0 0x0+60 0x0+80 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 7 entries:
---- binutils-2.22/ld/testsuite/ld-elf/eh1.d
-+++ binutils-2.22/ld/testsuite/ld-elf/eh1.d
-@@ -22,11 +22,11 @@ Contents of the .eh_frame section:
-   DW_CFA_nop
-   DW_CFA_nop
--00000018 0000001c 0000001c FDE cie=00000000 pc=00400078..00400078
--  DW_CFA_advance_loc: 0 to 00400078
-+00000018 0000001c 0000001c FDE cie=00000000 pc=([0-9a-f]+)..\1
-+  DW_CFA_advance_loc: 0 to [0-9a-f]+
-   DW_CFA_def_cfa_offset: 16
-   DW_CFA_offset: r6 \(rbp\) at cfa-16
--  DW_CFA_advance_loc: 0 to 00400078
-+  DW_CFA_advance_loc: 0 to [0-9a-f]+
-   DW_CFA_def_cfa_register: r6 \(rbp\)
- 00000038 ZERO terminator
---- binutils-2.22/ld/testsuite/ld-elf/eh2.d
-+++ binutils-2.22/ld/testsuite/ld-elf/eh2.d
-@@ -22,11 +22,11 @@ Contents of the .eh_frame section:
-   DW_CFA_nop
-   DW_CFA_nop
--00000018 0000001c 0000001c FDE cie=00000000 pc=00400078..00400078
--  DW_CFA_advance_loc: 0 to 00400078
-+00000018 0000001c 0000001c FDE cie=00000000 pc=([0-9a-f]+)..\1
-+  DW_CFA_advance_loc: 0 to [0-9a-f]+
-   DW_CFA_def_cfa_offset: 16
-   DW_CFA_offset: r6 \(rbp\) at cfa-16
--  DW_CFA_advance_loc: 0 to 00400078
-+  DW_CFA_advance_loc: 0 to [0-9a-f]+
-   DW_CFA_def_cfa_register: r6 \(rbp\)
- 00000038 ZERO terminator
---- binutils-2.22/ld/testsuite/ld-elf/eh3.d
-+++ binutils-2.22/ld/testsuite/ld-elf/eh3.d
-@@ -22,11 +22,11 @@ Contents of the .eh_frame section:
-   DW_CFA_nop
-   DW_CFA_nop
--00000018 0000001c 0000001c FDE cie=00000000 pc=00400078..00400078
--  DW_CFA_advance_loc: 0 to 00400078
-+00000018 0000001c 0000001c FDE cie=00000000 pc=([0-9a-f]+)..\1
-+  DW_CFA_advance_loc: 0 to [0-9a-f]+
-   DW_CFA_def_cfa_offset: 16
-   DW_CFA_offset: r6 \(rbp\) at cfa-16
--  DW_CFA_advance_loc: 0 to 00400078
-+  DW_CFA_advance_loc: 0 to [0-9a-f]+
-   DW_CFA_def_cfa_register: r6 \(rbp\)
- 00000038 ZERO terminator
---- binutils-2.22/ld/testsuite/ld-elf/orphan-region.d
-+++ binutils-2.22/ld/testsuite/ld-elf/orphan-region.d
-@@ -15,7 +15,9 @@
- Program Headers:
-   Type.*
-   LOAD[ \t]+0x[0-9a-f]+ 0x0*40000000 0x0*40000000 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x[0-9a-f]+
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-   Segment Sections...
-    00     .text .rodata .moredata *
-+   01 +
---- binutils-2.22/ld/testsuite/ld-i386/tlsbin.rd
-+++ binutils-2.22/ld/testsuite/ld-i386/tlsbin.rd
-@@ -44,6 +44,7 @@ Program Headers:
-  +LOAD.*
-  +DYNAMIC.*
-  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+a0 R +0x1000
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections...
-@@ -53,6 +54,7 @@ Program Headers:
-  +03 +.tdata .dynamic .got .got.plt *
-  +04 +.dynamic *
-  +05 +.tdata .tbss *
-+ +06 +
- Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 9 entries:
-  Offset +Info +Type +Sym.Value +Sym. Name
---- binutils-2.22/ld/testsuite/ld-i386/tlsbindesc.rd
-+++ binutils-2.22/ld/testsuite/ld-i386/tlsbindesc.rd
-@@ -42,6 +42,7 @@ Program Headers:
-  +LOAD.*
-  +DYNAMIC.*
-  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+a0 R +0x1000
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections...
-@@ -51,6 +52,7 @@ Program Headers:
-  +03 +.tdata .dynamic .got .got.plt *
-  +04 +.dynamic *
-  +05 +.tdata .tbss *
-+ +06 +
- Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 9 entries:
-  Offset +Info +Type +Sym.Value +Sym. Name
---- binutils-2.22/ld/testsuite/ld-i386/tlsdesc.rd
-+++ binutils-2.22/ld/testsuite/ld-i386/tlsdesc.rd
-@@ -39,6 +39,7 @@ Program Headers:
-  +LOAD.*
-  +DYNAMIC.*
-  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+80 R +0x1
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections...
-@@ -46,6 +47,7 @@ Program Headers:
-  +01 +.tdata .dynamic .got .got.plt *
-  +02 +.dynamic *
-  +03 +.tdata .tbss *
-+ +04 +
- Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 20 entries:
-  Offset +Info +Type +Sym.Value +Sym. Name
---- binutils-2.22/ld/testsuite/ld-i386/tlsdesc.sd
-+++ binutils-2.22/ld/testsuite/ld-i386/tlsdesc.sd
-@@ -14,7 +14,7 @@ Contents of section \.got:
-  [0-9a-f]+ 6c000000 b4ffffff 4c000000 68000000  .*
-  [0-9a-f]+ 50000000 70000000 00000000 bcffffff  .*
- Contents of section \.got\.plt:
-- [0-9a-f]+ b0150000 00000000 00000000 00000000  .*
-+ [0-9a-f]+ [a-f]0150000 00000000 00000000 00000000  .*
-  [0-9a-f]+ 20000000 00000000 60000000 00000000  .*
-  [0-9a-f]+ 00000000 00000000 00000000 00000000  .*
-  [0-9a-f]+ 40000000 +.*
---- binutils-2.22/ld/testsuite/ld-i386/tlsgdesc.rd
-+++ binutils-2.22/ld/testsuite/ld-i386/tlsgdesc.rd
-@@ -36,12 +36,14 @@ Program Headers:
-  +LOAD.*
-  +LOAD.*
-  +DYNAMIC.*
-+ +PAX_FLAGS.*
-  Section to Segment mapping:
-  +Segment Sections...
-  +00 +.hash .dynsym .dynstr .rel.dyn .rel.plt .plt .text *
-  +01 +.dynamic .got .got.plt *
-  +02 +.dynamic *
-+ +03 +
- Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 8 entries:
-  Offset +Info +Type +Sym.Value +Sym. Name
---- binutils-2.22/ld/testsuite/ld-i386/tlsnopic.rd
-+++ binutils-2.22/ld/testsuite/ld-i386/tlsnopic.rd
-@@ -37,6 +37,7 @@ Program Headers:
-  +LOAD.*
-  +DYNAMIC.*
-  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+ 0x0+24 R +0x1
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections...
-@@ -44,6 +45,7 @@ Program Headers:
-  +01 +.dynamic .got .got.plt *
-  +02 +.dynamic *
-  +03 +.tbss *
-+ +04 +
- Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 20 entries:
-  Offset +Info +Type +Sym.Value +Sym. Name
---- binutils-2.22/ld/testsuite/ld-i386/tlspic.rd
-+++ binutils-2.22/ld/testsuite/ld-i386/tlspic.rd
-@@ -40,6 +40,7 @@ Program Headers:
-  +LOAD.*
-  +DYNAMIC.*
-  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+80 R +0x1
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections...
-@@ -47,6 +48,7 @@ Program Headers:
-  +01 +.tdata .dynamic .got .got.plt *
-  +02 +.dynamic *
-  +03 +.tdata .tbss *
-+ +04 +
- Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 26 entries:
-  Offset +Info +Type +Sym.Value +Sym. Name
---- binutils-2.22/ld/testsuite/ld-ia64/merge1.d
-+++ binutils-2.22/ld/testsuite/ld-ia64/merge1.d
-@@ -4,7 +4,7 @@
- #objdump: -d
- #...
--0+1e0 <.text>:
-+[a-f0-9]+ <.text>:
- [     ]*[a-f0-9]+:    0b 60 80 02 00 24       \[MMI\]       addl r12=32,r1;;
- [     ]*[a-f0-9]+:    c0 c0 04 00 48 00                   addl r12=24,r1
- [     ]*[a-f0-9]+:    00 00 04 00                         nop.i 0x0;;
---- binutils-2.22/ld/testsuite/ld-ia64/merge2.d
-+++ binutils-2.22/ld/testsuite/ld-ia64/merge2.d
-@@ -4,7 +4,7 @@
- #objdump: -d
- #...
--0+1e0 <.text>:
-+[a-f0-9]+ <.text>:
- [     ]*[a-f0-9]+:    0b 60 80 02 00 24       \[MMI\]       addl r12=32,r1;;
- [     ]*[a-f0-9]+:    c0 c0 04 00 48 00                   addl r12=24,r1
- [     ]*[a-f0-9]+:    00 00 04 00                         nop.i 0x0;;
---- binutils-2.22/ld/testsuite/ld-ia64/merge3.d
-+++ binutils-2.22/ld/testsuite/ld-ia64/merge3.d
-@@ -4,7 +4,7 @@
- #objdump: -d
- #...
--0+210 <.text>:
-+[a-f0-9]+ <.text>:
- [     ]*[a-f0-9]+:    0b 60 80 02 00 24       \[MMI\]       addl r12=32,r1;;
- [     ]*[a-f0-9]+:    c0 40 05 00 48 00                   addl r12=40,r1
- [     ]*[a-f0-9]+:    00 00 04 00                         nop.i 0x0;;
---- binutils-2.22/ld/testsuite/ld-ia64/merge4.d
-+++ binutils-2.22/ld/testsuite/ld-ia64/merge4.d
-@@ -4,7 +4,7 @@
- #objdump: -d
- #...
--0+240 <.text>:
-+[a-f0-9]+ <.text>:
- [     ]*[a-f0-9]+:    0b 60 80 02 00 24       \[MMI\]       addl r12=32,r1;;
- [     ]*[a-f0-9]+:    c0 40 05 00 48 00                   addl r12=40,r1
- [     ]*[a-f0-9]+:    00 00 04 00                         nop.i 0x0;;
---- binutils-2.22/ld/testsuite/ld-ia64/merge5.d
-+++ binutils-2.22/ld/testsuite/ld-ia64/merge5.d
-@@ -4,7 +4,7 @@
- #objdump: -d
- #...
--0+270 <.text>:
-+[a-f0-9]+ <.text>:
- [     ]*[a-f0-9]+:    0b 60 80 02 00 24       \[MMI\]       addl r12=32,r1;;
- [     ]*[a-f0-9]+:    c0 40 05 00 48 00                   addl r12=40,r1
- [     ]*[a-f0-9]+:    00 00 04 00                         nop.i 0x0;;
---- binutils-2.22/ld/testsuite/ld-ia64/tlsbin.rd
-+++ binutils-2.22/ld/testsuite/ld-ia64/tlsbin.rd
-@@ -36,13 +36,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
- Program Headers:
-  +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
-- +PHDR +0x0+40 0x40+40 0x40+40 0x0+188 0x0+188 R E 0x8
-- +INTERP +0x0+1c8 0x40+1c8 0x40+1c8 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x1
-+ +PHDR +0x0+40 0x40+40 0x40+40 (0x[0-9a-f]+) \1 R E 0x8
-+ +INTERP +0x0+([0-9a-f]+) (0x40+\1) \2 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x1
- .*Requesting program interpreter.*
-  +LOAD +0x0+ 0x40+ 0x40+ 0x0+1[0-9a-f]+ 0x0+1[0-9a-f]+ R E 0x10000
-  +LOAD +0x0+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x0+0[0-9a-f]+ 0x0+0[0-9a-f]+ RW +0x10000
-  +DYNAMIC +0x0+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x0+150 0x0+150 RW +0x8
-  +TLS +0x0+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x0+60 0x0+a0 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  +IA_64_UNWIND .* R +0x8
- #...
---- binutils-2.22/ld/testsuite/ld-ia64/tlspic.rd
-+++ binutils-2.22/ld/testsuite/ld-ia64/tlspic.rd
-@@ -40,6 +40,7 @@ Program Headers:
-  +LOAD +0x0+1[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+0[0-9a-f]+ 0x0+0[0-9a-f]+ RW +0x10000
-  +DYNAMIC +0x0+1[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+140 0x0+140 RW +0x8
-  +TLS +0x0+1[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+60 0x0+80 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  +IA_64_UNWIND +0x0+1[0-9a-f]+ 0x0+1[0-9a-f]+ 0x0+1[0-9a-f]+ 0x0+18 0x0+18 R +0x8
- #...
---- binutils-2.22/ld/testsuite/ld-mips-elf/multi-got-no-shared.d
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/multi-got-no-shared.d
-@@ -8,9 +8,9 @@
- .*: +file format.*
- Disassembly of section \.text:
--004000b0 <[^>]*> 3c1c0043     lui     gp,0x43
--004000b4 <[^>]*> 279c9ff0     addiu   gp,gp,-24592
--004000b8 <[^>]*> afbc0008     sw      gp,8\(sp\)
-+004000d0 <[^>]*> 3c1c0043     lui     gp,0x43
-+004000d4 <[^>]*> 279c9ff0     addiu   gp,gp,-24592
-+004000d8 <[^>]*> afbc0008     sw      gp,8\(sp\)
- #...
- 00408d60 <[^>]*> 3c1c0043     lui     gp,0x43
- 00408d64 <[^>]*> 279c2c98     addiu   gp,gp,11416
---- binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.sd
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.sd
-@@ -1,7 +1,7 @@
- Elf file type is DYN \(Shared object file\)
- Entry point .*
--There are 5 program headers, starting at offset .*
-+There are [0-9] program headers, starting at offset .*
- Program Headers:
-  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
-@@ -9,6 +9,7 @@ Program Headers:
-  * LOAD * [^ ]+ * 0x0+00000 * 0x0+00000 [^ ]+ * [^ ]+ * R E * 0x.*
-  * LOAD * [^ ]+ * 0x0+10000 * 0x0+10000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * DYNAMIC * [^ ]+ * 0x0+00400 * 0x0+00400 .*
-+ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  * NULL * .*
-  *Section to Segment mapping:
-@@ -18,3 +19,4 @@ Program Headers:
-  *0*2 * \.data \.got *
-  *0*3 * \.dynamic *
-  *0*4 *
-+ *0*5 *
---- binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.sd
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.sd
-@@ -1,7 +1,7 @@
- Elf file type is EXEC \(Executable file\)
- Entry point 0x44000
--There are 8 program headers, starting at offset .*
-+There are [0-9] program headers, starting at offset .*
- Program Headers:
-  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
-@@ -13,6 +13,7 @@ Program Headers:
-  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
-+ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  * NULL * .*
-  *Section to Segment mapping:
-@@ -25,3 +26,4 @@ Program Headers:
-  *0*5 *\.got \.data *
-  *0*6 *\.dynamic *
-  *0*7 *
-+ *0*8 *
---- binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.sd
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.sd
-@@ -1,7 +1,7 @@
- Elf file type is EXEC \(Executable file\)
- Entry point 0x44000
--There are 8 program headers, starting at offset .*
-+There are [0-9] program headers, starting at offset .*
- Program Headers:
-  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
-@@ -13,6 +13,7 @@ Program Headers:
-  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
-+ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  * NULL * .*
-  *Section to Segment mapping:
-@@ -25,3 +26,4 @@ Program Headers:
-  *0*5 * \.got \.data \.bss *
-  *0*6 * \.dynamic *
-  *0*7 *
-+ *0*8 *
---- binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.sd
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.sd
-@@ -1,7 +1,7 @@
- Elf file type is EXEC \(Executable file\)
- Entry point 0x44000
--There are 8 program headers, starting at offset .*
-+There are [0-9] program headers, starting at offset .*
- Program Headers:
-  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
-@@ -13,6 +13,7 @@ Program Headers:
-  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
-+ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  * NULL * .*
-  *Section to Segment mapping:
-@@ -25,3 +26,4 @@ Program Headers:
-  *0*5 * \.got \.data \.bss *
-  *0*6 * \.dynamic *
-  *0*7 *
-+ *0*8 *
---- binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.sd
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.sd
-@@ -1,7 +1,7 @@
- Elf file type is EXEC \(Executable file\)
- Entry point 0x44000
--There are 8 program headers, starting at offset .*
-+There are [0-9] program headers, starting at offset .*
- Program Headers:
-  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
-@@ -13,6 +13,7 @@ Program Headers:
-  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
-+ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  * NULL * .*
-  *Section to Segment mapping:
-@@ -25,3 +26,4 @@ Program Headers:
-  *0*5 * \.got \.data \.bss *
-  *0*6 * \.dynamic *
-  *0*7 *
-+ *0*8 *
---- binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.sd
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.sd
-@@ -1,7 +1,7 @@
- Elf file type is EXEC \(Executable file\)
- Entry point 0x44000
--There are 7 program headers, starting at offset .*
-+There are [0-9] program headers, starting at offset .*
- Program Headers:
-  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
-@@ -12,6 +12,7 @@ Program Headers:
-  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
-+ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  * NULL * .*
-  *Section to Segment mapping:
-@@ -23,3 +24,4 @@ Program Headers:
-  *0*4 * \.got \.data \.bss *
-  *0*5 * \.dynamic *
-  *0*6 *
-+ *0*7 *
---- binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.sd
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.sd
-@@ -1,7 +1,7 @@
- Elf file type is EXEC \(Executable file\)
- Entry point 0x44000
--There are 8 program headers, starting at offset .*
-+There are [0-9] program headers, starting at offset .*
- Program Headers:
-  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
-@@ -13,6 +13,7 @@ Program Headers:
-  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
-  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
-+ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  * NULL * .*
-  *Section to Segment mapping:
-@@ -25,3 +26,4 @@ Program Headers:
-  *0*5 * \.got \.data \.bss *
-  *0*6 * \.dynamic *
-  *0*7 *
-+ *0*8 *
---- binutils-2.22/ld/testsuite/ld-mips-elf/rel32-n32.d
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/rel32-n32.d
-@@ -10,6 +10,6 @@ Relocation section '.rel.dyn' at offset .* contains 2 entries:
- [0-9a-f ]+R_MIPS_REL32     
- Hex dump of section '.text':
--  0x000002e0 00000000 00000000 00000000 00000000 ................
--  0x000002f0 000002f0 00000000 00000000 00000000 ................
-   0x00000300 00000000 00000000 00000000 00000000 ................
-+  0x00000310 00000310 00000000 00000000 00000000 ................
-+  0x00000320 00000000 00000000 00000000 00000000 ................
---- binutils-2.22/ld/testsuite/ld-mips-elf/rel32-o32.d
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/rel32-o32.d
-@@ -10,6 +10,6 @@ Relocation section '.rel.dyn' at offset .* contains 2 entries:
- [0-9a-f ]+R_MIPS_REL32     
- Hex dump of section '.text':
--  0x000002e0 00000000 00000000 00000000 00000000 ................
--  0x000002f0 000002f0 00000000 00000000 00000000 ................
-   0x00000300 00000000 00000000 00000000 00000000 ................
-+  0x00000310 00000310 00000000 00000000 00000000 ................
-+  0x00000320 00000000 00000000 00000000 00000000 ................
---- binutils-2.22/ld/testsuite/ld-mips-elf/rel64.d
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/rel64.d
-@@ -14,6 +14,6 @@ Relocation section '.rel.dyn' at offset .* contains 2 entries:
-  +Type3: R_MIPS_NONE      
- Hex dump of section '.text':
--  0x00000450 00000000 00000000 00000000 00000000 ................
--  0x00000460 00000000 00000460 00000000 00000000 ................
--  0x00000470 00000000 00000000 00000000 00000000 ................
-+  0x00000490 00000000 00000000 00000000 00000000 ................
-+  0x000004a0 00000000 000004a0 00000000 00000000 ................
-+  0x000004b0 00000000 00000000 00000000 00000000 ................
---- binutils-2.22/ld/testsuite/ld-mips-elf/tlsbin-o32.d
-+++ binutils-2.22/ld/testsuite/ld-mips-elf/tlsbin-o32.d
-@@ -2,42 +2,42 @@
- Disassembly of section .text:
--004000d0 <__start>:
--  4000d0:     3c1c0fc0        lui     gp,0xfc0
--  4000d4:     279c7f30        addiu   gp,gp,32560
--  4000d8:     0399e021        addu    gp,gp,t9
--  4000dc:     27bdfff0        addiu   sp,sp,-16
--  4000e0:     afbe0008        sw      s8,8\(sp\)
--  4000e4:     03a0f021        move    s8,sp
--  4000e8:     afbc0000        sw      gp,0\(sp\)
--  4000ec:     8f998018        lw      t9,-32744\(gp\)
--  4000f0:     27848028        addiu   a0,gp,-32728
--  4000f4:     0320f809        jalr    t9
--  4000f8:     00000000        nop
--  4000fc:     8fdc0000        lw      gp,0\(s8\)
--  400100:     00000000        nop
--  400104:     8f998018        lw      t9,-32744\(gp\)
--  400108:     27848020        addiu   a0,gp,-32736
--  40010c:     0320f809        jalr    t9
--  400110:     00000000        nop
--  400114:     8fdc0000        lw      gp,0\(s8\)
--  400118:     00401021        move    v0,v0
--  40011c:     3c030000        lui     v1,0x0
--  400120:     24638000        addiu   v1,v1,-32768
--  400124:     00621821        addu    v1,v1,v0
--  400128:     7c02283b        rdhwr   v0,\$5
--  40012c:     8f83801c        lw      v1,-32740\(gp\)
--  400130:     00000000        nop
--  400134:     00621821        addu    v1,v1,v0
--  400138:     7c02283b        rdhwr   v0,\$5
--  40013c:     3c030000        lui     v1,0x0
--  400140:     24639004        addiu   v1,v1,-28668
--  400144:     00621821        addu    v1,v1,v0
--  400148:     03c0e821        move    sp,s8
--  40014c:     8fbe0008        lw      s8,8\(sp\)
--  400150:     03e00008        jr      ra
--  400154:     27bd0010        addiu   sp,sp,16
-+00400[0-9a-f]{3} <__start>:
-+  400[0-9a-f]{3}:     3c1c0fc0        lui     gp,0xfc0
-+  400[0-9a-f]{3}:     279c7f30        addiu   gp,gp,32560
-+  400[0-9a-f]{3}:     0399e021        addu    gp,gp,t9
-+  400[0-9a-f]{3}:     27bdfff0        addiu   sp,sp,-16
-+  400[0-9a-f]{3}:     afbe0008        sw      s8,8\(sp\)
-+  400[0-9a-f]{3}:     03a0f021        move    s8,sp
-+  400[0-9a-f]{3}:     afbc0000        sw      gp,0\(sp\)
-+  400[0-9a-f]{3}:     8f998018        lw      t9,-32744\(gp\)
-+  400[0-9a-f]{3}:     27848028        addiu   a0,gp,-32728
-+  400[0-9a-f]{3}:     0320f809        jalr    t9
-+  400[0-9a-f]{3}:     00000000        nop
-+  400[0-9a-f]{3}:     8fdc0000        lw      gp,0\(s8\)
-+  400[0-9a-f]{3}:     00000000        nop
-+  400[0-9a-f]{3}:     8f998018        lw      t9,-32744\(gp\)
-+  400[0-9a-f]{3}:     27848020        addiu   a0,gp,-32736
-+  400[0-9a-f]{3}:     0320f809        jalr    t9
-+  400[0-9a-f]{3}:     00000000        nop
-+  400[0-9a-f]{3}:     8fdc0000        lw      gp,0\(s8\)
-+  400[0-9a-f]{3}:     00401021        move    v0,v0
-+  400[0-9a-f]{3}:     3c030000        lui     v1,0x0
-+  400[0-9a-f]{3}:     24638000        addiu   v1,v1,-32768
-+  400[0-9a-f]{3}:     00621821        addu    v1,v1,v0
-+  400[0-9a-f]{3}:     7c02283b        rdhwr   v0,\$5
-+  400[0-9a-f]{3}:     8f83801c        lw      v1,-32740\(gp\)
-+  400[0-9a-f]{3}:     00000000        nop
-+  400[0-9a-f]{3}:     00621821        addu    v1,v1,v0
-+  400[0-9a-f]{3}:     7c02283b        rdhwr   v0,\$5
-+  400[0-9a-f]{3}:     3c030000        lui     v1,0x0
-+  400[0-9a-f]{3}:     24639004        addiu   v1,v1,-28668
-+  400[0-9a-f]{3}:     00621821        addu    v1,v1,v0
-+  400[0-9a-f]{3}:     03c0e821        move    sp,s8
-+  400[0-9a-f]{3}:     8fbe0008        lw      s8,8\(sp\)
-+  400[0-9a-f]{3}:     03e00008        jr      ra
-+  400[0-9a-f]{3}:     27bd0010        addiu   sp,sp,16
--00400158 <__tls_get_addr>:
--  400158:     03e00008        jr      ra
--  40015c:     00000000        nop
-+00400[0-9a-f]{3} <__tls_get_addr>:
-+  400[0-9a-f]{3}:     03e00008        jr      ra
-+  400[0-9a-f]{3}:     00000000        nop
---- binutils-2.22/ld/testsuite/ld-powerpc/tls.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tls.d
-@@ -9,45 +9,45 @@
- Disassembly of section \.text:
--0+100000e8 <_start>:
--    100000e8: 3c 6d 00 00     addis   r3,r13,0
--    100000ec: 60 00 00 00     nop
--    100000f0: 38 63 90 78     addi    r3,r3,-28552
--    100000f4: 3c 6d 00 00     addis   r3,r13,0
--    100000f8: 60 00 00 00     nop
--    100000fc: 38 63 10 00     addi    r3,r3,4096
--    10000100: 3c 6d 00 00     addis   r3,r13,0
--    10000104: 60 00 00 00     nop
--    10000108: 38 63 90 40     addi    r3,r3,-28608
--    1000010c: 3c 6d 00 00     addis   r3,r13,0
--    10000110: 60 00 00 00     nop
--    10000114: 38 63 10 00     addi    r3,r3,4096
--    10000118: 39 23 80 48     addi    r9,r3,-32696
--    1000011c: 3d 23 00 00     addis   r9,r3,0
--    10000120: 81 49 80 50     lwz     r10,-32688\(r9\)
--    10000124: e9 22 80 10     ld      r9,-32752\(r2\)
--    10000128: 7d 49 18 2a     ldx     r10,r9,r3
--    1000012c: 3d 2d 00 00     addis   r9,r13,0
--    10000130: a1 49 90 60     lhz     r10,-28576\(r9\)
--    10000134: 89 4d 90 68     lbz     r10,-28568\(r13\)
--    10000138: 3d 2d 00 00     addis   r9,r13,0
--    1000013c: 99 49 90 70     stb     r10,-28560\(r9\)
--    10000140: 3c 6d 00 00     addis   r3,r13,0
--    10000144: 60 00 00 00     nop
--    10000148: 38 63 90 00     addi    r3,r3,-28672
--    1000014c: 3c 6d 00 00     addis   r3,r13,0
--    10000150: 60 00 00 00     nop
--    10000154: 38 63 10 00     addi    r3,r3,4096
--    10000158: f9 43 80 08     std     r10,-32760\(r3\)
--    1000015c: 3d 23 00 00     addis   r9,r3,0
--    10000160: 91 49 80 10     stw     r10,-32752\(r9\)
--    10000164: e9 22 80 08     ld      r9,-32760\(r2\)
--    10000168: 7d 49 19 2a     stdx    r10,r9,r3
--    1000016c: 3d 2d 00 00     addis   r9,r13,0
--    10000170: b1 49 90 60     sth     r10,-28576\(r9\)
--    10000174: e9 4d 90 2a     lwa     r10,-28632\(r13\)
--    10000178: 3d 2d 00 00     addis   r9,r13,0
--    1000017c: a9 49 90 30     lha     r10,-28624\(r9\)
-+0+10000[0-9a-f]{3} <_start>:
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 90 78     addi    r3,r3,-28552
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 10 00     addi    r3,r3,4096
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 90 40     addi    r3,r3,-28608
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 10 00     addi    r3,r3,4096
-+    10000[0-9a-f]{3}: 39 23 80 48     addi    r9,r3,-32696
-+    10000[0-9a-f]{3}: 3d 23 00 00     addis   r9,r3,0
-+    10000[0-9a-f]{3}: 81 49 80 50     lwz     r10,-32688\(r9\)
-+    10000[0-9a-f]{3}: e9 22 80 10     ld      r9,-32752\(r2\)
-+    10000[0-9a-f]{3}: 7d 49 18 2a     ldx     r10,r9,r3
-+    10000[0-9a-f]{3}: 3d 2d 00 00     addis   r9,r13,0
-+    10000[0-9a-f]{3}: a1 49 90 60     lhz     r10,-28576\(r9\)
-+    10000[0-9a-f]{3}: 89 4d 90 68     lbz     r10,-28568\(r13\)
-+    10000[0-9a-f]{3}: 3d 2d 00 00     addis   r9,r13,0
-+    10000[0-9a-f]{3}: 99 49 90 70     stb     r10,-28560\(r9\)
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 90 00     addi    r3,r3,-28672
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 10 00     addi    r3,r3,4096
-+    10000[0-9a-f]{3}: f9 43 80 08     std     r10,-32760\(r3\)
-+    10000[0-9a-f]{3}: 3d 23 00 00     addis   r9,r3,0
-+    10000[0-9a-f]{3}: 91 49 80 10     stw     r10,-32752\(r9\)
-+    10000[0-9a-f]{3}: e9 22 80 08     ld      r9,-32760\(r2\)
-+    10000[0-9a-f]{3}: 7d 49 19 2a     stdx    r10,r9,r3
-+    10000[0-9a-f]{3}: 3d 2d 00 00     addis   r9,r13,0
-+    10000[0-9a-f]{3}: b1 49 90 60     sth     r10,-28576\(r9\)
-+    10000[0-9a-f]{3}: e9 4d 90 2a     lwa     r10,-28632\(r13\)
-+    10000[0-9a-f]{3}: 3d 2d 00 00     addis   r9,r13,0
-+    10000[0-9a-f]{3}: a9 49 90 30     lha     r10,-28624\(r9\)
--0+10000180 <\.__tls_get_addr>:
--    10000180: 4e 80 00 20     blr
-+0+10000[0-9a-f]{3} <\.__tls_get_addr>:
-+    10000[0-9a-f]{3}: 4e 80 00 20     blr
---- binutils-2.22/ld/testsuite/ld-powerpc/tls.g
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tls.g
-@@ -8,5 +8,5 @@
- .*: +file format elf64-powerpc
- Contents of section \.got:
-- 100101e0 00000000 100181e0 ffffffff ffff8018  .*
-- 100101f0 ffffffff ffff8058                    .*
-+ 10010([0-9a-f]{3}) 00000000 10018\1 ffffffff ffff8018  .*
-+ 10010[0-9a-f]{3} ffffffff ffff8058                    .*
---- binutils-2.22/ld/testsuite/ld-powerpc/tls32.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tls32.d
-@@ -9,42 +9,42 @@
- Disassembly of section \.text:
--0+1800094 <_start>:
-- 1800094:     3c 62 00 00     addis   r3,r2,0
-- 1800098:     38 63 90 3c     addi    r3,r3,-28612
-- 180009c:     3c 62 00 00     addis   r3,r2,0
-- 18000a0:     38 63 10 00     addi    r3,r3,4096
-- 18000a4:     3c 62 00 00     addis   r3,r2,0
-- 18000a8:     38 63 90 20     addi    r3,r3,-28640
-- 18000ac:     3c 62 00 00     addis   r3,r2,0
-- 18000b0:     38 63 10 00     addi    r3,r3,4096
-- 18000b4:     39 23 80 24     addi    r9,r3,-32732
-- 18000b8:     3d 23 00 00     addis   r9,r3,0
-- 18000bc:     81 49 80 28     lwz     r10,-32728\(r9\)
-- 18000c0:     3d 22 00 00     addis   r9,r2,0
-- 18000c4:     a1 49 90 30     lhz     r10,-28624\(r9\)
-- 18000c8:     89 42 90 34     lbz     r10,-28620\(r2\)
-- 18000cc:     3d 22 00 00     addis   r9,r2,0
-- 18000d0:     99 49 90 38     stb     r10,-28616\(r9\)
-- 18000d4:     3c 62 00 00     addis   r3,r2,0
-- 18000d8:     38 63 90 00     addi    r3,r3,-28672
-- 18000dc:     3c 62 00 00     addis   r3,r2,0
-- 18000e0:     38 63 10 00     addi    r3,r3,4096
-- 18000e4:     91 43 80 04     stw     r10,-32764\(r3\)
-- 18000e8:     3d 23 00 00     addis   r9,r3,0
-- 18000ec:     91 49 80 08     stw     r10,-32760\(r9\)
-- 18000f0:     3d 22 00 00     addis   r9,r2,0
-- 18000f4:     b1 49 90 30     sth     r10,-28624\(r9\)
-- 18000f8:     a1 42 90 14     lhz     r10,-28652\(r2\)
-- 18000fc:     3d 22 00 00     addis   r9,r2,0
-- 1800100:     a9 49 90 18     lha     r10,-28648\(r9\)
-+0+1800[0-9a-f]{3} <_start>:
-+ 1800[0-9a-f]{3}:     3c 62 00 00     addis   r3,r2,0
-+ 1800[0-9a-f]{3}:     38 63 90 3c     addi    r3,r3,-28612
-+ 1800[0-9a-f]{3}:     3c 62 00 00     addis   r3,r2,0
-+ 1800[0-9a-f]{3}:     38 63 10 00     addi    r3,r3,4096
-+ 1800[0-9a-f]{3}:     3c 62 00 00     addis   r3,r2,0
-+ 1800[0-9a-f]{3}:     38 63 90 20     addi    r3,r3,-28640
-+ 1800[0-9a-f]{3}:     3c 62 00 00     addis   r3,r2,0
-+ 1800[0-9a-f]{3}:     38 63 10 00     addi    r3,r3,4096
-+ 1800[0-9a-f]{3}:     39 23 80 24     addi    r9,r3,-32732
-+ 1800[0-9a-f]{3}:     3d 23 00 00     addis   r9,r3,0
-+ 1800[0-9a-f]{3}:     81 49 80 28     lwz     r10,-32728\(r9\)
-+ 1800[0-9a-f]{3}:     3d 22 00 00     addis   r9,r2,0
-+ 1800[0-9a-f]{3}:     a1 49 90 30     lhz     r10,-28624\(r9\)
-+ 1800[0-9a-f]{3}:     89 42 90 34     lbz     r10,-28620\(r2\)
-+ 1800[0-9a-f]{3}:     3d 22 00 00     addis   r9,r2,0
-+ 1800[0-9a-f]{3}:     99 49 90 38     stb     r10,-28616\(r9\)
-+ 1800[0-9a-f]{3}:     3c 62 00 00     addis   r3,r2,0
-+ 1800[0-9a-f]{3}:     38 63 90 00     addi    r3,r3,-28672
-+ 1800[0-9a-f]{3}:     3c 62 00 00     addis   r3,r2,0
-+ 1800[0-9a-f]{3}:     38 63 10 00     addi    r3,r3,4096
-+ 1800[0-9a-f]{3}:     91 43 80 04     stw     r10,-32764\(r3\)
-+ 1800[0-9a-f]{3}:     3d 23 00 00     addis   r9,r3,0
-+ 1800[0-9a-f]{3}:     91 49 80 08     stw     r10,-32760\(r9\)
-+ 1800[0-9a-f]{3}:     3d 22 00 00     addis   r9,r2,0
-+ 1800[0-9a-f]{3}:     b1 49 90 30     sth     r10,-28624\(r9\)
-+ 1800[0-9a-f]{3}:     a1 42 90 14     lhz     r10,-28652\(r2\)
-+ 1800[0-9a-f]{3}:     3d 22 00 00     addis   r9,r2,0
-+ 1800[0-9a-f]{3}:     a9 49 90 18     lha     r10,-28648\(r9\)
--0+1800104 <__tls_get_addr>:
-- 1800104:     4e 80 00 20     blr
-+0+1800[0-9a-f]{3} <__tls_get_addr>:
-+ 1800[0-9a-f]{3}:     4e 80 00 20     blr
- Disassembly of section \.got:
--0+1810128 <_GLOBAL_OFFSET_TABLE_-0x4>:
-- 1810128:     4e 80 00 21     blrl
-+0+1810[0-9a-f]{3} <_GLOBAL_OFFSET_TABLE_-0x4>:
-+ 1810[0-9a-f]{3}:     4e 80 00 21     blrl
--0+181012c <_GLOBAL_OFFSET_TABLE_>:
-+0+1810[0-9a-f]{3} <_GLOBAL_OFFSET_TABLE_>:
-       \.\.\.
---- binutils-2.22/ld/testsuite/ld-powerpc/tls32.g
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tls32.g
-@@ -8,4 +8,4 @@
- .*: +file format elf32-powerpc
- Contents of section \.got:
-- 1810128 4e800021 00000000 00000000 00000000  .*
-+ 18101[0-9a-f]{2} 4e800021 00000000 00000000 00000000  .*
---- binutils-2.22/ld/testsuite/ld-powerpc/tls32.t
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tls32.t
-@@ -8,5 +8,5 @@
- .*: +file format elf32-powerpc
- Contents of section \.tdata:
-- 1810108 12345678 23456789 3456789a 456789ab  .*
-- 1810118 56789abc 6789abcd 789abcde 00c0ffee  .*
-+ 18101[0-9a-f]{2} 12345678 23456789 3456789a 456789ab  .*
-+ 18101[0-9a-f]{2} 56789abc 6789abcd 789abcde 00c0ffee  .*
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsexe32.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsexe32.d
-@@ -44,4 +44,4 @@ Disassembly of section \.got:
- .*:   4e 80 00 21     blrl
- .* <_GLOBAL_OFFSET_TABLE_>:
--.*:   01 81 02 b8 00 00 00 00 00 00 00 00  .*
-+.*:   01 81 02 [bd]8 00 00 00 00 00 00 00 00  .*
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsexe32.g
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsexe32.g
-@@ -8,4 +8,4 @@
- Contents of section \.got:
- .* 00000000 00000000 00000000 4e800021  .*
--.* 018102b8 00000000 00000000           .*
-+.* 018102[bd]8 00000000 00000000           .*
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsexe32.r
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsexe32.r
-@@ -33,13 +33,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
- Program Headers:
-  +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
-- +PHDR +0x000034 0x01800034 0x01800034 0x000c0 0x000c0 R E 0x4
-- +INTERP +0x0000f4 0x018000f4 0x018000f4 0x00011 0x00011 R +0x1
-+ +PHDR +0x000034 0x01800034 0x01800034 (0x000[0-9a-f]{2}) \1 R E 0x4
-+ +INTERP +0x000([0-9a-f]{3}) 0x01800\1 0x01800\1 0x00011 0x00011 R +0x1
-  +\[Requesting program interpreter: .*\]
-  +LOAD .* R E 0x10000
-  +LOAD .* RWE 0x10000
-  +DYNAMIC .* RW +0x4
-  +TLS .* 0x0001c 0x00038 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections\.\.\.
-@@ -49,6 +50,7 @@ Program Headers:
-  +03 +\.tdata \.dynamic \.got \.plt 
-  +04 +\.dynamic 
-  +05 +\.tdata \.tbss 
-+ +06 +
- Relocation section '\.rela\.dyn' at offset .* contains 2 entries:
-  Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsmark.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsmark.d
-@@ -9,29 +9,29 @@
- Disassembly of section \.text:
--0+100000e8 <_start>:
--    100000e8: 48 00 00 18     b       10000100 <_start\+0x18>
--    100000ec: 60 00 00 00     nop
--    100000f0: 38 63 90 00     addi    r3,r3,-28672
--    100000f4: e8 83 00 00     ld      r4,0\(r3\)
--    100000f8: 3c 6d 00 00     addis   r3,r13,0
--    100000fc: 48 00 00 0c     b       10000108 <_start\+0x20>
--    10000100: 3c 6d 00 00     addis   r3,r13,0
--    10000104: 4b ff ff e8     b       100000ec <_start\+0x4>
--    10000108: 60 00 00 00     nop
--    1000010c: 38 63 10 00     addi    r3,r3,4096
--    10000110: e8 83 80 00     ld      r4,-32768\(r3\)
--    10000114: 3c 6d 00 00     addis   r3,r13,0
--    10000118: 48 00 00 0c     b       10000124 <_start\+0x3c>
--    1000011c: 3c 6d 00 00     addis   r3,r13,0
--    10000120: 48 00 00 14     b       10000134 <_start\+0x4c>
--    10000124: 60 00 00 00     nop
--    10000128: 38 63 90 04     addi    r3,r3,-28668
--    1000012c: e8 a3 00 00     ld      r5,0\(r3\)
--    10000130: 4b ff ff ec     b       1000011c <_start\+0x34>
--    10000134: 60 00 00 00     nop
--    10000138: 38 63 10 00     addi    r3,r3,4096
--    1000013c: e8 a3 80 04     ld      r5,-32764\(r3\)
-+0+10000[0-9a-f]{3} <_start>:
-+    10000[0-9a-f]{3}: 48 00 00 18     b       10000[0-9a-f]{3} <_start\+0x18>
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 90 00     addi    r3,r3,-28672
-+    10000[0-9a-f]{3}: e8 83 00 00     ld      r4,0\(r3\)
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 48 00 00 0c     b       10000[0-9a-f]{3} <_start\+0x20>
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 4b ff ff e8     b       10000[0-9a-f]{3} <_start\+0x4>
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 10 00     addi    r3,r3,4096
-+    10000[0-9a-f]{3}: e8 83 80 00     ld      r4,-32768\(r3\)
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 48 00 00 0c     b       10000[0-9a-f]{3} <_start\+0x3c>
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 48 00 00 14     b       10000[0-9a-f]{3} <_start\+0x4c>
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 90 04     addi    r3,r3,-28668
-+    10000[0-9a-f]{3}: e8 a3 00 00     ld      r5,0\(r3\)
-+    10000[0-9a-f]{3}: 4b ff ff ec     b       10000[0-9a-f]{3} <_start\+0x34>
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 10 00     addi    r3,r3,4096
-+    10000[0-9a-f]{3}: e8 a3 80 04     ld      r5,-32764\(r3\)
--0+10000140 <\.__tls_get_addr>:
--    10000140: 4e 80 00 20     blr
-+0+10000[0-9a-f]{3} <\.__tls_get_addr>:
-+    10000[0-9a-f]{3}: 4e 80 00 20     blr
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsmark32.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsmark32.d
-@@ -9,17 +9,17 @@
- Disassembly of section \.text:
--0+1800094 <_start>:
-- 1800094:     48 00 00 14     b       18000a8 <_start\+0x14>
-- 1800098:     38 63 90 00     addi    r3,r3,-28672
-- 180009c:     80 83 00 00     lwz     r4,0\(r3\)
-- 18000a0:     3c 62 00 00     addis   r3,r2,0
-- 18000a4:     48 00 00 0c     b       18000b0 <_start\+0x1c>
-- 18000a8:     3c 62 00 00     addis   r3,r2,0
-- 18000ac:     4b ff ff ec     b       1800098 <_start\+0x4>
-- 18000b0:     38 63 10 00     addi    r3,r3,4096
-- 18000b4:     80 83 80 00     lwz     r4,-32768\(r3\)
-+0+18000[0-9a-f]{2} <_start>:
-+ 18000[0-9a-f]{2}:    48 00 00 14     b       18000[0-9a-f]{2} <_start\+0x14>
-+ 18000[0-9a-f]{2}:    38 63 90 00     addi    r3,r3,-28672
-+ 18000[0-9a-f]{2}:    80 83 00 00     lwz     r4,0\(r3\)
-+ 18000[0-9a-f]{2}:    3c 62 00 00     addis   r3,r2,0
-+ 18000[0-9a-f]{2}:    48 00 00 0c     b       18000[0-9a-f]{2} <_start\+0x1c>
-+ 18000[0-9a-f]{2}:    3c 62 00 00     addis   r3,r2,0
-+ 18000[0-9a-f]{2}:    4b ff ff ec     b       18000[0-9a-f]{2} <_start\+0x4>
-+ 18000[0-9a-f]{2}:    38 63 10 00     addi    r3,r3,4096
-+ 18000[0-9a-f]{2}:    80 83 80 00     lwz     r4,-32768\(r3\)
--0+18000b8 <__tls_get_addr>:
-- 18000b8:     4e 80 00 20     blr
--#pass
-\ No newline at end of file
-+0+18000[0-9a-f]{2} <__tls_get_addr>:
-+ 18000[0-9a-f]{2}:    4e 80 00 20     blr
-+#pass
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsopt1.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsopt1.d
-@@ -9,17 +9,17 @@
- Disassembly of section \.text:
--0+100000e8 <\.__tls_get_addr>:
--    100000e8: 4e 80 00 20     blr
-+0+10000[0-9a-f]{3} <\.__tls_get_addr>:
-+    10000[0-9a-f]{3}: 4e 80 00 20     blr
- Disassembly of section \.no_opt1:
--0+100000ec <\.no_opt1>:
--    100000ec: 38 62 80 08     addi    r3,r2,-32760
--    100000f0: 2c 24 00 00     cmpdi   r4,0
--    100000f4: 41 82 00 10     beq-    .*
--    100000f8: 4b ff ff f1     bl      100000e8 <\.__tls_get_addr>
--    100000fc: 60 00 00 00     nop
--    10000100: 48 00 00 0c     b       .*
--    10000104: 4b ff ff e5     bl      100000e8 <\.__tls_get_addr>
--    10000108: 60 00 00 00     nop
-+0+10000[0-9a-f]{3} <\.no_opt1>:
-+    10000[0-9a-f]{3}: 38 62 80 08     addi    r3,r2,-32760
-+    10000[0-9a-f]{3}: 2c 24 00 00     cmpdi   r4,0
-+    10000[0-9a-f]{3}: 41 82 00 10     beq-    .*
-+    10000[0-9a-f]{3}: 4b ff ff f1     bl      10000[0-9a-f]{3} <\.__tls_get_addr>
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 48 00 00 0c     b       .*
-+    10000[0-9a-f]{3}: 4b ff ff e5     bl      10000[0-9a-f]{3} <\.__tls_get_addr>
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsopt1_32.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsopt1_32.d
-@@ -9,16 +9,16 @@
- Disassembly of section \.text:
--0+1800094 <__tls_get_addr>:
-- 1800094:     4e 80 00 20     blr
-+0+18000[0-9a-f]{2} <__tls_get_addr>:
-+ 18000[0-9a-f]{2}:    4e 80 00 20     blr
- Disassembly of section \.no_opt1:
--0+1800098 <\.no_opt1>:
-- 1800098:     38 6d ff f4     addi    r3,r13,-12
-- 180009c:     2c 04 00 00     cmpwi   r4,0
-- 18000a0:     41 82 00 0c     beq-    .*
-- 18000a4:     4b ff ff f1     bl      1800094 <__tls_get_addr>
-- 18000a8:     48 00 00 08     b       .*
-- 18000ac:     4b ff ff e9     bl      1800094 <__tls_get_addr>
-+0+18000[0-9a-f]{2} <\.no_opt1>:
-+ 18000[0-9a-f]{2}:    38 6d ff f4     addi    r3,r13,-12
-+ 18000[0-9a-f]{2}:    2c 04 00 00     cmpwi   r4,0
-+ 18000[0-9a-f]{2}:    41 82 00 0c     beq-    .*
-+ 18000[0-9a-f]{2}:    4b ff ff f1     bl      18000[0-9a-f]{2} <__tls_get_addr>
-+ 18000[0-9a-f]{2}:    48 00 00 08     b       .*
-+ 18000[0-9a-f]{2}:    4b ff ff e9     bl      18000[0-9a-f]{2} <__tls_get_addr>
- #pass
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsopt2.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsopt2.d
-@@ -9,15 +9,15 @@
- Disassembly of section \.text:
--0+100000e8 <\.__tls_get_addr>:
--    100000e8: 4e 80 00 20     blr
-+0+10000[0-9a-f]{3} <\.__tls_get_addr>:
-+    10000[0-9a-f]{3}: 4e 80 00 20     blr
- Disassembly of section \.no_opt2:
--0+100000ec <\.no_opt2>:
--    100000ec: 38 62 80 08     addi    r3,r2,-32760
--    100000f0: 2c 24 00 00     cmpdi   r4,0
--    100000f4: 41 82 00 08     beq-    .*
--    100000f8: 38 62 80 08     addi    r3,r2,-32760
--    100000fc: 4b ff ff ed     bl      100000e8 <\.__tls_get_addr>
--    10000100: 60 00 00 00     nop
-+0+10000[0-9a-f]{3} <\.no_opt2>:
-+    10000[0-9a-f]{3}: 38 62 80 08     addi    r3,r2,-32760
-+    10000[0-9a-f]{3}: 2c 24 00 00     cmpdi   r4,0
-+    10000[0-9a-f]{3}: 41 82 00 08     beq-    .*
-+    10000[0-9a-f]{3}: 38 62 80 08     addi    r3,r2,-32760
-+    10000[0-9a-f]{3}: 4b ff ff ed     bl      10000[0-9a-f]{3} <\.__tls_get_addr>
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsopt2_32.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsopt2_32.d
-@@ -9,15 +9,15 @@
- Disassembly of section \.text:
--0+1800094 <__tls_get_addr>:
-- 1800094:     4e 80 00 20     blr
-+0+18000[0-9a-f]{2} <__tls_get_addr>:
-+ 18000[0-9a-f]{2}:    4e 80 00 20     blr
- Disassembly of section \.no_opt2:
--0+1800098 <\.no_opt2>:
-- 1800098:     38 6d ff f4     addi    r3,r13,-12
-- 180009c:     2c 04 00 00     cmpwi   r4,0
-- 18000a0:     41 82 00 08     beq-    .*
-- 18000a4:     38 6d ff f4     addi    r3,r13,-12
-- 18000a8:     4b ff ff ed     bl      1800094 <__tls_get_addr>
-+0+18000[0-9a-f]{2} <\.no_opt2>:
-+ 18000[0-9a-f]{2}:    38 6d ff f4     addi    r3,r13,-12
-+ 18000[0-9a-f]{2}:    2c 04 00 00     cmpwi   r4,0
-+ 18000[0-9a-f]{2}:    41 82 00 08     beq-    .*
-+ 18000[0-9a-f]{2}:    38 6d ff f4     addi    r3,r13,-12
-+ 18000[0-9a-f]{2}:    4b ff ff ed     bl      18000[0-9a-f]{2} <__tls_get_addr>
- #pass
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsopt3.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsopt3.d
-@@ -9,18 +9,18 @@
- Disassembly of section \.text:
--00000000100000e8 <\.__tls_get_addr>:
--    100000e8: 4e 80 00 20     blr
-+0000000010000[0-9a-f]{3} <\.__tls_get_addr>:
-+    10000[0-9a-f]{3}: 4e 80 00 20     blr
- Disassembly of section \.no_opt3:
--00000000100000ec <\.no_opt3>:
--    100000ec: 38 62 80 08     addi    r3,r2,-32760
--    100000f0: 48 00 00 0c     b       .*
--    100000f4: 38 62 80 18     addi    r3,r2,-32744
--    100000f8: 48 00 00 10     b       .*
--    100000fc: 4b ff ff ed     bl      100000e8 <\.__tls_get_addr>
--    10000100: 60 00 00 00     nop
--    10000104: 48 00 00 0c     b       .*
--    10000108: 4b ff ff e1     bl      100000e8 <\.__tls_get_addr>
--    1000010c: 60 00 00 00     nop
-+0000000010000[0-9a-f]{3} <\.no_opt3>:
-+    10000[0-9a-f]{3}: 38 62 80 08     addi    r3,r2,-32760
-+    10000[0-9a-f]{3}: 48 00 00 0c     b       .*
-+    10000[0-9a-f]{3}: 38 62 80 18     addi    r3,r2,-32744
-+    10000[0-9a-f]{3}: 48 00 00 10     b       .*
-+    10000[0-9a-f]{3}: 4b ff ff ed     bl      10000[0-9a-f]{3} <\.__tls_get_addr>
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 48 00 00 0c     b       .*
-+    10000[0-9a-f]{3}: 4b ff ff e1     bl      10000[0-9a-f]{3} <\.__tls_get_addr>
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsopt3_32.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsopt3_32.d
-@@ -9,17 +9,17 @@
- Disassembly of section \.text:
--0+1800094 <__tls_get_addr>:
-- 1800094:     4e 80 00 20     blr
-+0+18000[0-9a-f]{2} <__tls_get_addr>:
-+ 18000[0-9a-f]{2}:    4e 80 00 20     blr
- Disassembly of section \.no_opt3:
--0+1800098 <\.no_opt3>:
-- 1800098:     38 6d ff ec     addi    r3,r13,-20
-- 180009c:     48 00 00 0c     b       .*
-- 18000a0:     38 6d ff f4     addi    r3,r13,-12
-- 18000a4:     48 00 00 0c     b       .*
-- 18000a8:     4b ff ff ed     bl      1800094 <__tls_get_addr>
-- 18000ac:     48 00 00 08     b       .*
-- 18000b0:     4b ff ff e5     bl      1800094 <__tls_get_addr>
-+0+18000[0-9a-f]{2} <\.no_opt3>:
-+ 18000[0-9a-f]{2}:    38 6d ff ec     addi    r3,r13,-20
-+ 18000[0-9a-f]{2}:    48 00 00 0c     b       .*
-+ 18000[0-9a-f]{2}:    38 6d ff f4     addi    r3,r13,-12
-+ 18000[0-9a-f]{2}:    48 00 00 0c     b       .*
-+ 18000[0-9a-f]{2}:    4b ff ff ed     bl      18000[0-9a-f]{2} <__tls_get_addr>
-+ 18000[0-9a-f]{2}:    48 00 00 08     b       .*
-+ 18000[0-9a-f]{2}:    4b ff ff e5     bl      18000[0-9a-f]{2} <__tls_get_addr>
- #pass
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsopt4.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsopt4.d
-@@ -9,40 +9,40 @@
- Disassembly of section \.text:
--0+100000e8 <\.__tls_get_addr>:
--    100000e8: 4e 80 00 20     blr
-+0+10000[0-9a-f]{3} <\.__tls_get_addr>:
-+    10000[0-9a-f]{3}: 4e 80 00 20     blr
- Disassembly of section \.opt1:
--0+100000ec <\.opt1>:
--    100000ec: 3c 6d 00 00     addis   r3,r13,0
--    100000f0: 2c 24 00 00     cmpdi   r4,0
--    100000f4: 41 82 00 10     beq-    .*
--    100000f8: 60 00 00 00     nop
--    100000fc: 38 63 90 10     addi    r3,r3,-28656
--    10000100: 48 00 00 0c     b       .*
--    10000104: 60 00 00 00     nop
--    10000108: 38 63 90 10     addi    r3,r3,-28656
-+0+10000[0-9a-f]{3} <\.opt1>:
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 2c 24 00 00     cmpdi   r4,0
-+    10000[0-9a-f]{3}: 41 82 00 10     beq-    .*
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 90 10     addi    r3,r3,-28656
-+    10000[0-9a-f]{3}: 48 00 00 0c     b       .*
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 90 10     addi    r3,r3,-28656
- Disassembly of section \.opt2:
--0+1000010c <\.opt2>:
--    1000010c: 3c 6d 00 00     addis   r3,r13,0
--    10000110: 2c 24 00 00     cmpdi   r4,0
--    10000114: 41 82 00 08     beq-    .*
--    10000118: 3c 6d 00 00     addis   r3,r13,0
--    1000011c: 60 00 00 00     nop
--    10000120: 38 63 90 10     addi    r3,r3,-28656
-+0+10000[0-9a-f]{3} <\.opt2>:
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 2c 24 00 00     cmpdi   r4,0
-+    10000[0-9a-f]{3}: 41 82 00 08     beq-    .*
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 90 10     addi    r3,r3,-28656
- Disassembly of section \.opt3:
--0+10000124 <\.opt3>:
--    10000124: 3c 6d 00 00     addis   r3,r13,0
--    10000128: 48 00 00 0c     b       .*
--    1000012c: 3c 6d 00 00     addis   r3,r13,0
--    10000130: 48 00 00 10     b       .*
--    10000134: 60 00 00 00     nop
--    10000138: 38 63 90 10     addi    r3,r3,-28656
--    1000013c: 48 00 00 0c     b       .*
--    10000140: 60 00 00 00     nop
--    10000144: 38 63 90 08     addi    r3,r3,-28664
-+0+10000[0-9a-f]{3} <\.opt3>:
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 48 00 00 0c     b       .*
-+    10000[0-9a-f]{3}: 3c 6d 00 00     addis   r3,r13,0
-+    10000[0-9a-f]{3}: 48 00 00 10     b       .*
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 90 10     addi    r3,r3,-28656
-+    10000[0-9a-f]{3}: 48 00 00 0c     b       .*
-+    10000[0-9a-f]{3}: 60 00 00 00     nop
-+    10000[0-9a-f]{3}: 38 63 90 08     addi    r3,r3,-28664
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsopt4_32.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsopt4_32.d
-@@ -9,36 +9,36 @@
- Disassembly of section \.text:
--0+1800094 <__tls_get_addr>:
-- 1800094:     4e 80 00 20     blr
-+0+18000[0-9a-f]{2} <__tls_get_addr>:
-+ 18000[0-9a-f]{2}:    4e 80 00 20     blr
- Disassembly of section \.opt1:
--0+1800098 <\.opt1>:
-- 1800098:     3c 62 00 00     addis   r3,r2,0
-- 180009c:     2c 04 00 00     cmpwi   r4,0
-- 18000a0:     41 82 00 0c     beq-    .*
-- 18000a4:     38 63 90 10     addi    r3,r3,-28656
-- 18000a8:     48 00 00 08     b       .*
-- 18000ac:     38 63 90 10     addi    r3,r3,-28656
-+0+18000[0-9a-f]{2} <\.opt1>:
-+ 18000[0-9a-f]{2}:    3c 62 00 00     addis   r3,r2,0
-+ 18000[0-9a-f]{2}:    2c 04 00 00     cmpwi   r4,0
-+ 18000[0-9a-f]{2}:    41 82 00 0c     beq-    .*
-+ 18000[0-9a-f]{2}:    38 63 90 10     addi    r3,r3,-28656
-+ 18000[0-9a-f]{2}:    48 00 00 08     b       .*
-+ 18000[0-9a-f]{2}:    38 63 90 10     addi    r3,r3,-28656
- Disassembly of section \.opt2:
--0+18000b0 <\.opt2>:
-- 18000b0:     3c 62 00 00     addis   r3,r2,0
-- 18000b4:     2c 04 00 00     cmpwi   r4,0
-- 18000b8:     41 82 00 08     beq-    .*
-- 18000bc:     3c 62 00 00     addis   r3,r2,0
-- 18000c0:     38 63 90 10     addi    r3,r3,-28656
-+0+18000[0-9a-f]{2} <\.opt2>:
-+ 18000[0-9a-f]{2}:    3c 62 00 00     addis   r3,r2,0
-+ 18000[0-9a-f]{2}:    2c 04 00 00     cmpwi   r4,0
-+ 18000[0-9a-f]{2}:    41 82 00 08     beq-    .*
-+ 18000[0-9a-f]{2}:    3c 62 00 00     addis   r3,r2,0
-+ 18000[0-9a-f]{2}:    38 63 90 10     addi    r3,r3,-28656
- Disassembly of section \.opt3:
--0+18000c4 <\.opt3>:
-- 18000c4:     3c 62 00 00     addis   r3,r2,0
-- 18000c8:     48 00 00 0c     b       .*
-- 18000cc:     3c 62 00 00     addis   r3,r2,0
-- 18000d0:     48 00 00 0c     b       .*
-- 18000d4:     38 63 90 10     addi    r3,r3,-28656
-- 18000d8:     48 00 00 08     b       .*
-- 18000dc:     38 63 90 08     addi    r3,r3,-28664
-+0+18000[0-9a-f]{2} <\.opt3>:
-+ 18000[0-9a-f]{2}:    3c 62 00 00     addis   r3,r2,0
-+ 18000[0-9a-f]{2}:    48 00 00 0c     b       .*
-+ 18000[0-9a-f]{2}:    3c 62 00 00     addis   r3,r2,0
-+ 18000[0-9a-f]{2}:    48 00 00 0c     b       .*
-+ 18000[0-9a-f]{2}:    38 63 90 10     addi    r3,r3,-28656
-+ 18000[0-9a-f]{2}:    48 00 00 08     b       .*
-+ 18000[0-9a-f]{2}:    38 63 90 08     addi    r3,r3,-28664
- #pass
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsso32.d
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsso32.d
-@@ -42,5 +42,5 @@ Disassembly of section \.got:
- .* <\.got>:
-       \.\.\.
- .*:   4e 80 00 21     blrl
--.*:   00 01 03 ec     .*
-+.*:   00 01 [0-9a-f]{2} [0-9a-f]{2}   .*
-       \.\.\.
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsso32.g
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsso32.g
-@@ -9,5 +9,5 @@
- Contents of section \.got:
- .* 00000000 00000000 00000000 00000000  .*
- .* 00000000 00000000 00000000 00000000  .*
--.* 00000000 4e800021 000103ec 00000000  .*
-+.* 00000000 4e800021 00010[0-9a-f]{3} 00000000  .*
- .* 00000000                             .*
---- binutils-2.22/ld/testsuite/ld-powerpc/tlsso32.r
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlsso32.r
-@@ -35,6 +35,7 @@ Program Headers:
-  +LOAD .* RWE 0x10000
-  +DYNAMIC .* RW +0x4
-  +TLS .* 0x0+1c 0x0+38 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections\.\.\.
-@@ -42,6 +43,7 @@ Program Headers:
-  +01 +\.tdata \.dynamic \.got \.plt 
-  +02 +\.dynamic 
-  +03 +\.tdata \.tbss 
-+ +04 +
- Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 18 entries:
-  Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
-@@ -52,9 +54,9 @@ Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 18 entries:
- [0-9a-f ]+R_PPC_TPREL16 +0+30 +le0 \+ 0
- [0-9a-f ]+R_PPC_TPREL16_HA +0+34 +le1 \+ 0
- [0-9a-f ]+R_PPC_TPREL16_LO +0+34 +le1 \+ 0
--[0-9a-f ]+R_PPC_TPREL16 +0+103d0 +\.tdata \+ 103e4
--[0-9a-f ]+R_PPC_TPREL16_HA +0+103d0 +\.tdata \+ 103e8
--[0-9a-f ]+R_PPC_TPREL16_LO +0+103d0 +\.tdata \+ 103e8
-+[0-9a-f ]+R_PPC_TPREL16 +0+103[df]0 +\.tdata \+ 10[0-9a-f]{3}
-+[0-9a-f ]+R_PPC_TPREL16_HA +0+103[df]0 +\.tdata \+ 10[0-9a-f]{3}
-+[0-9a-f ]+R_PPC_TPREL16_LO +0+103[df]0 +\.tdata \+ 10[0-9a-f]{3}
- [0-9a-f ]+R_PPC_DTPMOD32 +0+
- [0-9a-f ]+R_PPC_DTPREL32 +0+
- [0-9a-f ]+R_PPC_DTPMOD32 +0+
---- binutils-2.22/ld/testsuite/ld-powerpc/tlstoc.g
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlstoc.g
-@@ -8,8 +8,8 @@
- .*: +file format elf64-powerpc
- Contents of section \.got:
-- 100101a0 00000000 00000001 00000000 00000000  .*
-- 100101b0 00000000 00000001 00000000 00000000  .*
-- 100101c0 00000000 00000001 00000000 00000000  .*
-- 100101d0 00000000 00000001 00000000 00000000  .*
-- 100101e0 ffffffff ffff8060 00000000 00000000  .*
-+ 10010[0-9a-f]{3} 00000000 00000001 00000000 00000000  .*
-+ 10010[0-9a-f]{3} 00000000 00000001 00000000 00000000  .*
-+ 10010[0-9a-f]{3} 00000000 00000001 00000000 00000000  .*
-+ 10010[0-9a-f]{3} 00000000 00000001 00000000 00000000  .*
-+ 10010[0-9a-f]{3} ffffffff ffff8060 00000000 00000000  .*
---- binutils-2.22/ld/testsuite/ld-powerpc/tlstoc.t
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlstoc.t
-@@ -8,7 +8,7 @@
- .*: +file format elf64-powerpc
- Contents of section \.tdata:
-- 10010148 00c0ffee 00000000 12345678 9abcdef0  .*
-- 10010158 23456789 abcdef01 3456789a bcdef012  .*
-- 10010168 456789ab cdef0123 56789abc def01234  .*
-- 10010178 6789abcd ef012345 789abcde f0123456  .*
-+ 10010180 00c0ffee 00000000 12345678 9abcdef0  .*
-+ 10010190 23456789 abcdef01 3456789a bcdef012  .*
-+ 100101a0 456789ab cdef0123 56789abc def01234  .*
-+ 100101b0 6789abcd ef012345 789abcde f0123456  .*
---- binutils-2.22/ld/testsuite/ld-powerpc/tlstocso.g
-+++ binutils-2.22/ld/testsuite/ld-powerpc/tlstocso.g
-@@ -7,7 +7,7 @@
- .*: +file format elf64-powerpc
- Contents of section \.got:
--.* 00000000 000186c0 00000000 00000000  .*
-+.* 00000000 000186f8 00000000 00000000  .*
- .* 00000000 00000000 00000000 00000000  .*
- .* 00000000 00000000 00000000 00000000  .*
- .* 00000000 00000000 00000000 00000000  .*
---- binutils-2.22/ld/testsuite/ld-s390/tlsbin.rd
-+++ binutils-2.22/ld/testsuite/ld-s390/tlsbin.rd
-@@ -36,13 +36,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
- Program Headers:
-  +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
-- +PHDR +0x0+34 0x0+400034 0x0+400034 0x0+c0 0x0+c0 R E 0x4
-- +INTERP +0x0+f4 0x0+4000f4 0x0+4000f4 0x0+11 0x0+11 R +0x1
-+ +PHDR +0x0+34 0x0+400034 0x0+400034 0x0+e0 0x0+e0 R E 0x4
-+ +INTERP +0x0+114 0x0+400114 0x0+400114 0x0+11 0x0+11 R +0x1
- .*Requesting program interpreter.*
-  +LOAD .* R E 0x1000
-  +LOAD .* RW +0x1000
-  +DYNAMIC .* RW +0x4
-  +TLS .* 0x0+60 0x0+a0 R +0x20
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections...
-@@ -52,6 +53,7 @@ Program Headers:
-  +03 +.tdata .dynamic .got *
-  +04 +.dynamic *
-  +05 +.tdata .tbss *
-+ +06 +
- Relocation section '.rela.dyn' at offset .* contains 4 entries:
-  Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
---- binutils-2.22/ld/testsuite/ld-s390/tlsbin_64.rd
-+++ binutils-2.22/ld/testsuite/ld-s390/tlsbin_64.rd
-@@ -36,13 +36,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
- Program Headers:
-  +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
-- +PHDR +0x0+40 0x0+80000040 0x0+80000040 0x0+150 0x0+150 R E 0x8
-- +INTERP +0x0+190 0x0+80000190 0x0+80000190 0x0+11 0x0+11 R +0x1
-+ +PHDR +0x0+40 0x0+80000040 0x0+80000040 0x0+188 0x0+188 R E 0x8
-+ +INTERP +0x0+1c8 0x0+800001c8 0x0+800001c8 0x0+11 0x0+11 R +0x1
- .*Requesting program interpreter.*
-  +LOAD .* R E 0x1000
-  +LOAD .* RW +0x1000
-  +DYNAMIC .* RW +0x8
-  +TLS .* 0x0+60 0x0+a0 R +0x20
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections...
-@@ -52,6 +53,7 @@ Program Headers:
-  +03 +.tdata .dynamic .got *
-  +04 +.dynamic *
-  +05 +.tdata .tbss *
-+ +06 +
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
-  +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
---- binutils-2.22/ld/testsuite/ld-s390/tlspic.rd
-+++ binutils-2.22/ld/testsuite/ld-s390/tlspic.rd
-@@ -39,6 +39,7 @@ Program Headers:
-  +LOAD .* RW +0x1000
-  +DYNAMIC .* RW +0x4
-  +TLS .* 0x0+60 0x0+80 R +0x20
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections...
-@@ -46,6 +47,7 @@ Program Headers:
-  +01 +.tdata .dynamic .got 
-  +02 +.dynamic 
-  +03 +.tdata .tbss 
-+ +04 +
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
-  Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
---- binutils-2.22/ld/testsuite/ld-s390/tlspic_64.rd
-+++ binutils-2.22/ld/testsuite/ld-s390/tlspic_64.rd
-@@ -39,6 +39,7 @@ Program Headers:
-  +LOAD .* RW +0x1000
-  +DYNAMIC .* RW +0x8
-  +TLS .* 0x0+60 0x0+80 R +0x20
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections...
-@@ -46,6 +47,7 @@ Program Headers:
-  +01 +.tdata .dynamic .got *
-  +02 +.dynamic *
-  +03 +.tdata .tbss *
-+ +04 +
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
-  +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
---- binutils-2.22/ld/testsuite/ld-scripts/empty-aligned.d
-+++ binutils-2.22/ld/testsuite/ld-scripts/empty-aligned.d
-@@ -8,7 +8,9 @@
- Program Headers:
-  +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg +Align
-  +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ [RWE ]+ +0x[0-9a-f]+
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections\.\.\.
-  +00 +.text 
-+ +01 +
---- binutils-2.22/ld/testsuite/ld-sh/tlsbin-2.d
-+++ binutils-2.22/ld/testsuite/ld-sh/tlsbin-2.d
-@@ -44,6 +44,7 @@ Program Headers:
-  +LOAD.*
-  +DYNAMIC.*
-  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+18 0x0+28 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections\.\.\.
-@@ -53,6 +54,7 @@ Program Headers:
-  +03 +\.tdata \.dynamic \.got *
-  +04 +\.dynamic *
-  +05 +\.tdata \.tbss *
-+ +06 +
- Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
-  Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
---- binutils-2.22/ld/testsuite/ld-sh/tlspic-2.d
-+++ binutils-2.22/ld/testsuite/ld-sh/tlspic-2.d
-@@ -32,7 +32,7 @@ Key to Flags:
- Elf file type is DYN \(Shared object file\)
- Entry point 0x[0-9a-f]+
--There are 4 program headers, starting at offset [0-9]+
-+There are [0-9] program headers, starting at offset [0-9]+
- Program Headers:
-  +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
-@@ -40,6 +40,7 @@ Program Headers:
-  +LOAD.*
-  +DYNAMIC.*
-  +TLS .* 0x0+18 0x0+20 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections\.\.\.
-@@ -47,6 +48,7 @@ Program Headers:
-  +01 +\.tdata \.dynamic \.got *
-  +02 +\.dynamic *
-  +03 +\.tdata \.tbss *
-+ +04 +
- Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 10 entries:
-  Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
---- binutils-2.22/ld/testsuite/ld-sparc/gotop32.rd
-+++ binutils-2.22/ld/testsuite/ld-sparc/gotop32.rd
-@@ -31,6 +31,7 @@ Program Headers:
-  +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x10000
-  +LOAD +0x0+2000 0x0+12000 0x0+12000 0x0+2000 0x0+2000 RW +0x10000
-  +DYNAMIC +0x0+2000 0x0+12000 0x0+12000 0x0+70 0x0+70 RW +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
---- binutils-2.22/ld/testsuite/ld-sparc/gotop64.rd
-+++ binutils-2.22/ld/testsuite/ld-sparc/gotop64.rd
-@@ -31,6 +31,7 @@ Program Headers:
-  +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x100000
-  +LOAD +0x0+2000 0x0+102000 0x0+102000 0x0+2000 0x0+2000 RW +0x100000
-  +DYNAMIC +0x0+2000 0x0+102000 0x0+102000 0x0+e0 0x0+e0 RW +0x8
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
---- binutils-2.22/ld/testsuite/ld-sparc/tlssunbin32.rd
-+++ binutils-2.22/ld/testsuite/ld-sparc/tlssunbin32.rd
-@@ -30,13 +30,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
- Program Headers:
-  +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
-- +PHDR +0x0+34 0x0+10034 0x0+10034 0x0+c0 0x0+c0 R E 0x4
-- +INTERP +0x0+f4 0x0+100f4 0x0+100f4 0x0+11 0x0+11 R +0x1
-+ +PHDR +0x0+34 0x0+10034 0x0+10034 (0x[0-9a-f]+) \1 R E 0x4
-+ +INTERP +(0x[0-9a-f]+ ){3}0x0+11 0x0+11 R +0x1
- .*Requesting program interpreter.*
-  +LOAD .* R E 0x10000
-  +LOAD .* RW +0x10000
-  +DYNAMIC .* RW +0x4
-  +TLS .* 0x0+1060 0x0+10a0 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
---- binutils-2.22/ld/testsuite/ld-sparc/tlssunbin64.rd
-+++ binutils-2.22/ld/testsuite/ld-sparc/tlssunbin64.rd
-@@ -30,13 +30,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
- Program Headers:
-  +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
-- +PHDR +0x0+40 0x0+100040 0x0+100040 0x0+150 0x0+150 R E 0x8
-- +INTERP +0x0+190 0x0+100190 0x0+100190 0x0+19 0x0+19 R +0x1
-+ +PHDR +0x0+40 0x0+100040 0x0+100040 (0x[0-9a-f]+) \1 R E 0x8
-+ +INTERP +0x0+([0-9a-f]+) (0x0+10+\1) \2 0x0+19 0x0+19 R +0x1
- .*Requesting program interpreter.*
-  +LOAD .* R E 0x100000
-  +LOAD .* RW +0x100000
-  +DYNAMIC .* RW +0x8
-  +TLS .* 0x0+60 0x0+a0 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
---- binutils-2.22/ld/testsuite/ld-sparc/tlssunnopic32.rd
-+++ binutils-2.22/ld/testsuite/ld-sparc/tlssunnopic32.rd
-@@ -32,6 +32,7 @@ Program Headers:
-  +LOAD .* RW +0x10000
-  +DYNAMIC .* RW +0x4
-  +TLS .* 0x0+ 0x0+24 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 12 entries:
---- binutils-2.22/ld/testsuite/ld-sparc/tlssunnopic64.rd
-+++ binutils-2.22/ld/testsuite/ld-sparc/tlssunnopic64.rd
-@@ -32,6 +32,7 @@ Program Headers:
-  +LOAD .* RW +0x100000
-  +DYNAMIC .* RW +0x8
-  +TLS .* 0x0+ 0x0+24 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
---- binutils-2.22/ld/testsuite/ld-sparc/tlssunpic32.rd
-+++ binutils-2.22/ld/testsuite/ld-sparc/tlssunpic32.rd
-@@ -36,6 +36,7 @@ Program Headers:
-  +LOAD +0x0+2000 0x0+12000 0x0+12000 0x0+184 0x0+184 RWE 0x10000
-  +DYNAMIC +0x0+2060 0x0+12060 0x0+12060 0x0+98 0x0+98 RW +0x4
-  +TLS +0x0+2000 0x0+12000 0x0+12000 0x0+60 0x0+80 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
---- binutils-2.22/ld/testsuite/ld-sparc/tlssunpic64.rd
-+++ binutils-2.22/ld/testsuite/ld-sparc/tlssunpic64.rd
-@@ -36,6 +36,7 @@ Program Headers:
-  +LOAD +0x0+2000 0x0+102000 0x0+102000 0x0+3a0 0x0+3a0 RWE 0x100000
-  +DYNAMIC +0x0+2060 0x0+102060 0x0+102060 0x0+130 0x0+130 RW +0x8
-  +TLS +0x0+2000 0x0+102000 0x0+102000 0x0+60 0x0+80 R +0x4
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
- #...
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
---- binutils-2.22/ld/testsuite/ld-x86-64/protected3.d
-+++ binutils-2.22/ld/testsuite/ld-x86-64/protected3.d
-@@ -8,6 +8,6 @@
- Disassembly of section .text:
- 0+[a-f0-9]+ <bar>:
--[     ]*[a-f0-9]+:    8b 05 [a-f0-9][a-f0-9] 00 [a-f0-9][a-f0-9] 00           mov    0x[a-f0-9]+\(%rip\),%eax        # [a-f0-9]+ <foo>
-+[     ]*[a-f0-9]+:    8b 05 [a-f0-9][a-f0-9] [a-f0-9][a-f0-9] [a-f0-9][a-f0-9] 00     mov    0x[a-f0-9]+\(%rip\),%eax        # [a-f0-9]+ <foo>
- [     ]*[a-f0-9]+:    c3                      retq   
- #pass
---- binutils-2.22/ld/testsuite/ld-x86-64/tlsgdesc.rd
-+++ binutils-2.22/ld/testsuite/ld-x86-64/tlsgdesc.rd
-@@ -36,12 +36,14 @@ Program Headers:
-  +LOAD.*
-  +LOAD.*
-  +DYNAMIC.*
-+ +PAX_FLAGS.*
-  Section to Segment mapping:
-  +Segment Sections...
-  +00 +.hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
-  +01 +.dynamic .got .got.plt *
-  +02 +.dynamic *
-+ +03 +
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 8 entries:
-  +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
---- binutils-2.22/ld/testsuite/ld-x86-64/tlspic.rd
-+++ binutils-2.22/ld/testsuite/ld-x86-64/tlspic.rd
-@@ -40,6 +40,7 @@ Program Headers:
-  +LOAD +0x0+11ac 0x0+2011ac 0x0+2011ac 0x0+244 0x0+244 RW +0x200000
-  +DYNAMIC +0x0+1210 0x0+201210 0x0+201210 0x0+130 0x0+130 RW +0x8
-  +TLS +0x0+11ac 0x0+2011ac 0x0+2011ac 0x0+60 0x0+80 R +0x1
-+ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
-  Section to Segment mapping:
-  +Segment Sections...
-@@ -47,6 +48,7 @@ Program Headers:
-  +01 +.tdata .dynamic .got .got.plt *
-  +02 +.dynamic *
-  +03 +.tdata .tbss *
-+ +04 +
- Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
-  +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
diff --git a/src/patches/binutils-2.24-pt-pax-flags-20131231.patch b/src/patches/binutils-2.24-pt-pax-flags-20131231.patch
new file mode 100644 (file)
index 0000000..cfb2035
--- /dev/null
@@ -0,0 +1,1030 @@
+--- binutils-2.24/bfd/elf-bfd.h
++++ binutils-2.24/bfd/elf-bfd.h
+@@ -1577,6 +1577,9 @@ struct elf_obj_tdata
+   /* Segment flags for the PT_GNU_STACK segment.  */
+   unsigned int stack_flags;
++  /* Segment flags for the PT_PAX_FLAGS segment.  */
++  unsigned int pax_flags;
++
+   /* This is set to TRUE if the object was created by the backend
+      linker.  */
+   bfd_boolean linker;
+@@ -1707,6 +1707,7 @@
+ #define elf_eh_frame_hdr(bfd) (elf_tdata(bfd) -> o->eh_frame_hdr)
+ #define elf_linker(bfd)               (elf_tdata(bfd) -> o->linker)
+ #define elf_stack_flags(bfd)  (elf_tdata(bfd) -> o->stack_flags)
++#define elf_pax_flags(bfd)    (elf_tdata(bfd) -> o->pax_flags)
+ #define elf_shstrtab(bfd)     (elf_tdata(bfd) -> o->strtab_ptr)
+ #define elf_onesymtab(bfd)    (elf_tdata(bfd) -> symtab_section)
+ #define elf_symtab_shndx(bfd) (elf_tdata(bfd) -> symtab_shndx_section)
+--- binutils-2.24/bfd/elf.c
++++ binutils-2.24/bfd/elf.c
+@@ -1158,6 +1158,7 @@ get_segment_type (unsigned int p_type)
+     case PT_GNU_EH_FRAME: pt = "EH_FRAME"; break;
+     case PT_GNU_STACK: pt = "STACK"; break;
+     case PT_GNU_RELRO: pt = "RELRO"; break;
++    case PT_PAX_FLAGS: pt = "PAX_FLAGS"; break;
+     default: pt = NULL; break;
+     }
+   return pt;
+@@ -2477,6 +2478,9 @@ bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int hdr_index)
+     case PT_GNU_RELRO:
+       return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "relro");
++    case PT_PAX_FLAGS:
++      return _bfd_elf_make_section_from_phdr (abfd, hdr, hdr_index, "pax_flags");
++
+     default:
+       /* Check for any processor-specific program segment types.  */
+       bed = get_elf_backend_data (abfd);
+@@ -3551,6 +3555,11 @@ get_program_header_size (bfd *abfd, struct bfd_link_info *info)
+       ++segs;
+     }
++    {
++      /* We need a PT_PAX_FLAGS segment.  */
++      ++segs;
++    }
++
+   for (s = abfd->sections; s != NULL; s = s->next)
+     {
+       if ((s->flags & SEC_LOAD) != 0
+@@ -4153,6 +4162,20 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info)
+           }
+       }
++    {
++      amt = sizeof (struct elf_segment_map);
++      m = bfd_zalloc (abfd, amt);
++      if (m == NULL)
++      goto error_return;
++      m->next = NULL;
++      m->p_type = PT_PAX_FLAGS;
++      m->p_flags = elf_pax_flags (abfd);
++      m->p_flags_valid = 1;
++
++      *pm = m;
++      pm = &m->next;
++    }
++
+       free (sections);
+       elf_tdata (abfd)->segment_map = mfirst;
+     }
+@@ -5417,7 +5440,8 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
+        6. PT_TLS segment includes only SHF_TLS sections.
+        7. SHF_TLS sections are only in PT_TLS or PT_LOAD segments.
+        8. PT_DYNAMIC should not contain empty sections at the beginning
+-        (with the possible exception of .dynamic).  */
++        (with the possible exception of .dynamic).
++       9. PT_PAX_FLAGS segments do not include any sections.  */
+ #define IS_SECTION_IN_INPUT_SEGMENT(section, segment, bed)            \
+   ((((segment->p_paddr                                                        \
+       ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr)      \
+@@ -5425,6 +5449,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
+      && (section->flags & SEC_ALLOC) != 0)                            \
+     || IS_NOTE (segment, section))                                    \
+    && segment->p_type != PT_GNU_STACK                                 \
++   && segment->p_type != PT_PAX_FLAGS                                 \
+    && (segment->p_type != PT_TLS                                      \
+        || (section->flags & SEC_THREAD_LOCAL))                                \
+    && (segment->p_type == PT_LOAD                                     \
+--- binutils-2.24/bfd/elflink.c
++++ binutils-2.24/bfd/elflink.c
+@@ -5545,17 +5545,30 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
+       && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
+     return FALSE;
++  elf_pax_flags (output_bfd) = PF_NORANDEXEC;
++  if (info->execheap)
++    elf_pax_flags (output_bfd) |= PF_NOMPROTECT;
++  else if (info->noexecheap)
++    elf_pax_flags (output_bfd) |= PF_MPROTECT;
++
+   /* Determine any GNU_STACK segment requirements, after the backend
+      has had a chance to set a default segment size.  */
+   if (info->execstack)
+-    elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
++    {
++      elf_stack_flags (output_bfd) = PF_R | PF_W | PF_X;
++      elf_pax_flags (output_bfd) |= PF_EMUTRAMP;
++    }
+   else if (info->noexecstack)
+-    elf_stack_flags (output_bfd) = PF_R | PF_W;
++    {
++      elf_stack_flags (output_bfd) = PF_R | PF_W;
++      elf_pax_flags (output_bfd) |= PF_NOEMUTRAMP;
++    }
+   else
+     {
+       bfd *inputobj;
+       asection *notesec = NULL;
+       int exec = 0;
++      elf_pax_flags (output_bfd) |= PF_NOEMUTRAMP;
+       for (inputobj = info->input_bfds;
+          inputobj;
+          inputobj = inputobj->link_next)
+@@ -5567,7 +5581,11 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
+         if (s)
+           {
+             if (s->flags & SEC_CODE)
+-              exec = PF_X;
++              {
++                elf_pax_flags (output_bfd) &= ~PF_NOEMUTRAMP;
++                elf_pax_flags (output_bfd) |= PF_EMUTRAMP;
++                exec = PF_X;
++              }
+             notesec = s;
+           }
+         else if (bed->default_execstack)
+--- binutils-2.24/binutils/readelf.c
++++ binutils-2.24/binutils/readelf.c
+@@ -2740,6 +2740,7 @@ get_segment_type (unsigned long p_type)
+                       return "GNU_EH_FRAME";
+     case PT_GNU_STACK:        return "GNU_STACK";
+     case PT_GNU_RELRO:  return "GNU_RELRO";
++    case PT_PAX_FLAGS:  return "PAX_FLAGS";
+     default:
+       if ((p_type >= PT_LOPROC) && (p_type <= PT_HIPROC))
+--- binutils-2.24/include/bfdlink.h
++++ binutils-2.24/include/bfdlink.h
+@@ -322,6 +322,14 @@ struct bfd_link_info
+   /* TRUE if PT_GNU_RELRO segment should be created.  */
+   unsigned int relro: 1;
++  /* TRUE if PT_PAX_FLAGS segment should be created with PF_NOMPROTECT
++     flags.  */
++  unsigned int execheap: 1;
++
++  /* TRUE if PT_PAX_FLAGS segment should be created with PF_MPROTECT
++     flags.  */
++  unsigned int noexecheap: 1;
++
+   /* TRUE if .eh_frame_hdr section and PT_GNU_EH_FRAME ELF segment
+      should be created.  */
+   unsigned int eh_frame_hdr: 1;
+--- binutils-2.24/include/elf/common.h
++++ binutils-2.24/include/elf/common.h
+@@ -429,6 +429,7 @@
+ #define PT_SUNW_EH_FRAME PT_GNU_EH_FRAME      /* Solaris uses the same value */
+ #define PT_GNU_STACK  (PT_LOOS + 0x474e551) /* Stack flags */
+ #define PT_GNU_RELRO  (PT_LOOS + 0x474e552) /* Read-only after relocation */
++#define PT_PAX_FLAGS  (PT_LOOS + 0x5041580) /* PaX flags */
+ /* Program segment permissions, in program header p_flags field.  */
+@@ -439,6 +440,21 @@
+ #define PF_MASKOS     0x0FF00000      /* New value, Oct 4, 1999 Draft */
+ #define PF_MASKPROC   0xF0000000      /* Processor-specific reserved bits */
++/* Flags to control PaX behavior.  */
++
++#define PF_PAGEEXEC   (1 << 4)        /* Enable  PAGEEXEC */
++#define PF_NOPAGEEXEC (1 << 5)        /* Disable PAGEEXEC */
++#define PF_SEGMEXEC   (1 << 6)        /* Enable  SEGMEXEC */
++#define PF_NOSEGMEXEC (1 << 7)        /* Disable SEGMEXEC */
++#define PF_MPROTECT   (1 << 8)        /* Enable  MPROTECT */
++#define PF_NOMPROTECT (1 << 9)        /* Disable MPROTECT */
++#define PF_RANDEXEC   (1 << 10)       /* Enable  RANDEXEC */
++#define PF_NORANDEXEC (1 << 11)       /* Disable RANDEXEC */
++#define PF_EMUTRAMP   (1 << 12)       /* Enable  EMUTRAMP */
++#define PF_NOEMUTRAMP (1 << 13)       /* Disable EMUTRAMP */
++#define PF_RANDMMAP   (1 << 14)       /* Enable  RANDMMAP */
++#define PF_NORANDMMAP (1 << 15)       /* Disable RANDMMAP */
++
+ /* Values for section header, sh_type field.  */
+ #define SHT_NULL      0               /* Section header table entry unused */
+--- binutils-2.24/ld/emultempl/elf32.em
++++ binutils-2.24/ld/emultempl/elf32.em
+@@ -2285,6 +2285,16 @@ fragment <<EOF
+         link_info.noexecstack = TRUE;
+         link_info.execstack = FALSE;
+       }
++      else if (strcmp (optarg, "execheap") == 0)
++      {
++        link_info.execheap = TRUE;
++        link_info.noexecheap = FALSE;
++      }
++      else if (strcmp (optarg, "noexecheap") == 0)
++      {
++        link_info.noexecheap = TRUE;
++        link_info.execheap = FALSE;
++      }
+ EOF
+ if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
+ fragment <<EOF
+@@ -2368,6 +2378,8 @@ fragment <<EOF
+   -z defs                     Report unresolved symbols in object files.\n"));
+   fprintf (file, _("\
+   -z execstack                Mark executable as requiring executable stack\n"));
++  fprintf (file, _("\
++  -z execheap                 Mark executable as requiring executable heap\n"));
+ EOF
+ if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
+@@ -2391,6 +2403,8 @@ fragment <<EOF
+ fragment <<EOF
+   fprintf (file, _("\
+   -z noexecstack              Mark executable as not requiring executable stack\n"));
++  fprintf (file, _("\
++  -z noexecheap               Mark executable as not requiring executable heap\n"));
+ EOF
+ if test x"$GENERATE_SHLIB_SCRIPT" = xyes; then
+ fragment <<EOF
+--- binutils-2.24/ld/ldgram.y
++++ binutils-2.24/ld/ldgram.y
+@@ -1119,6 +1119,8 @@ phdr_type:
+                           $$ = exp_intop (0x6474e550);
+                         else if (strcmp (s, "PT_GNU_STACK") == 0)
+                           $$ = exp_intop (0x6474e551);
++                        else if (strcmp (s, "PT_PAX_FLAGS") == 0)
++                          $$ = exp_intop (0x65041580);
+                         else
+                           {
+                             einfo (_("\
+--- binutils-2.24/ld/testsuite/ld-alpha/tlsbin.rd
++++ binutils-2.24/ld/testsuite/ld-alpha/tlsbin.rd
+@@ -35,13 +35,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
+ Program Headers:
+   Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+-  PHDR +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+150 R E 0x8
++  PHDR +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+188 R E 0x8
+   INTERP +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x1
+ .*Requesting program interpreter.*
+   LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R E 0x10000
+   LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x10000
+   DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x8
+   TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 3 entries:
+--- binutils-2.24/ld/testsuite/ld-alpha/tlsbinr.rd
++++ binutils-2.24/ld/testsuite/ld-alpha/tlsbinr.rd
+@@ -42,6 +42,7 @@ Program Headers:
+  +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x10000
+  +DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x8
+  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
+--- binutils-2.24/ld/testsuite/ld-alpha/tlspic.rd
++++ binutils-2.24/ld/testsuite/ld-alpha/tlspic.rd
+@@ -38,6 +38,7 @@ Program Headers:
+  +LOAD +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x10000
+  +DYNAMIC +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ RW +0x8
+  +TLS +0x0+10e0 0x0+110e0 0x0+110e0 0x0+60 0x0+80 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 7 entries:
+--- binutils-2.24/ld/testsuite/ld-elf/eh1.d
++++ binutils-2.24/ld/testsuite/ld-elf/eh1.d
+@@ -22,11 +22,11 @@ Contents of the .eh_frame section:
+   DW_CFA_nop
+   DW_CFA_nop
+-0+0018 0+001c 0+001c FDE cie=0+0000 pc=0+400078..0+400078
+-  DW_CFA_advance_loc: 0 to 0+400078
++0+0018 0+001c 0+001c FDE cie=0+0000 pc=([0-9a-f]+)..\1
++  DW_CFA_advance_loc: 0 to [0-9a-f]+
+   DW_CFA_def_cfa_offset: 16
+   DW_CFA_offset: r6 \(rbp\) at cfa-16
+-  DW_CFA_advance_loc: 0 to 0+400078
++  DW_CFA_advance_loc: 0 to [0-9a-f]+
+   DW_CFA_def_cfa_register: r6 \(rbp\)
+ 0+0038 ZERO terminator
+--- binutils-2.24/ld/testsuite/ld-elf/eh2.d
++++ binutils-2.24/ld/testsuite/ld-elf/eh2.d
+@@ -22,11 +22,11 @@ Contents of the .eh_frame section:
+   DW_CFA_nop
+   DW_CFA_nop
+-0+0018 0+001c 0+001c FDE cie=0+0000 pc=0+400078..0+400078
+-  DW_CFA_advance_loc: 0 to 0+400078
++0+0018 0+001c 0+001c FDE cie=0+0000 pc=([0-9a-f]+)..\1
++  DW_CFA_advance_loc: 0 to [0-9a-f]+
+   DW_CFA_def_cfa_offset: 16
+   DW_CFA_offset: r6 \(rbp\) at cfa-16
+-  DW_CFA_advance_loc: 0 to 0+400078
++  DW_CFA_advance_loc: 0 to [0-9a-f]+
+   DW_CFA_def_cfa_register: r6 \(rbp\)
+ 0+0038 ZERO terminator
+--- binutils-2.24/ld/testsuite/ld-elf/eh3.d
++++ binutils-2.24/ld/testsuite/ld-elf/eh3.d
+@@ -22,11 +22,11 @@ Contents of the .eh_frame section:
+   DW_CFA_nop
+   DW_CFA_nop
+-0+0018 0+001c 0+001c FDE cie=0+0000 pc=0+400078..0+400078
+-  DW_CFA_advance_loc: 0 to 0+400078
++0+0018 0+001c 0+001c FDE cie=0+0000 pc=([0-9a-f]+)..\1
++  DW_CFA_advance_loc: 0 to [0-9a-f]+
+   DW_CFA_def_cfa_offset: 16
+   DW_CFA_offset: r6 \(rbp\) at cfa-16
+-  DW_CFA_advance_loc: 0 to 0+400078
++  DW_CFA_advance_loc: 0 to [0-9a-f]+
+   DW_CFA_def_cfa_register: r6 \(rbp\)
+ 0+0038 ZERO terminator
+--- binutils-2.24/ld/testsuite/ld-elf/orphan-region.d
++++ binutils-2.24/ld/testsuite/ld-elf/orphan-region.d
+@@ -15,7 +15,9 @@
+ Program Headers:
+   Type.*
+   LOAD[ \t]+0x[0-9a-f]+ 0x0*40000000 0x0*40000000 0x[0-9a-f]+ 0x[0-9a-f]+ RWE 0x[0-9a-f]+
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+   Segment Sections...
+    00     .text .rodata .moredata *
++   01 +
+--- binutils-2.24/ld/testsuite/ld-i386/tlsbin.rd
++++ binutils-2.24/ld/testsuite/ld-i386/tlsbin.rd
+@@ -44,6 +44,7 @@ Program Headers:
+  +LOAD.*
+  +DYNAMIC.*
+  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+a0 R +0x1000
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections...
+@@ -53,6 +54,7 @@ Program Headers:
+  +03 +.tdata .dynamic .got .got.plt *
+  +04 +.dynamic *
+  +05 +.tdata .tbss *
++ +06 +
+ Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 9 entries:
+  Offset +Info +Type +Sym.Value +Sym. Name
+--- binutils-2.24/ld/testsuite/ld-i386/tlsbindesc.rd
++++ binutils-2.24/ld/testsuite/ld-i386/tlsbindesc.rd
+@@ -42,6 +42,7 @@ Program Headers:
+  +LOAD.*
+  +DYNAMIC.*
+  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+a0 R +0x1000
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections...
+@@ -51,6 +52,7 @@ Program Headers:
+  +03 +.tdata .dynamic .got .got.plt *
+  +04 +.dynamic *
+  +05 +.tdata .tbss *
++ +06 +
+ Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 9 entries:
+  Offset +Info +Type +Sym.Value +Sym. Name
+--- binutils-2.24/ld/testsuite/ld-i386/tlsdesc.rd
++++ binutils-2.24/ld/testsuite/ld-i386/tlsdesc.rd
+@@ -39,6 +39,7 @@ Program Headers:
+  +LOAD.*
+  +DYNAMIC.*
+  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+80 R +0x1
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections...
+@@ -46,6 +47,7 @@ Program Headers:
+  +01 +.tdata .dynamic .got .got.plt *
+  +02 +.dynamic *
+  +03 +.tdata .tbss *
++ +04 +
+ Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 20 entries:
+  Offset +Info +Type +Sym.Value +Sym. Name
+--- binutils-2.24/ld/testsuite/ld-i386/tlsgdesc.rd
++++ binutils-2.24/ld/testsuite/ld-i386/tlsgdesc.rd
+@@ -36,12 +36,14 @@ Program Headers:
+  +LOAD.*
+  +LOAD.*
+  +DYNAMIC.*
++ +PAX_FLAGS.*
+  Section to Segment mapping:
+  +Segment Sections...
+  +00 +.hash .dynsym .dynstr .rel.dyn .rel.plt .plt .text *
+  +01 +.dynamic .got .got.plt *
+  +02 +.dynamic *
++ +03 +
+ Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 8 entries:
+  Offset +Info +Type +Sym.Value +Sym. Name
+--- binutils-2.24/ld/testsuite/ld-i386/tlsnopic.rd
++++ binutils-2.24/ld/testsuite/ld-i386/tlsnopic.rd
+@@ -37,6 +37,7 @@ Program Headers:
+  +LOAD.*
+  +DYNAMIC.*
+  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+ 0x0+24 R +0x1
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections...
+@@ -44,6 +45,7 @@ Program Headers:
+  +01 +.dynamic .got .got.plt *
+  +02 +.dynamic *
+  +03 +.tbss *
++ +04 +
+ Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 20 entries:
+  Offset +Info +Type +Sym.Value +Sym. Name
+--- binutils-2.24/ld/testsuite/ld-i386/tlspic.rd
++++ binutils-2.24/ld/testsuite/ld-i386/tlspic.rd
+@@ -40,6 +40,7 @@ Program Headers:
+  +LOAD.*
+  +DYNAMIC.*
+  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+60 0x0+80 R +0x1
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections...
+@@ -47,6 +48,7 @@ Program Headers:
+  +01 +.tdata .dynamic .got .got.plt *
+  +02 +.dynamic *
+  +03 +.tdata .tbss *
++ +04 +
+ Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 26 entries:
+  Offset +Info +Type +Sym.Value +Sym. Name
+--- binutils-2.24/ld/testsuite/ld-ia64/merge1.d
++++ binutils-2.24/ld/testsuite/ld-ia64/merge1.d
+@@ -4,7 +4,7 @@
+ #objdump: -d
+ #...
+-0+1e0 <.text>:
++[a-f0-9]+ <.text>:
+ [     ]*[a-f0-9]+:    0b 60 80 02 00 24       \[MMI\]       addl r12=32,r1;;
+ [     ]*[a-f0-9]+:    c0 c0 04 00 48 00                   addl r12=24,r1
+ [     ]*[a-f0-9]+:    00 00 04 00                         nop.i 0x0;;
+--- binutils-2.24/ld/testsuite/ld-ia64/merge2.d
++++ binutils-2.24/ld/testsuite/ld-ia64/merge2.d
+@@ -4,7 +4,7 @@
+ #objdump: -d
+ #...
+-0+1e0 <.text>:
++[a-f0-9]+ <.text>:
+ [     ]*[a-f0-9]+:    0b 60 80 02 00 24       \[MMI\]       addl r12=32,r1;;
+ [     ]*[a-f0-9]+:    c0 c0 04 00 48 00                   addl r12=24,r1
+ [     ]*[a-f0-9]+:    00 00 04 00                         nop.i 0x0;;
+--- binutils-2.24/ld/testsuite/ld-ia64/merge3.d
++++ binutils-2.24/ld/testsuite/ld-ia64/merge3.d
+@@ -4,7 +4,7 @@
+ #objdump: -d
+ #...
+-0+210 <.text>:
++[a-f0-9]+ <.text>:
+ [     ]*[a-f0-9]+:    0b 60 80 02 00 24       \[MMI\]       addl r12=32,r1;;
+ [     ]*[a-f0-9]+:    c0 40 05 00 48 00                   addl r12=40,r1
+ [     ]*[a-f0-9]+:    00 00 04 00                         nop.i 0x0;;
+--- binutils-2.24/ld/testsuite/ld-ia64/merge4.d
++++ binutils-2.24/ld/testsuite/ld-ia64/merge4.d
+@@ -4,7 +4,7 @@
+ #objdump: -d
+ #...
+-0+240 <.text>:
++[a-f0-9]+ <.text>:
+ [     ]*[a-f0-9]+:    0b 60 80 02 00 24       \[MMI\]       addl r12=32,r1;;
+ [     ]*[a-f0-9]+:    c0 40 05 00 48 00                   addl r12=40,r1
+ [     ]*[a-f0-9]+:    00 00 04 00                         nop.i 0x0;;
+--- binutils-2.24/ld/testsuite/ld-ia64/merge5.d
++++ binutils-2.24/ld/testsuite/ld-ia64/merge5.d
+@@ -4,7 +4,7 @@
+ #objdump: -d
+ #...
+-0+270 <.text>:
++[a-f0-9]+ <.text>:
+ [     ]*[a-f0-9]+:    0b 60 80 02 00 24       \[MMI\]       addl r12=32,r1;;
+ [     ]*[a-f0-9]+:    c0 40 05 00 48 00                   addl r12=40,r1
+ [     ]*[a-f0-9]+:    00 00 04 00                         nop.i 0x0;;
+--- binutils-2.24/ld/testsuite/ld-ia64/tlsbin.rd
++++ binutils-2.24/ld/testsuite/ld-ia64/tlsbin.rd
+@@ -36,13 +36,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
+ Program Headers:
+  +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+- +PHDR +0x0+40 0x40+40 0x40+40 0x0+188 0x0+188 R E 0x8
+- +INTERP +0x0+1c8 0x40+1c8 0x40+1c8 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x1
++ +PHDR +0x0+40 0x40+40 0x40+40 (0x[0-9a-f]+) \1 R E 0x8
++ +INTERP +0x0+([0-9a-f]+) (0x40+\1) \2 0x[0-9a-f]+ 0x[0-9a-f]+ R +0x1
+ .*Requesting program interpreter.*
+  +LOAD +0x0+ 0x40+ 0x40+ 0x0+1[0-9a-f]+ 0x0+1[0-9a-f]+ R E 0x10000
+  +LOAD +0x0+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x0+0[0-9a-f]+ 0x0+0[0-9a-f]+ RW +0x10000
+  +DYNAMIC +0x0+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x0+150 0x0+150 RW +0x8
+  +TLS +0x0+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x60+1[0-9a-f]+ 0x0+60 0x0+a0 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  +IA_64_UNWIND .* R +0x8
+ #...
+--- binutils-2.24/ld/testsuite/ld-ia64/tlspic.rd
++++ binutils-2.24/ld/testsuite/ld-ia64/tlspic.rd
+@@ -40,6 +40,7 @@ Program Headers:
+  +LOAD +0x0+1[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+0[0-9a-f]+ 0x0+0[0-9a-f]+ RW +0x10000
+  +DYNAMIC +0x0+1[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+140 0x0+140 RW +0x8
+  +TLS +0x0+1[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+11[0-9a-f]+ 0x0+60 0x0+80 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  +IA_64_UNWIND +0x0+1[0-9a-f]+ 0x0+1[0-9a-f]+ 0x0+1[0-9a-f]+ 0x0+18 0x0+18 R +0x8
+ #...
+--- binutils-2.24/ld/testsuite/ld-mips-elf/multi-got-no-shared.d
++++ binutils-2.24/ld/testsuite/ld-mips-elf/multi-got-no-shared.d
+@@ -8,9 +8,9 @@
+ .*: +file format.*
+ Disassembly of section \.text:
+-004000b0 <[^>]*> 3c1c0043     lui     gp,0x43
+-004000b4 <[^>]*> 279c9ff0     addiu   gp,gp,-24592
+-004000b8 <[^>]*> afbc0008     sw      gp,8\(sp\)
++004000d0 <[^>]*> 3c1c0043     lui     gp,0x43
++004000d4 <[^>]*> 279c9ff0     addiu   gp,gp,-24592
++004000d8 <[^>]*> afbc0008     sw      gp,8\(sp\)
+ #...
+ 00408d60 <[^>]*> 3c1c0043     lui     gp,0x43
+ 00408d64 <[^>]*> 279c2c98     addiu   gp,gp,11416
+--- binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.sd
++++ binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.sd
+@@ -1,7 +1,7 @@
+ Elf file type is DYN \(Shared object file\)
+ Entry point .*
+-There are 5 program headers, starting at offset .*
++There are [0-9] program headers, starting at offset .*
+ Program Headers:
+  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+@@ -9,6 +9,7 @@ Program Headers:
+  * LOAD * [^ ]+ * 0x0+00000 * 0x0+00000 [^ ]+ * [^ ]+ * R E * 0x.*
+  * LOAD * [^ ]+ * 0x0+10000 * 0x0+10000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * DYNAMIC * [^ ]+ * 0x0+00400 * 0x0+00400 .*
++ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  * NULL * .*
+  *Section to Segment mapping:
+@@ -18,3 +19,4 @@ Program Headers:
+  *0*2 * \.data \.got *
+  *0*3 * \.dynamic *
+  *0*4 *
++ *0*5 *
+--- binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.sd
++++ binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.sd
+@@ -1,7 +1,7 @@
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x44000
+-There are 8 program headers, starting at offset .*
++There are [0-9] program headers, starting at offset .*
+ Program Headers:
+  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+@@ -13,6 +13,7 @@ Program Headers:
+  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
++ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  * NULL * .*
+  *Section to Segment mapping:
+@@ -25,3 +26,4 @@ Program Headers:
+  *0*5 *\.got \.data *
+  *0*6 *\.dynamic *
+  *0*7 *
++ *0*8 *
+--- binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.sd
++++ binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.sd
+@@ -1,7 +1,7 @@
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x44000
+-There are 8 program headers, starting at offset .*
++There are [0-9] program headers, starting at offset .*
+ Program Headers:
+  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+@@ -13,6 +13,7 @@ Program Headers:
+  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
++ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  * NULL * .*
+  *Section to Segment mapping:
+@@ -25,3 +26,4 @@ Program Headers:
+  *0*5 * \.got \.data \.bss *
+  *0*6 * \.dynamic *
+  *0*7 *
++ *0*8 *
+--- binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.sd
++++ binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.sd
+@@ -1,7 +1,7 @@
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x44000
+-There are 8 program headers, starting at offset .*
++There are [0-9] program headers, starting at offset .*
+ Program Headers:
+  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+@@ -13,6 +13,7 @@ Program Headers:
+  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
++ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  * NULL * .*
+  *Section to Segment mapping:
+@@ -25,3 +26,4 @@ Program Headers:
+  *0*5 * \.got \.data \.bss *
+  *0*6 * \.dynamic *
+  *0*7 *
++ *0*8 *
+--- binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.sd
++++ binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.sd
+@@ -1,7 +1,7 @@
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x44000
+-There are 8 program headers, starting at offset .*
++There are [0-9] program headers, starting at offset .*
+ Program Headers:
+  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+@@ -13,6 +13,7 @@ Program Headers:
+  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
++ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  * NULL * .*
+  *Section to Segment mapping:
+@@ -25,3 +26,4 @@ Program Headers:
+  *0*5 * \.got \.data \.bss *
+  *0*6 * \.dynamic *
+  *0*7 *
++ *0*8 *
+--- binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.sd
++++ binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.sd
+@@ -1,7 +1,7 @@
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x44000
+-There are 7 program headers, starting at offset .*
++There are [0-9] program headers, starting at offset .*
+ Program Headers:
+  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+@@ -12,6 +12,7 @@ Program Headers:
+  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
++ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  * NULL * .*
+  *Section to Segment mapping:
+@@ -23,3 +24,4 @@ Program Headers:
+  *0*4 * \.got \.data \.bss *
+  *0*5 * \.dynamic *
+  *0*6 *
++ *0*7 *
+--- binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.sd
++++ binutils-2.24/ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.sd
+@@ -1,7 +1,7 @@
+ Elf file type is EXEC \(Executable file\)
+ Entry point 0x44000
+-There are 8 program headers, starting at offset .*
++There are [0-9] program headers, starting at offset .*
+ Program Headers:
+  * Type * Offset * VirtAddr * PhysAddr * FileSiz * MemSiz * Flg * Align
+@@ -13,6 +13,7 @@ Program Headers:
+  * LOAD * [^ ]+ * 0x0+80000 * 0x0+80000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * LOAD * [^ ]+ * 0x0+a0000 * 0x0+a0000 [^ ]+ * [^ ]+ * RW  * 0x.*
+  * DYNAMIC * [^ ]+ * 0x0+42000 * 0x0+42000 .*
++ * PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  * NULL * .*
+  *Section to Segment mapping:
+@@ -25,3 +26,4 @@ Program Headers:
+  *0*5 * \.got \.data \.bss *
+  *0*6 * \.dynamic *
+  *0*7 *
++ *0*8 *
+--- binutils-2.24/ld/testsuite/ld-powerpc/tlsexe32.r
++++ binutils-2.24/ld/testsuite/ld-powerpc/tlsexe32.r
+@@ -33,13 +33,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
+ Program Headers:
+  +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
+- +PHDR +0x000034 0x01800034 0x01800034 0x000c0 0x000c0 R E 0x4
+- +INTERP +0x0000f4 0x018000f4 0x018000f4 0x00011 0x00011 R +0x1
++ +PHDR +0x000034 0x01800034 0x01800034 (0x000[0-9a-f]{2}) \1 R E 0x4
++ +INTERP +0x000([0-9a-f]{3}) 0x01800\1 0x01800\1 0x00011 0x00011 R +0x1
+  +\[Requesting program interpreter: .*\]
+  +LOAD .* R E 0x10000
+  +LOAD .* RWE 0x10000
+  +DYNAMIC .* RW +0x4
+  +TLS .* 0x0001c 0x00038 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections\.\.\.
+@@ -49,6 +50,7 @@ Program Headers:
+  +03 +\.tdata \.dynamic \.got \.plt 
+  +04 +\.dynamic 
+  +05 +\.tdata \.tbss 
++ +06 +
+ Relocation section '\.rela\.dyn' at offset .* contains 2 entries:
+  Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+--- binutils-2.24/ld/testsuite/ld-powerpc/tlsso32.r
++++ binutils-2.24/ld/testsuite/ld-powerpc/tlsso32.r
+@@ -35,6 +35,7 @@ Program Headers:
+  +LOAD .* RWE 0x10000
+  +DYNAMIC .* RW +0x4
+  +TLS .* 0x0+1c 0x0+38 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections\.\.\.
+@@ -42,6 +43,7 @@ Program Headers:
+  +01 +\.tdata \.dynamic \.got \.plt 
+  +02 +\.dynamic 
+  +03 +\.tdata \.tbss 
++ +04 +
+ Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 18 entries:
+  Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend
+@@ -52,9 +54,9 @@ Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 18 entries:
+ [0-9a-f ]+R_PPC_TPREL16 +0+30 +le0 \+ 0
+ [0-9a-f ]+R_PPC_TPREL16_HA +0+34 +le1 \+ 0
+ [0-9a-f ]+R_PPC_TPREL16_LO +0+34 +le1 \+ 0
+-[0-9a-f ]+R_PPC_TPREL16 +0+103d0 +\.tdata \+ 103e4
+-[0-9a-f ]+R_PPC_TPREL16_HA +0+103d0 +\.tdata \+ 103e8
+-[0-9a-f ]+R_PPC_TPREL16_LO +0+103d0 +\.tdata \+ 103e8
++[0-9a-f ]+R_PPC_TPREL16 +0+103[df]0 +\.tdata \+ 10[0-9a-f]{3}
++[0-9a-f ]+R_PPC_TPREL16_HA +0+103[df]0 +\.tdata \+ 10[0-9a-f]{3}
++[0-9a-f ]+R_PPC_TPREL16_LO +0+103[df]0 +\.tdata \+ 10[0-9a-f]{3}
+ [0-9a-f ]+R_PPC_DTPMOD32 +0
+ [0-9a-f ]+R_PPC_DTPREL32 +0
+ [0-9a-f ]+R_PPC_DTPMOD32 +0
+--- binutils-2.24/ld/testsuite/ld-s390/tlsbin.rd
++++ binutils-2.24/ld/testsuite/ld-s390/tlsbin.rd
+@@ -36,6 +36,7 @@ There are [0-9]+ program headers, starting at offset [0-9]+
+  +LOAD .* RW +0x1000
+  +DYNAMIC .* RW +0x4
+  +TLS .* 0x0+60 0x0+a0 R +0x20
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections...
+@@ -52,6 +53,7 @@ Program Headers:
+  +03 +.tdata .dynamic .got *
+  +04 +.dynamic *
+  +05 +.tdata .tbss *
++ +06 +
+ Relocation section '.rela.dyn' at offset .* contains 4 entries:
+  Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+--- binutils-2.24/ld/testsuite/ld-s390/tlsbin_64.rd
++++ binutils-2.24/ld/testsuite/ld-s390/tlsbin_64.rd
+@@ -36,6 +36,7 @@ There are [0-9]+ program headers, starting at offset [0-9]+
+  +LOAD .* RW +0x1000
+  +DYNAMIC .* RW +0x8
+  +TLS .* 0x0+60 0x0+a0 R +0x20
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections...
+@@ -52,6 +53,7 @@ Program Headers:
+  +03 +.tdata .dynamic .got *
+  +04 +.dynamic *
+  +05 +.tdata .tbss *
++ +06 +
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+  +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+--- binutils-2.24/ld/testsuite/ld-s390/tlspic.rd
++++ binutils-2.24/ld/testsuite/ld-s390/tlspic.rd
+@@ -39,6 +39,7 @@ Program Headers:
+  +LOAD .* RW +0x1000
+  +DYNAMIC .* RW +0x4
+  +TLS .* 0x0+60 0x0+80 R +0x20
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections...
+@@ -46,6 +47,7 @@ Program Headers:
+  +01 +.tdata .dynamic .got 
+  +02 +.dynamic 
+  +03 +.tdata .tbss 
++ +04 +
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+  Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+--- binutils-2.24/ld/testsuite/ld-s390/tlspic_64.rd
++++ binutils-2.24/ld/testsuite/ld-s390/tlspic_64.rd
+@@ -39,6 +39,7 @@ Program Headers:
+  +LOAD .* RW +0x1000
+  +DYNAMIC .* RW +0x8
+  +TLS .* 0x0+60 0x0+80 R +0x20
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections...
+@@ -46,6 +47,7 @@ Program Headers:
+  +01 +.tdata .dynamic .got *
+  +02 +.dynamic *
+  +03 +.tdata .tbss *
++ +04 +
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+  +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+--- binutils-2.24/ld/testsuite/ld-sh/tlsbin-2.d
++++ binutils-2.24/ld/testsuite/ld-sh/tlsbin-2.d
+@@ -44,6 +44,7 @@ Program Headers:
+  +LOAD.*
+  +DYNAMIC.*
+  +TLS +0x[0-9a-f]+ 0x[0-9a-f]+ 0x[0-9a-f]+ 0x0+18 0x0+28 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections\.\.\.
+@@ -53,6 +54,7 @@ Program Headers:
+  +03 +\.tdata \.dynamic \.got *
+  +04 +\.dynamic *
+  +05 +\.tdata \.tbss *
++ +06 +
+ Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+  Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
+--- binutils-2.24/ld/testsuite/ld-sh/tlspic-2.d
++++ binutils-2.24/ld/testsuite/ld-sh/tlspic-2.d
+@@ -32,7 +32,7 @@ Key to Flags:
+ Elf file type is DYN \(Shared object file\)
+ Entry point 0x[0-9a-f]+
+-There are 4 program headers, starting at offset [0-9]+
++There are [0-9] program headers, starting at offset [0-9]+
+ Program Headers:
+  +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+@@ -40,6 +40,7 @@ Program Headers:
+  +LOAD.*
+  +DYNAMIC.*
+  +TLS .* 0x0+18 0x0+20 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections\.\.\.
+@@ -47,6 +48,7 @@ Program Headers:
+  +01 +\.tdata \.dynamic \.got *
+  +02 +\.dynamic *
+  +03 +\.tdata \.tbss *
++ +04 +
+ Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 10 entries:
+  Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
+--- binutils-2.24/ld/testsuite/ld-sparc/gotop32.rd
++++ binutils-2.24/ld/testsuite/ld-sparc/gotop32.rd
+@@ -31,6 +31,7 @@ Program Headers:
+  +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x10000
+  +LOAD +0x0+2000 0x0+12000 0x0+12000 0x0+2000 0x0+2000 RW +0x10000
+  +DYNAMIC +0x0+2000 0x0+12000 0x0+12000 0x0+70 0x0+70 RW +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+--- binutils-2.24/ld/testsuite/ld-sparc/gotop64.rd
++++ binutils-2.24/ld/testsuite/ld-sparc/gotop64.rd
+@@ -31,6 +31,7 @@ Program Headers:
+  +LOAD +0x0+ 0x0+ 0x0+ 0x0+2000 0x0+2000 R E 0x100000
+  +LOAD +0x0+2000 0x0+102000 0x0+102000 0x0+2000 0x0+2000 RW +0x100000
+  +DYNAMIC +0x0+2000 0x0+102000 0x0+102000 0x0+e0 0x0+e0 RW +0x8
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+--- binutils-2.24/ld/testsuite/ld-sparc/tlssunbin32.rd
++++ binutils-2.24/ld/testsuite/ld-sparc/tlssunbin32.rd
+@@ -30,13 +30,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
+ Program Headers:
+  +Type +Offset +VirtAddr +PhysAddr +FileSiz MemSiz +Flg Align
+- +PHDR +0x0+34 0x0+10034 0x0+10034 0x0+c0 0x0+c0 R E 0x4
+- +INTERP +0x0+f4 0x0+100f4 0x0+100f4 0x0+11 0x0+11 R +0x1
++ +PHDR +0x0+34 0x0+10034 0x0+10034 (0x[0-9a-f]+) \1 R E 0x4
++ +INTERP +(0x[0-9a-f]+ ){3}0x0+11 0x0+11 R +0x1
+ .*Requesting program interpreter.*
+  +LOAD .* R E 0x10000
+  +LOAD .* RW +0x10000
+  +DYNAMIC .* RW +0x4
+  +TLS .* 0x0+1060 0x0+10a0 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+--- binutils-2.24/ld/testsuite/ld-sparc/tlssunbin64.rd
++++ binutils-2.24/ld/testsuite/ld-sparc/tlssunbin64.rd
+@@ -30,13 +30,14 @@ There are [0-9]+ program headers, starting at offset [0-9]+
+ Program Headers:
+  +Type +Offset +VirtAddr +PhysAddr +FileSiz +MemSiz +Flg Align
+- +PHDR +0x0+40 0x0+100040 0x0+100040 0x0+150 0x0+150 R E 0x8
+- +INTERP +0x0+190 0x0+100190 0x0+100190 0x0+19 0x0+19 R +0x1
++ +PHDR +0x0+40 0x0+100040 0x0+100040 (0x[0-9a-f]+) \1 R E 0x8
++ +INTERP +0x0+([0-9a-f]+) (0x0+10+\1) \2 0x0+19 0x0+19 R +0x1
+ .*Requesting program interpreter.*
+  +LOAD .* R E 0x100000
+  +LOAD .* RW +0x100000
+  +DYNAMIC .* RW +0x8
+  +TLS .* 0x0+60 0x0+a0 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
+--- binutils-2.24/ld/testsuite/ld-sparc/tlssunnopic32.rd
++++ binutils-2.24/ld/testsuite/ld-sparc/tlssunnopic32.rd
+@@ -32,6 +32,7 @@ Program Headers:
+  +LOAD .* RW +0x10000
+  +DYNAMIC .* RW +0x4
+  +TLS .* 0x0+ 0x0+24 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 12 entries:
+--- binutils-2.24/ld/testsuite/ld-sparc/tlssunnopic64.rd
++++ binutils-2.24/ld/testsuite/ld-sparc/tlssunnopic64.rd
+@@ -32,6 +32,7 @@ Program Headers:
+  +LOAD .* RW +0x100000
+  +DYNAMIC .* RW +0x8
+  +TLS .* 0x0+ 0x0+24 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+--- binutils-2.24/ld/testsuite/ld-sparc/tlssunpic32.rd
++++ binutils-2.24/ld/testsuite/ld-sparc/tlssunpic32.rd
+@@ -36,6 +36,7 @@ Program Headers:
+  +LOAD +0x0+2000 0x0+12000 0x0+12000 0x0+184 0x0+184 RWE 0x10000
+  +DYNAMIC +0x0+2060 0x0+12060 0x0+12060 0x0+98 0x0+98 RW +0x4
+  +TLS +0x0+2000 0x0+12000 0x0+12000 0x0+60 0x0+80 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+--- binutils-2.24/ld/testsuite/ld-sparc/tlssunpic64.rd
++++ binutils-2.24/ld/testsuite/ld-sparc/tlssunpic64.rd
+@@ -36,6 +36,7 @@ Program Headers:
+  +LOAD +0x0+2000 0x0+102000 0x0+102000 0x0+3a0 0x0+3a0 RWE 0x100000
+  +DYNAMIC +0x0+2060 0x0+102060 0x0+102060 0x0+130 0x0+130 RW +0x8
+  +TLS +0x0+2000 0x0+102000 0x0+102000 0x0+60 0x0+80 R +0x4
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+ #...
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+--- binutils-2.24/ld/testsuite/ld-x86-64/tlsgdesc.rd
++++ binutils-2.24/ld/testsuite/ld-x86-64/tlsgdesc.rd
+@@ -36,12 +36,14 @@ Program Headers:
+  +LOAD.*
+  +LOAD.*
+  +DYNAMIC.*
++ +PAX_FLAGS.*
+  Section to Segment mapping:
+  +Segment Sections...
+  +00 +.hash .dynsym .dynstr .rela.dyn .rela.plt .plt .text *
+  +01 +.dynamic .got .got.plt *
+  +02 +.dynamic *
++ +03 +
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 8 entries:
+  +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
+--- binutils-2.24/ld/testsuite/ld-x86-64/tlspic.rd
++++ binutils-2.24/ld/testsuite/ld-x86-64/tlspic.rd
+@@ -40,6 +40,7 @@ Program Headers:
+  +LOAD +0x0+131a 0x0+20131a 0x0+20131a 0x0+246 0x0+246 RW +0x200000
+  +DYNAMIC +0x0+1380 0x0+201380 0x0+201380 0x0+130 0x0+130 RW +0x8
+  +TLS +0x0+131a 0x0+20131a 0x0+20131a 0x0+60 0x0+80 R +0x1
++ +PAX_FLAGS +0x0+ 0x0+ 0x0+ 0x0+ 0x0+ +0x[48]
+  Section to Segment mapping:
+  +Segment Sections...
+@@ -47,6 +48,7 @@ Program Headers:
+  +01 +.tdata .dynamic .got .got.plt *
+  +02 +.dynamic *
+  +03 +.tdata .tbss *
++ +04 +
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 14 entries:
+  +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend
diff --git a/src/patches/dnsmasq/025-Major_tidy_up_of_EDNS0_handling_and_computation_use_of_udp.patch b/src/patches/dnsmasq/025-Major_tidy_up_of_EDNS0_handling_and_computation_use_of_udp.patch
new file mode 100644 (file)
index 0000000..c016e73
--- /dev/null
@@ -0,0 +1,643 @@
+From fa14bec83b2db010fd076910fddab56957b9375d Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 20 Dec 2015 17:12:16 +0000
+Subject: [PATCH] Major tidy up of EDNS0 handling and computation/use of udp
+ packet size.
+
+---
+ src/auth.c     |    8 ++-
+ src/dnsmasq.h  |    7 ++-
+ src/dnssec.c   |    1 -
+ src/forward.c  |  184 ++++++++++++++++++++++++++++++++++++++++----------------
+ src/netlink.c  |    3 +-
+ src/rfc1035.c  |   81 +++++++------------------
+ src/rrfilter.c |    2 +-
+ 7 files changed, 168 insertions(+), 118 deletions(-)
+
+diff --git a/src/auth.c b/src/auth.c
+index 2b0b7d6..85bd5e7 100644
+--- a/src/auth.c
++++ b/src/auth.c
+@@ -81,7 +81,8 @@ int in_zone(struct auth_zone *zone, char *name, char **cut)
+ }
+-size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr, int local_query) 
++size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t now, union mysockaddr *peer_addr, 
++                 int local_query, int do_bit, int have_pseudoheader) 
+ {
+   char *name = daemon->namebuff;
+   unsigned char *p, *ansp;
+@@ -820,6 +821,11 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+   header->ancount = htons(anscount);
+   header->nscount = htons(authcount);
+   header->arcount = htons(0);
++
++  /* Advertise our packet size limit in our reply */
++  if (have_pseudoheader)
++    return add_pseudoheader(header,  ansp - (unsigned char *)header, (unsigned char *)limit, daemon->edns_pktsz, 0, NULL, 0, do_bit);
++
+   return ansp - (unsigned char *)header;
+ }
+   
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 39a930c..abb34c5 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -1113,7 +1113,7 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *namebuff,
+                     int no_cache, int secure, int *doctored);
+ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,  
+                     struct in_addr local_addr, struct in_addr local_netmask, 
+-                    time_t now, int *ad_reqd, int *do_bit);
++                    time_t now, int ad_reqd, int do_bit, int have_pseudoheader);
+ int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name, 
+                            struct bogus_addr *addr, time_t now);
+ int check_for_ignored_address(struct dns_header *header, size_t qlen, struct bogus_addr *baddr);
+@@ -1123,6 +1123,8 @@ int check_for_local_domain(char *name, time_t now);
+ unsigned int questions_crc(struct dns_header *header, size_t plen, char *buff);
+ size_t resize_packet(struct dns_header *header, size_t plen, 
+                 unsigned char *pheader, size_t hlen);
++size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit, 
++                      unsigned short udp_sz, int optno, unsigned char *opt, size_t optlen, int set_do);
+ size_t add_mac(struct dns_header *header, size_t plen, char *limit, union mysockaddr *l3);
+ size_t add_source_addr(struct dns_header *header, size_t plen, char *limit, union mysockaddr *source);
+ #ifdef HAVE_DNSSEC
+@@ -1141,7 +1143,8 @@ int private_net(struct in_addr addr, int ban_localhost);
+ /* auth.c */
+ #ifdef HAVE_AUTH
+ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, 
+-                 time_t now, union mysockaddr *peer_addr, int local_query);
++                 time_t now, union mysockaddr *peer_addr, int local_query,
++                 int do_bit, int have_pseudoheader);
+ int in_zone(struct auth_zone *zone, char *name, char **cut);
+ #endif
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 82394ee..299ca64 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -67,7 +67,6 @@ static char *algo_digest_name(int algo)
+     case 12: return "gosthash94";
+     case 13: return "sha256";
+     case 14: return "sha384";
+-
+     default: return NULL;
+     }
+ }
+diff --git a/src/forward.c b/src/forward.c
+index 3e801c8..041353c 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -244,7 +244,6 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+   void *hash = &crc;
+ #endif
+  unsigned int gotname = extract_request(header, plen, daemon->namebuff, NULL);
+- unsigned char *pheader;
+  (void)do_bit;
+@@ -264,7 +263,8 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+        there's no point retrying the query, retry the key query instead...... */
+       if (forward->blocking_query)
+       {
+-        int fd;
++        int fd, is_sign;
++        unsigned char *pheader;
+         
+         forward->flags &= ~FREC_TEST_PKTSZ;
+         
+@@ -276,8 +276,8 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+         blockdata_retrieve(forward->stash, forward->stash_len, (void *)header);
+         plen = forward->stash_len;
+         
+-        if (find_pseudoheader(header, plen, NULL, &pheader, NULL))
+-          PUTSHORT((forward->flags & FREC_TEST_PKTSZ) ? SAFE_PKTSZ : forward->sentto->edns_pktsz, pheader);
++        if (find_pseudoheader(header, plen, NULL, &pheader, &is_sign) && !is_sign)
++          PUTSHORT(SAFE_PKTSZ, pheader);
+         if (forward->sentto->addr.sa.sa_family == AF_INET) 
+           log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec");
+@@ -394,32 +394,40 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+       forward->log_id = daemon->log_id;
+       
+       if (option_bool(OPT_ADD_MAC))
+-      plen = add_mac(header, plen, ((char *) header) + daemon->packet_buff_sz, &forward->source);
+-      
++      {
++        size_t new = add_mac(header, plen, ((char *) header) + daemon->packet_buff_sz, &forward->source);
++        if (new != plen)
++          {
++            plen = new;
++            forward->flags |= FREC_ADDED_PHEADER;
++          }
++      }
++
+       if (option_bool(OPT_CLIENT_SUBNET))
+       {
+         size_t new = add_source_addr(header, plen, ((char *) header) + daemon->packet_buff_sz, &forward->source); 
+         if (new != plen)
+           {
+             plen = new;
+-            forward->flags |= FREC_HAS_SUBNET;
++            forward->flags |= FREC_HAS_SUBNET | FREC_ADDED_PHEADER;
+           }
+       }
+ #ifdef HAVE_DNSSEC
+       if (option_bool(OPT_DNSSEC_VALID))
+       {
+-        size_t new_plen = add_do_bit(header, plen, ((char *) header) + daemon->packet_buff_sz);
++        size_t new = add_do_bit(header, plen, ((char *) header) + daemon->packet_buff_sz);
+        
++        if (new != plen)
++          forward->flags |= FREC_ADDED_PHEADER;
++
++        plen = new;
++            
+         /* For debugging, set Checking Disabled, otherwise, have the upstream check too,
+            this allows it to select auth servers when one is returning bad data. */
+         if (option_bool(OPT_DNSSEC_DEBUG))
+           header->hb4 |= HB4_CD;
+-        if (new_plen != plen)
+-          forward->flags |= FREC_ADDED_PHEADER;
+-
+-        plen = new_plen;
+       }
+ #endif
+       
+@@ -469,10 +477,23 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+                   }
+ #endif
+               }
+-
+-            if (find_pseudoheader(header, plen, NULL, &pheader, NULL))
+-              PUTSHORT((forward->flags & FREC_TEST_PKTSZ) ? SAFE_PKTSZ : start->edns_pktsz, pheader);
+             
++#ifdef HAVE_DNSSEC
++            if (option_bool(OPT_DNSSEC_VALID) && !do_bit)
++              {
++                /* Difficult one here. If our client didn't send EDNS0, we will have set the UDP
++                   packet size to 512. But that won't provide space for the RRSIGS in many cases.
++                   The RRSIGS will be stripped out before the answer goes back, so the packet should
++                   shrink again. So, if we added a do-bit, bump the udp packet size to the value
++                   known to be OK for this server. Maybe check returned size after stripping and set
++                   the truncated bit? */                
++                unsigned char *pheader;
++                int is_sign;
++                if (find_pseudoheader(header, plen, NULL, &pheader, &is_sign))
++                  PUTSHORT(start->edns_pktsz, pheader);
++              }
++#endif
++
+             if (retry_send(sendto(fd, (char *)header, plen, 0,
+                                   &start->addr.sa,
+                                   sa_len(&start->addr))))
+@@ -563,30 +584,34 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
+     }
+ #endif
+   
+-  /* If upstream is advertising a larger UDP packet size
+-     than we allow, trim it so that we don't get overlarge
+-     requests for the client. We can't do this for signed packets. */
+-
+   if ((pheader = find_pseudoheader(header, n, &plen, &sizep, &is_sign)))
+     {
+-      unsigned short udpsz;
+-      unsigned char *psave = sizep;
+-      
+-      GETSHORT(udpsz, sizep);
+-
+-      if (!is_sign && udpsz > daemon->edns_pktsz)
+-      PUTSHORT(daemon->edns_pktsz, psave);
+-      
+       if (check_subnet && !check_source(header, plen, pheader, query_source))
+       {
+         my_syslog(LOG_WARNING, _("discarding DNS reply: subnet option mismatch"));
+         return 0;
+       }
+       
+-      if (added_pheader)
++      if (!is_sign)
+       {
+-        pheader = 0; 
+-        header->arcount = htons(0);
++        if (added_pheader)
++          {
++            /* client didn't send EDNS0, we added one, strip it off before returning answer. */
++            n = rrfilter(header, n, 0);
++            pheader = NULL;
++          }
++        else
++          {
++            /* If upstream is advertising a larger UDP packet size
++               than we allow, trim it so that we don't get overlarge
++               requests for the client. We can't do this for signed packets. */
++            unsigned short udpsz;
++            unsigned char *psave = sizep;
++            
++            GETSHORT(udpsz, sizep);
++            if (udpsz > daemon->edns_pktsz)
++              PUTSHORT(daemon->edns_pktsz, psave);
++          }
+       }
+     }
+   
+@@ -655,14 +680,16 @@ static size_t process_reply(struct dns_header *header, time_t now, struct server
+     }
+   if (option_bool(OPT_DNSSEC_VALID))
+-    header->hb4 &= ~HB4_AD;
+-  
+-  if (!(header->hb4 & HB4_CD) && ad_reqd && cache_secure)
+-    header->hb4 |= HB4_AD;
+-
+-  /* If the requestor didn't set the DO bit, don't return DNSSEC info. */
+-  if (!do_bit)
+-    n = rrfilter(header, n, 1);
++    {
++      header->hb4 &= ~HB4_AD;
++      
++      if (!(header->hb4 & HB4_CD) && ad_reqd && cache_secure)
++      header->hb4 |= HB4_AD;
++      
++      /* If the requestor didn't set the DO bit, don't return DNSSEC info. */
++      if (!do_bit)
++      n = rrfilter(header, n, 1);
++    }
+ #endif
+   /* do this after extract_addresses. Ensure NODATA reply and remove
+@@ -761,8 +788,14 @@ void reply_query(int fd, int family, time_t now)
+         if ((nn = resize_packet(header, (size_t)n, pheader, plen)))
+           {
+             header->hb3 &= ~(HB3_QR | HB3_AA | HB3_TC);
+-            header->hb4 &= ~(HB4_RA | HB4_RCODE);
+-            forward_query(-1, NULL, NULL, 0, header, nn, now, forward, 0, 0);
++            header->hb4 &= ~(HB4_RA | HB4_RCODE | HB4_CD | HB4_AD);
++            if (forward->flags |= FREC_CHECKING_DISABLED)
++              header->hb4 |= HB4_CD;
++            if (forward->flags |= FREC_AD_QUESTION)
++              header->hb4 |= HB4_AD;
++            if (forward->flags & FREC_DO_QUESTION)
++              add_do_bit(header, nn,  (char *)pheader + plen);
++            forward_query(-1, NULL, NULL, 0, header, nn, now, forward, forward->flags & FREC_AD_QUESTION, forward->flags & FREC_DO_QUESTION);
+             return;
+           }
+       }
+@@ -1007,12 +1040,13 @@ void receive_query(struct listener *listen, time_t now)
+ {
+   struct dns_header *header = (struct dns_header *)daemon->packet;
+   union mysockaddr source_addr;
+-  unsigned short type;
++  unsigned char *pheader;
++  unsigned short type, udp_size = PACKETSZ; /* default if no EDNS0 */
+   struct all_addr dst_addr;
+   struct in_addr netmask, dst_addr_4;
+   size_t m;
+   ssize_t n;
+-  int if_index = 0, auth_dns = 0;
++  int if_index = 0, auth_dns = 0, do_bit = 0, have_pseudoheader = 0;
+ #ifdef HAVE_AUTH
+   int local_auth = 0;
+ #endif
+@@ -1279,10 +1313,30 @@ void receive_query(struct listener *listen, time_t now)
+ #endif
+     }
+   
++  if (find_pseudoheader(header, (size_t)n, NULL, &pheader, NULL))
++    { 
++      unsigned short flags;
++      
++      have_pseudoheader = 1;
++      GETSHORT(udp_size, pheader);
++      pheader += 2; /* ext_rcode */
++      GETSHORT(flags, pheader);
++      
++      if (flags & 0x8000)
++      do_bit = 1;/* do bit */ 
++      
++      /* If the client provides an EDNS0 UDP size, use that to limit our reply.
++       (bounded by the maximum configured). If no EDNS0, then it
++       defaults to 512 */
++      if (udp_size > daemon->edns_pktsz)
++      udp_size = daemon->edns_pktsz;
++    }
++
+ #ifdef HAVE_AUTH
+   if (auth_dns)
+     {
+-      m = answer_auth(header, ((char *) header) + daemon->packet_buff_sz, (size_t)n, now, &source_addr, local_auth);
++      m = answer_auth(header, ((char *) header) + udp_size, (size_t)n, now, &source_addr, 
++                    local_auth, do_bit, have_pseudoheader);
+       if (m >= 1)
+       {
+         send_from(listen->fd, option_bool(OPT_NOWILD) || option_bool(OPT_CLEVERBIND),
+@@ -1293,9 +1347,13 @@ void receive_query(struct listener *listen, time_t now)
+   else
+ #endif
+     {
+-      int ad_reqd, do_bit;
+-      m = answer_request(header, ((char *) header) + daemon->packet_buff_sz, (size_t)n, 
+-                       dst_addr_4, netmask, now, &ad_reqd, &do_bit);
++      int ad_reqd = do_bit;
++       /* RFC 6840 5.7 */
++      if (header->hb4 & HB4_AD)
++      ad_reqd = 1;
++
++      m = answer_request(header, ((char *) header) + udp_size, (size_t)n, 
++                       dst_addr_4, netmask, now, ad_reqd, do_bit, have_pseudoheader);
+       
+       if (m >= 1)
+       {
+@@ -1397,7 +1455,7 @@ unsigned char *tcp_request(int confd, time_t now,
+ #ifdef HAVE_AUTH
+   int local_auth = 0;
+ #endif
+-  int checking_disabled, ad_question, do_bit, added_pheader = 0;
++  int checking_disabled, do_bit, added_pheader = 0, have_pseudoheader = 0;
+   int check_subnet, no_cache_dnssec = 0, cache_secure = 0, bogusanswer = 0;
+   size_t m;
+   unsigned short qtype;
+@@ -1414,6 +1472,7 @@ unsigned char *tcp_request(int confd, time_t now,
+   union mysockaddr peer_addr;
+   socklen_t peer_len = sizeof(union mysockaddr);
+   int query_count = 0;
++  unsigned char *pheader;
+   if (getpeername(confd, (struct sockaddr *)&peer_addr, &peer_len) == -1)
+     return packet;
+@@ -1508,15 +1567,35 @@ unsigned char *tcp_request(int confd, time_t now,
+       else
+       dst_addr_4.s_addr = 0;
+       
++      do_bit = 0;
++
++      if (find_pseudoheader(header, (size_t)size, NULL, &pheader, NULL))
++      { 
++        unsigned short flags;
++        
++        have_pseudoheader = 1;
++        pheader += 4; /* udp_size, ext_rcode */
++        GETSHORT(flags, pheader);
++      
++        if (flags & 0x8000)
++          do_bit = 1;/* do bit */ 
++      }
++
+ #ifdef HAVE_AUTH
+       if (auth_dns)
+-      m = answer_auth(header, ((char *) header) + 65536, (size_t)size, now, &peer_addr, local_auth);
++      m = answer_auth(header, ((char *) header) + 65536, (size_t)size, now, &peer_addr, 
++                      local_auth, do_bit, have_pseudoheader);
+       else
+ #endif
+       {
+-        /* m > 0 if answered from cache */
+-        m = answer_request(header, ((char *) header) + 65536, (size_t)size, 
+-                           dst_addr_4, netmask, now, &ad_question, &do_bit);
++         int ad_reqd = do_bit;
++         /* RFC 6840 5.7 */
++         if (header->hb4 & HB4_AD)
++           ad_reqd = 1;
++         
++         /* m > 0 if answered from cache */
++         m = answer_request(header, ((char *) header) + 65536, (size_t)size, 
++                            dst_addr_4, netmask, now, ad_reqd, do_bit, have_pseudoheader);
+         
+         /* Do this by steam now we're not in the select() loop */
+         check_log_writer(1); 
+@@ -1615,6 +1694,7 @@ unsigned char *tcp_request(int confd, time_t now,
+                           }
+                         
+ #ifdef HAVE_DNSSEC
++                        added_pheader = 0;                      
+                         if (option_bool(OPT_DNSSEC_VALID))
+                           {
+                             size_t new_size = add_do_bit(header, size, ((char *) header) + 65536);
+@@ -1719,7 +1799,7 @@ unsigned char *tcp_request(int confd, time_t now,
+                     m = process_reply(header, now, last_server, (unsigned int)m, 
+                                       option_bool(OPT_NO_REBIND) && !norebind, no_cache_dnssec, cache_secure, bogusanswer,
+-                                      ad_question, do_bit, added_pheader, check_subnet, &peer_addr); 
++                                      ad_reqd, do_bit, added_pheader, check_subnet, &peer_addr); 
+                     
+                     break;
+                   }
+diff --git a/src/netlink.c b/src/netlink.c
+index 753784d..3376d68 100644
+--- a/src/netlink.c
++++ b/src/netlink.c
+@@ -288,7 +288,8 @@ int iface_enumerate(int family, void *parm, int (*callback)())
+               rta = RTA_NEXT(rta, len1);
+             }
+-          if (inaddr && mac && callback_ok)
++          if (!(neigh->ndm_state & (NUD_NOARP | NUD_INCOMPLETE | NUD_FAILED)) &&
++              inaddr && mac && callback_ok)
+             if (!((*callback)(neigh->ndm_family, inaddr, mac, maclen, parm)))
+               callback_ok = 0;
+         }
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 188d05f..18858a8 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -489,8 +489,8 @@ struct macparm {
+   union mysockaddr *l3;
+ };
+  
+-static size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit, 
+-                             int optno, unsigned char *opt, size_t optlen, int set_do)
++size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned char *limit, 
++                      unsigned short udp_sz, int optno, unsigned char *opt, size_t optlen, int set_do)
+ { 
+   unsigned char *lenp, *datap, *p;
+   int rdlen, is_sign;
+@@ -508,7 +508,7 @@ static size_t add_pseudoheader(struct dns_header *header, size_t plen, unsigned
+       return plen;
+       *p++ = 0; /* empty name */
+       PUTSHORT(T_OPT, p);
+-      PUTSHORT(SAFE_PKTSZ, p); /* max packet length, this will be overwritten */
++      PUTSHORT(udp_sz, p); /* max packet length, 512 if not given in EDNS0 header */
+       PUTSHORT(0, p);    /* extended RCODE and version */
+       PUTSHORT(set_do ? 0x8000 : 0, p); /* DO flag */
+       lenp = p;
+@@ -594,7 +594,7 @@ static int filter_mac(int family, char *addrp, char *mac, size_t maclen, void *p
+   if (!match)
+     return 1; /* continue */
+-  parm->plen = add_pseudoheader(parm->header, parm->plen, parm->limit,  EDNS0_OPTION_MAC, (unsigned char *)mac, maclen, 0);
++  parm->plen = add_pseudoheader(parm->header, parm->plen, parm->limit, PACKETSZ, EDNS0_OPTION_MAC, (unsigned char *)mac, maclen, 0);
+   
+   return 0; /* done */
+ }           
+@@ -603,12 +603,6 @@ size_t add_mac(struct dns_header *header, size_t plen, char *limit, union mysock
+ {
+   struct macparm parm;
+      
+-/* Must have an existing pseudoheader as the only ar-record, 
+-   or have no ar-records. Must also not be signed */
+-   
+-  if (ntohs(header->arcount) > 1)
+-    return plen;
+-
+   parm.header = header;
+   parm.limit = (unsigned char *)limit;
+   parm.plen = plen;
+@@ -699,13 +693,13 @@ size_t add_source_addr(struct dns_header *header, size_t plen, char *limit, unio
+   struct subnet_opt opt;
+   
+   len = calc_subnet_opt(&opt, source);
+-  return add_pseudoheader(header, plen, (unsigned char *)limit, EDNS0_OPTION_CLIENT_SUBNET, (unsigned char *)&opt, len, 0);
++  return add_pseudoheader(header, plen, (unsigned char *)limit, PACKETSZ, EDNS0_OPTION_CLIENT_SUBNET, (unsigned char *)&opt, len, 0);
+ }
+ #ifdef HAVE_DNSSEC
+ size_t add_do_bit(struct dns_header *header, size_t plen, char *limit)
+ {
+-  return add_pseudoheader(header, plen, (unsigned char *)limit, 0, NULL, 0, 1);
++  return add_pseudoheader(header, plen, (unsigned char *)limit, PACKETSZ, 0, NULL, 0, 1);
+ }
+ #endif
+@@ -1525,16 +1519,16 @@ static unsigned long crec_ttl(struct crec *crecp, time_t now)
+ /* return zero if we can't answer from cache, or packet size if we can */
+ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,  
+                     struct in_addr local_addr, struct in_addr local_netmask, 
+-                    time_t now, int *ad_reqd, int *do_bit) 
++                    time_t now, int ad_reqd, int do_bit, int have_pseudoheader) 
+ {
+   char *name = daemon->namebuff;
+-  unsigned char *p, *ansp, *pheader;
++  unsigned char *p, *ansp;
+   unsigned int qtype, qclass;
+   struct all_addr addr;
+   int nameoffset;
+   unsigned short flag;
+   int q, ans, anscount = 0, addncount = 0;
+-  int dryrun = 0, sec_reqd = 0, have_pseudoheader = 0;
++  int dryrun = 0;
+   struct crec *crecp;
+   int nxdomain = 0, auth = 1, trunc = 0, sec_data = 1;
+   struct mx_srv_record *rec;
+@@ -1550,35 +1544,11 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+   if (header->hb4 & HB4_CD)
+     sec_data = 0;
+   
+-  /* RFC 6840 5.7 */
+-  *ad_reqd = header->hb4 & HB4_AD;
+-  *do_bit = 0;
+-
+   /* If there is an  additional data section then it will be overwritten by
+      partial replies, so we have to do a dry run to see if we can answer
+      the query. */
+-
+   if (ntohs(header->arcount) != 0)
+-    {
+-      dryrun = 1;
+-
+-      /* If there's an additional section, there might be an EDNS(0) pseudoheader */
+-      if (find_pseudoheader(header, qlen, NULL, &pheader, NULL))
+-      { 
+-        unsigned short flags;
+-        
+-        have_pseudoheader = 1;
+-        
+-        pheader += 4; /* udp size, ext_rcode */
+-        GETSHORT(flags, pheader);
+-        
+-        if ((sec_reqd = flags & 0x8000))
+-          {
+-            *do_bit = 1;/* do bit */ 
+-            *ad_reqd = 1;
+-          }
+-      }
+-    }
++    dryrun = 1;
+   for (rec = daemon->mxnames; rec; rec = rec->next)
+     rec->offset = 0;
+@@ -1603,11 +1573,6 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+       GETSHORT(qtype, p); 
+       GETSHORT(qclass, p);
+-      /* Don't filter RRSIGS from answers to ANY queries, even if do-bit
+-       not set. */
+-      if (qtype == T_ANY)
+-      *do_bit = 1;
+-
+       ans = 0; /* have we answered this question */
+       
+       if (qtype == T_TXT || qtype == T_ANY)
+@@ -1739,7 +1704,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+                    the zone is unsigned, which implies that we're doing
+                    validation. */
+                 if ((crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) || 
+-                    !sec_reqd || 
++                    !do_bit || 
+                     (option_bool(OPT_DNSSEC_VALID) && !(crecp->flags & F_DNSSECOK)))
+                   {
+                     do 
+@@ -1927,7 +1892,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+                   }
+                 /* If the client asked for DNSSEC  don't use cached data. */
+-                if ((crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) || !sec_reqd || !(crecp->flags & F_DNSSECOK))
++                if ((crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) || !do_bit || !(crecp->flags & F_DNSSECOK))
+                   do
+                     { 
+                       /* don't answer wildcard queries with data not from /etc/hosts
+@@ -1961,17 +1926,12 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+                       
+                       if (crecp->flags & F_NEG)
+                         {
+-                          /* We don't cache NSEC records, so if a DNSSEC-validated negative answer
+-                             is cached and the client wants DNSSEC, forward rather than answering from the cache */
+-                          if (!sec_reqd || !(crecp->flags & F_DNSSECOK))
+-                            {
+-                              ans = 1;
+-                              auth = 0;
+-                              if (crecp->flags & F_NXDOMAIN)
+-                                nxdomain = 1;
+-                              if (!dryrun)
+-                                log_query(crecp->flags, name, NULL, NULL);
+-                            }
++                          ans = 1;
++                          auth = 0;
++                          if (crecp->flags & F_NXDOMAIN)
++                            nxdomain = 1;
++                          if (!dryrun)
++                            log_query(crecp->flags, name, NULL, NULL);
+                         }
+                       else 
+                         {
+@@ -2209,10 +2169,11 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+   len = ansp - (unsigned char *)header;
+   
++  /* Advertise our packet size limit in our reply */
+   if (have_pseudoheader)
+-    len = add_pseudoheader(header, len, (unsigned char *)limit, 0, NULL, 0, sec_reqd);
++    len = add_pseudoheader(header, len, (unsigned char *)limit, daemon->edns_pktsz, 0, NULL, 0, do_bit);
+   
+-  if (*ad_reqd && sec_data)
++  if (ad_reqd && sec_data)
+     header->hb4 |= HB4_AD;
+   else
+     header->hb4 &= ~HB4_AD;
+diff --git a/src/rrfilter.c b/src/rrfilter.c
+index ae12261..b26b39f 100644
+--- a/src/rrfilter.c
++++ b/src/rrfilter.c
+@@ -243,7 +243,7 @@ size_t rrfilter(struct dns_header *header, size_t plen, int mode)
+   for (p = rrs[0], i = 1; i < rr_found; i += 2)
+     {
+       unsigned char *start = rrs[i];
+-      unsigned char *end = (i != rr_found - 1) ? rrs[i+1] : ((unsigned char *)(header+1)) + plen;
++      unsigned char *end = (i != rr_found - 1) ? rrs[i+1] : ((unsigned char *)header) + plen;
+       
+       memmove(p, start, end-start);
+       p += end-start;
+-- 
+1.7.10.4
+
diff --git a/src/patches/dnsmasq/026-More_tweaks_in_handling_unknown_DNSSEC_algorithms.patch b/src/patches/dnsmasq/026-More_tweaks_in_handling_unknown_DNSSEC_algorithms.patch
new file mode 100644 (file)
index 0000000..910921b
--- /dev/null
@@ -0,0 +1,262 @@
+From d67ecac59d58f249707d26e38d49c29b552af4d8 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 20 Dec 2015 20:44:23 +0000
+Subject: [PATCH] More tweaks in handling unknown DNSSEC algorithms.
+
+---
+ src/dnssec.c |  128 +++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 63 insertions(+), 65 deletions(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 299ca64..e09f304 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -70,7 +70,17 @@ static char *algo_digest_name(int algo)
+     default: return NULL;
+     }
+ }
+-      
++  
++/* http://www.iana.org/assignments/dnssec-nsec3-parameters/dnssec-nsec3-parameters.xhtml */
++static char *nsec3_digest_name(int digest)
++{
++  switch (digest)
++    {
++    case 1: return "sha1";
++    default: return NULL;
++    }
++}
++ 
+ /* Find pointer to correct hash function in nettle library */
+ static const struct nettle_hash *hash_find(char *name)
+ {
+@@ -667,7 +677,6 @@ static int explore_rrset(struct dns_header *header, size_t plen, int class, int
+   static int rrset_sz = 0, sig_sz = 0; 
+   unsigned char *p;
+   int rrsetidx, sigidx, j, rdlen, res;
+-  int name_labels = count_labels(name); /* For 4035 5.3.2 check */
+   int gotkey = 0;
+   if (!(p = skip_questions(header, plen)))
+@@ -678,7 +687,7 @@ static int explore_rrset(struct dns_header *header, size_t plen, int class, int
+        j != 0; j--) 
+     {
+       unsigned char *pstart, *pdata;
+-      int stype, sclass, algo, type_covered, labels, sig_expiration, sig_inception;
++      int stype, sclass, type_covered;
+       pstart = p;
+       
+@@ -712,12 +721,7 @@ static int explore_rrset(struct dns_header *header, size_t plen, int class, int
+               return 0; /* bad packet */ 
+             
+             GETSHORT(type_covered, p);
+-            algo = *p++;
+-            labels = *p++;
+-            p += 4; /* orig_ttl */
+-            GETLONG(sig_expiration, p);
+-            GETLONG(sig_inception, p);
+-            p += 2; /* key_tag */
++            p += 16; /* algo, labels, orig_ttl, sig_expiration, sig_inception, key_tag */
+             
+             if (gotkey)
+               {
+@@ -749,11 +753,8 @@ static int explore_rrset(struct dns_header *header, size_t plen, int class, int
+                   }
+               }
+                 
+-            /* Don't count signatures for algos we don't support */
+-            if (check_date_range(sig_inception, sig_expiration) &&
+-                labels <= name_labels &&
+-                type_covered == type && 
+-                verify_func(algo))
++            
++            if (type_covered == type)
+               {
+                 if (!expand_workspace(&sigs, &sig_sz, sigidx))
+                   return 0; 
+@@ -795,7 +796,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+                         char *name, char *keyname, char **wildcard_out, struct blockdata *key, int keylen, int algo_in, int keytag_in)
+ {
+   unsigned char *p;
+-  int rdlen, j, name_labels;
++  int rdlen, j, name_labels, sig_expiration, sig_inception;
+   struct crec *crecp = NULL;
+   int algo, labels, orig_ttl, key_tag;
+   u16 *rr_desc = rrfilter_desc(type);
+@@ -828,13 +829,16 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+       algo = *p++;
+       labels = *p++;
+       GETLONG(orig_ttl, p);
+-      p += 8; /* sig_expiration, sig_inception already checked */
++      GETLONG(sig_expiration, p);
++      GETLONG(sig_inception, p);
+       GETSHORT(key_tag, p);
+       
+       if (!extract_name(header, plen, &p, keyname, 1, 0))
+       return STAT_BOGUS;
+-      if (!(hash = hash_find(algo_digest_name(algo))) ||
++      if (!check_date_range(sig_inception, sig_expiration) ||
++        labels > name_labels ||
++        !(hash = hash_find(algo_digest_name(algo))) ||
+         !hash_init(hash, &ctx, &digest))
+       continue;
+       
+@@ -1112,7 +1116,10 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+                     else
+                       {
+                         a.addr.keytag = keytag;
+-                        log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %u");
++                        if (verify_func(algo))
++                          log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %u");
++                        else
++                          log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %u (not supported)");
+                         
+                         recp1->addr.key.keylen = rdlen - 4;
+                         recp1->addr.key.keydata = key;
+@@ -1235,7 +1242,11 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+                 else
+                   {
+                     a.addr.keytag = keytag;
+-                    log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DS keytag %u");
++                    if (hash_find(ds_digest_name(digest)) && verify_func(algo))
++                      log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DS keytag %u");
++                    else
++                      log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DS keytag %u (not supported)");
++                    
+                     crecp->addr.ds.digest = digest;
+                     crecp->addr.ds.keydata = key;
+                     crecp->addr.ds.algo = algo;
+@@ -1660,7 +1671,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+     *nons = 1;
+   
+   /* Look though the NSEC3 records to find the first one with 
+-     an algorithm we support (currently only algo == 1).
++     an algorithm we support.
+      Take the algo, iterations, and salt of that record
+      as the ones we're going to use, and prune any 
+@@ -1674,7 +1685,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+       p += 10; /* type, class, TTL, rdlen */
+       algo = *p++;
+       
+-      if (algo == 1)
++      if ((hash = hash_find(nsec3_digest_name(algo))))
+       break; /* known algo */
+     }
+@@ -1724,10 +1735,6 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+       nsecs[i] = nsec3p;
+     }
+-  /* Algo is checked as 1 above */
+-  if (!(hash = hash_find("sha1")))
+-    return 0;
+-
+   if ((digest_len = hash_name(name, &digest, hash, salt, salt_len, iterations)) == 0)
+     return 0;
+   
+@@ -1843,8 +1850,10 @@ static int prove_non_existence(struct dns_header *header, size_t plen, char *key
+   
+   if (type_found == T_NSEC)
+     return prove_non_existence_nsec(header, plen, nsecset, nsecs_found, daemon->workspacename, keyname, name, qtype, nons);
+-  else
++  else if (type_found == T_NSEC3)
+     return prove_non_existence_nsec3(header, plen, nsecset, nsecs_found, daemon->workspacename, keyname, name, qtype, wildname, nons);
++  else
++    return 0;
+ }
+ /* Check signing status of name.
+@@ -1857,7 +1866,7 @@ static int prove_non_existence(struct dns_header *header, size_t plen, char *key
+ */
+ static int zone_status(char *name, int class, char *keyname, time_t now)
+ {
+-  int secure_ds, name_start = strlen(name);
++  int name_start = strlen(name);
+   struct crec *crecp;
+   char *p;
+   
+@@ -1867,51 +1876,40 @@ static int zone_status(char *name, int class, char *keyname, time_t now)
+       
+       if (!(crecp = cache_find_by_name(NULL, keyname, now, F_DS)))
+       return STAT_NEED_DS;
++      
++       /* F_DNSSECOK misused in DS cache records to non-existance of NS record.
++        F_NEG && !F_DNSSECOK implies that we've proved there's no DS record here,
++        but that's because there's no NS record either, ie this isn't the start
++        of a zone. We only prove that the DNS tree below a node is unsigned when
++        we prove that we're at a zone cut AND there's no DS record. */
++      if (crecp->flags & F_NEG)
++      {
++        if (crecp->flags & F_DNSSECOK)
++          return STAT_INSECURE; /* proved no DS here */
++      }
+       else
+       {
+-        secure_ds = 0;
+-        
++        int gotone = 0;
++
++        /* If all the DS records have digest and/or sig algos we don't support,
++           then the zone is insecure. Note that if an algo
++           appears in the DS, then RRSIGs for that algo MUST
++           exist for each RRset: 4035 para 2.2  So if we find
++           a DS here with digest and sig we can do, we're entitled
++           to assume we can validate the zone and if we can't later,
++           because an RRSIG is missing we return BOGUS.
++        */
+         do 
+           {
+-            if (crecp->uid == (unsigned int)class)
+-              {
+-                /* F_DNSSECOK misused in DS cache records to non-existance of NS record.
+-                   F_NEG && !F_DNSSECOK implies that we've proved there's no DS record here,
+-                   but that's because there's no NS record either, ie this isn't the start
+-                   of a zone. We only prove that the DNS tree below a node is unsigned when
+-                   we prove that we're at a zone cut AND there's no DS record.
+-                */      
+-                if (crecp->flags & F_NEG)
+-                  {
+-                    if (crecp->flags & F_DNSSECOK)
+-                      return STAT_INSECURE; /* proved no DS here */
+-                  }
+-                else if (!hash_find(ds_digest_name(crecp->addr.ds.digest)) || !verify_func(crecp->addr.ds.algo))
+-                  return STAT_INSECURE; /* algo we can't use - insecure */
+-                else
+-                  secure_ds = 1;
+-              }
++            if (crecp->uid == (unsigned int)class &&
++                hash_find(ds_digest_name(crecp->addr.ds.digest)) &&
++                verify_func(crecp->addr.ds.algo))
++              gotone = 1;
+           }
+         while ((crecp = cache_find_by_name(crecp, keyname, now, F_DS)));
+-      }
+-
+-      if (secure_ds)
+-      {
+-        /* We've found only DS records that attest to the DNSKEY RRset in the zone, so we believe
+-           that RRset is good. Furthermore the DNSKEY whose hash is proved by the DS record is
+-           one we can use. However the DNSKEY RRset may contain more than one key and
+-           one of the other keys may use an algorithm we don't support. If that's 
+-           the case the zone is insecure for us. */
+-        
+-        if (!(crecp = cache_find_by_name(NULL, keyname, now, F_DNSKEY)))
+-          return STAT_NEED_KEY;
+-        do 
+-          {
+-            if (crecp->uid == (unsigned int)class && !verify_func(crecp->addr.key.algo))
+-              return STAT_INSECURE;
+-          }
+-        while ((crecp = cache_find_by_name(crecp, keyname, now, F_DNSKEY)));
++        if (!gotone)
++          return STAT_INSECURE;
+       }
+       if (name_start == 0)
+-- 
+1.7.10.4
+
diff --git a/src/patches/dnsmasq/027-Nasty_rare_and_obscure_off-by-one_in_DNSSEC_hostname_cmp.patch b/src/patches/dnsmasq/027-Nasty_rare_and_obscure_off-by-one_in_DNSSEC_hostname_cmp.patch
new file mode 100644 (file)
index 0000000..031339e
--- /dev/null
@@ -0,0 +1,27 @@
+From 3e86d316c4bb406ed813aa5256615c8a95cac6d8 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 20 Dec 2015 20:50:05 +0000
+Subject: [PATCH] Nasty, rare and obscure off-by-one in DNSSEC hostname_cmp().
+
+---
+ src/dnssec.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index e09f304..29848e1 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -1394,8 +1394,8 @@ static int hostname_cmp(const char *a, const char *b)
+       if (sb == b)
+       return 1;
+       
+-      ea = sa--;
+-      eb = sb--;
++      ea = --sa;
++      eb = --sb;
+     }
+ }
+-- 
+1.7.10.4
+
diff --git a/src/patches/dnsmasq/028-Minor_tweak_to_previous_commit.patch b/src/patches/dnsmasq/028-Minor_tweak_to_previous_commit.patch
new file mode 100644 (file)
index 0000000..f3758fc
--- /dev/null
@@ -0,0 +1,39 @@
+From a86fdf437ecc29398f9715ceb5240442a17ac014 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 20 Dec 2015 21:19:20 +0000
+Subject: [PATCH] Minor tweak to previous commit.
+
+---
+ src/dnssec.c |    6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 29848e1..9fa64b6 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -1889,8 +1889,6 @@ static int zone_status(char *name, int class, char *keyname, time_t now)
+       }
+       else
+       {
+-        int gotone = 0;
+-
+         /* If all the DS records have digest and/or sig algos we don't support,
+            then the zone is insecure. Note that if an algo
+            appears in the DS, then RRSIGs for that algo MUST
+@@ -1904,11 +1902,11 @@ static int zone_status(char *name, int class, char *keyname, time_t now)
+             if (crecp->uid == (unsigned int)class &&
+                 hash_find(ds_digest_name(crecp->addr.ds.digest)) &&
+                 verify_func(crecp->addr.ds.algo))
+-              gotone = 1;
++              break;
+           }
+         while ((crecp = cache_find_by_name(crecp, keyname, now, F_DS)));
+-        if (!gotone)
++        if (!crecp)
+           return STAT_INSECURE;
+       }
+-- 
+1.7.10.4
+
diff --git a/src/patches/dnsmasq/029-NSEC3_check_RFC5155_para_8_2.patch b/src/patches/dnsmasq/029-NSEC3_check_RFC5155_para_8_2.patch
new file mode 100644 (file)
index 0000000..33219d2
--- /dev/null
@@ -0,0 +1,39 @@
+From ce5732e84fc46d7f99c152f736cfb4ef5ec98a01 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 20 Dec 2015 21:39:19 +0000
+Subject: [PATCH] NSEC3 check: RFC5155 para 8.2
+
+---
+ src/dnssec.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 9fa64b6..486e422 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -1704,7 +1704,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+   for (i = 0; i < nsec_count; i++)
+     {
+       unsigned char *nsec3p = nsecs[i];
+-      int this_iter;
++      int this_iter, flags;
+       nsecs[i] = NULL; /* Speculative, will be restored if OK. */
+       
+@@ -1716,8 +1716,12 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+       if (*p++ != algo)
+       continue;
+  
+-      p++; /* flags */
++      flags = *p++; /* flags */
+       
++      /* 5155 8.2 */
++      if (flags != 0 && flags != 1)
++      continue;
++
+       GETSHORT(this_iter, p);
+       if (this_iter != iterations)
+       continue;
+-- 
+1.7.10.4
+
diff --git a/src/patches/gcc/gcc-fix-inlining-issues.patch b/src/patches/gcc/gcc-fix-inlining-issues.patch
new file mode 100644 (file)
index 0000000..3c638e2
--- /dev/null
@@ -0,0 +1,1064 @@
+From: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61164
+
+--- trunk/libitm/local_atomic  2015/08/20 17:43:55     227039
++++ trunk/libitm/local_atomic  2015/08/20 17:55:24     227040
+@@ -41,8 +41,7 @@
+ #ifndef _GLIBCXX_ATOMIC
+ #define _GLIBCXX_ATOMIC 1
+-#undef  __always_inline
+-#define __always_inline __attribute__((always_inline))
++#define __libitm_always_inline __attribute__((always_inline))
+ // #pragma GCC system_header
+@@ -74,7 +73,7 @@
+       memory_order_seq_cst
+     } memory_order;
+-  inline __always_inline memory_order
++  inline __libitm_always_inline memory_order
+   __calculate_memory_order(memory_order __m) noexcept
+   {
+     const bool __cond1 = __m == memory_order_release;
+@@ -84,13 +83,13 @@
+     return __mo2;
+   }
+-  inline __always_inline void
++  inline __libitm_always_inline void
+   atomic_thread_fence(memory_order __m) noexcept
+   {
+     __atomic_thread_fence (__m);
+   }
+-  inline __always_inline void
++  inline __libitm_always_inline void
+   atomic_signal_fence(memory_order __m) noexcept
+   {
+     __atomic_thread_fence (__m);
+@@ -280,19 +279,19 @@
+     // Conversion to ATOMIC_FLAG_INIT.
+     atomic_flag(bool __i) noexcept : __atomic_flag_base({ __i }) { }
+-    __always_inline bool
++    __libitm_always_inline bool
+     test_and_set(memory_order __m = memory_order_seq_cst) noexcept
+     {
+       return __atomic_test_and_set (&_M_i, __m);
+     }
+-    __always_inline bool
++    __libitm_always_inline bool
+     test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept
+     {
+       return __atomic_test_and_set (&_M_i, __m);
+     }
+-    __always_inline void
++    __libitm_always_inline void
+     clear(memory_order __m = memory_order_seq_cst) noexcept
+     {
+       // __glibcxx_assert(__m != memory_order_consume);
+@@ -302,7 +301,7 @@
+       __atomic_clear (&_M_i, __m);
+     }
+-    __always_inline void
++    __libitm_always_inline void
+     clear(memory_order __m = memory_order_seq_cst) volatile noexcept
+     {
+       // __glibcxx_assert(__m != memory_order_consume);
+@@ -455,7 +454,7 @@
+       is_lock_free() const volatile noexcept
+       { return __atomic_is_lock_free (sizeof (_M_i), &_M_i); }
+-      __always_inline void
++      __libitm_always_inline void
+       store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept
+       {
+       // __glibcxx_assert(__m != memory_order_acquire);
+@@ -465,7 +464,7 @@
+       __atomic_store_n(&_M_i, __i, __m);
+       }
+-      __always_inline void
++      __libitm_always_inline void
+       store(__int_type __i,
+           memory_order __m = memory_order_seq_cst) volatile noexcept
+       {
+@@ -476,7 +475,7 @@
+       __atomic_store_n(&_M_i, __i, __m);
+       }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       load(memory_order __m = memory_order_seq_cst) const noexcept
+       {
+       // __glibcxx_assert(__m != memory_order_release);
+@@ -485,7 +484,7 @@
+       return __atomic_load_n(&_M_i, __m);
+       }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+       {
+       // __glibcxx_assert(__m != memory_order_release);
+@@ -494,21 +493,21 @@
+       return __atomic_load_n(&_M_i, __m);
+       }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       exchange(__int_type __i,
+              memory_order __m = memory_order_seq_cst) noexcept
+       {
+       return __atomic_exchange_n(&_M_i, __i, __m);
+       }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       exchange(__int_type __i,
+              memory_order __m = memory_order_seq_cst) volatile noexcept
+       {
+       return __atomic_exchange_n(&_M_i, __i, __m);
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+                           memory_order __m1, memory_order __m2) noexcept
+       {
+@@ -519,7 +518,7 @@
+       return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2);
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+                           memory_order __m1,
+                           memory_order __m2) volatile noexcept
+@@ -531,7 +530,7 @@
+       return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2);
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+                           memory_order __m = memory_order_seq_cst) noexcept
+       {
+@@ -539,7 +538,7 @@
+                                    __calculate_memory_order(__m));
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+                  memory_order __m = memory_order_seq_cst) volatile noexcept
+       {
+@@ -547,7 +546,7 @@
+                                    __calculate_memory_order(__m));
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+                             memory_order __m1, memory_order __m2) noexcept
+       {
+@@ -558,7 +557,7 @@
+       return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+                             memory_order __m1,
+                             memory_order __m2) volatile noexcept
+@@ -570,7 +569,7 @@
+       return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+                             memory_order __m = memory_order_seq_cst) noexcept
+       {
+@@ -578,7 +577,7 @@
+                                      __calculate_memory_order(__m));
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+                memory_order __m = memory_order_seq_cst) volatile noexcept
+       {
+@@ -586,52 +585,52 @@
+                                      __calculate_memory_order(__m));
+       }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       fetch_add(__int_type __i,
+               memory_order __m = memory_order_seq_cst) noexcept
+       { return __atomic_fetch_add(&_M_i, __i, __m); }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       fetch_add(__int_type __i,
+               memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return __atomic_fetch_add(&_M_i, __i, __m); }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       fetch_sub(__int_type __i,
+               memory_order __m = memory_order_seq_cst) noexcept
+       { return __atomic_fetch_sub(&_M_i, __i, __m); }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       fetch_sub(__int_type __i,
+               memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return __atomic_fetch_sub(&_M_i, __i, __m); }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       fetch_and(__int_type __i,
+               memory_order __m = memory_order_seq_cst) noexcept
+       { return __atomic_fetch_and(&_M_i, __i, __m); }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       fetch_and(__int_type __i,
+               memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return __atomic_fetch_and(&_M_i, __i, __m); }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       fetch_or(__int_type __i,
+              memory_order __m = memory_order_seq_cst) noexcept
+       { return __atomic_fetch_or(&_M_i, __i, __m); }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       fetch_or(__int_type __i,
+              memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return __atomic_fetch_or(&_M_i, __i, __m); }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       fetch_xor(__int_type __i,
+               memory_order __m = memory_order_seq_cst) noexcept
+       { return __atomic_fetch_xor(&_M_i, __i, __m); }
+-      __always_inline __int_type
++      __libitm_always_inline __int_type
+       fetch_xor(__int_type __i,
+               memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return __atomic_fetch_xor(&_M_i, __i, __m); }
+@@ -733,7 +732,7 @@
+       is_lock_free() const volatile noexcept
+       { return __atomic_is_lock_free (sizeof (_M_p), &_M_p); }
+-      __always_inline void
++      __libitm_always_inline void
+       store(__pointer_type __p,
+           memory_order __m = memory_order_seq_cst) noexcept
+       {
+@@ -744,7 +743,7 @@
+       __atomic_store_n(&_M_p, __p, __m);
+       }
+-      __always_inline void
++      __libitm_always_inline void
+       store(__pointer_type __p,
+           memory_order __m = memory_order_seq_cst) volatile noexcept
+       {
+@@ -755,7 +754,7 @@
+       __atomic_store_n(&_M_p, __p, __m);
+       }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       load(memory_order __m = memory_order_seq_cst) const noexcept
+       {
+       // __glibcxx_assert(__m != memory_order_release);
+@@ -764,7 +763,7 @@
+       return __atomic_load_n(&_M_p, __m);
+       }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+       {
+       // __glibcxx_assert(__m != memory_order_release);
+@@ -773,21 +772,21 @@
+       return __atomic_load_n(&_M_p, __m);
+       }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       exchange(__pointer_type __p,
+              memory_order __m = memory_order_seq_cst) noexcept
+       {
+       return __atomic_exchange_n(&_M_p, __p, __m);
+       }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       exchange(__pointer_type __p,
+              memory_order __m = memory_order_seq_cst) volatile noexcept
+       {
+       return __atomic_exchange_n(&_M_p, __p, __m);
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+                             memory_order __m1,
+                             memory_order __m2) noexcept
+@@ -799,7 +798,7 @@
+       return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+                             memory_order __m1,
+                             memory_order __m2) volatile noexcept
+@@ -811,22 +810,22 @@
+       return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
+       }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       fetch_add(ptrdiff_t __d,
+               memory_order __m = memory_order_seq_cst) noexcept
+       { return __atomic_fetch_add(&_M_p, __d, __m); }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       fetch_add(ptrdiff_t __d,
+               memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return __atomic_fetch_add(&_M_p, __d, __m); }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       fetch_sub(ptrdiff_t __d,
+               memory_order __m = memory_order_seq_cst) noexcept
+       { return __atomic_fetch_sub(&_M_p, __d, __m); }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       fetch_sub(ptrdiff_t __d,
+               memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return __atomic_fetch_sub(&_M_p, __d, __m); }
+@@ -870,67 +869,67 @@
+     bool
+     is_lock_free() const volatile noexcept { return _M_base.is_lock_free(); }
+-    __always_inline void
++    __libitm_always_inline void
+     store(bool __i, memory_order __m = memory_order_seq_cst) noexcept
+     { _M_base.store(__i, __m); }
+-    __always_inline void
++    __libitm_always_inline void
+     store(bool __i, memory_order __m = memory_order_seq_cst) volatile noexcept
+     { _M_base.store(__i, __m); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     load(memory_order __m = memory_order_seq_cst) const noexcept
+     { return _M_base.load(__m); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+     { return _M_base.load(__m); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     exchange(bool __i, memory_order __m = memory_order_seq_cst) noexcept
+     { return _M_base.exchange(__i, __m); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     exchange(bool __i,
+            memory_order __m = memory_order_seq_cst) volatile noexcept
+     { return _M_base.exchange(__i, __m); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
+                         memory_order __m2) noexcept
+     { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     compare_exchange_weak(bool& __i1, bool __i2, memory_order __m1,
+                         memory_order __m2) volatile noexcept
+     { return _M_base.compare_exchange_weak(__i1, __i2, __m1, __m2); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     compare_exchange_weak(bool& __i1, bool __i2,
+                         memory_order __m = memory_order_seq_cst) noexcept
+     { return _M_base.compare_exchange_weak(__i1, __i2, __m); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     compare_exchange_weak(bool& __i1, bool __i2,
+                    memory_order __m = memory_order_seq_cst) volatile noexcept
+     { return _M_base.compare_exchange_weak(__i1, __i2, __m); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
+                           memory_order __m2) noexcept
+     { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     compare_exchange_strong(bool& __i1, bool __i2, memory_order __m1,
+                           memory_order __m2) volatile noexcept
+     { return _M_base.compare_exchange_strong(__i1, __i2, __m1, __m2); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     compare_exchange_strong(bool& __i1, bool __i2,
+                           memory_order __m = memory_order_seq_cst) noexcept
+     { return _M_base.compare_exchange_strong(__i1, __i2, __m); }
+-    __always_inline bool
++    __libitm_always_inline bool
+     compare_exchange_strong(bool& __i1, bool __i2,
+                   memory_order __m = memory_order_seq_cst) volatile noexcept
+     { return _M_base.compare_exchange_strong(__i1, __i2, __m); }
+@@ -980,11 +979,11 @@
+       store(_Tp __i, memory_order _m = memory_order_seq_cst) noexcept
+       { __atomic_store(&_M_i, &__i, _m); }
+-      __always_inline void
++      __libitm_always_inline void
+       store(_Tp __i, memory_order _m = memory_order_seq_cst) volatile noexcept
+       { __atomic_store(&_M_i, &__i, _m); }
+-      __always_inline _Tp
++      __libitm_always_inline _Tp
+       load(memory_order _m = memory_order_seq_cst) const noexcept
+       { 
+         _Tp tmp;
+@@ -992,7 +991,7 @@
+       return tmp;
+       }
+-      __always_inline _Tp
++      __libitm_always_inline _Tp
+       load(memory_order _m = memory_order_seq_cst) const volatile noexcept
+       { 
+         _Tp tmp;
+@@ -1000,7 +999,7 @@
+       return tmp;
+       }
+-      __always_inline _Tp
++      __libitm_always_inline _Tp
+       exchange(_Tp __i, memory_order _m = memory_order_seq_cst) noexcept
+       { 
+         _Tp tmp;
+@@ -1008,7 +1007,7 @@
+       return tmp;
+       }
+-      __always_inline _Tp
++      __libitm_always_inline _Tp
+       exchange(_Tp __i, 
+              memory_order _m = memory_order_seq_cst) volatile noexcept
+       { 
+@@ -1017,50 +1016,50 @@
+       return tmp;
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s, 
+                           memory_order __f) noexcept
+       {
+       return __atomic_compare_exchange(&_M_i, &__e, &__i, true, __s, __f); 
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(_Tp& __e, _Tp __i, memory_order __s, 
+                           memory_order __f) volatile noexcept
+       {
+       return __atomic_compare_exchange(&_M_i, &__e, &__i, true, __s, __f); 
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(_Tp& __e, _Tp __i,
+                           memory_order __m = memory_order_seq_cst) noexcept
+       { return compare_exchange_weak(__e, __i, __m, __m); }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(_Tp& __e, _Tp __i,
+                    memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return compare_exchange_weak(__e, __i, __m, __m); }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s, 
+                             memory_order __f) noexcept
+       {
+       return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f); 
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(_Tp& __e, _Tp __i, memory_order __s, 
+                             memory_order __f) volatile noexcept
+       {
+       return __atomic_compare_exchange(&_M_i, &__e, &__i, false, __s, __f); 
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(_Tp& __e, _Tp __i,
+                              memory_order __m = memory_order_seq_cst) noexcept
+       { return compare_exchange_strong(__e, __i, __m, __m); }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(_Tp& __e, _Tp __i,
+                    memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return compare_exchange_strong(__e, __i, __m, __m); }
+@@ -1153,46 +1152,46 @@
+       is_lock_free() const volatile noexcept
+       { return _M_b.is_lock_free(); }
+-      __always_inline void
++      __libitm_always_inline void
+       store(__pointer_type __p,
+           memory_order __m = memory_order_seq_cst) noexcept
+       { return _M_b.store(__p, __m); }
+-      __always_inline void
++      __libitm_always_inline void
+       store(__pointer_type __p,
+           memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return _M_b.store(__p, __m); }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       load(memory_order __m = memory_order_seq_cst) const noexcept
+       { return _M_b.load(__m); }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+       { return _M_b.load(__m); }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       exchange(__pointer_type __p,
+              memory_order __m = memory_order_seq_cst) noexcept
+       { return _M_b.exchange(__p, __m); }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       exchange(__pointer_type __p,
+              memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return _M_b.exchange(__p, __m); }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
+                           memory_order __m1, memory_order __m2) noexcept
+       { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
+                           memory_order __m1,
+                           memory_order __m2) volatile noexcept
+       { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
+                           memory_order __m = memory_order_seq_cst) noexcept
+       {
+@@ -1200,7 +1199,7 @@
+                                    __calculate_memory_order(__m));
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_weak(__pointer_type& __p1, __pointer_type __p2,
+                   memory_order __m = memory_order_seq_cst) volatile noexcept
+       {
+@@ -1208,18 +1207,18 @@
+                                    __calculate_memory_order(__m));
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+                             memory_order __m1, memory_order __m2) noexcept
+       { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+                             memory_order __m1,
+                             memory_order __m2) volatile noexcept
+       { return _M_b.compare_exchange_strong(__p1, __p2, __m1, __m2); }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+                             memory_order __m = memory_order_seq_cst) noexcept
+       {
+@@ -1227,7 +1226,7 @@
+                                           __calculate_memory_order(__m));
+       }
+-      __always_inline bool
++      __libitm_always_inline bool
+       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+                   memory_order __m = memory_order_seq_cst) volatile noexcept
+       {
+@@ -1235,22 +1234,22 @@
+                                           __calculate_memory_order(__m));
+       }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       fetch_add(ptrdiff_t __d,
+               memory_order __m = memory_order_seq_cst) noexcept
+       { return _M_b.fetch_add(__d, __m); }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       fetch_add(ptrdiff_t __d,
+               memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return _M_b.fetch_add(__d, __m); }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       fetch_sub(ptrdiff_t __d,
+               memory_order __m = memory_order_seq_cst) noexcept
+       { return _M_b.fetch_sub(__d, __m); }
+-      __always_inline __pointer_type
++      __libitm_always_inline __pointer_type
+       fetch_sub(ptrdiff_t __d,
+               memory_order __m = memory_order_seq_cst) volatile noexcept
+       { return _M_b.fetch_sub(__d, __m); }
+@@ -1544,98 +1543,98 @@
+   // Function definitions, atomic_flag operations.
+-  inline __always_inline bool
++  inline __libitm_always_inline bool
+   atomic_flag_test_and_set_explicit(atomic_flag* __a,
+                                   memory_order __m) noexcept
+   { return __a->test_and_set(__m); }
+-  inline __always_inline bool
++  inline __libitm_always_inline bool
+   atomic_flag_test_and_set_explicit(volatile atomic_flag* __a,
+                                   memory_order __m) noexcept
+   { return __a->test_and_set(__m); }
+-  inline __always_inline void
++  inline __libitm_always_inline void
+   atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m) noexcept
+   { __a->clear(__m); }
+-  inline __always_inline void
++  inline __libitm_always_inline void
+   atomic_flag_clear_explicit(volatile atomic_flag* __a,
+                            memory_order __m) noexcept
+   { __a->clear(__m); }
+-  inline __always_inline bool
++  inline __libitm_always_inline bool
+   atomic_flag_test_and_set(atomic_flag* __a) noexcept
+   { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }
+-  inline __always_inline bool
++  inline __libitm_always_inline bool
+   atomic_flag_test_and_set(volatile atomic_flag* __a) noexcept
+   { return atomic_flag_test_and_set_explicit(__a, memory_order_seq_cst); }
+-  inline __always_inline void
++  inline __libitm_always_inline void
+   atomic_flag_clear(atomic_flag* __a) noexcept
+   { atomic_flag_clear_explicit(__a, memory_order_seq_cst); }
+-  inline __always_inline void
++  inline __libitm_always_inline void
+   atomic_flag_clear(volatile atomic_flag* __a) noexcept
+   { atomic_flag_clear_explicit(__a, memory_order_seq_cst); }
+   // Function templates generally applicable to atomic types.
+   template<typename _ITp>
+-    __always_inline bool
++    __libitm_always_inline bool
+     atomic_is_lock_free(const atomic<_ITp>* __a) noexcept
+     { return __a->is_lock_free(); }
+   template<typename _ITp>
+-    __always_inline bool
++    __libitm_always_inline bool
+     atomic_is_lock_free(const volatile atomic<_ITp>* __a) noexcept
+     { return __a->is_lock_free(); }
+   template<typename _ITp>
+-    __always_inline void
++    __libitm_always_inline void
+     atomic_init(atomic<_ITp>* __a, _ITp __i) noexcept;
+   template<typename _ITp>
+-    __always_inline void
++    __libitm_always_inline void
+     atomic_init(volatile atomic<_ITp>* __a, _ITp __i) noexcept;
+   template<typename _ITp>
+-    __always_inline void
++    __libitm_always_inline void
+     atomic_store_explicit(atomic<_ITp>* __a, _ITp __i,
+                         memory_order __m) noexcept
+     { __a->store(__i, __m); }
+   template<typename _ITp>
+-    __always_inline void
++    __libitm_always_inline void
+     atomic_store_explicit(volatile atomic<_ITp>* __a, _ITp __i,
+                         memory_order __m) noexcept
+     { __a->store(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_load_explicit(const atomic<_ITp>* __a, memory_order __m) noexcept
+     { return __a->load(__m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_load_explicit(const volatile atomic<_ITp>* __a,
+                        memory_order __m) noexcept
+     { return __a->load(__m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_exchange_explicit(atomic<_ITp>* __a, _ITp __i,
+                            memory_order __m) noexcept
+     { return __a->exchange(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_exchange_explicit(volatile atomic<_ITp>* __a, _ITp __i,
+                            memory_order __m) noexcept
+     { return __a->exchange(__i, __m); }
+   template<typename _ITp>
+-    __always_inline bool
++    __libitm_always_inline bool
+     atomic_compare_exchange_weak_explicit(atomic<_ITp>* __a,
+                                         _ITp* __i1, _ITp __i2,
+                                         memory_order __m1,
+@@ -1643,7 +1642,7 @@
+     { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }
+   template<typename _ITp>
+-    __always_inline bool
++    __libitm_always_inline bool
+     atomic_compare_exchange_weak_explicit(volatile atomic<_ITp>* __a,
+                                         _ITp* __i1, _ITp __i2,
+                                         memory_order __m1,
+@@ -1651,7 +1650,7 @@
+     { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); }
+   template<typename _ITp>
+-    __always_inline bool
++    __libitm_always_inline bool
+     atomic_compare_exchange_strong_explicit(atomic<_ITp>* __a,
+                                           _ITp* __i1, _ITp __i2,
+                                           memory_order __m1,
+@@ -1659,7 +1658,7 @@
+     { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); }
+   template<typename _ITp>
+-    __always_inline bool
++    __libitm_always_inline bool
+     atomic_compare_exchange_strong_explicit(volatile atomic<_ITp>* __a,
+                                           _ITp* __i1, _ITp __i2,
+                                           memory_order __m1,
+@@ -1668,37 +1667,37 @@
+   template<typename _ITp>
+-    __always_inline void
++    __libitm_always_inline void
+     atomic_store(atomic<_ITp>* __a, _ITp __i) noexcept
+     { atomic_store_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline void
++    __libitm_always_inline void
+     atomic_store(volatile atomic<_ITp>* __a, _ITp __i) noexcept
+     { atomic_store_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_load(const atomic<_ITp>* __a) noexcept
+     { return atomic_load_explicit(__a, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_load(const volatile atomic<_ITp>* __a) noexcept
+     { return atomic_load_explicit(__a, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_exchange(atomic<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_exchange(volatile atomic<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline bool
++    __libitm_always_inline bool
+     atomic_compare_exchange_weak(atomic<_ITp>* __a,
+                                _ITp* __i1, _ITp __i2) noexcept
+     {
+@@ -1708,7 +1707,7 @@
+     }
+   template<typename _ITp>
+-    __always_inline bool
++    __libitm_always_inline bool
+     atomic_compare_exchange_weak(volatile atomic<_ITp>* __a,
+                                _ITp* __i1, _ITp __i2) noexcept
+     {
+@@ -1718,7 +1717,7 @@
+     }
+   template<typename _ITp>
+-    __always_inline bool
++    __libitm_always_inline bool
+     atomic_compare_exchange_strong(atomic<_ITp>* __a,
+                                  _ITp* __i1, _ITp __i2) noexcept
+     {
+@@ -1728,7 +1727,7 @@
+     }
+   template<typename _ITp>
+-    __always_inline bool
++    __libitm_always_inline bool
+     atomic_compare_exchange_strong(volatile atomic<_ITp>* __a,
+                                  _ITp* __i1, _ITp __i2) noexcept
+     {
+@@ -1742,158 +1741,158 @@
+   // intergral types as specified in the standard, excluding address
+   // types.
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_add_explicit(__atomic_base<_ITp>* __a, _ITp __i,
+                             memory_order __m) noexcept
+     { return __a->fetch_add(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_add_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
+                             memory_order __m) noexcept
+     { return __a->fetch_add(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_sub_explicit(__atomic_base<_ITp>* __a, _ITp __i,
+                             memory_order __m) noexcept
+     { return __a->fetch_sub(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_sub_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
+                             memory_order __m) noexcept
+     { return __a->fetch_sub(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_and_explicit(__atomic_base<_ITp>* __a, _ITp __i,
+                             memory_order __m) noexcept
+     { return __a->fetch_and(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_and_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
+                             memory_order __m) noexcept
+     { return __a->fetch_and(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_or_explicit(__atomic_base<_ITp>* __a, _ITp __i,
+                            memory_order __m) noexcept
+     { return __a->fetch_or(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_or_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
+                            memory_order __m) noexcept
+     { return __a->fetch_or(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_xor_explicit(__atomic_base<_ITp>* __a, _ITp __i,
+                             memory_order __m) noexcept
+     { return __a->fetch_xor(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_xor_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i,
+                             memory_order __m) noexcept
+     { return __a->fetch_xor(__i, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_add(__atomic_base<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_add(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_sub(__atomic_base<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_sub(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_and(__atomic_base<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_and(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_or(__atomic_base<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_or(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_xor(__atomic_base<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
+   template<typename _ITp>
+-    __always_inline _ITp
++    __libitm_always_inline _ITp
+     atomic_fetch_xor(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
+     { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
+   // Partial specializations for pointers.
+   template<typename _ITp>
+-    __always_inline _ITp*
++    __libitm_always_inline _ITp*
+     atomic_fetch_add_explicit(atomic<_ITp*>* __a, ptrdiff_t __d,
+                             memory_order __m) noexcept
+     { return __a->fetch_add(__d, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp*
++    __libitm_always_inline _ITp*
+     atomic_fetch_add_explicit(volatile atomic<_ITp*>* __a, ptrdiff_t __d,
+                             memory_order __m) noexcept
+     { return __a->fetch_add(__d, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp*
++    __libitm_always_inline _ITp*
+     atomic_fetch_add(volatile atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
+     { return __a->fetch_add(__d); }
+   template<typename _ITp>
+-    __always_inline _ITp*
++    __libitm_always_inline _ITp*
+     atomic_fetch_add(atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
+     { return __a->fetch_add(__d); }
+   template<typename _ITp>
+-    __always_inline _ITp*
++    __libitm_always_inline _ITp*
+     atomic_fetch_sub_explicit(volatile atomic<_ITp*>* __a,
+                             ptrdiff_t __d, memory_order __m) noexcept
+     { return __a->fetch_sub(__d, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp*
++    __libitm_always_inline _ITp*
+     atomic_fetch_sub_explicit(atomic<_ITp*>* __a, ptrdiff_t __d,
+                             memory_order __m) noexcept
+     { return __a->fetch_sub(__d, __m); }
+   template<typename _ITp>
+-    __always_inline _ITp*
++    __libitm_always_inline _ITp*
+     atomic_fetch_sub(volatile atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
+     { return __a->fetch_sub(__d); }
+   template<typename _ITp>
+-    __always_inline _ITp*
++    __libitm_always_inline _ITp*
+     atomic_fetch_sub(atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
+     { return __a->fetch_sub(__d); }
+   // @} group atomics
diff --git a/src/patches/gcc/gcc44-build-id.patch b/src/patches/gcc/gcc44-build-id.patch
deleted file mode 100644 (file)
index f76f939..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-2007-07-22  Roland McGrath  <roland@redhat.com>
-
-       * config/rs6000/sysv4.h (LINK_EH_SPEC): Add --build-id for
-       non-relocatable link.
-       * config/linux.h (LINK_EH_SPEC): Likewise.
-       * config/alpha/elf.h (LINK_EH_SPEC): Likewise.
-       * config/ia64/linux.h (LINK_EH_SPEC): Likewise.
-
---- gcc/config/rs6000/sysv4.h.~1~
-+++ gcc/config/rs6000/sysv4.h
-@@ -906,7 +906,7 @@ extern int fixuplabelno;
-   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
- #if defined(HAVE_LD_EH_FRAME_HDR)
--# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
-+# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
- #endif
- #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
---- gcc/config/linux.h.~1~
-+++ gcc/config/linux.h
-@@ -85,7 +85,7 @@ Boston, MA 02110-1301, USA.  */
-     } while (0)
- #if defined(HAVE_LD_EH_FRAME_HDR)
--#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
-+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
- #endif
- /* Define this so we can compile MS code for use with WINE.  */
---- gcc/config/alpha/elf.h.~1~
-+++ gcc/config/alpha/elf.h
-@@ -421,7 +421,7 @@ extern int alpha_this_gpdisp_sequence_nu
-    I imagine that other systems will catch up.  In the meantime, it
-    doesn't harm to make sure that the data exists to be used later.  */
- #if defined(HAVE_LD_EH_FRAME_HDR)
--#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
-+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
- #endif
- /* A C statement (sans semicolon) to output to the stdio stream STREAM
---- gcc/config/ia64/linux.h.~1~
-+++ gcc/config/ia64/linux.h
-@@ -56,7 +56,7 @@ do {                                         \
-    Signalize that because we have fde-glibc, we don't need all C shared libs
-    linked against -lgcc_s.  */
- #undef LINK_EH_SPEC
--#define LINK_EH_SPEC ""
-+#define LINK_EH_SPEC "%{!r:--build-id} "
- #define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h"
diff --git a/src/patches/gcc/gcc44-c++-builtin-redecl.patch b/src/patches/gcc/gcc44-c++-builtin-redecl.patch
deleted file mode 100644 (file)
index 1f36f1f..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-2007-10-02  Jakub Jelinek  <jakub@redhat.com>
-
-       * decl.c (duplicate_decls): When redeclaring a builtin function,
-       keep the merged decl builtin whenever types match, even if new
-       decl defines a function.
-
-       * gcc.dg/builtins-65.c: New test.
-       * g++.dg/ext/builtin10.C: New test.
-
---- gcc/cp/decl.c.jj   2007-10-01 22:11:09.000000000 +0200
-+++ gcc/cp/decl.c      2007-10-02 11:39:46.000000000 +0200
-@@ -2001,23 +2001,21 @@ duplicate_decls (tree newdecl, tree oldd
-         DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
-         DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
-       }
-+      /* If redeclaring a builtin function, it stays built in.  */
-+      if (types_match && DECL_BUILT_IN (olddecl))
-+      {
-+        DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
-+        DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
-+        /* If we're keeping the built-in definition, keep the rtl,
-+           regardless of declaration matches.  */
-+        COPY_DECL_RTL (olddecl, newdecl);
-+      }
-       if (new_defines_function)
-       /* If defining a function declared with other language
-          linkage, use the previously declared language linkage.  */
-       SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
-       else if (types_match)
-       {
--        /* If redeclaring a builtin function, and not a definition,
--           it stays built in.  */
--        if (DECL_BUILT_IN (olddecl))
--          {
--            DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
--            DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
--            /* If we're keeping the built-in definition, keep the rtl,
--               regardless of declaration matches.  */
--            COPY_DECL_RTL (olddecl, newdecl);
--          }
--
-         DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
-         /* Don't clear out the arguments if we're just redeclaring a
-            function.  */
---- gcc/testsuite/gcc.dg/builtins-65.c.jj      2007-10-02 11:23:51.000000000 +0200
-+++ gcc/testsuite/gcc.dg/builtins-65.c 2007-10-02 11:24:12.000000000 +0200
-@@ -0,0 +1,25 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2" } */
-+
-+typedef __SIZE_TYPE__ size_t;
-+extern void __chk_fail (void);
-+extern int snprintf (char *, size_t, const char *, ...);
-+extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...)
-+{
-+  if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b)
-+    __chk_fail ();
-+  return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ());
-+}
-+extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf");
-+
-+char buf[10];
-+
-+int
-+main (void)
-+{
-+  snprintf (buf, 10, "%d%d\n", 10, 10);
-+  return 0;
-+}
-+
-+/* { dg-final { scan-assembler "mysnprintf" } } */
-+/* { dg-final { scan-assembler-not "__chk_fail" } } */
---- gcc/testsuite/g++.dg/ext/builtin10.C.jj    2007-10-02 11:19:45.000000000 +0200
-+++ gcc/testsuite/g++.dg/ext/builtin10.C       2007-10-02 11:23:26.000000000 +0200
-@@ -0,0 +1,27 @@
-+// { dg-do compile }
-+// { dg-options "-O2" }
-+
-+typedef __SIZE_TYPE__ size_t;
-+extern "C" {
-+extern void __chk_fail (void);
-+extern int snprintf (char *, size_t, const char *, ...);
-+extern inline __attribute__((gnu_inline, always_inline)) int snprintf (char *a, size_t b, const char *fmt, ...)
-+{
-+  if (__builtin_object_size (a, 0) != -1UL && __builtin_object_size (a, 0) < b)
-+    __chk_fail ();
-+  return __builtin_snprintf (a, b, fmt, __builtin_va_arg_pack ());
-+}
-+extern int snprintf (char *, size_t, const char *, ...) __asm ("mysnprintf");
-+}
-+
-+char buf[10];
-+
-+int
-+main (void)
-+{
-+  snprintf (buf, 10, "%d%d\n", 10, 10);
-+  return 0;
-+}
-+
-+// { dg-final { scan-assembler "mysnprintf" } }
-+// { dg-final { scan-assembler-not "__chk_fail" } }
diff --git a/src/patches/gcc/gcc44-i386-libgomp.patch b/src/patches/gcc/gcc44-i386-libgomp.patch
deleted file mode 100644 (file)
index 5d1eea8..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-Build i386.rpm libgomp and libsupc++.a(guard.o) as i486+, pre-i486
-hardware isn't supported because NPTL doesn't support it anyway.
-
---- libgomp/configure.tgt.jj   2008-01-10 20:53:48.000000000 +0100
-+++ libgomp/configure.tgt      2008-03-27 12:44:51.000000000 +0100
-@@ -44,14 +44,14 @@ if test $enable_linux_futex = yes; then
-       ;;
-     # Note that bare i386 is not included here.  We need cmpxchg.
--    i[456]86-*-linux*)
-+    i[3456]86-*-linux*)
-       config_path="linux/x86 linux posix"
-       case " ${CC} ${CFLAGS} " in
-         *" -m64 "*)
-           ;;
-         *)
-           if test -z "$with_arch"; then
--            XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
-+            XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
-           fi
-       esac
-       ;;
-@@ -63,7 +63,7 @@ if test $enable_linux_futex = yes; then
-       config_path="linux/x86 linux posix"
-       case " ${CC} ${CFLAGS} " in
-         *" -m32 "*)
--          XCFLAGS="${XCFLAGS} -march=i486 -mtune=i686"
-+          XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
-           ;;
-       esac
-       ;;
---- libstdc++-v3/libsupc++/guard.cc.jj 2008-03-01 00:58:24.000000000 +0100
-+++ libstdc++-v3/libsupc++/guard.cc    2008-03-27 14:08:44.000000000 +0100
-@@ -35,6 +35,27 @@
- #include <new>
- #include <ext/atomicity.h>
- #include <ext/concurrence.h>
-+#if defined __i386__ && !defined _GLIBCXX_ATOMIC_BUILTINS_4
-+# define _GLIBCXX_ATOMIC_BUILTINS_4 1
-+# define __sync_val_compare_and_swap(a, b, c) \
-+  ({                                                          \
-+     typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1];       \
-+     int sltas;                                                       \
-+     __asm __volatile ("lock; cmpxchgl %3, (%1)"              \
-+                     : "=a" (sltas)                           \
-+                     : "r" (a), "0" (b), "r" (c) : "memory"); \
-+     sltas;                                                   \
-+   })
-+# define __sync_lock_test_and_set(a, b) \
-+  ({                                                          \
-+     typedef char sltast[sizeof (*a) == sizeof (int) ? 1 : -1];       \
-+     int sltas;                                                       \
-+     __asm __volatile ("xchgl (%1), %0"                               \
-+                     : "=r" (sltas)                           \
-+                     : "r" (a), "0" (b) : "memory");          \
-+     sltas;                                                   \
-+   })
-+#endif
- #if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \
-     && defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_HAVE_LINUX_FUTEX)
- # include <climits>
diff --git a/src/patches/gcc/gcc44-no-add-needed.patch b/src/patches/gcc/gcc44-no-add-needed.patch
deleted file mode 100644 (file)
index 4570c0c..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-2010-02-08  Roland McGrath  <roland@redhat.com>
-
-       * config/rs6000/sysv4.h (LINK_EH_SPEC): Pass --no-add-needed to the
-       linker.
-       * config/linux.h (LINK_EH_SPEC): Likewise.
-       * config/alpha/elf.h (LINK_EH_SPEC): Likewise.
-       * config/ia64/linux.h (LINK_EH_SPEC): Likewise.
-
---- gcc/config/alpha/elf.h.~1~
-+++ gcc/config/alpha/elf.h
-@@ -421,7 +421,7 @@ extern int alpha_this_gpdisp_sequence_nu
-    I imagine that other systems will catch up.  In the meantime, it
-    doesn't harm to make sure that the data exists to be used later.  */
- #if defined(HAVE_LD_EH_FRAME_HDR)
--#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
-+#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} %{!r:--build-id} "
- #endif
- /* A C statement (sans semicolon) to output to the stdio stream STREAM
---- gcc/config/ia64/linux.h.~1~
-+++ gcc/config/ia64/linux.h
-@@ -58,7 +58,7 @@ do {                                         \
-    Signalize that because we have fde-glibc, we don't need all C shared libs
-    linked against -lgcc_s.  */
- #undef LINK_EH_SPEC
--#define LINK_EH_SPEC "%{!r:--build-id} "
-+#define LINK_EH_SPEC "--no-add-needed %{!r:--build-id} "
- #define MD_UNWIND_SUPPORT "config/ia64/linux-unwind.h"
---- gcc/config/linux.h.~1~
-+++ gcc/config/linux.h
-@@ -89,7 +89,7 @@ see the files COPYING3 and COPYING.RUNTI
-     } while (0)
- #if defined(HAVE_LD_EH_FRAME_HDR)
--#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
-+#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} %{!r:--build-id} "
- #endif
- /* Define this so we can compile MS code for use with WINE.  */
---- gcc/config/rs6000/sysv4.h.~1~
-+++ gcc/config/rs6000/sysv4.h
-@@ -917,7 +917,7 @@ SVR4_ASM_SPEC \
-   %{!dynamic-linker:-dynamic-linker " LINUX_DYNAMIC_LINKER "}}}"
- #if defined(HAVE_LD_EH_FRAME_HDR)
--# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} %{!r:--build-id} "
-+# define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} %{!r:--build-id} "
- #endif
- #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
diff --git a/src/patches/gcc/gcc44-pr33763.patch b/src/patches/gcc/gcc44-pr33763.patch
deleted file mode 100644 (file)
index 86c8ac7..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-2007-11-06  Jakub Jelinek  <jakub@redhat.com>
-
-       PR tree-optimization/33763
-       * gcc.dg/pr33763.c: New test.
-       * g++.dg/opt/inline13.C: New test.
-
-2007-11-06  Jan Hubicka  <jh@suse.cz>
-
-       PR tree-optimization/33763
-       * tree-inline.c (expand_call_inline): Silently ignore always_inline
-       attribute for redefined extern inline functions.
-
---- gcc/tree-inline.c.jj       2007-11-06 09:29:04.000000000 +0100
-+++ gcc/tree-inline.c  2007-11-06 16:19:12.000000000 +0100
-@@ -3157,6 +3157,12 @@ expand_call_inline (basic_block bb, gimp
-       goto egress;
-       if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn))
-+      /* For extern inline functions that get redefined we always
-+         silently ignored alway_inline flag. Better behaviour would
-+         be to be able to keep both bodies and use extern inline body
-+         for inlining, but we can't do that because frontends overwrite
-+         the body.  */
-+        && !cg_edge->callee->local.redefined_extern_inline
-         /* Avoid warnings during early inline pass. */
-         && cgraph_global_info_ready)
-       {
---- gcc/testsuite/gcc.dg/pr33763.c.jj  2007-11-06 16:19:12.000000000 +0100
-+++ gcc/testsuite/gcc.dg/pr33763.c     2007-11-06 16:19:12.000000000 +0100
-@@ -0,0 +1,60 @@
-+/* PR tree-optimization/33763 */
-+/* { dg-do compile } */
-+/* { dg-options "-O2" } */
-+
-+typedef struct
-+{
-+  void *a;
-+  void *b;
-+} T;
-+extern void *foo (const char *, const char *);
-+extern void *bar (void *, const char *, T);
-+extern int baz (const char *, int);
-+
-+extern inline __attribute__ ((always_inline, gnu_inline)) int
-+baz (const char *x, int y)
-+{
-+  return 2;
-+}
-+
-+int
-+baz (const char *x, int y)
-+{
-+  return 1;
-+}
-+
-+int xa, xb;
-+
-+static void *
-+inl (const char *x, const char *y)
-+{
-+  T t = { &xa, &xb };
-+  int *f = (int *) __builtin_malloc (sizeof (int));
-+  const char *z;
-+  int o = 0;
-+  void *r = 0;
-+
-+  for (z = y; *z; z++)
-+    {
-+      if (*z == 'r')
-+      o |= 1;
-+      if (*z == 'w')
-+      o |= 2;
-+    }
-+  if (o == 1)
-+    *f = baz (x, 0);
-+  if (o == 2)
-+    *f = baz (x, 1);
-+  if (o == 3)
-+    *f = baz (x, 2);
-+
-+  if (o && *f > 0)
-+    r = bar (f, "w", t);
-+  return r;
-+}
-+
-+void *
-+foo (const char *x, const char *y)
-+{
-+  return inl (x, y);
-+}
---- gcc/testsuite/g++.dg/opt/inline13.C.jj     2007-11-06 16:20:20.000000000 +0100
-+++ gcc/testsuite/g++.dg/opt/inline13.C        2007-11-06 16:21:30.000000000 +0100
-@@ -0,0 +1,60 @@
-+// PR tree-optimization/33763
-+// { dg-do compile }
-+// { dg-options "-O2" }
-+
-+typedef struct
-+{
-+  void *a;
-+  void *b;
-+} T;
-+extern void *foo (const char *, const char *);
-+extern void *bar (void *, const char *, T);
-+extern int baz (const char *, int);
-+
-+extern inline __attribute__ ((always_inline, gnu_inline)) int
-+baz (const char *x, int y)
-+{
-+  return 2;
-+}
-+
-+int
-+baz (const char *x, int y)
-+{
-+  return 1;
-+}
-+
-+int xa, xb;
-+
-+static void *
-+inl (const char *x, const char *y)
-+{
-+  T t = { &xa, &xb };
-+  int *f = (int *) __builtin_malloc (sizeof (int));
-+  const char *z;
-+  int o = 0;
-+  void *r = 0;
-+
-+  for (z = y; *z; z++)
-+    {
-+      if (*z == 'r')
-+      o |= 1;
-+      if (*z == 'w')
-+      o |= 2;
-+    }
-+  if (o == 1)
-+    *f = baz (x, 0);
-+  if (o == 2)
-+    *f = baz (x, 1);
-+  if (o == 3)
-+    *f = baz (x, 2);
-+
-+  if (o && *f > 0)
-+    r = bar (f, "w", t);
-+  return r;
-+}
-+
-+void *
-+foo (const char *x, const char *y)
-+{
-+  return inl (x, y);
-+}
diff --git a/src/patches/gcc/gcc44-rh330771.patch b/src/patches/gcc/gcc44-rh330771.patch
deleted file mode 100644 (file)
index f7c365d..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-2007-10-16  Jakub Jelinek  <jakub@redhat.com>
-
-       * Makefile.am (libgcj_tools_la_LIBADD): Add.
-       * Makefile.in: Regenerated.
-
---- libjava/Makefile.am.jj     2009-05-06 08:14:50.000000000 +0200
-+++ libjava/Makefile.am        2009-05-06 10:26:43.000000000 +0200
-@@ -314,6 +314,8 @@ libgcj_tools_la_SOURCES = classpath/tool
- libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS) -findirect-dispatch \
-  -fno-bootstrap-classes -fno-indirect-classes \
-  -fsource-filename=$(here)/classpath/tools/all-classes.lst
-+## See jv_convert_LDADD.
-+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la
- libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir) \
-  -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-  $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS)
---- libjava/Makefile.in.jj     2009-05-06 08:14:49.000000000 +0200
-+++ libjava/Makefile.in        2009-05-06 10:27:18.000000000 +0200
-@@ -160,7 +160,6 @@ am__objects_1 = gnu/gcj/xlib/lib_gnu_awt
- am_lib_gnu_awt_xlib_la_OBJECTS = $(am__objects_1)
- lib_gnu_awt_xlib_la_OBJECTS = $(am_lib_gnu_awt_xlib_la_OBJECTS)
- @XLIB_AWT_TRUE@am_lib_gnu_awt_xlib_la_rpath = -rpath $(toolexeclibdir)
--libgcj_tools_la_LIBADD =
- am_libgcj_tools_la_OBJECTS = classpath/tools/libgcj_tools_la-tools.lo
- libgcj_tools_la_OBJECTS = $(am_libgcj_tools_la_OBJECTS)
- @INTERPRETER_TRUE@am__DEPENDENCIES_1 = gnu/classpath/jdwp.lo \
-@@ -1041,6 +1040,7 @@ libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS
-  -fno-bootstrap-classes -fno-indirect-classes \
-  -fsource-filename=$(here)/classpath/tools/all-classes.lst
-+libgcj_tools_la_LIBADD = -L$(here)/.libs libgcj.la
- libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir) \
-  -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
-  $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS)
diff --git a/src/patches/gcc/gcc44-rh533181.patch b/src/patches/gcc/gcc44-rh533181.patch
deleted file mode 100644 (file)
index 76326e2..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-2010-07-22  Jakub Jelinek  <jakub@redhat.com>
-
-       * gimplify.c (enum gimplify_omp_var_data): Add
-       GOVD_THREADPRIVATE_WARNED.
-       (gimplify_bind_expr): Add GOVD_LOCAL | GOVD_SEEN even for global vars.
-       (omp_notice_threadprivate_variable): Note used threadprivate vars
-       with current function's context in shared clauses.
-       (gimplify_adjust_omp_clauses_1): Allow globals with current function's
-       context in taskreg shared clause.
-       * omp-low.c (lower_rec_input_clauses): For function-local is_global_var
-       VAR_DECLs in shared clauses add a decl copy with DECL_VALUE_EXPR
-       pointing to the original.
-
-       * trans-openmp.c (gfc_omp_private_debug_clause): Return false for
-       threadprivate decls.
-
-       * gcc.dg/gomp/tls-3.c: New test.
-
---- gcc/fortran/trans-openmp.c.jj      2010-06-24 21:47:09.908230044 +0200
-+++ gcc/fortran/trans-openmp.c 2010-07-26 10:45:15.830229443 +0200
-@@ -351,6 +351,18 @@ gfc_omp_disregard_value_expr (tree decl,
- bool
- gfc_omp_private_debug_clause (tree decl, bool shared)
- {
-+  if (TREE_STATIC (decl) || DECL_EXTERNAL (decl))
-+    {
-+      if (DECL_THREAD_LOCAL_P (decl))
-+      return false;
-+      if (DECL_HAS_VALUE_EXPR_P (decl))
-+      {
-+        tree value = get_base_address (DECL_VALUE_EXPR (decl));
-+        if (value && DECL_P (value) && DECL_THREAD_LOCAL_P (value))
-+          return false;
-+      }
-+    }
-+
-   if (GFC_DECL_CRAY_POINTEE (decl))
-     return true;
---- gcc/gimplify.c.jj  2010-07-09 09:01:37.049604412 +0200
-+++ gcc/gimplify.c     2010-07-26 10:50:05.646291216 +0200
-@@ -66,6 +66,7 @@ enum gimplify_omp_var_data
-   GOVD_LOCAL = 128,
-   GOVD_DEBUG_PRIVATE = 256,
-   GOVD_PRIVATE_OUTER_REF = 512,
-+  GOVD_THREADPRIVATE_WARNED = 1024,
-   GOVD_DATA_SHARE_CLASS = (GOVD_SHARED | GOVD_PRIVATE | GOVD_FIRSTPRIVATE
-                          | GOVD_LASTPRIVATE | GOVD_REDUCTION | GOVD_LOCAL)
- };
-@@ -1234,7 +1235,7 @@ gimplify_bind_expr (tree *expr_p, gimple
-         struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
-         /* Mark variable as local.  */
--        if (ctx && !is_global_var (t)
-+        if (ctx
-             && (! DECL_SEEN_IN_BIND_EXPR_P (t)
-                 || splay_tree_lookup (ctx->variables,
-                                       (splay_tree_key) t) == NULL))
-@@ -5339,18 +5340,36 @@ omp_notice_threadprivate_variable (struc
- {
-   splay_tree_node n;
--  if (ctx->region_type != ORT_UNTIED_TASK)
-+  while (ctx && ctx->region_type == ORT_WORKSHARE)
-+    {
-+      n = splay_tree_lookup (ctx->variables, (splay_tree_key)decl);
-+      if (n != NULL)
-+      {
-+        gcc_assert (n->value & GOVD_LOCAL);
-+        return false;
-+      }
-+      ctx = ctx->outer_context;
-+    }
-+  if (ctx == NULL)
-     return false;
-+
-   n = splay_tree_lookup (ctx->variables, (splay_tree_key)decl);
-   if (n == NULL)
-+    n = splay_tree_insert (ctx->variables, (splay_tree_key)decl,
-+                         DECL_CONTEXT (decl) == current_function_decl
-+                         ? GOVD_SHARED | GOVD_SEEN : 0);
-+  if (ctx->region_type == ORT_UNTIED_TASK
-+      && (n->value & GOVD_THREADPRIVATE_WARNED) == 0)
-     {
-       error ("threadprivate variable %qs used in untied task",
-            IDENTIFIER_POINTER (DECL_NAME (decl)));
-       error ("%Henclosing task", &ctx->location);
--      splay_tree_insert (ctx->variables, (splay_tree_key)decl, 0);
-+      n->value |= GOVD_THREADPRIVATE_WARNED;
-     }
-   if (decl2)
--    splay_tree_insert (ctx->variables, (splay_tree_key)decl2, 0);
-+    splay_tree_insert (ctx->variables, (splay_tree_key)decl2,
-+                     DECL_CONTEXT (decl2) == current_function_decl
-+                     ? GOVD_SHARED | GOVD_SEEN : 0);
-   return false;
- }
-@@ -5779,7 +5798,9 @@ gimplify_adjust_omp_clauses_1 (splay_tre
-               break;
-             ctx = ctx->outer_context;
-           }
--        if (ctx == NULL)
-+        if (ctx == NULL
-+            && (DECL_CONTEXT (decl) != current_function_decl
-+                || gimplify_omp_ctxp->region_type == ORT_WORKSHARE))
-           return 0;
-       }
-       code = OMP_CLAUSE_SHARED;
---- gcc/omp-low.c.jj   2010-06-11 11:06:00.913659301 +0200
-+++ gcc/omp-low.c      2010-07-26 10:45:15.866229447 +0200
-@@ -2222,6 +2222,17 @@ lower_rec_input_clauses (tree clauses, g
-               continue;
-             break;
-           case OMP_CLAUSE_SHARED:
-+            if (pass == 0
-+                && is_global_var (OMP_CLAUSE_DECL (c))
-+                && (DECL_CONTEXT (OMP_CLAUSE_DECL (c))
-+                    == current_function_decl)
-+                && is_taskreg_ctx (ctx)
-+                && !DECL_IGNORED_P (OMP_CLAUSE_DECL (c)))
-+              {
-+                new_var = omp_copy_decl_1 (OMP_CLAUSE_DECL (c), ctx);
-+                SET_DECL_VALUE_EXPR (new_var, OMP_CLAUSE_DECL (c));
-+                DECL_HAS_VALUE_EXPR_P (new_var) = 1;
-+              }
-             if (maybe_lookup_decl (OMP_CLAUSE_DECL (c), ctx) == NULL)
-               {
-                 gcc_assert (is_global_var (OMP_CLAUSE_DECL (c)));
---- gcc/testsuite/gcc.dg/gomp/tls-3.c.jj       2010-07-26 10:45:15.868228753 +0200
-+++ gcc/testsuite/gcc.dg/gomp/tls-3.c  2010-07-26 10:45:15.868228753 +0200
-@@ -0,0 +1,21 @@
-+/* { dg-do compile } */
-+/* { dg-require-effective-target tls_native } */
-+
-+int thr;
-+#pragma omp threadprivate(thr)
-+
-+void
-+foo (void)
-+{
-+  #pragma omp task untied     /* { dg-error "enclosing task" } */
-+  {
-+    static int thr2;
-+    #pragma omp threadprivate(thr2)
-+    static int thr3;
-+    #pragma omp threadprivate(thr3)
-+    thr++;    /* { dg-error "used in untied task" } */
-+    thr2++;   /* { dg-error "used in untied task" } */
-+    thr++;
-+    thr2++;
-+  }
-+}
diff --git a/src/patches/gcc/gcc44-rh610785.patch b/src/patches/gcc/gcc44-rh610785.patch
deleted file mode 100644 (file)
index 91d0934..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-2010-07-07  Jakub Jelinek  <jakub@redhat.com>
-
-       * tree-sra.c (sra_build_assignment): Don't add BIT_XOR_EXPR/MINUS_EXPR
-       of signbit if signbit is the most significant bit of utype already.
-
-       * gcc.c-torture/execute/20100707-1.c: New test.
-
---- gcc/tree-sra.c.jj  2010-05-13 13:08:52.000000000 +0200
-+++ gcc/tree-sra.c     2010-07-06 19:50:09.000000000 +0200
-@@ -2211,7 +2211,10 @@ sra_build_assignment (tree dst, tree src
-       /* Perform sign extension, if required.
-        ???  This should never be necessary.  */
--      if (!unsignedp)
-+      if (!unsignedp
-+        && (TREE_INT_CST_LOW (width) != TYPE_PRECISION (utype)
-+            || (TREE_INT_CST_LOW (width)
-+                != GET_MODE_BITSIZE (TYPE_MODE (utype)))))
-       {
-         tree signbit = int_const_binop (LSHIFT_EXPR,
-                                         build_int_cst_wide (utype, 1, 0),
---- gcc/testsuite/gcc.c-torture/execute/20100707-1.c   2010-05-27 15:41:40.446237053 +0200
-+++ gcc/testsuite/gcc.c-torture/execute/20100707-1.c   2010-07-06 13:55:35.000000000 +0200
-@@ -0,0 +1,50 @@
-+struct S { int s; };
-+struct T { int w; int h; };
-+int vr;
-+
-+inline struct T
-+bar (const struct S * x)
-+{
-+  struct T t;
-+  t.w = vr;
-+  t.h = x->s;
-+  return t;
-+}
-+
-+__attribute__ ((noinline))
-+void foo (struct S * w, unsigned char *x, int y, int *z[2])
-+{
-+  struct T t;
-+  int i, j, k;
-+  t = bar (w);
-+  k = t.w + 2;
-+  for (i = 0; i <= t.h; i++)
-+    {
-+      int *u = z[i > 0] + 1;
-+      unsigned char *v;
-+      int q = 0;
-+      v = x + k * i + 1;
-+      for (j = 0; j < t.w; j++)
-+      {
-+        int m = u[j];
-+        if (m > y && !q && v[j - k] != 2)
-+          v[j] = 0;
-+      }
-+    }
-+}
-+
-+unsigned char b[64];
-+
-+int
-+main (void)
-+{
-+  int v[32], *z[2];
-+  struct S s;
-+  __builtin_memset (v, 0, sizeof (v));
-+  vr = 16;
-+  s.s = 16;
-+  z[0] = v;
-+  z[1] = v;
-+  foo (&s, b + 32, -1, z);
-+  return 0;
-+}
diff --git a/src/patches/gcc/gcc44-unwind-debug-hook.patch b/src/patches/gcc/gcc44-unwind-debug-hook.patch
deleted file mode 100644 (file)
index 9b7c59e..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-2010-04-27  Jakub Jelinek  <jakub@redhat.com>
-
-       * unwind-dw2.c (_Unwind_DebugHook): Add used attribute.
-
-2009-05-27  Tom Tromey  <tromey@redhat.com>
-
-       * unwind-dw2.c (_Unwind_DebugHook): New function.
-       (uw_install_context): Call _Unwind_DebugHook.
-
---- gcc/unwind-dw2.c   (revision 147933)
-+++ gcc/unwind-dw2.c   (revision 147934)
-@@ -1473,18 +1473,32 @@ uw_init_context_1 (struct _Unwind_Contex
-   context->ra = __builtin_extract_return_addr (outer_ra);
- }
-+static void _Unwind_DebugHook (void *, void *)
-+  __attribute__ ((__noinline__, __used__));
-+
-+/* This function is called during unwinding.  It is intended as a hook
-+   for a debugger to intercept exceptions.  CFA is the CFA of the
-+   target frame.  HANDLER is the PC to which control will be
-+   transferred.  */
-+static void
-+_Unwind_DebugHook (void *cfa __attribute__ ((__unused__)),
-+                 void *handler __attribute__ ((__unused__)))
-+{
-+  asm ("");
-+}
- /* Install TARGET into CURRENT so that we can return to it.  This is a
-    macro because __builtin_eh_return must be invoked in the context of
-    our caller.  */
--#define uw_install_context(CURRENT, TARGET)                            \
--  do                                                                   \
--    {                                                                  \
--      long offset = uw_install_context_1 ((CURRENT), (TARGET));                \
--      void *handler = __builtin_frob_return_addr ((TARGET)->ra);       \
--      __builtin_eh_return (offset, handler);                           \
--    }                                                                  \
-+#define uw_install_context(CURRENT, TARGET)                           \
-+  do                                                                  \
-+    {                                                                 \
-+      long offset = uw_install_context_1 ((CURRENT), (TARGET));               \
-+      void *handler = __builtin_frob_return_addr ((TARGET)->ra);      \
-+      _Unwind_DebugHook ((TARGET)->cfa, handler);                     \
-+      __builtin_eh_return (offset, handler);                          \
-+    }                                                                 \
-   while (0)
- static long
diff --git a/src/patches/gcc/gcc49-i386-libgomp.patch b/src/patches/gcc/gcc49-i386-libgomp.patch
new file mode 100644 (file)
index 0000000..520561e
--- /dev/null
@@ -0,0 +1,11 @@
+--- libgomp/configure.tgt.jj   2008-01-10 20:53:48.000000000 +0100
++++ libgomp/configure.tgt      2008-03-27 12:44:51.000000000 +0100
+@@ -67,7 +67,7 @@ if test $enable_linux_futex = yes; then
+           ;;
+         *)
+           if test -z "$with_arch"; then
+-            XCFLAGS="${XCFLAGS} -march=i486 -mtune=${target_cpu}"
++            XCFLAGS="${XCFLAGS} -march=i486 -mtune=generic"
+           fi
+       esac
+       ;;
diff --git a/src/patches/gcc/gcc49-no-add-needed.patch b/src/patches/gcc/gcc49-no-add-needed.patch
new file mode 100644 (file)
index 0000000..b6ca777
--- /dev/null
@@ -0,0 +1,50 @@
+2010-02-08  Roland McGrath  <roland@redhat.com>
+
+       * config/rs6000/sysv4.h (LINK_EH_SPEC): Pass --no-add-needed to the
+       linker.
+       * config/gnu-user.h (LINK_EH_SPEC): Likewise.
+       * config/alpha/elf.h (LINK_EH_SPEC): Likewise.
+       * config/ia64/linux.h (LINK_EH_SPEC): Likewise.
+
+--- gcc/config/alpha/elf.h.jj  2011-01-03 12:52:31.118056764 +0100
++++ gcc/config/alpha/elf.h     2011-01-04 18:14:10.931874160 +0100
+@@ -165,5 +165,5 @@ extern int alpha_this_gpdisp_sequence_nu
+    I imagine that other systems will catch up.  In the meantime, it
+    doesn't harm to make sure that the data exists to be used later.  */
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+--- gcc/config/ia64/linux.h.jj 2011-01-03 13:02:11.462994522 +0100
++++ gcc/config/ia64/linux.h    2011-01-04 18:14:10.931874160 +0100
+@@ -77,7 +77,7 @@ do {                                         \
+    Signalize that because we have fde-glibc, we don't need all C shared libs
+    linked against -lgcc_s.  */
+ #undef LINK_EH_SPEC
+-#define LINK_EH_SPEC ""
++#define LINK_EH_SPEC "--no-add-needed "
+ /* Put all *tf routines in libgcc.  */
+ #undef LIBGCC2_HAS_TF_MODE
+--- gcc/config/gnu-user.h.jj   2011-01-03 12:53:03.739057299 +0100
++++ gcc/config/gnu-user.h      2011-01-04 18:14:10.932814884 +0100
+@@ -82,7 +82,7 @@ see the files COPYING3 and COPYING.RUNTI
+ #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++#define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+ #undef LINK_GCC_C_SEQUENCE_SPEC
+--- gcc/config/rs6000/sysv4.h.jj       2011-01-03 13:02:18.255994215 +0100
++++ gcc/config/rs6000/sysv4.h  2011-01-04 18:14:10.933888871 +0100
+@@ -820,7 +820,7 @@ extern int fixuplabelno;
+   -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}"
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+-# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} "
++# define LINK_EH_SPEC "--no-add-needed %{!static:--eh-frame-hdr} "
+ #endif
+ #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \
diff --git a/src/patches/gcc/gcc49-pr38757.patch b/src/patches/gcc/gcc49-pr38757.patch
new file mode 100644 (file)
index 0000000..4206584
--- /dev/null
@@ -0,0 +1,106 @@
+2009-03-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/38757
+       * langhooks.h (struct lang_hooks): Add source_language langhook.
+       * langhooks-def.h (LANG_HOOKS_SOURCE_LANGUAGE): Define to NULL.
+       (LANG_HOOKS_INITIALIZER): Add LANG_HOOKS_SOURCE_LANGUAGE.
+       * dwarf2out.c (add_prototyped_attribute): Add DW_AT_prototype
+       also for DW_LANG_{C,C99,ObjC}.
+       (gen_compile_unit_die): Use lang_hooks.source_language () to
+       determine if DW_LANG_C99 or DW_LANG_C89 should be returned.
+c/
+       * c-lang.c (c_source_language): New function.
+       (LANG_HOOKS_SOURCE_LANGUAGE): Define.
+
+--- gcc/langhooks.h.jj 2011-01-03 12:53:05.125745450 +0100
++++ gcc/langhooks.h    2011-01-04 17:59:43.166744926 +0100
+@@ -467,6 +467,10 @@ struct lang_hooks
+      gimplification.  */
+   bool deep_unsharing;
++  /* Return year of the source language standard version if the FE supports
++     multiple versions of the standard.  */
++  int (*source_language) (void);
++
+   /* Whenever you add entries here, make sure you adjust langhooks-def.h
+      and langhooks.c accordingly.  */
+ };
+--- gcc/langhooks-def.h.jj     2011-01-03 12:53:05.000000000 +0100
++++ gcc/langhooks-def.h        2011-01-04 18:00:44.858851030 +0100
+@@ -118,6 +118,7 @@ extern void lhd_omp_firstprivatize_type_
+ #define LANG_HOOKS_BLOCK_MAY_FALLTHRU hook_bool_const_tree_true
+ #define LANG_HOOKS_EH_USE_CXA_END_CLEANUP     false
+ #define LANG_HOOKS_DEEP_UNSHARING     false
++#define LANG_HOOKS_SOURCE_LANGUAGE    NULL
+ /* Attribute hooks.  */
+ #define LANG_HOOKS_ATTRIBUTE_TABLE            NULL
+@@ -303,7 +304,8 @@ extern void lhd_end_section (void);
+   LANG_HOOKS_EH_PROTECT_CLEANUP_ACTIONS, \
+   LANG_HOOKS_BLOCK_MAY_FALLTHRU, \
+   LANG_HOOKS_EH_USE_CXA_END_CLEANUP, \
+-  LANG_HOOKS_DEEP_UNSHARING \
++  LANG_HOOKS_DEEP_UNSHARING, \
++  LANG_HOOKS_SOURCE_LANGUAGE \
+ }
+ #endif /* GCC_LANG_HOOKS_DEF_H */
+--- gcc/c/c-lang.c.jj  2011-01-03 12:53:05.376056936 +0100
++++ gcc/c/c-lang.c     2011-01-04 17:59:43.167743798 +0100
+@@ -36,6 +36,12 @@ along with GCC; see the file COPYING3.
+ enum c_language_kind c_language = clk_c;
++static int
++c_source_language (void)
++{
++  return flag_isoc99 ? 1999 : 1989;
++}
++
+ /* Lang hooks common to C and ObjC are declared in c-objc-common.h;
+    consequently, there should be very few hooks below.  */
+@@ -45,6 +51,8 @@ enum c_language_kind c_language = clk_c;
+ #define LANG_HOOKS_INIT c_objc_common_init
+ #undef LANG_HOOKS_INIT_TS
+ #define LANG_HOOKS_INIT_TS c_common_init_ts
++#undef LANG_HOOKS_SOURCE_LANGUAGE
++#define LANG_HOOKS_SOURCE_LANGUAGE c_source_language
+ /* Each front end provides its own lang hook initializer.  */
+ struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
+--- gcc/dwarf2out.c.jj 2011-01-03 12:53:05.102056475 +0100
++++ gcc/dwarf2out.c    2011-01-04 18:03:14.534151763 +0100
+@@ -16109,9 +16109,18 @@ add_bit_size_attribute (dw_die_ref die,
+ static inline void
+ add_prototyped_attribute (dw_die_ref die, tree func_type)
+ {
+-  if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89
+-      && prototype_p (func_type))
+-    add_AT_flag (die, DW_AT_prototyped, 1);
++  switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
++    {
++    case DW_LANG_C:
++    case DW_LANG_C89:
++    case DW_LANG_C99:
++    case DW_LANG_ObjC:
++      if (prototype_p (func_type))
++      add_AT_flag (die, DW_AT_prototyped, 1);
++      break;
++    default:
++      break;
++    }
+ }
+ /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
+@@ -18915,6 +18924,10 @@ gen_compile_unit_die (const char *filena
+         if (strcmp (language_string, "GNU Go") == 0)
+           language = DW_LANG_Go;
+       }
++      else if (strcmp (language_string, "GNU C") == 0
++             && lang_hooks.source_language
++             && lang_hooks.source_language () >= 1999)
++      language = DW_LANG_C99;
+     }
+   /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works.  */
+   else if (strcmp (language_string, "GNU Fortran") == 0)
diff --git a/src/patches/gcc/gcc49-pr64336.patch b/src/patches/gcc/gcc49-pr64336.patch
new file mode 100644 (file)
index 0000000..86fddd5
--- /dev/null
@@ -0,0 +1,17 @@
+2014-12-17  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/64336
+       * tsan.c (instrument_expr): Ignore TREE_READONLY bit
+       on MEM_REFs.
+
+--- gcc/tsan.c.jj      2014-12-17 10:53:30.000000000 +0100
++++ gcc/tsan.c 2014-12-17 11:55:12.793058159 +0100
+@@ -138,7 +138,7 @@ instrument_expr (gimple_stmt_iterator gs
+       return false;
+     }
+-  if (TREE_READONLY (base)
++  if ((TREE_READONLY (base) && TREE_CODE (base) != MEM_REF)
+       || (TREE_CODE (base) == VAR_DECL
+         && DECL_HARD_REGISTER (base)))
+     return false;
diff --git a/src/patches/glibc/glibc-mq_open.patch b/src/patches/glibc/glibc-mq_open.patch
new file mode 100644 (file)
index 0000000..a7a0f11
--- /dev/null
@@ -0,0 +1,34 @@
+From: https://sourceware.org/bugzilla/show_bug.cgi?id=12841
+
+--- libc/rt/bits/mqueue2.h     2009-05-16 19:23:37.000000000 +0200
++++ libc/rt/bits/mqueue2.h     2011-06-04 19:05:38.322333773 +0200
+@@ -1,5 +1,5 @@ 
+ /* Checking macros for mq functions.
+-   Copyright (C) 2007 Free Software Foundation, Inc.
++   Copyright (C) 2007, 2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    The GNU C Library is free software; you can redistribute it and/or
+@@ -25,16 +25,18 @@ 
+    parameter.  */
+ extern mqd_t mq_open (__const char *__name, int __oflag, ...)
+      __THROW __nonnull ((1));
+-extern mqd_t __mq_open_2 (__const char *__name, int __oflag) __nonnull ((1));
+-extern mqd_t __REDIRECT (__mq_open_alias, (__const char *__name, int __oflag, ...),
+-                       mq_open) __nonnull ((1));
++extern mqd_t __mq_open_2 (__const char *__name, int __oflag)
++     __THROW __nonnull ((1));
++extern mqd_t __REDIRECT_NTH (__mq_open_alias, (__const char *__name,
++                                             int __oflag, ...), mq_open)
++     __nonnull ((1));
+ __errordecl (__mq_open_wrong_number_of_args,
+            "mq_open can be called either with 2 or 4 arguments");
+ __errordecl (__mq_open_missing_mode_and_attr,
+            "mq_open with O_CREAT in second argument needs 4 arguments");
+ __extern_always_inline mqd_t
+-mq_open (__const char *__name, int __oflag, ...)
++__NTH (mq_open (__const char *__name, int __oflag, ...))
+ {
+   if (__va_arg_pack_len () != 0 && __va_arg_pack_len () != 2)
+     __mq_open_wrong_number_of_args ();
diff --git a/src/patches/linux/0001-Drivers-net-hyperv-Get-rid-of-the-rndis_filter_packe.patch b/src/patches/linux/0001-Drivers-net-hyperv-Get-rid-of-the-rndis_filter_packe.patch
new file mode 100644 (file)
index 0000000..2e00392
--- /dev/null
@@ -0,0 +1,129 @@
+From f3f885fa684ff18fa4d223dc22b782f5e5d32560 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sun, 16 Feb 2014 16:38:43 -0800
+Subject: [PATCH 01/25] Drivers: net: hyperv: Get rid of the
+ rndis_filter_packet structure
+
+This structure is redundant; get rid of it make the code little more efficient -
+get rid of the unnecessary indirection.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   |  6 ------
+ drivers/net/hyperv/netvsc_drv.c   |  2 +-
+ drivers/net/hyperv/rndis_filter.c | 41 +++------------------------------------
+ 3 files changed, 4 insertions(+), 45 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 7b594ce3f21d..7645ba38bde8 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -846,12 +846,6 @@ struct rndis_message {
+ };
+-struct rndis_filter_packet {
+-      void *completion_ctx;
+-      void (*completion)(void *context);
+-      struct rndis_message msg;
+-};
+-
+ /* Handy macros */
+ /* get the size of an RNDIS message. Pass in the message type, */
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 3c1c33ceffba..28020f83ba6f 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -156,7 +156,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       /* Allocate a netvsc packet based on # of frags. */
+       packet = kzalloc(sizeof(struct hv_netvsc_packet) +
+                        (num_pages * sizeof(struct hv_page_buffer)) +
+-                       sizeof(struct rndis_filter_packet) +
++                       sizeof(struct rndis_message) +
+                        NDIS_VLAN_PPI_SIZE, GFP_ATOMIC);
+       if (!packet) {
+               /* out of memory, drop packet */
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index b54fd257652b..6a9f6021f09c 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -58,9 +58,6 @@ struct rndis_request {
+       u8 request_ext[RNDIS_EXT_LEN];
+ };
+-static void rndis_filter_send_completion(void *ctx);
+-
+-
+ static struct rndis_device *get_rndis_device(void)
+ {
+       struct rndis_device *device;
+@@ -297,7 +294,7 @@ static void rndis_filter_receive_response(struct rndis_device *dev,
+                               "rndis response buffer overflow "
+                               "detected (size %u max %zu)\n",
+                               resp->msg_len,
+-                              sizeof(struct rndis_filter_packet));
++                              sizeof(struct rndis_message));
+                       if (resp->ndis_msg_type ==
+                           RNDIS_MSG_RESET_C) {
+@@ -917,17 +914,14 @@ int rndis_filter_close(struct hv_device *dev)
+ int rndis_filter_send(struct hv_device *dev,
+                            struct hv_netvsc_packet *pkt)
+ {
+-      int ret;
+-      struct rndis_filter_packet *filter_pkt;
+       struct rndis_message *rndis_msg;
+       struct rndis_packet *rndis_pkt;
+       u32 rndis_msg_size;
+       bool isvlan = pkt->vlan_tci & VLAN_TAG_PRESENT;
+       /* Add the rndis header */
+-      filter_pkt = (struct rndis_filter_packet *)pkt->extension;
++      rndis_msg = (struct rndis_message *)pkt->extension;
+-      rndis_msg = &filter_pkt->msg;
+       rndis_msg_size = RNDIS_MESSAGE_SIZE(struct rndis_packet);
+       if (isvlan)
+               rndis_msg_size += NDIS_VLAN_PPI_SIZE;
+@@ -980,34 +974,5 @@ int rndis_filter_send(struct hv_device *dev,
+               pkt->page_buf[1].len = rndis_msg_size - pkt->page_buf[0].len;
+       }
+-      /* Save the packet send completion and context */
+-      filter_pkt->completion = pkt->completion.send.send_completion;
+-      filter_pkt->completion_ctx =
+-                              pkt->completion.send.send_completion_ctx;
+-
+-      /* Use ours */
+-      pkt->completion.send.send_completion = rndis_filter_send_completion;
+-      pkt->completion.send.send_completion_ctx = filter_pkt;
+-
+-      ret = netvsc_send(dev, pkt);
+-      if (ret != 0) {
+-              /*
+-               * Reset the completion to originals to allow retries from
+-               * above
+-               */
+-              pkt->completion.send.send_completion =
+-                              filter_pkt->completion;
+-              pkt->completion.send.send_completion_ctx =
+-                              filter_pkt->completion_ctx;
+-      }
+-
+-      return ret;
+-}
+-
+-static void rndis_filter_send_completion(void *ctx)
+-{
+-      struct rndis_filter_packet *filter_pkt = ctx;
+-
+-      /* Pass it back to the original handler */
+-      filter_pkt->completion(filter_pkt->completion_ctx);
++      return netvsc_send(dev, pkt);
+ }
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0001-hyperv-Add-support-for-virtual-Receive-Side-Scaling-.patch b/src/patches/linux/0001-hyperv-Add-support-for-virtual-Receive-Side-Scaling-.patch
new file mode 100644 (file)
index 0000000..52c4da6
--- /dev/null
@@ -0,0 +1,917 @@
+From 5b54dac856cb5bd6f33f4159012773e4a33704f7 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Mon, 21 Apr 2014 10:20:28 -0700
+Subject: [PATCH 01/11] hyperv: Add support for virtual Receive Side Scaling
+ (vRSS)
+
+This feature allows multiple channels to be used by each virtual NIC.
+It is available on Hyper-V host 2012 R2.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   | 110 +++++++++++++++++++++-
+ drivers/net/hyperv/netvsc.c       | 136 +++++++++++++++++++++------
+ drivers/net/hyperv/netvsc_drv.c   | 103 ++++++++++++++++++++-
+ drivers/net/hyperv/rndis_filter.c | 189 +++++++++++++++++++++++++++++++++++++-
+ 4 files changed, 504 insertions(+), 34 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index d18f711d0b0c..57eb3f906d64 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -28,6 +28,96 @@
+ #include <linux/hyperv.h>
+ #include <linux/rndis.h>
++/* RSS related */
++#define OID_GEN_RECEIVE_SCALE_CAPABILITIES 0x00010203  /* query only */
++#define OID_GEN_RECEIVE_SCALE_PARAMETERS 0x00010204  /* query and set */
++
++#define NDIS_OBJECT_TYPE_RSS_CAPABILITIES 0x88
++#define NDIS_OBJECT_TYPE_RSS_PARAMETERS 0x89
++
++#define NDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_2 2
++#define NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_2 2
++
++struct ndis_obj_header {
++      u8 type;
++      u8 rev;
++      u16 size;
++} __packed;
++
++/* ndis_recv_scale_cap/cap_flag */
++#define NDIS_RSS_CAPS_MESSAGE_SIGNALED_INTERRUPTS 0x01000000
++#define NDIS_RSS_CAPS_CLASSIFICATION_AT_ISR       0x02000000
++#define NDIS_RSS_CAPS_CLASSIFICATION_AT_DPC       0x04000000
++#define NDIS_RSS_CAPS_USING_MSI_X                 0x08000000
++#define NDIS_RSS_CAPS_RSS_AVAILABLE_ON_PORTS      0x10000000
++#define NDIS_RSS_CAPS_SUPPORTS_MSI_X              0x20000000
++#define NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV4          0x00000100
++#define NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6          0x00000200
++#define NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EX       0x00000400
++
++struct ndis_recv_scale_cap { /* NDIS_RECEIVE_SCALE_CAPABILITIES */
++      struct ndis_obj_header hdr;
++      u32 cap_flag;
++      u32 num_int_msg;
++      u32 num_recv_que;
++      u16 num_indirect_tabent;
++} __packed;
++
++
++/* ndis_recv_scale_param flags */
++#define NDIS_RSS_PARAM_FLAG_BASE_CPU_UNCHANGED     0x0001
++#define NDIS_RSS_PARAM_FLAG_HASH_INFO_UNCHANGED    0x0002
++#define NDIS_RSS_PARAM_FLAG_ITABLE_UNCHANGED       0x0004
++#define NDIS_RSS_PARAM_FLAG_HASH_KEY_UNCHANGED     0x0008
++#define NDIS_RSS_PARAM_FLAG_DISABLE_RSS            0x0010
++
++/* Hash info bits */
++#define NDIS_HASH_FUNC_TOEPLITZ 0x00000001
++#define NDIS_HASH_IPV4          0x00000100
++#define NDIS_HASH_TCP_IPV4      0x00000200
++#define NDIS_HASH_IPV6          0x00000400
++#define NDIS_HASH_IPV6_EX       0x00000800
++#define NDIS_HASH_TCP_IPV6      0x00001000
++#define NDIS_HASH_TCP_IPV6_EX   0x00002000
++
++#define NDIS_RSS_INDIRECTION_TABLE_MAX_SIZE_REVISION_2 (128 * 4)
++#define NDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_2   40
++
++#define ITAB_NUM 128
++#define HASH_KEYLEN NDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_2
++extern u8 netvsc_hash_key[];
++
++struct ndis_recv_scale_param { /* NDIS_RECEIVE_SCALE_PARAMETERS */
++      struct ndis_obj_header hdr;
++
++      /* Qualifies the rest of the information */
++      u16 flag;
++
++      /* The base CPU number to do receive processing. not used */
++      u16 base_cpu_number;
++
++      /* This describes the hash function and type being enabled */
++      u32 hashinfo;
++
++      /* The size of indirection table array */
++      u16 indirect_tabsize;
++
++      /* The offset of the indirection table from the beginning of this
++       * structure
++       */
++      u32 indirect_taboffset;
++
++      /* The size of the hash secret key */
++      u16 hashkey_size;
++
++      /* The offset of the secret key from the beginning of this structure */
++      u32 kashkey_offset;
++
++      u32 processor_masks_offset;
++      u32 num_processor_masks;
++      u32 processor_masks_entry_size;
++};
++
+ /* Fwd declaration */
+ struct hv_netvsc_packet;
+ struct ndis_tcp_ip_checksum_info;
+@@ -39,6 +129,8 @@ struct xferpage_packet {
+       /* # of netvsc packets this xfer packet contains */
+       u32 count;
++
++      struct vmbus_channel *channel;
+ };
+ /*
+@@ -54,6 +146,9 @@ struct hv_netvsc_packet {
+       bool is_data_pkt;
+       u16 vlan_tci;
++      u16 q_idx;
++      struct vmbus_channel *channel;
++
+       /*
+        * Valid only for receives when we break a xfer page packet
+        * into multiple netvsc packets
+@@ -120,6 +215,7 @@ void netvsc_linkstatus_callback(struct hv_device *device_obj,
+ int netvsc_recv_callback(struct hv_device *device_obj,
+                       struct hv_netvsc_packet *packet,
+                       struct ndis_tcp_ip_checksum_info *csum_info);
++void netvsc_channel_cb(void *context);
+ int rndis_filter_open(struct hv_device *dev);
+ int rndis_filter_close(struct hv_device *dev);
+ int rndis_filter_device_add(struct hv_device *dev,
+@@ -522,6 +618,8 @@ struct nvsp_message {
+ #define NETVSC_PACKET_SIZE                      2048
++#define VRSS_SEND_TAB_SIZE 16
++
+ /* Per netvsc channel-specific */
+ struct netvsc_device {
+       struct hv_device *dev;
+@@ -555,10 +653,20 @@ struct netvsc_device {
+       struct net_device *ndev;
++      struct vmbus_channel *chn_table[NR_CPUS];
++      u32 send_table[VRSS_SEND_TAB_SIZE];
++      u32 num_chn;
++      atomic_t queue_sends[NR_CPUS];
++
+       /* Holds rndis device info */
+       void *extension;
+-      /* The recive buffer for this device */
++
++      int ring_size;
++
++      /* The primary channel callback buffer */
+       unsigned char cb_buffer[NETVSC_PACKET_SIZE];
++      /* The sub channel callback buffer */
++      unsigned char *sub_cb_buf;
+ };
+ /* NdisInitialize message */
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index f7629ecefa84..e7e77f12bc38 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -422,6 +422,9 @@ int netvsc_device_remove(struct hv_device *device)
+               kfree(netvsc_packet);
+       }
++      if (net_device->sub_cb_buf)
++              vfree(net_device->sub_cb_buf);
++
+       kfree(net_device);
+       return 0;
+ }
+@@ -461,7 +464,9 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+           (nvsp_packet->hdr.msg_type ==
+            NVSP_MSG1_TYPE_SEND_RECV_BUF_COMPLETE) ||
+           (nvsp_packet->hdr.msg_type ==
+-           NVSP_MSG1_TYPE_SEND_SEND_BUF_COMPLETE)) {
++           NVSP_MSG1_TYPE_SEND_SEND_BUF_COMPLETE) ||
++          (nvsp_packet->hdr.msg_type ==
++           NVSP_MSG5_TYPE_SUBCHANNEL)) {
+               /* Copy the response back */
+               memcpy(&net_device->channel_init_pkt, nvsp_packet,
+                      sizeof(struct nvsp_message));
+@@ -469,28 +474,37 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+       } else if (nvsp_packet->hdr.msg_type ==
+                  NVSP_MSG1_TYPE_SEND_RNDIS_PKT_COMPLETE) {
+               int num_outstanding_sends;
++              u16 q_idx = 0;
++              struct vmbus_channel *channel = device->channel;
++              int queue_sends;
+               /* Get the send context */
+               nvsc_packet = (struct hv_netvsc_packet *)(unsigned long)
+                       packet->trans_id;
+               /* Notify the layer above us */
+-              if (nvsc_packet)
++              if (nvsc_packet) {
++                      q_idx = nvsc_packet->q_idx;
++                      channel = nvsc_packet->channel;
+                       nvsc_packet->completion.send.send_completion(
+                               nvsc_packet->completion.send.
+                               send_completion_ctx);
++              }
+               num_outstanding_sends =
+                       atomic_dec_return(&net_device->num_outstanding_sends);
++              queue_sends = atomic_dec_return(&net_device->
++                                              queue_sends[q_idx]);
+               if (net_device->destroy && num_outstanding_sends == 0)
+                       wake_up(&net_device->wait_drain);
+-              if (netif_queue_stopped(ndev) && !net_device->start_remove &&
+-                      (hv_ringbuf_avail_percent(&device->channel->outbound)
+-                      > RING_AVAIL_PERCENT_HIWATER ||
+-                      num_outstanding_sends < 1))
+-                              netif_wake_queue(ndev);
++              if (netif_tx_queue_stopped(netdev_get_tx_queue(ndev, q_idx)) &&
++                  !net_device->start_remove &&
++                  (hv_ringbuf_avail_percent(&channel->outbound) >
++                   RING_AVAIL_PERCENT_HIWATER || queue_sends < 1))
++                              netif_tx_wake_queue(netdev_get_tx_queue(
++                                                  ndev, q_idx));
+       } else {
+               netdev_err(ndev, "Unknown send completion packet type- "
+                          "%d received!!\n", nvsp_packet->hdr.msg_type);
+@@ -505,6 +519,7 @@ int netvsc_send(struct hv_device *device,
+       int ret = 0;
+       struct nvsp_message sendMessage;
+       struct net_device *ndev;
++      struct vmbus_channel *out_channel = NULL;
+       u64 req_id;
+       net_device = get_outbound_net_device(device);
+@@ -531,15 +546,20 @@ int netvsc_send(struct hv_device *device,
+       else
+               req_id = 0;
++      out_channel = net_device->chn_table[packet->q_idx];
++      if (out_channel == NULL)
++              out_channel = device->channel;
++      packet->channel = out_channel;
++
+       if (packet->page_buf_cnt) {
+-              ret = vmbus_sendpacket_pagebuffer(device->channel,
++              ret = vmbus_sendpacket_pagebuffer(out_channel,
+                                                 packet->page_buf,
+                                                 packet->page_buf_cnt,
+                                                 &sendMessage,
+                                                 sizeof(struct nvsp_message),
+                                                 req_id);
+       } else {
+-              ret = vmbus_sendpacket(device->channel, &sendMessage,
++              ret = vmbus_sendpacket(out_channel, &sendMessage,
+                               sizeof(struct nvsp_message),
+                               req_id,
+                               VM_PKT_DATA_INBAND,
+@@ -548,17 +568,24 @@ int netvsc_send(struct hv_device *device,
+       if (ret == 0) {
+               atomic_inc(&net_device->num_outstanding_sends);
+-              if (hv_ringbuf_avail_percent(&device->channel->outbound) <
++              atomic_inc(&net_device->queue_sends[packet->q_idx]);
++
++              if (hv_ringbuf_avail_percent(&out_channel->outbound) <
+                       RING_AVAIL_PERCENT_LOWATER) {
+-                      netif_stop_queue(ndev);
++                      netif_tx_stop_queue(netdev_get_tx_queue(
++                                          ndev, packet->q_idx));
++
+                       if (atomic_read(&net_device->
+-                              num_outstanding_sends) < 1)
+-                              netif_wake_queue(ndev);
++                              queue_sends[packet->q_idx]) < 1)
++                              netif_tx_wake_queue(netdev_get_tx_queue(
++                                                  ndev, packet->q_idx));
+               }
+       } else if (ret == -EAGAIN) {
+-              netif_stop_queue(ndev);
+-              if (atomic_read(&net_device->num_outstanding_sends) < 1) {
+-                      netif_wake_queue(ndev);
++              netif_tx_stop_queue(netdev_get_tx_queue(
++                                  ndev, packet->q_idx));
++              if (atomic_read(&net_device->queue_sends[packet->q_idx]) < 1) {
++                      netif_tx_wake_queue(netdev_get_tx_queue(
++                                          ndev, packet->q_idx));
+                       ret = -ENOSPC;
+               }
+       } else {
+@@ -570,6 +597,7 @@ int netvsc_send(struct hv_device *device,
+ }
+ static void netvsc_send_recv_completion(struct hv_device *device,
++                                      struct vmbus_channel *channel,
+                                       struct netvsc_device *net_device,
+                                       u64 transaction_id, u32 status)
+ {
+@@ -587,7 +615,7 @@ static void netvsc_send_recv_completion(struct hv_device *device,
+ retry_send_cmplt:
+       /* Send the completion */
+-      ret = vmbus_sendpacket(device->channel, &recvcompMessage,
++      ret = vmbus_sendpacket(channel, &recvcompMessage,
+                              sizeof(struct nvsp_message), transaction_id,
+                              VM_PKT_COMP, 0);
+       if (ret == 0) {
+@@ -618,6 +646,7 @@ static void netvsc_receive_completion(void *context)
+ {
+       struct hv_netvsc_packet *packet = context;
+       struct hv_device *device = packet->device;
++      struct vmbus_channel *channel;
+       struct netvsc_device *net_device;
+       u64 transaction_id = 0;
+       bool fsend_receive_comp = false;
+@@ -649,6 +678,7 @@ static void netvsc_receive_completion(void *context)
+        */
+       if (packet->xfer_page_pkt->count == 0) {
+               fsend_receive_comp = true;
++              channel = packet->xfer_page_pkt->channel;
+               transaction_id = packet->completion.recv.recv_completion_tid;
+               status = packet->xfer_page_pkt->status;
+               list_add_tail(&packet->xfer_page_pkt->list_ent,
+@@ -662,12 +692,13 @@ static void netvsc_receive_completion(void *context)
+       /* Send a receive completion for the xfer page packet */
+       if (fsend_receive_comp)
+-              netvsc_send_recv_completion(device, net_device, transaction_id,
+-                                      status);
++              netvsc_send_recv_completion(device, channel, net_device,
++                                          transaction_id, status);
+ }
+ static void netvsc_receive(struct netvsc_device *net_device,
++                      struct vmbus_channel *channel,
+                       struct hv_device *device,
+                       struct vmpacket_descriptor *packet)
+ {
+@@ -748,7 +779,7 @@ static void netvsc_receive(struct netvsc_device *net_device,
+               spin_unlock_irqrestore(&net_device->recv_pkt_list_lock,
+                                      flags);
+-              netvsc_send_recv_completion(device, net_device,
++              netvsc_send_recv_completion(device, channel, net_device,
+                                           vmxferpage_packet->d.trans_id,
+                                           NVSP_STAT_FAIL);
+@@ -759,6 +790,7 @@ static void netvsc_receive(struct netvsc_device *net_device,
+       xferpage_packet = (struct xferpage_packet *)listHead.next;
+       list_del(&xferpage_packet->list_ent);
+       xferpage_packet->status = NVSP_STAT_SUCCESS;
++      xferpage_packet->channel = channel;
+       /* This is how much we can satisfy */
+       xferpage_packet->count = count - 1;
+@@ -800,10 +832,45 @@ static void netvsc_receive(struct netvsc_device *net_device,
+ }
+-static void netvsc_channel_cb(void *context)
++
++static void netvsc_send_table(struct hv_device *hdev,
++                            struct vmpacket_descriptor *vmpkt)
++{
++      struct netvsc_device *nvscdev;
++      struct net_device *ndev;
++      struct nvsp_message *nvmsg;
++      int i;
++      u32 count, *tab;
++
++      nvscdev = get_outbound_net_device(hdev);
++      if (!nvscdev)
++              return;
++      ndev = nvscdev->ndev;
++
++      nvmsg = (struct nvsp_message *)((unsigned long)vmpkt +
++                                      (vmpkt->offset8 << 3));
++
++      if (nvmsg->hdr.msg_type != NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE)
++              return;
++
++      count = nvmsg->msg.v5_msg.send_table.count;
++      if (count != VRSS_SEND_TAB_SIZE) {
++              netdev_err(ndev, "Received wrong send-table size:%u\n", count);
++              return;
++      }
++
++      tab = (u32 *)((unsigned long)&nvmsg->msg.v5_msg.send_table +
++                    nvmsg->msg.v5_msg.send_table.offset);
++
++      for (i = 0; i < count; i++)
++              nvscdev->send_table[i] = tab[i];
++}
++
++void netvsc_channel_cb(void *context)
+ {
+       int ret;
+-      struct hv_device *device = context;
++      struct vmbus_channel *channel = (struct vmbus_channel *)context;
++      struct hv_device *device;
+       struct netvsc_device *net_device;
+       u32 bytes_recvd;
+       u64 request_id;
+@@ -812,14 +879,19 @@ static void netvsc_channel_cb(void *context)
+       int bufferlen = NETVSC_PACKET_SIZE;
+       struct net_device *ndev;
++      if (channel->primary_channel != NULL)
++              device = channel->primary_channel->device_obj;
++      else
++              device = channel->device_obj;
++
+       net_device = get_inbound_net_device(device);
+       if (!net_device)
+               return;
+       ndev = net_device->ndev;
+-      buffer = net_device->cb_buffer;
++      buffer = get_per_channel_state(channel);
+       do {
+-              ret = vmbus_recvpacket_raw(device->channel, buffer, bufferlen,
++              ret = vmbus_recvpacket_raw(channel, buffer, bufferlen,
+                                          &bytes_recvd, &request_id);
+               if (ret == 0) {
+                       if (bytes_recvd > 0) {
+@@ -831,8 +903,12 @@ static void netvsc_channel_cb(void *context)
+                                       break;
+                               case VM_PKT_DATA_USING_XFER_PAGES:
+-                                      netvsc_receive(net_device,
+-                                                      device, desc);
++                                      netvsc_receive(net_device, channel,
++                                                     device, desc);
++                                      break;
++
++                              case VM_PKT_DATA_INBAND:
++                                      netvsc_send_table(device, desc);
+                                       break;
+                               default:
+@@ -893,6 +969,8 @@ int netvsc_device_add(struct hv_device *device, void *additional_info)
+               goto cleanup;
+       }
++      net_device->ring_size = ring_size;
++
+       /*
+        * Coming into this function, struct net_device * is
+        * registered as the driver private data.
+@@ -917,10 +995,12 @@ int netvsc_device_add(struct hv_device *device, void *additional_info)
+       }
+       init_completion(&net_device->channel_init_wait);
++      set_per_channel_state(device->channel, net_device->cb_buffer);
++
+       /* Open the channel */
+       ret = vmbus_open(device->channel, ring_size * PAGE_SIZE,
+                        ring_size * PAGE_SIZE, NULL, 0,
+-                       netvsc_channel_cb, device);
++                       netvsc_channel_cb, device->channel);
+       if (ret != 0) {
+               netdev_err(ndev, "unable to open channel: %d\n", ret);
+@@ -930,6 +1010,8 @@ int netvsc_device_add(struct hv_device *device, void *additional_info)
+       /* Channel is opened */
+       pr_info("hv_netvsc channel opened successfully\n");
++      net_device->chn_table[0] = device->channel;
++
+       /* Connect with the NetVsp */
+       ret = netvsc_connect_vsp(device);
+       if (ret != 0) {
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 31e55fba7cad..093cf3fc46b8 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -101,7 +101,7 @@ static int netvsc_open(struct net_device *net)
+               return ret;
+       }
+-      netif_start_queue(net);
++      netif_tx_start_all_queues(net);
+       nvdev = hv_get_drvdata(device_obj);
+       rdev = nvdev->extension;
+@@ -149,6 +149,88 @@ static void *init_ppi_data(struct rndis_message *msg, u32 ppi_size,
+       return ppi;
+ }
++union sub_key {
++      u64 k;
++      struct {
++              u8 pad[3];
++              u8 kb;
++              u32 ka;
++      };
++};
++
++/* Toeplitz hash function
++ * data: network byte order
++ * return: host byte order
++ */
++static u32 comp_hash(u8 *key, int klen, u8 *data, int dlen)
++{
++      union sub_key subk;
++      int k_next = 4;
++      u8 dt;
++      int i, j;
++      u32 ret = 0;
++
++      subk.k = 0;
++      subk.ka = ntohl(*(u32 *)key);
++
++      for (i = 0; i < dlen; i++) {
++              subk.kb = key[k_next];
++              k_next = (k_next + 1) % klen;
++              dt = data[i];
++              for (j = 0; j < 8; j++) {
++                      if (dt & 0x80)
++                              ret ^= subk.ka;
++                      dt <<= 1;
++                      subk.k <<= 1;
++              }
++      }
++
++      return ret;
++}
++
++static bool netvsc_set_hash(u32 *hash, struct sk_buff *skb)
++{
++      struct iphdr *iphdr;
++      int data_len;
++      bool ret = false;
++
++      if (eth_hdr(skb)->h_proto != htons(ETH_P_IP))
++              return false;
++
++      iphdr = ip_hdr(skb);
++
++      if (iphdr->version == 4) {
++              if (iphdr->protocol == IPPROTO_TCP)
++                      data_len = 12;
++              else
++                      data_len = 8;
++              *hash = comp_hash(netvsc_hash_key, HASH_KEYLEN,
++                                (u8 *)&iphdr->saddr, data_len);
++              ret = true;
++      }
++
++      return ret;
++}
++
++static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb,
++                      void *accel_priv, select_queue_fallback_t fallback)
++{
++      struct net_device_context *net_device_ctx = netdev_priv(ndev);
++      struct hv_device *hdev =  net_device_ctx->device_ctx;
++      struct netvsc_device *nvsc_dev = hv_get_drvdata(hdev);
++      u32 hash;
++      u16 q_idx = 0;
++
++      if (nvsc_dev == NULL || ndev->real_num_tx_queues <= 1)
++              return 0;
++
++      if (netvsc_set_hash(&hash, skb))
++              q_idx = nvsc_dev->send_table[hash % VRSS_SEND_TAB_SIZE] %
++                      ndev->real_num_tx_queues;
++
++      return q_idx;
++}
++
+ static void netvsc_xmit_completion(void *context)
+ {
+       struct hv_netvsc_packet *packet = (struct hv_netvsc_packet *)context;
+@@ -333,6 +415,8 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       packet->vlan_tci = skb->vlan_tci;
++      packet->q_idx = skb_get_queue_mapping(skb);
++
+       packet->is_data_pkt = true;
+       packet->total_data_buflen = skb->len;
+@@ -554,6 +638,10 @@ int netvsc_recv_callback(struct hv_device *device_obj,
+               __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
+                                      packet->vlan_tci);
++      skb_record_rx_queue(skb, packet->xfer_page_pkt->channel->
++                          offermsg.offer.sub_channel_index %
++                          net->real_num_rx_queues);
++
+       net->stats.rx_packets++;
+       net->stats.rx_bytes += packet->total_data_buflen;
+@@ -602,7 +690,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
+       hv_set_drvdata(hdev, ndev);
+       device_info.ring_size = ring_size;
+       rndis_filter_device_add(hdev, &device_info);
+-      netif_wake_queue(ndev);
++      netif_tx_wake_all_queues(ndev);
+       return 0;
+ }
+@@ -648,6 +736,7 @@ static const struct net_device_ops device_ops = {
+       .ndo_change_mtu =               netvsc_change_mtu,
+       .ndo_validate_addr =            eth_validate_addr,
+       .ndo_set_mac_address =          netvsc_set_mac_addr,
++      .ndo_select_queue =             netvsc_select_queue,
+ };
+ /*
+@@ -694,9 +783,11 @@ static int netvsc_probe(struct hv_device *dev,
+       struct net_device *net = NULL;
+       struct net_device_context *net_device_ctx;
+       struct netvsc_device_info device_info;
++      struct netvsc_device *nvdev;
+       int ret;
+-      net = alloc_etherdev(sizeof(struct net_device_context));
++      net = alloc_etherdev_mq(sizeof(struct net_device_context),
++                              num_online_cpus());
+       if (!net)
+               return -ENOMEM;
+@@ -729,6 +820,12 @@ static int netvsc_probe(struct hv_device *dev,
+       }
+       memcpy(net->dev_addr, device_info.mac_adr, ETH_ALEN);
++      nvdev = hv_get_drvdata(dev);
++      netif_set_real_num_tx_queues(net, nvdev->num_chn);
++      netif_set_real_num_rx_queues(net, nvdev->num_chn);
++      dev_info(&dev->device, "real num tx,rx queues:%u, %u\n",
++               net->real_num_tx_queues, net->real_num_rx_queues);
++
+       ret = register_netdev(net);
+       if (ret != 0) {
+               pr_err("Unable to register netdev.\n");
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index 143a98caf618..d92cfbe43410 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -31,7 +31,7 @@
+ #include "hyperv_net.h"
+-#define RNDIS_EXT_LEN 100
++#define RNDIS_EXT_LEN PAGE_SIZE
+ struct rndis_request {
+       struct list_head list_ent;
+       struct completion  wait_event;
+@@ -94,6 +94,8 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev,
+       rndis_msg->ndis_msg_type = msg_type;
+       rndis_msg->msg_len = msg_len;
++      request->pkt.q_idx = 0;
++
+       /*
+        * Set the request id. This field is always after the rndis header for
+        * request/response packet types so we just used the SetRequest as a
+@@ -509,6 +511,19 @@ static int rndis_filter_query_device(struct rndis_device *dev, u32 oid,
+       query->info_buflen = 0;
+       query->dev_vc_handle = 0;
++      if (oid == OID_GEN_RECEIVE_SCALE_CAPABILITIES) {
++              struct ndis_recv_scale_cap *cap;
++
++              request->request_msg.msg_len +=
++                      sizeof(struct ndis_recv_scale_cap);
++              query->info_buflen = sizeof(struct ndis_recv_scale_cap);
++              cap = (struct ndis_recv_scale_cap *)((unsigned long)query +
++                                                   query->info_buf_offset);
++              cap->hdr.type = NDIS_OBJECT_TYPE_RSS_CAPABILITIES;
++              cap->hdr.rev = NDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_2;
++              cap->hdr.size = sizeof(struct ndis_recv_scale_cap);
++      }
++
+       ret = rndis_filter_send_request(dev, request);
+       if (ret != 0)
+               goto cleanup;
+@@ -695,6 +710,89 @@ cleanup:
+       return ret;
+ }
++u8 netvsc_hash_key[HASH_KEYLEN] = {
++      0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
++      0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
++      0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
++      0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
++      0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa
++};
++
++int rndis_filter_set_rss_param(struct rndis_device *rdev, int num_queue)
++{
++      struct net_device *ndev = rdev->net_dev->ndev;
++      struct rndis_request *request;
++      struct rndis_set_request *set;
++      struct rndis_set_complete *set_complete;
++      u32 extlen = sizeof(struct ndis_recv_scale_param) +
++                   4*ITAB_NUM + HASH_KEYLEN;
++      struct ndis_recv_scale_param *rssp;
++      u32 *itab;
++      u8 *keyp;
++      int i, t, ret;
++
++      request = get_rndis_request(
++                      rdev, RNDIS_MSG_SET,
++                      RNDIS_MESSAGE_SIZE(struct rndis_set_request) + extlen);
++      if (!request)
++              return -ENOMEM;
++
++      set = &request->request_msg.msg.set_req;
++      set->oid = OID_GEN_RECEIVE_SCALE_PARAMETERS;
++      set->info_buflen = extlen;
++      set->info_buf_offset = sizeof(struct rndis_set_request);
++      set->dev_vc_handle = 0;
++
++      rssp = (struct ndis_recv_scale_param *)(set + 1);
++      rssp->hdr.type = NDIS_OBJECT_TYPE_RSS_PARAMETERS;
++      rssp->hdr.rev = NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_2;
++      rssp->hdr.size = sizeof(struct ndis_recv_scale_param);
++      rssp->flag = 0;
++      rssp->hashinfo = NDIS_HASH_FUNC_TOEPLITZ | NDIS_HASH_IPV4 |
++                       NDIS_HASH_TCP_IPV4;
++      rssp->indirect_tabsize = 4*ITAB_NUM;
++      rssp->indirect_taboffset = sizeof(struct ndis_recv_scale_param);
++      rssp->hashkey_size = HASH_KEYLEN;
++      rssp->kashkey_offset = rssp->indirect_taboffset +
++                             rssp->indirect_tabsize;
++
++      /* Set indirection table entries */
++      itab = (u32 *)(rssp + 1);
++      for (i = 0; i < ITAB_NUM; i++)
++              itab[i] = i % num_queue;
++
++      /* Set hask key values */
++      keyp = (u8 *)((unsigned long)rssp + rssp->kashkey_offset);
++      for (i = 0; i < HASH_KEYLEN; i++)
++              keyp[i] = netvsc_hash_key[i];
++
++
++      ret = rndis_filter_send_request(rdev, request);
++      if (ret != 0)
++              goto cleanup;
++
++      t = wait_for_completion_timeout(&request->wait_event, 5*HZ);
++      if (t == 0) {
++              netdev_err(ndev, "timeout before we got a set response...\n");
++              /* can't put_rndis_request, since we may still receive a
++               * send-completion.
++               */
++              return -ETIMEDOUT;
++      } else {
++              set_complete = &request->response_msg.msg.set_complete;
++              if (set_complete->status != RNDIS_STATUS_SUCCESS) {
++                      netdev_err(ndev, "Fail to set RSS parameters:0x%x\n",
++                                 set_complete->status);
++                      ret = -EINVAL;
++              }
++      }
++
++cleanup:
++      put_rndis_request(rdev, request);
++      return ret;
++}
++
++
+ static int rndis_filter_query_device_link_status(struct rndis_device *dev)
+ {
+       u32 size = sizeof(u32);
+@@ -886,6 +984,28 @@ static int rndis_filter_close_device(struct rndis_device *dev)
+       return ret;
+ }
++static void netvsc_sc_open(struct vmbus_channel *new_sc)
++{
++      struct netvsc_device *nvscdev;
++      u16 chn_index = new_sc->offermsg.offer.sub_channel_index;
++      int ret;
++
++      nvscdev = hv_get_drvdata(new_sc->primary_channel->device_obj);
++
++      if (chn_index >= nvscdev->num_chn)
++              return;
++
++      set_per_channel_state(new_sc, nvscdev->sub_cb_buf + (chn_index - 1) *
++                            NETVSC_PACKET_SIZE);
++
++      ret = vmbus_open(new_sc, nvscdev->ring_size * PAGE_SIZE,
++                       nvscdev->ring_size * PAGE_SIZE, NULL, 0,
++                       netvsc_channel_cb, new_sc);
++
++      if (ret == 0)
++              nvscdev->chn_table[chn_index] = new_sc;
++}
++
+ int rndis_filter_device_add(struct hv_device *dev,
+                                 void *additional_info)
+ {
+@@ -894,6 +1014,10 @@ int rndis_filter_device_add(struct hv_device *dev,
+       struct rndis_device *rndis_device;
+       struct netvsc_device_info *device_info = additional_info;
+       struct ndis_offload_params offloads;
++      struct nvsp_message *init_packet;
++      int t;
++      struct ndis_recv_scale_cap rsscap;
++      u32 rsscap_size = sizeof(struct ndis_recv_scale_cap);
+       rndis_device = get_rndis_device();
+       if (!rndis_device)
+@@ -913,6 +1037,7 @@ int rndis_filter_device_add(struct hv_device *dev,
+       /* Initialize the rndis device */
+       net_device = hv_get_drvdata(dev);
++      net_device->num_chn = 1;
+       net_device->extension = rndis_device;
+       rndis_device->net_dev = net_device;
+@@ -952,7 +1077,6 @@ int rndis_filter_device_add(struct hv_device *dev,
+       if (ret)
+               goto err_dev_remv;
+-
+       rndis_filter_query_device_link_status(rndis_device);
+       device_info->link_state = rndis_device->link_state;
+@@ -961,7 +1085,66 @@ int rndis_filter_device_add(struct hv_device *dev,
+                rndis_device->hw_mac_adr,
+                device_info->link_state ? "down" : "up");
+-      return ret;
++      if (net_device->nvsp_version < NVSP_PROTOCOL_VERSION_5)
++              return 0;
++
++      /* vRSS setup */
++      memset(&rsscap, 0, rsscap_size);
++      ret = rndis_filter_query_device(rndis_device,
++                                      OID_GEN_RECEIVE_SCALE_CAPABILITIES,
++                                      &rsscap, &rsscap_size);
++      if (ret || rsscap.num_recv_que < 2)
++              goto out;
++
++      net_device->num_chn = (num_online_cpus() < rsscap.num_recv_que) ?
++                             num_online_cpus() : rsscap.num_recv_que;
++      if (net_device->num_chn == 1)
++              goto out;
++
++      net_device->sub_cb_buf = vzalloc((net_device->num_chn - 1) *
++                                       NETVSC_PACKET_SIZE);
++      if (!net_device->sub_cb_buf) {
++              net_device->num_chn = 1;
++              dev_info(&dev->device, "No memory for subchannels.\n");
++              goto out;
++      }
++
++      vmbus_set_sc_create_callback(dev->channel, netvsc_sc_open);
++
++      init_packet = &net_device->channel_init_pkt;
++      memset(init_packet, 0, sizeof(struct nvsp_message));
++      init_packet->hdr.msg_type = NVSP_MSG5_TYPE_SUBCHANNEL;
++      init_packet->msg.v5_msg.subchn_req.op = NVSP_SUBCHANNEL_ALLOCATE;
++      init_packet->msg.v5_msg.subchn_req.num_subchannels =
++                                              net_device->num_chn - 1;
++      ret = vmbus_sendpacket(dev->channel, init_packet,
++                             sizeof(struct nvsp_message),
++                             (unsigned long)init_packet,
++                             VM_PKT_DATA_INBAND,
++                             VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
++      if (ret)
++              goto out;
++      t = wait_for_completion_timeout(&net_device->channel_init_wait, 5*HZ);
++      if (t == 0) {
++              ret = -ETIMEDOUT;
++              goto out;
++      }
++      if (init_packet->msg.v5_msg.subchn_comp.status !=
++          NVSP_STAT_SUCCESS) {
++              ret = -ENODEV;
++              goto out;
++      }
++      net_device->num_chn = 1 +
++              init_packet->msg.v5_msg.subchn_comp.num_subchannels;
++
++      vmbus_are_subchannels_present(dev->channel);
++
++      ret = rndis_filter_set_rss_param(rndis_device, net_device->num_chn);
++
++out:
++      if (ret)
++              net_device->num_chn = 1;
++      return 0; /* return 0 because primary channel can be used alone */
+ err_dev_remv:
+       rndis_filter_device_remove(dev);
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0002-Drivers-net-hyperv-Cleanup-the-receive-path.patch b/src/patches/linux/0002-Drivers-net-hyperv-Cleanup-the-receive-path.patch
new file mode 100644 (file)
index 0000000..79485b3
--- /dev/null
@@ -0,0 +1,112 @@
+From 348a5d691d84759dda8cdd3cbf9f071115c1240e Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sun, 16 Feb 2014 16:38:44 -0800
+Subject: [PATCH 02/25] Drivers: net: hyperv: Cleanup the receive path
+
+Make the receive path a little more efficient by parameterizing the
+required state rather than re-establishing that state.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc.c | 29 +++++++++++++----------------
+ 1 file changed, 13 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index 03a2c6e17158..7fa2bbade327 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -432,17 +432,14 @@ static inline u32 hv_ringbuf_avail_percent(
+       return avail_write * 100 / ring_info->ring_datasize;
+ }
+-static void netvsc_send_completion(struct hv_device *device,
++static void netvsc_send_completion(struct netvsc_device *net_device,
++                                 struct hv_device *device,
+                                  struct vmpacket_descriptor *packet)
+ {
+-      struct netvsc_device *net_device;
+       struct nvsp_message *nvsp_packet;
+       struct hv_netvsc_packet *nvsc_packet;
+       struct net_device *ndev;
+-      net_device = get_inbound_net_device(device);
+-      if (!net_device)
+-              return;
+       ndev = net_device->ndev;
+       nvsp_packet = (struct nvsp_message *)((unsigned long)packet +
+@@ -561,13 +558,13 @@ int netvsc_send(struct hv_device *device,
+ }
+ static void netvsc_send_recv_completion(struct hv_device *device,
++                                      struct netvsc_device *net_device,
+                                       u64 transaction_id, u32 status)
+ {
+       struct nvsp_message recvcompMessage;
+       int retries = 0;
+       int ret;
+       struct net_device *ndev;
+-      struct netvsc_device *net_device = hv_get_drvdata(device);
+       ndev = net_device->ndev;
+@@ -653,14 +650,15 @@ static void netvsc_receive_completion(void *context)
+       /* Send a receive completion for the xfer page packet */
+       if (fsend_receive_comp)
+-              netvsc_send_recv_completion(device, transaction_id, status);
++              netvsc_send_recv_completion(device, net_device, transaction_id,
++                                      status);
+ }
+-static void netvsc_receive(struct hv_device *device,
+-                          struct vmpacket_descriptor *packet)
++static void netvsc_receive(struct netvsc_device *net_device,
++                      struct hv_device *device,
++                      struct vmpacket_descriptor *packet)
+ {
+-      struct netvsc_device *net_device;
+       struct vmtransfer_page_packet_header *vmxferpage_packet;
+       struct nvsp_message *nvsp_packet;
+       struct hv_netvsc_packet *netvsc_packet = NULL;
+@@ -673,9 +671,6 @@ static void netvsc_receive(struct hv_device *device,
+       LIST_HEAD(listHead);
+-      net_device = get_inbound_net_device(device);
+-      if (!net_device)
+-              return;
+       ndev = net_device->ndev;
+       /*
+@@ -741,7 +736,7 @@ static void netvsc_receive(struct hv_device *device,
+               spin_unlock_irqrestore(&net_device->recv_pkt_list_lock,
+                                      flags);
+-              netvsc_send_recv_completion(device,
++              netvsc_send_recv_completion(device, net_device,
+                                           vmxferpage_packet->d.trans_id,
+                                           NVSP_STAT_FAIL);
+@@ -825,11 +820,13 @@ static void netvsc_channel_cb(void *context)
+                               desc = (struct vmpacket_descriptor *)buffer;
+                               switch (desc->type) {
+                               case VM_PKT_COMP:
+-                                      netvsc_send_completion(device, desc);
++                                      netvsc_send_completion(net_device,
++                                                              device, desc);
+                                       break;
+                               case VM_PKT_DATA_USING_XFER_PAGES:
+-                                      netvsc_receive(device, desc);
++                                      netvsc_receive(net_device,
++                                                      device, desc);
+                                       break;
+                               default:
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0002-hyperv-Remove-recv_pkt_list-and-lock.patch b/src/patches/linux/0002-hyperv-Remove-recv_pkt_list-and-lock.patch
new file mode 100644 (file)
index 0000000..bbe0e52
--- /dev/null
@@ -0,0 +1,384 @@
+From 4baab26129e0540746744232022110dbe9e011e7 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Mon, 21 Apr 2014 14:54:43 -0700
+Subject: [PATCH 02/11] hyperv: Remove recv_pkt_list and lock
+
+Removed recv_pkt_list and lock, and updated related code, so that
+the locking overhead is reduced especially when multiple channels
+are in use.
+
+The recv_pkt_list isn't actually necessary because the packets are
+processed sequentially in each channel. It has been replaced by a
+local variable, and the related lock for this list is also removed.
+The is_data_pkt field is not used in receive path, so its assignment
+is cleaned up.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   |  33 --------
+ drivers/net/hyperv/netvsc.c       | 174 +++-----------------------------------
+ drivers/net/hyperv/netvsc_drv.c   |   2 +-
+ drivers/net/hyperv/rndis_filter.c |   2 -
+ 4 files changed, 13 insertions(+), 198 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 57eb3f906d64..a1af0f7711e2 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -119,27 +119,14 @@ struct ndis_recv_scale_param { /* NDIS_RECEIVE_SCALE_PARAMETERS */
+ };
+ /* Fwd declaration */
+-struct hv_netvsc_packet;
+ struct ndis_tcp_ip_checksum_info;
+-/* Represent the xfer page packet which contains 1 or more netvsc packet */
+-struct xferpage_packet {
+-      struct list_head list_ent;
+-      u32 status;
+-
+-      /* # of netvsc packets this xfer packet contains */
+-      u32 count;
+-
+-      struct vmbus_channel *channel;
+-};
+-
+ /*
+  * Represent netvsc packet which contains 1 RNDIS and 1 ethernet frame
+  * within the RNDIS
+  */
+ struct hv_netvsc_packet {
+       /* Bookkeeping stuff */
+-      struct list_head list_ent;
+       u32 status;
+       struct hv_device *device;
+@@ -149,19 +136,8 @@ struct hv_netvsc_packet {
+       u16 q_idx;
+       struct vmbus_channel *channel;
+-      /*
+-       * Valid only for receives when we break a xfer page packet
+-       * into multiple netvsc packets
+-       */
+-      struct xferpage_packet *xfer_page_pkt;
+-
+       union {
+               struct {
+-                      u64 recv_completion_tid;
+-                      void *recv_completion_ctx;
+-                      void (*recv_completion)(void *context);
+-              } recv;
+-              struct {
+                       u64 send_completion_tid;
+                       void *send_completion_ctx;
+                       void (*send_completion)(void *context);
+@@ -613,9 +589,6 @@ struct nvsp_message {
+ #define NETVSC_RECEIVE_BUFFER_ID              0xcafe
+-/* Preallocated receive packets */
+-#define NETVSC_RECEIVE_PACKETLIST_COUNT               256
+-
+ #define NETVSC_PACKET_SIZE                      2048
+ #define VRSS_SEND_TAB_SIZE 16
+@@ -630,12 +603,6 @@ struct netvsc_device {
+       wait_queue_head_t wait_drain;
+       bool start_remove;
+       bool destroy;
+-      /*
+-       * List of free preallocated hv_netvsc_packet to represent receive
+-       * packet
+-       */
+-      struct list_head recv_pkt_list;
+-      spinlock_t recv_pkt_list_lock;
+       /* Receive buffer allocated by us but manages by NetVSP */
+       void *recv_buf;
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index e7e77f12bc38..b10334773b32 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -387,7 +387,6 @@ static void netvsc_disconnect_vsp(struct netvsc_device *net_device)
+ int netvsc_device_remove(struct hv_device *device)
+ {
+       struct netvsc_device *net_device;
+-      struct hv_netvsc_packet *netvsc_packet, *pos;
+       unsigned long flags;
+       net_device = hv_get_drvdata(device);
+@@ -416,12 +415,6 @@ int netvsc_device_remove(struct hv_device *device)
+       vmbus_close(device->channel);
+       /* Release all resources */
+-      list_for_each_entry_safe(netvsc_packet, pos,
+-                               &net_device->recv_pkt_list, list_ent) {
+-              list_del(&netvsc_packet->list_ent);
+-              kfree(netvsc_packet);
+-      }
+-
+       if (net_device->sub_cb_buf)
+               vfree(net_device->sub_cb_buf);
+@@ -641,62 +634,6 @@ retry_send_cmplt:
+       }
+ }
+-/* Send a receive completion packet to RNDIS device (ie NetVsp) */
+-static void netvsc_receive_completion(void *context)
+-{
+-      struct hv_netvsc_packet *packet = context;
+-      struct hv_device *device = packet->device;
+-      struct vmbus_channel *channel;
+-      struct netvsc_device *net_device;
+-      u64 transaction_id = 0;
+-      bool fsend_receive_comp = false;
+-      unsigned long flags;
+-      struct net_device *ndev;
+-      u32 status = NVSP_STAT_NONE;
+-
+-      /*
+-       * Even though it seems logical to do a GetOutboundNetDevice() here to
+-       * send out receive completion, we are using GetInboundNetDevice()
+-       * since we may have disable outbound traffic already.
+-       */
+-      net_device = get_inbound_net_device(device);
+-      if (!net_device)
+-              return;
+-      ndev = net_device->ndev;
+-
+-      /* Overloading use of the lock. */
+-      spin_lock_irqsave(&net_device->recv_pkt_list_lock, flags);
+-
+-      if (packet->status != NVSP_STAT_SUCCESS)
+-              packet->xfer_page_pkt->status = NVSP_STAT_FAIL;
+-
+-      packet->xfer_page_pkt->count--;
+-
+-      /*
+-       * Last one in the line that represent 1 xfer page packet.
+-       * Return the xfer page packet itself to the freelist
+-       */
+-      if (packet->xfer_page_pkt->count == 0) {
+-              fsend_receive_comp = true;
+-              channel = packet->xfer_page_pkt->channel;
+-              transaction_id = packet->completion.recv.recv_completion_tid;
+-              status = packet->xfer_page_pkt->status;
+-              list_add_tail(&packet->xfer_page_pkt->list_ent,
+-                            &net_device->recv_pkt_list);
+-
+-      }
+-
+-      /* Put the packet back */
+-      list_add_tail(&packet->list_ent, &net_device->recv_pkt_list);
+-      spin_unlock_irqrestore(&net_device->recv_pkt_list_lock, flags);
+-
+-      /* Send a receive completion for the xfer page packet */
+-      if (fsend_receive_comp)
+-              netvsc_send_recv_completion(device, channel, net_device,
+-                                          transaction_id, status);
+-
+-}
+-
+ static void netvsc_receive(struct netvsc_device *net_device,
+                       struct vmbus_channel *channel,
+                       struct hv_device *device,
+@@ -704,16 +641,13 @@ static void netvsc_receive(struct netvsc_device *net_device,
+ {
+       struct vmtransfer_page_packet_header *vmxferpage_packet;
+       struct nvsp_message *nvsp_packet;
+-      struct hv_netvsc_packet *netvsc_packet = NULL;
+-      /* struct netvsc_driver *netvscDriver; */
+-      struct xferpage_packet *xferpage_packet = NULL;
++      struct hv_netvsc_packet nv_pkt;
++      struct hv_netvsc_packet *netvsc_packet = &nv_pkt;
++      u32 status = NVSP_STAT_SUCCESS;
+       int i;
+       int count = 0;
+-      unsigned long flags;
+       struct net_device *ndev;
+-      LIST_HEAD(listHead);
+-
+       ndev = net_device->ndev;
+       /*
+@@ -746,78 +680,14 @@ static void netvsc_receive(struct netvsc_device *net_device,
+               return;
+       }
+-      /*
+-       * Grab free packets (range count + 1) to represent this xfer
+-       * page packet. +1 to represent the xfer page packet itself.
+-       * We grab it here so that we know exactly how many we can
+-       * fulfil
+-       */
+-      spin_lock_irqsave(&net_device->recv_pkt_list_lock, flags);
+-      while (!list_empty(&net_device->recv_pkt_list)) {
+-              list_move_tail(net_device->recv_pkt_list.next, &listHead);
+-              if (++count == vmxferpage_packet->range_cnt + 1)
+-                      break;
+-      }
+-      spin_unlock_irqrestore(&net_device->recv_pkt_list_lock, flags);
+-
+-      /*
+-       * We need at least 2 netvsc pkts (1 to represent the xfer
+-       * page and at least 1 for the range) i.e. we can handled
+-       * some of the xfer page packet ranges...
+-       */
+-      if (count < 2) {
+-              netdev_err(ndev, "Got only %d netvsc pkt...needed "
+-                      "%d pkts. Dropping this xfer page packet completely!\n",
+-                      count, vmxferpage_packet->range_cnt + 1);
+-
+-              /* Return it to the freelist */
+-              spin_lock_irqsave(&net_device->recv_pkt_list_lock, flags);
+-              for (i = count; i != 0; i--) {
+-                      list_move_tail(listHead.next,
+-                                     &net_device->recv_pkt_list);
+-              }
+-              spin_unlock_irqrestore(&net_device->recv_pkt_list_lock,
+-                                     flags);
+-
+-              netvsc_send_recv_completion(device, channel, net_device,
+-                                          vmxferpage_packet->d.trans_id,
+-                                          NVSP_STAT_FAIL);
+-
+-              return;
+-      }
+-
+-      /* Remove the 1st packet to represent the xfer page packet itself */
+-      xferpage_packet = (struct xferpage_packet *)listHead.next;
+-      list_del(&xferpage_packet->list_ent);
+-      xferpage_packet->status = NVSP_STAT_SUCCESS;
+-      xferpage_packet->channel = channel;
+-
+-      /* This is how much we can satisfy */
+-      xferpage_packet->count = count - 1;
+-
+-      if (xferpage_packet->count != vmxferpage_packet->range_cnt) {
+-              netdev_err(ndev, "Needed %d netvsc pkts to satisfy "
+-                      "this xfer page...got %d\n",
+-                      vmxferpage_packet->range_cnt, xferpage_packet->count);
+-      }
++      count = vmxferpage_packet->range_cnt;
++      netvsc_packet->device = device;
++      netvsc_packet->channel = channel;
+       /* Each range represents 1 RNDIS pkt that contains 1 ethernet frame */
+-      for (i = 0; i < (count - 1); i++) {
+-              netvsc_packet = (struct hv_netvsc_packet *)listHead.next;
+-              list_del(&netvsc_packet->list_ent);
+-
++      for (i = 0; i < count; i++) {
+               /* Initialize the netvsc packet */
+               netvsc_packet->status = NVSP_STAT_SUCCESS;
+-              netvsc_packet->xfer_page_pkt = xferpage_packet;
+-              netvsc_packet->completion.recv.recv_completion =
+-                                      netvsc_receive_completion;
+-              netvsc_packet->completion.recv.recv_completion_ctx =
+-                                      netvsc_packet;
+-              netvsc_packet->device = device;
+-              /* Save this so that we can send it back */
+-              netvsc_packet->completion.recv.recv_completion_tid =
+-                                      vmxferpage_packet->d.trans_id;
+-
+               netvsc_packet->data = (void *)((unsigned long)net_device->
+                       recv_buf + vmxferpage_packet->ranges[i].byte_offset);
+               netvsc_packet->total_data_buflen =
+@@ -826,10 +696,12 @@ static void netvsc_receive(struct netvsc_device *net_device,
+               /* Pass it to the upper layer */
+               rndis_filter_receive(device, netvsc_packet);
+-              netvsc_receive_completion(netvsc_packet->
+-                              completion.recv.recv_completion_ctx);
++              if (netvsc_packet->status != NVSP_STAT_SUCCESS)
++                      status = NVSP_STAT_FAIL;
+       }
++      netvsc_send_recv_completion(device, channel, net_device,
++                                  vmxferpage_packet->d.trans_id, status);
+ }
+@@ -956,11 +828,9 @@ void netvsc_channel_cb(void *context)
+ int netvsc_device_add(struct hv_device *device, void *additional_info)
+ {
+       int ret = 0;
+-      int i;
+       int ring_size =
+       ((struct netvsc_device_info *)additional_info)->ring_size;
+       struct netvsc_device *net_device;
+-      struct hv_netvsc_packet *packet, *pos;
+       struct net_device *ndev;
+       net_device = alloc_net_device(device);
+@@ -981,18 +851,6 @@ int netvsc_device_add(struct hv_device *device, void *additional_info)
+       ndev = net_device->ndev;
+       /* Initialize the NetVSC channel extension */
+-      spin_lock_init(&net_device->recv_pkt_list_lock);
+-
+-      INIT_LIST_HEAD(&net_device->recv_pkt_list);
+-
+-      for (i = 0; i < NETVSC_RECEIVE_PACKETLIST_COUNT; i++) {
+-              packet = kzalloc(sizeof(struct hv_netvsc_packet), GFP_KERNEL);
+-              if (!packet)
+-                      break;
+-
+-              list_add_tail(&packet->list_ent,
+-                            &net_device->recv_pkt_list);
+-      }
+       init_completion(&net_device->channel_init_wait);
+       set_per_channel_state(device->channel, net_device->cb_buffer);
+@@ -1028,16 +886,8 @@ close:
+ cleanup:
+-      if (net_device) {
+-              list_for_each_entry_safe(packet, pos,
+-                                       &net_device->recv_pkt_list,
+-                                       list_ent) {
+-                      list_del(&packet->list_ent);
+-                      kfree(packet);
+-              }
+-
++      if (net_device)
+               kfree(net_device);
+-      }
+       return ret;
+ }
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 093cf3fc46b8..8f6d53a2ed95 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -638,7 +638,7 @@ int netvsc_recv_callback(struct hv_device *device_obj,
+               __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
+                                      packet->vlan_tci);
+-      skb_record_rx_queue(skb, packet->xfer_page_pkt->channel->
++      skb_record_rx_queue(skb, packet->channel->
+                           offermsg.offer.sub_channel_index %
+                           net->real_num_rx_queues);
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index d92cfbe43410..48f5a0fbd674 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -401,8 +401,6 @@ static void rndis_filter_receive_data(struct rndis_device *dev,
+       pkt->total_data_buflen = rndis_pkt->data_len;
+       pkt->data = (void *)((unsigned long)pkt->data + data_offset);
+-      pkt->is_data_pkt = true;
+-
+       vlan = rndis_get_ppi(rndis_pkt, IEEE_8021Q_INFO);
+       if (vlan) {
+               pkt->vlan_tci = VLAN_TAG_PRESENT | vlan->vlanid |
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0003-Drivers-net-hyperv-Cleanup-the-netvsc-receive-callba.patch b/src/patches/linux/0003-Drivers-net-hyperv-Cleanup-the-netvsc-receive-callba.patch
new file mode 100644 (file)
index 0000000..e0b82ea
--- /dev/null
@@ -0,0 +1,101 @@
+From c9f2db35ac4f789930522d9d36200cb71b442bed Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sun, 16 Feb 2014 16:38:45 -0800
+Subject: [PATCH 03/25] Drivers: net: hyperv: Cleanup the netvsc receive
+ callback functio
+
+Get rid of the buffer allocation in the receive path for normal packets.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h |  2 ++
+ drivers/net/hyperv/netvsc.c     | 33 ++++++++++-----------------------
+ 2 files changed, 12 insertions(+), 23 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 7645ba38bde8..01a16ea77a5a 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -506,6 +506,8 @@ struct netvsc_device {
+       /* Holds rndis device info */
+       void *extension;
++      /* The recive buffer for this device */
++      unsigned char cb_buffer[NETVSC_PACKET_SIZE];
+ };
+ /* NdisInitialize message */
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index 7fa2bbade327..9a0e9c6f1414 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -795,22 +795,16 @@ static void netvsc_channel_cb(void *context)
+       struct netvsc_device *net_device;
+       u32 bytes_recvd;
+       u64 request_id;
+-      unsigned char *packet;
+       struct vmpacket_descriptor *desc;
+       unsigned char *buffer;
+       int bufferlen = NETVSC_PACKET_SIZE;
+       struct net_device *ndev;
+-      packet = kzalloc(NETVSC_PACKET_SIZE * sizeof(unsigned char),
+-                       GFP_ATOMIC);
+-      if (!packet)
+-              return;
+-      buffer = packet;
+-
+       net_device = get_inbound_net_device(device);
+       if (!net_device)
+-              goto out;
++              return;
+       ndev = net_device->ndev;
++      buffer = net_device->cb_buffer;
+       do {
+               ret = vmbus_recvpacket_raw(device->channel, buffer, bufferlen,
+@@ -838,23 +832,16 @@ static void netvsc_channel_cb(void *context)
+                                       break;
+                               }
+-                              /* reset */
+-                              if (bufferlen > NETVSC_PACKET_SIZE) {
+-                                      kfree(buffer);
+-                                      buffer = packet;
+-                                      bufferlen = NETVSC_PACKET_SIZE;
+-                              }
+                       } else {
+-                              /* reset */
+-                              if (bufferlen > NETVSC_PACKET_SIZE) {
+-                                      kfree(buffer);
+-                                      buffer = packet;
+-                                      bufferlen = NETVSC_PACKET_SIZE;
+-                              }
+-
++                              /*
++                               * We are done for this pass.
++                               */
+                               break;
+                       }
++
+               } else if (ret == -ENOBUFS) {
++                      if (bufferlen > NETVSC_PACKET_SIZE)
++                              kfree(buffer);
+                       /* Handle large packet */
+                       buffer = kmalloc(bytes_recvd, GFP_ATOMIC);
+                       if (buffer == NULL) {
+@@ -869,8 +856,8 @@ static void netvsc_channel_cb(void *context)
+               }
+       } while (1);
+-out:
+-      kfree(buffer);
++      if (bufferlen > NETVSC_PACKET_SIZE)
++              kfree(buffer);
+       return;
+ }
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0003-hyperv-Simplify-the-send_completion-variables.patch b/src/patches/linux/0003-hyperv-Simplify-the-send_completion-variables.patch
new file mode 100644 (file)
index 0000000..dcab56f
--- /dev/null
@@ -0,0 +1,105 @@
+From 893f66277799cd46bdf97429cc5d16a815a51273 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Mon, 21 Apr 2014 14:54:44 -0700
+Subject: [PATCH 03/11] hyperv: Simplify the send_completion variables
+
+The union contains only one member now, so we use the variables in it directly.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   | 10 +++-------
+ drivers/net/hyperv/netvsc.c       |  7 +++----
+ drivers/net/hyperv/netvsc_drv.c   |  8 ++++----
+ drivers/net/hyperv/rndis_filter.c |  2 +-
+ 4 files changed, 11 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index a1af0f7711e2..d1f7826aa75f 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -136,13 +136,9 @@ struct hv_netvsc_packet {
+       u16 q_idx;
+       struct vmbus_channel *channel;
+-      union {
+-              struct {
+-                      u64 send_completion_tid;
+-                      void *send_completion_ctx;
+-                      void (*send_completion)(void *context);
+-              } send;
+-      } completion;
++      u64 send_completion_tid;
++      void *send_completion_ctx;
++      void (*send_completion)(void *context);
+       /* This points to the memory after page_buf */
+       struct rndis_message *rndis_msg;
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index b10334773b32..bbee44635035 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -479,9 +479,8 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+               if (nvsc_packet) {
+                       q_idx = nvsc_packet->q_idx;
+                       channel = nvsc_packet->channel;
+-                      nvsc_packet->completion.send.send_completion(
+-                              nvsc_packet->completion.send.
+-                              send_completion_ctx);
++                      nvsc_packet->send_completion(nvsc_packet->
++                                                   send_completion_ctx);
+               }
+               num_outstanding_sends =
+@@ -534,7 +533,7 @@ int netvsc_send(struct hv_device *device,
+               0xFFFFFFFF;
+       sendMessage.msg.v1_msg.send_rndis_pkt.send_buf_section_size = 0;
+-      if (packet->completion.send.send_completion)
++      if (packet->send_completion)
+               req_id = (ulong)packet;
+       else
+               req_id = 0;
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 8f6d53a2ed95..c76b66515e92 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -235,7 +235,7 @@ static void netvsc_xmit_completion(void *context)
+ {
+       struct hv_netvsc_packet *packet = (struct hv_netvsc_packet *)context;
+       struct sk_buff *skb = (struct sk_buff *)
+-              (unsigned long)packet->completion.send.send_completion_tid;
++              (unsigned long)packet->send_completion_tid;
+       kfree(packet);
+@@ -425,9 +425,9 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+                               (num_data_pgs * sizeof(struct hv_page_buffer)));
+       /* Set the completion routine */
+-      packet->completion.send.send_completion = netvsc_xmit_completion;
+-      packet->completion.send.send_completion_ctx = packet;
+-      packet->completion.send.send_completion_tid = (unsigned long)skb;
++      packet->send_completion = netvsc_xmit_completion;
++      packet->send_completion_ctx = packet;
++      packet->send_completion_tid = (unsigned long)skb;
+       isvlan = packet->vlan_tci & VLAN_TAG_PRESENT;
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index 48f5a0fbd674..99c527adae5b 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -236,7 +236,7 @@ static int rndis_filter_send_request(struct rndis_device *dev,
+                       packet->page_buf[0].len;
+       }
+-      packet->completion.send.send_completion = NULL;
++      packet->send_completion = NULL;
+       ret = netvsc_send(dev->net_dev->dev, packet);
+       return ret;
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0004-hyperv-Add-latest-NetVSP-versions-to-auto-negotiatio.patch b/src/patches/linux/0004-hyperv-Add-latest-NetVSP-versions-to-auto-negotiatio.patch
new file mode 100644 (file)
index 0000000..f9cd827
--- /dev/null
@@ -0,0 +1,171 @@
+From 3c2a271d9681cc017947c5e027acc64707c30dee Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Wed, 19 Feb 2014 15:49:45 -0800
+Subject: [PATCH 04/25] hyperv: Add latest NetVSP versions to auto negotiation
+
+It auto negotiates the highest NetVSP version supported by both guest and host.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h | 53 +++++++++++++++++++++++++++++++++++++++++
+ drivers/net/hyperv/netvsc.c     | 25 ++++++++++++-------
+ drivers/net/hyperv/netvsc_drv.c |  2 +-
+ 3 files changed, 70 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 01a16ea77a5a..39fc230f5c20 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -139,6 +139,8 @@ int rndis_filter_set_device_mac(struct hv_device *hdev, char *mac);
+ #define NVSP_PROTOCOL_VERSION_1               2
+ #define NVSP_PROTOCOL_VERSION_2               0x30002
++#define NVSP_PROTOCOL_VERSION_4               0x40000
++#define NVSP_PROTOCOL_VERSION_5               0x50000
+ enum {
+       NVSP_MSG_TYPE_NONE = 0,
+@@ -193,6 +195,23 @@ enum {
+       NVSP_MSG2_TYPE_ALLOC_CHIMNEY_HANDLE,
+       NVSP_MSG2_TYPE_ALLOC_CHIMNEY_HANDLE_COMP,
++
++      NVSP_MSG2_MAX = NVSP_MSG2_TYPE_ALLOC_CHIMNEY_HANDLE_COMP,
++
++      /* Version 4 messages */
++      NVSP_MSG4_TYPE_SEND_VF_ASSOCIATION,
++      NVSP_MSG4_TYPE_SWITCH_DATA_PATH,
++      NVSP_MSG4_TYPE_UPLINK_CONNECT_STATE_DEPRECATED,
++
++      NVSP_MSG4_MAX = NVSP_MSG4_TYPE_UPLINK_CONNECT_STATE_DEPRECATED,
++
++      /* Version 5 messages */
++      NVSP_MSG5_TYPE_OID_QUERY_EX,
++      NVSP_MSG5_TYPE_OID_QUERY_EX_COMP,
++      NVSP_MSG5_TYPE_SUBCHANNEL,
++      NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE,
++
++      NVSP_MSG5_MAX = NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE,
+ };
+ enum {
+@@ -447,10 +466,44 @@ union nvsp_2_message_uber {
+       struct nvsp_2_free_rxbuf free_rxbuf;
+ } __packed;
++enum nvsp_subchannel_operation {
++      NVSP_SUBCHANNEL_NONE = 0,
++      NVSP_SUBCHANNEL_ALLOCATE,
++      NVSP_SUBCHANNEL_MAX
++};
++
++struct nvsp_5_subchannel_request {
++      u32 op;
++      u32 num_subchannels;
++} __packed;
++
++struct nvsp_5_subchannel_complete {
++      u32 status;
++      u32 num_subchannels; /* Actual number of subchannels allocated */
++} __packed;
++
++struct nvsp_5_send_indirect_table {
++      /* The number of entries in the send indirection table */
++      u32 count;
++
++      /* The offset of the send indireciton table from top of this struct.
++       * The send indirection table tells which channel to put the send
++       * traffic on. Each entry is a channel number.
++       */
++      u32 offset;
++} __packed;
++
++union nvsp_5_message_uber {
++      struct nvsp_5_subchannel_request subchn_req;
++      struct nvsp_5_subchannel_complete subchn_comp;
++      struct nvsp_5_send_indirect_table send_table;
++} __packed;
++
+ union nvsp_all_messages {
+       union nvsp_message_init_uber init_msg;
+       union nvsp_1_message_uber v1_msg;
+       union nvsp_2_message_uber v2_msg;
++      union nvsp_5_message_uber v5_msg;
+ } __packed;
+ /* ALL Messages */
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index 9a0e9c6f1414..1a0280dcba7e 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -290,7 +290,7 @@ static int negotiate_nvsp_ver(struct hv_device *device,
+           NVSP_STAT_SUCCESS)
+               return -EINVAL;
+-      if (nvsp_ver != NVSP_PROTOCOL_VERSION_2)
++      if (nvsp_ver == NVSP_PROTOCOL_VERSION_1)
+               return 0;
+       /* NVSPv2 only: Send NDIS config */
+@@ -314,6 +314,9 @@ static int netvsc_connect_vsp(struct hv_device *device)
+       struct nvsp_message *init_packet;
+       int ndis_version;
+       struct net_device *ndev;
++      u32 ver_list[] = { NVSP_PROTOCOL_VERSION_1, NVSP_PROTOCOL_VERSION_2,
++              NVSP_PROTOCOL_VERSION_4, NVSP_PROTOCOL_VERSION_5 };
++      int i, num_ver = 4; /* number of different NVSP versions */
+       net_device = get_outbound_net_device(device);
+       if (!net_device)
+@@ -323,13 +326,14 @@ static int netvsc_connect_vsp(struct hv_device *device)
+       init_packet = &net_device->channel_init_pkt;
+       /* Negotiate the latest NVSP protocol supported */
+-      if (negotiate_nvsp_ver(device, net_device, init_packet,
+-                             NVSP_PROTOCOL_VERSION_2) == 0) {
+-              net_device->nvsp_version = NVSP_PROTOCOL_VERSION_2;
+-      } else if (negotiate_nvsp_ver(device, net_device, init_packet,
+-                                  NVSP_PROTOCOL_VERSION_1) == 0) {
+-              net_device->nvsp_version = NVSP_PROTOCOL_VERSION_1;
+-      } else {
++      for (i = num_ver - 1; i >= 0; i--)
++              if (negotiate_nvsp_ver(device, net_device, init_packet,
++                                     ver_list[i])  == 0) {
++                      net_device->nvsp_version = ver_list[i];
++                      break;
++              }
++
++      if (i < 0) {
+               ret = -EPROTO;
+               goto cleanup;
+       }
+@@ -339,7 +343,10 @@ static int netvsc_connect_vsp(struct hv_device *device)
+       /* Send the ndis version */
+       memset(init_packet, 0, sizeof(struct nvsp_message));
+-      ndis_version = 0x00050001;
++      if (net_device->nvsp_version <= NVSP_PROTOCOL_VERSION_4)
++              ndis_version = 0x00050001;
++      else
++              ndis_version = 0x0006001e;
+       init_packet->hdr.msg_type = NVSP_MSG1_TYPE_SEND_NDIS_VER;
+       init_packet->msg.v1_msg.
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 28020f83ba6f..8e3a0b00099b 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -328,7 +328,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
+       if (nvdev == NULL || nvdev->destroy)
+               return -ENODEV;
+-      if (nvdev->nvsp_version == NVSP_PROTOCOL_VERSION_2)
++      if (nvdev->nvsp_version >= NVSP_PROTOCOL_VERSION_2)
+               limit = NETVSC_MTU;
+       if (mtu < 68 || mtu > limit)
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0004-hyperv-Enable-sendbuf-mechanism-on-the-send-path.patch b/src/patches/linux/0004-hyperv-Enable-sendbuf-mechanism-on-the-send-path.patch
new file mode 100644 (file)
index 0000000..bc09122
--- /dev/null
@@ -0,0 +1,407 @@
+From c25aaf814a63f9d9c4e45416f13d70ef0aa0be2e Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Wed, 30 Apr 2014 10:14:31 -0700
+Subject: [PATCH 04/11] hyperv: Enable sendbuf mechanism on the send path
+
+We send packets using a copy-free mechanism (this is the Guest to Host transport
+via VMBUS). While this is obviously optimal for large packets,
+it may not be optimal for small packets. Hyper-V host supports
+a second mechanism for sending packets that is "copy based". We implement that
+mechanism in this patch.
+
+In this version of the patch I have addressed a comment from David Miller.
+
+With this patch (and all of the other offload and VRSS patches), we are now able
+to almost saturate a 10G interface between Linux VMs on Hyper-V
+on different hosts - close to  9 Gbps as measured via iperf.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h |  14 +++
+ drivers/net/hyperv/netvsc.c     | 226 ++++++++++++++++++++++++++++++++++++++--
+ drivers/net/hyperv/netvsc_drv.c |   3 +-
+ 3 files changed, 234 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index d1f7826aa75f..4b7df5a5c966 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -140,6 +140,8 @@ struct hv_netvsc_packet {
+       void *send_completion_ctx;
+       void (*send_completion)(void *context);
++      u32 send_buf_index;
++
+       /* This points to the memory after page_buf */
+       struct rndis_message *rndis_msg;
+@@ -582,6 +584,9 @@ struct nvsp_message {
+ #define NETVSC_RECEIVE_BUFFER_SIZE            (1024*1024*16)  /* 16MB */
+ #define NETVSC_RECEIVE_BUFFER_SIZE_LEGACY     (1024*1024*15)  /* 15MB */
++#define NETVSC_SEND_BUFFER_SIZE                       (1024 * 1024)   /* 1MB */
++#define NETVSC_INVALID_INDEX                  -1
++
+ #define NETVSC_RECEIVE_BUFFER_ID              0xcafe
+@@ -607,6 +612,15 @@ struct netvsc_device {
+       u32 recv_section_cnt;
+       struct nvsp_1_receive_buffer_section *recv_section;
++      /* Send buffer allocated by us */
++      void *send_buf;
++      u32 send_buf_size;
++      u32 send_buf_gpadl_handle;
++      u32 send_section_cnt;
++      u32 send_section_size;
++      unsigned long *send_section_map;
++      int map_words;
++
+       /* Used for NetVSP initialization protocol */
+       struct completion channel_init_wait;
+       struct nvsp_message channel_init_pkt;
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index bbee44635035..c041f63a6d30 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -28,6 +28,7 @@
+ #include <linux/slab.h>
+ #include <linux/netdevice.h>
+ #include <linux/if_ether.h>
++#include <asm/sync_bitops.h>
+ #include "hyperv_net.h"
+@@ -80,7 +81,7 @@ get_in_err:
+ }
+-static int netvsc_destroy_recv_buf(struct netvsc_device *net_device)
++static int netvsc_destroy_buf(struct netvsc_device *net_device)
+ {
+       struct nvsp_message *revoke_packet;
+       int ret = 0;
+@@ -146,10 +147,62 @@ static int netvsc_destroy_recv_buf(struct netvsc_device *net_device)
+               net_device->recv_section = NULL;
+       }
++      /* Deal with the send buffer we may have setup.
++       * If we got a  send section size, it means we received a
++       * SendsendBufferComplete msg (ie sent
++       * NvspMessage1TypeSendReceiveBuffer msg) therefore, we need
++       * to send a revoke msg here
++       */
++      if (net_device->send_section_size) {
++              /* Send the revoke receive buffer */
++              revoke_packet = &net_device->revoke_packet;
++              memset(revoke_packet, 0, sizeof(struct nvsp_message));
++
++              revoke_packet->hdr.msg_type =
++                      NVSP_MSG1_TYPE_REVOKE_SEND_BUF;
++              revoke_packet->msg.v1_msg.revoke_recv_buf.id = 0;
++
++              ret = vmbus_sendpacket(net_device->dev->channel,
++                                     revoke_packet,
++                                     sizeof(struct nvsp_message),
++                                     (unsigned long)revoke_packet,
++                                     VM_PKT_DATA_INBAND, 0);
++              /* If we failed here, we might as well return and
++               * have a leak rather than continue and a bugchk
++               */
++              if (ret != 0) {
++                      netdev_err(ndev, "unable to send "
++                                 "revoke send buffer to netvsp\n");
++                      return ret;
++              }
++      }
++      /* Teardown the gpadl on the vsp end */
++      if (net_device->send_buf_gpadl_handle) {
++              ret = vmbus_teardown_gpadl(net_device->dev->channel,
++                                         net_device->send_buf_gpadl_handle);
++
++              /* If we failed here, we might as well return and have a leak
++               * rather than continue and a bugchk
++               */
++              if (ret != 0) {
++                      netdev_err(ndev,
++                                 "unable to teardown send buffer's gpadl\n");
++                      return ret;
++              }
++              net_device->recv_buf_gpadl_handle = 0;
++      }
++      if (net_device->send_buf) {
++              /* Free up the receive buffer */
++              free_pages((unsigned long)net_device->send_buf,
++                         get_order(net_device->send_buf_size));
++              net_device->send_buf = NULL;
++      }
++      kfree(net_device->send_section_map);
++
+       return ret;
+ }
+-static int netvsc_init_recv_buf(struct hv_device *device)
++static int netvsc_init_buf(struct hv_device *device)
+ {
+       int ret = 0;
+       int t;
+@@ -248,10 +301,90 @@ static int netvsc_init_recv_buf(struct hv_device *device)
+               goto cleanup;
+       }
++      /* Now setup the send buffer.
++       */
++      net_device->send_buf =
++              (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO,
++                                       get_order(net_device->send_buf_size));
++      if (!net_device->send_buf) {
++              netdev_err(ndev, "unable to allocate send "
++                         "buffer of size %d\n", net_device->send_buf_size);
++              ret = -ENOMEM;
++              goto cleanup;
++      }
++
++      /* Establish the gpadl handle for this buffer on this
++       * channel.  Note: This call uses the vmbus connection rather
++       * than the channel to establish the gpadl handle.
++       */
++      ret = vmbus_establish_gpadl(device->channel, net_device->send_buf,
++                                  net_device->send_buf_size,
++                                  &net_device->send_buf_gpadl_handle);
++      if (ret != 0) {
++              netdev_err(ndev,
++                         "unable to establish send buffer's gpadl\n");
++              goto cleanup;
++      }
++
++      /* Notify the NetVsp of the gpadl handle */
++      init_packet = &net_device->channel_init_pkt;
++      memset(init_packet, 0, sizeof(struct nvsp_message));
++      init_packet->hdr.msg_type = NVSP_MSG1_TYPE_SEND_SEND_BUF;
++      init_packet->msg.v1_msg.send_recv_buf.gpadl_handle =
++              net_device->send_buf_gpadl_handle;
++      init_packet->msg.v1_msg.send_recv_buf.id = 0;
++
++      /* Send the gpadl notification request */
++      ret = vmbus_sendpacket(device->channel, init_packet,
++                             sizeof(struct nvsp_message),
++                             (unsigned long)init_packet,
++                             VM_PKT_DATA_INBAND,
++                             VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
++      if (ret != 0) {
++              netdev_err(ndev,
++                         "unable to send send buffer's gpadl to netvsp\n");
++              goto cleanup;
++      }
++
++      t = wait_for_completion_timeout(&net_device->channel_init_wait, 5*HZ);
++      BUG_ON(t == 0);
++
++      /* Check the response */
++      if (init_packet->msg.v1_msg.
++          send_send_buf_complete.status != NVSP_STAT_SUCCESS) {
++              netdev_err(ndev, "Unable to complete send buffer "
++                         "initialization with NetVsp - status %d\n",
++                         init_packet->msg.v1_msg.
++                         send_recv_buf_complete.status);
++              ret = -EINVAL;
++              goto cleanup;
++      }
++
++      /* Parse the response */
++      net_device->send_section_size = init_packet->msg.
++                              v1_msg.send_send_buf_complete.section_size;
++
++      /* Section count is simply the size divided by the section size.
++       */
++      net_device->send_section_cnt =
++              net_device->send_buf_size/net_device->send_section_size;
++
++      dev_info(&device->device, "Send section size: %d, Section count:%d\n",
++               net_device->send_section_size, net_device->send_section_cnt);
++
++      /* Setup state for managing the send buffer. */
++      net_device->map_words = DIV_ROUND_UP(net_device->send_section_cnt,
++                                           BITS_PER_LONG);
++
++      net_device->send_section_map =
++              kzalloc(net_device->map_words * sizeof(ulong), GFP_KERNEL);
++      if (net_device->send_section_map == NULL)
++              goto cleanup;
++
+       goto exit;
+ cleanup:
+-      netvsc_destroy_recv_buf(net_device);
++      netvsc_destroy_buf(net_device);
+ exit:
+       return ret;
+@@ -369,8 +502,9 @@ static int netvsc_connect_vsp(struct hv_device *device)
+               net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE_LEGACY;
+       else
+               net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE;
++      net_device->send_buf_size = NETVSC_SEND_BUFFER_SIZE;
+-      ret = netvsc_init_recv_buf(device);
++      ret = netvsc_init_buf(device);
+ cleanup:
+       return ret;
+@@ -378,7 +512,7 @@ cleanup:
+ static void netvsc_disconnect_vsp(struct netvsc_device *net_device)
+ {
+-      netvsc_destroy_recv_buf(net_device);
++      netvsc_destroy_buf(net_device);
+ }
+ /*
+@@ -440,6 +574,12 @@ static inline u32 hv_ringbuf_avail_percent(
+       return avail_write * 100 / ring_info->ring_datasize;
+ }
++static inline void netvsc_free_send_slot(struct netvsc_device *net_device,
++                                       u32 index)
++{
++      sync_change_bit(index, net_device->send_section_map);
++}
++
+ static void netvsc_send_completion(struct netvsc_device *net_device,
+                                  struct hv_device *device,
+                                  struct vmpacket_descriptor *packet)
+@@ -447,6 +587,7 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+       struct nvsp_message *nvsp_packet;
+       struct hv_netvsc_packet *nvsc_packet;
+       struct net_device *ndev;
++      u32 send_index;
+       ndev = net_device->ndev;
+@@ -477,6 +618,9 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+               /* Notify the layer above us */
+               if (nvsc_packet) {
++                      send_index = nvsc_packet->send_buf_index;
++                      if (send_index != NETVSC_INVALID_INDEX)
++                              netvsc_free_send_slot(net_device, send_index);
+                       q_idx = nvsc_packet->q_idx;
+                       channel = nvsc_packet->channel;
+                       nvsc_packet->send_completion(nvsc_packet->
+@@ -504,6 +648,52 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+ }
++static u32 netvsc_get_next_send_section(struct netvsc_device *net_device)
++{
++      unsigned long index;
++      u32 max_words = net_device->map_words;
++      unsigned long *map_addr = (unsigned long *)net_device->send_section_map;
++      u32 section_cnt = net_device->send_section_cnt;
++      int ret_val = NETVSC_INVALID_INDEX;
++      int i;
++      int prev_val;
++
++      for (i = 0; i < max_words; i++) {
++              if (!~(map_addr[i]))
++                      continue;
++              index = ffz(map_addr[i]);
++              prev_val = sync_test_and_set_bit(index, &map_addr[i]);
++              if (prev_val)
++                      continue;
++              if ((index + (i * BITS_PER_LONG)) >= section_cnt)
++                      break;
++              ret_val = (index + (i * BITS_PER_LONG));
++              break;
++      }
++      return ret_val;
++}
++
++u32 netvsc_copy_to_send_buf(struct netvsc_device *net_device,
++                          unsigned int section_index,
++                          struct hv_netvsc_packet *packet)
++{
++      char *start = net_device->send_buf;
++      char *dest = (start + (section_index * net_device->send_section_size));
++      int i;
++      u32 msg_size = 0;
++
++      for (i = 0; i < packet->page_buf_cnt; i++) {
++              char *src = phys_to_virt(packet->page_buf[i].pfn << PAGE_SHIFT);
++              u32 offset = packet->page_buf[i].offset;
++              u32 len = packet->page_buf[i].len;
++
++              memcpy(dest, (src + offset), len);
++              msg_size += len;
++              dest += len;
++      }
++      return msg_size;
++}
++
+ int netvsc_send(struct hv_device *device,
+                       struct hv_netvsc_packet *packet)
+ {
+@@ -513,6 +703,10 @@ int netvsc_send(struct hv_device *device,
+       struct net_device *ndev;
+       struct vmbus_channel *out_channel = NULL;
+       u64 req_id;
++      unsigned int section_index = NETVSC_INVALID_INDEX;
++      u32 msg_size = 0;
++      struct sk_buff *skb;
++
+       net_device = get_outbound_net_device(device);
+       if (!net_device)
+@@ -528,10 +722,26 @@ int netvsc_send(struct hv_device *device,
+               sendMessage.msg.v1_msg.send_rndis_pkt.channel_type = 1;
+       }
+-      /* Not using send buffer section */
++      /* Attempt to send via sendbuf */
++      if (packet->total_data_buflen < net_device->send_section_size) {
++              section_index = netvsc_get_next_send_section(net_device);
++              if (section_index != NETVSC_INVALID_INDEX) {
++                      msg_size = netvsc_copy_to_send_buf(net_device,
++                                                         section_index,
++                                                         packet);
++                      skb = (struct sk_buff *)
++                            (unsigned long)packet->send_completion_tid;
++                      if (skb)
++                              dev_kfree_skb_any(skb);
++                      packet->page_buf_cnt = 0;
++              }
++      }
++      packet->send_buf_index = section_index;
++
++
+       sendMessage.msg.v1_msg.send_rndis_pkt.send_buf_section_index =
+-              0xFFFFFFFF;
+-      sendMessage.msg.v1_msg.send_rndis_pkt.send_buf_section_size = 0;
++              section_index;
++      sendMessage.msg.v1_msg.send_rndis_pkt.send_buf_section_size = msg_size;
+       if (packet->send_completion)
+               req_id = (ulong)packet;
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index c76b66515e92..939e3af60ec4 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -236,10 +236,11 @@ static void netvsc_xmit_completion(void *context)
+       struct hv_netvsc_packet *packet = (struct hv_netvsc_packet *)context;
+       struct sk_buff *skb = (struct sk_buff *)
+               (unsigned long)packet->send_completion_tid;
++      u32 index = packet->send_buf_index;
+       kfree(packet);
+-      if (skb)
++      if (skb && (index == NETVSC_INVALID_INDEX))
+               dev_kfree_skb_any(skb);
+ }
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0005-Add-support-for-netvsc-build-without-CONFIG_SYSFS-fl.patch b/src/patches/linux/0005-Add-support-for-netvsc-build-without-CONFIG_SYSFS-fl.patch
new file mode 100644 (file)
index 0000000..4d00ad2
--- /dev/null
@@ -0,0 +1,42 @@
+From e565e803d437b36c4fb4ced5e346827981183284 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Thu, 8 May 2014 15:14:10 -0700
+Subject: [PATCH 05/11] Add support for netvsc build without CONFIG_SYSFS flag
+
+This change ensures the driver can be built successfully without the
+CONFIG_SYSFS flag.
+MS-TFS: 182270
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc_drv.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 939e3af60ec4..083d084396d3 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -640,8 +640,7 @@ int netvsc_recv_callback(struct hv_device *device_obj,
+                                      packet->vlan_tci);
+       skb_record_rx_queue(skb, packet->channel->
+-                          offermsg.offer.sub_channel_index %
+-                          net->real_num_rx_queues);
++                          offermsg.offer.sub_channel_index);
+       net->stats.rx_packets++;
+       net->stats.rx_bytes += packet->total_data_buflen;
+@@ -824,8 +823,6 @@ static int netvsc_probe(struct hv_device *dev,
+       nvdev = hv_get_drvdata(dev);
+       netif_set_real_num_tx_queues(net, nvdev->num_chn);
+       netif_set_real_num_rx_queues(net, nvdev->num_chn);
+-      dev_info(&dev->device, "real num tx,rx queues:%u, %u\n",
+-               net->real_num_tx_queues, net->real_num_rx_queues);
+       ret = register_netdev(net);
+       if (ret != 0) {
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0005-Drivers-net-hyperv-Enable-scatter-gather-I-O.patch b/src/patches/linux/0005-Drivers-net-hyperv-Enable-scatter-gather-I-O.patch
new file mode 100644 (file)
index 0000000..27fb2d9
--- /dev/null
@@ -0,0 +1,212 @@
+From 4c06034001e20ff9f6e2a1a3dfa155bf3f31440c Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sat, 8 Mar 2014 19:23:13 -0800
+Subject: [PATCH 05/25] Drivers: net: hyperv: Enable scatter gather I/O
+
+Cleanup the code and enable scatter gather I/O.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc_drv.c | 153 ++++++++++++++++++++++++++++++----------
+ 1 file changed, 114 insertions(+), 39 deletions(-)
+
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 8e3a0b00099b..72961741be54 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -140,22 +140,124 @@ static void netvsc_xmit_completion(void *context)
+               dev_kfree_skb_any(skb);
+ }
++static u32 fill_pg_buf(struct page *page, u32 offset, u32 len,
++                      struct hv_page_buffer *pb)
++{
++      int j = 0;
++
++      /* Deal with compund pages by ignoring unused part
++       * of the page.
++       */
++      page += (offset >> PAGE_SHIFT);
++      offset &= ~PAGE_MASK;
++
++      while (len > 0) {
++              unsigned long bytes;
++
++              bytes = PAGE_SIZE - offset;
++              if (bytes > len)
++                      bytes = len;
++              pb[j].pfn = page_to_pfn(page);
++              pb[j].offset = offset;
++              pb[j].len = bytes;
++
++              offset += bytes;
++              len -= bytes;
++
++              if (offset == PAGE_SIZE && len) {
++                      page++;
++                      offset = 0;
++                      j++;
++              }
++      }
++
++      return j + 1;
++}
++
++static void init_page_array(void *hdr, u32 len, struct sk_buff *skb,
++                          struct hv_page_buffer *pb)
++{
++      u32 slots_used = 0;
++      char *data = skb->data;
++      int frags = skb_shinfo(skb)->nr_frags;
++      int i;
++
++      /* The packet is laid out thus:
++       * 1. hdr
++       * 2. skb linear data
++       * 3. skb fragment data
++       */
++      if (hdr != NULL)
++              slots_used += fill_pg_buf(virt_to_page(hdr),
++                                      offset_in_page(hdr),
++                                      len, &pb[slots_used]);
++
++      slots_used += fill_pg_buf(virt_to_page(data),
++                              offset_in_page(data),
++                              skb_headlen(skb), &pb[slots_used]);
++
++      for (i = 0; i < frags; i++) {
++              skb_frag_t *frag = skb_shinfo(skb)->frags + i;
++
++              slots_used += fill_pg_buf(skb_frag_page(frag),
++                                      frag->page_offset,
++                                      skb_frag_size(frag), &pb[slots_used]);
++      }
++}
++
++static int count_skb_frag_slots(struct sk_buff *skb)
++{
++      int i, frags = skb_shinfo(skb)->nr_frags;
++      int pages = 0;
++
++      for (i = 0; i < frags; i++) {
++              skb_frag_t *frag = skb_shinfo(skb)->frags + i;
++              unsigned long size = skb_frag_size(frag);
++              unsigned long offset = frag->page_offset;
++
++              /* Skip unused frames from start of page */
++              offset &= ~PAGE_MASK;
++              pages += PFN_UP(offset + size);
++      }
++      return pages;
++}
++
++static int netvsc_get_slots(struct sk_buff *skb)
++{
++      char *data = skb->data;
++      unsigned int offset = offset_in_page(data);
++      unsigned int len = skb_headlen(skb);
++      int slots;
++      int frag_slots;
++
++      slots = DIV_ROUND_UP(offset + len, PAGE_SIZE);
++      frag_slots = count_skb_frag_slots(skb);
++      return slots + frag_slots;
++}
++
+ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+ {
+       struct net_device_context *net_device_ctx = netdev_priv(net);
+       struct hv_netvsc_packet *packet;
+       int ret;
+-      unsigned int i, num_pages, npg_data;
++      unsigned int num_data_pages;
+       u32 skb_length = skb->len;
+-      /* Add multipages for skb->data and additional 2 for RNDIS */
+-      npg_data = (((unsigned long)skb->data + skb_headlen(skb) - 1)
+-              >> PAGE_SHIFT) - ((unsigned long)skb->data >> PAGE_SHIFT) + 1;
+-      num_pages = skb_shinfo(skb)->nr_frags + npg_data + 2;
++      /* We will atmost need two pages to describe the rndis
++       * header. We can only transmit MAX_PAGE_BUFFER_COUNT number
++       * of pages in a single packet.
++       */
++      num_data_pages = netvsc_get_slots(skb) + 2;
++      if (num_data_pages > MAX_PAGE_BUFFER_COUNT) {
++              netdev_err(net, "Packet too big: %u\n", skb->len);
++              dev_kfree_skb(skb);
++              net->stats.tx_dropped++;
++              return NETDEV_TX_OK;
++      }
+       /* Allocate a netvsc packet based on # of frags. */
+       packet = kzalloc(sizeof(struct hv_netvsc_packet) +
+-                       (num_pages * sizeof(struct hv_page_buffer)) +
++                       (num_data_pages * sizeof(struct hv_page_buffer)) +
+                        sizeof(struct rndis_message) +
+                        NDIS_VLAN_PPI_SIZE, GFP_ATOMIC);
+       if (!packet) {
+@@ -170,44 +272,17 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       packet->vlan_tci = skb->vlan_tci;
+       packet->extension = (void *)(unsigned long)packet +
+-                              sizeof(struct hv_netvsc_packet) +
+-                                  (num_pages * sizeof(struct hv_page_buffer));
++                      sizeof(struct hv_netvsc_packet) +
++                      (num_data_pages * sizeof(struct hv_page_buffer));
+       /* If the rndis msg goes beyond 1 page, we will add 1 later */
+-      packet->page_buf_cnt = num_pages - 1;
++      packet->page_buf_cnt = num_data_pages - 1;
+       /* Initialize it from the skb */
+       packet->total_data_buflen = skb->len;
+       /* Start filling in the page buffers starting after RNDIS buffer. */
+-      packet->page_buf[1].pfn = virt_to_phys(skb->data) >> PAGE_SHIFT;
+-      packet->page_buf[1].offset
+-              = (unsigned long)skb->data & (PAGE_SIZE - 1);
+-      if (npg_data == 1)
+-              packet->page_buf[1].len = skb_headlen(skb);
+-      else
+-              packet->page_buf[1].len = PAGE_SIZE
+-                      - packet->page_buf[1].offset;
+-
+-      for (i = 2; i <= npg_data; i++) {
+-              packet->page_buf[i].pfn = virt_to_phys(skb->data
+-                      + PAGE_SIZE * (i-1)) >> PAGE_SHIFT;
+-              packet->page_buf[i].offset = 0;
+-              packet->page_buf[i].len = PAGE_SIZE;
+-      }
+-      if (npg_data > 1)
+-              packet->page_buf[npg_data].len = (((unsigned long)skb->data
+-                      + skb_headlen(skb) - 1) & (PAGE_SIZE - 1)) + 1;
+-
+-      /* Additional fragments are after SKB data */
+-      for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
+-              const skb_frag_t *f = &skb_shinfo(skb)->frags[i];
+-
+-              packet->page_buf[i+npg_data+1].pfn =
+-                      page_to_pfn(skb_frag_page(f));
+-              packet->page_buf[i+npg_data+1].offset = f->page_offset;
+-              packet->page_buf[i+npg_data+1].len = skb_frag_size(f);
+-      }
++      init_page_array(NULL, 0, skb, &packet->page_buf[1]);
+       /* Set the completion routine */
+       packet->completion.send.send_completion = netvsc_xmit_completion;
+@@ -454,8 +529,8 @@ static int netvsc_probe(struct hv_device *dev,
+       net->netdev_ops = &device_ops;
+       /* TODO: Add GSO and Checksum offload */
+-      net->hw_features = 0;
+-      net->features = NETIF_F_HW_VLAN_CTAG_TX;
++      net->hw_features = NETIF_F_SG;
++      net->features = NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_SG;
+       SET_ETHTOOL_OPS(net, &ethtool_ops);
+       SET_NETDEV_DEV(net, &dev->device);
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0006-Drivers-net-hyperv-Cleanup-the-send-path.patch b/src/patches/linux/0006-Drivers-net-hyperv-Cleanup-the-send-path.patch
new file mode 100644 (file)
index 0000000..20fcb3f
--- /dev/null
@@ -0,0 +1,266 @@
+From d972eb71fb95660fe74616901b55b0d7a336daed Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sat, 8 Mar 2014 19:23:14 -0800
+Subject: [PATCH 06/25] Drivers: net: hyperv: Cleanup the send path
+
+In preparation for enabling offloads, cleanup the send path.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   |  7 +---
+ drivers/net/hyperv/netvsc_drv.c   | 88 +++++++++++++++++++++++++++++++--------
+ drivers/net/hyperv/rndis_filter.c | 66 -----------------------------
+ 3 files changed, 71 insertions(+), 90 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 39fc230f5c20..694bf7cada90 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -73,7 +73,7 @@ struct hv_netvsc_packet {
+       } completion;
+       /* This points to the memory after page_buf */
+-      void *extension;
++      struct rndis_message *rndis_msg;
+       u32 total_data_buflen;
+       /* Points to the send/receive buffer where the ethernet frame is */
+@@ -126,11 +126,6 @@ void rndis_filter_device_remove(struct hv_device *dev);
+ int rndis_filter_receive(struct hv_device *dev,
+                       struct hv_netvsc_packet *pkt);
+-
+-
+-int rndis_filter_send(struct hv_device *dev,
+-                      struct hv_netvsc_packet *pkt);
+-
+ int rndis_filter_set_packet_filter(struct rndis_device *dev, u32 new_filter);
+ int rndis_filter_set_device_mac(struct hv_device *hdev, char *mac);
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 72961741be54..87293a15e470 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -128,6 +128,27 @@ static int netvsc_close(struct net_device *net)
+       return ret;
+ }
++static void *init_ppi_data(struct rndis_message *msg, u32 ppi_size,
++                              int pkt_type)
++{
++      struct rndis_packet *rndis_pkt;
++      struct rndis_per_packet_info *ppi;
++
++      rndis_pkt = &msg->msg.pkt;
++      rndis_pkt->data_offset += ppi_size;
++
++      ppi = (struct rndis_per_packet_info *)((void *)rndis_pkt +
++              rndis_pkt->per_pkt_info_offset + rndis_pkt->per_pkt_info_len);
++
++      ppi->size = ppi_size;
++      ppi->type = pkt_type;
++      ppi->ppi_offset = sizeof(struct rndis_per_packet_info);
++
++      rndis_pkt->per_pkt_info_len += ppi_size;
++
++      return ppi;
++}
++
+ static void netvsc_xmit_completion(void *context)
+ {
+       struct hv_netvsc_packet *packet = (struct hv_netvsc_packet *)context;
+@@ -174,8 +195,8 @@ static u32 fill_pg_buf(struct page *page, u32 offset, u32 len,
+       return j + 1;
+ }
+-static void init_page_array(void *hdr, u32 len, struct sk_buff *skb,
+-                          struct hv_page_buffer *pb)
++static u32 init_page_array(void *hdr, u32 len, struct sk_buff *skb,
++                         struct hv_page_buffer *pb)
+ {
+       u32 slots_used = 0;
+       char *data = skb->data;
+@@ -203,6 +224,7 @@ static void init_page_array(void *hdr, u32 len, struct sk_buff *skb,
+                                       frag->page_offset,
+                                       skb_frag_size(frag), &pb[slots_used]);
+       }
++      return slots_used;
+ }
+ static int count_skb_frag_slots(struct sk_buff *skb)
+@@ -240,15 +262,20 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       struct net_device_context *net_device_ctx = netdev_priv(net);
+       struct hv_netvsc_packet *packet;
+       int ret;
+-      unsigned int num_data_pages;
+       u32 skb_length = skb->len;
++      unsigned int num_data_pgs;
++      struct rndis_message *rndis_msg;
++      struct rndis_packet *rndis_pkt;
++      u32 rndis_msg_size;
++      bool isvlan;
++      struct rndis_per_packet_info *ppi;
+       /* We will atmost need two pages to describe the rndis
+        * header. We can only transmit MAX_PAGE_BUFFER_COUNT number
+        * of pages in a single packet.
+        */
+-      num_data_pages = netvsc_get_slots(skb) + 2;
+-      if (num_data_pages > MAX_PAGE_BUFFER_COUNT) {
++      num_data_pgs = netvsc_get_slots(skb) + 2;
++      if (num_data_pgs > MAX_PAGE_BUFFER_COUNT) {
+               netdev_err(net, "Packet too big: %u\n", skb->len);
+               dev_kfree_skb(skb);
+               net->stats.tx_dropped++;
+@@ -257,7 +284,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       /* Allocate a netvsc packet based on # of frags. */
+       packet = kzalloc(sizeof(struct hv_netvsc_packet) +
+-                       (num_data_pages * sizeof(struct hv_page_buffer)) +
++                       (num_data_pgs * sizeof(struct hv_page_buffer)) +
+                        sizeof(struct rndis_message) +
+                        NDIS_VLAN_PPI_SIZE, GFP_ATOMIC);
+       if (!packet) {
+@@ -271,26 +298,51 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       packet->vlan_tci = skb->vlan_tci;
+-      packet->extension = (void *)(unsigned long)packet +
+-                      sizeof(struct hv_netvsc_packet) +
+-                      (num_data_pages * sizeof(struct hv_page_buffer));
+-
+-      /* If the rndis msg goes beyond 1 page, we will add 1 later */
+-      packet->page_buf_cnt = num_data_pages - 1;
+-
+-      /* Initialize it from the skb */
++      packet->is_data_pkt = true;
+       packet->total_data_buflen = skb->len;
+-      /* Start filling in the page buffers starting after RNDIS buffer. */
+-      init_page_array(NULL, 0, skb, &packet->page_buf[1]);
++      packet->rndis_msg = (struct rndis_message *)((unsigned long)packet +
++                              sizeof(struct hv_netvsc_packet) +
++                              (num_data_pgs * sizeof(struct hv_page_buffer)));
+       /* Set the completion routine */
+       packet->completion.send.send_completion = netvsc_xmit_completion;
+       packet->completion.send.send_completion_ctx = packet;
+       packet->completion.send.send_completion_tid = (unsigned long)skb;
+-      ret = rndis_filter_send(net_device_ctx->device_ctx,
+-                                packet);
++      isvlan = packet->vlan_tci & VLAN_TAG_PRESENT;
++
++      /* Add the rndis header */
++      rndis_msg = packet->rndis_msg;
++      rndis_msg->ndis_msg_type = RNDIS_MSG_PACKET;
++      rndis_msg->msg_len = packet->total_data_buflen;
++      rndis_pkt = &rndis_msg->msg.pkt;
++      rndis_pkt->data_offset = sizeof(struct rndis_packet);
++      rndis_pkt->data_len = packet->total_data_buflen;
++      rndis_pkt->per_pkt_info_offset = sizeof(struct rndis_packet);
++
++      rndis_msg_size = RNDIS_MESSAGE_SIZE(struct rndis_packet);
++
++      if (isvlan) {
++              struct ndis_pkt_8021q_info *vlan;
++
++              rndis_msg_size += NDIS_VLAN_PPI_SIZE;
++              ppi = init_ppi_data(rndis_msg, NDIS_VLAN_PPI_SIZE,
++                                      IEEE_8021Q_INFO);
++              vlan = (struct ndis_pkt_8021q_info *)((void *)ppi +
++                                              ppi->ppi_offset);
++              vlan->vlanid = packet->vlan_tci & VLAN_VID_MASK;
++              vlan->pri = (packet->vlan_tci & VLAN_PRIO_MASK) >>
++                              VLAN_PRIO_SHIFT;
++      }
++
++      /* Start filling in the page buffers with the rndis hdr */
++      rndis_msg->msg_len += rndis_msg_size;
++      packet->page_buf_cnt = init_page_array(rndis_msg, rndis_msg_size,
++                                      skb, &packet->page_buf[0]);
++
++      ret = netvsc_send(net_device_ctx->device_ctx, packet);
++
+       if (ret == 0) {
+               net->stats.tx_bytes += skb_length;
+               net->stats.tx_packets++;
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index 6a9f6021f09c..dcbf144ea7da 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -910,69 +910,3 @@ int rndis_filter_close(struct hv_device *dev)
+       return rndis_filter_close_device(nvdev->extension);
+ }
+-
+-int rndis_filter_send(struct hv_device *dev,
+-                           struct hv_netvsc_packet *pkt)
+-{
+-      struct rndis_message *rndis_msg;
+-      struct rndis_packet *rndis_pkt;
+-      u32 rndis_msg_size;
+-      bool isvlan = pkt->vlan_tci & VLAN_TAG_PRESENT;
+-
+-      /* Add the rndis header */
+-      rndis_msg = (struct rndis_message *)pkt->extension;
+-
+-      rndis_msg_size = RNDIS_MESSAGE_SIZE(struct rndis_packet);
+-      if (isvlan)
+-              rndis_msg_size += NDIS_VLAN_PPI_SIZE;
+-
+-      rndis_msg->ndis_msg_type = RNDIS_MSG_PACKET;
+-      rndis_msg->msg_len = pkt->total_data_buflen +
+-                                    rndis_msg_size;
+-
+-      rndis_pkt = &rndis_msg->msg.pkt;
+-      rndis_pkt->data_offset = sizeof(struct rndis_packet);
+-      if (isvlan)
+-              rndis_pkt->data_offset += NDIS_VLAN_PPI_SIZE;
+-      rndis_pkt->data_len = pkt->total_data_buflen;
+-
+-      if (isvlan) {
+-              struct rndis_per_packet_info *ppi;
+-              struct ndis_pkt_8021q_info *vlan;
+-
+-              rndis_pkt->per_pkt_info_offset = sizeof(struct rndis_packet);
+-              rndis_pkt->per_pkt_info_len = NDIS_VLAN_PPI_SIZE;
+-
+-              ppi = (struct rndis_per_packet_info *)((ulong)rndis_pkt +
+-                      rndis_pkt->per_pkt_info_offset);
+-              ppi->size = NDIS_VLAN_PPI_SIZE;
+-              ppi->type = IEEE_8021Q_INFO;
+-              ppi->ppi_offset = sizeof(struct rndis_per_packet_info);
+-
+-              vlan = (struct ndis_pkt_8021q_info *)((ulong)ppi +
+-                      ppi->ppi_offset);
+-              vlan->vlanid = pkt->vlan_tci & VLAN_VID_MASK;
+-              vlan->pri = (pkt->vlan_tci & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
+-      }
+-
+-      pkt->is_data_pkt = true;
+-      pkt->page_buf[0].pfn = virt_to_phys(rndis_msg) >> PAGE_SHIFT;
+-      pkt->page_buf[0].offset =
+-                      (unsigned long)rndis_msg & (PAGE_SIZE-1);
+-      pkt->page_buf[0].len = rndis_msg_size;
+-
+-      /* Add one page_buf if the rndis msg goes beyond page boundary */
+-      if (pkt->page_buf[0].offset + rndis_msg_size > PAGE_SIZE) {
+-              int i;
+-              for (i = pkt->page_buf_cnt; i > 1; i--)
+-                      pkt->page_buf[i] = pkt->page_buf[i-1];
+-              pkt->page_buf_cnt++;
+-              pkt->page_buf[0].len = PAGE_SIZE - pkt->page_buf[0].offset;
+-              pkt->page_buf[1].pfn = virt_to_phys((void *)((ulong)
+-                      rndis_msg + pkt->page_buf[0].len)) >> PAGE_SHIFT;
+-              pkt->page_buf[1].offset = 0;
+-              pkt->page_buf[1].len = rndis_msg_size - pkt->page_buf[0].len;
+-      }
+-
+-      return netvsc_send(dev, pkt);
+-}
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0006-net-get-rid-of-SET_ETHTOOL_OPS.patch b/src/patches/linux/0006-net-get-rid-of-SET_ETHTOOL_OPS.patch
new file mode 100644 (file)
index 0000000..e4a7a46
--- /dev/null
@@ -0,0 +1,44 @@
+From 7ad24ea4bf620a32631d7b3069c3e30c078b0c3e Mon Sep 17 00:00:00 2001
+From: Wilfried Klaebe <w-lkml@lebenslange-mailadresse.de>
+Date: Sun, 11 May 2014 00:12:32 +0000
+Subject: [PATCH 06/11] net: get rid of SET_ETHTOOL_OPS
+
+net: get rid of SET_ETHTOOL_OPS
+
+Dave Miller mentioned he'd like to see SET_ETHTOOL_OPS gone.
+This does that.
+
+Mostly done via coccinelle script:
+@@
+struct ethtool_ops *ops;
+struct net_device *dev;
+@@
+-       SET_ETHTOOL_OPS(dev, ops);
++       dev->ethtool_ops = ops;
+
+Compile tested only, but I'd seriously wonder if this broke anything.
+
+Suggested-by: Dave Miller <davem@davemloft.net>
+Signed-off-by: Wilfried Klaebe <w-lkml@lebenslange-mailadresse.de>
+Acked-by: Felipe Balbi <balbi@ti.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc_drv.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 1de3ef5dd5d2..2e967a7bdb33 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -810,7 +810,7 @@ static int netvsc_probe(struct hv_device *dev,
+       net->features = NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_SG | NETIF_F_RXCSUM |
+                       NETIF_F_IP_CSUM | NETIF_F_TSO;
+-      SET_ETHTOOL_OPS(net, &ethtool_ops);
++      net->ethtool_ops = &ethtool_ops;
+       SET_NETDEV_DEV(net, &dev->device);
+       /* Notify the netvsc driver of the new device */
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0007-Drivers-net-hyperv-Enable-offloads-on-the-host.patch b/src/patches/linux/0007-Drivers-net-hyperv-Enable-offloads-on-the-host.patch
new file mode 100644 (file)
index 0000000..a109f04
--- /dev/null
@@ -0,0 +1,196 @@
+From 6b15b5f37e976a5f3840c7ea59560e10c6251250 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sat, 8 Mar 2014 19:23:15 -0800
+Subject: [PATCH 07/25] Drivers: net: hyperv: Enable offloads on the host
+
+Prior to enabling guest side offloads, enable the offloads on the host.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   | 55 +++++++++++++++++++++++++++
+ drivers/net/hyperv/rndis_filter.c | 80 +++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 135 insertions(+)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 694bf7cada90..8bc4e766589b 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -721,6 +721,61 @@ struct ndis_pkt_8021q_info {
+       };
+ };
++struct ndis_oject_header {
++      u8 type;
++      u8 revision;
++      u16 size;
++};
++
++#define NDIS_OBJECT_TYPE_DEFAULT      0x80
++#define NDIS_OFFLOAD_PARAMETERS_REVISION_3 3
++#define NDIS_OFFLOAD_PARAMETERS_NO_CHANGE 0
++#define NDIS_OFFLOAD_PARAMETERS_LSOV2_DISABLED 1
++#define NDIS_OFFLOAD_PARAMETERS_LSOV2_ENABLED  2
++#define NDIS_OFFLOAD_PARAMETERS_LSOV1_ENABLED  2
++#define NDIS_OFFLOAD_PARAMETERS_RSC_DISABLED 1
++#define NDIS_OFFLOAD_PARAMETERS_RSC_ENABLED 2
++#define NDIS_OFFLOAD_PARAMETERS_TX_RX_DISABLED 1
++#define NDIS_OFFLOAD_PARAMETERS_TX_ENABLED_RX_DISABLED 2
++#define NDIS_OFFLOAD_PARAMETERS_RX_ENABLED_TX_DISABLED 3
++#define NDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED 4
++
++/*
++ * New offload OIDs for NDIS 6
++ */
++#define OID_TCP_OFFLOAD_CURRENT_CONFIG 0xFC01020B /* query only */
++#define OID_TCP_OFFLOAD_PARAMETERS 0xFC01020C         /* set only */
++#define OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES 0xFC01020D/* query only */
++#define OID_TCP_CONNECTION_OFFLOAD_CURRENT_CONFIG 0xFC01020E /* query only */
++#define OID_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES 0xFC01020F /* query */
++#define OID_OFFLOAD_ENCAPSULATION 0x0101010A /* set/query */
++
++struct ndis_offload_params {
++      struct ndis_oject_header header;
++      u8 ip_v4_csum;
++      u8 tcp_ip_v4_csum;
++      u8 udp_ip_v4_csum;
++      u8 tcp_ip_v6_csum;
++      u8 udp_ip_v6_csum;
++      u8 lso_v1;
++      u8 ip_sec_v1;
++      u8 lso_v2_ipv4;
++      u8 lso_v2_ipv6;
++      u8 tcp_connection_ip_v4;
++      u8 tcp_connection_ip_v6;
++      u32 flags;
++      u8 ip_sec_v2;
++      u8 ip_sec_v2_ip_v4;
++      struct {
++              u8 rsc_ip_v4;
++              u8 rsc_ip_v6;
++      };
++      struct {
++              u8 encapsulated_packet_task_offload;
++              u8 encapsulation_types;
++      };
++};
++
+ #define NDIS_VLAN_PPI_SIZE (sizeof(struct rndis_per_packet_info) + \
+               sizeof(struct ndis_pkt_8021q_info))
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index dcbf144ea7da..9b02f21097a7 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -627,6 +627,61 @@ cleanup:
+       return ret;
+ }
++int rndis_filter_set_offload_params(struct hv_device *hdev,
++                              struct ndis_offload_params *req_offloads)
++{
++      struct netvsc_device *nvdev = hv_get_drvdata(hdev);
++      struct rndis_device *rdev = nvdev->extension;
++      struct net_device *ndev = nvdev->ndev;
++      struct rndis_request *request;
++      struct rndis_set_request *set;
++      struct ndis_offload_params *offload_params;
++      struct rndis_set_complete *set_complete;
++      u32 extlen = sizeof(struct ndis_offload_params);
++      int ret, t;
++
++      request = get_rndis_request(rdev, RNDIS_MSG_SET,
++              RNDIS_MESSAGE_SIZE(struct rndis_set_request) + extlen);
++      if (!request)
++              return -ENOMEM;
++
++      set = &request->request_msg.msg.set_req;
++      set->oid = OID_TCP_OFFLOAD_PARAMETERS;
++      set->info_buflen = extlen;
++      set->info_buf_offset = sizeof(struct rndis_set_request);
++      set->dev_vc_handle = 0;
++
++      offload_params = (struct ndis_offload_params *)((ulong)set +
++                              set->info_buf_offset);
++      *offload_params = *req_offloads;
++      offload_params->header.type = NDIS_OBJECT_TYPE_DEFAULT;
++      offload_params->header.revision = NDIS_OFFLOAD_PARAMETERS_REVISION_3;
++      offload_params->header.size = extlen;
++
++      ret = rndis_filter_send_request(rdev, request);
++      if (ret != 0)
++              goto cleanup;
++
++      t = wait_for_completion_timeout(&request->wait_event, 5*HZ);
++      if (t == 0) {
++              netdev_err(ndev, "timeout before we got aOFFLOAD set response...\n");
++              /* can't put_rndis_request, since we may still receive a
++               * send-completion.
++               */
++              return -EBUSY;
++      } else {
++              set_complete = &request->response_msg.msg.set_complete;
++              if (set_complete->status != RNDIS_STATUS_SUCCESS) {
++                      netdev_err(ndev, "Fail to set MAC on host side:0x%x\n",
++                                 set_complete->status);
++                      ret = -EINVAL;
++              }
++      }
++
++cleanup:
++      put_rndis_request(rdev, request);
++      return ret;
++}
+ static int rndis_filter_query_device_link_status(struct rndis_device *dev)
+ {
+@@ -826,6 +881,7 @@ int rndis_filter_device_add(struct hv_device *dev,
+       struct netvsc_device *net_device;
+       struct rndis_device *rndis_device;
+       struct netvsc_device_info *device_info = additional_info;
++      struct ndis_offload_params offloads;
+       rndis_device = get_rndis_device();
+       if (!rndis_device)
+@@ -865,6 +921,26 @@ int rndis_filter_device_add(struct hv_device *dev,
+       memcpy(device_info->mac_adr, rndis_device->hw_mac_adr, ETH_ALEN);
++      /* Turn on the offloads; the host supports all of the relevant
++       * offloads.
++       */
++      memset(&offloads, 0, sizeof(struct ndis_offload_params));
++      /* A value of zero means "no change"; now turn on what we
++       * want.
++       */
++      offloads.ip_v4_csum = NDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED;
++      offloads.tcp_ip_v4_csum = NDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED;
++      offloads.udp_ip_v4_csum = NDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED;
++      offloads.tcp_ip_v6_csum = NDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED;
++      offloads.udp_ip_v6_csum = NDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED;
++      offloads.lso_v2_ipv4 = NDIS_OFFLOAD_PARAMETERS_LSOV2_ENABLED;
++
++
++      ret = rndis_filter_set_offload_params(dev, &offloads);
++      if (ret)
++              goto err_dev_remv;
++
++
+       rndis_filter_query_device_link_status(rndis_device);
+       device_info->link_state = rndis_device->link_state;
+@@ -874,6 +950,10 @@ int rndis_filter_device_add(struct hv_device *dev,
+                device_info->link_state ? "down" : "up");
+       return ret;
++
++err_dev_remv:
++      rndis_filter_device_remove(dev);
++      return ret;
+ }
+ void rndis_filter_device_remove(struct hv_device *dev)
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0007-hyperv-Add-hash-value-into-RNDIS-Per-packet-info.patch b/src/patches/linux/0007-hyperv-Add-hash-value-into-RNDIS-Per-packet-info.patch
new file mode 100644 (file)
index 0000000..0db5f72
--- /dev/null
@@ -0,0 +1,93 @@
+From 307f099520b66504cf6c5638f3f404c48b9fb45b Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Wed, 21 May 2014 12:55:39 -0700
+Subject: [PATCH 07/11] hyperv: Add hash value into RNDIS Per-packet info
+
+It passes the hash value as the RNDIS Per-packet info to the Hyper-V host,
+so that the send completion notices can be spread across multiple channels.
+MS-TFS: 140273
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h |  4 ++++
+ drivers/net/hyperv/netvsc_drv.c | 18 ++++++++++++++----
+ 2 files changed, 18 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 4b7df5a5c966..6cc37c15e0bf 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -791,6 +791,7 @@ enum ndis_per_pkt_info_type {
+       IEEE_8021Q_INFO,
+       ORIGINAL_PKTINFO,
+       PACKET_CANCEL_ID,
++      NBL_HASH_VALUE = PACKET_CANCEL_ID,
+       ORIGINAL_NET_BUFLIST,
+       CACHED_NET_BUFLIST,
+       SHORT_PKT_PADINFO,
+@@ -937,6 +938,9 @@ struct ndis_tcp_lso_info {
+ #define NDIS_LSO_PPI_SIZE (sizeof(struct rndis_per_packet_info) + \
+               sizeof(struct ndis_tcp_lso_info))
++#define NDIS_HASH_PPI_SIZE (sizeof(struct rndis_per_packet_info) + \
++              sizeof(u32))
++
+ /* Format of Information buffer passed in a SetRequest for the OID */
+ /* OID_GEN_RNDIS_CONFIG_PARAMETER. */
+ struct rndis_config_parameter_info {
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 2e967a7bdb33..4fd71b75e666 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -224,9 +224,11 @@ static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb,
+       if (nvsc_dev == NULL || ndev->real_num_tx_queues <= 1)
+               return 0;
+-      if (netvsc_set_hash(&hash, skb))
++      if (netvsc_set_hash(&hash, skb)) {
+               q_idx = nvsc_dev->send_table[hash % VRSS_SEND_TAB_SIZE] %
+                       ndev->real_num_tx_queues;
++              skb_set_hash(skb, hash, PKT_HASH_TYPE_L3);
++      }
+       return q_idx;
+ }
+@@ -384,6 +386,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       struct ndis_tcp_lso_info *lso_info;
+       int  hdr_offset;
+       u32 net_trans_info;
++      u32 hash;
+       /* We will atmost need two pages to describe the rndis
+@@ -402,9 +405,8 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       packet = kzalloc(sizeof(struct hv_netvsc_packet) +
+                        (num_data_pgs * sizeof(struct hv_page_buffer)) +
+                        sizeof(struct rndis_message) +
+-                       NDIS_VLAN_PPI_SIZE +
+-                       NDIS_CSUM_PPI_SIZE +
+-                       NDIS_LSO_PPI_SIZE, GFP_ATOMIC);
++                       NDIS_VLAN_PPI_SIZE + NDIS_CSUM_PPI_SIZE +
++                       NDIS_LSO_PPI_SIZE + NDIS_HASH_PPI_SIZE, GFP_ATOMIC);
+       if (!packet) {
+               /* out of memory, drop packet */
+               netdev_err(net, "unable to allocate hv_netvsc_packet\n");
+@@ -443,6 +445,14 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       rndis_msg_size = RNDIS_MESSAGE_SIZE(struct rndis_packet);
++      hash = skb_get_hash_raw(skb);
++      if (hash != 0 && net->real_num_tx_queues > 1) {
++              rndis_msg_size += NDIS_HASH_PPI_SIZE;
++              ppi = init_ppi_data(rndis_msg, NDIS_HASH_PPI_SIZE,
++                                  NBL_HASH_VALUE);
++              *(u32 *)((void *)ppi + ppi->ppi_offset) = hash;
++      }
++
+       if (isvlan) {
+               struct ndis_pkt_8021q_info *vlan;
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0008-Drivers-net-hyperv-Enable-receive-side-IP-checksum-o.patch b/src/patches/linux/0008-Drivers-net-hyperv-Enable-receive-side-IP-checksum-o.patch
new file mode 100644 (file)
index 0000000..e77e9f2
--- /dev/null
@@ -0,0 +1,147 @@
+From 59e0c70c618668522a9431686f7e3a69ef396dff Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sat, 8 Mar 2014 19:23:16 -0800
+Subject: [PATCH 08/25] Drivers: net: hyperv: Enable receive side IP checksum
+ offload
+
+Enable receive side checksum offload.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   | 33 ++++++++++++++++++++++++++++++++-
+ drivers/net/hyperv/netvsc_drv.c   | 19 +++++++++++++++----
+ drivers/net/hyperv/rndis_filter.c |  4 +++-
+ 3 files changed, 50 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 8bc4e766589b..faeb74623fbd 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -30,6 +30,7 @@
+ /* Fwd declaration */
+ struct hv_netvsc_packet;
++struct ndis_tcp_ip_checksum_info;
+ /* Represent the xfer page packet which contains 1 or more netvsc packet */
+ struct xferpage_packet {
+@@ -117,7 +118,8 @@ int netvsc_send(struct hv_device *device,
+ void netvsc_linkstatus_callback(struct hv_device *device_obj,
+                               unsigned int status);
+ int netvsc_recv_callback(struct hv_device *device_obj,
+-                      struct hv_netvsc_packet *packet);
++                      struct hv_netvsc_packet *packet,
++                      struct ndis_tcp_ip_checksum_info *csum_info);
+ int rndis_filter_open(struct hv_device *dev);
+ int rndis_filter_close(struct hv_device *dev);
+ int rndis_filter_device_add(struct hv_device *dev,
+@@ -776,9 +778,38 @@ struct ndis_offload_params {
+       };
+ };
++struct ndis_tcp_ip_checksum_info {
++      union {
++              struct {
++                      u32 is_ipv4:1;
++                      u32 is_ipv6:1;
++                      u32 tcp_checksum:1;
++                      u32 udp_checksum:1;
++                      u32 ip_header_checksum:1;
++                      u32 reserved:11;
++                      u32 tcp_header_offset:10;
++              } transmit;
++              struct {
++                      u32 tcp_checksum_failed:1;
++                      u32 udp_checksum_failed:1;
++                      u32 ip_checksum_failed:1;
++                      u32 tcp_checksum_succeeded:1;
++                      u32 udp_checksum_succeeded:1;
++                      u32 ip_checksum_succeeded:1;
++                      u32 loopback:1;
++                      u32 tcp_checksum_value_invalid:1;
++                      u32 ip_checksum_value_invalid:1;
++              } receive;
++              u32  value;
++      };
++};
++
+ #define NDIS_VLAN_PPI_SIZE (sizeof(struct rndis_per_packet_info) + \
+               sizeof(struct ndis_pkt_8021q_info))
++#define NDIS_CSUM_PPI_SIZE (sizeof(struct rndis_per_packet_info) + \
++              sizeof(struct ndis_tcp_ip_checksum_info))
++
+ /* Format of Information buffer passed in a SetRequest for the OID */
+ /* OID_GEN_RNDIS_CONFIG_PARAMETER. */
+ struct rndis_config_parameter_info {
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 87293a15e470..7438360b7a02 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -392,7 +392,8 @@ void netvsc_linkstatus_callback(struct hv_device *device_obj,
+  * "wire" on the specified device.
+  */
+ int netvsc_recv_callback(struct hv_device *device_obj,
+-                              struct hv_netvsc_packet *packet)
++                              struct hv_netvsc_packet *packet,
++                              struct ndis_tcp_ip_checksum_info *csum_info)
+ {
+       struct net_device *net;
+       struct sk_buff *skb;
+@@ -419,7 +420,17 @@ int netvsc_recv_callback(struct hv_device *device_obj,
+               packet->total_data_buflen);
+       skb->protocol = eth_type_trans(skb, net);
+-      skb->ip_summed = CHECKSUM_NONE;
++      if (csum_info) {
++              /* We only look at the IP checksum here.
++               * Should we be dropping the packet if checksum
++               * failed? How do we deal with other checksums - TCP/UDP?
++               */
++              if (csum_info->receive.ip_checksum_succeeded)
++                      skb->ip_summed = CHECKSUM_UNNECESSARY;
++              else
++                      skb->ip_summed = CHECKSUM_NONE;
++      }
++
+       if (packet->vlan_tci & VLAN_TAG_PRESENT)
+               __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
+                                      packet->vlan_tci);
+@@ -581,8 +592,8 @@ static int netvsc_probe(struct hv_device *dev,
+       net->netdev_ops = &device_ops;
+       /* TODO: Add GSO and Checksum offload */
+-      net->hw_features = NETIF_F_SG;
+-      net->features = NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_SG;
++      net->hw_features = NETIF_F_RXCSUM | NETIF_F_SG;
++      net->features = NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_SG | NETIF_F_RXCSUM;
+       SET_ETHTOOL_OPS(net, &ethtool_ops);
+       SET_NETDEV_DEV(net, &dev->device);
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index 9b02f21097a7..4a37e3db9e32 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -370,6 +370,7 @@ static void rndis_filter_receive_data(struct rndis_device *dev,
+       struct rndis_packet *rndis_pkt;
+       u32 data_offset;
+       struct ndis_pkt_8021q_info *vlan;
++      struct ndis_tcp_ip_checksum_info *csum_info;
+       rndis_pkt = &msg->msg.pkt;
+@@ -408,7 +409,8 @@ static void rndis_filter_receive_data(struct rndis_device *dev,
+               pkt->vlan_tci = 0;
+       }
+-      netvsc_recv_callback(dev->net_dev->dev, pkt);
++      csum_info = rndis_get_ppi(rndis_pkt, TCPIP_CHKSUM_PKTINFO);
++      netvsc_recv_callback(dev->net_dev->dev, pkt, csum_info);
+ }
+ int rndis_filter_receive(struct hv_device *dev,
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0008-hyperv-fix-apparent-cut-n-paste-error-in-send-path-t.patch b/src/patches/linux/0008-hyperv-fix-apparent-cut-n-paste-error-in-send-path-t.patch
new file mode 100644 (file)
index 0000000..b774f81
--- /dev/null
@@ -0,0 +1,32 @@
+From 2f18423d7ebf8044a9edaca840be5ae199fb32f6 Mon Sep 17 00:00:00 2001
+From: Dave Jones <davej@redhat.com>
+Date: Mon, 16 Jun 2014 16:59:02 -0400
+Subject: [PATCH 08/11] hyperv: fix apparent cut-n-paste error in send path
+ teardown
+
+c25aaf814a63: "hyperv: Enable sendbuf mechanism on the send path" added
+some teardown code that looks like it was copied from the recieve path
+above, but missed a variable name replacement.
+
+Signed-off-by: Dave Jones <davej@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index c041f63a6d30..4ed38eaecea8 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -189,7 +189,7 @@ static int netvsc_destroy_buf(struct netvsc_device *net_device)
+                                  "unable to teardown send buffer's gpadl\n");
+                       return ret;
+               }
+-              net_device->recv_buf_gpadl_handle = 0;
++              net_device->send_buf_gpadl_handle = 0;
+       }
+       if (net_device->send_buf) {
+               /* Free up the receive buffer */
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0009-Drivers-net-hyperv-Enable-send-side-checksum-offload.patch b/src/patches/linux/0009-Drivers-net-hyperv-Enable-send-side-checksum-offload.patch
new file mode 100644 (file)
index 0000000..db42108
--- /dev/null
@@ -0,0 +1,140 @@
+From d2a0be7f4263eb669af84240c5424a72cce4cdb4 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sat, 8 Mar 2014 19:23:17 -0800
+Subject: [PATCH 09/25] Drivers: net: hyperv: Enable send side checksum offload
+
+Enable send side checksum offload.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h | 10 ++++++
+ drivers/net/hyperv/netvsc_drv.c | 69 +++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 77 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index faeb74623fbd..4cf238234321 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -1035,6 +1035,16 @@ struct rndis_message {
+ #define NDIS_PACKET_TYPE_FUNCTIONAL   0x00000400
+ #define NDIS_PACKET_TYPE_MAC_FRAME    0x00000800
++#define INFO_IPV4       2
++#define INFO_IPV6       4
++#define INFO_TCP        2
++#define INFO_UDP        4
++
++#define TRANSPORT_INFO_NOT_IP   0
++#define TRANSPORT_INFO_IPV4_TCP ((INFO_IPV4 << 16) | INFO_TCP)
++#define TRANSPORT_INFO_IPV4_UDP ((INFO_IPV4 << 16) | INFO_UDP)
++#define TRANSPORT_INFO_IPV6_TCP ((INFO_IPV6 << 16) | INFO_TCP)
++#define TRANSPORT_INFO_IPV6_UDP ((INFO_IPV6 << 16) | INFO_UDP)
+ #endif /* _HYPERV_NET_H */
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 7438360b7a02..2fab69ac61ef 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -257,6 +257,35 @@ static int netvsc_get_slots(struct sk_buff *skb)
+       return slots + frag_slots;
+ }
++static u32 get_net_transport_info(struct sk_buff *skb, u32 *trans_off)
++{
++      u32 ret_val = TRANSPORT_INFO_NOT_IP;
++
++      if ((eth_hdr(skb)->h_proto != htons(ETH_P_IP)) &&
++              (eth_hdr(skb)->h_proto != htons(ETH_P_IPV6))) {
++              goto not_ip;
++      }
++
++      *trans_off = skb_transport_offset(skb);
++
++      if ((eth_hdr(skb)->h_proto == htons(ETH_P_IP))) {
++              struct iphdr *iphdr = ip_hdr(skb);
++
++              if (iphdr->protocol == IPPROTO_TCP)
++                      ret_val = TRANSPORT_INFO_IPV4_TCP;
++              else if (iphdr->protocol == IPPROTO_UDP)
++                      ret_val = TRANSPORT_INFO_IPV4_UDP;
++      } else {
++              if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP)
++                      ret_val = TRANSPORT_INFO_IPV6_TCP;
++              else if (ipv6_hdr(skb)->nexthdr == IPPROTO_UDP)
++                      ret_val = TRANSPORT_INFO_IPV6_UDP;
++      }
++
++not_ip:
++      return ret_val;
++}
++
+ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+ {
+       struct net_device_context *net_device_ctx = netdev_priv(net);
+@@ -269,6 +298,10 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       u32 rndis_msg_size;
+       bool isvlan;
+       struct rndis_per_packet_info *ppi;
++      struct ndis_tcp_ip_checksum_info *csum_info;
++      int  hdr_offset;
++      u32 net_trans_info;
++
+       /* We will atmost need two pages to describe the rndis
+        * header. We can only transmit MAX_PAGE_BUFFER_COUNT number
+@@ -336,6 +369,37 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+                               VLAN_PRIO_SHIFT;
+       }
++      net_trans_info = get_net_transport_info(skb, &hdr_offset);
++      if (net_trans_info == TRANSPORT_INFO_NOT_IP)
++              goto do_send;
++
++      /*
++       * Setup the sendside checksum offload only if this is not a
++       * GSO packet.
++       */
++      if (skb_is_gso(skb))
++              goto do_send;
++
++      rndis_msg_size += NDIS_CSUM_PPI_SIZE;
++      ppi = init_ppi_data(rndis_msg, NDIS_CSUM_PPI_SIZE,
++                          TCPIP_CHKSUM_PKTINFO);
++
++      csum_info = (struct ndis_tcp_ip_checksum_info *)((void *)ppi +
++                      ppi->ppi_offset);
++
++      if (net_trans_info & (INFO_IPV4 << 16))
++              csum_info->transmit.is_ipv4 = 1;
++      else
++              csum_info->transmit.is_ipv6 = 1;
++
++      if (net_trans_info & INFO_TCP) {
++              csum_info->transmit.tcp_checksum = 1;
++              csum_info->transmit.tcp_header_offset = hdr_offset;
++      } else if (net_trans_info & INFO_UDP) {
++              csum_info->transmit.udp_checksum = 1;
++      }
++
++do_send:
+       /* Start filling in the page buffers with the rndis hdr */
+       rndis_msg->msg_len += rndis_msg_size;
+       packet->page_buf_cnt = init_page_array(rndis_msg, rndis_msg_size,
+@@ -592,8 +656,9 @@ static int netvsc_probe(struct hv_device *dev,
+       net->netdev_ops = &device_ops;
+       /* TODO: Add GSO and Checksum offload */
+-      net->hw_features = NETIF_F_RXCSUM | NETIF_F_SG;
+-      net->features = NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_SG | NETIF_F_RXCSUM;
++      net->hw_features = NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_IP_CSUM;
++      net->features = NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_SG | NETIF_F_RXCSUM |
++                      NETIF_F_IP_CSUM;
+       SET_ETHTOOL_OPS(net, &ethtool_ops);
+       SET_NETDEV_DEV(net, &dev->device);
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0009-hyperv-Fix-error-return-code-in-netvsc_init_buf.patch b/src/patches/linux/0009-hyperv-Fix-error-return-code-in-netvsc_init_buf.patch
new file mode 100644 (file)
index 0000000..fcae531
--- /dev/null
@@ -0,0 +1,34 @@
+From dd1d3f8f9920926aa426589e542eed6bf58b7354 Mon Sep 17 00:00:00 2001
+From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
+Date: Wed, 23 Jul 2014 09:00:35 +0800
+Subject: [PATCH 09/11] hyperv: Fix error return code in netvsc_init_buf()
+
+Fix to return -ENOMEM from the kalloc error handling
+case instead of 0.
+
+Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index 4ed38eaecea8..d97d5f39a04e 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -378,8 +378,10 @@ static int netvsc_init_buf(struct hv_device *device)
+       net_device->send_section_map =
+               kzalloc(net_device->map_words * sizeof(ulong), GFP_KERNEL);
+-      if (net_device->send_section_map == NULL)
++      if (net_device->send_section_map == NULL) {
++              ret = -ENOMEM;
+               goto cleanup;
++      }
+       goto exit;
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0010-Drivers-net-hyperv-Enable-large-send-offload.patch b/src/patches/linux/0010-Drivers-net-hyperv-Enable-large-send-offload.patch
new file mode 100644 (file)
index 0000000..36be2a8
--- /dev/null
@@ -0,0 +1,153 @@
+From a4ec4f58017b456281ee17c35fb82dfe4eab2193 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sat, 8 Mar 2014 19:23:18 -0800
+Subject: [PATCH 10/25] Drivers: net: hyperv: Enable large send offload
+
+Enable segmentation offload.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h | 40 ++++++++++++++++++++++++++++++++++++++++
+ drivers/net/hyperv/netvsc_drv.c | 38 ++++++++++++++++++++++++++++++++++----
+ 2 files changed, 74 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 4cf238234321..7d06b4959383 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -742,6 +742,10 @@ struct ndis_oject_header {
+ #define NDIS_OFFLOAD_PARAMETERS_RX_ENABLED_TX_DISABLED 3
+ #define NDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED 4
++#define NDIS_TCP_LARGE_SEND_OFFLOAD_V2_TYPE   1
++#define NDIS_TCP_LARGE_SEND_OFFLOAD_IPV4      0
++#define NDIS_TCP_LARGE_SEND_OFFLOAD_IPV6      1
++
+ /*
+  * New offload OIDs for NDIS 6
+  */
+@@ -804,12 +808,48 @@ struct ndis_tcp_ip_checksum_info {
+       };
+ };
++struct ndis_tcp_lso_info {
++      union {
++              struct {
++                      u32 unused:30;
++                      u32 type:1;
++                      u32 reserved2:1;
++              } transmit;
++              struct {
++                      u32 mss:20;
++                      u32 tcp_header_offset:10;
++                      u32 type:1;
++                      u32 reserved2:1;
++              } lso_v1_transmit;
++              struct {
++                      u32 tcp_payload:30;
++                      u32 type:1;
++                      u32 reserved2:1;
++              } lso_v1_transmit_complete;
++              struct {
++                      u32 mss:20;
++                      u32 tcp_header_offset:10;
++                      u32 type:1;
++                      u32 ip_version:1;
++              } lso_v2_transmit;
++              struct {
++                      u32 reserved:30;
++                      u32 type:1;
++                      u32 reserved2:1;
++              } lso_v2_transmit_complete;
++              u32  value;
++      };
++};
++
+ #define NDIS_VLAN_PPI_SIZE (sizeof(struct rndis_per_packet_info) + \
+               sizeof(struct ndis_pkt_8021q_info))
+ #define NDIS_CSUM_PPI_SIZE (sizeof(struct rndis_per_packet_info) + \
+               sizeof(struct ndis_tcp_ip_checksum_info))
++#define NDIS_LSO_PPI_SIZE (sizeof(struct rndis_per_packet_info) + \
++              sizeof(struct ndis_tcp_lso_info))
++
+ /* Format of Information buffer passed in a SetRequest for the OID */
+ /* OID_GEN_RNDIS_CONFIG_PARAMETER. */
+ struct rndis_config_parameter_info {
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 2fab69ac61ef..5baa1fa7e692 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -299,6 +299,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       bool isvlan;
+       struct rndis_per_packet_info *ppi;
+       struct ndis_tcp_ip_checksum_info *csum_info;
++      struct ndis_tcp_lso_info *lso_info;
+       int  hdr_offset;
+       u32 net_trans_info;
+@@ -378,7 +379,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+        * GSO packet.
+        */
+       if (skb_is_gso(skb))
+-              goto do_send;
++              goto do_lso;
+       rndis_msg_size += NDIS_CSUM_PPI_SIZE;
+       ppi = init_ppi_data(rndis_msg, NDIS_CSUM_PPI_SIZE,
+@@ -398,6 +399,35 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       } else if (net_trans_info & INFO_UDP) {
+               csum_info->transmit.udp_checksum = 1;
+       }
++      goto do_send;
++
++do_lso:
++      rndis_msg_size += NDIS_LSO_PPI_SIZE;
++      ppi = init_ppi_data(rndis_msg, NDIS_LSO_PPI_SIZE,
++                          TCP_LARGESEND_PKTINFO);
++
++      lso_info = (struct ndis_tcp_lso_info *)((void *)ppi +
++                      ppi->ppi_offset);
++
++      lso_info->lso_v2_transmit.type = NDIS_TCP_LARGE_SEND_OFFLOAD_V2_TYPE;
++      if (net_trans_info & (INFO_IPV4 << 16)) {
++              lso_info->lso_v2_transmit.ip_version =
++                      NDIS_TCP_LARGE_SEND_OFFLOAD_IPV4;
++              ip_hdr(skb)->tot_len = 0;
++              ip_hdr(skb)->check = 0;
++              tcp_hdr(skb)->check =
++              ~csum_tcpudp_magic(ip_hdr(skb)->saddr,
++                                 ip_hdr(skb)->daddr, 0, IPPROTO_TCP, 0);
++      } else {
++              lso_info->lso_v2_transmit.ip_version =
++                      NDIS_TCP_LARGE_SEND_OFFLOAD_IPV6;
++              ipv6_hdr(skb)->payload_len = 0;
++              tcp_hdr(skb)->check =
++              ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
++                              &ipv6_hdr(skb)->daddr, 0, IPPROTO_TCP, 0);
++      }
++      lso_info->lso_v2_transmit.tcp_header_offset = hdr_offset;
++      lso_info->lso_v2_transmit.mss = skb_shinfo(skb)->gso_size;
+ do_send:
+       /* Start filling in the page buffers with the rndis hdr */
+@@ -655,10 +685,10 @@ static int netvsc_probe(struct hv_device *dev,
+       net->netdev_ops = &device_ops;
+-      /* TODO: Add GSO and Checksum offload */
+-      net->hw_features = NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_IP_CSUM;
++      net->hw_features = NETIF_F_RXCSUM | NETIF_F_SG | NETIF_F_IP_CSUM |
++                              NETIF_F_TSO;
+       net->features = NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_SG | NETIF_F_RXCSUM |
+-                      NETIF_F_IP_CSUM;
++                      NETIF_F_IP_CSUM | NETIF_F_TSO;
+       SET_ETHTOOL_OPS(net, &ethtool_ops);
+       SET_NETDEV_DEV(net, &dev->device);
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0010-hyperv-Fix-a-bug-in-netvsc_start_xmit.patch b/src/patches/linux/0010-hyperv-Fix-a-bug-in-netvsc_start_xmit.patch
new file mode 100644 (file)
index 0000000..5e08805
--- /dev/null
@@ -0,0 +1,47 @@
+From b3e774263908a834c1c0d5abf3a7658280e42fc7 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sun, 28 Sep 2014 22:16:43 -0700
+Subject: [PATCH 10/11] hyperv: Fix a bug in netvsc_start_xmit()
+
+[ Upstream commit dedb845ded56ded1c62f5398a94ffa8615d4592d ]
+
+After the packet is successfully sent, we should not touch the skb
+as it may have been freed. This patch is based on the work done by
+Long Li <longli@microsoft.com>.
+
+In this version of the patch I have fixed issues pointed out by David.
+David, please queue this up for stable.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Tested-by: Long Li <longli@microsoft.com>
+Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/hyperv/netvsc_drv.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 4fd71b75e666..f15297201777 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -387,6 +387,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       int  hdr_offset;
+       u32 net_trans_info;
+       u32 hash;
++      u32 skb_length = skb->len;
+       /* We will atmost need two pages to describe the rndis
+@@ -562,7 +563,7 @@ do_send:
+ drop:
+       if (ret == 0) {
+-              net->stats.tx_bytes += skb->len;
++              net->stats.tx_bytes += skb_length;
+               net->stats.tx_packets++;
+       } else {
+               kfree(packet);
+-- 
+2.4.3
+
similarity index 81%
rename from src/patches/linux-3.14.x-hyperv-2008-fix.patch
rename to src/patches/linux/0011-hyperv-Change-the-receive-buffer-size-for-legacy-hos.patch
index e538e08e5cb7a2286e3ef53f3e321889abdb281a..e3ee8cbc9915be01daa58353646e8b542a92a537 100644 (file)
@@ -1,16 +1,20 @@
-From 99d3016de4f2a29635f5382b0e9bd0e5f2151487 Mon Sep 17 00:00:00 2001
+From 56b3f72d3fed7f9b8d17dcf5d81455fa1b4327d7 Mon Sep 17 00:00:00 2001
 From: Haiyang Zhang <haiyangz@microsoft.com>
 Date: Sun, 9 Mar 2014 16:10:59 -0700
-Subject: hyperv: Change the receive buffer size for legacy hosts
+Subject: [PATCH 11/25] hyperv: Change the receive buffer size for legacy hosts
 
 Due to a bug in the Hyper-V host verion 2008R2, we need to use a slightly smaller
 receive buffer size, otherwise the buffer will not be accepted by the legacy hosts.
 
 Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
 Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h | 1 +
+ drivers/net/hyperv/netvsc.c     | 6 +++++-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
-index 7d06b49..13010b4 100644
+index 7d06b4959383..13010b4dae5b 100644
 --- a/drivers/net/hyperv/hyperv_net.h
 +++ b/drivers/net/hyperv/hyperv_net.h
 @@ -513,6 +513,7 @@ struct nvsp_message {
@@ -22,7 +26,7 @@ index 7d06b49..13010b4 100644
  #define NETVSC_RECEIVE_BUFFER_ID              0xcafe
  
 diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
-index 1a0280d..daddea2 100644
+index 1a0280dcba7e..daddea2654ce 100644
 --- a/drivers/net/hyperv/netvsc.c
 +++ b/drivers/net/hyperv/netvsc.c
 @@ -365,6 +365,11 @@ static int netvsc_connect_vsp(struct hv_device *device)
@@ -46,5 +50,5 @@ index 1a0280d..daddea2 100644
  
        INIT_LIST_HEAD(&net_device->recv_pkt_list);
 -- 
-cgit v0.10.2
+2.4.3
 
diff --git a/src/patches/linux/0011-hyperv-Fix-a-bug-in-netvsc_send.patch b/src/patches/linux/0011-hyperv-Fix-a-bug-in-netvsc_send.patch
new file mode 100644 (file)
index 0000000..00f9c5d
--- /dev/null
@@ -0,0 +1,68 @@
+From 26875bba869bd91a1d8fef9229a56a1e6d9fef2b Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sun, 5 Oct 2014 10:42:51 -0700
+Subject: [PATCH 11/11] hyperv: Fix a bug in netvsc_send()
+
+[ Upstream commit 3a67c9ccad926a168d8b7891537a452018368a5b ]
+
+After the packet is successfully sent, we should not touch the packet
+as it may have been freed. This patch is based on the work done by
+Long Li <longli@microsoft.com>.
+
+David, please queue this up for stable.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reported-by: Sitsofe Wheeler <sitsofe@yahoo.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/hyperv/netvsc.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index d97d5f39a04e..7edf976ecfa0 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -708,6 +708,7 @@ int netvsc_send(struct hv_device *device,
+       unsigned int section_index = NETVSC_INVALID_INDEX;
+       u32 msg_size = 0;
+       struct sk_buff *skb;
++      u16 q_idx = packet->q_idx;
+       net_device = get_outbound_net_device(device);
+@@ -772,24 +773,24 @@ int netvsc_send(struct hv_device *device,
+       if (ret == 0) {
+               atomic_inc(&net_device->num_outstanding_sends);
+-              atomic_inc(&net_device->queue_sends[packet->q_idx]);
++              atomic_inc(&net_device->queue_sends[q_idx]);
+               if (hv_ringbuf_avail_percent(&out_channel->outbound) <
+                       RING_AVAIL_PERCENT_LOWATER) {
+                       netif_tx_stop_queue(netdev_get_tx_queue(
+-                                          ndev, packet->q_idx));
++                                          ndev, q_idx));
+                       if (atomic_read(&net_device->
+-                              queue_sends[packet->q_idx]) < 1)
++                              queue_sends[q_idx]) < 1)
+                               netif_tx_wake_queue(netdev_get_tx_queue(
+-                                                  ndev, packet->q_idx));
++                                                  ndev, q_idx));
+               }
+       } else if (ret == -EAGAIN) {
+               netif_tx_stop_queue(netdev_get_tx_queue(
+-                                  ndev, packet->q_idx));
+-              if (atomic_read(&net_device->queue_sends[packet->q_idx]) < 1) {
++                                  ndev, q_idx));
++              if (atomic_read(&net_device->queue_sends[q_idx]) < 1) {
+                       netif_tx_wake_queue(netdev_get_tx_queue(
+-                                          ndev, packet->q_idx));
++                                          ndev, q_idx));
+                       ret = -ENOSPC;
+               }
+       } else {
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0012-Drivers-net-hyperv-Allocate-memory-for-all-possible-.patch b/src/patches/linux/0012-Drivers-net-hyperv-Allocate-memory-for-all-possible-.patch
new file mode 100644 (file)
index 0000000..c626bb0
--- /dev/null
@@ -0,0 +1,34 @@
+From e0f6906eb7e5b395370da9499189d13b59020382 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Wed, 9 Apr 2014 15:00:45 -0700
+Subject: [PATCH 12/25] Drivers: net: hyperv: Allocate memory for all possible
+ per-pecket information
+
+An outgoing packet can potentially need per-packet information for
+all the offloads and VLAN tagging. Fix this issue.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc_drv.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 5baa1fa7e692..c76c85176644 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -320,7 +320,9 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       packet = kzalloc(sizeof(struct hv_netvsc_packet) +
+                        (num_data_pgs * sizeof(struct hv_page_buffer)) +
+                        sizeof(struct rndis_message) +
+-                       NDIS_VLAN_PPI_SIZE, GFP_ATOMIC);
++                       NDIS_VLAN_PPI_SIZE +
++                       NDIS_CSUM_PPI_SIZE +
++                       NDIS_LSO_PPI_SIZE, GFP_ATOMIC);
+       if (!packet) {
+               /* out of memory, drop packet */
+               netdev_err(net, "unable to allocate hv_netvsc_packet\n");
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0013-Drivers-net-hyperv-Negotiate-suitable-ndis-version-f.patch b/src/patches/linux/0013-Drivers-net-hyperv-Negotiate-suitable-ndis-version-f.patch
new file mode 100644 (file)
index 0000000..7044c52
--- /dev/null
@@ -0,0 +1,32 @@
+From 8a7882bada78e7d7355aafc0ca3c5696d25eb443 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Wed, 9 Apr 2014 15:00:46 -0700
+Subject: [PATCH 13/25] Drivers: net: hyperv: Negotiate suitable ndis version
+ for offload support
+
+Ws2008R2 supports ndis_version 6.1 and 6.1 is the minimal version required
+for various offloads. Negotiate ndis_version 6.1 when on ws2008r2.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index daddea2654ce..f7629ecefa84 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -344,7 +344,7 @@ static int netvsc_connect_vsp(struct hv_device *device)
+       memset(init_packet, 0, sizeof(struct nvsp_message));
+       if (net_device->nvsp_version <= NVSP_PROTOCOL_VERSION_4)
+-              ndis_version = 0x00050001;
++              ndis_version = 0x00060001;
+       else
+               ndis_version = 0x0006001e;
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0014-Drivers-net-hyperv-Address-UDP-checksum-issues.patch b/src/patches/linux/0014-Drivers-net-hyperv-Address-UDP-checksum-issues.patch
new file mode 100644 (file)
index 0000000..eaf343e
--- /dev/null
@@ -0,0 +1,111 @@
+From b822ee7a17efd1bc8c7584da5d0a2c042e9ca5b6 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Wed, 9 Apr 2014 15:00:47 -0700
+Subject: [PATCH 14/25] Drivers: net: hyperv: Address UDP checksum issues
+
+ws2008r2 does not support UDP checksum offload. Thus, we cannnot turn on
+UDP offload in the host. Also, on ws2012 and ws2012 r2, there appear to be
+an issue with UDP checksum offload.
+Fix this issue by computing the UDP checksum in the Hyper-V driver.
+
+Based on Dave Miller's comments, in this version, I have COWed the skb
+before modifying the UDP header (the checksum field).
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   |  1 +
+ drivers/net/hyperv/netvsc_drv.c   | 26 +++++++++++++++++++++++++-
+ drivers/net/hyperv/rndis_filter.c | 12 +++++++++++-
+ 3 files changed, 37 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 13010b4dae5b..d18f711d0b0c 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -747,6 +747,7 @@ struct ndis_oject_header {
+ #define NDIS_TCP_LARGE_SEND_OFFLOAD_IPV4      0
+ #define NDIS_TCP_LARGE_SEND_OFFLOAD_IPV6      1
++#define VERSION_4_OFFLOAD_SIZE                        22
+ /*
+  * New offload OIDs for NDIS 6
+  */
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index c76c85176644..0d898876689e 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -399,7 +399,30 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+               csum_info->transmit.tcp_checksum = 1;
+               csum_info->transmit.tcp_header_offset = hdr_offset;
+       } else if (net_trans_info & INFO_UDP) {
+-              csum_info->transmit.udp_checksum = 1;
++              /* UDP checksum offload is not supported on ws2008r2.
++               * Furthermore, on ws2012 and ws2012r2, there are some
++               * issues with udp checksum offload from Linux guests.
++               * (these are host issues).
++               * For now compute the checksum here.
++               */
++              struct udphdr *uh;
++              u16 udp_len;
++
++              ret = skb_cow_head(skb, 0);
++              if (ret)
++                      goto drop;
++
++              uh = udp_hdr(skb);
++              udp_len = ntohs(uh->len);
++              uh->check = 0;
++              uh->check = csum_tcpudp_magic(ip_hdr(skb)->saddr,
++                                            ip_hdr(skb)->daddr,
++                                            udp_len, IPPROTO_UDP,
++                                            csum_partial(uh, udp_len, 0));
++              if (uh->check == 0)
++                      uh->check = CSUM_MANGLED_0;
++
++              csum_info->transmit.udp_checksum = 0;
+       }
+       goto do_send;
+@@ -439,6 +462,7 @@ do_send:
+       ret = netvsc_send(net_device_ctx->device_ctx, packet);
++drop:
+       if (ret == 0) {
+               net->stats.tx_bytes += skb_length;
+               net->stats.tx_packets++;
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index 4a37e3db9e32..143a98caf618 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -641,6 +641,16 @@ int rndis_filter_set_offload_params(struct hv_device *hdev,
+       struct rndis_set_complete *set_complete;
+       u32 extlen = sizeof(struct ndis_offload_params);
+       int ret, t;
++      u32 vsp_version = nvdev->nvsp_version;
++
++      if (vsp_version <= NVSP_PROTOCOL_VERSION_4) {
++              extlen = VERSION_4_OFFLOAD_SIZE;
++              /* On NVSP_PROTOCOL_VERSION_4 and below, we do not support
++               * UDP checksum offload.
++               */
++              req_offloads->udp_ip_v4_csum = 0;
++              req_offloads->udp_ip_v6_csum = 0;
++      }
+       request = get_rndis_request(rdev, RNDIS_MSG_SET,
+               RNDIS_MESSAGE_SIZE(struct rndis_set_request) + extlen);
+@@ -674,7 +684,7 @@ int rndis_filter_set_offload_params(struct hv_device *hdev,
+       } else {
+               set_complete = &request->response_msg.msg.set_complete;
+               if (set_complete->status != RNDIS_STATUS_SUCCESS) {
+-                      netdev_err(ndev, "Fail to set MAC on host side:0x%x\n",
++                      netdev_err(ndev, "Fail to set offload on host side:0x%x\n",
+                                  set_complete->status);
+                       ret = -EINVAL;
+               }
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0015-hyperv-Properly-handle-checksum-offload.patch b/src/patches/linux/0015-hyperv-Properly-handle-checksum-offload.patch
new file mode 100644 (file)
index 0000000..0760833
--- /dev/null
@@ -0,0 +1,42 @@
+From 540360773bad2b81f14c38ca92b62797fa32cbc6 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Wed, 30 Apr 2014 11:58:25 -0700
+Subject: [PATCH 15/25] hyperv: Properly handle checksum offload
+
+Do checksum offload only if the client of the driver wants checksum to be
+offloaded.
+
+In V1 version of this patch, I  addressed comments from
+Stephen Hemminger <stephen@networkplumber.org> and
+Eric Dumazet <eric.dumazet@gmail.com>.
+
+In this version of the patch I have addressed comments from
+David Miller.
+
+This patch fixes a bug that is exposed in gateway scenarios.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc_drv.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 0d898876689e..ce6d870dd7ae 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -383,6 +383,10 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       if (skb_is_gso(skb))
+               goto do_lso;
++      if ((skb->ip_summed == CHECKSUM_NONE) ||
++          (skb->ip_summed == CHECKSUM_UNNECESSARY))
++              goto do_send;
++
+       rndis_msg_size += NDIS_CSUM_PPI_SIZE;
+       ppi = init_ppi_data(rndis_msg, NDIS_CSUM_PPI_SIZE,
+                           TCPIP_CHKSUM_PKTINFO);
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0016-hyperv-Add-support-for-virtual-Receive-Side-Scaling-.patch b/src/patches/linux/0016-hyperv-Add-support-for-virtual-Receive-Side-Scaling-.patch
new file mode 100644 (file)
index 0000000..d01a428
--- /dev/null
@@ -0,0 +1,917 @@
+From 44559a96c6864eb6e95db0ae896c621b82e605f3 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Mon, 21 Apr 2014 10:20:28 -0700
+Subject: [PATCH 16/25] hyperv: Add support for virtual Receive Side Scaling
+ (vRSS)
+
+This feature allows multiple channels to be used by each virtual NIC.
+It is available on Hyper-V host 2012 R2.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   | 110 +++++++++++++++++++++-
+ drivers/net/hyperv/netvsc.c       | 136 +++++++++++++++++++++------
+ drivers/net/hyperv/netvsc_drv.c   | 103 ++++++++++++++++++++-
+ drivers/net/hyperv/rndis_filter.c | 189 +++++++++++++++++++++++++++++++++++++-
+ 4 files changed, 504 insertions(+), 34 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index d18f711d0b0c..57eb3f906d64 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -28,6 +28,96 @@
+ #include <linux/hyperv.h>
+ #include <linux/rndis.h>
++/* RSS related */
++#define OID_GEN_RECEIVE_SCALE_CAPABILITIES 0x00010203  /* query only */
++#define OID_GEN_RECEIVE_SCALE_PARAMETERS 0x00010204  /* query and set */
++
++#define NDIS_OBJECT_TYPE_RSS_CAPABILITIES 0x88
++#define NDIS_OBJECT_TYPE_RSS_PARAMETERS 0x89
++
++#define NDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_2 2
++#define NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_2 2
++
++struct ndis_obj_header {
++      u8 type;
++      u8 rev;
++      u16 size;
++} __packed;
++
++/* ndis_recv_scale_cap/cap_flag */
++#define NDIS_RSS_CAPS_MESSAGE_SIGNALED_INTERRUPTS 0x01000000
++#define NDIS_RSS_CAPS_CLASSIFICATION_AT_ISR       0x02000000
++#define NDIS_RSS_CAPS_CLASSIFICATION_AT_DPC       0x04000000
++#define NDIS_RSS_CAPS_USING_MSI_X                 0x08000000
++#define NDIS_RSS_CAPS_RSS_AVAILABLE_ON_PORTS      0x10000000
++#define NDIS_RSS_CAPS_SUPPORTS_MSI_X              0x20000000
++#define NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV4          0x00000100
++#define NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6          0x00000200
++#define NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EX       0x00000400
++
++struct ndis_recv_scale_cap { /* NDIS_RECEIVE_SCALE_CAPABILITIES */
++      struct ndis_obj_header hdr;
++      u32 cap_flag;
++      u32 num_int_msg;
++      u32 num_recv_que;
++      u16 num_indirect_tabent;
++} __packed;
++
++
++/* ndis_recv_scale_param flags */
++#define NDIS_RSS_PARAM_FLAG_BASE_CPU_UNCHANGED     0x0001
++#define NDIS_RSS_PARAM_FLAG_HASH_INFO_UNCHANGED    0x0002
++#define NDIS_RSS_PARAM_FLAG_ITABLE_UNCHANGED       0x0004
++#define NDIS_RSS_PARAM_FLAG_HASH_KEY_UNCHANGED     0x0008
++#define NDIS_RSS_PARAM_FLAG_DISABLE_RSS            0x0010
++
++/* Hash info bits */
++#define NDIS_HASH_FUNC_TOEPLITZ 0x00000001
++#define NDIS_HASH_IPV4          0x00000100
++#define NDIS_HASH_TCP_IPV4      0x00000200
++#define NDIS_HASH_IPV6          0x00000400
++#define NDIS_HASH_IPV6_EX       0x00000800
++#define NDIS_HASH_TCP_IPV6      0x00001000
++#define NDIS_HASH_TCP_IPV6_EX   0x00002000
++
++#define NDIS_RSS_INDIRECTION_TABLE_MAX_SIZE_REVISION_2 (128 * 4)
++#define NDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_2   40
++
++#define ITAB_NUM 128
++#define HASH_KEYLEN NDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_2
++extern u8 netvsc_hash_key[];
++
++struct ndis_recv_scale_param { /* NDIS_RECEIVE_SCALE_PARAMETERS */
++      struct ndis_obj_header hdr;
++
++      /* Qualifies the rest of the information */
++      u16 flag;
++
++      /* The base CPU number to do receive processing. not used */
++      u16 base_cpu_number;
++
++      /* This describes the hash function and type being enabled */
++      u32 hashinfo;
++
++      /* The size of indirection table array */
++      u16 indirect_tabsize;
++
++      /* The offset of the indirection table from the beginning of this
++       * structure
++       */
++      u32 indirect_taboffset;
++
++      /* The size of the hash secret key */
++      u16 hashkey_size;
++
++      /* The offset of the secret key from the beginning of this structure */
++      u32 kashkey_offset;
++
++      u32 processor_masks_offset;
++      u32 num_processor_masks;
++      u32 processor_masks_entry_size;
++};
++
+ /* Fwd declaration */
+ struct hv_netvsc_packet;
+ struct ndis_tcp_ip_checksum_info;
+@@ -39,6 +129,8 @@ struct xferpage_packet {
+       /* # of netvsc packets this xfer packet contains */
+       u32 count;
++
++      struct vmbus_channel *channel;
+ };
+ /*
+@@ -54,6 +146,9 @@ struct hv_netvsc_packet {
+       bool is_data_pkt;
+       u16 vlan_tci;
++      u16 q_idx;
++      struct vmbus_channel *channel;
++
+       /*
+        * Valid only for receives when we break a xfer page packet
+        * into multiple netvsc packets
+@@ -120,6 +215,7 @@ void netvsc_linkstatus_callback(struct hv_device *device_obj,
+ int netvsc_recv_callback(struct hv_device *device_obj,
+                       struct hv_netvsc_packet *packet,
+                       struct ndis_tcp_ip_checksum_info *csum_info);
++void netvsc_channel_cb(void *context);
+ int rndis_filter_open(struct hv_device *dev);
+ int rndis_filter_close(struct hv_device *dev);
+ int rndis_filter_device_add(struct hv_device *dev,
+@@ -522,6 +618,8 @@ struct nvsp_message {
+ #define NETVSC_PACKET_SIZE                      2048
++#define VRSS_SEND_TAB_SIZE 16
++
+ /* Per netvsc channel-specific */
+ struct netvsc_device {
+       struct hv_device *dev;
+@@ -555,10 +653,20 @@ struct netvsc_device {
+       struct net_device *ndev;
++      struct vmbus_channel *chn_table[NR_CPUS];
++      u32 send_table[VRSS_SEND_TAB_SIZE];
++      u32 num_chn;
++      atomic_t queue_sends[NR_CPUS];
++
+       /* Holds rndis device info */
+       void *extension;
+-      /* The recive buffer for this device */
++
++      int ring_size;
++
++      /* The primary channel callback buffer */
+       unsigned char cb_buffer[NETVSC_PACKET_SIZE];
++      /* The sub channel callback buffer */
++      unsigned char *sub_cb_buf;
+ };
+ /* NdisInitialize message */
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index f7629ecefa84..e7e77f12bc38 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -422,6 +422,9 @@ int netvsc_device_remove(struct hv_device *device)
+               kfree(netvsc_packet);
+       }
++      if (net_device->sub_cb_buf)
++              vfree(net_device->sub_cb_buf);
++
+       kfree(net_device);
+       return 0;
+ }
+@@ -461,7 +464,9 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+           (nvsp_packet->hdr.msg_type ==
+            NVSP_MSG1_TYPE_SEND_RECV_BUF_COMPLETE) ||
+           (nvsp_packet->hdr.msg_type ==
+-           NVSP_MSG1_TYPE_SEND_SEND_BUF_COMPLETE)) {
++           NVSP_MSG1_TYPE_SEND_SEND_BUF_COMPLETE) ||
++          (nvsp_packet->hdr.msg_type ==
++           NVSP_MSG5_TYPE_SUBCHANNEL)) {
+               /* Copy the response back */
+               memcpy(&net_device->channel_init_pkt, nvsp_packet,
+                      sizeof(struct nvsp_message));
+@@ -469,28 +474,37 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+       } else if (nvsp_packet->hdr.msg_type ==
+                  NVSP_MSG1_TYPE_SEND_RNDIS_PKT_COMPLETE) {
+               int num_outstanding_sends;
++              u16 q_idx = 0;
++              struct vmbus_channel *channel = device->channel;
++              int queue_sends;
+               /* Get the send context */
+               nvsc_packet = (struct hv_netvsc_packet *)(unsigned long)
+                       packet->trans_id;
+               /* Notify the layer above us */
+-              if (nvsc_packet)
++              if (nvsc_packet) {
++                      q_idx = nvsc_packet->q_idx;
++                      channel = nvsc_packet->channel;
+                       nvsc_packet->completion.send.send_completion(
+                               nvsc_packet->completion.send.
+                               send_completion_ctx);
++              }
+               num_outstanding_sends =
+                       atomic_dec_return(&net_device->num_outstanding_sends);
++              queue_sends = atomic_dec_return(&net_device->
++                                              queue_sends[q_idx]);
+               if (net_device->destroy && num_outstanding_sends == 0)
+                       wake_up(&net_device->wait_drain);
+-              if (netif_queue_stopped(ndev) && !net_device->start_remove &&
+-                      (hv_ringbuf_avail_percent(&device->channel->outbound)
+-                      > RING_AVAIL_PERCENT_HIWATER ||
+-                      num_outstanding_sends < 1))
+-                              netif_wake_queue(ndev);
++              if (netif_tx_queue_stopped(netdev_get_tx_queue(ndev, q_idx)) &&
++                  !net_device->start_remove &&
++                  (hv_ringbuf_avail_percent(&channel->outbound) >
++                   RING_AVAIL_PERCENT_HIWATER || queue_sends < 1))
++                              netif_tx_wake_queue(netdev_get_tx_queue(
++                                                  ndev, q_idx));
+       } else {
+               netdev_err(ndev, "Unknown send completion packet type- "
+                          "%d received!!\n", nvsp_packet->hdr.msg_type);
+@@ -505,6 +519,7 @@ int netvsc_send(struct hv_device *device,
+       int ret = 0;
+       struct nvsp_message sendMessage;
+       struct net_device *ndev;
++      struct vmbus_channel *out_channel = NULL;
+       u64 req_id;
+       net_device = get_outbound_net_device(device);
+@@ -531,15 +546,20 @@ int netvsc_send(struct hv_device *device,
+       else
+               req_id = 0;
++      out_channel = net_device->chn_table[packet->q_idx];
++      if (out_channel == NULL)
++              out_channel = device->channel;
++      packet->channel = out_channel;
++
+       if (packet->page_buf_cnt) {
+-              ret = vmbus_sendpacket_pagebuffer(device->channel,
++              ret = vmbus_sendpacket_pagebuffer(out_channel,
+                                                 packet->page_buf,
+                                                 packet->page_buf_cnt,
+                                                 &sendMessage,
+                                                 sizeof(struct nvsp_message),
+                                                 req_id);
+       } else {
+-              ret = vmbus_sendpacket(device->channel, &sendMessage,
++              ret = vmbus_sendpacket(out_channel, &sendMessage,
+                               sizeof(struct nvsp_message),
+                               req_id,
+                               VM_PKT_DATA_INBAND,
+@@ -548,17 +568,24 @@ int netvsc_send(struct hv_device *device,
+       if (ret == 0) {
+               atomic_inc(&net_device->num_outstanding_sends);
+-              if (hv_ringbuf_avail_percent(&device->channel->outbound) <
++              atomic_inc(&net_device->queue_sends[packet->q_idx]);
++
++              if (hv_ringbuf_avail_percent(&out_channel->outbound) <
+                       RING_AVAIL_PERCENT_LOWATER) {
+-                      netif_stop_queue(ndev);
++                      netif_tx_stop_queue(netdev_get_tx_queue(
++                                          ndev, packet->q_idx));
++
+                       if (atomic_read(&net_device->
+-                              num_outstanding_sends) < 1)
+-                              netif_wake_queue(ndev);
++                              queue_sends[packet->q_idx]) < 1)
++                              netif_tx_wake_queue(netdev_get_tx_queue(
++                                                  ndev, packet->q_idx));
+               }
+       } else if (ret == -EAGAIN) {
+-              netif_stop_queue(ndev);
+-              if (atomic_read(&net_device->num_outstanding_sends) < 1) {
+-                      netif_wake_queue(ndev);
++              netif_tx_stop_queue(netdev_get_tx_queue(
++                                  ndev, packet->q_idx));
++              if (atomic_read(&net_device->queue_sends[packet->q_idx]) < 1) {
++                      netif_tx_wake_queue(netdev_get_tx_queue(
++                                          ndev, packet->q_idx));
+                       ret = -ENOSPC;
+               }
+       } else {
+@@ -570,6 +597,7 @@ int netvsc_send(struct hv_device *device,
+ }
+ static void netvsc_send_recv_completion(struct hv_device *device,
++                                      struct vmbus_channel *channel,
+                                       struct netvsc_device *net_device,
+                                       u64 transaction_id, u32 status)
+ {
+@@ -587,7 +615,7 @@ static void netvsc_send_recv_completion(struct hv_device *device,
+ retry_send_cmplt:
+       /* Send the completion */
+-      ret = vmbus_sendpacket(device->channel, &recvcompMessage,
++      ret = vmbus_sendpacket(channel, &recvcompMessage,
+                              sizeof(struct nvsp_message), transaction_id,
+                              VM_PKT_COMP, 0);
+       if (ret == 0) {
+@@ -618,6 +646,7 @@ static void netvsc_receive_completion(void *context)
+ {
+       struct hv_netvsc_packet *packet = context;
+       struct hv_device *device = packet->device;
++      struct vmbus_channel *channel;
+       struct netvsc_device *net_device;
+       u64 transaction_id = 0;
+       bool fsend_receive_comp = false;
+@@ -649,6 +678,7 @@ static void netvsc_receive_completion(void *context)
+        */
+       if (packet->xfer_page_pkt->count == 0) {
+               fsend_receive_comp = true;
++              channel = packet->xfer_page_pkt->channel;
+               transaction_id = packet->completion.recv.recv_completion_tid;
+               status = packet->xfer_page_pkt->status;
+               list_add_tail(&packet->xfer_page_pkt->list_ent,
+@@ -662,12 +692,13 @@ static void netvsc_receive_completion(void *context)
+       /* Send a receive completion for the xfer page packet */
+       if (fsend_receive_comp)
+-              netvsc_send_recv_completion(device, net_device, transaction_id,
+-                                      status);
++              netvsc_send_recv_completion(device, channel, net_device,
++                                          transaction_id, status);
+ }
+ static void netvsc_receive(struct netvsc_device *net_device,
++                      struct vmbus_channel *channel,
+                       struct hv_device *device,
+                       struct vmpacket_descriptor *packet)
+ {
+@@ -748,7 +779,7 @@ static void netvsc_receive(struct netvsc_device *net_device,
+               spin_unlock_irqrestore(&net_device->recv_pkt_list_lock,
+                                      flags);
+-              netvsc_send_recv_completion(device, net_device,
++              netvsc_send_recv_completion(device, channel, net_device,
+                                           vmxferpage_packet->d.trans_id,
+                                           NVSP_STAT_FAIL);
+@@ -759,6 +790,7 @@ static void netvsc_receive(struct netvsc_device *net_device,
+       xferpage_packet = (struct xferpage_packet *)listHead.next;
+       list_del(&xferpage_packet->list_ent);
+       xferpage_packet->status = NVSP_STAT_SUCCESS;
++      xferpage_packet->channel = channel;
+       /* This is how much we can satisfy */
+       xferpage_packet->count = count - 1;
+@@ -800,10 +832,45 @@ static void netvsc_receive(struct netvsc_device *net_device,
+ }
+-static void netvsc_channel_cb(void *context)
++
++static void netvsc_send_table(struct hv_device *hdev,
++                            struct vmpacket_descriptor *vmpkt)
++{
++      struct netvsc_device *nvscdev;
++      struct net_device *ndev;
++      struct nvsp_message *nvmsg;
++      int i;
++      u32 count, *tab;
++
++      nvscdev = get_outbound_net_device(hdev);
++      if (!nvscdev)
++              return;
++      ndev = nvscdev->ndev;
++
++      nvmsg = (struct nvsp_message *)((unsigned long)vmpkt +
++                                      (vmpkt->offset8 << 3));
++
++      if (nvmsg->hdr.msg_type != NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE)
++              return;
++
++      count = nvmsg->msg.v5_msg.send_table.count;
++      if (count != VRSS_SEND_TAB_SIZE) {
++              netdev_err(ndev, "Received wrong send-table size:%u\n", count);
++              return;
++      }
++
++      tab = (u32 *)((unsigned long)&nvmsg->msg.v5_msg.send_table +
++                    nvmsg->msg.v5_msg.send_table.offset);
++
++      for (i = 0; i < count; i++)
++              nvscdev->send_table[i] = tab[i];
++}
++
++void netvsc_channel_cb(void *context)
+ {
+       int ret;
+-      struct hv_device *device = context;
++      struct vmbus_channel *channel = (struct vmbus_channel *)context;
++      struct hv_device *device;
+       struct netvsc_device *net_device;
+       u32 bytes_recvd;
+       u64 request_id;
+@@ -812,14 +879,19 @@ static void netvsc_channel_cb(void *context)
+       int bufferlen = NETVSC_PACKET_SIZE;
+       struct net_device *ndev;
++      if (channel->primary_channel != NULL)
++              device = channel->primary_channel->device_obj;
++      else
++              device = channel->device_obj;
++
+       net_device = get_inbound_net_device(device);
+       if (!net_device)
+               return;
+       ndev = net_device->ndev;
+-      buffer = net_device->cb_buffer;
++      buffer = get_per_channel_state(channel);
+       do {
+-              ret = vmbus_recvpacket_raw(device->channel, buffer, bufferlen,
++              ret = vmbus_recvpacket_raw(channel, buffer, bufferlen,
+                                          &bytes_recvd, &request_id);
+               if (ret == 0) {
+                       if (bytes_recvd > 0) {
+@@ -831,8 +903,12 @@ static void netvsc_channel_cb(void *context)
+                                       break;
+                               case VM_PKT_DATA_USING_XFER_PAGES:
+-                                      netvsc_receive(net_device,
+-                                                      device, desc);
++                                      netvsc_receive(net_device, channel,
++                                                     device, desc);
++                                      break;
++
++                              case VM_PKT_DATA_INBAND:
++                                      netvsc_send_table(device, desc);
+                                       break;
+                               default:
+@@ -893,6 +969,8 @@ int netvsc_device_add(struct hv_device *device, void *additional_info)
+               goto cleanup;
+       }
++      net_device->ring_size = ring_size;
++
+       /*
+        * Coming into this function, struct net_device * is
+        * registered as the driver private data.
+@@ -917,10 +995,12 @@ int netvsc_device_add(struct hv_device *device, void *additional_info)
+       }
+       init_completion(&net_device->channel_init_wait);
++      set_per_channel_state(device->channel, net_device->cb_buffer);
++
+       /* Open the channel */
+       ret = vmbus_open(device->channel, ring_size * PAGE_SIZE,
+                        ring_size * PAGE_SIZE, NULL, 0,
+-                       netvsc_channel_cb, device);
++                       netvsc_channel_cb, device->channel);
+       if (ret != 0) {
+               netdev_err(ndev, "unable to open channel: %d\n", ret);
+@@ -930,6 +1010,8 @@ int netvsc_device_add(struct hv_device *device, void *additional_info)
+       /* Channel is opened */
+       pr_info("hv_netvsc channel opened successfully\n");
++      net_device->chn_table[0] = device->channel;
++
+       /* Connect with the NetVsp */
+       ret = netvsc_connect_vsp(device);
+       if (ret != 0) {
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index ce6d870dd7ae..e486dbd33f61 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -101,7 +101,7 @@ static int netvsc_open(struct net_device *net)
+               return ret;
+       }
+-      netif_start_queue(net);
++      netif_tx_start_all_queues(net);
+       nvdev = hv_get_drvdata(device_obj);
+       rdev = nvdev->extension;
+@@ -149,6 +149,88 @@ static void *init_ppi_data(struct rndis_message *msg, u32 ppi_size,
+       return ppi;
+ }
++union sub_key {
++      u64 k;
++      struct {
++              u8 pad[3];
++              u8 kb;
++              u32 ka;
++      };
++};
++
++/* Toeplitz hash function
++ * data: network byte order
++ * return: host byte order
++ */
++static u32 comp_hash(u8 *key, int klen, u8 *data, int dlen)
++{
++      union sub_key subk;
++      int k_next = 4;
++      u8 dt;
++      int i, j;
++      u32 ret = 0;
++
++      subk.k = 0;
++      subk.ka = ntohl(*(u32 *)key);
++
++      for (i = 0; i < dlen; i++) {
++              subk.kb = key[k_next];
++              k_next = (k_next + 1) % klen;
++              dt = data[i];
++              for (j = 0; j < 8; j++) {
++                      if (dt & 0x80)
++                              ret ^= subk.ka;
++                      dt <<= 1;
++                      subk.k <<= 1;
++              }
++      }
++
++      return ret;
++}
++
++static bool netvsc_set_hash(u32 *hash, struct sk_buff *skb)
++{
++      struct iphdr *iphdr;
++      int data_len;
++      bool ret = false;
++
++      if (eth_hdr(skb)->h_proto != htons(ETH_P_IP))
++              return false;
++
++      iphdr = ip_hdr(skb);
++
++      if (iphdr->version == 4) {
++              if (iphdr->protocol == IPPROTO_TCP)
++                      data_len = 12;
++              else
++                      data_len = 8;
++              *hash = comp_hash(netvsc_hash_key, HASH_KEYLEN,
++                                (u8 *)&iphdr->saddr, data_len);
++              ret = true;
++      }
++
++      return ret;
++}
++
++static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb,
++                      void *accel_priv, select_queue_fallback_t fallback)
++{
++      struct net_device_context *net_device_ctx = netdev_priv(ndev);
++      struct hv_device *hdev =  net_device_ctx->device_ctx;
++      struct netvsc_device *nvsc_dev = hv_get_drvdata(hdev);
++      u32 hash;
++      u16 q_idx = 0;
++
++      if (nvsc_dev == NULL || ndev->real_num_tx_queues <= 1)
++              return 0;
++
++      if (netvsc_set_hash(&hash, skb))
++              q_idx = nvsc_dev->send_table[hash % VRSS_SEND_TAB_SIZE] %
++                      ndev->real_num_tx_queues;
++
++      return q_idx;
++}
++
+ static void netvsc_xmit_completion(void *context)
+ {
+       struct hv_netvsc_packet *packet = (struct hv_netvsc_packet *)context;
+@@ -334,6 +416,8 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       packet->vlan_tci = skb->vlan_tci;
++      packet->q_idx = skb_get_queue_mapping(skb);
++
+       packet->is_data_pkt = true;
+       packet->total_data_buflen = skb->len;
+@@ -559,6 +643,10 @@ int netvsc_recv_callback(struct hv_device *device_obj,
+               __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
+                                      packet->vlan_tci);
++      skb_record_rx_queue(skb, packet->xfer_page_pkt->channel->
++                          offermsg.offer.sub_channel_index %
++                          net->real_num_rx_queues);
++
+       net->stats.rx_packets++;
+       net->stats.rx_bytes += packet->total_data_buflen;
+@@ -607,7 +695,7 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
+       hv_set_drvdata(hdev, ndev);
+       device_info.ring_size = ring_size;
+       rndis_filter_device_add(hdev, &device_info);
+-      netif_wake_queue(ndev);
++      netif_tx_wake_all_queues(ndev);
+       return 0;
+ }
+@@ -653,6 +741,7 @@ static const struct net_device_ops device_ops = {
+       .ndo_change_mtu =               netvsc_change_mtu,
+       .ndo_validate_addr =            eth_validate_addr,
+       .ndo_set_mac_address =          netvsc_set_mac_addr,
++      .ndo_select_queue =             netvsc_select_queue,
+ };
+ /*
+@@ -699,9 +788,11 @@ static int netvsc_probe(struct hv_device *dev,
+       struct net_device *net = NULL;
+       struct net_device_context *net_device_ctx;
+       struct netvsc_device_info device_info;
++      struct netvsc_device *nvdev;
+       int ret;
+-      net = alloc_etherdev(sizeof(struct net_device_context));
++      net = alloc_etherdev_mq(sizeof(struct net_device_context),
++                              num_online_cpus());
+       if (!net)
+               return -ENOMEM;
+@@ -734,6 +825,12 @@ static int netvsc_probe(struct hv_device *dev,
+       }
+       memcpy(net->dev_addr, device_info.mac_adr, ETH_ALEN);
++      nvdev = hv_get_drvdata(dev);
++      netif_set_real_num_tx_queues(net, nvdev->num_chn);
++      netif_set_real_num_rx_queues(net, nvdev->num_chn);
++      dev_info(&dev->device, "real num tx,rx queues:%u, %u\n",
++               net->real_num_tx_queues, net->real_num_rx_queues);
++
+       ret = register_netdev(net);
+       if (ret != 0) {
+               pr_err("Unable to register netdev.\n");
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index 143a98caf618..d92cfbe43410 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -31,7 +31,7 @@
+ #include "hyperv_net.h"
+-#define RNDIS_EXT_LEN 100
++#define RNDIS_EXT_LEN PAGE_SIZE
+ struct rndis_request {
+       struct list_head list_ent;
+       struct completion  wait_event;
+@@ -94,6 +94,8 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev,
+       rndis_msg->ndis_msg_type = msg_type;
+       rndis_msg->msg_len = msg_len;
++      request->pkt.q_idx = 0;
++
+       /*
+        * Set the request id. This field is always after the rndis header for
+        * request/response packet types so we just used the SetRequest as a
+@@ -509,6 +511,19 @@ static int rndis_filter_query_device(struct rndis_device *dev, u32 oid,
+       query->info_buflen = 0;
+       query->dev_vc_handle = 0;
++      if (oid == OID_GEN_RECEIVE_SCALE_CAPABILITIES) {
++              struct ndis_recv_scale_cap *cap;
++
++              request->request_msg.msg_len +=
++                      sizeof(struct ndis_recv_scale_cap);
++              query->info_buflen = sizeof(struct ndis_recv_scale_cap);
++              cap = (struct ndis_recv_scale_cap *)((unsigned long)query +
++                                                   query->info_buf_offset);
++              cap->hdr.type = NDIS_OBJECT_TYPE_RSS_CAPABILITIES;
++              cap->hdr.rev = NDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_2;
++              cap->hdr.size = sizeof(struct ndis_recv_scale_cap);
++      }
++
+       ret = rndis_filter_send_request(dev, request);
+       if (ret != 0)
+               goto cleanup;
+@@ -695,6 +710,89 @@ cleanup:
+       return ret;
+ }
++u8 netvsc_hash_key[HASH_KEYLEN] = {
++      0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
++      0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
++      0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
++      0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
++      0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa
++};
++
++int rndis_filter_set_rss_param(struct rndis_device *rdev, int num_queue)
++{
++      struct net_device *ndev = rdev->net_dev->ndev;
++      struct rndis_request *request;
++      struct rndis_set_request *set;
++      struct rndis_set_complete *set_complete;
++      u32 extlen = sizeof(struct ndis_recv_scale_param) +
++                   4*ITAB_NUM + HASH_KEYLEN;
++      struct ndis_recv_scale_param *rssp;
++      u32 *itab;
++      u8 *keyp;
++      int i, t, ret;
++
++      request = get_rndis_request(
++                      rdev, RNDIS_MSG_SET,
++                      RNDIS_MESSAGE_SIZE(struct rndis_set_request) + extlen);
++      if (!request)
++              return -ENOMEM;
++
++      set = &request->request_msg.msg.set_req;
++      set->oid = OID_GEN_RECEIVE_SCALE_PARAMETERS;
++      set->info_buflen = extlen;
++      set->info_buf_offset = sizeof(struct rndis_set_request);
++      set->dev_vc_handle = 0;
++
++      rssp = (struct ndis_recv_scale_param *)(set + 1);
++      rssp->hdr.type = NDIS_OBJECT_TYPE_RSS_PARAMETERS;
++      rssp->hdr.rev = NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_2;
++      rssp->hdr.size = sizeof(struct ndis_recv_scale_param);
++      rssp->flag = 0;
++      rssp->hashinfo = NDIS_HASH_FUNC_TOEPLITZ | NDIS_HASH_IPV4 |
++                       NDIS_HASH_TCP_IPV4;
++      rssp->indirect_tabsize = 4*ITAB_NUM;
++      rssp->indirect_taboffset = sizeof(struct ndis_recv_scale_param);
++      rssp->hashkey_size = HASH_KEYLEN;
++      rssp->kashkey_offset = rssp->indirect_taboffset +
++                             rssp->indirect_tabsize;
++
++      /* Set indirection table entries */
++      itab = (u32 *)(rssp + 1);
++      for (i = 0; i < ITAB_NUM; i++)
++              itab[i] = i % num_queue;
++
++      /* Set hask key values */
++      keyp = (u8 *)((unsigned long)rssp + rssp->kashkey_offset);
++      for (i = 0; i < HASH_KEYLEN; i++)
++              keyp[i] = netvsc_hash_key[i];
++
++
++      ret = rndis_filter_send_request(rdev, request);
++      if (ret != 0)
++              goto cleanup;
++
++      t = wait_for_completion_timeout(&request->wait_event, 5*HZ);
++      if (t == 0) {
++              netdev_err(ndev, "timeout before we got a set response...\n");
++              /* can't put_rndis_request, since we may still receive a
++               * send-completion.
++               */
++              return -ETIMEDOUT;
++      } else {
++              set_complete = &request->response_msg.msg.set_complete;
++              if (set_complete->status != RNDIS_STATUS_SUCCESS) {
++                      netdev_err(ndev, "Fail to set RSS parameters:0x%x\n",
++                                 set_complete->status);
++                      ret = -EINVAL;
++              }
++      }
++
++cleanup:
++      put_rndis_request(rdev, request);
++      return ret;
++}
++
++
+ static int rndis_filter_query_device_link_status(struct rndis_device *dev)
+ {
+       u32 size = sizeof(u32);
+@@ -886,6 +984,28 @@ static int rndis_filter_close_device(struct rndis_device *dev)
+       return ret;
+ }
++static void netvsc_sc_open(struct vmbus_channel *new_sc)
++{
++      struct netvsc_device *nvscdev;
++      u16 chn_index = new_sc->offermsg.offer.sub_channel_index;
++      int ret;
++
++      nvscdev = hv_get_drvdata(new_sc->primary_channel->device_obj);
++
++      if (chn_index >= nvscdev->num_chn)
++              return;
++
++      set_per_channel_state(new_sc, nvscdev->sub_cb_buf + (chn_index - 1) *
++                            NETVSC_PACKET_SIZE);
++
++      ret = vmbus_open(new_sc, nvscdev->ring_size * PAGE_SIZE,
++                       nvscdev->ring_size * PAGE_SIZE, NULL, 0,
++                       netvsc_channel_cb, new_sc);
++
++      if (ret == 0)
++              nvscdev->chn_table[chn_index] = new_sc;
++}
++
+ int rndis_filter_device_add(struct hv_device *dev,
+                                 void *additional_info)
+ {
+@@ -894,6 +1014,10 @@ int rndis_filter_device_add(struct hv_device *dev,
+       struct rndis_device *rndis_device;
+       struct netvsc_device_info *device_info = additional_info;
+       struct ndis_offload_params offloads;
++      struct nvsp_message *init_packet;
++      int t;
++      struct ndis_recv_scale_cap rsscap;
++      u32 rsscap_size = sizeof(struct ndis_recv_scale_cap);
+       rndis_device = get_rndis_device();
+       if (!rndis_device)
+@@ -913,6 +1037,7 @@ int rndis_filter_device_add(struct hv_device *dev,
+       /* Initialize the rndis device */
+       net_device = hv_get_drvdata(dev);
++      net_device->num_chn = 1;
+       net_device->extension = rndis_device;
+       rndis_device->net_dev = net_device;
+@@ -952,7 +1077,6 @@ int rndis_filter_device_add(struct hv_device *dev,
+       if (ret)
+               goto err_dev_remv;
+-
+       rndis_filter_query_device_link_status(rndis_device);
+       device_info->link_state = rndis_device->link_state;
+@@ -961,7 +1085,66 @@ int rndis_filter_device_add(struct hv_device *dev,
+                rndis_device->hw_mac_adr,
+                device_info->link_state ? "down" : "up");
+-      return ret;
++      if (net_device->nvsp_version < NVSP_PROTOCOL_VERSION_5)
++              return 0;
++
++      /* vRSS setup */
++      memset(&rsscap, 0, rsscap_size);
++      ret = rndis_filter_query_device(rndis_device,
++                                      OID_GEN_RECEIVE_SCALE_CAPABILITIES,
++                                      &rsscap, &rsscap_size);
++      if (ret || rsscap.num_recv_que < 2)
++              goto out;
++
++      net_device->num_chn = (num_online_cpus() < rsscap.num_recv_que) ?
++                             num_online_cpus() : rsscap.num_recv_que;
++      if (net_device->num_chn == 1)
++              goto out;
++
++      net_device->sub_cb_buf = vzalloc((net_device->num_chn - 1) *
++                                       NETVSC_PACKET_SIZE);
++      if (!net_device->sub_cb_buf) {
++              net_device->num_chn = 1;
++              dev_info(&dev->device, "No memory for subchannels.\n");
++              goto out;
++      }
++
++      vmbus_set_sc_create_callback(dev->channel, netvsc_sc_open);
++
++      init_packet = &net_device->channel_init_pkt;
++      memset(init_packet, 0, sizeof(struct nvsp_message));
++      init_packet->hdr.msg_type = NVSP_MSG5_TYPE_SUBCHANNEL;
++      init_packet->msg.v5_msg.subchn_req.op = NVSP_SUBCHANNEL_ALLOCATE;
++      init_packet->msg.v5_msg.subchn_req.num_subchannels =
++                                              net_device->num_chn - 1;
++      ret = vmbus_sendpacket(dev->channel, init_packet,
++                             sizeof(struct nvsp_message),
++                             (unsigned long)init_packet,
++                             VM_PKT_DATA_INBAND,
++                             VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
++      if (ret)
++              goto out;
++      t = wait_for_completion_timeout(&net_device->channel_init_wait, 5*HZ);
++      if (t == 0) {
++              ret = -ETIMEDOUT;
++              goto out;
++      }
++      if (init_packet->msg.v5_msg.subchn_comp.status !=
++          NVSP_STAT_SUCCESS) {
++              ret = -ENODEV;
++              goto out;
++      }
++      net_device->num_chn = 1 +
++              init_packet->msg.v5_msg.subchn_comp.num_subchannels;
++
++      vmbus_are_subchannels_present(dev->channel);
++
++      ret = rndis_filter_set_rss_param(rndis_device, net_device->num_chn);
++
++out:
++      if (ret)
++              net_device->num_chn = 1;
++      return 0; /* return 0 because primary channel can be used alone */
+ err_dev_remv:
+       rndis_filter_device_remove(dev);
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0017-hyperv-Remove-recv_pkt_list-and-lock.patch b/src/patches/linux/0017-hyperv-Remove-recv_pkt_list-and-lock.patch
new file mode 100644 (file)
index 0000000..31465a1
--- /dev/null
@@ -0,0 +1,384 @@
+From d6bf5567c1438b4f3b1bcff1a1525ddb1754df19 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Mon, 21 Apr 2014 14:54:43 -0700
+Subject: [PATCH 17/25] hyperv: Remove recv_pkt_list and lock
+
+Removed recv_pkt_list and lock, and updated related code, so that
+the locking overhead is reduced especially when multiple channels
+are in use.
+
+The recv_pkt_list isn't actually necessary because the packets are
+processed sequentially in each channel. It has been replaced by a
+local variable, and the related lock for this list is also removed.
+The is_data_pkt field is not used in receive path, so its assignment
+is cleaned up.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   |  33 --------
+ drivers/net/hyperv/netvsc.c       | 174 +++-----------------------------------
+ drivers/net/hyperv/netvsc_drv.c   |   2 +-
+ drivers/net/hyperv/rndis_filter.c |   2 -
+ 4 files changed, 13 insertions(+), 198 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 57eb3f906d64..a1af0f7711e2 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -119,27 +119,14 @@ struct ndis_recv_scale_param { /* NDIS_RECEIVE_SCALE_PARAMETERS */
+ };
+ /* Fwd declaration */
+-struct hv_netvsc_packet;
+ struct ndis_tcp_ip_checksum_info;
+-/* Represent the xfer page packet which contains 1 or more netvsc packet */
+-struct xferpage_packet {
+-      struct list_head list_ent;
+-      u32 status;
+-
+-      /* # of netvsc packets this xfer packet contains */
+-      u32 count;
+-
+-      struct vmbus_channel *channel;
+-};
+-
+ /*
+  * Represent netvsc packet which contains 1 RNDIS and 1 ethernet frame
+  * within the RNDIS
+  */
+ struct hv_netvsc_packet {
+       /* Bookkeeping stuff */
+-      struct list_head list_ent;
+       u32 status;
+       struct hv_device *device;
+@@ -149,19 +136,8 @@ struct hv_netvsc_packet {
+       u16 q_idx;
+       struct vmbus_channel *channel;
+-      /*
+-       * Valid only for receives when we break a xfer page packet
+-       * into multiple netvsc packets
+-       */
+-      struct xferpage_packet *xfer_page_pkt;
+-
+       union {
+               struct {
+-                      u64 recv_completion_tid;
+-                      void *recv_completion_ctx;
+-                      void (*recv_completion)(void *context);
+-              } recv;
+-              struct {
+                       u64 send_completion_tid;
+                       void *send_completion_ctx;
+                       void (*send_completion)(void *context);
+@@ -613,9 +589,6 @@ struct nvsp_message {
+ #define NETVSC_RECEIVE_BUFFER_ID              0xcafe
+-/* Preallocated receive packets */
+-#define NETVSC_RECEIVE_PACKETLIST_COUNT               256
+-
+ #define NETVSC_PACKET_SIZE                      2048
+ #define VRSS_SEND_TAB_SIZE 16
+@@ -630,12 +603,6 @@ struct netvsc_device {
+       wait_queue_head_t wait_drain;
+       bool start_remove;
+       bool destroy;
+-      /*
+-       * List of free preallocated hv_netvsc_packet to represent receive
+-       * packet
+-       */
+-      struct list_head recv_pkt_list;
+-      spinlock_t recv_pkt_list_lock;
+       /* Receive buffer allocated by us but manages by NetVSP */
+       void *recv_buf;
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index e7e77f12bc38..b10334773b32 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -387,7 +387,6 @@ static void netvsc_disconnect_vsp(struct netvsc_device *net_device)
+ int netvsc_device_remove(struct hv_device *device)
+ {
+       struct netvsc_device *net_device;
+-      struct hv_netvsc_packet *netvsc_packet, *pos;
+       unsigned long flags;
+       net_device = hv_get_drvdata(device);
+@@ -416,12 +415,6 @@ int netvsc_device_remove(struct hv_device *device)
+       vmbus_close(device->channel);
+       /* Release all resources */
+-      list_for_each_entry_safe(netvsc_packet, pos,
+-                               &net_device->recv_pkt_list, list_ent) {
+-              list_del(&netvsc_packet->list_ent);
+-              kfree(netvsc_packet);
+-      }
+-
+       if (net_device->sub_cb_buf)
+               vfree(net_device->sub_cb_buf);
+@@ -641,62 +634,6 @@ retry_send_cmplt:
+       }
+ }
+-/* Send a receive completion packet to RNDIS device (ie NetVsp) */
+-static void netvsc_receive_completion(void *context)
+-{
+-      struct hv_netvsc_packet *packet = context;
+-      struct hv_device *device = packet->device;
+-      struct vmbus_channel *channel;
+-      struct netvsc_device *net_device;
+-      u64 transaction_id = 0;
+-      bool fsend_receive_comp = false;
+-      unsigned long flags;
+-      struct net_device *ndev;
+-      u32 status = NVSP_STAT_NONE;
+-
+-      /*
+-       * Even though it seems logical to do a GetOutboundNetDevice() here to
+-       * send out receive completion, we are using GetInboundNetDevice()
+-       * since we may have disable outbound traffic already.
+-       */
+-      net_device = get_inbound_net_device(device);
+-      if (!net_device)
+-              return;
+-      ndev = net_device->ndev;
+-
+-      /* Overloading use of the lock. */
+-      spin_lock_irqsave(&net_device->recv_pkt_list_lock, flags);
+-
+-      if (packet->status != NVSP_STAT_SUCCESS)
+-              packet->xfer_page_pkt->status = NVSP_STAT_FAIL;
+-
+-      packet->xfer_page_pkt->count--;
+-
+-      /*
+-       * Last one in the line that represent 1 xfer page packet.
+-       * Return the xfer page packet itself to the freelist
+-       */
+-      if (packet->xfer_page_pkt->count == 0) {
+-              fsend_receive_comp = true;
+-              channel = packet->xfer_page_pkt->channel;
+-              transaction_id = packet->completion.recv.recv_completion_tid;
+-              status = packet->xfer_page_pkt->status;
+-              list_add_tail(&packet->xfer_page_pkt->list_ent,
+-                            &net_device->recv_pkt_list);
+-
+-      }
+-
+-      /* Put the packet back */
+-      list_add_tail(&packet->list_ent, &net_device->recv_pkt_list);
+-      spin_unlock_irqrestore(&net_device->recv_pkt_list_lock, flags);
+-
+-      /* Send a receive completion for the xfer page packet */
+-      if (fsend_receive_comp)
+-              netvsc_send_recv_completion(device, channel, net_device,
+-                                          transaction_id, status);
+-
+-}
+-
+ static void netvsc_receive(struct netvsc_device *net_device,
+                       struct vmbus_channel *channel,
+                       struct hv_device *device,
+@@ -704,16 +641,13 @@ static void netvsc_receive(struct netvsc_device *net_device,
+ {
+       struct vmtransfer_page_packet_header *vmxferpage_packet;
+       struct nvsp_message *nvsp_packet;
+-      struct hv_netvsc_packet *netvsc_packet = NULL;
+-      /* struct netvsc_driver *netvscDriver; */
+-      struct xferpage_packet *xferpage_packet = NULL;
++      struct hv_netvsc_packet nv_pkt;
++      struct hv_netvsc_packet *netvsc_packet = &nv_pkt;
++      u32 status = NVSP_STAT_SUCCESS;
+       int i;
+       int count = 0;
+-      unsigned long flags;
+       struct net_device *ndev;
+-      LIST_HEAD(listHead);
+-
+       ndev = net_device->ndev;
+       /*
+@@ -746,78 +680,14 @@ static void netvsc_receive(struct netvsc_device *net_device,
+               return;
+       }
+-      /*
+-       * Grab free packets (range count + 1) to represent this xfer
+-       * page packet. +1 to represent the xfer page packet itself.
+-       * We grab it here so that we know exactly how many we can
+-       * fulfil
+-       */
+-      spin_lock_irqsave(&net_device->recv_pkt_list_lock, flags);
+-      while (!list_empty(&net_device->recv_pkt_list)) {
+-              list_move_tail(net_device->recv_pkt_list.next, &listHead);
+-              if (++count == vmxferpage_packet->range_cnt + 1)
+-                      break;
+-      }
+-      spin_unlock_irqrestore(&net_device->recv_pkt_list_lock, flags);
+-
+-      /*
+-       * We need at least 2 netvsc pkts (1 to represent the xfer
+-       * page and at least 1 for the range) i.e. we can handled
+-       * some of the xfer page packet ranges...
+-       */
+-      if (count < 2) {
+-              netdev_err(ndev, "Got only %d netvsc pkt...needed "
+-                      "%d pkts. Dropping this xfer page packet completely!\n",
+-                      count, vmxferpage_packet->range_cnt + 1);
+-
+-              /* Return it to the freelist */
+-              spin_lock_irqsave(&net_device->recv_pkt_list_lock, flags);
+-              for (i = count; i != 0; i--) {
+-                      list_move_tail(listHead.next,
+-                                     &net_device->recv_pkt_list);
+-              }
+-              spin_unlock_irqrestore(&net_device->recv_pkt_list_lock,
+-                                     flags);
+-
+-              netvsc_send_recv_completion(device, channel, net_device,
+-                                          vmxferpage_packet->d.trans_id,
+-                                          NVSP_STAT_FAIL);
+-
+-              return;
+-      }
+-
+-      /* Remove the 1st packet to represent the xfer page packet itself */
+-      xferpage_packet = (struct xferpage_packet *)listHead.next;
+-      list_del(&xferpage_packet->list_ent);
+-      xferpage_packet->status = NVSP_STAT_SUCCESS;
+-      xferpage_packet->channel = channel;
+-
+-      /* This is how much we can satisfy */
+-      xferpage_packet->count = count - 1;
+-
+-      if (xferpage_packet->count != vmxferpage_packet->range_cnt) {
+-              netdev_err(ndev, "Needed %d netvsc pkts to satisfy "
+-                      "this xfer page...got %d\n",
+-                      vmxferpage_packet->range_cnt, xferpage_packet->count);
+-      }
++      count = vmxferpage_packet->range_cnt;
++      netvsc_packet->device = device;
++      netvsc_packet->channel = channel;
+       /* Each range represents 1 RNDIS pkt that contains 1 ethernet frame */
+-      for (i = 0; i < (count - 1); i++) {
+-              netvsc_packet = (struct hv_netvsc_packet *)listHead.next;
+-              list_del(&netvsc_packet->list_ent);
+-
++      for (i = 0; i < count; i++) {
+               /* Initialize the netvsc packet */
+               netvsc_packet->status = NVSP_STAT_SUCCESS;
+-              netvsc_packet->xfer_page_pkt = xferpage_packet;
+-              netvsc_packet->completion.recv.recv_completion =
+-                                      netvsc_receive_completion;
+-              netvsc_packet->completion.recv.recv_completion_ctx =
+-                                      netvsc_packet;
+-              netvsc_packet->device = device;
+-              /* Save this so that we can send it back */
+-              netvsc_packet->completion.recv.recv_completion_tid =
+-                                      vmxferpage_packet->d.trans_id;
+-
+               netvsc_packet->data = (void *)((unsigned long)net_device->
+                       recv_buf + vmxferpage_packet->ranges[i].byte_offset);
+               netvsc_packet->total_data_buflen =
+@@ -826,10 +696,12 @@ static void netvsc_receive(struct netvsc_device *net_device,
+               /* Pass it to the upper layer */
+               rndis_filter_receive(device, netvsc_packet);
+-              netvsc_receive_completion(netvsc_packet->
+-                              completion.recv.recv_completion_ctx);
++              if (netvsc_packet->status != NVSP_STAT_SUCCESS)
++                      status = NVSP_STAT_FAIL;
+       }
++      netvsc_send_recv_completion(device, channel, net_device,
++                                  vmxferpage_packet->d.trans_id, status);
+ }
+@@ -956,11 +828,9 @@ void netvsc_channel_cb(void *context)
+ int netvsc_device_add(struct hv_device *device, void *additional_info)
+ {
+       int ret = 0;
+-      int i;
+       int ring_size =
+       ((struct netvsc_device_info *)additional_info)->ring_size;
+       struct netvsc_device *net_device;
+-      struct hv_netvsc_packet *packet, *pos;
+       struct net_device *ndev;
+       net_device = alloc_net_device(device);
+@@ -981,18 +851,6 @@ int netvsc_device_add(struct hv_device *device, void *additional_info)
+       ndev = net_device->ndev;
+       /* Initialize the NetVSC channel extension */
+-      spin_lock_init(&net_device->recv_pkt_list_lock);
+-
+-      INIT_LIST_HEAD(&net_device->recv_pkt_list);
+-
+-      for (i = 0; i < NETVSC_RECEIVE_PACKETLIST_COUNT; i++) {
+-              packet = kzalloc(sizeof(struct hv_netvsc_packet), GFP_KERNEL);
+-              if (!packet)
+-                      break;
+-
+-              list_add_tail(&packet->list_ent,
+-                            &net_device->recv_pkt_list);
+-      }
+       init_completion(&net_device->channel_init_wait);
+       set_per_channel_state(device->channel, net_device->cb_buffer);
+@@ -1028,16 +886,8 @@ close:
+ cleanup:
+-      if (net_device) {
+-              list_for_each_entry_safe(packet, pos,
+-                                       &net_device->recv_pkt_list,
+-                                       list_ent) {
+-                      list_del(&packet->list_ent);
+-                      kfree(packet);
+-              }
+-
++      if (net_device)
+               kfree(net_device);
+-      }
+       return ret;
+ }
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index e486dbd33f61..6cc4db064fec 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -643,7 +643,7 @@ int netvsc_recv_callback(struct hv_device *device_obj,
+               __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
+                                      packet->vlan_tci);
+-      skb_record_rx_queue(skb, packet->xfer_page_pkt->channel->
++      skb_record_rx_queue(skb, packet->channel->
+                           offermsg.offer.sub_channel_index %
+                           net->real_num_rx_queues);
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index d92cfbe43410..48f5a0fbd674 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -401,8 +401,6 @@ static void rndis_filter_receive_data(struct rndis_device *dev,
+       pkt->total_data_buflen = rndis_pkt->data_len;
+       pkt->data = (void *)((unsigned long)pkt->data + data_offset);
+-      pkt->is_data_pkt = true;
+-
+       vlan = rndis_get_ppi(rndis_pkt, IEEE_8021Q_INFO);
+       if (vlan) {
+               pkt->vlan_tci = VLAN_TAG_PRESENT | vlan->vlanid |
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0018-hyperv-Simplify-the-send_completion-variables.patch b/src/patches/linux/0018-hyperv-Simplify-the-send_completion-variables.patch
new file mode 100644 (file)
index 0000000..82b742b
--- /dev/null
@@ -0,0 +1,105 @@
+From d6eeeb452c1e6e7cf14f4a581a8f2ea2c50ec17a Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Mon, 21 Apr 2014 14:54:44 -0700
+Subject: [PATCH 18/25] hyperv: Simplify the send_completion variables
+
+The union contains only one member now, so we use the variables in it directly.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h   | 10 +++-------
+ drivers/net/hyperv/netvsc.c       |  7 +++----
+ drivers/net/hyperv/netvsc_drv.c   |  8 ++++----
+ drivers/net/hyperv/rndis_filter.c |  2 +-
+ 4 files changed, 11 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index a1af0f7711e2..d1f7826aa75f 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -136,13 +136,9 @@ struct hv_netvsc_packet {
+       u16 q_idx;
+       struct vmbus_channel *channel;
+-      union {
+-              struct {
+-                      u64 send_completion_tid;
+-                      void *send_completion_ctx;
+-                      void (*send_completion)(void *context);
+-              } send;
+-      } completion;
++      u64 send_completion_tid;
++      void *send_completion_ctx;
++      void (*send_completion)(void *context);
+       /* This points to the memory after page_buf */
+       struct rndis_message *rndis_msg;
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index b10334773b32..bbee44635035 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -479,9 +479,8 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+               if (nvsc_packet) {
+                       q_idx = nvsc_packet->q_idx;
+                       channel = nvsc_packet->channel;
+-                      nvsc_packet->completion.send.send_completion(
+-                              nvsc_packet->completion.send.
+-                              send_completion_ctx);
++                      nvsc_packet->send_completion(nvsc_packet->
++                                                   send_completion_ctx);
+               }
+               num_outstanding_sends =
+@@ -534,7 +533,7 @@ int netvsc_send(struct hv_device *device,
+               0xFFFFFFFF;
+       sendMessage.msg.v1_msg.send_rndis_pkt.send_buf_section_size = 0;
+-      if (packet->completion.send.send_completion)
++      if (packet->send_completion)
+               req_id = (ulong)packet;
+       else
+               req_id = 0;
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 6cc4db064fec..f3d3525ed42d 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -235,7 +235,7 @@ static void netvsc_xmit_completion(void *context)
+ {
+       struct hv_netvsc_packet *packet = (struct hv_netvsc_packet *)context;
+       struct sk_buff *skb = (struct sk_buff *)
+-              (unsigned long)packet->completion.send.send_completion_tid;
++              (unsigned long)packet->send_completion_tid;
+       kfree(packet);
+@@ -426,9 +426,9 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+                               (num_data_pgs * sizeof(struct hv_page_buffer)));
+       /* Set the completion routine */
+-      packet->completion.send.send_completion = netvsc_xmit_completion;
+-      packet->completion.send.send_completion_ctx = packet;
+-      packet->completion.send.send_completion_tid = (unsigned long)skb;
++      packet->send_completion = netvsc_xmit_completion;
++      packet->send_completion_ctx = packet;
++      packet->send_completion_tid = (unsigned long)skb;
+       isvlan = packet->vlan_tci & VLAN_TAG_PRESENT;
+diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
+index 48f5a0fbd674..99c527adae5b 100644
+--- a/drivers/net/hyperv/rndis_filter.c
++++ b/drivers/net/hyperv/rndis_filter.c
+@@ -236,7 +236,7 @@ static int rndis_filter_send_request(struct rndis_device *dev,
+                       packet->page_buf[0].len;
+       }
+-      packet->completion.send.send_completion = NULL;
++      packet->send_completion = NULL;
+       ret = netvsc_send(dev->net_dev->dev, packet);
+       return ret;
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0019-hyperv-Enable-sendbuf-mechanism-on-the-send-path.patch b/src/patches/linux/0019-hyperv-Enable-sendbuf-mechanism-on-the-send-path.patch
new file mode 100644 (file)
index 0000000..3940865
--- /dev/null
@@ -0,0 +1,407 @@
+From 4685e50349d5dc5fe485c898ca3ce539e93a0118 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Wed, 30 Apr 2014 10:14:31 -0700
+Subject: [PATCH 19/25] hyperv: Enable sendbuf mechanism on the send path
+
+We send packets using a copy-free mechanism (this is the Guest to Host transport
+via VMBUS). While this is obviously optimal for large packets,
+it may not be optimal for small packets. Hyper-V host supports
+a second mechanism for sending packets that is "copy based". We implement that
+mechanism in this patch.
+
+In this version of the patch I have addressed a comment from David Miller.
+
+With this patch (and all of the other offload and VRSS patches), we are now able
+to almost saturate a 10G interface between Linux VMs on Hyper-V
+on different hosts - close to  9 Gbps as measured via iperf.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h |  14 +++
+ drivers/net/hyperv/netvsc.c     | 226 ++++++++++++++++++++++++++++++++++++++--
+ drivers/net/hyperv/netvsc_drv.c |   3 +-
+ 3 files changed, 234 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index d1f7826aa75f..4b7df5a5c966 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -140,6 +140,8 @@ struct hv_netvsc_packet {
+       void *send_completion_ctx;
+       void (*send_completion)(void *context);
++      u32 send_buf_index;
++
+       /* This points to the memory after page_buf */
+       struct rndis_message *rndis_msg;
+@@ -582,6 +584,9 @@ struct nvsp_message {
+ #define NETVSC_RECEIVE_BUFFER_SIZE            (1024*1024*16)  /* 16MB */
+ #define NETVSC_RECEIVE_BUFFER_SIZE_LEGACY     (1024*1024*15)  /* 15MB */
++#define NETVSC_SEND_BUFFER_SIZE                       (1024 * 1024)   /* 1MB */
++#define NETVSC_INVALID_INDEX                  -1
++
+ #define NETVSC_RECEIVE_BUFFER_ID              0xcafe
+@@ -607,6 +612,15 @@ struct netvsc_device {
+       u32 recv_section_cnt;
+       struct nvsp_1_receive_buffer_section *recv_section;
++      /* Send buffer allocated by us */
++      void *send_buf;
++      u32 send_buf_size;
++      u32 send_buf_gpadl_handle;
++      u32 send_section_cnt;
++      u32 send_section_size;
++      unsigned long *send_section_map;
++      int map_words;
++
+       /* Used for NetVSP initialization protocol */
+       struct completion channel_init_wait;
+       struct nvsp_message channel_init_pkt;
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index bbee44635035..c041f63a6d30 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -28,6 +28,7 @@
+ #include <linux/slab.h>
+ #include <linux/netdevice.h>
+ #include <linux/if_ether.h>
++#include <asm/sync_bitops.h>
+ #include "hyperv_net.h"
+@@ -80,7 +81,7 @@ get_in_err:
+ }
+-static int netvsc_destroy_recv_buf(struct netvsc_device *net_device)
++static int netvsc_destroy_buf(struct netvsc_device *net_device)
+ {
+       struct nvsp_message *revoke_packet;
+       int ret = 0;
+@@ -146,10 +147,62 @@ static int netvsc_destroy_recv_buf(struct netvsc_device *net_device)
+               net_device->recv_section = NULL;
+       }
++      /* Deal with the send buffer we may have setup.
++       * If we got a  send section size, it means we received a
++       * SendsendBufferComplete msg (ie sent
++       * NvspMessage1TypeSendReceiveBuffer msg) therefore, we need
++       * to send a revoke msg here
++       */
++      if (net_device->send_section_size) {
++              /* Send the revoke receive buffer */
++              revoke_packet = &net_device->revoke_packet;
++              memset(revoke_packet, 0, sizeof(struct nvsp_message));
++
++              revoke_packet->hdr.msg_type =
++                      NVSP_MSG1_TYPE_REVOKE_SEND_BUF;
++              revoke_packet->msg.v1_msg.revoke_recv_buf.id = 0;
++
++              ret = vmbus_sendpacket(net_device->dev->channel,
++                                     revoke_packet,
++                                     sizeof(struct nvsp_message),
++                                     (unsigned long)revoke_packet,
++                                     VM_PKT_DATA_INBAND, 0);
++              /* If we failed here, we might as well return and
++               * have a leak rather than continue and a bugchk
++               */
++              if (ret != 0) {
++                      netdev_err(ndev, "unable to send "
++                                 "revoke send buffer to netvsp\n");
++                      return ret;
++              }
++      }
++      /* Teardown the gpadl on the vsp end */
++      if (net_device->send_buf_gpadl_handle) {
++              ret = vmbus_teardown_gpadl(net_device->dev->channel,
++                                         net_device->send_buf_gpadl_handle);
++
++              /* If we failed here, we might as well return and have a leak
++               * rather than continue and a bugchk
++               */
++              if (ret != 0) {
++                      netdev_err(ndev,
++                                 "unable to teardown send buffer's gpadl\n");
++                      return ret;
++              }
++              net_device->recv_buf_gpadl_handle = 0;
++      }
++      if (net_device->send_buf) {
++              /* Free up the receive buffer */
++              free_pages((unsigned long)net_device->send_buf,
++                         get_order(net_device->send_buf_size));
++              net_device->send_buf = NULL;
++      }
++      kfree(net_device->send_section_map);
++
+       return ret;
+ }
+-static int netvsc_init_recv_buf(struct hv_device *device)
++static int netvsc_init_buf(struct hv_device *device)
+ {
+       int ret = 0;
+       int t;
+@@ -248,10 +301,90 @@ static int netvsc_init_recv_buf(struct hv_device *device)
+               goto cleanup;
+       }
++      /* Now setup the send buffer.
++       */
++      net_device->send_buf =
++              (void *)__get_free_pages(GFP_KERNEL|__GFP_ZERO,
++                                       get_order(net_device->send_buf_size));
++      if (!net_device->send_buf) {
++              netdev_err(ndev, "unable to allocate send "
++                         "buffer of size %d\n", net_device->send_buf_size);
++              ret = -ENOMEM;
++              goto cleanup;
++      }
++
++      /* Establish the gpadl handle for this buffer on this
++       * channel.  Note: This call uses the vmbus connection rather
++       * than the channel to establish the gpadl handle.
++       */
++      ret = vmbus_establish_gpadl(device->channel, net_device->send_buf,
++                                  net_device->send_buf_size,
++                                  &net_device->send_buf_gpadl_handle);
++      if (ret != 0) {
++              netdev_err(ndev,
++                         "unable to establish send buffer's gpadl\n");
++              goto cleanup;
++      }
++
++      /* Notify the NetVsp of the gpadl handle */
++      init_packet = &net_device->channel_init_pkt;
++      memset(init_packet, 0, sizeof(struct nvsp_message));
++      init_packet->hdr.msg_type = NVSP_MSG1_TYPE_SEND_SEND_BUF;
++      init_packet->msg.v1_msg.send_recv_buf.gpadl_handle =
++              net_device->send_buf_gpadl_handle;
++      init_packet->msg.v1_msg.send_recv_buf.id = 0;
++
++      /* Send the gpadl notification request */
++      ret = vmbus_sendpacket(device->channel, init_packet,
++                             sizeof(struct nvsp_message),
++                             (unsigned long)init_packet,
++                             VM_PKT_DATA_INBAND,
++                             VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
++      if (ret != 0) {
++              netdev_err(ndev,
++                         "unable to send send buffer's gpadl to netvsp\n");
++              goto cleanup;
++      }
++
++      t = wait_for_completion_timeout(&net_device->channel_init_wait, 5*HZ);
++      BUG_ON(t == 0);
++
++      /* Check the response */
++      if (init_packet->msg.v1_msg.
++          send_send_buf_complete.status != NVSP_STAT_SUCCESS) {
++              netdev_err(ndev, "Unable to complete send buffer "
++                         "initialization with NetVsp - status %d\n",
++                         init_packet->msg.v1_msg.
++                         send_recv_buf_complete.status);
++              ret = -EINVAL;
++              goto cleanup;
++      }
++
++      /* Parse the response */
++      net_device->send_section_size = init_packet->msg.
++                              v1_msg.send_send_buf_complete.section_size;
++
++      /* Section count is simply the size divided by the section size.
++       */
++      net_device->send_section_cnt =
++              net_device->send_buf_size/net_device->send_section_size;
++
++      dev_info(&device->device, "Send section size: %d, Section count:%d\n",
++               net_device->send_section_size, net_device->send_section_cnt);
++
++      /* Setup state for managing the send buffer. */
++      net_device->map_words = DIV_ROUND_UP(net_device->send_section_cnt,
++                                           BITS_PER_LONG);
++
++      net_device->send_section_map =
++              kzalloc(net_device->map_words * sizeof(ulong), GFP_KERNEL);
++      if (net_device->send_section_map == NULL)
++              goto cleanup;
++
+       goto exit;
+ cleanup:
+-      netvsc_destroy_recv_buf(net_device);
++      netvsc_destroy_buf(net_device);
+ exit:
+       return ret;
+@@ -369,8 +502,9 @@ static int netvsc_connect_vsp(struct hv_device *device)
+               net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE_LEGACY;
+       else
+               net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE;
++      net_device->send_buf_size = NETVSC_SEND_BUFFER_SIZE;
+-      ret = netvsc_init_recv_buf(device);
++      ret = netvsc_init_buf(device);
+ cleanup:
+       return ret;
+@@ -378,7 +512,7 @@ cleanup:
+ static void netvsc_disconnect_vsp(struct netvsc_device *net_device)
+ {
+-      netvsc_destroy_recv_buf(net_device);
++      netvsc_destroy_buf(net_device);
+ }
+ /*
+@@ -440,6 +574,12 @@ static inline u32 hv_ringbuf_avail_percent(
+       return avail_write * 100 / ring_info->ring_datasize;
+ }
++static inline void netvsc_free_send_slot(struct netvsc_device *net_device,
++                                       u32 index)
++{
++      sync_change_bit(index, net_device->send_section_map);
++}
++
+ static void netvsc_send_completion(struct netvsc_device *net_device,
+                                  struct hv_device *device,
+                                  struct vmpacket_descriptor *packet)
+@@ -447,6 +587,7 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+       struct nvsp_message *nvsp_packet;
+       struct hv_netvsc_packet *nvsc_packet;
+       struct net_device *ndev;
++      u32 send_index;
+       ndev = net_device->ndev;
+@@ -477,6 +618,9 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+               /* Notify the layer above us */
+               if (nvsc_packet) {
++                      send_index = nvsc_packet->send_buf_index;
++                      if (send_index != NETVSC_INVALID_INDEX)
++                              netvsc_free_send_slot(net_device, send_index);
+                       q_idx = nvsc_packet->q_idx;
+                       channel = nvsc_packet->channel;
+                       nvsc_packet->send_completion(nvsc_packet->
+@@ -504,6 +648,52 @@ static void netvsc_send_completion(struct netvsc_device *net_device,
+ }
++static u32 netvsc_get_next_send_section(struct netvsc_device *net_device)
++{
++      unsigned long index;
++      u32 max_words = net_device->map_words;
++      unsigned long *map_addr = (unsigned long *)net_device->send_section_map;
++      u32 section_cnt = net_device->send_section_cnt;
++      int ret_val = NETVSC_INVALID_INDEX;
++      int i;
++      int prev_val;
++
++      for (i = 0; i < max_words; i++) {
++              if (!~(map_addr[i]))
++                      continue;
++              index = ffz(map_addr[i]);
++              prev_val = sync_test_and_set_bit(index, &map_addr[i]);
++              if (prev_val)
++                      continue;
++              if ((index + (i * BITS_PER_LONG)) >= section_cnt)
++                      break;
++              ret_val = (index + (i * BITS_PER_LONG));
++              break;
++      }
++      return ret_val;
++}
++
++u32 netvsc_copy_to_send_buf(struct netvsc_device *net_device,
++                          unsigned int section_index,
++                          struct hv_netvsc_packet *packet)
++{
++      char *start = net_device->send_buf;
++      char *dest = (start + (section_index * net_device->send_section_size));
++      int i;
++      u32 msg_size = 0;
++
++      for (i = 0; i < packet->page_buf_cnt; i++) {
++              char *src = phys_to_virt(packet->page_buf[i].pfn << PAGE_SHIFT);
++              u32 offset = packet->page_buf[i].offset;
++              u32 len = packet->page_buf[i].len;
++
++              memcpy(dest, (src + offset), len);
++              msg_size += len;
++              dest += len;
++      }
++      return msg_size;
++}
++
+ int netvsc_send(struct hv_device *device,
+                       struct hv_netvsc_packet *packet)
+ {
+@@ -513,6 +703,10 @@ int netvsc_send(struct hv_device *device,
+       struct net_device *ndev;
+       struct vmbus_channel *out_channel = NULL;
+       u64 req_id;
++      unsigned int section_index = NETVSC_INVALID_INDEX;
++      u32 msg_size = 0;
++      struct sk_buff *skb;
++
+       net_device = get_outbound_net_device(device);
+       if (!net_device)
+@@ -528,10 +722,26 @@ int netvsc_send(struct hv_device *device,
+               sendMessage.msg.v1_msg.send_rndis_pkt.channel_type = 1;
+       }
+-      /* Not using send buffer section */
++      /* Attempt to send via sendbuf */
++      if (packet->total_data_buflen < net_device->send_section_size) {
++              section_index = netvsc_get_next_send_section(net_device);
++              if (section_index != NETVSC_INVALID_INDEX) {
++                      msg_size = netvsc_copy_to_send_buf(net_device,
++                                                         section_index,
++                                                         packet);
++                      skb = (struct sk_buff *)
++                            (unsigned long)packet->send_completion_tid;
++                      if (skb)
++                              dev_kfree_skb_any(skb);
++                      packet->page_buf_cnt = 0;
++              }
++      }
++      packet->send_buf_index = section_index;
++
++
+       sendMessage.msg.v1_msg.send_rndis_pkt.send_buf_section_index =
+-              0xFFFFFFFF;
+-      sendMessage.msg.v1_msg.send_rndis_pkt.send_buf_section_size = 0;
++              section_index;
++      sendMessage.msg.v1_msg.send_rndis_pkt.send_buf_section_size = msg_size;
+       if (packet->send_completion)
+               req_id = (ulong)packet;
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index f3d3525ed42d..9a19aa5672e6 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -236,10 +236,11 @@ static void netvsc_xmit_completion(void *context)
+       struct hv_netvsc_packet *packet = (struct hv_netvsc_packet *)context;
+       struct sk_buff *skb = (struct sk_buff *)
+               (unsigned long)packet->send_completion_tid;
++      u32 index = packet->send_buf_index;
+       kfree(packet);
+-      if (skb)
++      if (skb && (index == NETVSC_INVALID_INDEX))
+               dev_kfree_skb_any(skb);
+ }
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0020-Add-support-for-netvsc-build-without-CONFIG_SYSFS-fl.patch b/src/patches/linux/0020-Add-support-for-netvsc-build-without-CONFIG_SYSFS-fl.patch
new file mode 100644 (file)
index 0000000..b610b54
--- /dev/null
@@ -0,0 +1,42 @@
+From 3f0b77385356301cf4718a94f76a4068588ecb8e Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Thu, 8 May 2014 15:14:10 -0700
+Subject: [PATCH 20/25] Add support for netvsc build without CONFIG_SYSFS flag
+
+This change ensures the driver can be built successfully without the
+CONFIG_SYSFS flag.
+MS-TFS: 182270
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc_drv.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 9a19aa5672e6..346f1aeb9c24 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -645,8 +645,7 @@ int netvsc_recv_callback(struct hv_device *device_obj,
+                                      packet->vlan_tci);
+       skb_record_rx_queue(skb, packet->channel->
+-                          offermsg.offer.sub_channel_index %
+-                          net->real_num_rx_queues);
++                          offermsg.offer.sub_channel_index);
+       net->stats.rx_packets++;
+       net->stats.rx_bytes += packet->total_data_buflen;
+@@ -829,8 +828,6 @@ static int netvsc_probe(struct hv_device *dev,
+       nvdev = hv_get_drvdata(dev);
+       netif_set_real_num_tx_queues(net, nvdev->num_chn);
+       netif_set_real_num_rx_queues(net, nvdev->num_chn);
+-      dev_info(&dev->device, "real num tx,rx queues:%u, %u\n",
+-               net->real_num_tx_queues, net->real_num_rx_queues);
+       ret = register_netdev(net);
+       if (ret != 0) {
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0021-hyperv-Add-hash-value-into-RNDIS-Per-packet-info.patch b/src/patches/linux/0021-hyperv-Add-hash-value-into-RNDIS-Per-packet-info.patch
new file mode 100644 (file)
index 0000000..c522d28
--- /dev/null
@@ -0,0 +1,93 @@
+From 1267d9b235e7612f8cdfa842a0433bb82e75f7fb Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Wed, 21 May 2014 12:55:39 -0700
+Subject: [PATCH 21/25] hyperv: Add hash value into RNDIS Per-packet info
+
+It passes the hash value as the RNDIS Per-packet info to the Hyper-V host,
+so that the send completion notices can be spread across multiple channels.
+MS-TFS: 140273
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/hyperv_net.h |  4 ++++
+ drivers/net/hyperv/netvsc_drv.c | 18 ++++++++++++++----
+ 2 files changed, 18 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
+index 4b7df5a5c966..6cc37c15e0bf 100644
+--- a/drivers/net/hyperv/hyperv_net.h
++++ b/drivers/net/hyperv/hyperv_net.h
+@@ -791,6 +791,7 @@ enum ndis_per_pkt_info_type {
+       IEEE_8021Q_INFO,
+       ORIGINAL_PKTINFO,
+       PACKET_CANCEL_ID,
++      NBL_HASH_VALUE = PACKET_CANCEL_ID,
+       ORIGINAL_NET_BUFLIST,
+       CACHED_NET_BUFLIST,
+       SHORT_PKT_PADINFO,
+@@ -937,6 +938,9 @@ struct ndis_tcp_lso_info {
+ #define NDIS_LSO_PPI_SIZE (sizeof(struct rndis_per_packet_info) + \
+               sizeof(struct ndis_tcp_lso_info))
++#define NDIS_HASH_PPI_SIZE (sizeof(struct rndis_per_packet_info) + \
++              sizeof(u32))
++
+ /* Format of Information buffer passed in a SetRequest for the OID */
+ /* OID_GEN_RNDIS_CONFIG_PARAMETER. */
+ struct rndis_config_parameter_info {
+diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
+index 346f1aeb9c24..bd3b3acd04dc 100644
+--- a/drivers/net/hyperv/netvsc_drv.c
++++ b/drivers/net/hyperv/netvsc_drv.c
+@@ -224,9 +224,11 @@ static u16 netvsc_select_queue(struct net_device *ndev, struct sk_buff *skb,
+       if (nvsc_dev == NULL || ndev->real_num_tx_queues <= 1)
+               return 0;
+-      if (netvsc_set_hash(&hash, skb))
++      if (netvsc_set_hash(&hash, skb)) {
+               q_idx = nvsc_dev->send_table[hash % VRSS_SEND_TAB_SIZE] %
+                       ndev->real_num_tx_queues;
++              skb_set_hash(skb, hash, PKT_HASH_TYPE_L3);
++      }
+       return q_idx;
+ }
+@@ -385,6 +387,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       struct ndis_tcp_lso_info *lso_info;
+       int  hdr_offset;
+       u32 net_trans_info;
++      u32 hash;
+       /* We will atmost need two pages to describe the rndis
+@@ -403,9 +406,8 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       packet = kzalloc(sizeof(struct hv_netvsc_packet) +
+                        (num_data_pgs * sizeof(struct hv_page_buffer)) +
+                        sizeof(struct rndis_message) +
+-                       NDIS_VLAN_PPI_SIZE +
+-                       NDIS_CSUM_PPI_SIZE +
+-                       NDIS_LSO_PPI_SIZE, GFP_ATOMIC);
++                       NDIS_VLAN_PPI_SIZE + NDIS_CSUM_PPI_SIZE +
++                       NDIS_LSO_PPI_SIZE + NDIS_HASH_PPI_SIZE, GFP_ATOMIC);
+       if (!packet) {
+               /* out of memory, drop packet */
+               netdev_err(net, "unable to allocate hv_netvsc_packet\n");
+@@ -444,6 +446,14 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
+       rndis_msg_size = RNDIS_MESSAGE_SIZE(struct rndis_packet);
++      hash = skb_get_hash_raw(skb);
++      if (hash != 0 && net->real_num_tx_queues > 1) {
++              rndis_msg_size += NDIS_HASH_PPI_SIZE;
++              ppi = init_ppi_data(rndis_msg, NDIS_HASH_PPI_SIZE,
++                                  NBL_HASH_VALUE);
++              *(u32 *)((void *)ppi + ppi->ppi_offset) = hash;
++      }
++
+       if (isvlan) {
+               struct ndis_pkt_8021q_info *vlan;
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0022-hyperv-fix-apparent-cut-n-paste-error-in-send-path-t.patch b/src/patches/linux/0022-hyperv-fix-apparent-cut-n-paste-error-in-send-path-t.patch
new file mode 100644 (file)
index 0000000..d849ebb
--- /dev/null
@@ -0,0 +1,32 @@
+From ee99150c7f34737e4382e7199d2ffe3dfbb54a5c Mon Sep 17 00:00:00 2001
+From: Dave Jones <davej@redhat.com>
+Date: Mon, 16 Jun 2014 16:59:02 -0400
+Subject: [PATCH 22/25] hyperv: fix apparent cut-n-paste error in send path
+ teardown
+
+c25aaf814a63: "hyperv: Enable sendbuf mechanism on the send path" added
+some teardown code that looks like it was copied from the recieve path
+above, but missed a variable name replacement.
+
+Signed-off-by: Dave Jones <davej@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index c041f63a6d30..4ed38eaecea8 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -189,7 +189,7 @@ static int netvsc_destroy_buf(struct netvsc_device *net_device)
+                                  "unable to teardown send buffer's gpadl\n");
+                       return ret;
+               }
+-              net_device->recv_buf_gpadl_handle = 0;
++              net_device->send_buf_gpadl_handle = 0;
+       }
+       if (net_device->send_buf) {
+               /* Free up the receive buffer */
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0023-hyperv-Fix-error-return-code-in-netvsc_init_buf.patch b/src/patches/linux/0023-hyperv-Fix-error-return-code-in-netvsc_init_buf.patch
new file mode 100644 (file)
index 0000000..ab0960d
--- /dev/null
@@ -0,0 +1,34 @@
+From f1009dfec7c439a958bd9ed8893dd6aa692c61f5 Mon Sep 17 00:00:00 2001
+From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
+Date: Wed, 23 Jul 2014 09:00:35 +0800
+Subject: [PATCH 23/25] hyperv: Fix error return code in netvsc_init_buf()
+
+Fix to return -ENOMEM from the kalloc error handling
+case instead of 0.
+
+Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
+Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/hyperv/netvsc.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index 4ed38eaecea8..d97d5f39a04e 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -378,8 +378,10 @@ static int netvsc_init_buf(struct hv_device *device)
+       net_device->send_section_map =
+               kzalloc(net_device->map_words * sizeof(ulong), GFP_KERNEL);
+-      if (net_device->send_section_map == NULL)
++      if (net_device->send_section_map == NULL) {
++              ret = -ENOMEM;
+               goto cleanup;
++      }
+       goto exit;
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0024-hyperv-Fix-a-bug-in-netvsc_send.patch b/src/patches/linux/0024-hyperv-Fix-a-bug-in-netvsc_send.patch
new file mode 100644 (file)
index 0000000..8495fa2
--- /dev/null
@@ -0,0 +1,68 @@
+From 38bca2d5bd6fdaa0b8e1e415f79d89322c6825a8 Mon Sep 17 00:00:00 2001
+From: KY Srinivasan <kys@microsoft.com>
+Date: Sun, 5 Oct 2014 10:42:51 -0700
+Subject: [PATCH 24/25] hyperv: Fix a bug in netvsc_send()
+
+[ Upstream commit 3a67c9ccad926a168d8b7891537a452018368a5b ]
+
+After the packet is successfully sent, we should not touch the packet
+as it may have been freed. This patch is based on the work done by
+Long Li <longli@microsoft.com>.
+
+David, please queue this up for stable.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Reported-by: Sitsofe Wheeler <sitsofe@yahoo.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/hyperv/netvsc.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
+index d97d5f39a04e..7edf976ecfa0 100644
+--- a/drivers/net/hyperv/netvsc.c
++++ b/drivers/net/hyperv/netvsc.c
+@@ -708,6 +708,7 @@ int netvsc_send(struct hv_device *device,
+       unsigned int section_index = NETVSC_INVALID_INDEX;
+       u32 msg_size = 0;
+       struct sk_buff *skb;
++      u16 q_idx = packet->q_idx;
+       net_device = get_outbound_net_device(device);
+@@ -772,24 +773,24 @@ int netvsc_send(struct hv_device *device,
+       if (ret == 0) {
+               atomic_inc(&net_device->num_outstanding_sends);
+-              atomic_inc(&net_device->queue_sends[packet->q_idx]);
++              atomic_inc(&net_device->queue_sends[q_idx]);
+               if (hv_ringbuf_avail_percent(&out_channel->outbound) <
+                       RING_AVAIL_PERCENT_LOWATER) {
+                       netif_tx_stop_queue(netdev_get_tx_queue(
+-                                          ndev, packet->q_idx));
++                                          ndev, q_idx));
+                       if (atomic_read(&net_device->
+-                              queue_sends[packet->q_idx]) < 1)
++                              queue_sends[q_idx]) < 1)
+                               netif_tx_wake_queue(netdev_get_tx_queue(
+-                                                  ndev, packet->q_idx));
++                                                  ndev, q_idx));
+               }
+       } else if (ret == -EAGAIN) {
+               netif_tx_stop_queue(netdev_get_tx_queue(
+-                                  ndev, packet->q_idx));
+-              if (atomic_read(&net_device->queue_sends[packet->q_idx]) < 1) {
++                                  ndev, q_idx));
++              if (atomic_read(&net_device->queue_sends[q_idx]) < 1) {
+                       netif_tx_wake_queue(netdev_get_tx_queue(
+-                                          ndev, packet->q_idx));
++                                          ndev, q_idx));
+                       ret = -ENOSPC;
+               }
+       } else {
+-- 
+2.4.3
+
diff --git a/src/patches/linux/0025-Drivers-hv-vmbus-Support-per-channel-driver-state.patch b/src/patches/linux/0025-Drivers-hv-vmbus-Support-per-channel-driver-state.patch
new file mode 100644 (file)
index 0000000..47037be
--- /dev/null
@@ -0,0 +1,51 @@
+From 4b71288758aa1d510402b84ca93b1ef566575d22 Mon Sep 17 00:00:00 2001
+From: "K. Y. Srinivasan" <kys@microsoft.com>
+Date: Mon, 3 Feb 2014 12:42:45 -0800
+Subject: [PATCH 25/25] Drivers: hv: vmbus: Support per-channel driver state
+
+As we implement Virtual Receive Side Scaling on the networking side
+(the VRSS patches are currently under review), it will be useful to have
+per-channel state that vmbus drivers can manage. Add support for
+managing per-channel state.
+
+Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ include/linux/hyperv.h | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
+index 6088058a3e00..732dc7e37e96 100644
+--- a/include/linux/hyperv.h
++++ b/include/linux/hyperv.h
+@@ -1045,6 +1045,10 @@ struct vmbus_channel {
+        * This will be NULL for the primary channel.
+        */
+       struct vmbus_channel *primary_channel;
++      /*
++       * Support per-channel state for use by vmbus drivers.
++       */
++      void *per_channel_state;
+ };
+ static inline void set_channel_read_state(struct vmbus_channel *c, bool state)
+@@ -1052,6 +1056,16 @@ static inline void set_channel_read_state(struct vmbus_channel *c, bool state)
+       c->batched_reading = state;
+ }
++static inline void set_per_channel_state(struct vmbus_channel *c, void *s)
++{
++      c->per_channel_state = s;
++}
++
++static inline void *get_per_channel_state(struct vmbus_channel *c)
++{
++      return c->per_channel_state;
++}
++
+ void vmbus_onmessage(void *context);
+ int vmbus_request_offers(void);
+-- 
+2.4.3
+
diff --git a/src/patches/lua-5.3.0-autotoolize.patch b/src/patches/lua-5.3.0-autotoolize.patch
new file mode 100644 (file)
index 0000000..3e4723a
--- /dev/null
@@ -0,0 +1,192 @@
+diff -up lua-5.3.0/configure.ac.autoxxx lua-5.3.0/configure.ac
+--- lua-5.3.0/configure.ac.autoxxx     2015-01-15 10:20:03.826889574 -0500
++++ lua-5.3.0/configure.ac     2015-01-15 10:20:03.826889574 -0500
+@@ -0,0 +1,69 @@
++AC_PREREQ(2.59)
++AC_INIT([lua], [5.3.0], [https://bugzilla.redhat.com/], [lua-at], [http://www.lua.org])
++AC_SUBST([MAJOR_VERSION], [5.3])
++
++AC_CONFIG_HEADERS([config.h])
++AC_CONFIG_SRCDIR([src/lapi.c])
++
++AM_INIT_AUTOMAKE([1.9 foreign])
++
++AC_PROG_CC
++AC_PROG_LIBTOOL
++
++AC_ARG_WITH(
++  [readline],
++  [AC_HELP_STRING([--with-readline], [Use readline for interpreter input [default=yes]])],
++  [use_readline=$withval],
++  [use_readline=yes]
++)
++
++LUA_LIBS="-lm"
++
++# Check for readline
++READLINE_DEFS="#undef LUA_USE_READLINE"
++if test "x$use_readline" == "xyes"; then
++  AC_CHECK_LIB([readline], [readline], [:], [use_readline=no], [-lncurses])
++  AC_CHECK_HEADERS([readline/readline.h readline/history.h], [], [use_readline=no])
++  if test "x$use_readline" == "xno"; then
++    AC_MSG_WARN([readline headers could not be found, disabling readline support])
++  else
++    READLINE_DEFS="#define LUA_USE_READLINE"
++    READLINE_LIBS="-lreadline -lncurses"
++  fi
++fi
++AC_SUBST(READLINE_DEFS)
++AC_SUBST(READLINE_LIBS)
++
++case "$host" in
++  *-mingw*)  use_os=win32  ;;
++  *-darwin*) use_os=macosx ;;
++  *)         use_os=posix  ;;
++esac
++
++POSIX_DEFS="#undef LUA_USE_POSIX"
++LUA_DL_DEFS="#undef LUA_USE_DLOPEN"
++LUA_BUILD_AS_DLL_DEFS="#undef LUA_BUILD_AS_DLL"
++
++if test "x$use_os" == "xwin32"; then
++  LUA_BUILD_AS_DLL_DEFS="#define LUA_BUILD_AS_DLL"
++elif test "x$use_os" == "xmacosx"; then
++  POSIX_DEFS="#define LUA_USE_POSIX"
++  LUA_DL_DEFS="#define LUA_DL_DYLD"
++elif test "x$use_os" == "xposix"; then
++  POSIX_DEFS="#define LUA_USE_POSIX"
++  LUA_DL_DEFS="#define LUA_DL_DLOPEN"
++  LUA_LIBS="$LUA_LIBS -ldl"
++fi
++AC_SUBST(POSIX_DEFS)
++AC_SUBST(LUA_DL_DEFS)
++AC_SUBST(LUA_BUILD_AS_DLL_DEFS)
++
++AC_SUBST(LUA_LIBS)
++
++AC_CONFIG_FILES([Makefile
++                 src/Makefile
++                 src/lua.pc
++                 src/luaconf.h.template
++                 doc/Makefile
++])
++AC_OUTPUT
+diff -up lua-5.3.0/doc/Makefile.am.autoxxx lua-5.3.0/doc/Makefile.am
+--- lua-5.3.0/doc/Makefile.am.autoxxx  2015-01-15 10:20:03.826889574 -0500
++++ lua-5.3.0/doc/Makefile.am  2015-01-15 10:20:03.826889574 -0500
+@@ -0,0 +1,4 @@
++man1_MANS = lua.1 luac.1
++
++EXTRA_DIST = \
++      contents.html logo.gif lua.1 luac.1 lua.css manual.css manual.html osi-certified-72x60.png readme.html
+diff -up lua-5.3.0/Makefile.am.autoxxx lua-5.3.0/Makefile.am
+--- lua-5.3.0/Makefile.am.autoxxx      2015-01-15 10:20:03.826889574 -0500
++++ lua-5.3.0/Makefile.am      2015-01-15 10:20:03.826889574 -0500
+@@ -0,0 +1,3 @@
++SUBDIRS = src doc
++
++EXTRA_DIST = README
+diff -up lua-5.3.0/src/.gitignore.autoxxx lua-5.3.0/src/.gitignore
+--- lua-5.3.0/src/.gitignore.autoxxx   2015-01-15 10:20:03.826889574 -0500
++++ lua-5.3.0/src/.gitignore   2015-01-15 10:20:03.826889574 -0500
+@@ -0,0 +1,5 @@
++lua
++lua.pc
++luac
++luaconf.h
++luaconf.h.template
+diff -up lua-5.3.0/src/luaconf.h.template.in.autoxxx lua-5.3.0/src/luaconf.h.template.in
+--- lua-5.3.0/src/luaconf.h.template.in.autoxxx        2015-01-15 10:20:03.828889562 -0500
++++ lua-5.3.0/src/luaconf.h.template.in        2015-01-15 10:22:37.420027778 -0500
+@@ -11,6 +11,11 @@
+ #include <limits.h>
+ #include <stddef.h>
++@POSIX_DEFS@
++@LUA_DL_DEFS@
++@LUA_BUILD_AS_DLL_DEFS@
++@READLINE_DEFS@
++
+ /*
+ ** ===================================================================
+@@ -175,9 +180,9 @@
+ #else                 /* }{ */
+-#define LUA_ROOT      "/usr/local/"
+-#define LUA_LDIR      LUA_ROOT "share/lua/" LUA_VDIR "/"
+-#define LUA_CDIR      LUA_ROOT "lib/lua/" LUA_VDIR "/"
++#define LUA_ROOT      "@prefix@/"
++#define LUA_LDIR      "@pkgdatadir@/lua/" LUA_VDIR "/"
++#define LUA_CDIR      "@libdir@/lua/" LUA_VDIR "/"
+ #define LUA_PATH_DEFAULT  \
+               LUA_LDIR"?.lua;"  LUA_LDIR"?/init.lua;" \
+               LUA_CDIR"?.lua;"  LUA_CDIR"?/init.lua;" \
+diff -up lua-5.3.0/src/lua.pc.in.autoxxx lua-5.3.0/src/lua.pc.in
+--- lua-5.3.0/src/lua.pc.in.autoxxx    2015-01-15 10:20:03.827889568 -0500
++++ lua-5.3.0/src/lua.pc.in    2015-01-15 10:20:03.827889568 -0500
+@@ -0,0 +1,13 @@
++V= @MAJOR_VERSION@
++R= @VERSION@
++prefix= @prefix@
++exec_prefix=${prefix}
++libdir= @libdir@
++includedir=${prefix}/include
++
++Name: Lua
++Description: An Extensible Extension Language
++Version: ${R}
++Requires:
++Libs: -llua @LUA_LIBS@
++Cflags: -I${includedir}
+diff -up lua-5.3.0/src/Makefile.am.autoxxx lua-5.3.0/src/Makefile.am
+--- lua-5.3.0/src/Makefile.am.autoxxx  2015-01-15 10:20:03.826889574 -0500
++++ lua-5.3.0/src/Makefile.am  2015-01-15 10:20:03.826889574 -0500
+@@ -0,0 +1,46 @@
++AM_CFLAGS = -Wall
++
++include_HEADERS = lua.h lualib.h lauxlib.h lua.hpp
++
++nodist_include_HEADERS = luaconf.h
++
++lib_LTLIBRARIES = liblua.la
++liblua_la_LDFLAGS = -release @MAJOR_VERSION@
++liblua_la_SOURCES = \
++      lapi.c lauxlib.c lbaselib.c lbitlib.c lcode.c lcorolib.c lctype.c ldblib.c \
++      ldebug.c ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c llex.c lmathlib.c lmem.c \
++      loadlib.c lobject.c lopcodes.c loslib.c lparser.c lstate.c lstring.c lstrlib.c \
++      ltable.c ltablib.c ltm.c lundump.c lutf8lib.c lvm.c lzio.c \
++      lapi.h lcode.h lctype.h ldebug.h ldo.h lfunc.h lgc.h llex.h llimits.h \
++      lmem.h lobject.h lopcodes.h lparser.h lstate.h lstring.h ltable.h ltm.h \
++      lundump.h lvm.h lzio.h
++
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = lua.pc
++
++bin_PROGRAMS = lua luac
++
++lua_SOURCES = lua.c
++lua_LDADD = liblua.la @LUA_LIBS@ @READLINE_LIBS@
++lua_DEPENDENCIES = liblua.la
++
++luac_SOURCES = luac.c
++# Statically link liblua against luac since luac uses symbols not exported in liblua
++luac_LDADD = .libs/liblua.a @LUA_LIBS@
++luac_DEPENDENCIES = liblua.la
++
++EXTRA_DIST = luaconf.h.template
++BUILT_SOURCES = luaconf.h
++CLEANFILES = luaconf.h luaconf.h.template
++
++readline_defs = @READLINE_DEFS@
++
++edit =        sed \
++        -e 's,%prefix%,$(prefix),g' \
++        -e 's,%lua_datadir%,$(datadir),g' \
++        -e 's,%lua_libdir%,$(libdir),g'
++
++luaconf.h : luaconf.h.template
++      rm -f $@ $@.tmp
++      $(edit) $< >$@.tmp
++      mv $@.tmp $@
diff --git a/src/patches/ntp-fix-sycing-with-local-clock.patch b/src/patches/ntp-fix-sycing-with-local-clock.patch
deleted file mode 100644 (file)
index bdca2e7..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# http://bugs.ntp.org/show_bug.cgi?id=2965
-
-From 6f68f1f0fd764f0006506e3957a5b8116726d443 Mon Sep 17 00:00:00 2001
-From:  <burnicki/martin@pc-martin4.>
-Date: Mon, 16 Nov 2015 11:59:55 +0100
-Subject: [PATCH] [Bug 2965] Local clock didn't work since 4.2.8p4
-
----
- ntpd/refclock_local.c | 1 +
- 1 files changed, 1 insertions(+)
-
-diff --git a/ntpd/refclock_local.c b/ntpd/refclock_local.c
-index d816c55..8c0f74f 100644
---- a/ntpd/refclock_local.c
-+++ b/ntpd/refclock_local.c
-@@ -205,6 +205,7 @@ local_poll(
-       pp->disp = 0;
-       pp->jitter = 0;
- #else /* KERNEL_PLL LOCKCLOCK */
-+      pp->leap = LEAP_NOWARNING;
-       pp->disp = DISPERSION;
-       pp->jitter = 0;
- #endif /* KERNEL_PLL LOCKCLOCK */
index e297c50cef72a6ef3b579e01294d1fe28d0317b4..a42e3fa0e5a28a934bf235dbcc4f079bc589098b 100644 (file)
@@ -70,19 +70,19 @@ configure_target() {
        case "${target_arch}" in
                x86_64)
                        BUILDTARGET="${target_arch}-unknown-linux-gnu"
-                       CROSSTARGET="${BUILD_ARCH}-cross-linux-gnu"
+                       CROSSTARGET="${target_arch}-cross-linux-gnu"
                        CFLAGS_ARCH="-m64 -mtune=generic"
                        ;;
 
                i586)
                        BUILDTARGET="${target_arch}-pc-linux-gnu"
-                       CROSSTARGET="${BUILD_ARCH}-cross-linux-gnu"
+                       CROSSTARGET="${target_arch}-cross-linux-gnu"
                        CFLAGS_ARCH="-march=i586 -mtune=generic -fomit-frame-pointer"
                        ;;
 
                armv5tel)
                        BUILDTARGET="${target_arch}-unknown-linux-gnueabi"
-                       CROSSTARGET="${BUILD_ARCH}-cross-linux-gnueabi"
+                       CROSSTARGET="${target_arch}-cross-linux-gnueabi"
                        CFLAGS_ARCH="-march=armv5te -mfloat-abi=soft -fomit-frame-pointer"
                        MACHINE_TYPE="arm"
                        ;;
@@ -109,7 +109,7 @@ configure_target() {
        MACHINE="${TARGET_ARCH}"
 
        CFLAGS="-O2 -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fPIC"
-       CFLAGS="${CFLAGS} -fstack-protector-all --param=ssp-buffer-size=4 ${CFLAGS_ARCH}"
+       CFLAGS="${CFLAGS} -fstack-protector-strong --param=ssp-buffer-size=4 ${CFLAGS_ARCH}"
        CXXFLAGS="${CFLAGS}"
 }