hi,

currently building mozillas, i get tons of this on stderr:
warning: clang-13: warning: argument unused during compilation: 
'-fstack-clash-protection' [-Wunused-command-line-argument]

filed an upstream issue about it
(https://bugzilla.mozilla.org/show_bug.cgi?id=1852202) to realize its an
llvm feature that was originally added in llvm 11
(https://reviews.llvm.org/D68720), but only enabled on
linux, and later on (14 or 15) in FreeBSD
(https://github.com/llvm/llvm-project/blob/b0ea2790c41db65b3c283f78a5f534bc26fc6f8f/clang/lib/Driver/ToolChains/Clang.cpp#L3476)
 - according to
https://reviews.llvm.org/D68720#2415629 it should have been enabled
everywhere. In mozilla-land of course the flag is added if clang > 11 is
found on non-osx/non-windows, which includes OpenBSD, which triggers the
-Wunused-command-line-argument warning.

it's to protect against 
https://www.qualys.com/2017/06/19/stack-clash/stack-clash.txt

the attached patch enables it in both ports llvm flavors. Been able to
build firefox with way less noise on stderr with that.

ofc, this can/should also be enabled in base llvm.

Landry
Index: 13/Makefile
===================================================================
RCS file: /cvs/ports/devel/llvm/13/Makefile,v
retrieving revision 1.6
diff -u -p -r1.6 Makefile
--- 13/Makefile 8 Sep 2023 14:11:33 -0000       1.6
+++ 13/Makefile 11 Sep 2023 06:44:34 -0000
@@ -2,7 +2,7 @@ LLVM_MAJOR =    13
 LLVM_VERSION = ${LLVM_MAJOR}.0.0
 LLVM_PKGSPEC = >=13,<14
 
-REVISION-main =                11
+REVISION-main =                12
 REVISION-lldb =                4
 REVISION-python =      3
 
Index: 13/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
===================================================================
RCS file: 
/cvs/ports/devel/llvm/13/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 patch-clang_lib_Driver_ToolChains_Clang_cpp
--- 13/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp      3 Sep 2023 
15:59:27 -0000       1.1.1.1
+++ 13/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp      11 Sep 2023 
06:44:34 -0000
@@ -39,6 +39,7 @@
 - Turn on pointer-authentication on arm64 as well by default.  This means
   we effectively enable -mbranch-protection=standard on arm64 now.
 - Make sure -msign-return-address doesn't disable BTI support.
+- Enable -fstack-clash-protection on OpenBSD
 
 Index: clang/lib/Driver/ToolChains/Clang.cpp
 --- clang/lib/Driver/ToolChains/Clang.cpp.orig
@@ -80,6 +81,15 @@ Index: clang/lib/Driver/ToolChains/Clang
  
          MipsTargetFeature = llvm::StringSwitch<const char *>(Value)
                                  .Case("-mips1", "+mips1")
+@@ -3180,7 +3194,7 @@ static void RenderSCPOptions(const ToolChain &TC, cons
+                              ArgStringList &CmdArgs) {
+   const llvm::Triple &EffectiveTriple = TC.getEffectiveTriple();
+ 
+-  if (!EffectiveTriple.isOSLinux())
++  if (!EffectiveTriple.isOSOpenBSD() && !EffectiveTriple.isOSLinux())
+     return;
+ 
+   if (!EffectiveTriple.isX86() && !EffectiveTriple.isSystemZ() &&
 @@ -4943,9 +4957,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
Index: 16/Makefile
===================================================================
RCS file: /cvs/ports/devel/llvm/16/Makefile,v
retrieving revision 1.7
diff -u -p -r1.7 Makefile
--- 16/Makefile 8 Sep 2023 14:11:33 -0000       1.7
+++ 16/Makefile 11 Sep 2023 06:44:34 -0000
@@ -2,7 +2,7 @@ LLVM_MAJOR =    16
 LLVM_VERSION = ${LLVM_MAJOR}.0.6
 LLVM_PKGSPEC = >=16,<17
 
-REVISION-main =                5
+REVISION-main =                6
 REVISION-lldb =                1
 REVISION-python =      0
 
Index: 16/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp
===================================================================
RCS file: 
/cvs/ports/devel/llvm/16/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 patch-clang_lib_Driver_ToolChains_Clang_cpp
--- 16/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp      3 Sep 2023 
16:00:03 -0000       1.1.1.1
+++ 16/patches/patch-clang_lib_Driver_ToolChains_Clang_cpp      11 Sep 2023 
06:44:34 -0000
@@ -27,7 +27,17 @@ Index: clang/lib/Driver/ToolChains/Clang
  
          MipsTargetFeature = llvm::StringSwitch<const char *>(Value)
                                  .Case("-mips1", "+mips1")
-@@ -5289,9 +5301,12 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -3363,7 +3375,8 @@ static void RenderSCPOptions(const ToolChain &TC, cons
+                              ArgStringList &CmdArgs) {
+   const llvm::Triple &EffectiveTriple = TC.getEffectiveTriple();
+ 
+-  if (!EffectiveTriple.isOSFreeBSD() && !EffectiveTriple.isOSLinux())
++  if (!EffectiveTriple.isOSFreeBSD() && !EffectiveTriple.isOSOpenBSD() &&
++      !EffectiveTriple.isOSLinux())
+     return;
+ 
+   if (!EffectiveTriple.isX86() && !EffectiveTriple.isSystemZ() &&
+@@ -5289,9 +5302,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.
@@ -42,7 +52,7 @@ Index: clang/lib/Driver/ToolChains/Clang
      CmdArgs.push_back("-relaxed-aliasing");
    if (!Args.hasFlag(options::OPT_fstruct_path_tbaa,
                      options::OPT_fno_struct_path_tbaa, true))
-@@ -6321,7 +6336,8 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6321,7 +6337,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");
@@ -52,7 +62,7 @@ Index: clang/lib/Driver/ToolChains/Clang
  
    if (Arg *A = Args.getLastArg(options::OPT_freroll_loops,
                                 options::OPT_fno_reroll_loops))
-@@ -6342,7 +6358,48 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6342,7 +6359,48 @@ void Clang::ConstructJob(Compilation &C, const JobActi
    Args.addOptInFlag(CmdArgs, options::OPT_mspeculative_load_hardening,
                      options::OPT_mno_speculative_load_hardening);
  
@@ -102,7 +112,7 @@ Index: clang/lib/Driver/ToolChains/Clang
    RenderSCPOptions(TC, Args, CmdArgs);
    RenderTrivialAutoVarInitOptions(D, TC, Args, CmdArgs);
  
-@@ -6417,6 +6474,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6417,6 +6475,11 @@ void Clang::ConstructJob(Compilation &C, const JobActi
    if (Arg *A = Args.getLastArg(options::OPT_fcf_protection_EQ)) {
      CmdArgs.push_back(
          Args.MakeArgString(Twine("-fcf-protection=") + A->getValue()));
@@ -114,7 +124,7 @@ Index: clang/lib/Driver/ToolChains/Clang
    }
  
    if (Arg *A = Args.getLastArg(options::OPT_mfunction_return_EQ))
-@@ -6895,6 +6957,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
+@@ -6895,6 +6958,18 @@ void Clang::ConstructJob(Compilation &C, const JobActi
                                       options::OPT_fno_rewrite_imports, false);
    if (RewriteImports)
      CmdArgs.push_back("-frewrite-imports");

Reply via email to