From c18caf6dbf178664c7b31174e08f2366be40e13b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=BCrgen=20Buchm=C3=BCller?= <pullmoll@t-online.de>
Date: Fri, 23 Sep 2016 17:16:17 +0200
Subject: [PATCH] gcc: update to 6.2.1

---
 common/shlibs                                      |  14 +-
 srcpkgs/base-chroot-musl/template                  |   2 +-
 srcpkgs/base-chroot/template                       |   2 +-
 srcpkgs/base-devel/template                        |   2 +-
 srcpkgs/chromium/template                          |   3 +-
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-aarch64-linux-gnu/template           | 142 ++--
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-4.9.2-musl.diff                      |   1 -
 .../files/gcc-6.2.1-musl.diff                      |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-aarch64-linux-musl/template          |  89 ++-
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-arm-linux-gnueabi/template           | 147 +++--
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-arm-linux-gnueabihf/template         | 149 +++--
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-4.9.2-musl.diff                      |   1 -
 .../files/gcc-6.2.1-musl.diff                      |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-arm-linux-musleabi/template          |  95 ++-
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-4.9.2-musl.diff                      |   1 -
 .../files/gcc-6.2.1-musl.diff                      |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-arm-linux-musleabihf/template        |  94 ++-
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-armv7l-linux-gnueabihf/template      | 150 +++--
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-4.9.2-musl.diff                      |   1 -
 .../files/gcc-6.2.1-musl.diff                      |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-armv7l-linux-musleabihf/template     |  95 ++-
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-4.9.2-musl.diff                      |   1 -
 .../files/gcc-6.2.1-musl.diff                      |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-i686-linux-musl/template             |  88 ++-
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-i686-pc-linux-gnu/template           | 132 ++--
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-4.9.2-musl.diff                      |   1 -
 .../files/gcc-6.2.1-musl.diff                      |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-mips-linux-musl/template             |  91 ++-
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-4.9.2-musl.diff                      |   1 -
 .../files/gcc-6.2.1-musl.diff                      |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-mipsel-linux-musl/template           |  91 ++-
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-4.9.2-musl.diff                      |   1 -
 .../files/gcc-6.2.1-musl.diff                      |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-mipsel-linux-muslhf/template         |  91 ++-
 srcpkgs/cross-vpkg-dummy/template                  |   4 +-
 .../files/fix-cxxflags-passing.patch               |   1 +
 .../files/gcc-4.9.2-musl.diff                      |   1 -
 .../files/gcc-6.2.1-musl.diff                      |   1 +
 .../files/gcc-spec-env-r1.patch                    |   1 -
 srcpkgs/cross-x86_64-linux-musl/template           |  91 ++-
 srcpkgs/efivar/template                            |   3 +-
 srcpkgs/gcc-c++                                    |   1 -
 .../gcc-multilib/patches/fix-libiberty_pic.patch   |   8 +-
 srcpkgs/gcc-multilib/template                      |  17 +-
 srcpkgs/gcc/files/gcc-4.9.2-musl.diff              | 730 ---------------------
 srcpkgs/gcc/files/gcc-6.2.1-musl.diff              | 556 ++++++++++++++++
 srcpkgs/gcc/patches/fix-cxxflags-passing.patch     |  10 +
 srcpkgs/gcc/patches/fix-musl-execinfo.patch        |  33 +
 srcpkgs/gcc/patches/gcc-spec-env-r1.patch          |  87 ---
 srcpkgs/gcc/patches/libcpp-source_date_epoch.patch |   2 +-
 srcpkgs/gcc/patches/musl-posix_memalign-c++.patch  |  30 -
 srcpkgs/gcc/template                               | 147 +++--
 srcpkgs/isl15-devel                                |   1 +
 srcpkgs/isl15/template                             |  31 +
 srcpkgs/kernel-libc-headers/template               |   4 +-
 srcpkgs/libmpx                                     |   1 +
 srcpkgs/libmpx-devel                               |   1 +
 srcpkgs/rr/template                                |   2 +-
 srcpkgs/virtualbox-ose/template                    |   3 +-
 xbps-src                                           |   6 +-
 86 files changed, 1850 insertions(+), 1441 deletions(-)
 create mode 120000 srcpkgs/cross-aarch64-linux-gnu/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-aarch64-linux-gnu/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-aarch64-linux-musl/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-aarch64-linux-musl/files/gcc-4.9.2-musl.diff
 create mode 120000 srcpkgs/cross-aarch64-linux-musl/files/gcc-6.2.1-musl.diff
 delete mode 120000 srcpkgs/cross-aarch64-linux-musl/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-arm-linux-gnueabi/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-arm-linux-gnueabi/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-arm-linux-gnueabihf/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-arm-linux-gnueabihf/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-arm-linux-musleabi/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-arm-linux-musleabi/files/gcc-4.9.2-musl.diff
 create mode 120000 srcpkgs/cross-arm-linux-musleabi/files/gcc-6.2.1-musl.diff
 delete mode 120000 srcpkgs/cross-arm-linux-musleabi/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-arm-linux-musleabihf/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-arm-linux-musleabihf/files/gcc-4.9.2-musl.diff
 create mode 120000 srcpkgs/cross-arm-linux-musleabihf/files/gcc-6.2.1-musl.diff
 delete mode 120000 srcpkgs/cross-arm-linux-musleabihf/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-armv7l-linux-gnueabihf/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-armv7l-linux-gnueabihf/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-armv7l-linux-musleabihf/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-4.9.2-musl.diff
 create mode 120000 srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-6.2.1-musl.diff
 delete mode 120000 srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-i686-linux-musl/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-i686-linux-musl/files/gcc-4.9.2-musl.diff
 create mode 120000 srcpkgs/cross-i686-linux-musl/files/gcc-6.2.1-musl.diff
 delete mode 120000 srcpkgs/cross-i686-linux-musl/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-i686-pc-linux-gnu/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-i686-pc-linux-gnu/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-mips-linux-musl/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-mips-linux-musl/files/gcc-4.9.2-musl.diff
 create mode 120000 srcpkgs/cross-mips-linux-musl/files/gcc-6.2.1-musl.diff
 delete mode 120000 srcpkgs/cross-mips-linux-musl/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-mipsel-linux-musl/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-mipsel-linux-musl/files/gcc-4.9.2-musl.diff
 create mode 120000 srcpkgs/cross-mipsel-linux-musl/files/gcc-6.2.1-musl.diff
 delete mode 120000 srcpkgs/cross-mipsel-linux-musl/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-mipsel-linux-muslhf/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-mipsel-linux-muslhf/files/gcc-4.9.2-musl.diff
 create mode 120000 srcpkgs/cross-mipsel-linux-muslhf/files/gcc-6.2.1-musl.diff
 delete mode 120000 srcpkgs/cross-mipsel-linux-muslhf/files/gcc-spec-env-r1.patch
 create mode 120000 srcpkgs/cross-x86_64-linux-musl/files/fix-cxxflags-passing.patch
 delete mode 120000 srcpkgs/cross-x86_64-linux-musl/files/gcc-4.9.2-musl.diff
 create mode 120000 srcpkgs/cross-x86_64-linux-musl/files/gcc-6.2.1-musl.diff
 delete mode 120000 srcpkgs/cross-x86_64-linux-musl/files/gcc-spec-env-r1.patch
 delete mode 120000 srcpkgs/gcc-c++
 delete mode 100644 srcpkgs/gcc/files/gcc-4.9.2-musl.diff
 create mode 100644 srcpkgs/gcc/files/gcc-6.2.1-musl.diff
 create mode 100644 srcpkgs/gcc/patches/fix-cxxflags-passing.patch
 create mode 100644 srcpkgs/gcc/patches/fix-musl-execinfo.patch
 delete mode 100644 srcpkgs/gcc/patches/gcc-spec-env-r1.patch
 delete mode 100644 srcpkgs/gcc/patches/musl-posix_memalign-c++.patch
 create mode 120000 srcpkgs/isl15-devel
 create mode 100644 srcpkgs/isl15/template
 create mode 120000 srcpkgs/libmpx
 create mode 120000 srcpkgs/libmpx-devel

diff --git a/common/shlibs b/common/shlibs
index e43ee26..0b559c6 100644
--- a/common/shlibs
+++ b/common/shlibs
@@ -50,13 +50,18 @@ libmvec.so.1 glibc-2.22_1
 libz.so.1 zlib-1.2.3_1
 libbz2.so.1 bzip2-1.0.5_1
 libarchive.so.13 libarchive-3.1.2_1
+libcc1.so.0 gcc-6.2.1_1
+libcc1plugin.so.0 gcc-6.2.1_1
 libitm.so.1 libitm-4.7.3_1
 libgcj_bc.so.1 libgcj-4.7.3_1
 liblto_plugin.so.0 gcc-4.7.3_1
 libgcc_s.so.1 libgcc-4.4.0_1
-libgcj.so.15 libgcj-4.9.0_1
-libgcj-tools.so.15 libgcj-4.9.0_1
-libgij.so.15 libgcj-4.9.0_1
+libgcj.so.17 libgcj-6.2.0_1
+libgcj-tools.so.17 libgcj-6.2.1_1
+libgij.so.17 libgcj-6.2.1_1
+libgo.so.9 libgo-6.2.1_1
+libmpx.so.2 libmpx-6.2.1_1
+libmpxwrappers.so.2 libmpx-6.2.1_1
 libperl.so.5.24 perl-5.24.0_1
 libmp.so.3 gmp-5.0.1_1
 libgmp.so.10 gmp-5.0.1_1
@@ -1048,6 +1053,7 @@ libsratom-0.so.0 sratom-0.4.0_1
 libmongoose.so.0 libmongoose-3.1_1
 libpwquality.so.1 libpwquality-1.1.1_1
 libisl.so.10 isl-0.10_1
+libisl.so.15 isl15-0.16.1_1
 libcloog-isl.so.4 cloog-0.18.1_1
 librtmp.so.0 librtmp-2.4_1
 libORBit-2.so.0 libORBit2-2.14.19_1
@@ -1652,7 +1658,7 @@ libextractor_common.so.1 libextractor-1.1_1
 libpano13.so.3 libpano13-2.9.19_1
 libubsan.so.0 libsanitizer-4.9.0_1
 libtsan.so.0 libsanitizer-4.9.0_1
-libasan.so.1 libsanitizer-4.9.0_1
+libasan.so.3 libsanitizer-6.2.0_1
 liblsan.so.0 libsanitizer-4.9.0_1
 libcilkrts.so.5 libcilkrts-4.9.0_1
 libvtv.so.0 libvtv-4.9.0_1
diff --git a/srcpkgs/base-chroot-musl/template b/srcpkgs/base-chroot-musl/template
index 3271bb6..9aaa2ff 100644
--- a/srcpkgs/base-chroot-musl/template
+++ b/srcpkgs/base-chroot-musl/template
@@ -16,7 +16,7 @@ only_for_archs="i686-musl x86_64-musl armv6l-musl armv7l-musl aarch64-musl mips-
 
 depends="
  base-files musl-devel musl-legacy-compat
- gcc gcc-c++ patch chroot-bash chroot-grep coreutils findutils
+ gcc patch chroot-bash chroot-grep coreutils findutils
  gettext chroot-texinfo sed chroot-gawk diffutils
  make gzip file tar chroot-util-linux chroot-distcc
  chroot-git ccache xbps xz which"
diff --git a/srcpkgs/base-chroot/template b/srcpkgs/base-chroot/template
index 074fd21..9c9d09e 100644
--- a/srcpkgs/base-chroot/template
+++ b/srcpkgs/base-chroot/template
@@ -12,6 +12,6 @@ license="Public domain"
 
 depends="
  base-files>=0.127 kernel-libc-headers glibc-devel glibc-locales binutils gcc
- gcc-c++ patch chroot-bash chroot-grep coreutils gettext
+ patch chroot-bash chroot-grep coreutils gettext
  chroot-texinfo sed chroot-gawk findutils diffutils make gzip file tar
  chroot-util-linux chroot-distcc chroot-git ccache xbps xz which"
diff --git a/srcpkgs/base-devel/template b/srcpkgs/base-devel/template
index 1fcdf72..d828744 100644
--- a/srcpkgs/base-devel/template
+++ b/srcpkgs/base-devel/template
@@ -4,7 +4,7 @@ version=20150820
 revision=2
 build_style=meta
 noarch=yes
-depends="autoconf automake bc binutils bison ed flex gcc gcc-c++ gettext
+depends="autoconf automake bc binutils bison ed flex gcc gettext
  groff libtool m4 make patch pkg-config texinfo unzip xz"
 case "$XBPS_TARGET_MACHINE" in
 	*-musl) depends+=" musl";;
diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index 0b49bbc..0a90c97 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -30,7 +30,8 @@ depends="libexif hwids desktop-file-utils hicolor-icon-theme"
 nostrip_files="nacl_irt_x86_64.nexe nacl_irt_x86_32.nexe"
 
 if [ -z "$CROSS_BUILD" -a "$XBPS_MACHINE" = "x86_64" ]; then
