On openbsd amd64, the compiler has been found to generate some nasty jump
authorderaadt <deraadt@openbsd.org>
Wed, 26 Apr 2023 22:12:44 +0000 (22:12 +0000)
committerderaadt <deraadt@openbsd.org>
Wed, 26 Apr 2023 22:12:44 +0000 (22:12 +0000)
table variations (calculate address into %rax, jmp %rax) which is not
compatible with IBT endbr64.  The specific generated code sequence was
found inside clang, which made the debugging experience pretty miserable.
So we will have to disable jump tables by default.
ok kettenis

gnu/llvm/clang/lib/Driver/ToolChains/Clang.cpp

index 3c80a6e..524c009 100644 (file)
@@ -6017,6 +6017,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
   } else if (Triple.isOSOpenBSD() && Triple.getArch() == llvm::Triple::x86_64) {
     // Emit IBT endbr64 instructions by default
     CmdArgs.push_back("-fcf-protection=branch");
+    // jump-table can generate indirect jumps, which are not permitted
+    CmdArgs.push_back("-fno-jump-tables");
   }
 
   // Forward -f options with positive and negative forms; we translate these by