aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--testing/llvm/APKBUILD225
-rw-r--r--testing/llvm/clang-3.5-fix-stdint.patch29
-rw-r--r--testing/llvm/clang-3.6-add-alpine-distro.patch34
-rw-r--r--testing/llvm/clang-3.6-alpine-hash-style-gnu.patch12
-rw-r--r--testing/llvm/clang-3.6-alpine-use-z-relro.patch19
-rw-r--r--testing/llvm/clang-3.6-default-runtime-compiler-rt.patch27
-rw-r--r--testing/llvm/clang-3.6-fix-unwind-chain-inclusion.patch33
-rw-r--r--testing/llvm/clang-3.6-musl-alpine-triple.patch46
-rw-r--r--testing/llvm/clang-3.6-musl-fix-dynamic-linker-paths.patch58
-rw-r--r--testing/llvm/clang-3.6-musl-no-use-cxa-atexit.patch14
-rw-r--r--testing/llvm/clang-3.6-musl-use-init-array.patch20
-rw-r--r--testing/llvm/clang-3.6-remove-lgcc-when-using-compiler-rt.patch29
-rw-r--r--testing/llvm/compiler-rt-3.6-musl-disable-sanitizers.patch34
-rw-r--r--testing/llvm/compiler-rt-3.6-musl-no-dlvsym.patch19
-rw-r--r--testing/llvm/llvm-3.5-gcc-4.9.patch43
-rw-r--r--testing/llvm/llvm-3.6-musl-triple.patch107
-rw-r--r--testing/llvm/llvm-3.6-musl.patch110
17 files changed, 859 insertions, 0 deletions
diff --git a/testing/llvm/APKBUILD b/testing/llvm/APKBUILD
new file mode 100644
index 0000000000..5458da7dd0
--- /dev/null
+++ b/testing/llvm/APKBUILD
@@ -0,0 +1,225 @@
+# Contributor: Travis Tilley <ttilley@gmail.com>
+# Maintainer: William Pitcock <nenolod@dereferenced.org>
+pkgname=llvm
+pkgver=3.6.0
+pkgrel=0
+pkgdesc="low level virtual machine compiler system"
+arch="x86 x86_64 armhf"
+url="http://llvm.org/"
+license="UOI-NCSA"
+depends=""
+depends_dev="perl"
+makedepends="$depends_dev make flex bison groff libffi-dev zlib-dev ncurses-dev libedit-dev python chrpath"
+install=
+subpackages="clang $pkgname-dev $pkgname-doc $pkgname-libs"
+source="http://llvm.org/releases/$pkgver/llvm-$pkgver.src.tar.xz
+ http://llvm.org/releases/$pkgver/cfe-$pkgver.src.tar.xz
+ http://llvm.org/releases/$pkgver/compiler-rt-$pkgver.src.tar.xz
+ llvm-3.5-gcc-4.9.patch
+ llvm-3.6-musl-triple.patch
+ llvm-3.6-musl.patch
+ compiler-rt-3.6-musl-disable-sanitizers.patch
+ compiler-rt-3.6-musl-no-dlvsym.patch
+ clang-3.5-fix-stdint.patch
+ clang-3.6-fix-unwind-chain-inclusion.patch
+ clang-3.6-remove-lgcc-when-using-compiler-rt.patch
+ clang-3.6-add-alpine-distro.patch
+ clang-3.6-alpine-use-z-relro.patch
+ clang-3.6-alpine-hash-style-gnu.patch
+ clang-3.6-default-runtime-compiler-rt.patch
+ clang-3.6-musl-alpine-triple.patch
+ clang-3.6-musl-fix-dynamic-linker-paths.patch
+ clang-3.6-musl-use-init-array.patch
+ clang-3.6-musl-no-use-cxa-atexit.patch
+ "
+
+_builddir="$srcdir"/build
+
+_srcdir="$srcdir"/"$pkgname-$pkgver.src"
+_srcdir_clang="$_srcdir"/tools/clang
+_srcdir_compiler_rt="$_srcdir"/projects/compiler-rt
+# _srcdir_clang_extra="$_srcdir_clang"/tools/extra
+# _srcdir_lld="$_srcdir"/tools/lld
+
+prepare() {
+ msg "Preparing LLVM/CLANG sources..."
+ mv "$srcdir"/cfe-$pkgver.src \
+ "$_srcdir_clang" || return 1
+ mv "$srcdir"/compiler-rt-$pkgver.src \
+ "$_srcdir_compiler_rt" || return 1
+ # mv "$srcdir"/clang-tools-extra-$pkgver.src \
+ # "$_srcdir_clang_extra" || return 1
+ # mv "$srcdir"/lld-$pkgver.src \
+ # "$_srcdir_lld" || return 1
+
+ msg "Patching LLVM core..."
+ cd "$_srcdir" || return 1
+ update_config_sub || return 1
+ for i in $source; do
+ case $i in
+ llvm*.patch)
+ msg "Applying $i..."
+ patch -s -p1 -N -i "$srcdir"/$i || return 1
+ ;;
+ esac
+ done
+
+ msg "Patching compiler-rt..."
+ cd "$_srcdir_compiler_rt" || return 1
+ for i in $source; do
+ case $i in
+ compiler-rt*.patch)
+ msg "Applying $i..."
+ patch -s -p1 -N -i "$srcdir"/$i || return 1
+ ;;
+ esac
+ done
+
+ msg "Patching clang..."
+ cd "$_srcdir_clang" || return 1
+ for i in $source; do
+ case $i in
+ clang-*.patch)
+ msg "Applying $i..."
+ patch -s -p1 -N -i "$srcdir"/$i || return 1
+ ;;
+ esac
+ done
+}
+
+build() {
+ mkdir "$_builddir"
+ cd "$_builddir"
+
+ export CBUILD
+ sed -i -e '/case "\${UNAME_MACHINE}:\${UNAME_SYSTEM}:\${UNAME_RELEASE}:\${UNAME_VERSION}" in/i \' \
+ -e 'if [ x != "x$CBUILD" ]; then echo "$CBUILD"; exit; fi' \
+ ../$pkgname-$pkgver.src/autoconf/config.guess \
+ || return 1
+
+ export CPPFLAGS="${CPPFLAGS} $(pkg-config --cflags-only-I libffi) $(pkg-config --cflags-only-I libedit)"
+
+ $_srcdir/configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --enable-shared \
+ --enable-optimized \
+ --enable-keep-symbols \
+ --enable-libedit \
+ --enable-terminfo \
+ --enable-libffi \
+ --enable-clang-plugin-support \
+ --enable-clang-static-analyzer \
+ --enable-docs \
+ --enable-threads \
+ --enable-zlib \
+ --enable-pic \
+ --enable-targets=x86,x86_64,arm,arm64,cpp,r600 \
+ --enable-bindings=none \
+ --disable-timestamps \
+ --disable-assertions \
+ --disable-expensive-checks \
+ --disable-libcpp \
+ --disable-werror \
+ || return 1
+
+ make || return 1
+}
+
+package() {
+ cd "$_builddir"
+ make DESTDIR="$pkgdir" install
+
+ #relocate docs
+ mkdir -p "$pkgdir"/usr/share/doc
+ mv "$pkgdir"/usr/docs/llvm "$pkgdir"/usr/share/doc/ || return 1
+ rmdir "$pkgdir"/usr/docs || return 1
+ chrpath -d "$pkgdir"/usr/bin/* "$pkgdir"/usr/lib/*.so
+}
+
+clang() {
+ pkgdesc="A C language family front-end for LLVM"
+ mkdir -p "$subpkgdir"/usr/bin \
+ "$subpkgdir"/usr/lib "$subpkgdir"/usr/share/clang "$subpkgdir"/usr/include
+ mv "$pkgdir"/usr/bin/clang* "$pkgdir"/usr/bin/c-index-test \
+ "$subpkgdir"/usr/bin/ || return 1
+ mv "$pkgdir"/usr/lib/clang \
+ "$pkgdir"/usr/lib/libclang* \
+ "$subpkgdir"/usr/lib/ || return 1
+ mv "$pkgdir"/usr/include/clang "$pkgdir"/usr/include/clang-c \
+ "$subpkgdir"/usr/include/ || return 1
+
+ cp -r "$_srcdir"/tools/clang/tools/scan-build "$subpkgdir"/usr/share/clang/scan-build
+ cp -r "$_srcdir"/tools/clang/tools/scan-view "$subpkgdir"/usr/share/clang/scan-view
+
+ ln -s /usr/share/clang/scan-build/scan-build "$subpkgdir"/usr/bin/scan-build
+ ln -s /usr/share/clang/scan-view/scan-view "$subpkgdir"/usr/bin/scan-view
+}
+
+libs() {
+ pkgdesc="LLVM shared libraries"
+ mkdir -p "$subpkgdir"/usr/lib/
+ mv "$pkgdir"/usr/lib/*.so "$subpkgdir"/usr/lib/
+}
+
+md5sums="f1e14e949f8df3047c59816c55278cec llvm-3.6.0.src.tar.xz
+e3012065543dc6ab8a9842b09616b78d cfe-3.6.0.src.tar.xz
+cc36dbcafe43406083e98bc9e74f8054 compiler-rt-3.6.0.src.tar.xz
+178eecb7554f893198716e35245fc3c9 llvm-3.5-gcc-4.9.patch
+74f92f6719995be866f461a29a7c8112 llvm-3.6-musl-triple.patch
+3068c2bc0dd0f694d002d992743401ac llvm-3.6-musl.patch
+b1732677fb7641c13300a98bdd47d467 compiler-rt-3.6-musl-disable-sanitizers.patch
+a56d3a3da587b5936e338d85947bd16f compiler-rt-3.6-musl-no-dlvsym.patch
+be9b343bacbd220a154b0a773bcd3bd3 clang-3.5-fix-stdint.patch
+02df7f41728ceb3b401dd3972531d4ec clang-3.6-fix-unwind-chain-inclusion.patch
+9790d1131f498f5957e0107727489704 clang-3.6-remove-lgcc-when-using-compiler-rt.patch
+74612f41b5bda8f05be5cf2e59eebd26 clang-3.6-add-alpine-distro.patch
+dbf4e6686137d097768e971c0efd4a0b clang-3.6-alpine-use-z-relro.patch
+7495743d3c85ad48fd7ab9ca1f674884 clang-3.6-alpine-hash-style-gnu.patch
+a26e050907fae3f8ac51375826f9767c clang-3.6-default-runtime-compiler-rt.patch
+bf66b2ce06519085484776e40290118a clang-3.6-musl-alpine-triple.patch
+28266841c807bd3835186ad32942ac11 clang-3.6-musl-fix-dynamic-linker-paths.patch
+b7e213b69c848ad1bcb98a798a2f9d1d clang-3.6-musl-use-init-array.patch
+01eb6923bfa059e36ab39f44b2b6f03f clang-3.6-musl-no-use-cxa-atexit.patch"
+sha256sums="b39a69e501b49e8f73ff75c9ad72313681ee58d6f430bfad4d81846fe92eb9ce llvm-3.6.0.src.tar.xz
+be0e69378119fe26f0f2f74cffe82b7c26da840c9733fe522ed3c1b66b11082d cfe-3.6.0.src.tar.xz
+7f49fb79e5adcdce7dddaf973f1db130228dfb19e37a99a7f5365a6948b26b11 compiler-rt-3.6.0.src.tar.xz
+96851b9d89647276f4611ea7db59f84240a727b199925ee6c9599f959fc7bd05 llvm-3.5-gcc-4.9.patch
+fbe1bab0aa5eb8c54ac1ed0f7d27212efd597c8eaa889599549d0defe82bc7c9 llvm-3.6-musl-triple.patch
+f1ca24437533c5022d591b8b9a5ea7f0494e984a5c24ef1e5dcf71dbee0df240 llvm-3.6-musl.patch
+d5aa68e35fe3fe0cb2393d3abecd80987c4876f332ca03b55f03bcd82b2b720d compiler-rt-3.6-musl-disable-sanitizers.patch
+90a582ef8561ed4953feae7f19f3a30856da845174ae93e7acdb4bc088be5b78 compiler-rt-3.6-musl-no-dlvsym.patch
+a41aa73b9edcf0588d61e17e9d53738e9e16209eac9c5488eaef7770ab1517d1 clang-3.5-fix-stdint.patch
+2c73e2c6f3e90e2535e0662714645fc4d1189b4b1beb5a0ebb6ba1af62580d23 clang-3.6-fix-unwind-chain-inclusion.patch
+dea41fd9eb16d2c3b9b73ad1ee3af2923b26f806185494835c899700ec6830f4 clang-3.6-remove-lgcc-when-using-compiler-rt.patch
+4f68d475947eb35515231fdf23dc5a92f656038ca21b0d3d0ea110129b07d313 clang-3.6-add-alpine-distro.patch
+ba0dd990424699b92b79c8511143cbf33766e8d2009a979928e9b8229fa3cfba clang-3.6-alpine-use-z-relro.patch
+46f4c3c08bee21cc9051181108776f37acc7e9589c85f62dbd6a842b842f5a43 clang-3.6-alpine-hash-style-gnu.patch
+8c8295e10453e89d8ae70d709a91f186ea5e279494ab538e28339d9d2efa3ae8 clang-3.6-default-runtime-compiler-rt.patch
+da420dda54b0058140a4ade99de49e617c2533857ccb327d95bf51027bb0bcf8 clang-3.6-musl-alpine-triple.patch
+03c392733933198adbb3e6cb2eb9ed95e8d01f7d013e3fe2d12a8f1001b73893 clang-3.6-musl-fix-dynamic-linker-paths.patch
+03709cff62464ef2afdaa2bfaccf4dffd5d3e20eee561fb94e486a2912d8a6e6 clang-3.6-musl-use-init-array.patch
+3d5c097ab1a4e4cfadeeb11aef66a90daaff11095dd3349f25832bedc317cac8 clang-3.6-musl-no-use-cxa-atexit.patch"
+sha512sums="ca492b7d86333f05930dc849c7a8beff981da51ca174cd844650b516d0a592a2c3837d5a8a9b62713c0f29292b845f27ef0ec361809e325c6b60cbbcd3f20357 llvm-3.6.0.src.tar.xz
+dc137bdf9c2c5adb25498c995f0b944016699267156a595cc1fe6127f6961d45162275023d194db42691d80fa8fc74f56abad9c145ef1ff492881f547ca76cfe cfe-3.6.0.src.tar.xz
+2758bc2b78dcfb9b6509b83ebc4ebc86907ca3dc2a5f151f580771c674b934432cae055e342ed73096a08331b2f7b129ff65629b27932458b1877aeb554b6328 compiler-rt-3.6.0.src.tar.xz
+a16f175c75893ac58350e0573012a66c1e8908e94a03197ca50b147eb492402e706e4816b80428ccdf92a112673ec8552a0d5dc699dc95250e756c161328d9f2 llvm-3.5-gcc-4.9.patch
+a084b995b2ea65c19da5e000459c993d5a3396f0eb4f6d6ec29299d98f3df8ee6f23723f8d19e93ef906861bb83dbba5c05b8cf7801f92c8748b8687247e25d2 llvm-3.6-musl-triple.patch
+e3f4203679c978cbf359200de0cd60c0adcc58c92611ec70b4b991c6612e0b41b67c19c9994769302284edb953e258d3717ec32d90abbd9bdeff3739aa5ffb18 llvm-3.6-musl.patch
+e9cf172aac82b5e4680d4c6fb25f11e04d1db75ad4e99f7117c08631ca8a7955677fc046f58b6eef05f9e98ef0374eb9248b5674aa26b08d9f7efd30525740be compiler-rt-3.6-musl-disable-sanitizers.patch
+8cde42c93a1eda14d31f8e51ffd00d031f10071e9a4ee91fa9b08ef5b8e7bf9ec32ccd102b652e35e6f75d1339d934daa68185529ca6dba74e61f979a27498f3 compiler-rt-3.6-musl-no-dlvsym.patch
+764382fc79598ca85c9c500d16e02a2710025416dc9bd8a7407aad38e663dee9539e47a1ae763b45c36cd86c4ff5853c4799835cd7363a3a208191ae7a703321 clang-3.5-fix-stdint.patch
+4cbabce34b7352bf5a043db3abe8931f58adce4fda80846c39b63399a025cbbac572052d3f0f598466bc9dca23b8ff88e655b10bf54b3870bc4e6f4225b6f558 clang-3.6-fix-unwind-chain-inclusion.patch
+d50aa3271e9247896bd3df5a55c987da81a01892af8afbd0483cff4c0467b2dc438fa9166d1aaeaf5165555c30d4a2af68c3bdbfa8fba798c2ca124172cf2642 clang-3.6-remove-lgcc-when-using-compiler-rt.patch
+f5fa5aa1b2a559215792a98806b18b32ce6b82e57afb09aa3886b22f71420c8377b784f55610b4948185e115b39aeeaf1f27625d0d91dbd3b146e4986eb29c54 clang-3.6-add-alpine-distro.patch
+61d0113e2287b82d27b4d08ed98e8f2dad864a36a295f9d8a28d54b6b8516ecda2986d402ba04146976e25e35198e12d567df80979c88081369ac386fa213a0f clang-3.6-alpine-use-z-relro.patch
+1982e8b84415fa314b040cbecac38640d754105b5af2c26d5aa7ca74d7ef14cc074bf7a5537dc492a7051d8f94035a1d69de2e913eabee7fcd1b50d6f6f126f7 clang-3.6-alpine-hash-style-gnu.patch
+b906ff5a59c83e553d67b2574bcd3c22e7975b487ad928f9e0db0a07ffb54c5e412d4527401db63f1de94884410709b4fe637e12d36fa0c0661f69fd88f09c25 clang-3.6-default-runtime-compiler-rt.patch
+d2192b615307a762d324a1643dae33bc8a97e22e6a9dd712f9a243c6d3f728c9f9f036ce34d4137c8537651d78332ad8b98fd7f325648ac68e1bda54f5f58348 clang-3.6-musl-alpine-triple.patch
+d3f6c97bdfccdab056aef149413108eb1fdf68d10782cdb1a50695a8e2e53432555a73c640ae635c697d41330c7869acc864b9f0fedbb1a4cba6d13785168564 clang-3.6-musl-fix-dynamic-linker-paths.patch
+4ae8409f3d03e8b30cbe33be507a43194ff6f3e6ce6467d3341ff08f08b12a22517a4c4b012f1b1029d956f8c486412353d937f316a7648a5be14549555aecae clang-3.6-musl-use-init-array.patch
+20cddcf4289bb50bedac2636d32824860252617545d85c5cdc13f630a6f8be2be2a7e018401de4cec0a78bafc1f940ed8d565c2cda518b73290cf3ced4d0807e clang-3.6-musl-no-use-cxa-atexit.patch"
diff --git a/testing/llvm/clang-3.5-fix-stdint.patch b/testing/llvm/clang-3.5-fix-stdint.patch
new file mode 100644
index 0000000000..4db83d5b19
--- /dev/null
+++ b/testing/llvm/clang-3.5-fix-stdint.patch
@@ -0,0 +1,29 @@
+diff --git a/lib/Headers/stdint.h b/lib/Headers/stdint.h
+index 0303db9..8ca28df 100644
+--- a/lib/Headers/stdint.h
++++ b/lib/Headers/stdint.h
+@@ -22,8 +22,6 @@
+ *
+ \*===----------------------------------------------------------------------===*/
+
+-#ifndef __CLANG_STDINT_H
+-#define __CLANG_STDINT_H
+
+ /* If we're hosted, fall back to the system's stdint.h, which might have
+ * additional definitions.
+@@ -72,6 +70,8 @@
+ # endif
+
+ #else
++#ifndef __CLANG_STDINT_H
++#define __CLANG_STDINT_H
+
+ /* C99 7.18.1.1 Exact-width integer types.
+ * C99 7.18.1.2 Minimum-width integer types.
+@@ -703,5 +703,5 @@ typedef __UINTMAX_TYPE__ uintmax_t;
+ #define INTMAX_C(v) __INTN_C(__INTMAX_WIDTH__, v)
+ #define UINTMAX_C(v) __UINTN_C(__INTMAX_WIDTH__, v)
+
+-#endif /* __STDC_HOSTED__ */
+ #endif /* __CLANG_STDINT_H */
++#endif /* __STDC_HOSTED__ */
diff --git a/testing/llvm/clang-3.6-add-alpine-distro.patch b/testing/llvm/clang-3.6-add-alpine-distro.patch
new file mode 100644
index 0000000000..9b959d335d
--- /dev/null
+++ b/testing/llvm/clang-3.6-add-alpine-distro.patch
@@ -0,0 +1,34 @@
+diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
+index f789fd5..6d75b4b 100644
+--- a/lib/Driver/ToolChains.cpp
++++ b/lib/Driver/ToolChains.cpp
+@@ -2667,12 +2673,13 @@ Tool *Solaris::buildLinker() const {
+ return new tools::solaris::Link(*this);
+ }
+
+ /// Distribution (very bare-bones at the moment).
+
+ enum Distro {
++ AlpineLinux,
+ ArchLinux,
+ DebianLenny,
+ DebianSqueeze,
+ DebianWheezy,
+ DebianJessie,
+ Exherbo,
+@@ -2778,12 +2785,15 @@ static Distro DetectDistro(llvm::Triple::ArchType Arch) {
+ if (llvm::sys::fs::exists("/etc/exherbo-release"))
+ return Exherbo;
+
+ if (llvm::sys::fs::exists("/etc/arch-release"))
+ return ArchLinux;
+
++ if (llvm::sys::fs::exists("/etc/alpine-release"))
++ return AlpineLinux;
++
+ return UnknownDistro;
+ }
+
+ /// \brief Get our best guess at the multiarch triple for a target.
+ ///
+ /// Debian-based systems are starting to use a multiarch setup where they use
diff --git a/testing/llvm/clang-3.6-alpine-hash-style-gnu.patch b/testing/llvm/clang-3.6-alpine-hash-style-gnu.patch
new file mode 100644
index 0000000000..ee1f7c0f31
--- /dev/null
+++ b/testing/llvm/clang-3.6-alpine-hash-style-gnu.patch
@@ -0,0 +1,12 @@
+diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
+index efa9541..1c6a6d5 100644
+--- a/lib/Driver/ToolChains.cpp
++++ b/lib/Driver/ToolChains.cpp
+@@ -2963,7 +2963,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+ // ABI requires a mapping between the GOT and the symbol table.
+ // Android loader does not support .gnu.hash.
+ if (!IsMips && !IsAndroid) {
+- if (IsRedhat(Distro) || IsOpenSUSE(Distro) ||
++ if (IsRedhat(Distro) || IsOpenSUSE(Distro) || Distro == AlpineLinux ||
+ (IsUbuntu(Distro) && Distro >= UbuntuMaverick))
+ ExtraOpts.push_back("--hash-style=gnu");
diff --git a/testing/llvm/clang-3.6-alpine-use-z-relro.patch b/testing/llvm/clang-3.6-alpine-use-z-relro.patch
new file mode 100644
index 0000000000..bd7cea08c8
--- /dev/null
+++ b/testing/llvm/clang-3.6-alpine-use-z-relro.patch
@@ -0,0 +1,19 @@
+diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
+index f789fd5..6d75b4b 100644
+--- a/lib/Driver/ToolChains.cpp
++++ b/lib/Driver/ToolChains.cpp
+@@ -2930,13 +2940,13 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+ GCCInstallation.getTriple().str() + "/bin").str());
+
+ Linker = GetLinkerPath();
+
+ Distro Distro = DetectDistro(Arch);
+
+- if (IsOpenSUSE(Distro) || IsUbuntu(Distro)) {
++ if (IsOpenSUSE(Distro) || IsUbuntu(Distro) || Distro == AlpineLinux) {
+ ExtraOpts.push_back("-z");
+ ExtraOpts.push_back("relro");
+ }
+
+ if (Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb)
+ ExtraOpts.push_back("-X");
diff --git a/testing/llvm/clang-3.6-default-runtime-compiler-rt.patch b/testing/llvm/clang-3.6-default-runtime-compiler-rt.patch
new file mode 100644
index 0000000000..f4bf20cf9b
--- /dev/null
+++ b/testing/llvm/clang-3.6-default-runtime-compiler-rt.patch
@@ -0,0 +1,27 @@
+diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
+index 1c6a6d5..7377f72 100644
+--- a/lib/Driver/ToolChains.cpp
++++ b/lib/Driver/ToolChains.cpp
+@@ -3395,6 +3395,10 @ void Linux::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
+ }
+ }
+
++ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const {
++ return ToolChain::RLT_CompilerRT;
++}
++
+ bool Linux::isPIEDefault() const {
+ return getSanitizerArgs().requiresPIE();
+ }
+diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h
+index 47fb10d..88aee51 100644
+--- a/lib/Driver/ToolChains.h
++++ b/lib/Driver/ToolChains.h
+@@ -640,6 +640,7 @@ public:
+ void
+ AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const override;
++ RuntimeLibType GetDefaultRuntimeLibType() const override;
+ bool isPIEDefault() const override;
+
+ std::string Linker;
diff --git a/testing/llvm/clang-3.6-fix-unwind-chain-inclusion.patch b/testing/llvm/clang-3.6-fix-unwind-chain-inclusion.patch
new file mode 100644
index 0000000000..2ead52f0a6
--- /dev/null
+++ b/testing/llvm/clang-3.6-fix-unwind-chain-inclusion.patch
@@ -0,0 +1,33 @@
+diff --git a/lib/Headers/unwind.h b/lib/Headers/unwind.h
+index 90aca16..ef96969 100644
+--- a/lib/Headers/unwind.h
++++ b/lib/Headers/unwind.h
+@@ -23,9 +23,6 @@
+
+ /* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/
+
+-#ifndef __CLANG_UNWIND_H
+-#define __CLANG_UNWIND_H
+-
+ #if defined(__APPLE__) && __has_include_next(<unwind.h>)
+ /* Darwin (from 11.x on) provide an unwind.h. If that's available,
+ * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE,
+@@ -53,6 +50,9 @@
+ # endif
+ #else
+
++#ifndef __CLANG_UNWIND_H
++#define __CLANG_UNWIND_H
++
+ #include <stdint.h>
+
+ #ifdef __cplusplus
+@@ -277,6 +277,7 @@ _Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *);
+ }
+ #endif
+
++#endif /* __CLANG_UNWIND_H */
++
+ #endif
+
+-#endif /* __CLANG_UNWIND_H */
diff --git a/testing/llvm/clang-3.6-musl-alpine-triple.patch b/testing/llvm/clang-3.6-musl-alpine-triple.patch
new file mode 100644
index 0000000000..86cf2a4788
--- /dev/null
+++ b/testing/llvm/clang-3.6-musl-alpine-triple.patch
@@ -0,0 +1,46 @@
+diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
+index f789fd5..6d75b4b 100644
+--- a/lib/Driver/ToolChains.cpp
++++ b/lib/Driver/ToolChains.cpp
+@@ -1293,33 +1293,38 @@ bool Generic_GCC::GCCInstallationDetector::getBiarchSibling(Multilib &M) const {
+ "aarch64_be-linux-gnu" };
+
+ static const char *const ARMLibDirs[] = { "/lib" };
+ static const char *const ARMTriples[] = { "arm-linux-gnueabi",
+ "arm-linux-androideabi" };
+ static const char *const ARMHFTriples[] = { "arm-linux-gnueabihf",
+- "armv7hl-redhat-linux-gnueabi" };
++ "armv7hl-redhat-linux-gnueabi",
++ "armv6-alpine-linux-musleabihf",
++ "armv7-alpine-linux-musleabihf"};
+ static const char *const ARMebLibDirs[] = { "/lib" };
+ static const char *const ARMebTriples[] = { "armeb-linux-gnueabi",
+ "armeb-linux-androideabi" };
+ static const char *const ARMebHFTriples[] = { "armeb-linux-gnueabihf",
+ "armebv7hl-redhat-linux-gnueabi" };
+
+ static const char *const X86_64LibDirs[] = { "/lib64", "/lib" };
+ static const char *const X86_64Triples[] = {
+ "x86_64-linux-gnu", "x86_64-unknown-linux-gnu", "x86_64-pc-linux-gnu",
+ "x86_64-redhat-linux6E", "x86_64-redhat-linux", "x86_64-suse-linux",
+ "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", "x86_64-slackware-linux",
+- "x86_64-linux-android", "x86_64-unknown-linux"
++ "x86_64-linux-android", "x86_64-alpine-linux-musl", "x86_64-pc-linux-musl",
++ "x86_64-unknown-linux"
+ };
+ static const char *const X32LibDirs[] = { "/libx32" };
+ static const char *const X86LibDirs[] = { "/lib32", "/lib" };
+ static const char *const X86Triples[] = {
+ "i686-linux-gnu", "i686-pc-linux-gnu", "i486-linux-gnu", "i386-linux-gnu",
+ "i386-redhat-linux6E", "i686-redhat-linux", "i586-redhat-linux",
+ "i386-redhat-linux", "i586-suse-linux", "i486-slackware-linux",
+- "i686-montavista-linux", "i686-linux-android", "i586-linux-gnu"
++ "i686-montavista-linux", "i686-linux-android", "i586-linux-gnu",
++ "i486-alpine-linux-musl", "i486-pc-linux-musl",
++ "i686-alpine-linux-musl", "i686-pc-linux-musl"
+ };
+
+ static const char *const MIPSLibDirs[] = { "/lib" };
+ static const char *const MIPSTriples[] = { "mips-linux-gnu",
+ "mips-mti-linux-gnu",
+ "mips-img-linux-gnu" };
diff --git a/testing/llvm/clang-3.6-musl-fix-dynamic-linker-paths.patch b/testing/llvm/clang-3.6-musl-fix-dynamic-linker-paths.patch
new file mode 100644
index 0000000000..27c17728ce
--- /dev/null
+++ b/testing/llvm/clang-3.6-musl-fix-dynamic-linker-paths.patch
@@ -0,0 +1,58 @@
+diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
+index 75eef9e..3e71522 100644
+--- a/lib/Driver/Tools.cpp
++++ b/lib/Driver/Tools.cpp
+@@ -7282,8 +7282,14 @@ static std::string getLinuxDynamicLinker(const ArgList &Args,
+ return "/system/bin/linker64";
+ else
+ return "/system/bin/linker";
+- } else if (ToolChain.getArch() == llvm::Triple::x86 ||
+- ToolChain.getArch() == llvm::Triple::sparc)
++ } else if (ToolChain.getArch() == llvm::Triple::x86) {
++ switch (ToolChain.getTriple().getEnvironment()) {
++ case llvm::Triple::Musl:
++ return "/lib/ld-musl-i386.so.1";
++ default:
++ return "/lib/ld-linux.so.2";
++ }
++ } else if (ToolChain.getArch() == llvm::Triple::sparc)
+ return "/lib/ld-linux.so.2";
+ else if (ToolChain.getArch() == llvm::Triple::aarch64)
+ return "/lib/ld-linux-aarch64.so.1";
+@@ -7291,10 +7297,17 @@ static std::string getLinuxDynamicLinker(const ArgList &Args,
+ return "/lib/ld-linux-aarch64_be.so.1";
+ else if (ToolChain.getArch() == llvm::Triple::arm ||
+ ToolChain.getArch() == llvm::Triple::thumb) {
+- if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
++ switch (ToolChain.getTriple().getEnvironment()) {
++ case llvm::Triple::Musl:
++ case llvm::Triple::MuslEABI:
++ return "/lib/ld-musl-arm.so.3";
++ case llvm::Triple::MuslEABIHF:
++ return "/lib/ld-musl-armhf.so.3";
++ case llvm::Triple::GNUEABIHF:
+ return "/lib/ld-linux-armhf.so.3";
+- else
++ default:
+ return "/lib/ld-linux.so.3";
++ }
+ } else if (ToolChain.getArch() == llvm::Triple::armeb ||
+ ToolChain.getArch() == llvm::Triple::thumbeb) {
+ if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
+@@ -7339,8 +7352,14 @@ static std::string getLinuxDynamicLinker(const ArgList &Args,
+ else if (ToolChain.getArch() == llvm::Triple::x86_64 &&
+ ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUX32)
+ return "/libx32/ld-linux-x32.so.2";
+- else
+- return "/lib64/ld-linux-x86-64.so.2";
++ else {
++ switch (ToolChain.getTriple().getEnvironment()) {
++ case llvm::Triple::Musl:
++ return "/lib/ld-musl-x86_64.so.1";
++ default:
++ return "/lib64/ld-linux-x86-64.so.2";
++ }
++ }
+ }
+
+ static void AddRunTimeLibs(const ToolChain &TC, const Driver &D,
diff --git a/testing/llvm/clang-3.6-musl-no-use-cxa-atexit.patch b/testing/llvm/clang-3.6-musl-no-use-cxa-atexit.patch
new file mode 100644
index 0000000000..d1c23b0992
--- /dev/null
+++ b/testing/llvm/clang-3.6-musl-no-use-cxa-atexit.patch
@@ -0,0 +1,14 @@
+diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
+index 08e4439..4e5a594 100644
+--- a/lib/Driver/Tools.cpp
++++ b/lib/Driver/Tools.cpp
+@@ -3978,7 +3978,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
+ options::OPT_fno_use_cxa_atexit,
+ !IsWindowsCygnus && !IsWindowsGNU &&
+ getToolChain().getArch() != llvm::Triple::hexagon &&
+- getToolChain().getArch() != llvm::Triple::xcore) ||
++ getToolChain().getArch() != llvm::Triple::xcore &&
++ getToolChain().getTriple().getEnvironment() != llvm::Triple::Musl) ||
+ KernelOrKext)
+ CmdArgs.push_back("-fno-use-cxa-atexit");
+
diff --git a/testing/llvm/clang-3.6-musl-use-init-array.patch b/testing/llvm/clang-3.6-musl-use-init-array.patch
new file mode 100644
index 0000000000..ae632aabf9
--- /dev/null
+++ b/testing/llvm/clang-3.6-musl-use-init-array.patch
@@ -0,0 +1,20 @@
+diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
+index f789fd5..6d75b4b 100644
+--- a/lib/Driver/ToolChains.cpp
++++ b/lib/Driver/ToolChains.cpp
+@@ -2080,13 +2085,14 @@ void Generic_ELF::addClangTargetOptions(const ArgList &DriverArgs,
+ const Generic_GCC::GCCVersion &V = GCCInstallation.getVersion();
+ bool UseInitArrayDefault =
+ getTriple().getArch() == llvm::Triple::aarch64 ||
+ getTriple().getArch() == llvm::Triple::aarch64_be ||
+ (getTriple().getOS() == llvm::Triple::Linux &&
+ (!V.isOlderThan(4, 7, 0) ||
+- getTriple().getEnvironment() == llvm::Triple::Android));
++ getTriple().getEnvironment() == llvm::Triple::Android ||
++ getTriple().getEnvironment() == llvm::Triple::Musl));
+
+ if (DriverArgs.hasFlag(options::OPT_fuse_init_array,
+ options::OPT_fno_use_init_array,
+ UseInitArrayDefault))
+ CC1Args.push_back("-fuse-init-array");
+ }
diff --git a/testing/llvm/clang-3.6-remove-lgcc-when-using-compiler-rt.patch b/testing/llvm/clang-3.6-remove-lgcc-when-using-compiler-rt.patch
new file mode 100644
index 0000000000..15cfe2f8ae
--- /dev/null
+++ b/testing/llvm/clang-3.6-remove-lgcc-when-using-compiler-rt.patch
@@ -0,0 +1,29 @@
+diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
+index 75eef9e..08e4439 100644
+--- a/lib/Driver/Tools.cpp
++++ b/lib/Driver/Tools.cpp
+@@ -2154,18 +2154,18 @@ static SmallString<128> getCompilerRT(const ToolChain &TC, StringRef Component,
+ // FIXME: Make sure we can also emit shared objects if they're requested
+ // and available, check for possible errors, etc.
+ static void addClangRT(const ToolChain &TC, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+ CmdArgs.push_back(Args.MakeArgString(getCompilerRT(TC, "builtins")));
+
+- if (!TC.getTriple().isOSWindows()) {
+- // FIXME: why do we link against gcc when we are using compiler-rt?
+- CmdArgs.push_back("-lgcc_s");
+- if (TC.getDriver().CCCIsCXX())
+- CmdArgs.push_back("-lgcc_eh");
+- }
++ // if (!TC.getTriple().isOSWindows()) {
++ // // FIXME: why do we link against gcc when we are using compiler-rt?
++ // CmdArgs.push_back("-lgcc_s");
++ // if (TC.getDriver().CCCIsCXX())
++ // CmdArgs.push_back("-lgcc_eh");
++ // }
+ }
+
+ static void addProfileRT(const ToolChain &TC, const ArgList &Args,
+ ArgStringList &CmdArgs) {
+ if (!(Args.hasFlag(options::OPT_fprofile_arcs, options::OPT_fno_profile_arcs,
+ false) ||
diff --git a/testing/llvm/compiler-rt-3.6-musl-disable-sanitizers.patch b/testing/llvm/compiler-rt-3.6-musl-disable-sanitizers.patch
new file mode 100644
index 0000000000..c37490ca3f
--- /dev/null
+++ b/testing/llvm/compiler-rt-3.6-musl-disable-sanitizers.patch
@@ -0,0 +1,34 @@
+Unfortunately, the sanitizer functionality depends on a variety of GNU
+extensions and headers that simply don't exist on a musl based system. Fixing
+this would be a fairly complicated task, though some inspiration could be taken
+from dpkg's static 'libcompat' approach of supplying equivalent functionality
+that might be missing. A task for another day perhaps.
+
+diff --git a/lib/Makefile.mk b/lib/Makefile.mk
+index ed9690d..aacb2b1 100644
+--- a/lib/Makefile.mk
++++ b/lib/Makefile.mk
+@@ -7,16 +7,16 @@
+ #
+ #===------------------------------------------------------------------------===#
+
+ SubDirs :=
+
+ # Add submodules.
+-SubDirs += asan
++# SubDirs += asan
+ SubDirs += builtins
+-SubDirs += dfsan
++# SubDirs += dfsan
+ SubDirs += interception
+-SubDirs += lsan
+-SubDirs += msan
++# SubDirs += lsan
++# SubDirs += msan
+ SubDirs += profile
+-SubDirs += sanitizer_common
+-SubDirs += tsan
+-SubDirs += ubsan
++# SubDirs += sanitizer_common
++# SubDirs += tsan
++# SubDirs += ubsan
diff --git a/testing/llvm/compiler-rt-3.6-musl-no-dlvsym.patch b/testing/llvm/compiler-rt-3.6-musl-no-dlvsym.patch
new file mode 100644
index 0000000000..444f4e073b
--- /dev/null
+++ b/testing/llvm/compiler-rt-3.6-musl-no-dlvsym.patch
@@ -0,0 +1,19 @@
+diff --git a/lib/interception/interception_linux.cc b/lib/interception/interception_linux.cc
+index 6e908ac..7fcf2a6 100644
+--- a/lib/interception/interception_linux.cc
++++ b/lib/interception/interception_linux.cc
+@@ -21,13 +21,13 @@ namespace __interception {
+ bool GetRealFunctionAddress(const char *func_name, uptr *func_addr,
+ uptr real, uptr wrapper) {
+ *func_addr = (uptr)dlsym(RTLD_NEXT, func_name);
+ return real == wrapper;
+ }
+
+-#if !defined(__ANDROID__) // android does not have dlvsym
++#if 0 // !defined(__ANDROID__) // android does not have dlvsym
+ void *GetFuncAddrVer(const char *func_name, const char *ver) {
+ return dlvsym(RTLD_NEXT, func_name, ver);
+ }
+ #endif // !defined(__ANDROID__)
+
+ } // namespace __interception
diff --git a/testing/llvm/llvm-3.5-gcc-4.9.patch b/testing/llvm/llvm-3.5-gcc-4.9.patch
new file mode 100644
index 0000000000..f60c4df723
--- /dev/null
+++ b/testing/llvm/llvm-3.5-gcc-4.9.patch
@@ -0,0 +1,43 @@
+commit 080fb498017d17af2e4d7563608c7d8a848f20da
+Author: Sanjoy Das <sanjoy at azulsystems.com>
+Date: Thu Jun 19 15:38:02 2014 -0700
+
+ Fix the --enable-shared build.
+
+ Currently a build configured with ./configure --enable-shared breaks
+ with an undefined "llvm::cl::parser<llvm::PassInfo
+ const*>::getOption(unsigned int) const" symbol when linking opt. This
+ body for this symbol gets emitted into Pass.o (along with the destructor
+ for PassNameParser), but gets linked into libLLVM-3.5svn.so with local
+ visibility, causing the link error.
+
+ This fix uses the existing EXTERN_TEMPLATE machinery to force a globally
+ visible definition for the functions in parser<const PassInfo *> into
+ Pass.o.
+
+diff --git a/include/llvm/IR/LegacyPassNameParser.h b/include/llvm/IR/LegacyPassNameParser.h
+index e2e4912..a07e3fd 100644
+--- a/include/llvm/IR/LegacyPassNameParser.h
++++ b/include/llvm/IR/LegacyPassNameParser.h
+@@ -95,6 +95,8 @@ private:
+ }
+ };
+
++EXTERN_TEMPLATE_INSTANTIATION(class cl::parser<const PassInfo *>);
++
+ ///===----------------------------------------------------------------------===//
+ /// FilteredPassNameParser class - Make use of the pass registration
+ /// mechanism to automatically add a command line argument to opt for
+diff --git a/lib/IR/Pass.cpp b/lib/IR/Pass.cpp
+index 91d86ae..00ce223 100644
+--- a/lib/IR/Pass.cpp
++++ b/lib/IR/Pass.cpp
+@@ -234,6 +234,8 @@ PassNameParser::~PassNameParser() {
+ // attempting to remove the registration listener is an error.
+ }
+
++TEMPLATE_INSTANTIATION(class cl::parser<const PassInfo *>);
++
+ //===----------------------------------------------------------------------===//
+ // AnalysisUsage Class Implementation
+ //
diff --git a/testing/llvm/llvm-3.6-musl-triple.patch b/testing/llvm/llvm-3.6-musl-triple.patch
new file mode 100644
index 0000000000..08919c680e
--- /dev/null
+++ b/testing/llvm/llvm-3.6-musl-triple.patch
@@ -0,0 +1,107 @@
+diff --git a/include/llvm/ADT/Triple.h b/include/llvm/ADT/Triple.h
+index 8a68599..072623c 100644
+--- a/include/llvm/ADT/Triple.h
++++ b/include/llvm/ADT/Triple.h
+@@ -151,12 +151,16 @@ public:
+ GNUX32,
+ CODE16,
+ EABI,
+ EABIHF,
+ Android,
+
++ Musl,
++ MuslEABI,
++ MuslEABIHF,
++
+ MSVC,
+ Itanium,
+ Cygnus,
+ };
+ enum ObjectFormatType {
+ UnknownObjectFormat,
+diff --git a/lib/Support/Triple.cpp b/lib/Support/Triple.cpp
+index 0838e90..4be78e5 100644
+--- a/lib/Support/Triple.cpp
++++ b/lib/Support/Triple.cpp
+@@ -172,12 +172,15 @@ const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
+ case GNUEABIHF: return "gnueabihf";
+ case GNUEABI: return "gnueabi";
+ case GNUX32: return "gnux32";
+ case CODE16: return "code16";
+ case EABI: return "eabi";
+ case EABIHF: return "eabihf";
++ case Musl: return "musl";
++ case MuslEABIHF: return "musleabihf";
++ case MuslEABI: return "musleabi";
+ case Android: return "android";
+ case MSVC: return "msvc";
+ case Itanium: return "itanium";
+ case Cygnus: return "cygnus";
+ }
+
+@@ -372,12 +375,15 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
+ .StartsWith("gnueabihf", Triple::GNUEABIHF)
+ .StartsWith("gnueabi", Triple::GNUEABI)
+ .StartsWith("gnux32", Triple::GNUX32)
+ .StartsWith("code16", Triple::CODE16)
+ .StartsWith("gnu", Triple::GNU)
+ .StartsWith("android", Triple::Android)
++ .StartsWith("musleabihf", Triple::MuslEABIHF)
++ .StartsWith("musleabi", Triple::MuslEABI)
++ .StartsWith("musl", Triple::Musl)
+ .StartsWith("msvc", Triple::MSVC)
+ .StartsWith("itanium", Triple::Itanium)
+ .StartsWith("cygnus", Triple::Cygnus)
+ .Default(Triple::UnknownEnvironment);
+ }
+
+
+diff --git a/lib/Target/ARM/ARMSubtarget.h b/lib/Target/ARM/ARMSubtarget.h
+index dbacd4d..c81e620 100644
+--- a/lib/Target/ARM/ARMSubtarget.h
++++ b/lib/Target/ARM/ARMSubtarget.h
+@@ -366,22 +366,25 @@ public:
+
+ // ARM Targets that support EHABI exception handling standard
+ // Darwin uses SjLj. Other targets might need more checks.
+ bool isTargetEHABICompatible() const {
+ return (TargetTriple.getEnvironment() == Triple::EABI ||
+ TargetTriple.getEnvironment() == Triple::GNUEABI ||
++ TargetTriple.getEnvironment() == Triple::MuslEABI ||
+ TargetTriple.getEnvironment() == Triple::EABIHF ||
+ TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
++ TargetTriple.getEnvironment() == Triple::MuslEABIHF ||
+ TargetTriple.getEnvironment() == Triple::Android) &&
+ !isTargetDarwin() && !isTargetWindows();
+ }
+
+ bool isTargetHardFloat() const {
+ // FIXME: this is invalid for WindowsCE
+ return TargetTriple.getEnvironment() == Triple::GNUEABIHF ||
+ TargetTriple.getEnvironment() == Triple::EABIHF ||
++ TargetTriple.getEnvironment() == Triple::MuslEABIHF ||
+ isTargetWindows();
+ }
+ bool isTargetAndroid() const {
+ return TargetTriple.getEnvironment() == Triple::Android;
+ }
+
+diff --git a/lib/Target/ARM/ARMTargetMachine.cpp b/lib/Target/ARM/ARMTargetMachine.cpp
+index 7a8181b..ce5ceb9 100644
+--- a/lib/Target/ARM/ARMTargetMachine.cpp
++++ b/lib/Target/ARM/ARMTargetMachine.cpp
+@@ -84,12 +84,14 @@ computeTargetABI(const Triple &TT, StringRef CPU,
+ switch (TT.getEnvironment()) {
+ case llvm::Triple::Android:
+ case llvm::Triple::GNUEABI:
+ case llvm::Triple::GNUEABIHF:
+ case llvm::Triple::EABIHF:
+ case llvm::Triple::EABI:
++ case llvm::Triple::MuslEABI:
++ case llvm::Triple::MuslEABIHF:
+ TargetABI = ARMBaseTargetMachine::ARM_ABI_AAPCS;
+ break;
+ case llvm::Triple::GNU:
+ TargetABI = ARMBaseTargetMachine::ARM_ABI_APCS;
+ break;
+ default:
diff --git a/testing/llvm/llvm-3.6-musl.patch b/testing/llvm/llvm-3.6-musl.patch
new file mode 100644
index 0000000000..ba3c49f785
--- /dev/null
+++ b/testing/llvm/llvm-3.6-musl.patch
@@ -0,0 +1,110 @@
+diff --git a/include/llvm/Target/TargetLibraryInfo.h b/include/llvm/Target/TargetLibraryInfo.h
+index 46f87b9..41ac5fd 100644
+--- a/include/llvm/Target/TargetLibraryInfo.h
++++ b/include/llvm/Target/TargetLibraryInfo.h
+@@ -10,12 +10,21 @@
+ #ifndef LLVM_TARGET_TARGETLIBRARYINFO_H
+ #define LLVM_TARGET_TARGETLIBRARYINFO_H
+
+ #include "llvm/ADT/DenseMap.h"
+ #include "llvm/Pass.h"
+
++#undef fopen64
++#undef fseeko64
++#undef fstat64
++#undef fstatvfs64
++#undef ftello64
++#undef lstat64
++#undef stat64
++#undef tmpfile64
++
+ namespace llvm {
+ class Triple;
+
+ namespace LibFunc {
+ enum Func {
+ /// int _IO_getc(_IO_FILE * __fp);
+diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp
+index d2b551e..4634a13 100644
+--- a/lib/Support/DynamicLibrary.cpp
++++ b/lib/Support/DynamicLibrary.cpp
+@@ -135,13 +135,13 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) {
+
+ if (void *Result = llvm::SearchForAddressOfSpecialSymbol(symbolName))
+ return Result;
+
+ // This macro returns the address of a well-known, explicit symbol
+ #define EXPLICIT_SYMBOL(SYM) \
+- if (!strcmp(symbolName, #SYM)) return &SYM
++ if (!strcmp(symbolName, #SYM)) return (void *) &SYM
+
+ // On linux we have a weird situation. The stderr/out/in symbols are both
+ // macros and global variables because of standards requirements. So, we
+ // boldly use the EXPLICIT_SYMBOL macro without checking for a #define first.
+ #if defined(__linux__) and !defined(__ANDROID__)
+ {
+diff --git a/lib/Support/Unix/Signals.inc b/lib/Support/Unix/Signals.inc
+index e8f4643..8a320ef 100644
+--- a/lib/Support/Unix/Signals.inc
++++ b/lib/Support/Unix/Signals.inc
+@@ -413,13 +413,13 @@ static bool printSymbolizedStackTrace(void **StackTrace, int Depth, FILE *FD) {
+ // PrintStackTrace - In the case of a program crash or fault, print out a stack
+ // trace so that the user has an indication of why and where we died.
+ //
+ // On glibc systems we have the 'backtrace' function, which works nicely, but
+ // doesn't demangle symbols.
+ void llvm::sys::PrintStackTrace(FILE *FD) {
+-#if defined(HAVE_BACKTRACE) && defined(ENABLE_BACKTRACES)
++#if defined(__GLIBC__) && defined(HAVE_BACKTRACE) && defined(ENABLE_BACKTRACES)
+ static void* StackTrace[256];
+ // Use backtrace() to output a backtrace on Linux systems with glibc.
+ int depth = backtrace(StackTrace,
+ static_cast<int>(array_lengthof(StackTrace)));
+ if (printSymbolizedStackTrace(StackTrace, depth, FD))
+ return;
+diff --git a/lib/Target/TargetLibraryInfo.cpp b/lib/Target/TargetLibraryInfo.cpp
+index c0abdbd..ed908f8 100644
+--- a/lib/Target/TargetLibraryInfo.cpp
++++ b/lib/Target/TargetLibraryInfo.cpp
+@@ -661,20 +661,21 @@ static void initialize(TargetLibraryInfo &TLI, const Triple &T,
+ break;
+ default:
+ TLI.setUnavailable(LibFunc::ffsll);
+ }
+
+ // The following functions are available on at least Linux:
+- if (!T.isOSLinux()) {
++ if (!T.isOSLinux())
++ TLI.setUnavailable(LibFunc::memalign);
++ if (1 /*!T.isGlibc()*/) {
+ TLI.setUnavailable(LibFunc::dunder_strdup);
+ TLI.setUnavailable(LibFunc::dunder_strtok_r);
+ TLI.setUnavailable(LibFunc::dunder_isoc99_scanf);
+ TLI.setUnavailable(LibFunc::dunder_isoc99_sscanf);
+ TLI.setUnavailable(LibFunc::under_IO_getc);
+ TLI.setUnavailable(LibFunc::under_IO_putc);
+- TLI.setUnavailable(LibFunc::memalign);
+ TLI.setUnavailable(LibFunc::fopen64);
+ TLI.setUnavailable(LibFunc::fseeko64);
+ TLI.setUnavailable(LibFunc::fstat64);
+ TLI.setUnavailable(LibFunc::fstatvfs64);
+ TLI.setUnavailable(LibFunc::ftello64);
+ TLI.setUnavailable(LibFunc::lstat64);
+diff --git a/utils/unittest/googletest/src/gtest.cc b/utils/unittest/googletest/src/gtest.cc
+index bf850c6..9e9088c 100644
+--- a/utils/unittest/googletest/src/gtest.cc
++++ b/utils/unittest/googletest/src/gtest.cc
+@@ -117,12 +117,13 @@
+ #if GTEST_HAS_EXCEPTIONS
+ # include <stdexcept>
+ #endif
+
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h> // NOLINT
++# include <sys/socket.h> // NOLINT
+ # include <netdb.h> // NOLINT
+ #endif
+
+ // Indicates that this translation unit is part of Google Test's
+ // implementation. It must come before gtest-internal-inl.h is
+ // included, or there will be a compiler error. This trick is to