[llvm] [BOLT][PAC] Warn about synchronous unwind tables (PR #165227)
Peter Waller via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 8 01:49:01 PST 2025
================
@@ -130,14 +137,34 @@ Error PointerAuthCFIAnalyzer::runOnFunctions(BinaryContext &BC) {
return P.second.containedNegateRAState() && !P.second.isIgnored();
});
+ if (Total == 0)
+ return Error::success();
+
ParallelUtilities::runOnEachFunction(
BC, ParallelUtilities::SchedulingPolicy::SP_INST_LINEAR, WorkFun,
SkipPredicate, "PointerAuthCFIAnalyzer");
+
+ float IgnoredPercent = (100.0 * FunctionsIgnored) / Total;
BC.outs() << "BOLT-INFO: PointerAuthCFIAnalyzer ran on " << Total
<< " functions. Ignored " << FunctionsIgnored << " functions "
- << format("(%.2lf%%)", (100.0 * FunctionsIgnored) / Total)
+ << format("(%.2lf%%)", IgnoredPercent)
<< " because of CFI inconsistencies\n";
+ // Errors in the input are expected from two sources:
+ // - compilers emitting incorrect CFIs. This happens more frequently with
+ // older compiler versions, but it should not account for a large percentage.
+ // - input binary is using synchronous unwind tables. This means that after
+ // call sites, the unwind CFIs are dropped: the pass sees missing
+ // .cfi_negate_ra_state from autiasp instructions. If this is the case, a
+ // larger percentage of functions will be ignored.
----------------
peterwaller-arm wrote:
nit. Formatting for a bulleted list would usually indent:
```
// - compilers emitting incorrect CFIs. This happens more frequently with
// older compiler versions, but it should not account for a large percentage.
```
https://github.com/llvm/llvm-project/pull/165227
More information about the llvm-commits
mailing list