$OpenBSD: patch-lib_Driver_ToolChains_Clang_cpp,v 1.5 2018/08/26 00:40:22 bcallah Exp $

Index: lib/Driver/ToolChains/Clang.cpp
--- lib/Driver/ToolChains/Clang.cpp.orig
+++ lib/Driver/ToolChains/Clang.cpp
@@ -332,7 +332,7 @@ static void getTargetFeatures(const ToolChain &TC, con
     break;
   case llvm::Triple::aarch64:
   case llvm::Triple::aarch64_be:
-    aarch64::getAArch64TargetFeatures(D, Args, Features);
+    aarch64::getAArch64TargetFeatures(D, Triple, Args, Features);
     break;
   case llvm::Triple::x86:
   case llvm::Triple::x86_64:
@@ -3423,9 +3423,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
       OFastEnabled ? options::OPT_Ofast : options::OPT_fstrict_aliasing;
   // We turn strict aliasing off by default if we're in CL mode, since MSVC
   // doesn't do any TBAA.
-  bool TBAAOnByDefault = !D.IsCLMode();
+  bool StrictAliasingDefault = !getToolChain().getDriver().IsCLMode();
+  // We also turn off strict aliasing on OpenBSD.
+  if (getToolChain().getTriple().isOSOpenBSD())
+    StrictAliasingDefault = false;
   if (!Args.hasFlag(options::OPT_fstrict_aliasing, StrictAliasingAliasOption,
-                    options::OPT_fno_strict_aliasing, TBAAOnByDefault))
+                    options::OPT_fno_strict_aliasing, StrictAliasingDefault))
     CmdArgs.push_back("-relaxed-aliasing");
   if (!Args.hasFlag(options::OPT_fstruct_path_tbaa,
                     options::OPT_fno_struct_path_tbaa))
@@ -4011,7 +4014,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                       options::OPT_fno_strict_overflow)) {
     if (A->getOption().matches(options::OPT_fno_strict_overflow))
       CmdArgs.push_back("-fwrapv");
-  }
+  } else if (getToolChain().getTriple().isOSOpenBSD())
+      CmdArgs.push_back("-fwrapv");
 
   if (Arg *A = Args.getLastArg(options::OPT_freroll_loops,
                                options::OPT_fno_reroll_loops))
@@ -4842,6 +4846,18 @@ ObjCRuntime Clang::AddObjCRuntimeArgs(const ArgList &a
 #else
       unsigned nonFragileABIVersion = 2;
 #endif
+
+  // Disable some builtins on OpenBSD because they are just not
+  // right...
+  if (getToolChain().getTriple().isOSOpenBSD()) { 
+    cmdArgs.push_back("-fno-builtin-malloc");
+    cmdArgs.push_back("-fno-builtin-calloc");
+    cmdArgs.push_back("-fno-builtin-realloc");
+    cmdArgs.push_back("-fno-builtin-valloc");
+    cmdArgs.push_back("-fno-builtin-free");
+    cmdArgs.push_back("-fno-builtin-strdup");
+    cmdArgs.push_back("-fno-builtin-strndup");
+  }
 
       if (Arg *abiArg =
               args.getLastArg(options::OPT_fobjc_nonfragile_abi_version_EQ)) {
