From feac2f56ba969f98a9b42975c4a46fa514638e5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Tue, 9 Aug 2016 16:16:24 +0300 Subject: [PATCH] Update patches for clang 3.9 Patches 1-2 are just rebased from the earlier version for clang 3.8, no changes in surrounding code there. Patch 3 is necessary to fix a regression in assembling standalone assembly files in 3.9. Patch 4 makes clang work in MSVC mode with the MSVC SDK for ARM (to simplify testing of the toolchain in that mode). --- patches/clang-0001.patch | 18 +++--- patches/clang-0002.patch | 6 +- patches/clang-0003.patch | 48 +++++++++++++++ patches/clang-0004.patch | 126 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 188 insertions(+), 10 deletions(-) create mode 100644 patches/clang-0003.patch create mode 100644 patches/clang-0004.patch diff --git a/patches/clang-0001.patch b/patches/clang-0001.patch index be2b993..f2adccf 100644 --- a/patches/clang-0001.patch +++ b/patches/clang-0001.patch @@ -1,14 +1,18 @@ -From de8c959c54b4591b13d7ab0c348bac8d25cc856a Mon Sep 17 00:00:00 2001 +From 6e83e00fb6c9b858b9ccb1cbeb30198ec85d190d Mon Sep 17 00:00:00 2001 From: Martell Malone Date: Wed, 16 Dec 2015 02:07:06 -0800 -Subject: [PATCH] use lld and compiler-rt by default +Subject: [PATCH 1/4] use lld and compiler-rt by default +--- + lib/Driver/ToolChains.h | 4 ++++ + lib/Driver/Tools.cpp | 2 +- + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h -index 257750e..831b7ab 100644 +index 4e5c3f7..c06f695 100644 --- a/lib/Driver/ToolChains.h +++ b/lib/Driver/ToolChains.h -@@ -649,6 +649,10 @@ public: +@@ -680,6 +680,10 @@ public: const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; @@ -20,10 +24,10 @@ index 257750e..831b7ab 100644 Tool *getTool(Action::ActionClass AC) const override; Tool *buildLinker() const override; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp -index 20a1035..ec3e42d 100644 +index 95f2850..3fff6d2 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp -@@ -9600,7 +9600,7 @@ void MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, +@@ -10376,7 +10376,7 @@ void MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, // handled somewhere else. Args.ClaimAllArgs(options::OPT_w); @@ -33,5 +37,5 @@ index 20a1035..ec3e42d 100644 CmdArgs.push_back("-flavor"); CmdArgs.push_back("gnu"); -- -2.6.3 +2.7.4 diff --git a/patches/clang-0002.patch b/patches/clang-0002.patch index 93b863e..a88cfc3 100644 --- a/patches/clang-0002.patch +++ b/patches/clang-0002.patch @@ -1,7 +1,7 @@ -From a6ab1bd3b1a1f1e4eb8b8490dac5f1b5b4b72e6a Mon Sep 17 00:00:00 2001 +From 4139cf38b1a16aa49a7b9eed79b0cccec1a70ec8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Mon, 2 May 2016 15:58:31 +0200 -Subject: [PATCH] Manually revert 0e2452f3055e2e2cad06a55c5ca9c2be13404781 +Subject: [PATCH 2/4] Manually revert 0e2452f3055e2e2cad06a55c5ca9c2be13404781 This re-enables mingw detection --- @@ -41,5 +41,5 @@ index 938440b..a1dc25b 100644 Base += llvm::sys::path::get_separator(); findGccLibDir(); -- -2.8.1 +2.7.4 diff --git a/patches/clang-0003.patch b/patches/clang-0003.patch new file mode 100644 index 0000000..3b6355b --- /dev/null +++ b/patches/clang-0003.patch @@ -0,0 +1,48 @@ +From 80b3c6d7fd1cd993de4454e869fadbae8a456ac1 Mon Sep 17 00:00:00 2001 +From: Renato Golin +Date: Wed, 27 Jul 2016 14:12:20 +0000 +Subject: [PATCH 3/4] [ARM] Pass thumb as architecture to the underlying tools, + when targeting windows +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This makes sure that the thumb section flag gets set by the assembler. + +Patch by Martin Storsjö. + +Cherry-picked from SVN trunk commit 276869, git mirror commit +3f38d952361bac. +--- + lib/Driver/ToolChain.cpp | 4 +++- + test/Driver/windows-thumb.s | 2 ++ + 2 files changed, 5 insertions(+), 1 deletion(-) + create mode 100644 test/Driver/windows-thumb.s + +diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp +index e96688c..d586350 100644 +--- a/lib/Driver/ToolChain.cpp ++++ b/lib/Driver/ToolChain.cpp +@@ -487,8 +487,10 @@ std::string ToolChain::ComputeLLVMTriple(const ArgList &Args, + ArchName = "arm"; + + // Assembly files should start in ARM mode, unless arch is M-profile. ++ // Windows is always thumb. + if ((InputType != types::TY_PP_Asm && Args.hasFlag(options::OPT_mthumb, +- options::OPT_mno_thumb, ThumbDefault)) || IsMProfile) { ++ options::OPT_mno_thumb, ThumbDefault)) || IsMProfile || ++ getTriple().isOSWindows()) { + if (IsBigEndian) + ArchName = "thumbeb"; + else +diff --git a/test/Driver/windows-thumb.s b/test/Driver/windows-thumb.s +new file mode 100644 +index 0000000..afe5b2d +--- /dev/null ++++ b/test/Driver/windows-thumb.s +@@ -0,0 +1,2 @@ ++; RUN: %clang -target armv7-windows -c -### %s 2>&1 | FileCheck %s ++; CHECK: "-triple" "thumbv7- +-- +2.7.4 + diff --git a/patches/clang-0004.patch b/patches/clang-0004.patch new file mode 100644 index 0000000..d835ce1 --- /dev/null +++ b/patches/clang-0004.patch @@ -0,0 +1,126 @@ +From b9f0418bc4b3f7869d549bb020271c19e69cce26 Mon Sep 17 00:00:00 2001 +From: Saleem Abdulrasool +Date: Sat, 6 Aug 2016 17:58:24 +0000 +Subject: [PATCH 4/4] Headers: Add ARM support to intrin.h for MSVC + compatibility +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This fixes compiling with headers from the Windows SDK for ARM, where the +YieldProcessor function (in winnt.h) refers to _ARM_BARRIER_ISHST. + +The actual MSVC armintr.h contains a lot more definitions, but this is enough to +build code that uses the Windows SDK but doesn't use ARM intrinsics directly. + +An alternative would to just keep the addition to intrin.h (to include +armintr.h), but not actually ship armintr.h, instead having clang's intrin.h +include armintr.h from MSVC's include directory. (That one works fine with +clang, at least for building code that uses the Windows SDK.) + +Patch by Martin Storsjö! + +Cherry-picked from SVN trunk commit 277928, git mirror commit +cfc8939a5f1. +--- + lib/Headers/CMakeLists.txt | 1 + + lib/Headers/armintr.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ + lib/Headers/intrin.h | 4 ++++ + test/Headers/ms-intrin.cpp | 4 ++++ + 4 files changed, 54 insertions(+) + create mode 100644 lib/Headers/armintr.h + +diff --git a/lib/Headers/CMakeLists.txt b/lib/Headers/CMakeLists.txt +index 657ef7e..600fece 100644 +--- a/lib/Headers/CMakeLists.txt ++++ b/lib/Headers/CMakeLists.txt +@@ -3,6 +3,7 @@ set(files + altivec.h + ammintrin.h + arm_acle.h ++ armintr.h + avx2intrin.h + avx512bwintrin.h + avx512cdintrin.h +diff --git a/lib/Headers/armintr.h b/lib/Headers/armintr.h +new file mode 100644 +index 0000000..933afcb +--- /dev/null ++++ b/lib/Headers/armintr.h +@@ -0,0 +1,45 @@ ++/*===---- armintr.h - ARM Windows intrinsics -------------------------------=== ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a copy ++ * of this software and associated documentation files (the "Software"), to deal ++ * in the Software without restriction, including without limitation the rights ++ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++ * copies of the Software, and to permit persons to whom the Software is ++ * furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++ * THE SOFTWARE. ++ * ++ *===-----------------------------------------------------------------------=== ++ */ ++ ++/* Only include this if we're compiling for the windows platform. */ ++#ifndef _MSC_VER ++#include_next ++#else ++ ++#ifndef __ARMINTR_H ++#define __ARMINTR_H ++ ++typedef enum ++{ ++ _ARM_BARRIER_SY = 0xF, ++ _ARM_BARRIER_ST = 0xE, ++ _ARM_BARRIER_ISH = 0xB, ++ _ARM_BARRIER_ISHST = 0xA, ++ _ARM_BARRIER_NSH = 0x7, ++ _ARM_BARRIER_NSHST = 0x6, ++ _ARM_BARRIER_OSH = 0x3, ++ _ARM_BARRIER_OSHST = 0x2 ++} _ARMINTR_BARRIER_TYPE; ++ ++#endif /* __ARMINTR_H */ ++#endif /* _MSC_VER */ +diff --git a/lib/Headers/intrin.h b/lib/Headers/intrin.h +index f18711a..268ac4a 100644 +--- a/lib/Headers/intrin.h ++++ b/lib/Headers/intrin.h +@@ -34,6 +34,10 @@ + #include + #endif + ++#if defined(__arm__) ++#include ++#endif ++ + /* For the definition of jmp_buf. */ + #if __STDC_HOSTED__ + #include +diff --git a/test/Headers/ms-intrin.cpp b/test/Headers/ms-intrin.cpp +index c697428..25c5531 100644 +--- a/test/Headers/ms-intrin.cpp ++++ b/test/Headers/ms-intrin.cpp +@@ -60,4 +60,8 @@ void f() { + __readcr3(); + __writecr3(0); + #endif ++ ++#ifdef _M_ARM ++ __dmb(_ARM_BARRIER_ISHST); ++#endif + } +-- +2.7.4 +