$OpenBSD: patch-tools_clang_lib_Driver_ToolChains_Arch_X86_cpp,v 1.3 2020/09/03 20:54:01 rsadowski Exp $

- change the default i386 target to i586 processors
- Turn on -mretpoline by default in clang on amd64.

Index: tools/clang/lib/Driver/ToolChains/Arch/X86.cpp
--- tools/clang/lib/Driver/ToolChains/Arch/X86.cpp.orig
+++ tools/clang/lib/Driver/ToolChains/Arch/X86.cpp
@@ -95,9 +95,9 @@ const char *x86::getX86TargetCPU(const ArgList &Args,
   switch (Triple.getOS()) {
   case llvm::Triple::FreeBSD:
   case llvm::Triple::NetBSD:
-  case llvm::Triple::OpenBSD:
     return "i486";
   case llvm::Triple::Haiku:
+  case llvm::Triple::OpenBSD:
     return "i586";
   default:
     // Fallback to p4.
@@ -147,6 +147,12 @@ void x86::getX86TargetFeatures(const Driver &D, const 
   // consider deprecating this and instead warn if the user requests external
   // retpoline thunks and *doesn't* request some form of retpolines.
   auto SpectreOpt = clang::driver::options::ID::OPT_INVALID;
+  if (Triple.isOSOpenBSD() && Triple.getArch() == llvm::Triple::x86_64 &&
+      Args.hasFlag(options::OPT_mretpoline, options::OPT_mno_retpoline, true)) {
+      Features.push_back("+retpoline-indirect-calls");
+      Features.push_back("+retpoline-indirect-branches");
+      SpectreOpt = options::OPT_mretpoline;
+  } else
   if (Args.hasArgNoClaim(options::OPT_mretpoline, options::OPT_mno_retpoline,
                          options::OPT_mspeculative_load_hardening,
                          options::OPT_mno_speculative_load_hardening)) {