-	hostmakedepends+=" gcc-c++-multilib"
+	# Is this required?
+	hostmakedepends+=" gcc-multilib"
 fi
 
 post_extract() {
diff --git a/srcpkgs/cross-aarch64-linux-gnu/files/fix-cxxflags-passing.patch b/srcpkgs/cross-aarch64-linux-gnu/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-aarch64-linux-gnu/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-aarch64-linux-gnu/files/gcc-spec-env-r1.patch b/srcpkgs/cross-aarch64-linux-gnu/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-aarch64-linux-gnu/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-aarch64-linux-gnu/template b/srcpkgs/cross-aarch64-linux-gnu/template
index fecccec..5979ee9 100644
--- a/srcpkgs/cross-aarch64-linux-gnu/template
+++ b/srcpkgs/cross-aarch64-linux-gnu/template
@@ -1,31 +1,31 @@
 # Template build file for 'cross-aarch64-linux-gnu'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _glibc_version=2.24
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=aarch64-linux-gnu
 _archflags="-march=armv8-a"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=6
+version=0.22
+revision=1
 short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
 maintainer="Christian Neukirchen <chneukirchen@gmail.com>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, LGPL-2.1"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
- ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
  ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
- ${KERNEL_SITE}/kernel/v3.x/linux-${_linux_version}.tar.xz"
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
  99d4a3e8efd144d71488e478f62587578c0f4e1fa0b4eed47ee3d4975ebeb5d3
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92"
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af"
 
 lib32disabled=yes
 nocross=yes
@@ -61,6 +61,8 @@ _linux_headers() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -68,10 +70,15 @@ _binutils_build() {
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} \
-		--with-sysroot=${_sysroot} --disable-nls --disable-shared \
-		--disable-multilib --disable-werror --enable-gold
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-shared"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --enable-gold"
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host && make ${makejobs}
 	make install
@@ -80,25 +87,40 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
-	../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --without-headers \
-		--disable-nls --disable-shared --disable-libquadmath \
-		--disable-decimal-float --disable-libgomp --disable-libmudflap \
-		--disable-libssp --disable-libitm --disable-libatomic \
-		--disable-threads --enable-languages=c \
-		--disable-sjlj-exceptions --disable-multilib \
-		--with-gnu-ld --with-gnu-as
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --without-headers"
+	_args+=" --disable-nls"
+	_args+=" --disable-shared"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libssp"
+	_args+=" --disable-libitm"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-threads"
+	_args+=" --enable-languages=c"
+	_args+=" --disable-sjlj-exceptions"
+	_args+=" --disable-multilib"
+	_args+=" --with-gnu-ld"
+	_args+=" --with-gnu-as"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -107,6 +129,8 @@ _gcc_bootstrap() {
 }
 
 _glibc_headers() {
+	local _args
+
 	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
 
 	cd ${wrksrc}
@@ -122,12 +146,14 @@ _glibc_headers() {
 		AS="${_triplet}-as" CPP="${_triplet}-cpp" \
 		NM="${_triplet}-nm"
 
-	../glibc-${_glibc_version}/configure \
-		--host=${_triplet} --prefix=/usr \
-		--with-headers=${_sysroot}/usr/include \
-		--config-cache \
-		--enable-obsolete-rpc \
-		--enable-kernel=2.6.27
+	_args="--prefix=/usr"
+	_args+=" --host=${_triplet}"
+	_args+=" --with-headers=${_sysroot}/usr/include"
+	_args+=" --config-cache"
+	_args+=" --enable-obsolete-rpc"
+	_args+=" --enable-kernel=2.6.27"
+
+	../glibc-${_glibc_version}/configure ${_args}
 
 	make -k install-headers cross_compiling=yes \
 		install_root=${_sysroot}
@@ -136,6 +162,8 @@ _glibc_headers() {
 }
 
 _glibc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.glibc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -152,12 +180,16 @@ _glibc_build() {
 		NM="${_triplet}-nm"
 	export CFLAGS="-Os -pipe -Wno-error ${_archflags}"
 
-	../glibc-${_glibc_version}/configure \
-		--host=${_triplet} --prefix=/usr --libdir=/usr/lib \
-		--with-headers=${_sysroot}/usr/include \
-		--config-cache \
-		--enable-obsolete-rpc --disable-profile \
-		--enable-kernel=2.6.27
+	_args="--prefix=/usr"
+	_args+=" --libdir=/usr/lib"
+	_args+=" --host=${_triplet}"
+	_args+=" --with-headers=${_sysroot}/usr/include"
+	_args+=" --config-cache"
+	_args+=" --enable-obsolete-rpc"
+	_args+=" --disable-profile"
+	_args+=" --enable-kernel=2.6.27"
+
+	../glibc-${_glibc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install_root=${_sysroot} install
@@ -166,6 +198,8 @@ _glibc_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -186,19 +220,35 @@ _gcc_build() {
 		touch .sed_subst_done
 	fi
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --prefix=/usr --libdir=/usr/lib \
-		--with-sysroot=${_sysroot} --enable-languages=c,c++,lto \
-		--with-gnu-as --with-gnu-ld --disable-multilib \
-		--disable-nls --disable-sjlj-exceptions \
-		--enable-threads=posix --enable-long-longx \
-		--enable-shared --enable-linker-build-id \
-		--enable-gnu-unique-object --enable-lto \
-		--disable-libquadmath --disable-libatomic \
-		--disable-libssp --disable-libmudflap \
-		--disable-libsanitizer --disable-libcilkrts \
-		--disable-libitm --disable-libvtv --disable-libstdcxx-pch \
-		--enable-libstdcxx-time --with-linker-hash-style=gnu
+	_args="--prefix=/usr"
+	_args+=" --libdir=/usr/lib"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --with-gnu-as"
+	_args+=" --with-gnu-ld"
+	_args+=" --disable-multilib"
+	_args+=" --disable-nls"
+	_args+=" --disable-sjlj-exceptions"
+	_args+=" --enable-threads=posix"
+	_args+=" --enable-long-longx"
+	_args+=" --enable-shared"
+	_args+=" --enable-linker-build-id"
+	_args+=" --enable-gnu-unique-object"
+	_args+=" --enable-lto"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-libssp"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-libcilkrts"
+	_args+=" --disable-libitm"
+	_args+=" --disable-libvtv"
+	_args+=" --disable-libstdcxx-pch"
+	_args+=" --enable-libstdcxx-time"
+	_args+=" --with-linker-hash-style=gnu"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-aarch64-linux-musl/files/fix-cxxflags-passing.patch b/srcpkgs/cross-aarch64-linux-musl/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-aarch64-linux-musl/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-aarch64-linux-musl/files/gcc-4.9.2-musl.diff b/srcpkgs/cross-aarch64-linux-musl/files/gcc-4.9.2-musl.diff
deleted file mode 120000
index 3d53eb4..0000000
--- a/srcpkgs/cross-aarch64-linux-musl/files/gcc-4.9.2-musl.diff
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/files/gcc-4.9.2-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-aarch64-linux-musl/files/gcc-6.2.1-musl.diff b/srcpkgs/cross-aarch64-linux-musl/files/gcc-6.2.1-musl.diff
new file mode 120000
index 0000000..9081d12
--- /dev/null
+++ b/srcpkgs/cross-aarch64-linux-musl/files/gcc-6.2.1-musl.diff
@@ -0,0 +1 @@
+../../gcc/files/gcc-6.2.1-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-aarch64-linux-musl/files/gcc-spec-env-r1.patch b/srcpkgs/cross-aarch64-linux-musl/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-aarch64-linux-musl/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-aarch64-linux-musl/template b/srcpkgs/cross-aarch64-linux-musl/template
index 96b7746..4463a29 100644
--- a/srcpkgs/cross-aarch64-linux-musl/template
+++ b/srcpkgs/cross-aarch64-linux-musl/template
@@ -1,30 +1,30 @@
 # Template build file for 'cross-aarch64-linux-musl'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _musl_version=1.1.15
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=aarch64-linux-musl
 _archflags="-march=armv8-a"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=7
+version=0.22
+revision=1
 short_desc="Cross toolchain for ARM64 LE target (musl)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, MIT"
 distfiles="
- http://ftp.gnu.org/pub/gnu/binutils/binutils-${_binutils_version}.tar.bz2
- http://ftp.gnu.org/pub/gnu/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
- http://www.kernel.org/pub/linux/kernel/v3.x/linux-${_linux_version}.tar.xz
+ ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz
  http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af
  97e447c7ee2a7f613186ec54a93054fe15469fe34d7d323080f7ef38f5ecb0fa"
 
 lib32disabled=yes
@@ -49,6 +49,8 @@ _apply_patch() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -56,11 +58,15 @@ _binutils_build() {
 
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-shared"
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} --with-sysroot=${_sysroot} \
-		--disable-nls --disable-multilib --disable-werror \
-		--disable-shared
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host && make ${makejobs}
 	make install
@@ -69,25 +75,39 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
-	_apply_patch -p1 ${FILESDIR}/gcc-4.9.2-musl.diff
+	_apply_patch -p1 ${FILESDIR}/gcc-6.2.1-musl.diff
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --with-newlib"
+	_args+=" --enable-languages=c"
+	_args+=" --with-newlib"
+	_args+=" --disable-libssp"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-threads"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-shared"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --with-sysroot=${_sysroot} --with-newlib \
-		--enable-languages=c --with-newlib --disable-libssp --disable-nls \
-		--disable-libquadmath --disable-threads --disable-decimal-float \
-		--disable-shared --disable-libmudflap --disable-libgomp \
-		--disable-libatomic --disable-symvers libat_cv_have_ifunc=no
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -118,7 +138,7 @@ _musl_build() {
 	CC="${_triplet}-gcc" LD="${_triplet}-ld" AR="${_triplet}-ar" \
 		AS="${_triplet}-as" RANLIB="${_triplet}-ranlib" \
 		CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr \
+		./configure --prefix=/usr
 
 	make ${makejobs}
 	make DESTDIR=${_sysroot} install
@@ -127,6 +147,8 @@ _musl_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -135,13 +157,22 @@ _gcc_build() {
 	[ ! -d gcc-build ] && mkdir gcc-build
 	cd gcc-build
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --with-sysroot=${_sysroot} --prefix=/usr \
-		--libexecdir=/usr/lib --enable-languages=c,c++,lto \
-		--enable-lto --disable-libsanitizer \
-		--disable-multilib --disable-nls --disable-libquadmath \
-		--disable-libmudflap --enable-shared \
-		--disable-symvers libat_cv_have_ifunc=no
+	_args="--prefix=/usr"
+	_args+=" --libexecdir=/usr/lib"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --enable-lto"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-multilib"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libmudflap"
+	_args+=" --enable-shared"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-arm-linux-gnueabi/files/fix-cxxflags-passing.patch b/srcpkgs/cross-arm-linux-gnueabi/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-arm-linux-gnueabi/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-gnueabi/files/gcc-spec-env-r1.patch b/srcpkgs/cross-arm-linux-gnueabi/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-arm-linux-gnueabi/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-gnueabi/template b/srcpkgs/cross-arm-linux-gnueabi/template
index af76069..a51d7ea 100644
--- a/srcpkgs/cross-arm-linux-gnueabi/template
+++ b/srcpkgs/cross-arm-linux-gnueabi/template
@@ -1,9 +1,9 @@
 # Template build file for 'cross-arm-linux-gnueabi'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _glibc_version=2.24
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=arm-linux-gnueabi
 _fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
@@ -11,22 +11,22 @@ _archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=4
+version=0.22
+revision=1
 short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, LGPL-2.1"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
- ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
  ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
- ${KERNEL_SITE}/kernel/v3.x/linux-${_linux_version}.tar.xz"
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
  99d4a3e8efd144d71488e478f62587578c0f4e1fa0b4eed47ee3d4975ebeb5d3
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92"
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af"
 
 lib32disabled=yes
 nocross=yes
@@ -64,17 +64,23 @@ _linux_headers() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
 	msg_normal "Building cross binutils\n"
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-shared"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} \
-		--with-sysroot=${_sysroot} --disable-nls --disable-shared \
-		--disable-multilib --disable-werror
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host
 	make ${makejobs}
@@ -84,26 +90,42 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --without-headers"
+	_args+=" --disable-nls"
+	_args+=" --disable-shared"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libssp"
+	_args+=" --disable-libitm"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-threads"
+	_args+=" --enable-languages=c"
+	_args+=" --disable-sjlj-exceptions"
+	_args+=" --disable-multilib"
+	_args+=" --with-gnu-ld"
+	_args+=" --with-gnu-as"
+	_args+=" ${_fpuflags}"
+
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --without-headers \
-		--disable-nls --disable-shared --disable-libquadmath \
-		--disable-decimal-float --disable-libgomp --disable-libmudflap \
-		--disable-libssp --disable-libitm --disable-libatomic \
-		--disable-threads --enable-languages=c \
-		--disable-sjlj-exceptions --disable-multilib \
-		--with-gnu-ld --with-gnu-as ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -112,6 +134,8 @@ _gcc_bootstrap() {
 }
 
 _glibc_headers() {
+	local _args
+
 	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
 
 	cd ${wrksrc}
@@ -126,11 +150,15 @@ _glibc_headers() {
 	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
 		AS="${_triplet}-as" CPP="${_triplet}-cpp"
 
-	../glibc-${_glibc_version}/configure \
-		--host=${_triplet} --prefix=/usr \
-		--with-headers=${_sysroot}/usr/include \
-		--config-cache --enable-obsolete-rpc \
-		--enable-kernel=2.6.27 ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --host=${_triplet}"
+	_args+=" --with-headers=${_sysroot}/usr/include"
+	_args+=" --config-cache"
+	_args+=" --enable-obsolete-rpc"
+	_args+=" --enable-kernel=2.6.27"
+	_args+=" ${_fpuflags}"
+
+	../glibc-${_glibc_version}/configure ${_args}
 
 	make -k install-headers cross_compiling=yes \
 		install_root=${_sysroot}
@@ -139,6 +167,8 @@ _glibc_headers() {
 }
 
 _glibc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.glibc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -154,11 +184,17 @@ _glibc_build() {
 		AS="${_triplet}-as" CPP="${_triplet}-cpp"
 	export CFLAGS="-Os -pipe ${_archflags}"
 
-	../glibc-${_glibc_version}/configure \
-		--host=${_triplet} --prefix=/usr \
-		--with-headers=${_sysroot}/usr/include \
-		--config-cache --disable-profile --enable-obsolete-rpc \
-		--disable-werror --enable-kernel=2.6.27 ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --host=${_triplet}"
+	_args+=" --with-headers=${_sysroot}/usr/include"
+	_args+=" --config-cache"
+	_args+=" --disable-profile"
+	_args+=" --enable-obsolete-rpc"
+	_args+=" --disable-werror"
+	_args+=" --enable-kernel=2.6.27"
+	_args+=" ${_fpuflags}"
+
+	../glibc-${_glibc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install_root=${_sysroot} install
@@ -167,6 +203,8 @@ _glibc_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -185,20 +223,39 @@ _gcc_build() {
 		touch .sed_subst_done
 	fi
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --prefix=/usr --libdir=/usr/lib \
-		--libexecdir=/usr/lib --with-sysroot=${_sysroot} \
-		--enable-languages=c,c++,lto \
-		--with-gnu-as --with-gnu-ld --disable-multilib \
-		--disable-werror --disable-nls --disable-sjlj-exceptions \
-		--enable-threads=posix --enable-long-longx \
-		--enable-shared --enable-linker-build-id \
-		--enable-gnu-unique-object --enable-lto \
-		--disable-libquadmath --disable-libatomic \
-		--disable-libssp --disable-libmudflap \
-		--disable-libsanitizer --disable-libcilkrts \
-		--disable-libitm --disable-libvtv --disable-libstdcxx-pch \
-		--enable-libstdcxx-time --with-linker-hash-style=gnu ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --libdir=/usr/lib"
+	_args+=" --libexecdir=/usr/lib"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --with-gnu-as"
+	_args+=" --with-gnu-ld"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-nls"
+	_args+=" --disable-sjlj-exceptions"
+	_args+=" --enable-threads=posix"
+	_args+=" --enable-long-longx"
+	_args+=" --enable-shared"
+	_args+=" --enable-linker-build-id"
+	_args+=" --enable-gnu-unique-object"
+	_args+=" --enable-lto"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-libssp"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-libcilkrts"
+	_args+=" --disable-libitm"
+	_args+=" --disable-libvtv"
+	_args+=" --disable-libstdcxx-pch"
+	_args+=" --enable-libstdcxx-time"
+	_args+=" --with-linker-hash-style=gnu"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-arm-linux-gnueabihf/files/fix-cxxflags-passing.patch b/srcpkgs/cross-arm-linux-gnueabihf/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-arm-linux-gnueabihf/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-gnueabihf/files/gcc-spec-env-r1.patch b/srcpkgs/cross-arm-linux-gnueabihf/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-arm-linux-gnueabihf/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-gnueabihf/template b/srcpkgs/cross-arm-linux-gnueabihf/template
index 0c4b879..8e57daa 100644
--- a/srcpkgs/cross-arm-linux-gnueabihf/template
+++ b/srcpkgs/cross-arm-linux-gnueabihf/template
@@ -1,9 +1,9 @@
 # Template build file for 'cross-arm-linux-gnueabihf'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _glibc_version=2.24
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=arm-linux-gnueabihf
 _fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
@@ -11,22 +11,22 @@ _archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=5
+version=0.22
+revision=1
 short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="Public Domain"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
- ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
  ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
- ${KERNEL_SITE}/kernel/v3.x/linux-${_linux_version}.tar.xz"
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
  99d4a3e8efd144d71488e478f62587578c0f4e1fa0b4eed47ee3d4975ebeb5d3
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92"
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af"
 
 lib32disabled=yes
 nocross=yes
@@ -64,6 +64,8 @@ _linux_headers() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -71,10 +73,15 @@ _binutils_build() {
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} \
-		--with-sysroot=${_sysroot} --disable-nls --disable-shared \
-		--disable-multilib --disable-werror
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-shared"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host
 	make ${makejobs}
@@ -84,26 +91,42 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --without-headers"
+	_args+=" --disable-nls"
+	_args+=" --disable-shared"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libssp"
+	_args+=" --disable-libitm"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-threads"
+	_args+=" --enable-languages=c"
+	_args+=" --disable-sjlj-exceptions"
+	_args+=" --disable-multilib"
+	_args+=" --with-gnu-ld"
+	_args+=" --with-gnu-as"
+	_args+=" ${_fpuflags}"
+
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --without-headers \
-		--disable-nls --disable-shared --disable-libquadmath \
-		--disable-decimal-float --disable-libgomp --disable-libmudflap \
-		--disable-libssp --disable-libitm --disable-libatomic \
-		--disable-threads --enable-languages=c \
-		--disable-sjlj-exceptions --disable-multilib \
-		--with-gnu-ld --with-gnu-as ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -112,6 +135,8 @@ _gcc_bootstrap() {
 }
 
 _glibc_headers() {
+	local _args
+
 	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
 
 	cd ${wrksrc}
@@ -126,11 +151,15 @@ _glibc_headers() {
 	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
 		AS="${_triplet}-as" CPP="${_triplet}-cpp"
 
-	../glibc-${_glibc_version}/configure \
-		--host=${_triplet} --prefix=/usr \
-		--with-headers=${_sysroot}/usr/include \
-		--config-cache --enable-obsolete-rpc \
-		--enable-kernel=2.6.27 ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --host=${_triplet}"
+	_args+=" --with-headers=${_sysroot}/usr/include"
+	_args+=" --config-cache"
+	_args+=" --enable-obsolete-rpc"
+	_args+=" --enable-kernel=2.6.27"
+	_args+=" ${_fpuflags}"
+
+	../glibc-${_glibc_version}/configure ${_args}
 
 	make -k install-headers cross_compiling=yes \
 		install_root=${_sysroot}
@@ -139,6 +168,8 @@ _glibc_headers() {
 }
 
 _glibc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.glibc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -154,11 +185,17 @@ _glibc_build() {
 		AS="${_triplet}-as" CPP="${_triplet}-cpp"
 	export CFLAGS="-Os -pipe ${_archflags}"
 
-	../glibc-${_glibc_version}/configure \
-		--host=${_triplet} --prefix=/usr \
-		--with-headers=${_sysroot}/usr/include \
-		--config-cache --disable-profile --enable-obsolete-rpc \
-		--disable-werror --enable-kernel=2.6.27 ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --host=${_triplet}"
+	_args+=" --with-headers=${_sysroot}/usr/include"
+	_args+=" --config-cache"
+	_args+=" --disable-profile"
+	_args+=" --enable-obsolete-rpc"
+	_args+=" --disable-werror"
+	_args+=" --enable-kernel=2.6.27"
+	_args+=" ${_fpuflags}"
+
+	../glibc-${_glibc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install_root=${_sysroot} install
@@ -167,6 +204,8 @@ _glibc_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -184,21 +223,39 @@ _gcc_build() {
 			-i ${_sysroot}/lib/libc.so ${_sysroot}/lib/libpthread.so
 		touch .sed_subst_done
 	fi
-
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --prefix=/usr --libdir=/usr/lib \
-		--libexecdir=/usr/lib --with-sysroot=${_sysroot} \
-		--enable-languages=c,c++,lto \
-		--with-gnu-as --with-gnu-ld --disable-multilib \
-		--disable-werror --disable-nls --disable-sjlj-exceptions \
-		--enable-threads=posix --enable-long-longx \
-		--enable-shared --enable-linker-build-id \
-		--enable-gnu-unique-object --enable-lto \
-		--disable-libquadmath --disable-libatomic \
-		--disable-libssp --disable-libmudflap \
-		--disable-libsanitizer --disable-libcilkrts \
-		--disable-libitm --disable-libvtv --disable-libstdcxx-pch \
-		--enable-libstdcxx-time --with-linker-hash-style=gnu ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --libdir=/usr/lib"
+	_args+=" --libexecdir=/usr/lib"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --with-gnu-as"
+	_args+=" --with-gnu-ld"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-nls"
+	_args+=" --disable-sjlj-exceptions"
+	_args+=" --enable-threads=posix"
+	_args+=" --enable-long-longx"
+	_args+=" --enable-shared"
+	_args+=" --enable-linker-build-id"
+	_args+=" --enable-gnu-unique-object"
+	_args+=" --enable-lto"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-libssp"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-libcilkrts"
+	_args+=" --disable-libitm"
+	_args+=" --disable-libvtv"
+	_args+=" --disable-libstdcxx-pch"
+	_args+=" --enable-libstdcxx-time"
+	_args+=" --with-linker-hash-style=gnu"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-arm-linux-musleabi/files/fix-cxxflags-passing.patch b/srcpkgs/cross-arm-linux-musleabi/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-arm-linux-musleabi/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-musleabi/files/gcc-4.9.2-musl.diff b/srcpkgs/cross-arm-linux-musleabi/files/gcc-4.9.2-musl.diff
deleted file mode 120000
index 3d53eb4..0000000
--- a/srcpkgs/cross-arm-linux-musleabi/files/gcc-4.9.2-musl.diff
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/files/gcc-4.9.2-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-musleabi/files/gcc-6.2.1-musl.diff b/srcpkgs/cross-arm-linux-musleabi/files/gcc-6.2.1-musl.diff
new file mode 120000
index 0000000..9081d12
--- /dev/null
+++ b/srcpkgs/cross-arm-linux-musleabi/files/gcc-6.2.1-musl.diff
@@ -0,0 +1 @@
+../../gcc/files/gcc-6.2.1-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-musleabi/files/gcc-spec-env-r1.patch b/srcpkgs/cross-arm-linux-musleabi/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-arm-linux-musleabi/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-musleabi/template b/srcpkgs/cross-arm-linux-musleabi/template
index 529d084..da60012 100644
--- a/srcpkgs/cross-arm-linux-musleabi/template
+++ b/srcpkgs/cross-arm-linux-musleabi/template
@@ -1,9 +1,9 @@
 # Template build file for 'cross-arm-linux-musleabi'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _musl_version=1.1.15
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=arm-linux-musleabi
 _fpuflags="--with-arch=armv5te --without-fp --with-float=soft"
@@ -11,21 +11,21 @@ _archflags="-march=armv5te -msoft-float -mfloat-abi=soft"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=5
+version=0.22
+revision=1
 short_desc="Cross toolchain for ARMv5 TE target (musl)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, MIT"
 distfiles="
- http://ftp.gnu.org/pub/gnu/binutils/binutils-${_binutils_version}.tar.bz2
- http://ftp.gnu.org/pub/gnu/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
- http://www.kernel.org/pub/linux/kernel/v3.x/linux-${_linux_version}.tar.xz
+ ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz
  http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af
  97e447c7ee2a7f613186ec54a93054fe15469fe34d7d323080f7ef38f5ecb0fa"
 
 lib32disabled=yes
@@ -49,6 +49,8 @@ _apply_patch() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -57,10 +59,16 @@ _binutils_build() {
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} --with-sysroot=${_sysroot} \
-		--disable-nls --disable-multilib --disable-werror \
-		--disable-shared ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-shared"
+	_args+=" ${_fpuflags}"
+
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host && make ${makejobs}
 	make install
@@ -69,26 +77,42 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
-	_apply_patch -p1 ${FILESDIR}/gcc-4.9.2-musl.diff
+	_apply_patch -p1 ${FILESDIR}/gcc-6.2.1-musl.diff
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --with-newlib"
+	_args+=" --enable-languages=c"
+	_args+=" --with-newlib"
+	_args+=" --disable-libssp"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-threads"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-shared"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+	_args+=" ${_fpuflags}"
+
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --with-sysroot=${_sysroot} --with-newlib \
-		--enable-languages=c --with-newlib --disable-libssp --disable-nls \
-		--disable-libquadmath --disable-threads --disable-decimal-float \
-		--disable-shared --disable-libmudflap --disable-libgomp \
-		--disable-libatomic --disable-symvers \
-		libat_cv_have_ifunc=no ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -120,7 +144,7 @@ _musl_build() {
 	msg_normal "Building cross musl libc\n"
 
 	CC="${_triplet}-gcc" CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr \
+		./configure --prefix=/usr
 
 	make ${makejobs}
 	make DESTDIR=${_sysroot} install
@@ -129,6 +153,8 @@ _musl_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -137,12 +163,23 @@ _gcc_build() {
 	[ ! -d gcc-build ] && mkdir gcc-build
 	cd gcc-build
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --with-sysroot=${_sysroot} --prefix=/usr \
-		--enable-languages=c,c++,lto --enable-lto --disable-libsanitizer \
-		--disable-multilib --disable-nls --disable-libquadmath \
-		--disable-libmudflap --enable-shared \
-		--disable-symvers libat_cv_have_ifunc=no ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --enable-lto"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-multilib"
+	_args+=" --disable-nls"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libquadmath"
+	_args+=" --enable-shared"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-arm-linux-musleabihf/files/fix-cxxflags-passing.patch b/srcpkgs/cross-arm-linux-musleabihf/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-arm-linux-musleabihf/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-musleabihf/files/gcc-4.9.2-musl.diff b/srcpkgs/cross-arm-linux-musleabihf/files/gcc-4.9.2-musl.diff
deleted file mode 120000
index 3d53eb4..0000000
--- a/srcpkgs/cross-arm-linux-musleabihf/files/gcc-4.9.2-musl.diff
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/files/gcc-4.9.2-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-musleabihf/files/gcc-6.2.1-musl.diff b/srcpkgs/cross-arm-linux-musleabihf/files/gcc-6.2.1-musl.diff
new file mode 120000
index 0000000..9081d12
--- /dev/null
+++ b/srcpkgs/cross-arm-linux-musleabihf/files/gcc-6.2.1-musl.diff
@@ -0,0 +1 @@
+../../gcc/files/gcc-6.2.1-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-musleabihf/files/gcc-spec-env-r1.patch b/srcpkgs/cross-arm-linux-musleabihf/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-arm-linux-musleabihf/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-arm-linux-musleabihf/template b/srcpkgs/cross-arm-linux-musleabihf/template
index 8da3773..60da6af 100644
--- a/srcpkgs/cross-arm-linux-musleabihf/template
+++ b/srcpkgs/cross-arm-linux-musleabihf/template
@@ -1,9 +1,9 @@
 # Template build file for 'cross-arm-linux-musleabihf'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _musl_version=1.1.15
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=arm-linux-musleabihf
 _fpuflags="--with-arch=armv6 --with-fpu=vfp --with-float=hard"
@@ -11,21 +11,21 @@ _archflags="-march=armv6 -mfpu=vfp -mfloat-abi=hard"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=5
+version=0.22
+revision=1
 short_desc="Cross toolchain for ARMv6 LE Hard Float target (musl)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, MIT"
 distfiles="
- http://ftp.gnu.org/pub/gnu/binutils/binutils-${_binutils_version}.tar.bz2
- http://ftp.gnu.org/pub/gnu/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
- http://www.kernel.org/pub/linux/kernel/v3.x/linux-${_linux_version}.tar.xz
+ ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz
  http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af
  97e447c7ee2a7f613186ec54a93054fe15469fe34d7d323080f7ef38f5ecb0fa"
 
 lib32disabled=yes
@@ -49,6 +49,8 @@ _apply_patch() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -57,10 +59,16 @@ _binutils_build() {
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} --with-sysroot=${_sysroot} \
-		--disable-nls --disable-multilib --disable-werror \
-		--disable-shared ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-shared"
+	_args+=" ${_fpuflags}"
+
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host && make ${makejobs}
 	make install
@@ -69,26 +77,42 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
-	_apply_patch -p1 ${FILESDIR}/gcc-4.9.2-musl.diff
+	_apply_patch -p1 ${FILESDIR}/gcc-6.2.1-musl.diff
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --with-newlib"
+	_args+=" --enable-languages=c"
+	_args+=" --with-newlib"
+	_args+=" --disable-libssp"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-threads"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-shared"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+	_args+=" ${_fpuflags}"
+
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --with-sysroot=${_sysroot} --with-newlib \
-		--enable-languages=c --with-newlib --disable-libssp --disable-nls \
-		--disable-libquadmath --disable-threads --disable-decimal-float \
-		--disable-shared --disable-libmudflap --disable-libgomp \
-		--disable-libatomic --disable-symvers \
-		libat_cv_have_ifunc=no ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -120,7 +144,7 @@ _musl_build() {
 	msg_normal "Building cross musl libc\n"
 
 	CC="${_triplet}-gcc" CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr \
+		./configure --prefix=/usr
 
 	make ${makejobs}
 	make DESTDIR=${_sysroot} install
@@ -129,6 +153,7 @@ _musl_build() {
 }
 
 _gcc_build() {
+	local _args
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -137,12 +162,23 @@ _gcc_build() {
 	[ ! -d gcc-build ] && mkdir gcc-build
 	cd gcc-build
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --with-sysroot=${_sysroot} --prefix=/usr \
-		--enable-languages=c,c++,lto --enable-lto --disable-libsanitizer \
-		--disable-multilib --disable-nls --disable-libquadmath \
-		--disable-libmudflap --enable-shared --disable-symvers \
-		libat_cv_have_ifunc=no ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --enable-lto"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-multilib"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --enable-shared"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/files/fix-cxxflags-passing.patch b/srcpkgs/cross-armv7l-linux-gnueabihf/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/files/gcc-spec-env-r1.patch b/srcpkgs/cross-armv7l-linux-gnueabihf/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-armv7l-linux-gnueabihf/template b/srcpkgs/cross-armv7l-linux-gnueabihf/template
index f183be2..aee5812 100644
--- a/srcpkgs/cross-armv7l-linux-gnueabihf/template
+++ b/srcpkgs/cross-armv7l-linux-gnueabihf/template
@@ -1,9 +1,9 @@
 # Template build file for 'cross-armv7l-linux-gnueabihf'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _glibc_version=2.24
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=armv7l-linux-gnueabihf
 _fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
@@ -11,22 +11,22 @@ _archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=4
+version=0.22
+revision=1
 short_desc="GNU Cross toolchain for the ${_triplet} LE target (binutils/gcc/glibc)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3,GPL-2,LGPL-2.1"
 distfiles="
- http://ftp.gnu.org/pub/gnu/binutils/binutils-${_binutils_version}.tar.bz2
- http://ftp.gnu.org/pub/gnu/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
+ ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
  http://ftp.gnu.org/gnu/glibc/glibc-${_glibc_version}.tar.xz
- http://www.kernel.org/pub/linux/kernel/v3.x/linux-${_linux_version}.tar.xz"
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
  99d4a3e8efd144d71488e478f62587578c0f4e1fa0b4eed47ee3d4975ebeb5d3
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92"
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af"
 
 lib32disabled=yes
 nocross=yes
@@ -64,6 +64,8 @@ _linux_headers() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -71,10 +73,15 @@ _binutils_build() {
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} \
-		--with-sysroot=${_sysroot} --disable-nls --disable-shared \
-		--disable-multilib --disable-werror
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-shared"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host
 	make ${makejobs}
@@ -84,26 +91,42 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --without-headers"
+	_args+=" --disable-nls"
+	_args+=" --disable-shared"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libssp"
+	_args+=" --disable-libitm"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-threads"
+	_args+=" --enable-languages=c"
+	_args+=" --disable-sjlj-exceptions"
+	_args+=" --disable-multilib"
+	_args+=" --with-gnu-ld"
+	_args+=" --with-gnu-as"
+	_args+=" ${_fpuflags}"
+
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --without-headers \
-		--disable-nls --disable-shared --disable-libquadmath \
-		--disable-decimal-float --disable-libgomp --disable-libmudflap \
-		--disable-libssp --disable-libitm --disable-libatomic \
-		--disable-threads --enable-languages=c \
-		--disable-sjlj-exceptions --disable-multilib \
-		--with-gnu-ld --with-gnu-as ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -112,6 +135,8 @@ _gcc_bootstrap() {
 }
 
 _glibc_headers() {
+	local _args
+
 	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
 
 	cd ${wrksrc}
@@ -126,11 +151,15 @@ _glibc_headers() {
 	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
 		AS="${_triplet}-as" CPP="${_triplet}-cpp"
 
-	../glibc-${_glibc_version}/configure \
-		--host=${_triplet} --prefix=/usr \
-		--with-headers=${_sysroot}/usr/include \
-		--config-cache --enable-obsolete-rpc \
-		--enable-kernel=2.6.27 ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --host=${_triplet}"
+	_args+=" --with-headers=${_sysroot}/usr/include"
+	_args+=" --config-cache"
+	_args+=" --enable-obsolete-rpc"
+	_args+=" --enable-kernel=2.6.27"
+	_args+=" ${_fpuflags}"
+
+	../glibc-${_glibc_version}/configure ${_args}
 
 	make -k install-headers cross_compiling=yes \
 		install_root=${_sysroot}
@@ -139,6 +168,8 @@ _glibc_headers() {
 }
 
 _glibc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.glibc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -154,11 +185,17 @@ _glibc_build() {
 		AS="${_triplet}-as" CPP="${_triplet}-cpp"
 	export CFLAGS="-Os -pipe ${_archflags}"
 
-	../glibc-${_glibc_version}/configure \
-		--host=${_triplet} --prefix=/usr \
-		--with-headers=${_sysroot}/usr/include \
-		--config-cache --disable-profile --enable-obsolete-rpc \
-		--disable-werror --enable-kernel=2.6.27 ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --host=${_triplet}"
+	_args+=" --with-headers=${_sysroot}/usr/include"
+	_args+=" --config-cache"
+	_args+=" --disable-profile"
+	_args+=" --enable-obsolete-rpc"
+	_args+=" --disable-werror"
+	_args+=" --enable-kernel=2.6.27"
+	_args+=" ${_fpuflags}"
+
+	../glibc-${_glibc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install_root=${_sysroot} install
@@ -167,6 +204,8 @@ _glibc_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -185,20 +224,39 @@ _gcc_build() {
 		touch .sed_subst_done
 	fi
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --prefix=/usr --libdir=/usr/lib \
-		--libexecdir=/usr/lib --with-sysroot=${_sysroot} \
-		--enable-languages=c,c++,lto \
-		--with-gnu-as --with-gnu-ld --disable-multilib \
-		--disable-werror --disable-nls --disable-sjlj-exceptions \
-		--enable-threads=posix --enable-long-longx \
-		--enable-shared --enable-linker-build-id \
-		--enable-gnu-unique-object --enable-lto \
-		--disable-libquadmath --disable-libatomic \
-		--disable-libssp --disable-libmudflap \
-		--disable-libsanitizer --disable-libcilkrts \
-		--disable-libitm --disable-libvtv --disable-libstdcxx-pch \
-		--enable-libstdcxx-time --with-linker-hash-style=gnu ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --libdir=/usr/lib"
+	_args+=" --libexecdir=/usr/lib"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --with-gnu-as"
+	_args+=" --with-gnu-ld"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-nls"
+	_args+=" --disable-sjlj-exceptions"
+	_args+=" --enable-threads=posix"
+	_args+=" --enable-long-longx"
+	_args+=" --enable-shared"
+	_args+=" --enable-linker-build-id"
+	_args+=" --enable-gnu-unique-object"
+	_args+=" --enable-lto"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-libssp"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-libcilkrts"
+	_args+=" --disable-libitm"
+	_args+=" --disable-libvtv"
+	_args+=" --disable-libstdcxx-pch"
+	_args+=" --enable-libstdcxx-time"
+	_args+=" --with-linker-hash-style=gnu"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/files/fix-cxxflags-passing.patch b/srcpkgs/cross-armv7l-linux-musleabihf/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-4.9.2-musl.diff b/srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-4.9.2-musl.diff
deleted file mode 120000
index 3d53eb4..0000000
--- a/srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-4.9.2-musl.diff
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/files/gcc-4.9.2-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-6.2.1-musl.diff b/srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-6.2.1-musl.diff
new file mode 120000
index 0000000..9081d12
--- /dev/null
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-6.2.1-musl.diff
@@ -0,0 +1 @@
+../../gcc/files/gcc-6.2.1-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-spec-env-r1.patch b/srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-armv7l-linux-musleabihf/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-armv7l-linux-musleabihf/template b/srcpkgs/cross-armv7l-linux-musleabihf/template
index 14f2db4..c4c885f 100644
--- a/srcpkgs/cross-armv7l-linux-musleabihf/template
+++ b/srcpkgs/cross-armv7l-linux-musleabihf/template
@@ -1,9 +1,9 @@
 # Template build file for 'cross-armv7l-linux-musleabihf'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _musl_version=1.1.15
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=armv7l-linux-musleabihf
 _fpuflags="--with-arch=armv7-a --with-fpu=vfpv3 --with-float=hard"
@@ -11,21 +11,21 @@ _archflags="-march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=5
+version=0.22
+revision=1
 short_desc="Cross toolchain for ARMv7 LE Hard Float target (musl)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, MIT"
 distfiles="
- http://ftp.gnu.org/pub/gnu/binutils/binutils-${_binutils_version}.tar.bz2
- http://ftp.gnu.org/pub/gnu/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
- http://www.kernel.org/pub/linux/kernel/v3.x/linux-${_linux_version}.tar.xz
+ ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz
  http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af
  97e447c7ee2a7f613186ec54a93054fe15469fe34d7d323080f7ef38f5ecb0fa"
 
 lib32disabled=yes
@@ -49,6 +49,8 @@ _apply_patch() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -57,10 +59,16 @@ _binutils_build() {
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} --with-sysroot=${_sysroot} \
-		--disable-nls --disable-multilib --disable-werror \
-		--disable-shared ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-shared"
+	_args+=" ${_fpuflags}"
+
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host && make ${makejobs}
 	make install
@@ -69,26 +77,42 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
-	_apply_patch -p1 ${FILESDIR}/gcc-4.9.2-musl.diff
+	_apply_patch -p1 ${FILESDIR}/gcc-6.2.1-musl.diff
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --with-newlib"
+	_args+=" --enable-languages=c"
+	_args+=" --with-newlib"
+	_args+=" --disable-libssp"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-threads"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-shared"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+	_args+=" ${_fpuflags}"
+
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --with-sysroot=${_sysroot} --with-newlib \
-		--enable-languages=c --with-newlib --disable-libssp --disable-nls \
-		--disable-libquadmath --disable-threads --disable-decimal-float \
-		--disable-shared --disable-libmudflap --disable-libgomp \
-		--disable-libatomic --disable-symvers \
-		libat_cv_have_ifunc=no ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -121,7 +145,7 @@ _musl_build() {
 	msg_normal "Building cross musl libc\n"
 
 	CC="${_triplet}-gcc" CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr \
+		./configure --prefix=/usr
 
 	make ${makejobs}
 	make DESTDIR=${_sysroot} install
@@ -130,6 +154,8 @@ _musl_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -138,12 +164,23 @@ _gcc_build() {
 	[ ! -d gcc-build ] && mkdir gcc-build
 	cd gcc-build
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --with-sysroot=${_sysroot} --prefix=/usr \
-		--enable-languages=c,c++,lto --enable-lto --disable-libsanitizer \
-		--disable-multilib --disable-nls --disable-libquadmath \
-		--disable-libmudflap --enable-shared --disable-symvers \
-		libat_cv_have_ifunc=no ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --enable-lto"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-multilib"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --enable-shared"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-i686-linux-musl/files/fix-cxxflags-passing.patch b/srcpkgs/cross-i686-linux-musl/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-i686-linux-musl/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-i686-linux-musl/files/gcc-4.9.2-musl.diff b/srcpkgs/cross-i686-linux-musl/files/gcc-4.9.2-musl.diff
deleted file mode 120000
index 3d53eb4..0000000
--- a/srcpkgs/cross-i686-linux-musl/files/gcc-4.9.2-musl.diff
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/files/gcc-4.9.2-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-i686-linux-musl/files/gcc-6.2.1-musl.diff b/srcpkgs/cross-i686-linux-musl/files/gcc-6.2.1-musl.diff
new file mode 120000
index 0000000..9081d12
--- /dev/null
+++ b/srcpkgs/cross-i686-linux-musl/files/gcc-6.2.1-musl.diff
@@ -0,0 +1 @@
+../../gcc/files/gcc-6.2.1-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-i686-linux-musl/files/gcc-spec-env-r1.patch b/srcpkgs/cross-i686-linux-musl/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-i686-linux-musl/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-i686-linux-musl/template b/srcpkgs/cross-i686-linux-musl/template
index ae8b102..83311c5 100644
--- a/srcpkgs/cross-i686-linux-musl/template
+++ b/srcpkgs/cross-i686-linux-musl/template
@@ -1,30 +1,30 @@
 # Template build file for 'cross-i686-linux-musl'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _musl_version=1.1.15
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=i686-linux-musl
 _sysroot="/usr/${_triplet}"
 _archflags="-march=i686"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=5
+version=0.22
+revision=1
 short_desc="Cross toolchain for i686 target (musl)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, MIT"
 distfiles="
- http://ftp.gnu.org/pub/gnu/binutils/binutils-${_binutils_version}.tar.bz2
- http://ftp.gnu.org/pub/gnu/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
- http://www.kernel.org/pub/linux/kernel/v3.x/linux-${_linux_version}.tar.xz
+ ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz
  http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af
  97e447c7ee2a7f613186ec54a93054fe15469fe34d7d323080f7ef38f5ecb0fa"
 
 lib32disabled=yes
@@ -48,6 +48,8 @@ _apply_patch() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -55,11 +57,16 @@ _binutils_build() {
 
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-shared"
+	_args+=" ${_fpuflags}"
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} --with-sysroot=${_sysroot} \
-		--disable-nls --disable-multilib --disable-werror \
-		--disable-shared ${_fpuflags}
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host
 	make ${makejobs}
@@ -69,26 +76,40 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
-	_apply_patch -p1 ${FILESDIR}/gcc-4.9.2-musl.diff
+	_apply_patch -p1 ${FILESDIR}/gcc-6.2.1-musl.diff
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args=--prefix=/usr \
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c"
+	_args+=" --with-newlib"
+	_args+=" --disable-libssp"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-threads"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-shared"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+	_args+=" ${_fpuflags}"
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --with-sysroot=${_sysroot} \
-		--enable-languages=c --with-newlib --disable-libssp --disable-nls \
-		--disable-libquadmath --disable-threads --disable-decimal-float \
-		--disable-shared --disable-libmudflap --disable-libgomp \
-		--disable-libatomic --disable-symvers \
-		libat_cv_have_ifunc=no ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -121,7 +142,7 @@ _musl_build() {
 	msg_normal "Building cross musl libc\n"
 
 	CC="${_triplet}-gcc" CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr \
+		./configure --prefix=/usr
 
 	make ${makejobs}
 	make DESTDIR=${_sysroot} install
@@ -130,6 +151,7 @@ _musl_build() {
 }
 
 _gcc_build() {
+	local _args
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -138,11 +160,21 @@ _gcc_build() {
 	[ ! -d gcc-build ] && mkdir gcc-build
 	cd gcc-build
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --with-sysroot=${_sysroot} --prefix=/usr \
-		--enable-languages=c,c++,lto --enable-lto --disable-libsanitizer \
-		--disable-multilib --disable-libmudflap --enable-shared \
-		--disable-symvers libat_cv_have_ifunc=no ${_fpuflags}
+	_args="--target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --prefix=/usr"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --enable-lto"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-multilib"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --enable-shared"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-i686-pc-linux-gnu/files/fix-cxxflags-passing.patch b/srcpkgs/cross-i686-pc-linux-gnu/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-i686-pc-linux-gnu/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-i686-pc-linux-gnu/files/gcc-spec-env-r1.patch b/srcpkgs/cross-i686-pc-linux-gnu/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-i686-pc-linux-gnu/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-i686-pc-linux-gnu/template b/srcpkgs/cross-i686-pc-linux-gnu/template
index bb4e0f2..6047c2b 100644
--- a/srcpkgs/cross-i686-pc-linux-gnu/template
+++ b/srcpkgs/cross-i686-pc-linux-gnu/template
@@ -1,31 +1,31 @@
 # Template build file for 'cross-i686-pc-linux-gnu'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _glibc_version=2.24
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=i686-pc-linux-gnu
 _archflags="-march=i686 -mtune=generic"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=4
+version=0.22
+revision=1
 short_desc="GNU Cross toolchain for the ${_triplet} target (binutils/gcc/glibc)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, LGPL-2.1"
 distfiles="
  ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
- ${GNU_SITE}/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
  ${GNU_SITE}/glibc/glibc-${_glibc_version}.tar.xz
- ${KERNEL_SITE}/kernel/v3.x/linux-${_linux_version}.tar.xz"
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
  99d4a3e8efd144d71488e478f62587578c0f4e1fa0b4eed47ee3d4975ebeb5d3
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92"
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af"
 
 only_for_archs="armv6l armv7l x86_64"
 nocross=yes
@@ -34,7 +34,7 @@ nodebug=yes
 lib32disabled=yes
 create_wrksrc=yes
 hostmakedepends="perl flex"
-makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel"
+makedepends="zlib-devel gmp-devel mpfr-devel libmpc-devel isl15-devel"
 depends="${pkgname}-libc-${version}_${revision}"
 nostrip_files="libgcc.a libgcov.a libgcc_eh.a"
 
@@ -69,11 +69,12 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
@@ -82,16 +83,29 @@ _gcc_bootstrap() {
 
 	# Fix https://build.voidlinux.eu/builders/x86_64_builder/builds/24895/steps/shell_3/logs/stdio
 	export gcc_cv_libc_provides_ssp=yes
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --without-headers"
+	_args+=" --disable-nls"
+	_args+=" --disable-shared"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libssp"
+	_args+=" --disable-libitm"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-threads"
+	_args+=" --enable-languages=c"
+	_args+=" --disable-sjlj-exceptions"
+	_args+=" --disable-multilib"
+	_args+=" --with-gnu-ld"
+	_args+=" --with-gnu-as"
+	_args+=" ${_fpuflags}"
 
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --without-headers \
-		--disable-nls --disable-shared --disable-libquadmath \
-		--disable-decimal-float --disable-libgomp --disable-libmudflap \
-		--disable-libssp --disable-libitm --disable-libatomic \
-		--disable-threads --enable-languages=c \
-		--disable-sjlj-exceptions --disable-multilib \
-		--with-gnu-ld --with-gnu-as ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -114,6 +128,7 @@ _linux_headers() {
 }
 
 _glibc_headers() {
+	local _args
 	[ -f ${wrksrc}/.glibc_headers_done ] && return 0
 
 	cd ${wrksrc}
@@ -129,11 +144,15 @@ _glibc_headers() {
 	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
 		AS="${_triplet}-as" CPP="${_triplet}-cpp"
 
-	../glibc-${_glibc_version}/configure \
-		--host=${_triplet} --prefix=/usr \
-		--with-headers=${_sysroot}/usr/include \
-		--config-cache --enable-obsolete-rpc \
-		--enable-kernel=2.6.27 ${_fpuflags}
+	_args="--target=${_triplet}"
+	_args+=" --prefix=/usr"
+	_args+=" --with-headers=${_sysroot}/usr/include"
+	_args+=" --config-cache"
+	_args+=" --enable-obsolete-rpc"
+	_args+=" --enable-kernel=2.6.27"
+	_args+=" ${_fpuflags}"
+
+	../glibc-${_glibc_version}/configure ${_args}
 
 	make -k install-headers cross_compiling=yes \
 		install_root=${_sysroot}
@@ -142,6 +161,7 @@ _glibc_headers() {
 }
 
 _glibc_build() {
+	local _args
 	[ -f ${wrksrc}/.glibc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -156,13 +176,16 @@ _glibc_build() {
 
 	export CC="${_triplet}-gcc" LD="${_triplet}-ld" \
 		AS="${_triplet}-as" CPP="${_triplet}-cpp"
-	export CFLAGS="-Os -pipe -Wno-error ${_archflags}"
+	export CFLAGS="-O2 -pipe -Wno-error ${_archflags}"
+	_args="--host=${_triplet}"
+	_args+=" --prefix=/usr"
+	_args+=" --with-headers=${_sysroot}/usr/include"
+	_args+=" --config-cache"
+	_args+=" --enable-obsolete-rpc"
+	_args+=" --enable-kernel=2.6.27"
+	_args+=" ${_fpuflags}"
 
-	../glibc-${_glibc_version}/configure \
-		--host=${_triplet} --prefix=/usr \
-		--with-headers=${_sysroot}/usr/include \
-		--config-cache --enable-obsolete-rpc \
-		--enable-kernel=2.6.27 ${_fpuflags}
+	../glibc-${_glibc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install_root=${_sysroot} install
@@ -171,6 +194,8 @@ _glibc_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -180,7 +205,6 @@ _gcc_build() {
 	cd gcc-build
 
 	unset LD AS CPP
-	export CC="gcc" CFLAGS="-Os -pipe"
 
 	# Make this link to target libs.
 	if [ ! -f .sed_subst_done ]; then
@@ -188,20 +212,40 @@ _gcc_build() {
 			-i ${_sysroot}/lib/libc.so ${_sysroot}/lib/libpthread.so
 		touch .sed_subst_done
 	fi
-
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --prefix=/usr --libdir=/usr/lib \
-		--with-sysroot=${_sysroot} --enable-languages=c,c++,lto \
-		--with-gnu-as --with-gnu-ld --disable-multilib \
-		--disable-nls --disable-sjlj-exceptions \
-		--enable-threads=posix --enable-long-longx \
-		--enable-shared --enable-linker-build-id \
-		--enable-gnu-unique-object --enable-lto \
-		--disable-libquadmath --disable-libatomic \
-		--disable-libssp --disable-libmudflap \
-		--disable-libsanitizer --disable-libcilkrts \
-		--disable-libitm --disable-libvtv --disable-libstdcxx-pch \
-		--enable-libstdcxx-time --with-linker-hash-style=gnu ${_fpuflags}
+	_args="--target=${_triplet}"
+	_args+=" --target=${_triplet}"
+	_args+=" --prefix=/usr"
+	_args+=" --libdir=/usr/lib"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --with-gnu-as"
+	_args+=" --with-gnu-ld"
+	_args+=" --disable-multilib"
+	_args+=" --disable-nls"
+	_args+=" --disable-sjlj-exceptions"
+	_args+=" --enable-threads=posix"
+	_args+=" --enable-long-longx"
+	_args+=" --enable-shared"
+	_args+=" --enable-linker-build-id"
+	_args+=" --enable-gnu-unique-object"
+	_args+=" --enable-lto"
+	_args+=" --enable-gnu-indirect-function"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-libssp"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-libcilkrts"
+	_args+=" --disable-libitm"
+	_args+=" --disable-libvtv"
+	_args+=" --disable-libstdcxx-pch"
+	_args+=" --enable-libstdcxx-time"
+	_args+=" --with-linker-hash-style=gnu"
+	_args+=" ${_fpuflags}"
+
+	CC="gcc" CFLAGS="-O2 -pipe" \
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-mips-linux-musl/files/fix-cxxflags-passing.patch b/srcpkgs/cross-mips-linux-musl/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-mips-linux-musl/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-mips-linux-musl/files/gcc-4.9.2-musl.diff b/srcpkgs/cross-mips-linux-musl/files/gcc-4.9.2-musl.diff
deleted file mode 120000
index 3d53eb4..0000000
--- a/srcpkgs/cross-mips-linux-musl/files/gcc-4.9.2-musl.diff
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/files/gcc-4.9.2-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-mips-linux-musl/files/gcc-6.2.1-musl.diff b/srcpkgs/cross-mips-linux-musl/files/gcc-6.2.1-musl.diff
new file mode 120000
index 0000000..9081d12
--- /dev/null
+++ b/srcpkgs/cross-mips-linux-musl/files/gcc-6.2.1-musl.diff
@@ -0,0 +1 @@
+../../gcc/files/gcc-6.2.1-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-mips-linux-musl/files/gcc-spec-env-r1.patch b/srcpkgs/cross-mips-linux-musl/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-mips-linux-musl/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-mips-linux-musl/template b/srcpkgs/cross-mips-linux-musl/template
index a3ffca6..a6a16ed 100644
--- a/srcpkgs/cross-mips-linux-musl/template
+++ b/srcpkgs/cross-mips-linux-musl/template
@@ -1,9 +1,9 @@
 # Template build file for 'cross-mips-linux-musl'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _musl_version=1.1.15
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=mips-linux-musl
 _fpuflags="--with-float=soft --without-fp"
@@ -11,21 +11,21 @@ _archflags="-march=mips32r2 -msoft-float"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=6
+version=0.22
+revision=1
 short_desc="Cross toolchain for MIPS32r2 BE softfloat target (musl)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, MIT"
 distfiles="
- http://ftp.gnu.org/pub/gnu/binutils/binutils-${_binutils_version}.tar.bz2
- http://ftp.gnu.org/pub/gnu/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
- http://www.kernel.org/pub/linux/kernel/v3.x/linux-${_linux_version}.tar.xz
+ ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz
  http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af
  97e447c7ee2a7f613186ec54a93054fe15469fe34d7d323080f7ef38f5ecb0fa"
 
 lib32disabled=yes
@@ -49,6 +49,8 @@ _apply_patch() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -57,10 +59,16 @@ _binutils_build() {
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} --with-sysroot=${_sysroot} \
-		--disable-nls --disable-multilib --disable-werror \
-		--disable-shared ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-shared"
+	_args+=" ${_fpuflags}"
+
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host && make ${makejobs}
 	make install
@@ -69,25 +77,40 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
-	_apply_patch -p1 ${FILESDIR}/gcc-4.9.2-musl.diff
+	_apply_patch -p1 ${FILESDIR}/gcc-6.2.1-musl.diff
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --with-newlib"
+	_args+=" --enable-languages=c"
+	_args+=" --with-newlib"
+	_args+=" --disable-libssp"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-threads"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-shared"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libatomic"
+	_args+=" ${_fpuflags}"
+
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --with-sysroot=${_sysroot} --with-newlib \
-		--enable-languages=c --with-newlib --disable-libssp --disable-nls \
-		--disable-libquadmath --disable-threads --disable-decimal-float \
-		--disable-shared --disable-libmudflap --disable-libgomp \
-		--disable-libatomic ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -116,7 +139,7 @@ _musl_build() {
 	msg_normal "Building cross musl libc\n"
 
 	CC="${_triplet}-gcc" CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr \
+		./configure --prefix=/usr
 
 	make ${makejobs}
 	make DESTDIR=${_sysroot} install
@@ -125,6 +148,8 @@ _musl_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -133,12 +158,22 @@ _gcc_build() {
 	[ ! -d gcc-build ] && mkdir gcc-build
 	cd gcc-build
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --with-sysroot=${_sysroot} --prefix=/usr \
-		--libexecdir=/usr/lib --enable-languages=c,c++,lto \
-		--enable-lto --disable-libsanitizer \
-		--disable-multilib --disable-nls --disable-libquadmath \
-		--disable-libmudflap --enable-shared ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --libexecdir=/usr/lib"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --enable-lto"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-multilib"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --enable-shared"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-mipsel-linux-musl/files/fix-cxxflags-passing.patch b/srcpkgs/cross-mipsel-linux-musl/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-mipsel-linux-musl/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-mipsel-linux-musl/files/gcc-4.9.2-musl.diff b/srcpkgs/cross-mipsel-linux-musl/files/gcc-4.9.2-musl.diff
deleted file mode 120000
index 3d53eb4..0000000
--- a/srcpkgs/cross-mipsel-linux-musl/files/gcc-4.9.2-musl.diff
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/files/gcc-4.9.2-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-mipsel-linux-musl/files/gcc-6.2.1-musl.diff b/srcpkgs/cross-mipsel-linux-musl/files/gcc-6.2.1-musl.diff
new file mode 120000
index 0000000..9081d12
--- /dev/null
+++ b/srcpkgs/cross-mipsel-linux-musl/files/gcc-6.2.1-musl.diff
@@ -0,0 +1 @@
+../../gcc/files/gcc-6.2.1-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-mipsel-linux-musl/files/gcc-spec-env-r1.patch b/srcpkgs/cross-mipsel-linux-musl/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-mipsel-linux-musl/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-mipsel-linux-musl/template b/srcpkgs/cross-mipsel-linux-musl/template
index 970d595..d0c6fa5 100644
--- a/srcpkgs/cross-mipsel-linux-musl/template
+++ b/srcpkgs/cross-mipsel-linux-musl/template
@@ -1,9 +1,9 @@
 # Template build file for 'cross-mipsel-linux-musl'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _musl_version=1.1.15
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=mipsel-linux-musl
 _fpuflags="--with-float=soft --without-fp"
@@ -11,21 +11,21 @@ _archflags="-march=mips32r2 -msoft-float"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=6
+version=0.22
+revision=1
 short_desc="Cross toolchain for MIPS32r2 LE softfloat target (musl)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, MIT"
 distfiles="
- http://ftp.gnu.org/pub/gnu/binutils/binutils-${_binutils_version}.tar.bz2
- http://ftp.gnu.org/pub/gnu/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
- http://www.kernel.org/pub/linux/kernel/v3.x/linux-${_linux_version}.tar.xz
+ ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz
  http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af
  97e447c7ee2a7f613186ec54a93054fe15469fe34d7d323080f7ef38f5ecb0fa"
 
 lib32disabled=yes
@@ -49,6 +49,8 @@ _apply_patch() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -57,10 +59,16 @@ _binutils_build() {
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} --with-sysroot=${_sysroot} \
-		--disable-nls --disable-multilib --disable-werror \
-		--disable-shared ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-shared"
+	_args+=" ${_fpuflags}"
+
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host && make ${makejobs}
 	make install
@@ -69,25 +77,40 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
-	_apply_patch -p1 ${FILESDIR}/gcc-4.9.2-musl.diff
+	_apply_patch -p1 ${FILESDIR}/gcc-6.2.1-musl.diff
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --with-newlib"
+	_args+=" --enable-languages=c"
+	_args+=" --with-newlib"
+	_args+=" --disable-libssp"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-threads"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-shared"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libatomic"
+	_args+=" ${_fpuflags}"
+
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --with-sysroot=${_sysroot} --with-newlib \
-		--enable-languages=c --with-newlib --disable-libssp --disable-nls \
-		--disable-libquadmath --disable-threads --disable-decimal-float \
-		--disable-shared --disable-libmudflap --disable-libgomp \
-		--disable-libatomic ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -116,7 +139,7 @@ _musl_build() {
 	msg_normal "Building cross musl libc\n"
 
 	CC="${_triplet}-gcc" CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr \
+		./configure --prefix=/usr
 
 	make ${makejobs}
 	make DESTDIR=${_sysroot} install
@@ -125,6 +148,8 @@ _musl_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -133,12 +158,22 @@ _gcc_build() {
 	[ ! -d gcc-build ] && mkdir gcc-build
 	cd gcc-build
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --with-sysroot=${_sysroot} --prefix=/usr \
-		--libexecdir=/usr/lib --enable-languages=c,c++,lto \
-		--enable-lto --disable-libsanitizer \
-		--disable-multilib --disable-nls --disable-libquadmath \
-		--disable-libmudflap --enable-shared ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --libexecdir=/usr/lib"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --enable-lto"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-multilib"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --enable-shared"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-mipsel-linux-muslhf/files/fix-cxxflags-passing.patch b/srcpkgs/cross-mipsel-linux-muslhf/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-mipsel-linux-muslhf/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-mipsel-linux-muslhf/files/gcc-4.9.2-musl.diff b/srcpkgs/cross-mipsel-linux-muslhf/files/gcc-4.9.2-musl.diff
deleted file mode 120000
index 3d53eb4..0000000
--- a/srcpkgs/cross-mipsel-linux-muslhf/files/gcc-4.9.2-musl.diff
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/files/gcc-4.9.2-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-mipsel-linux-muslhf/files/gcc-6.2.1-musl.diff b/srcpkgs/cross-mipsel-linux-muslhf/files/gcc-6.2.1-musl.diff
new file mode 120000
index 0000000..9081d12
--- /dev/null
+++ b/srcpkgs/cross-mipsel-linux-muslhf/files/gcc-6.2.1-musl.diff
@@ -0,0 +1 @@
+../../gcc/files/gcc-6.2.1-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-mipsel-linux-muslhf/files/gcc-spec-env-r1.patch b/srcpkgs/cross-mipsel-linux-muslhf/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-mipsel-linux-muslhf/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-mipsel-linux-muslhf/template b/srcpkgs/cross-mipsel-linux-muslhf/template
index 347ea85..1200232 100644
--- a/srcpkgs/cross-mipsel-linux-muslhf/template
+++ b/srcpkgs/cross-mipsel-linux-muslhf/template
@@ -1,9 +1,9 @@
 # Template build file for 'cross-mipsel-linux-muslhf'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _musl_version=1.1.15
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=mipsel-linux-muslhf
 _fpuflags="--with-float=hard --with-fp"
@@ -11,21 +11,21 @@ _archflags="-march=mips32r2 -mhard-float"
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=6
+version=0.22
+revision=1
 short_desc="Cross toolchain for MIPS32r2 LE hardfloat target (musl)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, MIT"
 distfiles="
- http://ftp.gnu.org/pub/gnu/binutils/binutils-${_binutils_version}.tar.bz2
- http://ftp.gnu.org/pub/gnu/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
- http://www.kernel.org/pub/linux/kernel/v3.x/linux-${_linux_version}.tar.xz
+ ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz
  http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af
  97e447c7ee2a7f613186ec54a93054fe15469fe34d7d323080f7ef38f5ecb0fa"
 
 lib32disabled=yes
@@ -49,6 +49,8 @@ _apply_patch() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -57,10 +59,16 @@ _binutils_build() {
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} --with-sysroot=${_sysroot} \
-		--disable-nls --disable-multilib --disable-werror \
-		--disable-shared ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-shared"
+	_args+=" ${_fpuflags}"
+
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host && make ${makejobs}
 	make install
@@ -69,25 +77,40 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
-	_apply_patch -p1 ${FILESDIR}/gcc-4.9.2-musl.diff
+	_apply_patch -p1 ${FILESDIR}/gcc-6.2.1-musl.diff
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
 
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --with-newlib"
+	_args+=" --enable-languages=c"
+	_args+=" --with-newlib"
+	_args+=" --disable-libssp"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-threads"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-shared"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libatomic"
+	_args+=" ${_fpuflags}"
+
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --with-sysroot=${_sysroot} --with-newlib \
-		--enable-languages=c --with-newlib --disable-libssp --disable-nls \
-		--disable-libquadmath --disable-threads --disable-decimal-float \
-		--disable-shared --disable-libmudflap --disable-libgomp \
-		--disable-libatomic ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -116,7 +139,7 @@ _musl_build() {
 	msg_normal "Building cross musl libc\n"
 
 	CC="${_triplet}-gcc" CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr \
+		./configure --prefix=/usr
 
 	make ${makejobs}
 	make DESTDIR=${_sysroot} install
@@ -125,6 +148,8 @@ _musl_build() {
 }
 
 _gcc_build() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -133,12 +158,22 @@ _gcc_build() {
 	[ ! -d gcc-build ] && mkdir gcc-build
 	cd gcc-build
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --with-sysroot=${_sysroot} --prefix=/usr \
-		--libexecdir=/usr/lib --enable-languages=c,c++,lto \
-		--enable-lto --disable-libsanitizer \
-		--disable-multilib --disable-nls --disable-libquadmath \
-		--disable-libmudflap --enable-shared ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --libexecdir=/usr/lib"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --enable-lto"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-multilib"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --enable-shared"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/cross-vpkg-dummy/template b/srcpkgs/cross-vpkg-dummy/template
index 0bfd58a..2b4c849 100644
--- a/srcpkgs/cross-vpkg-dummy/template
+++ b/srcpkgs/cross-vpkg-dummy/template
@@ -1,6 +1,6 @@
 # Template file for 'cross-vpkg-dummy'
 pkgname=cross-vpkg-dummy
-version=0.21
+version=0.22
 revision=1
 build_style=meta
 short_desc="Dummy meta-pkg for cross building packages with xbps-src"
@@ -23,7 +23,6 @@ provides="
 	libgomp-9999_1
 	libgomp-devel-9999_1
 	gcc-9999_1
-	gcc-c++-9999_1
 	glibc-9999_1
 	glibc-devel-9999_1
 	musl-9999_1"
@@ -36,7 +35,6 @@ conflicts="
 	libgomp>=0
 	libgomp-devel>=0
 	gcc>=0
-	gcc-c++>=0
 	glibc>=0
 	glibc-devel>=0
 	musl>=0"
diff --git a/srcpkgs/cross-x86_64-linux-musl/files/fix-cxxflags-passing.patch b/srcpkgs/cross-x86_64-linux-musl/files/fix-cxxflags-passing.patch
new file mode 120000
index 0000000..4a8c831
--- /dev/null
+++ b/srcpkgs/cross-x86_64-linux-musl/files/fix-cxxflags-passing.patch
@@ -0,0 +1 @@
+../../gcc/patches/fix-cxxflags-passing.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-x86_64-linux-musl/files/gcc-4.9.2-musl.diff b/srcpkgs/cross-x86_64-linux-musl/files/gcc-4.9.2-musl.diff
deleted file mode 120000
index 3d53eb4..0000000
--- a/srcpkgs/cross-x86_64-linux-musl/files/gcc-4.9.2-musl.diff
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/files/gcc-4.9.2-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-x86_64-linux-musl/files/gcc-6.2.1-musl.diff b/srcpkgs/cross-x86_64-linux-musl/files/gcc-6.2.1-musl.diff
new file mode 120000
index 0000000..9081d12
--- /dev/null
+++ b/srcpkgs/cross-x86_64-linux-musl/files/gcc-6.2.1-musl.diff
@@ -0,0 +1 @@
+../../gcc/files/gcc-6.2.1-musl.diff
\ No newline at end of file
diff --git a/srcpkgs/cross-x86_64-linux-musl/files/gcc-spec-env-r1.patch b/srcpkgs/cross-x86_64-linux-musl/files/gcc-spec-env-r1.patch
deleted file mode 120000
index 8dd1493..0000000
--- a/srcpkgs/cross-x86_64-linux-musl/files/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1 +0,0 @@
-../../gcc/patches/gcc-spec-env-r1.patch
\ No newline at end of file
diff --git a/srcpkgs/cross-x86_64-linux-musl/template b/srcpkgs/cross-x86_64-linux-musl/template
index f63adfc..74da0ea 100644
--- a/srcpkgs/cross-x86_64-linux-musl/template
+++ b/srcpkgs/cross-x86_64-linux-musl/template
@@ -1,29 +1,29 @@
 # Template build file for 'cross-x86_64-linux-musl'
 #
 _binutils_version=2.27
-_gcc_version=4.9.4
+_gcc_version=6.2.1
 _musl_version=1.1.15
-_linux_version=3.18.25
+_linux_version=4.1.34
 
 _triplet=x86_64-linux-musl
 _sysroot="/usr/${_triplet}"
 
 pkgname=cross-${_triplet}
-version=0.21
-revision=6
+version=0.22
+revision=1
 short_desc="Cross toolchain for x86_64 with musl"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://www.voidlinux.eu"
 license="GPL-3, GPL-2, MIT"
 distfiles="
- http://ftp.gnu.org/pub/gnu/binutils/binutils-${_binutils_version}.tar.bz2
- http://ftp.gnu.org/pub/gnu/gcc/gcc-${_gcc_version}/gcc-${_gcc_version}.tar.bz2
- http://www.kernel.org/pub/linux/kernel/v3.x/linux-${_linux_version}.tar.xz
+ ${GNU_SITE}/binutils/binutils-${_binutils_version}.tar.bz2
+ http://distfiles.voidlinux.de/gcc-$version/gcc-${_gcc_version}.tar.xz
+ ${KERNEL_SITE}/kernel/v4.x/linux-${_linux_version}.tar.xz
  http://www.musl-libc.org/releases/musl-${_musl_version}.tar.gz"
 checksum="
  369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88
- 6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
- c649874e2856101df7cefe5fdad313ebb2282a939fc1e95cf02222327745ff92
+ 6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
+ 412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af
  97e447c7ee2a7f613186ec54a93054fe15469fe34d7d323080f7ef38f5ecb0fa"
 
 lib32disabled=yes
@@ -47,6 +47,8 @@ _apply_patch() {
 }
 
 _binutils_build() {
+	local _args
+
 	[ -f ${wrksrc}/.binutils_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -55,10 +57,16 @@ _binutils_build() {
 	[ ! -d binutils-build ] && mkdir binutils-build
 	cd binutils-build
 
-	../binutils-${_binutils_version}/configure \
-		--prefix=/usr --target=${_triplet} --with-sysroot=${_sysroot} \
-		--disable-nls --disable-multilib --disable-werror \
-		--disable-shared ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --disable-nls"
+	_args+=" --disable-multilib"
+	_args+=" --disable-werror"
+	_args+=" --disable-shared"
+	_args+=" ${_fpuflags}"
+
+	../binutils-${_binutils_version}/configure ${_args}
 
 	make configure-host
 	make ${makejobs}
@@ -68,26 +76,42 @@ _binutils_build() {
 }
 
 _gcc_bootstrap() {
+	local _args
+
 	[ -f ${wrksrc}/.gcc_bootstrap_done ] && return 0
 
 	cd ${wrksrc}/gcc-${_gcc_version}
-	_apply_patch -p1 ${FILESDIR}/gcc-4.9.2-musl.diff
+	_apply_patch -p1 ${FILESDIR}/gcc-6.2.1-musl.diff
 	_apply_patch -p0 ${FILESDIR}/libcpp-source_date_epoch.patch
-	_apply_patch -p0 ${FILESDIR}/gcc-spec-env-r1.patch
+	_apply_patch -p0 ${FILESDIR}/fix-cxxflags-passing.patch
 
 	msg_normal "Building cross gcc bootstrap\n"
 
 	[ ! -d ../gcc-bootstrap ] && mkdir ../gcc-bootstrap
 	cd ../gcc-bootstrap
+	export ac_cv_c_compiler_gnu=yes
+
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c"
+	_args+=" --with-newlib"
+	_args+=" --disable-libssp"
+	_args+=" --disable-nls"
+	_args+=" --disable-libquadmath"
+	_args+=" --disable-threads"
+	_args+=" --disable-decimal-float"
+	_args+=" --disable-shared"
+	_args+=" --disable-libmudflap"
+	_args+=" --disable-libgomp"
+	_args+=" --disable-libatomic"
+	_args+=" --disable-symvers"
+	_args+=" --disable-libmpx"
+	_args+=" libat_cv_have_ifunc=no"
+	_args+=" ${_fpuflags}"
 
 	CFLAGS="-O0 -g0" CXXFLAGS="-O0 -g0" \
-		../gcc-${_gcc_version}/configure --prefix=/usr \
-		--target=${_triplet} --with-sysroot=${_sysroot} \
-		--enable-languages=c --with-newlib --disable-libssp --disable-nls \
-		--disable-libquadmath --disable-threads --disable-decimal-float \
-		--disable-shared --disable-libmudflap --disable-libgomp \
-		--disable-libatomic --disable-symvers \
-		libat_cv_have_ifunc=no ${_fpuflags}
+		../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 	make install
@@ -120,7 +144,7 @@ _musl_build() {
 	msg_normal "Building cross musl libc\n"
 
 	CC="${_triplet}-gcc" CFLAGS="-Os -pipe ${_archflags}" \
-		./configure --prefix=/usr \
+		./configure --prefix=/usr
 
 	make ${makejobs}
 	make DESTDIR=${_sysroot} install
@@ -129,6 +153,7 @@ _musl_build() {
 }
 
 _gcc_build() {
+	local _args
 	[ -f ${wrksrc}/.gcc_build_done ] && return 0
 
 	cd ${wrksrc}
@@ -137,11 +162,21 @@ _gcc_build() {
 	[ ! -d gcc-build ] && mkdir gcc-build
 	cd gcc-build
 
-	../gcc-${_gcc_version}/configure \
-		--target=${_triplet} --with-sysroot=${_sysroot} --prefix=/usr \
-		--enable-languages=c,c++,lto --enable-lto --disable-libsanitizer \
-		--disable-multilib --disable-libmudflap --enable-shared \
-		--disable-symvers libat_cv_have_ifunc=no ${_fpuflags}
+	_args="--prefix=/usr"
+	_args+=" --target=${_triplet}"
+	_args+=" --with-sysroot=${_sysroot}"
+	_args+=" --enable-languages=c,c++,lto"
+	_args+=" --enable-lto"
+	_args+=" --disable-libsanitizer"
+	_args+=" --disable-multilib"
+	_args+=" --disable-libmpx"
+	_args+=" --disable-libmudflap"
+	_args+=" --enable-shared"
+	_args+=" --disable-symvers"
+	_args+=" libat_cv_have_ifunc=no"
+	_args+=" ${_fpuflags}"
+
+	../gcc-${_gcc_version}/configure ${_args}
 
 	make ${makejobs}
 
diff --git a/srcpkgs/efivar/template b/srcpkgs/efivar/template
index 390aa8a..63dbc9b 100644
--- a/srcpkgs/efivar/template
+++ b/srcpkgs/efivar/template
@@ -11,7 +11,8 @@ only_for_archs="i686 i686-musl x86_64 x86_64-musl"
 distfiles="https://github.com/rhinstaller/efivar/releases/download/${version}/efivar-${version}.tar.bz2"
 checksum=04b9b9de9d9a1a013395400438a033daf4a4290f497ec5be04a120e2ac535094
 
-CFLAGS="-Wno-error=deprecated-declarations"
+CFLAGS="-Wno-error -Wno-error=nonnull-compare -Wno-error=unused-const-variable=\
+ -Wno-error=deprecated-declarations -Wno-error=strict-aliasing"
 
 do_build() {
 	sed 's|-rpath=$(TOPDIR)/src/|-rpath=$(libdir)|g' -i src/test/Makefile
diff --git a/srcpkgs/gcc-c++ b/srcpkgs/gcc-c++
deleted file mode 120000
index b08d5af..0000000
--- a/srcpkgs/gcc-c++
+++ /dev/null
@@ -1 +0,0 @@
-gcc
\ No newline at end of file
diff --git a/srcpkgs/gcc-multilib/patches/fix-libiberty_pic.patch b/srcpkgs/gcc-multilib/patches/fix-libiberty_pic.patch
index 1707d41..134846c 100644
--- a/srcpkgs/gcc-multilib/patches/fix-libiberty_pic.patch
+++ b/srcpkgs/gcc-multilib/patches/fix-libiberty_pic.patch
@@ -1,11 +1,13 @@
 --- libiberty/Makefile.in	2016-08-05 17:07:27.540554328 +0200
 +++ libiberty/Makefile.in	2016-08-05 17:18:39.727540789 +0200
-@@ -112,7 +112,7 @@
+@@ -112,8 +112,8 @@
  
  INCDIR=$(srcdir)/$(MULTISRCTOP)../include
  
--COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@
-+COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -fPIC -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@
+-COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) \
+-               $(HDEFINES) @ac_libiberty_warn_cflags@ -D_GNU_SOURCE
++COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -fPIC -I. -I$(INCDIR) \
++               $(HDEFINES) @ac_libiberty_warn_cflags@ -D_DEFAULT_SOURCE
  
  # Just to make sure we don't use a built-in rule with VPATH
  .c.$(objext):
diff --git a/srcpkgs/gcc-multilib/template b/srcpkgs/gcc-multilib/template
index 7b6a119..c1b9d60 100644
--- a/srcpkgs/gcc-multilib/template
+++ b/srcpkgs/gcc-multilib/template
@@ -1,18 +1,18 @@
 # Template build file for 'gcc-multilib'
 only_for_archs="x86_64"
 _triplet="x86_64-unknown-linux-gnu"
-_majorver=4.9
+_majorver=6.2
 
 pkgname=gcc-multilib
-version=${_majorver}.4
+version=${_majorver}.1
 revision=2
 wrksrc="gcc-${version}"
 short_desc="The GNU C Compiler (multilib files)"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://gcc.gnu.org"
 license="GFDL-1.2, GPL-3, LGPL-2.1"
-distfiles="${GNU_SITE}/gcc/gcc-$version/gcc-$version.tar.bz2"
-checksum=6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
+distfiles="http://distfiles.voidlinux.de/gcc-${version}/gcc-${version}.tar.xz"
+checksum=6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
 
 hostmakedepends="perl flex zip unzip"
 makedepends="zlib-devel libmpc-devel ppl-devel cloog-devel
@@ -40,6 +40,8 @@ do_configure() {
 	sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
 	# Do not run fixincludes
 	sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
+	# hack! some configure tests for header files using "$CPP $CPPFLAGS"
+	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {libiberty,gcc}/configure
 
 	./configure --prefix=/usr --mandir=/usr/share/man \
 		--infodir=/usr/share/info --libexecdir=/usr/lib \
@@ -81,13 +83,6 @@ do_install() {
 	rm -f ${DESTDIR}/usr/lib64
 }
 
-gcc-c++-multilib_package() {
-	depends="gcc-c++>=${_majorver} gcc-multilib>=${_majorver} libstdc++-devel-32bit>=${_majorver}"
-	short_desc="GCC C++ compiler (multilib files)"
-	pkg_install() {
-		vmove usr/include/c++
-	}
-}
 gcc-objc-multilib_package() {
 	depends="gcc-multilib>=${_majorver} gcc-objc>=${_majorver} libobjc-devel-32bit>=${_majorver}"
 	short_desc="The GNU Objective-C compiler (multilib files)"
diff --git a/srcpkgs/gcc/files/gcc-4.9.2-musl.diff b/srcpkgs/gcc/files/gcc-4.9.2-musl.diff
deleted file mode 100644
index 8baafd0..0000000
--- a/srcpkgs/gcc/files/gcc-4.9.2-musl.diff
+++ /dev/null
@@ -1,730 +0,0 @@
-820c77b17a4a
-# HG changeset patch
-# Parent 1f830bec5a3f04b2718ce1395743d8e35c26341c
-Use the generic implementation of libstdc++ primitives when we're on musl, not the glibc one.
-
-diff -r 1f830bec5a3f libstdc++-v3/configure.host
---- a/libstdc++-v3/configure.host	Thu Jan 29 14:04:56 2015 -0500
-+++ b/libstdc++-v3/configure.host	Thu Jan 29 14:06:11 2015 -0500
-@@ -264,6 +264,13 @@
-     os_include_dir="os/bsd/freebsd"
-     ;;
-   gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
-+    # check for musl by target
-+    case "${host_os}" in
-+      *-musl*)
-+        os_include_dir="os/generic"
-+        ;;
-+      *)
-+
-     if [ "$uclibc" = "yes" ]; then
-       os_include_dir="os/uclibc"
-     elif [ "$bionic" = "yes" ]; then
-@@ -272,6 +279,9 @@
-       os_include_dir="os/gnu-linux"
-     fi
-     ;;
-+
-+    esac
-+    ;;
-   hpux*)
-     os_include_dir="os/hpux"
-     ;;
-# HG changeset patch
-# Parent fc7bb9343dcd071463a63dfc1b356d579eb0872f
-Adding -mmusl as a musl libc specifier, and the necessary hacks for it to know how to find musl's dynamic linker.
-
-diff -r fc7bb9343dcd gcc/config.gcc
---- a/gcc/config.gcc	Thu Jan 29 14:06:11 2015 -0500
-+++ b/gcc/config.gcc	Thu Jan 29 14:06:13 2015 -0500
-@@ -594,7 +594,7 @@
- esac
- 
- # Common C libraries.
--tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3"
-+tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4"
- 
- # 32-bit x86 processors supported by --with-arch=.  Each processor
- # MUST be separated by exactly one space.
-@@ -719,6 +719,9 @@
-     *-*-*uclibc*)
-       tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
-       ;;
-+    *-*-*musl*)
-+      tm_defines="$tm_defines DEFAULT_LIBC=LIBC_MUSL"
-+      ;;
-     *)
-       tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
-       ;;
-diff -r fc7bb9343dcd gcc/config/linux.h
---- a/gcc/config/linux.h	Thu Jan 29 14:06:11 2015 -0500
-+++ b/gcc/config/linux.h	Thu Jan 29 14:06:13 2015 -0500
-@@ -32,10 +32,12 @@
- #define OPTION_GLIBC  (DEFAULT_LIBC == LIBC_GLIBC)
- #define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
- #define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
-+#define OPTION_MUSL   (DEFAULT_LIBC == LIBC_MUSL)
- #else
- #define OPTION_GLIBC  (linux_libc == LIBC_GLIBC)
- #define OPTION_UCLIBC (linux_libc == LIBC_UCLIBC)
- #define OPTION_BIONIC (linux_libc == LIBC_BIONIC)
-+#define OPTION_MUSL   (linux_libc == LIBC_MUSL)
- #endif
- 
- #define GNU_USER_TARGET_OS_CPP_BUILTINS()			\
-@@ -53,18 +55,21 @@
-    uClibc or Bionic is the default C library and whether
-    -muclibc or -mglibc or -mbionic has been passed to change the default.  */
- 
--#define CHOOSE_DYNAMIC_LINKER1(LIBC1, LIBC2, LIBC3, LD1, LD2, LD3)	\
--  "%{" LIBC2 ":" LD2 ";:%{" LIBC3 ":" LD3 ";:" LD1 "}}"
-+#define CHOOSE_DYNAMIC_LINKER1(LIBC1, LIBC2, LIBC3, LIBC4, LD1, LD2, LD3, LD4)	\
-+  "%{" LIBC2 ":" LD2 ";:%{" LIBC3 ":" LD3 ";:%{" LIBC4 ":" LD4 ";:" LD1 "}}}"
- 
- #if DEFAULT_LIBC == LIBC_GLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
--  CHOOSE_DYNAMIC_LINKER1 ("mglibc", "muclibc", "mbionic", G, U, B)
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+  CHOOSE_DYNAMIC_LINKER1 ("mglibc", "muclibc", "mbionic", "mmusl", G, U, B, M)
- #elif DEFAULT_LIBC == LIBC_UCLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
--  CHOOSE_DYNAMIC_LINKER1 ("muclibc", "mglibc", "mbionic", U, G, B)
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+  CHOOSE_DYNAMIC_LINKER1 ("muclibc", "mglibc", "mbionic", "mmusl", U, G, B, M)
- #elif DEFAULT_LIBC == LIBC_BIONIC
--#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
--  CHOOSE_DYNAMIC_LINKER1 ("mbionic", "mglibc", "muclibc", B, G, U)
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+  CHOOSE_DYNAMIC_LINKER1 ("mbionic", "mglibc", "muclibc", "mmusl", B, G, U, M)
-+#elif DEFAULT_LIBC == LIBC_MUSL
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+  CHOOSE_DYNAMIC_LINKER1 ("mmusl", "mglibc", "muclibc", "mbionic", M, G, U, B)
- #else
- #error "Unsupported DEFAULT_LIBC"
- #endif /* DEFAULT_LIBC */
-@@ -84,21 +89,92 @@
- 
- #define GNU_USER_DYNAMIC_LINKER						\
-   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER,	\
--			 BIONIC_DYNAMIC_LINKER)
-+			 BIONIC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER)
- #define GNU_USER_DYNAMIC_LINKER32					\
-   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, \
--			 BIONIC_DYNAMIC_LINKER32)
-+			 BIONIC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32)
- #define GNU_USER_DYNAMIC_LINKER64					\
-   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, \
--			 BIONIC_DYNAMIC_LINKER64)
-+			 BIONIC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64)
- #define GNU_USER_DYNAMIC_LINKERX32					\
-   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERX32, UCLIBC_DYNAMIC_LINKERX32, \
--			 BIONIC_DYNAMIC_LINKERX32)
-+			 BIONIC_DYNAMIC_LINKERX32, MUSL_DYNAMIC_LINKERX32)
- 
- /* Whether we have Bionic libc runtime */
- #undef TARGET_HAS_BIONIC
- #define TARGET_HAS_BIONIC (OPTION_BIONIC)
- 
-+/* musl avoids problematic includes by rearranging the include directories.
-+ * Unfortunately, this is mostly duplicated from cppdefault.c */
-+#if DEFAULT_LIBC == LIBC_MUSL
-+#define INCLUDE_DEFAULTS_MUSL_GPP			\
-+    { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1,		\
-+      GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },		\
-+    { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1,		\
-+      GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 },		\
-+    { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1,	\
-+      GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
-+
-+#ifdef LOCAL_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_LOCAL			\
-+    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },		\
-+    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_LOCAL
-+#endif
-+
-+#ifdef PREFIX_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_PREFIX			\
-+    { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0},
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_PREFIX
-+#endif
-+
-+#ifdef CROSS_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_CROSS			\
-+    { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0},
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_CROSS
-+#endif
-+
-+#ifdef TOOL_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_TOOL			\
-+    { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0},
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_TOOL
-+#endif
-+
-+#ifdef NATIVE_SYSTEM_HEADER_DIR
-+#define INCLUDE_DEFAULTS_MUSL_NATIVE			\
-+    { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 },	\
-+    { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 },
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_NATIVE
-+#endif
-+
-+#if defined (CROSS_DIRECTORY_STRUCTURE) && !defined (TARGET_SYSTEM_ROOT)
-+# undef INCLUDE_DEFAULTS_MUSL_LOCAL
-+# define INCLUDE_DEFAULTS_MUSL_LOCAL
-+# undef INCLUDE_DEFAULTS_MUSL_NATIVE
-+# define INCLUDE_DEFAULTS_MUSL_NATIVE
-+#else
-+# undef INCLUDE_DEFAULTS_MUSL_CROSS
-+# define INCLUDE_DEFAULTS_MUSL_CROSS
-+#endif
-+
-+#undef INCLUDE_DEFAULTS
-+#define INCLUDE_DEFAULTS				\
-+  {							\
-+    INCLUDE_DEFAULTS_MUSL_GPP				\
-+    INCLUDE_DEFAULTS_MUSL_PREFIX			\
-+    INCLUDE_DEFAULTS_MUSL_CROSS				\
-+    INCLUDE_DEFAULTS_MUSL_TOOL				\
-+    INCLUDE_DEFAULTS_MUSL_NATIVE			\
-+    { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 },		\
-+    { 0, 0, 0, 0, 0, 0 }				\
-+  }
-+#endif
-+
- #if (DEFAULT_LIBC == LIBC_UCLIBC) && defined (SINGLE_LIBC) /* uClinux */
- /* This is a *uclinux* target.  We don't define below macros to normal linux
-    versions, because doing so would require *uclinux* targets to include
-diff -r fc7bb9343dcd gcc/config/linux.opt
---- a/gcc/config/linux.opt	Thu Jan 29 14:06:11 2015 -0500
-+++ b/gcc/config/linux.opt	Thu Jan 29 14:06:13 2015 -0500
-@@ -30,3 +30,7 @@
- muclibc
- Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic)
- Use uClibc C library
-+
-+mmusl
-+Target Report RejectNegative Var(linux_libc,LIBC_MUSL) Negative(mglibc)
-+Use musl C library
-diff -r fc7bb9343dcd gcc/ginclude/stddef.h
---- a/gcc/ginclude/stddef.h	Thu Jan 29 14:06:11 2015 -0500
-+++ b/gcc/ginclude/stddef.h	Thu Jan 29 14:06:13 2015 -0500
-@@ -181,6 +181,7 @@
- #ifndef _GCC_SIZE_T
- #ifndef _SIZET_
- #ifndef __size_t
-+#ifndef __DEFINED_size_t /* musl */
- #define __size_t__	/* BeOS */
- #define __SIZE_T__	/* Cray Unicos/Mk */
- #define _SIZE_T
-@@ -197,6 +198,7 @@
- #define ___int_size_t_h
- #define _GCC_SIZE_T
- #define _SIZET_
-+#define __DEFINED_size_t /* musl */
- #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
-   || defined(__FreeBSD_kernel__)
- /* __size_t is a typedef on FreeBSD 5, must not trash it. */
-@@ -214,6 +216,7 @@
- typedef long ssize_t;
- #endif /* __BEOS__ */
- #endif /* !(defined (__GNUG__) && defined (size_t)) */
-+#endif /* __DEFINED_size_t */
- #endif /* __size_t */
- #endif /* _SIZET_ */
- #endif /* _GCC_SIZE_T */
-# HG changeset patch
-# Parent ad6952ac547606025a6fb8496584cbfe1b73a8b7
-A fix for libgomp to correctly request a POSIX version for time support.
-
-diff -r ad6952ac5476 libgomp/config/posix/time.c
---- a/libgomp/config/posix/time.c	Thu Jan 29 14:06:13 2015 -0500
-+++ b/libgomp/config/posix/time.c	Thu Jan 29 14:06:16 2015 -0500
-@@ -28,6 +28,8 @@
-    The following implementation uses the most simple POSIX routines.
-    If present, POSIX 4 clocks should be used instead.  */
- 
-+#define _POSIX_C_SOURCE 199309L /* for clocks */
-+
- #include "libgomp.h"
- #include <unistd.h>
- #if TIME_WITH_SYS_TIME
-diff -r ffa879f29d52 libgcc/unwind-dw2-fde-dip.c
---- a/libgcc/unwind-dw2-fde-dip.c	Thu Jan 29 14:06:15 2015 -0500
-+++ b/libgcc/unwind-dw2-fde-dip.c	Thu Jan 29 14:06:18 2015 -0500
-@@ -46,33 +46,13 @@
- #include "unwind-compat.h"
- #include "gthr.h"
- 
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
--    && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
--	|| (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
-+#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR)
- # define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
--    && defined(__BIONIC__)
--# define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
--    && defined(__FreeBSD__) && __FreeBSD__ >= 7
--# define ElfW __ElfN
--# define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
--    && defined(__OpenBSD__)
--# define ElfW(type) Elf_##type
--# define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
--    && defined(TARGET_DL_ITERATE_PHDR) \
--    && defined(__sun__) && defined(__svr4__)
--# define USE_PT_GNU_EH_FRAME
-+# ifdef __OpenBSD__
-+#  define ElfW(type) Elf_##type
-+# elif defined(__FreeBSD__) && __FreeBSD__ >= 7
-+#  define ElfW __ElfN
-+# endif
- #endif
- 
- #if defined(USE_PT_GNU_EH_FRAME)
-diff -r b35df09b819f gcc/configure
---- a/gcc/configure	Thu Jan 29 14:06:18 2015 -0500
-+++ b/gcc/configure	Thu Jan 29 14:06:20 2015 -0500
-@@ -27356,6 +27356,9 @@
- else
-   gcc_cv_libc_provides_ssp=no
-     case "$target" in
-+       *-*-musl*)
-+         # All versions of musl provide stack protector
-+	 gcc_cv_libc_provides_ssp=yes;;
-        *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
-       # glibc 2.4 and later provides __stack_chk_fail and
-       # either __stack_chk_guard, or TLS access to stack guard canary.
-@@ -27388,6 +27391,7 @@
- 	 # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
- 	 # simply assert that glibc does provide this, which is true for all
- 	 # realistically usable GNU/Hurd configurations.
-+	 # All supported versions of musl provide it as well
- 	 gcc_cv_libc_provides_ssp=yes;;
-        *-*-darwin* | *-*-freebsd*)
- 	 ac_fn_c_check_func "$LINENO" "__stack_chk_fail" "ac_cv_func___stack_chk_fail"
-@@ -27477,6 +27481,9 @@
-       gcc_cv_target_dl_iterate_phdr=no
-     fi
-     ;;
-+  *-linux-musl*)
-+    gcc_cv_target_dl_iterate_phdr=yes
-+    ;;
- esac
- 
- if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
-diff -r b35df09b819f gcc/configure.ac
---- a/gcc/configure.ac	Thu Jan 29 14:06:18 2015 -0500
-+++ b/gcc/configure.ac	Thu Jan 29 14:06:20 2015 -0500
-@@ -5039,6 +5039,9 @@
-       gcc_cv_libc_provides_ssp,
-       [gcc_cv_libc_provides_ssp=no
-     case "$target" in
-+       *-*-musl*)
-+         # All versions of musl provide stack protector
-+	 gcc_cv_libc_provides_ssp=yes;;
-        *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
-       # glibc 2.4 and later provides __stack_chk_fail and
-       # either __stack_chk_guard, or TLS access to stack guard canary.
-@@ -5065,6 +5068,7 @@
- 	 # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
- 	 # simply assert that glibc does provide this, which is true for all
- 	 # realistically usable GNU/Hurd configurations.
-+	 # All supported versions of musl provide it as well
- 	 gcc_cv_libc_provides_ssp=yes;;
-        *-*-darwin* | *-*-freebsd*)
- 	 AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
-@@ -5131,6 +5135,9 @@
-       gcc_cv_target_dl_iterate_phdr=no
-     fi
-     ;;
-+  *-linux-musl*)
-+    gcc_cv_target_dl_iterate_phdr=yes
-+    ;;
- esac
- GCC_TARGET_TEMPLATE([TARGET_DL_ITERATE_PHDR])
- if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
-# HG changeset patch
-# Parent b6a339cae9f0607a291a2fe8de80caecd48f1ebd
-Get rid of ever-broken fixincludes on musl.
-
-diff -r b6a339cae9f0 fixincludes/mkfixinc.sh
---- a/fixincludes/mkfixinc.sh	Thu Jan 29 14:06:20 2015 -0500
-+++ b/fixincludes/mkfixinc.sh	Thu Jan 29 14:06:22 2015 -0500
-@@ -19,7 +19,8 @@
-     powerpc-*-eabi*    | \
-     powerpc-*-rtems*   | \
-     powerpcle-*-eabisim* | \
--    powerpcle-*-eabi* )
-+    powerpcle-*-eabi* | \
-+    *-musl* )
- 	#  IF there is no include fixing,
- 	#  THEN create a no-op fixer and exit
- 	(echo "#! /bin/sh" ; echo "exit 0" ) > ${target}
-# HG changeset patch
-# Parent 6c0bb7083dd2eba825f2693dc30d0e39359c1a66
-Support for i386-linux-musl and x86_64-linux-musl.
-
-diff -r 6c0bb7083dd2 gcc/config/i386/linux.h
---- a/gcc/config/i386/linux.h	Thu Jan 29 14:06:22 2015 -0500
-+++ b/gcc/config/i386/linux.h	Thu Jan 29 14:06:25 2015 -0500
-@@ -21,3 +21,4 @@
- 
- #define GNU_USER_LINK_EMULATION "elf_i386"
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1"
-diff -r 6c0bb7083dd2 gcc/config/i386/linux64.h
---- a/gcc/config/i386/linux64.h	Thu Jan 29 14:06:22 2015 -0500
-+++ b/gcc/config/i386/linux64.h	Thu Jan 29 14:06:25 2015 -0500
-@@ -30,3 +30,7 @@
- #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
- #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
- #define GLIBC_DYNAMIC_LINKERX32 "/libx32/ld-linux-x32.so.2"
-+
-+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1"
-+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
-+#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-x32.so.1"
-diff -r 6c0bb7083dd2 libitm/config/linux/x86/tls.h
---- a/libitm/config/linux/x86/tls.h	Thu Jan 29 14:06:22 2015 -0500
-+++ b/libitm/config/linux/x86/tls.h	Thu Jan 29 14:06:25 2015 -0500
-@@ -25,16 +25,19 @@
- #ifndef LIBITM_X86_TLS_H
- #define LIBITM_X86_TLS_H 1
- 
--#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
-+#if defined(__GLIBC_PREREQ)
-+#if __GLIBC_PREREQ(2, 10)
- /* Use slots in the TCB head rather than __thread lookups.
-    GLIBC has reserved words 10 through 13 for TM.  */
- #define HAVE_ARCH_GTM_THREAD 1
- #define HAVE_ARCH_GTM_THREAD_DISP 1
- #endif
-+#endif
- 
- #include "config/generic/tls.h"
- 
--#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
-+#if defined(__GLIBC_PREREQ)
-+#if __GLIBC_PREREQ(2, 10)
- namespace GTM HIDDEN {
- 
- #ifdef __x86_64__
-@@ -101,5 +104,6 @@
- 
- } // namespace GTM
- #endif /* >= GLIBC 2.10 */
-+#endif
- 
- #endif // LIBITM_X86_TLS_H
-# HG changeset patch
-# Parent 4802c181abe099c2f903184ace267c6a527ca91c
-Support for arm-linux-musl.
-
-diff -r 4802c181abe0 gcc/config/arm/linux-eabi.h
---- a/gcc/config/arm/linux-eabi.h	Thu Jan 29 14:06:25 2015 -0500
-+++ b/gcc/config/arm/linux-eabi.h	Thu Jan 29 14:06:27 2015 -0500
-@@ -77,6 +77,23 @@
-     %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \
-     %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}"
- 
-+/* For ARM musl currently supports four dynamic linkers:
-+   - ld-musl-arm.so.1 - for the EABI-derived soft-float ABI
-+   - ld-musl-armhf.so.1 - for the EABI-derived hard-float ABI
-+   - ld-musl-armeb.so.1 - for the EABI-derived soft-float ABI, EB
-+   - ld-musl-armebhf.so.1 - for the EABI-derived hard-float ABI, EB
-+   musl does not support the legacy OABI mode.
-+   All the dynamic linkers live in /lib.
-+   We default to soft-float, EL. */
-+#undef  MUSL_DYNAMIC_LINKER
-+#if TARGET_BIG_ENDIAN_DEFAULT
-+#define MUSL_DYNAMIC_LINKER_E "%{mlittle-endian:;:eb}"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E "%{mbig-endian:eb}"
-+#endif
-+#define MUSL_DYNAMIC_LINKER \
-+  "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}.so.1"
-+
- /* At this point, bpabi.h will have clobbered LINK_SPEC.  We want to
-    use the GNU/Linux version, not the generic BPABI version.  */
- #undef  LINK_SPEC
-diff -r 4802c181abe0 libitm/config/arm/hwcap.cc
---- a/libitm/config/arm/hwcap.cc	Thu Jan 29 14:06:25 2015 -0500
-+++ b/libitm/config/arm/hwcap.cc	Thu Jan 29 14:06:27 2015 -0500
-@@ -40,7 +40,11 @@
- 
- #ifdef __linux__
- #include <unistd.h>
-+#ifdef __GLIBC__
- #include <sys/fcntl.h>
-+#else
-+#include <fcntl.h>
-+#endif
- #include <elf.h>
- 
- static void __attribute__((constructor))
-# HG changeset patch
-# Parent f34ce414667f8513979b8a0507f3d6b934f1ebeb
-Support for mips-linux-musl.
-
-diff -r f34ce414667f gcc/config/mips/linux.h
---- a/gcc/config/mips/linux.h	Thu Jan 29 14:06:27 2015 -0500
-+++ b/gcc/config/mips/linux.h	Thu Jan 29 14:06:29 2015 -0500
-@@ -23,3 +23,10 @@
- #undef UCLIBC_DYNAMIC_LINKER
- #define UCLIBC_DYNAMIC_LINKER \
-   "%{mnan=2008:/lib/ld-uClibc-mipsn8.so.0;:/lib/ld-uClibc.so.0}"
-+
-+#if TARGET_ENDIAN_DEFAULT == 0 /* LE */
-+#define MUSL_DYNAMIC_LINKER_E "%{EB:;:el}"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E "%{EL:el}"
-+#endif
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips" MUSL_DYNAMIC_LINKER_E ".so.1"
-# HG changeset patch
-# Parent d4bad9a6572b0e8eacc08d2b1c40d03a6608bee5
-Support for powerpc-linux-musl.
-
-diff -r d4bad9a6572b gcc/config.gcc
---- a/gcc/config.gcc	Thu Jan 29 14:06:29 2015 -0500
-+++ b/gcc/config.gcc	Thu Jan 29 14:06:32 2015 -0500
-@@ -2334,6 +2334,10 @@
- 	    powerpc*-*-linux*paired*)
- 		tm_file="${tm_file} rs6000/750cl.h" ;;
- 	esac
-+        case ${target} in
-+            *-linux*-musl*)
-+                enable_secureplt=yes ;;
-+        esac
- 	if test x${enable_secureplt} = xyes; then
- 		tm_file="rs6000/secureplt.h ${tm_file}"
- 	fi
-diff -r d4bad9a6572b gcc/config/rs6000/linux64.h
---- a/gcc/config/rs6000/linux64.h	Thu Jan 29 14:06:29 2015 -0500
-+++ b/gcc/config/rs6000/linux64.h	Thu Jan 29 14:06:32 2015 -0500
-@@ -375,17 +375,21 @@
- #endif
- #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
- #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
-+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-powerpc.so.1"
-+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-powerpc64.so.1"
- #if DEFAULT_LIBC == LIBC_UCLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{mmusl:" M ";:" U "}}"
- #elif DEFAULT_LIBC == LIBC_GLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{muclibc:" U ";:%{mmusl:" M ";:" G "}}"
-+#elif DEFAULT_LIBC == LIBC_MUSL
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M "}}"
- #else
- #error "Unsupported DEFAULT_LIBC"
- #endif
- #define GNU_USER_DYNAMIC_LINKER32 \
--  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32)
-+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32)
- #define GNU_USER_DYNAMIC_LINKER64 \
--  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
-+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64)
- 
- #undef  DEFAULT_ASM_ENDIAN
- #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
-diff -r d4bad9a6572b gcc/config/rs6000/secureplt.h
---- a/gcc/config/rs6000/secureplt.h	Thu Jan 29 14:06:29 2015 -0500
-+++ b/gcc/config/rs6000/secureplt.h	Thu Jan 29 14:06:32 2015 -0500
-@@ -18,3 +18,4 @@
- <http://www.gnu.org/licenses/>.  */
- 
- #define CC1_SECURE_PLT_DEFAULT_SPEC "-msecure-plt"
-+#define LINK_SECURE_PLT_DEFAULT_SPEC "--secure-plt"
-diff -r d4bad9a6572b gcc/config/rs6000/sysv4.h
---- a/gcc/config/rs6000/sysv4.h	Thu Jan 29 14:06:29 2015 -0500
-+++ b/gcc/config/rs6000/sysv4.h	Thu Jan 29 14:06:32 2015 -0500
-@@ -537,6 +537,9 @@
- #ifndef CC1_SECURE_PLT_DEFAULT_SPEC
- #define CC1_SECURE_PLT_DEFAULT_SPEC ""
- #endif
-+#ifndef LINK_SECURE_PLT_DEFAULT_SPEC
-+#define LINK_SECURE_PLT_DEFAULT_SPEC ""
-+#endif
- 
- /* Pass -G xxx to the compiler.  */
- #define	CC1_SPEC "%{G*} %(cc1_cpu)" \
-@@ -585,7 +588,8 @@
- 
- /* Override the default target of the linker.  */
- #define	LINK_TARGET_SPEC \
--  ENDIAN_SELECT("", " --oformat elf32-powerpcle", "")
-+  ENDIAN_SELECT("", " --oformat elf32-powerpcle", "") \
-+  "%{!mbss-plt: %{!msecure-plt: %(link_secure_plt_default)}}"
- 
- /* Any specific OS flags.  */
- #define LINK_OS_SPEC "\
-@@ -763,15 +767,18 @@
- 
- #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
- #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-powerpc.so.1"
- #if DEFAULT_LIBC == LIBC_UCLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{mmusl:" M ";:" U "}}"
-+#elif DEFAULT_LIBC == LIBC_MUSL
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M "}}"
- #elif !defined (DEFAULT_LIBC) || DEFAULT_LIBC == LIBC_GLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{muclibc:" U ";:%{mmusl:" M ";:" G "}}"
- #else
- #error "Unsupported DEFAULT_LIBC"
- #endif
- #define GNU_USER_DYNAMIC_LINKER \
--  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
-+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER)
- 
- #define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
-   %{rdynamic:-export-dynamic} \
-@@ -894,6 +901,7 @@
-   { "link_os_openbsd",		LINK_OS_OPENBSD_SPEC },			\
-   { "link_os_default",		LINK_OS_DEFAULT_SPEC },			\
-   { "cc1_secure_plt_default",	CC1_SECURE_PLT_DEFAULT_SPEC },		\
-+  { "link_secure_plt_default",	LINK_SECURE_PLT_DEFAULT_SPEC },		\
-   { "cpp_os_ads",		CPP_OS_ADS_SPEC },			\
-   { "cpp_os_yellowknife",	CPP_OS_YELLOWKNIFE_SPEC },		\
-   { "cpp_os_mvme",		CPP_OS_MVME_SPEC },			\
-diff -r 47a8492e5aa7 gcc/config/aarch64/aarch64-linux.h
---- a/gcc/config/aarch64/aarch64-linux.h	Thu Jan 29 14:06:31 2015 -0500
-+++ b/gcc/config/aarch64/aarch64-linux.h	Thu Jan 29 14:06:34 2015 -0500
-@@ -23,6 +23,8 @@
- 
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1"
- 
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64.so.1"
-+
- #define CPP_SPEC "%{pthread:-D_REENTRANT}"
- 
- #define LINUX_TARGET_LINK_SPEC  "%{h*}		\
-# HG changeset patch
-# Parent 9f4208089e8987637569ce7b294256c536396299
-Microblaze support (again).
-
-diff -r 9f4208089e89 gcc/config/microblaze/linux.h
---- a/gcc/config/microblaze/linux.h	Thu Jan 29 14:06:34 2015 -0500
-+++ b/gcc/config/microblaze/linux.h	Thu Jan 29 14:06:36 2015 -0500
-@@ -25,7 +25,22 @@
- #undef TLS_NEEDS_GOT
- #define TLS_NEEDS_GOT 1
- 
--#define DYNAMIC_LINKER "/lib/ld.so.1"
-+#if TARGET_BIG_ENDIAN_DEFAULT == 0 /* LE */
-+#define MUSL_DYNAMIC_LINKER_E "%{EB:;:el}"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E "%{EL:el}"
-+#endif
-+
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-microblaze" MUSL_DYNAMIC_LINKER_E ".so.1"
-+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
-+
-+#if DEFAULT_LIBC == LIBC_MUSL
-+#define DYNAMIC_LINKER MUSL_DYNAMIC_LINKER
-+#else
-+#define DYNAMIC_LINKER GLIBC_DYNAMIC_LINKER
-+#endif
-+
-+
- #undef  SUBTARGET_EXTRA_SPECS
- #define SUBTARGET_EXTRA_SPECS \
-   { "dynamic_linker", DYNAMIC_LINKER }
-From 478ee0c03a08e2ef9371fd88d516738936943e78 Mon Sep 17 00:00:00 2001
-From: David Holsgrove <david.holsgrove@xilinx.com>
-Date: Fri, 28 Sep 2012 16:32:03 +1000
-Subject: [PATCH 06/11] [Patch, microblaze]: Add SIZE_TYPE and PTRDIFF_TYPE to
- microblaze.h
-
-Fixes warnings like;
-
-warning: format '%zX' expects argument of type 'size_t',
-but argument 3 has type 'unsigned int' [-Wformat]
-
-Changelog
-
-2013-03-18  David Holsgrove <david.holsgrove@xilinx.com>
-
- * gcc/config/microblaze/microblaze.h: Define SIZE_TYPE
-   and PTRDIFF_TYPE.
-
-Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com>
----
- gcc/config/microblaze/microblaze.h |    6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff -r 0dbe9a3f7670 gcc/config/microblaze/microblaze.h
---- a/gcc/config/microblaze/microblaze.h	Thu Jan 29 14:06:36 2015 -0500
-+++ b/gcc/config/microblaze/microblaze.h	Thu Jan 29 14:06:38 2015 -0500
-@@ -218,6 +218,12 @@
- #undef PTRDIFF_TYPE
- #define PTRDIFF_TYPE "int"
- 
-+#undef SIZE_TYPE
-+#define SIZE_TYPE "unsigned int"
-+
-+#undef PTRDIFF_TYPE
-+#define PTRDIFF_TYPE "int"
-+
- #define CONSTANT_ALIGNMENT(EXP, ALIGN)					\
-   ((TREE_CODE (EXP) == STRING_CST  || TREE_CODE (EXP) == CONSTRUCTOR)	\
-    && (ALIGN) < BITS_PER_WORD						\
-diff -r 94ebb0799454 gcc/config/sh/linux.h
---- a/gcc/config/sh/linux.h	Fri Sep 28 16:32:03 2012 +1000
-+++ b/gcc/config/sh/linux.h	Thu Jan 29 14:06:41 2015 -0500
-@@ -43,7 +43,14 @@
- 
- #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
- 
-+#if TARGET_BIG_ENDIAN_DEFAULT /* BE */
-+#define MUSL_DYNAMIC_LINKER_E "eb"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E
-+#endif
-+
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-sh" MUSL_DYNAMIC_LINKER_E ".so.1"
- 
- #undef SUBTARGET_LINK_EMUL_SUFFIX
- #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
-
-Use libc write(2) instead of undefined __write() to get rid
-of an error when later linking against libgcc.a
-This should fix the webkitgtk build, see:
-http://build.voidlinux.eu/builders/armv6l-musl_builder/builds/2991/steps/shell_3/logs/stdio
-
---- a/libgcc/config/arm/linux-atomic-64bit.c	2014-01-02 23:25:22.000000000 +0100
-+++ b/libgcc/config/arm/linux-atomic-64bit.c	2015-08-14 10:56:03.383219614 +0200
-@@ -33,7 +33,7 @@
-    kernels; we check for that in an init section and bail out rather
-    unceremoneously.  */
- 
--extern unsigned int __write (int fd, const void *buf, unsigned int count);
-+extern unsigned int write (int fd, const void *buf, unsigned int count);
- extern void abort (void);
- 
- /* Kernel helper for compare-and-exchange.  */
-@@ -56,7 +56,7 @@
- 	 for the user - I'm not sure I can rely on much else being
- 	 available at this point, so do the same as generic-morestack.c
- 	 write () and abort ().  */
--      __write (2 /* stderr.  */, err, sizeof (err));
-+      write (2 /* stderr.  */, err, sizeof (err));
-       abort ();
-     }
- };
diff --git a/srcpkgs/gcc/files/gcc-6.2.1-musl.diff b/srcpkgs/gcc/files/gcc-6.2.1-musl.diff
new file mode 100644
index 0000000..053d1ea
--- /dev/null
+++ b/srcpkgs/gcc/files/gcc-6.2.1-musl.diff
@@ -0,0 +1,556 @@
+# HG changeset patch
+# Parent 90a7a3809a7ccb60e357b5e88382260877f82257
+Use the generic implementation of libstdc++ primitives when we're on musl, not the glibc one.
+
+diff -r 90a7a3809a7c libstdc++-v3/configure.host
+--- a/libstdc++-v3/configure.host	Thu Dec 24 11:22:15 2015 -0500
++++ b/libstdc++-v3/configure.host	Thu Dec 24 11:24:45 2015 -0500
+@@ -266,6 +266,13 @@
+     os_include_dir="os/bsd/freebsd"
+     ;;
+   gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
++    # check for musl by target
++    case "${host_os}" in
++      *-musl*)
++        os_include_dir="os/generic"
++        ;;
++      *)
++
+     if [ "$uclibc" = "yes" ]; then
+       os_include_dir="os/uclibc"
+     elif [ "$bionic" = "yes" ]; then
+@@ -281,6 +281,9 @@
+       os_include_dir="os/gnu-linux"
+     fi
+     ;;
++
++    esac
++    ;;
+   hpux*)
+     os_include_dir="os/hpux"
+     ;;
+diff -r 30a957f60ddb gcc/ginclude/stddef.h
+--- a/gcc/ginclude/stddef.h	Thu Dec 24 11:24:45 2015 -0500
++++ b/gcc/ginclude/stddef.h	Thu Dec 24 11:24:47 2015 -0500
+@@ -184,6 +184,7 @@
+ #ifndef _GCC_SIZE_T
+ #ifndef _SIZET_
+ #ifndef __size_t
++#ifndef __DEFINED_size_t /* musl */
+ #define __size_t__	/* BeOS */
+ #define __SIZE_T__	/* Cray Unicos/Mk */
+ #define _SIZE_T
+@@ -200,6 +201,7 @@
+ #define ___int_size_t_h
+ #define _GCC_SIZE_T
+ #define _SIZET_
++#define __DEFINED_size_t /* musl */
+ #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
+   || defined(__DragonFly__) \
+   || defined(__FreeBSD_kernel__)
+@@ -218,6 +220,7 @@
+ typedef long ssize_t;
+ #endif /* __BEOS__ */
+ #endif /* !(defined (__GNUG__) && defined (size_t)) */
++#endif /* __DEFINED_size_t */
+ #endif /* __size_t */
+ #endif /* _SIZET_ */
+ #endif /* _GCC_SIZE_T */
+# HG changeset patch
+# Parent 90228af47e55eb338c7f672e4aca5ac81cf5f14c
+A fix for libgomp to correctly request a POSIX version for time support.
+
+diff -r 90228af47e55 libgomp/config/posix/time.c
+--- a/libgomp/config/posix/time.c	Thu Dec 24 11:24:47 2015 -0500
++++ b/libgomp/config/posix/time.c	Thu Dec 24 11:24:49 2015 -0500
+@@ -29,6 +29,8 @@
+    The following implementation uses the most simple POSIX routines.
+    If present, POSIX 4 clocks should be used instead.  */
+ 
++#define _POSIX_C_SOURCE 199309L /* for clocks */
++
+ #include "libgomp.h"
+ #include <unistd.h>
+ #if TIME_WITH_SYS_TIME
+diff -r b08d4bc3d2ba libgcc/unwind-dw2-fde-dip.c
+--- a/libgcc/unwind-dw2-fde-dip.c	Thu Dec 24 11:24:49 2015 -0500
++++ b/libgcc/unwind-dw2-fde-dip.c	Thu Dec 24 11:24:51 2015 -0500
+@@ -46,6 +46,10 @@
+ #include "unwind-compat.h"
+ #include "gthr.h"
+ 
++#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR)
++# define USE_PT_GNU_EH_FRAME
++#endif
++
+ #if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
+     && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
+ 	|| (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
+diff -r 1f375ed3689f gcc/gcc.c
+--- a/gcc/gcc.c	Thu Dec 24 11:24:53 2015 -0500
++++ b/gcc/gcc.c	Thu Dec 24 11:24:56 2015 -0500
+@@ -860,7 +860,7 @@
+ #ifndef LINK_SSP_SPEC
+ #ifdef TARGET_LIBC_PROVIDES_SSP
+ #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
+-		       "|fstack-protector-strong|fstack-protector-explicit:}"
++		       "|fstack-protector-strong|fstack-protector-explicit:-lssp_nonshared}"
+ #else
+ #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \
+ 		       "|fstack-protector-strong|fstack-protector-explicit" \
+# HG changeset patch
+# Parent 76b553fabcf19eec5df2df7f05ce15a4bf8c3996
+Support for mips-linux-musl.
+
+diff -r 76b553fabcf1 gcc/config/mips/linux.h
+--- a/gcc/config/mips/linux.h	Thu Dec 24 11:25:02 2015 -0500
++++ b/gcc/config/mips/linux.h	Thu Dec 24 11:25:04 2015 -0500
+@@ -31,6 +31,13 @@
+ #undef UCLIBC_DYNAMIC_LINKER32
+ #define UCLIBC_DYNAMIC_LINKER32 \
+   "%{mnan=2008:/lib/ld-uClibc-mipsn8.so.0;:/lib/ld-uClibc.so.0}"
++
++#undef MUSL_DYNAMIC_LINKER32
++#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-mips%{EL:el}%{msoft-float:-sf}.so.1"
++#undef MUSL_DYNAMIC_LINKER64
++#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-mips64%{EL:el}%{msoft-float:-sf}.so.1"
++#define MUSL_DYNAMIC_LINKERN32 "/lib/ld-musl-mipsn32%{EL:el}%{msoft-float:-sf}.so.1"
++
+ #undef UCLIBC_DYNAMIC_LINKER64
+ #define UCLIBC_DYNAMIC_LINKER64 \
+   "%{mnan=2008:/lib/ld64-uClibc-mipsn8.so.0;:/lib/ld64-uClibc.so.0}"
+# HG changeset patch
+# Parent 971d410411735f0b04eb07236659097986926213
+Support for powerpc-linux-musl.
+
+diff -r 971d41041173 gcc/config.gcc
+--- a/gcc/config.gcc	Fri Dec 25 08:44:09 2015 -0500
++++ b/gcc/config.gcc	Fri Dec 25 09:42:16 2015 -0500
+@@ -2464,6 +2464,10 @@
+ 	    powerpc*-*-linux*paired*)
+ 		tm_file="${tm_file} rs6000/750cl.h" ;;
+ 	esac
++        case ${target} in
++            *-linux*-musl*)
++                enable_secureplt=yes ;;
++        esac
+ 	if test x${enable_secureplt} = xyes; then
+ 		tm_file="rs6000/secureplt.h ${tm_file}"
+ 	fi
+diff -r 9555ffb5873b gcc/config/aarch64/aarch64-linux.h
+--- a/gcc/config/aarch64/aarch64-linux.h	Thu Dec 24 11:25:06 2015 -0500
++++ b/gcc/config/aarch64/aarch64-linux.h	Thu Dec 24 11:25:09 2015 -0500
+@@ -32,6 +32,8 @@
+ #undef  CC1_SPEC
+ #define CC1_SPEC GNU_USER_TARGET_CC1_SPEC ASAN_CC1_SPEC
+ 
++#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64.so.1"
++
+ #define CPP_SPEC "%{pthread:-D_REENTRANT}"
+ 
+ #define LINUX_TARGET_LINK_SPEC  "%{h*}		\
+diff -r a522e4b04c77 gcc/config/microblaze/microblaze.h
+--- a/gcc/config/microblaze/microblaze.h	Thu Dec 24 11:25:11 2015 -0500
++++ b/gcc/config/microblaze/microblaze.h	Thu Dec 24 11:25:13 2015 -0500
+@@ -218,6 +218,12 @@
+ #undef PTRDIFF_TYPE
+ #define PTRDIFF_TYPE "int"
+ 
++#undef SIZE_TYPE
++#define SIZE_TYPE "unsigned int"
++
++#undef PTRDIFF_TYPE
++#define PTRDIFF_TYPE "int"
++
+ #define CONSTANT_ALIGNMENT(EXP, ALIGN)					\
+   ((TREE_CODE (EXP) == STRING_CST  || TREE_CODE (EXP) == CONSTRUCTOR)	\
+    && (ALIGN) < BITS_PER_WORD						\
+diff -r f2936ad874dd gcc/config/sh/linux.h
+--- a/gcc/config/sh/linux.h	Fri Sep 28 16:32:03 2012 +1000
++++ b/gcc/config/sh/linux.h	Thu Dec 24 11:25:15 2015 -0500
+@@ -64,7 +64,14 @@
+ 
+ #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
+ 
++#if TARGET_BIG_ENDIAN_DEFAULT /* BE */
++#define MUSL_DYNAMIC_LINKER_E "eb"
++#else
++#define MUSL_DYNAMIC_LINKER_E
++#endif
++
+ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
++#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-sh" MUSL_DYNAMIC_LINKER_E ".so.1"
+ 
+ #undef SUBTARGET_LINK_EMUL_SUFFIX
+ #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"
+Do not use weak references on any targets for gthread. Necessary on musl, safe elsewhere.
+
+diff -r e180e4cfc879 libgcc/gthr.h
+--- a/libgcc/gthr.h	Thu Dec 24 11:25:15 2015 -0500
++++ b/libgcc/gthr.h	Thu Dec 24 11:25:17 2015 -0500
+@@ -136,10 +136,8 @@
+ /* The pe-coff weak support isn't fully compatible to ELF's weak.
+    For static libraries it might would work, but as we need to deal
+    with shared versions too, we disable it for mingw-targets.  */
+-#ifdef __MINGW32__
+ #undef GTHREAD_USE_WEAK
+ #define GTHREAD_USE_WEAK 0
+-#endif
+ 
+ #ifndef GTHREAD_USE_WEAK
+ #define GTHREAD_USE_WEAK 1
+From 0a9ed0479203cb7e69c3745b0c259007410f39ba Mon Sep 17 00:00:00 2001
+From: Szabolcs Nagy <nsz@port70.net>
+Date: Sat, 24 Oct 2015 20:09:53 +0000
+Subject: [PATCH 47/47] libgcc_s: Use alias for __cpu_indicator_init instead of
+ symver
+
+Adapter from
+
+https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00899.html
+
+This fix was debated but hasnt been applied gcc upstream since
+they expect musl to support '@' in symbol versioning which is
+a sun/gnu versioning extention. This patch however avoids the
+need for the '@' symbols at all
+
+libgcc/Changelog:
+
+2015-05-11  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	* config/i386/cpuinfo.c (__cpu_indicator_init_local): Add.
+	(__cpu_indicator_init@GCC_4.8.0, __cpu_model@GCC_4.8.0): Remove.
+
+	* config/i386/t-linux (HOST_LIBGCC2_CFLAGS): Remove -DUSE_ELF_SYMVER.
+
+gcc/Changelog:
+
+2015-05-11  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+	* config/i386/i386.c (ix86_expand_builtin): Make __builtin_cpu_init
+	call __cpu_indicator_init_local instead of __cpu_indicator_init.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Rejected
+
+ gcc/config/i386/i386.c       | 4 ++--
+ libgcc/config/i386/cpuinfo.c | 6 +++---
+ libgcc/config/i386/t-linux   | 2 +-
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
+index 861a029..1c97d72 100644
+--- a/gcc/config/i386/i386.c
++++ b/gcc/config/i386/i386.c
+@@ -40323,10 +40323,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget,
+     {
+     case IX86_BUILTIN_CPU_INIT:
+       {
+-	/* Make it call __cpu_indicator_init in libgcc. */
++	/* Make it call __cpu_indicator_init_local in libgcc.a. */
+ 	tree call_expr, fndecl, type;
+         type = build_function_type_list (integer_type_node, NULL_TREE); 
+-	fndecl = build_fn_decl ("__cpu_indicator_init", type);
++	fndecl = build_fn_decl ("__cpu_indicator_init_local", type);
+ 	call_expr = build_call_expr (fndecl, 0); 
+ 	return expand_expr (call_expr, target, mode, EXPAND_NORMAL);
+       }
+diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c
+index 8c2248d..6c82f15 100644
+--- a/libgcc/config/i386/cpuinfo.c
++++ b/libgcc/config/i386/cpuinfo.c
+@@ -485,7 +485,7 @@ __cpu_indicator_init (void)
+   return 0;
+ }
+ 
+-#if defined SHARED && defined USE_ELF_SYMVER
+-__asm__ (".symver __cpu_indicator_init, __cpu_indicator_init@GCC_4.8.0");
+-__asm__ (".symver __cpu_model, __cpu_model@GCC_4.8.0");
++#ifndef SHARED
++int __cpu_indicator_init_local (void)
++  __attribute__ ((weak, alias ("__cpu_indicator_init")));
+ #endif
+diff --git a/libgcc/config/i386/t-linux b/libgcc/config/i386/t-linux
+index 11bb46e..4f47f7b 100644
+--- a/libgcc/config/i386/t-linux
++++ b/libgcc/config/i386/t-linux
+@@ -3,4 +3,4 @@
+ # t-slibgcc-elf-ver and t-linux
+ SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/i386/libgcc-glibc.ver
+ 
+-HOST_LIBGCC2_CFLAGS += -mlong-double-80 -DUSE_ELF_SYMVER
++HOST_LIBGCC2_CFLAGS += -mlong-double-80
+-- 
+2.9.0
+
+--- a/boehm-gc/os_dep.c	2013-09-17 07:46:00.969884340 +0000
++++ b/boehm-gc/os_dep.c	2013-09-17 06:53:53.629884946 +0000
+@@ -26,7 +26,7 @@
+ #     define __KERNEL__
+ #     include <asm/signal.h>
+ #     undef __KERNEL__
+-#   else
++#   elif defined(__GLIBC__)
+       /* Kernels prior to 2.1.1 defined struct sigcontext_struct instead of */
+       /* struct sigcontext.  libc6 (glibc2) uses "struct sigcontext" in     */
+       /* prototypes, so we have to include the top-level sigcontext.h to    */
+--- a/boehm-gc/dyn_load.c
++++ b/boehm-gc/dyn_load.c
+@@ -459,9 +459,7 @@
+ /* For glibc 2.2.4+.  Unfortunately, it doesn't work for older	*/
+ /* versions.  Thanks to Jakub Jelinek for most of the code.	*/
+ 
+-# if (defined(LINUX) || defined (__GLIBC__)) /* Are others OK here, too? */ \
+-     && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
+-         || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG))) 
++# if (defined(LINUX) || defined (__GLIBC__))
+ 
+ /* We have the header files for a glibc that includes dl_iterate_phdr.	*/
+ /* It may still not be available in the library on the target system.   */
+--- a/boehm-gc/include/private/gcconfig.h
++++ b/boehm-gc/include/private/gcconfig.h
+@@ -684,7 +684,7 @@
+ #       ifdef __ELF__
+ #            define DYNAMIC_LOADING
+ #	     include <features.h>
+-#	     if defined(__GLIBC__)&& __GLIBC__>=2
++#	     if 1
+ #              define SEARCH_FOR_DATA_START
+ #	     else /* !GLIBC2 */
+                extern char **__environ;
+@@ -1147,7 +1147,7 @@
+ #              define DATASTART ((ptr_t)((((word) (_etext)) + 0xfff) & ~0xfff))
+ #	     endif
+ #	     include <features.h>
+-#	     if defined(__GLIBC__) && __GLIBC__ >= 2
++#	     if 1
+ #		 define SEARCH_FOR_DATA_START
+ #	     else
+      	         extern char **__environ;
+@@ -1367,7 +1367,7 @@
+ #       define HBLKSIZE 4096
+ #     endif
+ #     define USE_GENERIC_PUSH_REGS
+-#     if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 2 || __GLIBC__ > 2
++#     if 1
+ #        define LINUX_STACKBOTTOM
+ #     else
+ #        define STACKBOTTOM 0x80000000
+@@ -1858,7 +1858,7 @@
+ #       ifdef __ELF__
+ #            define DYNAMIC_LOADING
+ #	     include <features.h>
+-#	     if defined(__GLIBC__) && __GLIBC__ >= 2
++#	     if 1
+ #		 define SEARCH_FOR_DATA_START
+ #	     else
+      	         extern char **__environ;
+--- a/libjava/gnu/gcj/convert/natIconv.cc
++++ b/libjava/gnu/gcj/convert/natIconv.cc
+@@ -24,6 +24,13 @@
+ 
+ #ifdef HAVE_ICONV
+ #include <iconv.h>
++#include <endian.h>
++
++#if __BYTE_ORDER == __BIG_ENDIAN
++#define UCS2_CHARSET "UCS-2BE"
++#else
++#define UCS2_CHARSET "UCS-2LE"
++#endif
+ 
+ template<typename T>
+ static inline size_t
+@@ -45,7 +52,7 @@
+   _Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer);
+   buffer[len] = '\0';
+ 
+-  iconv_t h = iconv_open ("UCS-2", buffer);
++  iconv_t h = iconv_open (UCS2_CHARSET, buffer);
+   if (h == (iconv_t) -1)
+     throw new ::java::io::UnsupportedEncodingException (encoding);
+ 
+@@ -99,18 +106,6 @@
+ 	throw new ::java::io::CharConversionException ();
+     }
+ 
+-  if (iconv_byte_swap)
+-    {
+-      size_t max = (old_out - outavail) / sizeof (jchar);
+-      for (size_t i = 0; i < max; ++i)
+-	{
+-	  // Byte swap.
+-	  jchar c = (((out[outpos + i] & 0xff) << 8)
+-		     | ((out[outpos + i] >> 8) & 0xff));
+-	  outbuf[i] = c;
+-	}
+-    }
+-
+   inpos += old_in - inavail;
+   return (old_out - outavail) / sizeof (jchar);
+ #else /* HAVE_ICONV */
+@@ -145,7 +140,7 @@
+   _Jv_GetStringUTFRegion (encoding, 0, encoding->length(), buffer);
+   buffer[len] = '\0';
+ 
+-  iconv_t h = iconv_open (buffer, "UCS-2");
++  iconv_t h = iconv_open (buffer, UCS2_CHARSET);
+   if (h == (iconv_t) -1)
+     throw new ::java::io::UnsupportedEncodingException (encoding);
+ 
+@@ -187,20 +182,6 @@
+   char *inbuf = (char *) &chars[inpos];
+   char *outbuf = (char *) &out[count];
+ 
+-  if (iconv_byte_swap)
+-    {
+-      // Ugly performance penalty -- don't use losing systems!
+-      temp_buffer = (jchar *) _Jv_Malloc (inlength * sizeof (jchar));
+-      for (int i = 0; i < inlength; ++i)
+-	{
+-	  // Byte swap.
+-	  jchar c = (((chars[inpos + i] & 0xff) << 8)
+-		     | ((chars[inpos + i] >> 8) & 0xff));
+-	  temp_buffer[i] = c;
+-	}
+-      inbuf = (char *) temp_buffer;
+-    }
+-
+   size_t loop_old_in = old_in;
+   while (1)
+     {
+@@ -252,44 +233,7 @@
+ jboolean
+ gnu::gcj::convert::IOConverter::iconv_init (void)
+ {
+-  // Some versions of iconv() always return their UCS-2 results in
+-  // big-endian order, and they also require UCS-2 inputs to be in
+-  // big-endian order.  For instance, glibc 2.1.3 does this.  If the
+-  // UTF-8=>UCS-2 iconv converter has this feature, then we assume
+-  // that all UCS-2 converters do.  (This might not be the best
+-  // heuristic, but is is all we've got.)
+-  jboolean result = false;
+-#ifdef HAVE_ICONV
+-  iconv_t handle = iconv_open ("UCS-2", "UTF-8");
+-  if (handle != (iconv_t) -1)
+-    {
+-      jchar c;
+-      unsigned char in[4];
+-      char *inp, *outp;
+-      size_t inc, outc, r;
+-
+-      // This is the UTF-8 encoding of \ufeff.  At least Tru64 UNIX libiconv
+-      // needs the trailing NUL byte, otherwise iconv fails with EINVAL.
+-      in[0] = 0xef;
+-      in[1] = 0xbb;
+-      in[2] = 0xbf;
+-      in[3] = 0x00;
+-
+-      inp = (char *) in;
+-      inc = 4;
+-      outp = (char *) &c;
+-      outc = 2;
+-
+-      r = iconv_adapter (iconv, handle, &inp, &inc, &outp, &outc);
+-      // Conversion must be complete for us to use the result.
+-      if (r != (size_t) -1 && inc == 0 && outc == 0)
+-	result = (c != 0xfeff);
+-
+-      // Release iconv handle.
+-      iconv_close (handle);
+-    }
+-#endif /* HAVE_ICONV */
+-  return result;
++  return false;
+ }
+ 
+ void
+--- a/libjava/gnu/classpath/natSystemProperties.cc
++++ b/libjava/gnu/classpath/natSystemProperties.cc
+@@ -289,7 +289,7 @@
+   // just default to `en_US'.
+   setlocale (LC_ALL, "");
+   char *locale = setlocale (LC_MESSAGES, "");
+-  if (locale && strlen (locale) >= 2)
++  if (locale && strlen (locale) >= 2 && (locale[2] == '\0' || locale[2] == '_'))
+     {
+       char buf[3];
+       buf[2] = '\0';
+--- a/libjava/posix-threads.cc
++++ b/libjava/posix-threads.cc
+@@ -657,6 +657,7 @@
+   struct sched_param param;
+   pthread_attr_t attr;
+   struct starter *info;
++  size_t ss;
+ 
+   if (data->flags & FLAG_START)
+     return;
+@@ -675,8 +676,25 @@
+   // Set stack size if -Xss option was given.
+   if (gcj::stack_size > 0)
+     {
+-      int e = pthread_attr_setstacksize (&attr, gcj::stack_size);
++      ss = gcj::stack_size;
++    }
++  else
++    {
++      int e = pthread_attr_getstacksize (&attr, &ss);
++      if (e != 0)
++        JvFail (strerror (e));
++
++      // Request at least 1meg of stack
++      if (ss >= 1024 * 1024)
++        ss = 0;
++      else
++        ss = 1024 * 1024;
++    }
++
++  if (ss)
++    {
++      int e = pthread_attr_setstacksize (&attr, ss);
+       if (e != 0)
+ 	JvFail (strerror (e));
+     }
+ 
+   info = (struct starter *) _Jv_AllocBytes (sizeof (struct starter));
+--- a/libgo/mksysinfo.sh
++++ b/libgo/mksysinfo.sh
+@@ -166,6 +166,13 @@ cat > sysinfo.c <<EOF
+ #if defined(HAVE_SCHED_H)
+ #include <sched.h>
+ #endif
++#if !defined(__GLIBC__)
++#include <sys/types.h>
++#undef off64_t
++#undef loff_t
++typedef off_t loff_t;
++typedef off_t off64_t;
++#endif
+ 
+ /* Constants that may only be defined as expressions on some systems,
+    expressions too complex for -fdump-go-spec to handle.  These are
+--- a/libgo/runtime/proc.c	2016-09-23 16:17:22.000000000 +0200
++++ b/libgo/runtime/proc.c	2016-10-03 07:33:42.186000000 +0200
+@@ -150,6 +150,20 @@
+ 		asm ("st %%g7, %0" : "=m"(c->uc_mcontext.gregs[REG_G7]));
+ }
+ 
++# elif !defined(__GLIBC__)
++
++static inline void
++initcontext(void)
++{
++	// FIXME: Do we need to save (part of) the current context?
++}
++
++static inline void
++fixcontext(ucontext_t *c __attribute__ ((unused)))
++{
++	// FIXME: Do we need to restore (part of) the current context?
++}
++
+ # else
+ 
+ #  error unknown case for SETCONTEXT_CLOBBERS_TLS
diff --git a/srcpkgs/gcc/patches/fix-cxxflags-passing.patch b/srcpkgs/gcc/patches/fix-cxxflags-passing.patch
new file mode 100644
index 0000000..dda2a50
--- /dev/null
+++ b/srcpkgs/gcc/patches/fix-cxxflags-passing.patch
@@ -0,0 +1,10 @@
+--- Makefile.in.orig
++++ Makefile.in
+@@ -169,6 +169,7 @@
+ # built for the build system to override those in BASE_FLAGS_TO_PASSS.
+ EXTRA_BUILD_FLAGS = \
+ 	CFLAGS="$(CFLAGS_FOR_BUILD)" \
++	CXXFLAGS="$(CXXFLAGS_FOR_BUILD)" \
+ 	LDFLAGS="$(LDFLAGS_FOR_BUILD)"
+ 
+ # This is the list of directories to built for the host system.
diff --git a/srcpkgs/gcc/patches/fix-musl-execinfo.patch b/srcpkgs/gcc/patches/fix-musl-execinfo.patch
new file mode 100644
index 0000000..583eac7
--- /dev/null
+++ b/srcpkgs/gcc/patches/fix-musl-execinfo.patch
@@ -0,0 +1,33 @@
+There is no <execinfo.h> in musl libc
+
+--- libvtv/vtv_rts.cc	2016-09-23 16:17:11.000000000 +0200
++++ libvtc/vtv_rts.cc	2016-09-25 15:08:57.896000000 +0200
+@@ -124,7 +124,7 @@
+ #include <windows.h>
+ #include <winternl.h>
+ #include <psapi.h>
+-#else
++#elif defined (__GLIBC__)
+ #include <execinfo.h>
+ #endif
+ 
+--- libvtv/vtv_utils.cc	2016-09-23 16:17:11.000000000 +0200
++++ libvtv/vtv_utils.cc	2016-09-25 15:15:35.529000000 +0200
+@@ -34,7 +34,7 @@
+ #include <string.h>
+ #if defined (__CYGWIN__) || defined (__MINGW32__)
+ #include <windows.h>
+-#else
++#elif defined (__GLIBC__)
+ #include <execinfo.h>
+ #endif
+ 
+@@ -178,7 +178,7 @@
+ 
+   __vtv_add_to_log (vtv_failures_log_fd, "%s", log_msg);
+ 
+-#if !defined (__CYGWIN__) && !defined (__MINGW32__)
++#if !defined (__CYGWIN__) && !defined (__MINGW32__) && defined(__GLIBC__)
+   if (generate_backtrace)
+     {
+ #define STACK_DEPTH 20
diff --git a/srcpkgs/gcc/patches/gcc-spec-env-r1.patch b/srcpkgs/gcc/patches/gcc-spec-env-r1.patch
deleted file mode 100644
index 3eb0141..0000000
--- a/srcpkgs/gcc/patches/gcc-spec-env-r1.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-2013-08-22  Magnus Granberg <zorry@gentoo.org>
-
-	* gcc/gcc.c (main): Add support for external spec file via the GCC_SPECS env var
-	and move the process of the user specifed specs.
-
-    This allows us to easily control pie/ssp defaults with gcc-config profiles.
-    Original patch by Rob Holland
-    Extended to support multiple entries separated by ':' by Kevin F. Quinn
-    Modified to use getenv instead of poisoned GET_ENVIRONMENT by Ryan Hill
-    Modified to process the GCC_SPECS env var befor DRIVER_SELF_SPECS by Magnus Granberg
-
---- gcc/gcc.c	2013-02-05 16:55:31.000000000 +0100
-+++ gcc/gcc.c	2013-07-26 02:32:14.625089864 +0200
-@@ -6427,6 +6428,48 @@ main (int argc, char **argv)
-     do_option_spec (option_default_specs[i].name,
- 		    option_default_specs[i].spec);
- 
-+#if !(defined (__MSDOS__) || defined (OS2) || defined (VMS) || defined (WIN32))
-+  /* Add specs listed in GCC_SPECS.  Note; in the process of separating
-+   * each spec listed, the string is overwritten at token boundaries
-+   * (':') with '\0', an effect of strtok_r().
-+   */
-+  specs_file = getenv ("GCC_SPECS");
-+  if (specs_file && (strlen(specs_file) > 0))
-+    {
-+      char *spec, *saveptr;
-+      for (spec=strtok_r(specs_file,":",&saveptr);
-+           spec!=NULL;
-+           spec=strtok_r(NULL,":",&saveptr))
-+        {
-+          struct user_specs *user = (struct user_specs *)
-+            xmalloc (sizeof (struct user_specs));
-+          user->next = (struct user_specs *) 0;
-+          user->filename = spec;
-+          if (user_specs_tail)
-+            user_specs_tail->next = user;
-+          else
-+            user_specs_head = user;
-+          user_specs_tail = user;
-+        }
-+    }
-+#endif
-+  /* Process any user specified specs in the order given on the command
-+   *     line.  */
-+  for (uptr = user_specs_head; uptr; uptr = uptr->next)
-+    {
-+      char *filename = find_a_file (&startfile_prefixes, uptr->filename,
-+        R_OK, true);
-+      read_specs (filename ? filename : uptr->filename, false, true);
-+    }
-+  /* Process any user self specs.  */
-+  {
-+    struct spec_list *sl;
-+    for (sl = specs; sl; sl = sl->next)
-+      if (sl->name_len == sizeof "self_spec" - 1
-+          && !strcmp (sl->name, "self_spec"))
-+        do_self_spec (*sl->ptr_spec);
-+  }
-+
-   /* Process DRIVER_SELF_SPECS, adding any new options to the end
-      of the command line.  */
- 
-@@ -6535,24 +6578,6 @@ main (int argc, char **argv)
- 			      PREFIX_PRIORITY_LAST, 0, 1);
-     }
- 
--  /* Process any user specified specs in the order given on the command
--     line.  */
--  for (uptr = user_specs_head; uptr; uptr = uptr->next)
--    {
--      char *filename = find_a_file (&startfile_prefixes, uptr->filename,
--				    R_OK, true);
--      read_specs (filename ? filename : uptr->filename, false, true);
--    }
--
--  /* Process any user self specs.  */
--  {
--    struct spec_list *sl;
--    for (sl = specs; sl; sl = sl->next)
--      if (sl->name_len == sizeof "self_spec" - 1
--	  && !strcmp (sl->name, "self_spec"))
--	do_self_spec (*sl->ptr_spec);
--  }
--
-   if (compare_debug)
-     {
-       enum save_temps save;
diff --git a/srcpkgs/gcc/patches/libcpp-source_date_epoch.patch b/srcpkgs/gcc/patches/libcpp-source_date_epoch.patch
index 7265900..e42f4d6 100644
--- a/srcpkgs/gcc/patches/libcpp-source_date_epoch.patch
+++ b/srcpkgs/gcc/patches/libcpp-source_date_epoch.patch
@@ -12,7 +12,7 @@ time_t is some day promoted to a 64 bit value.
 
 --- libcpp/macro.c
 +++ libcpp/macro.c
-@@ -349,14 +349,38 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
+@@ -356,14 +356,38 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
  	     slow on some systems.  */
  	  time_t tt;
  	  struct tm *tb = NULL;
diff --git a/srcpkgs/gcc/patches/musl-posix_memalign-c++.patch b/srcpkgs/gcc/patches/musl-posix_memalign-c++.patch
deleted file mode 100644
index f285f73..0000000
--- a/srcpkgs/gcc/patches/musl-posix_memalign-c++.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff --git gcc/config/i386/pmm_malloc.h gcc/config/i386/pmm_malloc.h
-index 901001b..321fcd3 100644
---- gcc/config/i386/pmm_malloc.h
-+++ gcc/config/i386/pmm_malloc.h
-@@ -27,12 +27,13 @@
- #include <stdlib.h>
-
- /* We can't depend on <stdlib.h> since the prototype of posix_memalign
--   may not be visible.  */
-+   may not be visible and we can't pollute the namespace either.  */
- #ifndef __cplusplus
--extern int posix_memalign (void **, size_t, size_t);
-+extern int __gcc_posix_memalign (void **, size_t, size_t)
- #else
--extern "C" int posix_memalign (void **, size_t, size_t) throw ();
-+extern "C" int __gcc_posix_memalign (void **, size_t, size_t) throw ()
- #endif
-+__asm__("posix_memalign");
-
- static __inline void *
- _mm_malloc (size_t size, size_t alignment)
-@@ -42,7 +43,7 @@  _mm_malloc (size_t size, size_t alignment)
-     return malloc (size);
-   if (alignment == 2 || (sizeof (void *) == 8 && alignment == 4))
-     alignment = sizeof (void *);
--  if (posix_memalign (&ptr, alignment, size) == 0)
-+  if (__gcc_posix_memalign (&ptr, alignment, size) == 0)
-     return ptr;
-   else
-     return NULL;
diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template
index 6215817..e89394e 100644
--- a/srcpkgs/gcc/template
+++ b/srcpkgs/gcc/template
@@ -1,15 +1,16 @@
 # Template build file for 'gcc'
+_majorver=6.2
+_gcjrel=17
+
 pkgname=gcc
-_majorver=4.9
-version=${_majorver}.4
+version=${_majorver}.1
 revision=1
 short_desc="The GNU C Compiler"
 maintainer="Juan RP <xtraeme@voidlinux.eu>"
 homepage="http://gcc.gnu.org"
 license="GFDL-1.2, GPL-3, LGPL-2.1"
-distfiles="${GNU_SITE}/gcc/gcc-$version/gcc-$version.tar.bz2"
-checksum=6c11d292cd01b294f9f84c9a59c230d80e9e4a47e5c6355f046bb36d4f358092
-_gcjrel=15
+distfiles="http://distfiles.voidlinux.de/gcc-$version/gcc-$version.tar.xz"
+checksum=6bc5af0d2138bb8492c62ced00776b76bbc98b7297287aaa55adbe7d07786ac8
 
 nopie=yes
 lib32disabled=yes
@@ -18,25 +19,24 @@ bootstrap=yes
 if [ "$CHROOT_READY" ]; then
 	hostmakedepends="perl flex"
 fi
-makedepends="zlib-devel libmpc-devel cloog-devel"
-depends="binutils libgcc-devel-${version}_${revision}"
+makedepends="zlib-devel libmpc-devel isl15-devel"
+depends="binutils libgcc-devel-${version}_${revision}
+ libstdc++-devel-${version}_${revision} libssp-devel-${version}_${revision}"
 
 subpackages="libgcc libgomp libgomp-devel libatomic libatomic-devel"
-subpackages+=" libssp libssp-devel gcc-c++"
+subpackages+=" libssp libssp-devel"
 
 if [ -n "$CHROOT_READY" -a -z "$CROSS_BUILD" ]; then
+	# Required by gcj
+	hostmakedepends+=" zip unzip"
 	subpackages+=" gcc-fortran gcc-objc gcc-objc++"
 	subpackages+=" libgfortran-devel libgfortran"
 	subpackages+=" libobjc-devel libobjc"
-
+	subpackages+=" gcc-gcj libgcj-devel libgcj gcc-gcj-jdk-compat"
 	case "$XBPS_TARGET_MACHINE" in
-		*-musl)
-			# XXX disable go and java with musl
+		*-musl)	# Go won't link for musl libc
 			;;
-		*)
-			# Required by gcj
-			hostmakedepends+=" zip unzip"
-			subpackages+=" gcc-go libgo-devel libgo gcc-gcj libgcj-devel libgcj gcc-gcj-jdk-compat"
+		*)	subpackages+=" gcc-go libgo-devel libgo"
 			;;
 	esac
 fi
@@ -74,19 +74,20 @@ case "$XBPS_TARGET_MACHINE" in
 esac
 case "$XBPS_TARGET_MACHINE" in
 	mips*) ;;
+	x86_64*|i686*) subpackages+=" libitm libitm-devel libmpx libmpx-devel";;
 	*) subpackages+=" libitm libitm-devel";;
 esac
 
+# gcc-c++ merged in main pkg
+replaces="gcc-c++>=0"
+
 pre_configure() {
 	case "$XBPS_TARGET_MACHINE" in
-		*-musl) patch -Np1 -i ${FILESDIR}/gcc-4.9.2-musl.diff;;
+		*-musl) patch -Np1 -i ${FILESDIR}/gcc-${version}-musl.diff;;
 	esac
 	# _FORTIFY_SOURCE needs an optimization level.
 	sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {gcc,libiberty}/configure
-	# As specified in the LFS book, disable installing libiberty.
-	sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
-	# Do not run fixincludes
-	sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
+	mkdir gcc_build
 }
 do_configure() {
 	local _langs _args _hash
@@ -118,7 +119,9 @@ do_configure() {
 		export GCC_FOR_TARGET="$CC"
 		export CXX_FOR_TARGET="$CXX"
 
-		_args+=" --disable-multilib --host=$XBPS_CROSS_TRIPLET --with-build-sysroot=${XBPS_CROSS_BASE}"
+		_args+=" --disable-multilib"
+		_args+=" --host=$XBPS_CROSS_TRIPLET"
+		_args+=" --with-build-sysroot=${XBPS_CROSS_BASE}"
 		_args+=" --enable-sjlj-exceptions=no"
 	else
 		if [ -z "$CHROOT_READY" ]; then
@@ -127,15 +130,18 @@ do_configure() {
 			_args+=" --with-mpfr=${XBPS_MASTERDIR}/usr"
 			_args+=" --with-isl=${XBPS_MASTERDIR}/usr"
 			_args+=" --with-mpc=${XBPS_MASTERDIR}/usr"
-			_args+=" --with-cloog=${XBPS_MASTERDIR}/usr"
 			_args+=" --build=${_triplet}"
 		else
+			_langs="c,c++,objc,obj-c++,fortran,lto,java"
 			case "$XBPS_TARGET_MACHINE" in
-				# XXX disable go and java with musl
-				*-musl) _langs="c,c++,objc,obj-c++,fortran,lto";;
-				*) _langs="c,c++,objc,obj-c++,fortran,lto,go,java";;
+				*-musl)	# Linking libgo.so is broken for musl libc
+					;;
+				*)	_langs+=",go"
+					;;
 			esac
-			_args+=" --build=${_triplet} --enable-java-gc=boehm --enable-fast-character"
+			_args+=" --build=${_triplet}"
+			_args+=" --enable-java-gc=boehm"
+			_args+=" --enable-fast-character"
 		fi
 	fi
 
@@ -143,34 +149,60 @@ do_configure() {
 		aarch64*|*-musl) _args+=" --disable-libsanitizer";;
 	esac
 	case "$XBPS_TARGET_MACHINE" in
-		*-musl) _args+=" --disable-symvers libat_cv_have_ifunc=no";;
+		*-musl) _args+=" --disable-symvers"
+			_args+=" libat_cv_have_ifunc=no"
+			;;
 	esac
 
 	export CFLAGS="${CFLAGS/-D_FORTIFY_SOURCE=2/}"
 	export CXXFLAGS="${CXXFLAGS/-D_FORTIFY_SOURCE=2/}"
 
-	CONFIG_SHELL=/bin/bash \
-		./configure --prefix=/usr --mandir=/usr/share/man \
-		--infodir=/usr/share/info --libexecdir=/usr/lib --libdir=/usr/lib \
-		--enable-threads=posix --enable-__cxa_atexit --disable-multilib \
-		--with-system-zlib --enable-shared --enable-lto \
-		--enable-linker-build-id --disable-werror --disable-nls \
-		--enable-checking=release --disable-libstdcxx-pch \
-		--enable-cloog-backend=isl --with-linker-hash-style=$_hash \
-		--enable-languages=${_langs} ${_args}
+	_args+=" --prefix=/usr"
+	_args+=" --mandir=/usr/share/man"
+	_args+=" --infodir=/usr/share/info"
+	_args+=" --libexecdir=/usr/lib"
+	_args+=" --libdir=/usr/lib"
+	_args+=" --enable-threads=posix"
+	_args+=" --enable-__cxa_atexit"
+	_args+=" --disable-multilib"
+	_args+=" --with-system-zlib"
+	_args+=" --enable-shared"
+	_args+=" --enable-lto"
+	_args+=" --enable-vtable-verify"
+	_args+=" --enable-linker-build-id"
+	_args+=" --enable-serial-configure"
+	_args+=" --disable-werror"
+	_args+=" --disable-nls"
+	_args+=" --enable-checking=release"
+	_args+=" --disable-libstdcxx-pch"
+	_args+=" --with-isl"
+	_args+=" --with-linker-hash-style=$_hash"
+	_args+=" --disable-libunwind-exceptions"
+	_args+=" --disable-target-libiberty"
+	_args+=" --with-default-libstdcxx-abi=gcc4-compatible"
+	_args+=" --enable-languages=${_langs}"
+
+	mkdir -p build
+	cd build
+	CONFIG_SHELL=/bin/bash ${wrksrc}/configure ${_args}
 }
 do_build() {
+	if [ -z "$CHROOT_READY" ]; then
+		export LD_LIBRARY_PATH="${XBPS_MASTERDIR}/usr/lib"
+	fi
+	cd build
 	make ${makejobs}
 }
 pre_install() {
 	if [ "$CROSS_BUILD" ]; then
 		# XXX otherwise links to host libpthread
-		for f in $(find ${wrksrc}/${XBPS_CROSS_TRIPLET} -type f -name libtool); do
+		for f in $(find ${wrksrc}/build/${XBPS_CROSS_TRIPLET} -type f -name libtool); do
 			sed -e "s,add_dir=\"-L\$libdir\",add_dir=\"-L${XBPS_CROSS_BASE}\$libdir\",g" -i $f
 		done
 	fi
 }
 do_install() {
+	cd build
 	case "$XBPS_TARGET_MACHINE" in
 	x86_64*|aarch64*)
 		vmkdir usr/lib
@@ -325,7 +357,7 @@ gcc-fortran_package() {
 }
 gcc-objc++_package() {
 	lib32disabled=yes
-	depends="gcc-c++>=${_majorver} gcc-objc>=${_majorver}"
+	depends="gcc-objc>=${_majorver}"
 	short_desc+=" - Objective-C++ support"
 	pkg_install() {
 		vmove usr/lib/gcc/${_triplet}/${_majorver}/cc1objplus
@@ -354,7 +386,7 @@ libgcj-devel_package() {
 		vmove "usr/lib/gcc/${_triplet}/${_majorver}/include/gcj*"
 		vmove "usr/lib/gcc/${_triplet}/${_majorver}/include/jvm*"
 		vmove "usr/lib/gcc/${_triplet}/${_majorver}/include/jawt*"
-		vmove usr/lib/pkgconfig/libgcj-${_majorver}.pc
+		vmove usr/lib/pkgconfig/libgcj-${_majorver%.*}.pc
 	}
 }
 libgcj_package() {
@@ -374,7 +406,10 @@ libgfortran-devel_package() {
 	short_desc+=" - Fortran library - development files"
 	pkg_install() {
 		vmove usr/lib/libgfortran.a
-		vmove usr/lib/gcc/${_triplet}/${_majorver}/libgfortranbegin.a
+		# This does not seem to exist anymore?
+		if [ -f usr/lib/gcc/${_triplet}/${_majorver}/libgfortranbegin.a ]; then
+			vmove usr/lib/gcc/${_triplet}/${_majorver}/libgfortranbegin.a
+		fi
 	}
 }
 libgfortran_package() {
@@ -391,6 +426,7 @@ libgo-devel_package() {
 	pkg_install() {
 		vmove usr/lib/libgo.a
 		vmove usr/lib/libgobegin.a
+		vmove usr/lib/libgo.so
 	}
 }
 libgo_package() {
@@ -529,6 +565,23 @@ libitm_package() {
 		vmove "usr/lib/libitm.so.*"
 	}
 }
+libmpx-devel_package() {
+	depends="libmpx>=${_majorver}"
+	short_desc+=" - Intel MPX support - development files"
+	pkg_install() {
+		vmove usr/lib/libmpx.a
+		vmove usr/lib/libmpx.so
+		vmove usr/lib/libmpxwrappers.so
+		vmove usr/lib/libmpxwrappers.a
+	}
+}
+libmpx_package() {
+	short_desc+=" - Intel MPX support"
+	pkg_install() {
+		vmove usr/lib/libmpx.so.*
+		vmove usr/lib/libmpxwrappers.so.*
+	}
+}
 libsanitizer-devel_package() {
 	depends="libsanitizer>=${_majorver}"
 	short_desc+=" - Sanitizer libraries - development files"
@@ -546,7 +599,7 @@ libsanitizer_package() {
 	}
 }
 libssp-devel_package() {
-	depends="glibc-devel libssp>=${_majorver}"
+	depends="libssp>=${_majorver}"
 	short_desc+=" - SSP (StackSmashingProtection) library - development files"
 	pkg_install() {
 		vmove "usr/lib/libssp*.a"
@@ -576,15 +629,3 @@ libstdc++_package() {
 		vlicense ${wrksrc}/COPYING.RUNTIME RUNTIME.LIBRARY.EXCEPTION
 	}
 }
-gcc-c++_package() {
-	lib32disabled=yes
-	depends="gcc>=${_majorver} libstdc++-devel>=${_majorver}"
-	short_desc+=" - C++ support"
-	pkg_install() {
-		for f in g++ c++ ${_triplet}-g++ ${_triplet}-c++; do
-			vmove usr/bin/${f}
-		done
-		vmove usr/lib/gcc/${_triplet}/${_majorver}/cc1plus
-		vmove usr/share/man/man1/g++.1
-	}
-}
diff --git a/srcpkgs/isl15-devel b/srcpkgs/isl15-devel
new file mode 120000
index 0000000..ff1d954
--- /dev/null
+++ b/srcpkgs/isl15-devel
@@ -0,0 +1 @@
+isl15
\ No newline at end of file
diff --git a/srcpkgs/isl15/template b/srcpkgs/isl15/template
new file mode 100644
index 0000000..bc2c349
--- /dev/null
+++ b/srcpkgs/isl15/template
@@ -0,0 +1,31 @@
+# Template file for 'isl15'
+pkgname=isl15
+version=0.16.1
+revision=1
+wrksrc="isl-${version}"
+bootstrap=yes
+build_style=gnu-configure
+makedepends="gmp-devel"
+short_desc="Integer Set Library"
+maintainer="Juan RP <xtraeme@voidlinux.eu>"
+homepage="http://freecode.com/projects/isl"
+license="LGPL-2.1"
+distfiles="http://isl.gforge.inria.fr/isl-${version}.tar.bz2"
+checksum=412538bb65c799ac98e17e8cfcdacbb257a57362acfaaff254b0fcae970126d2
+
+post_install() {
+	# Remove gdb python files.
+	rm -f ${DESTDIR}/usr/lib/*.py
+}
+
+isl15-devel_package() {
+	depends="${makedepends} ${sourcepkg}>=${version}_${revision}"
+	short_desc+=" - development files"
+	conflicts="isl-devel>=0"
+	pkg_install() {
+		vmove usr/include
+		vmove usr/lib/pkgconfig
+		vmove "usr/lib/*.a"
+		vmove "usr/lib/*.so"
+	}
+}
diff --git a/srcpkgs/kernel-libc-headers/template b/srcpkgs/kernel-libc-headers/template
index 8e8a7f3..1c39f88 100644
--- a/srcpkgs/kernel-libc-headers/template
+++ b/srcpkgs/kernel-libc-headers/template
@@ -1,6 +1,6 @@
 # Template file for 'kernel-libc-headers'
 pkgname=kernel-libc-headers
-version=4.1.15
+version=4.1.34
 revision=1
 bootstrap=yes
 nostrip=yes
@@ -11,7 +11,7 @@ short_desc="The Linux API headers for userland development"
 license="GPL-2"
 homepage="http://www.kernel.org"
 distfiles="http://www.kernel.org/pub/linux/kernel/v4.x/linux-${version}.tar.xz"
-checksum=472288cc966188c5d7c511c6be0f78682843c9ca2d5d6c4d67d77455680359a3
+checksum=412316b32b5c7a513ba3ab8e68fc443db4d9423f07b577473089def0ee7406af
 
 if [ "$CHROOT_READY" ]; then
 	hostmakedepends="perl"
diff --git a/srcpkgs/libmpx b/srcpkgs/libmpx
new file mode 120000
index 0000000..b08d5af
--- /dev/null
+++ b/srcpkgs/libmpx
@@ -0,0 +1 @@
+gcc
\ No newline at end of file
diff --git a/srcpkgs/libmpx-devel b/srcpkgs/libmpx-devel
new file mode 120000
index 0000000..b08d5af
--- /dev/null
+++ b/srcpkgs/libmpx-devel
@@ -0,0 +1 @@
+gcc
\ No newline at end of file
diff --git a/srcpkgs/rr/template b/srcpkgs/rr/template
index 1fa6abf..4b8c989 100644
--- a/srcpkgs/rr/template
+++ b/srcpkgs/rr/template
@@ -16,7 +16,7 @@ checksum=b2b24a3f67df47576126421746cd2942a458d2825faa76e8bb3ca43edffa03d3
 nopie=yes
 
 case "$XBPS_MACHINE" in
-	x86_64*) hostmakedepends+=" gcc-multilib gcc-c++-multilib" ;;
+	x86_64*) hostmakedepends+=" gcc-multilib" ;;
 esac
 
 pre_configure() {
diff --git a/srcpkgs/virtualbox-ose/template b/srcpkgs/virtualbox-ose/template
index 1908c5d..b8e52cf 100644
--- a/srcpkgs/virtualbox-ose/template
+++ b/srcpkgs/virtualbox-ose/template
@@ -22,7 +22,8 @@ makedepends="libressl-devel libcurl-devel libpng-devel libvpx-devel
  xorg-server-devel device-mapper-devel docbook-xsl gsoap-devel"
 
 if [ "$XBPS_MACHINE" = "x86_64" ]; then
-	makedepends+=" gcc-c++-multilib"
+	# Is this required?
+	makedepends+=" gcc-multilib"
 fi
 
 depends="virtualbox-ose-dkms-${version}_${revision} hicolor-icon-theme desktop-file-utils dbus"
diff --git a/xbps-src b/xbps-src
index 03ac79d..87f3132 100755
--- a/xbps-src
+++ b/xbps-src
@@ -403,9 +403,9 @@ readonly XBPS_VERSION_REQ="0.46"
 readonly XBPS_VERSION=$(xbps-uhelper -V|awk '{print $2}')
 readonly XBPS_SRC_VERSION="113"
 export XBPS_MACHINE=$(xbps-uhelper arch)
-readonly XBPS_GCC_VERSION_MAJOR=4
-readonly XBPS_GCC_VERSION_MINOR=9
-readonly XBPS_GCC_VERSION_BUILD=4
+readonly XBPS_GCC_VERSION_MAJOR=6
+readonly XBPS_GCC_VERSION_MINOR=2
+readonly XBPS_GCC_VERSION_BUILD=1
 readonly XBPS_GCC_VERSION=${XBPS_GCC_VERSION_MAJOR}.${XBPS_GCC_VERSION_MINOR}.${XBPS_GCC_VERSION_BUILD}
 
 #