[clang] [llvm] [RISCV][Zicfilp] Enable Zicfilp CFI compiler behaviors by looking at module flags (PR #152121)
Ming-Yi Lai via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 25 01:27:23 PDT 2025
================
@@ -1802,3 +1800,15 @@ def FeatureTaggedGlobals : SubtargetFeature<"tagged-globals",
"AllowTaggedGlobals",
"true", "Use an instruction sequence for taking the address of a global "
"that allows a memory tag in the upper address bits">;
+
+// Zicfilp-based CFI
+def FeatureZicfilpUnlabeled
+ : SubtargetFeature<
+ "zicfilp-unlabeled", "HasZicfilpUnlabeled", "true",
+ "Enforce forward-edge control-flow integrity with ZICFILP-unlabeled">;
+def FeatureZicfilpFuncSig
+ : SubtargetFeature<
+ "zicfilp-func-sig", "HasZicfilpFuncSig", "true",
+ "Enforce forward-edge control-flow integrity with ZICFILP-func-sig">;
----------------
mylai-mtk wrote:
I'm not sure if the "enum" (or in the TableGen backend implementation, "integer") is a proper fit here. It looks like the integer version of `SubtargetFeature` actually models features with "leveled" semantics, e.g. `-target-feature +feature-10` would override `-target-feature +feature-0`. This feels wrong as the leveled semantics does not suit ZicfilpCFI in that different options should err instead of override. The current TableGen usages of this integer-based SubtargetFeature may work, but I don't think it's semantics guarantee future soundness.
> // Value - Value the XXXSubtarget field to be set to by feature.
> //
> // A value of "true" or "false" implies the field is a bool. Otherwise,
> // it is assumed to be an integer. the integer value may be the name of an
> // enum constant. If multiple features use the same integer field, the
> // field will be set to the maximum value of all enabled features that
> // share the field.
> //
> string Value = v;
( https://github.com/llvm/llvm-project/blob/0263c15f874d4fc33308db93023e583b816b920e/llvm/include/llvm/Target/Target.td#L499 )
https://github.com/llvm/llvm-project/pull/152121
More information about the cfe-commits
mailing list