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).
This commit is contained in:
Martin Storsjö authored and Martin Storsjo committed 2016-08-10 00:02:09 +03:00
1 parent 5e1fbce075
commit feac2f56ba
4 files changed
+188 -10

No files matched your search

+11 -7
View File
@@ -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 <martellmalone@gmail.com>
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
+3 -3
View File
@@ -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?= <hugo@beauzee.fr>
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
+48
View File
@@ -0,0 +1,48 @@
From 80b3c6d7fd1cd993de4454e869fadbae8a456ac1 Mon Sep 17 00:00:00 2001
From: Renato Golin <renato.golin@linaro.org>
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
+126
View File
@@ -0,0 +1,126 @@
From b9f0418bc4b3f7869d549bb020271c19e69cce26 Mon Sep 17 00:00:00 2001
From: Saleem Abdulrasool <compnerd@compnerd.org>
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 <armintr.h>
+#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 <x86intrin.h>
#endif
+#if defined(__arm__)
+#include <armintr.h>
+#endif
+
/* For the definition of jmp_buf. */
#if __STDC_HOSTED__
#include <setjmp.h>
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