Christian Weisgerber <na...@mips.inka.de> wrote:

> Mark Kettenis:
> 
> > CVSROOT:    /cvs
> > Module name:        src
> > Changes by: kette...@cvs.openbsd.org        2023/04/17 12:10:26
> > 
> > Modified files:
> >     gnu/llvm/clang/lib/Driver/ToolChains: Clang.cpp 
> > 
> > Log message:
> > Make -mbranch-protection=bti the default on OpenBSD.
> 
> LLVM 15 reshuffled some code, so the change above no longer applies
> there.  Here's my attempt to add it:

I suspect there will be a different arm64 variation of that diff coming
which tries to change the default at a lower level.

Here is the corresponding amd64 diff (an earlier version had a bug) for
in-tree clang.  It changes it so BTI is enabled by default, and then adds
missing code to allow it to be turned off.

Index: gnu/llvm/clang/include/clang/Basic/CodeGenOptions.def
===================================================================
RCS file: /cvs/src/gnu/llvm/clang/include/clang/Basic/CodeGenOptions.def,v
retrieving revision 1.4
diff -u -p -u -r1.4 CodeGenOptions.def
--- gnu/llvm/clang/include/clang/Basic/CodeGenOptions.def       17 Dec 2021 
14:46:43 -0000      1.4
+++ gnu/llvm/clang/include/clang/Basic/CodeGenOptions.def       17 Apr 2023 
18:36:15 -0000
@@ -102,7 +102,7 @@ CODEGENOPT(InstrumentFunctionEntryBare ,
                                ///< -finstrument-function-entry-bare is 
enabled.
 CODEGENOPT(CFProtectionReturn , 1, 0) ///< if -fcf-protection is
                                       ///< set to full or return.
-CODEGENOPT(CFProtectionBranch , 1, 0) ///< if -fcf-protection is
+CODEGENOPT(CFProtectionBranch , 1, 1) ///< if -fcf-protection is
                                       ///< set to full or branch.
 CODEGENOPT(XRayInstrumentFunctions , 1, 0) ///< Set when -fxray-instrument is
                                            ///< enabled.
Index: gnu/llvm/clang/lib/Frontend/CompilerInvocation.cpp
===================================================================
RCS file: /cvs/src/gnu/llvm/clang/lib/Frontend/CompilerInvocation.cpp,v
retrieving revision 1.5
diff -u -p -u -r1.5 CompilerInvocation.cpp
--- gnu/llvm/clang/lib/Frontend/CompilerInvocation.cpp  17 Dec 2021 14:46:44 
-0000      1.5
+++ gnu/llvm/clang/lib/Frontend/CompilerInvocation.cpp  18 Apr 2023 10:48:28 
-0000
@@ -1792,7 +1792,10 @@ bool CompilerInvocation::ParseCodeGenArg
       Opts.CFProtectionReturn = 1;
     else if (Name == "branch")
       Opts.CFProtectionBranch = 1;
-    else if (Name != "none")
+    else if (Name == "none") {
+      Opts.CFProtectionBranch = 0;
+      Opts.CFProtectionReturn = 0;
+    } else
       Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << 
Name;
   }
 
@@ -3653,7 +3656,8 @@ bool CompilerInvocation::ParseLangArgs(L
     StringRef Name = A->getValue();
     if (Name == "full" || Name == "branch") {
       Opts.CFProtectionBranch = 1;
-    }
+    } else if (Name == "none")
+      Opts.CFProtectionBranch = 1;
   }
 
   if ((Args.hasArg(OPT_fsycl_is_device) || Args.hasArg(OPT_fsycl_is_host)) &&

Reply via email to