[clang] [compiler-rt] [ubsan_minimal] Allow UBSan handler from Minimal runtime to accept arguments (PR #152192)
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 6 10:48:15 PDT 2025
================
@@ -3794,28 +3821,37 @@ void CodeGenFunction::EmitCheck(
// representing operand values.
SmallVector<llvm::Value *, 4> Args;
SmallVector<llvm::Type *, 4> ArgTypes;
- if (!CGM.getCodeGenOpts().SanitizeMinimalRuntime) {
- Args.reserve(DynamicArgs.size() + 1);
- ArgTypes.reserve(DynamicArgs.size() + 1);
-
- // Emit handler arguments and create handler function type.
- if (!StaticArgs.empty()) {
- llvm::Constant *Info = llvm::ConstantStruct::getAnon(StaticArgs);
- auto *InfoPtr = new llvm::GlobalVariable(
- CGM.getModule(), Info->getType(), false,
- llvm::GlobalVariable::PrivateLinkage, Info, "", nullptr,
- llvm::GlobalVariable::NotThreadLocal,
- CGM.getDataLayout().getDefaultGlobalsAddressSpace());
- InfoPtr->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
- CGM.getSanitizerMetadata()->disableSanitizerForGlobal(InfoPtr);
- Args.push_back(InfoPtr);
- ArgTypes.push_back(Args.back()->getType());
- }
- for (llvm::Value *DynamicArg : DynamicArgs) {
- Args.push_back(EmitCheckValue(DynamicArg));
- ArgTypes.push_back(IntPtrTy);
- }
+ SmallVector<llvm::Constant *, 4> HandlerStaticArgs;
----------------
vitalybuka wrote:
```
static std::pair<ArrayRef<llvm::Constant *>, ArrayRef<llvm::Value *>>
AdaptArgsToHandler(CodeGenModule &CGM, SanitizerHandler CheckHandler,
ArrayRef<llvm::Constant *> StaticArgs,
ArrayRef<llvm::Value *> DynamicArgs) {
if (!CGM.getCodeGenOpts().SanitizeMinimalRuntime)
return {StaticArgs, DynamicArgs};
switch (CheckHandler) {
case SanitizerHandler::TypeMismatch:
// Pass value pointer only. It adds minimal overhead.
assert(DynamicArgs.size() == 1);
return {{}, DynamicArgs};
default:
// No arguments for other checks.
return {};
}
}
```
```
std::tie(StaticArgs, DynamicArgs) =
AdaptArgsToHandler(CGM, CheckHandler, StaticArgs, DynamicArgs);
```
Looks nicer to me?
https://github.com/llvm/llvm-project/pull/152192
More information about the llvm-commits
mailing list