================ @@ -3126,3 +3137,57 @@ CodeGenFunction::EmitPointerAuthAuth(const CGPointerAuthInfo &PointerAuth, return EmitPointerAuthCommon(*this, PointerAuth, Pointer, llvm::Intrinsic::ptrauth_auth); } + +llvm::Value *CodeGenFunction::EmitPointerAuthSign(QualType pointeeType, + llvm::Value *pointer) { + CGPointerAuthInfo pointerAuth = + CGM.getPointerAuthInfoForPointeeType(pointeeType); + return EmitPointerAuthSign(pointerAuth, pointer); +} + +llvm::Value *CodeGenFunction::EmitPointerAuthAuth(QualType pointeeType, + llvm::Value *pointer) { + CGPointerAuthInfo pointerAuth = + CGM.getPointerAuthInfoForPointeeType(pointeeType); + return EmitPointerAuthAuth(pointerAuth, pointer); +} + +llvm::Value * +CodeGenFunction::EmitPointerAuthResignCall(llvm::Value *value, + const CGPointerAuthInfo &curAuth, + const CGPointerAuthInfo &newAuth) { + assert(curAuth && newAuth); + + if (curAuth.getAuthenticationMode() != + PointerAuthenticationMode::SignAndAuth || + newAuth.getAuthenticationMode() != + PointerAuthenticationMode::SignAndAuth) { + auto authedValue = EmitPointerAuthAuth(curAuth, value); + return EmitPointerAuthSign(newAuth, authedValue); + } + // Convert the pointer to intptr_t before signing it. + auto origType = value->getType(); + value = Builder.CreatePtrToInt(value, IntPtrTy); + + auto curKey = Builder.getInt32(curAuth.getKey()); + auto newKey = Builder.getInt32(newAuth.getKey()); + + llvm::Value *curDiscriminator = curAuth.getDiscriminator(); + if (!curDiscriminator) + curDiscriminator = Builder.getSize(0); + + llvm::Value *newDiscriminator = newAuth.getDiscriminator(); + if (!newDiscriminator) ---------------- kovdan01 wrote:
Nit: it looks like that it's a pretty common practice to check returned value of `.getDiscriminator()` against nullptr and then assign discriminator to zero constant of size type if the check succeeds. Probably it's worth adding a corresponding file-local helper or member function. Feel free to ignore. https://github.com/llvm/llvm-project/pull/98847 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits