--- 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 { 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: