mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 00:32:55 +00:00
[asan] fix caller-calee instrumentation to emit new cache for every call site
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220973 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e05a7e111e
commit
96076957ac
@ -1405,13 +1405,13 @@ void AddressSanitizer::InjectCoverageForIndirectCalls(
|
||||
const int kCacheSize = 16;
|
||||
const int kCacheAlignment = 64; // Align for better performance.
|
||||
Type *Ty = ArrayType::get(IntptrTy, kCacheSize);
|
||||
GlobalVariable *CalleeCache =
|
||||
new GlobalVariable(*F.getParent(), Ty, false, GlobalValue::PrivateLinkage,
|
||||
Constant::getNullValue(Ty), "__asan_gen_callee_cache");
|
||||
CalleeCache->setAlignment(kCacheAlignment);
|
||||
for (auto I : IndirCalls) {
|
||||
IRBuilder<> IRB(I);
|
||||
CallSite CS(I);
|
||||
GlobalVariable *CalleeCache = new GlobalVariable(
|
||||
*F.getParent(), Ty, false, GlobalValue::PrivateLinkage,
|
||||
Constant::getNullValue(Ty), "__asan_gen_callee_cache");
|
||||
CalleeCache->setAlignment(kCacheAlignment);
|
||||
IRB.CreateCall2(AsanCovIndirCallFunction,
|
||||
IRB.CreatePointerCast(CS.getCalledValue(), IntptrTy),
|
||||
IRB.CreatePointerCast(CalleeCache, IntptrTy));
|
||||
|
@ -78,9 +78,13 @@ entry:
|
||||
%vtable = load void (%struct.StructWithVptr*)*** %0, align 8
|
||||
%1 = load void (%struct.StructWithVptr*)** %vtable, align 8
|
||||
tail call void %1(%struct.StructWithVptr* %foo)
|
||||
tail call void %1(%struct.StructWithVptr* %foo)
|
||||
ret void
|
||||
}
|
||||
|
||||
; We expect to see two calls to __sanitizer_cov_indir_call16
|
||||
; with different values of second argument.
|
||||
; CHECK4-LABEL: define void @CallViaVptr
|
||||
; CHECK4: call void @__sanitizer_cov_indir_call16
|
||||
; CHECK4: call void @__sanitizer_cov_indir_call16({{.*}},[[CACHE:.*]])
|
||||
; CHECK4-NOT: call void @__sanitizer_cov_indir_call16({{.*}},[[CACHE]])
|
||||
; CHECK4: ret void
|
||||
|
Loading…
x
Reference in New Issue
Block a user