summaryrefslogtreecommitdiffstats
path: root/clang-3.5.1-cygwin64.patch
blob: 261c12fa1c79118d9c61bb8ec0c241039bfef812 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
--- origsrc/llvm-3.5.1.src/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp	2014-07-17 11:27:40.000000000 -0500
+++ src/llvm-3.5.1.src/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp	2015-04-30 23:57:03.440469200 -0500
@@ -340,7 +340,8 @@ static MCCodeGenInfo *createX86MCCodeGen
 
   // For static codegen, if we're not already set, use Small codegen.
   if (CM == CodeModel::Default)
-    CM = CodeModel::Small;
+    CM = T.isWindowsCygwinEnvironment() && is64Bit ? CodeModel::Medium
+                                                   : CodeModel::Small;
   else if (CM == CodeModel::JITDefault)
     // 64-bit JIT places everything in the same buffer except external funcs.
     CM = is64Bit ? CodeModel::Large : CodeModel::Small;
--- origsrc/llvm-3.5.1.src/tools/clang/lib/Basic/Targets.cpp	2014-08-08 17:59:37.000000000 -0500
+++ src/llvm-3.5.1.src/tools/clang/lib/Basic/Targets.cpp	2015-05-01 00:03:14.734617600 -0500
@@ -3203,6 +3203,7 @@ public:
     Builder.defineMacro("_X86_");
     Builder.defineMacro("__CYGWIN__");
     Builder.defineMacro("__CYGWIN32__");
+    Builder.defineMacro("__declspec(a)", "__attribute__((a))");
     DefineStd(Builder, "unix", Opts);
     if (Opts.CPlusPlus)
       Builder.defineMacro("_GNU_SOURCE");
@@ -3409,6 +3410,35 @@ public:
 } // end anonymous namespace
 
 namespace {
+// x86-64 Cygwin target
+class CygwinX86_64TargetInfo : public X86_64TargetInfo {
+public:
+  CygwinX86_64TargetInfo(const llvm::Triple &Triple)
+      : X86_64TargetInfo(Triple) {
+    TLSSupported = false;
+    WCharType = UnsignedShort;
+  }
+  virtual void getTargetDefines(const LangOptions &Opts,
+                                MacroBuilder &Builder) const {
+    X86_64TargetInfo::getTargetDefines(Opts, Builder);
+    Builder.defineMacro("__CYGWIN__");
+    Builder.defineMacro("__declspec(a)", "__attribute__((a))");
+    DefineStd(Builder, "unix", Opts);
+    if (Opts.CPlusPlus)
+      Builder.defineMacro("_GNU_SOURCE");
+  }
+  virtual BuiltinVaListKind getBuiltinVaListKind() const {
+    return TargetInfo::CharPtrBuiltinVaList;
+  }
+  virtual CallingConvCheckResult checkCallingConvention(CallingConv CC) const {
+    return (CC == CC_C ||
+            CC == CC_IntelOclBicc ||
+            CC == CC_X86_64SysV) ? CCCR_OK : CCCR_Warning;
+  }
+};
+} // end anonymous namespace
+
+namespace {
 class DarwinX86_64TargetInfo : public DarwinTargetInfo<X86_64TargetInfo> {
 public:
   DarwinX86_64TargetInfo(const llvm::Triple &Triple)
@@ -6357,6 +6387,8 @@ static TargetInfo *AllocateTarget(const
       switch (Triple.getEnvironment()) {
       default:
         return new X86_64TargetInfo(Triple);
+      case llvm::Triple::Cygnus:
+        return new CygwinX86_64TargetInfo(Triple);
       case llvm::Triple::GNU:
         return new MinGWX86_64TargetInfo(Triple);
       case llvm::Triple::MSVC: