================ @@ -622,6 +628,40 @@ class MCPlusBuilder { return std::make_pair(getNoRegister(), getNoRegister()); } + /// Analyzes if a pointer is checked to be valid by the end of BB. + /// + /// It is possible for pointer authentication instructions not to terminate + /// the program abnormally on authentication failure and return some *invalid + /// pointer* instead (like it is done on AArch64 when FEAT_FPAC is not + /// implemented). This might be enough to crash on invalid memory access + /// when the pointer is later used as the destination of load/store or branch + /// instruction. On the other hand, when the pointer is not used right away, + /// it may be important for the compiler to check the address explicitly not + /// to introduce signing or authentication oracle. + /// + /// If this function returns a (Reg, Inst) pair, then it is known that in any + /// successor of BB either + /// * Reg is trusted, provided it was safe-to-dereference before Inst, or + /// * the program is terminated abnormally without introducing any signing + /// or authentication oracles + virtual std::optional<std::pair<MCPhysReg, MCInst *>> ---------------- kbeyls wrote:
Before reading the rest of this patch, I would guess that in theory there could be multiple such (Reg, Inst) pairs in a single basic block? If so, should this return a list/vector/... instead of an optional? https://github.com/llvm/llvm-project/pull/134146 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits