mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-10-06 14:57:41 +00:00
[asan] insert __asan_loadN/__asan_storeN as out-lined asan checks, llvm part
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206734 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7d5100d14e
commit
215fc7d998
@ -365,7 +365,8 @@ struct AddressSanitizer : public FunctionPass {
|
|||||||
Function *AsanErrorCallback[2][kNumberOfAccessSizes];
|
Function *AsanErrorCallback[2][kNumberOfAccessSizes];
|
||||||
Function *AsanMemoryAccessCallback[2][kNumberOfAccessSizes];
|
Function *AsanMemoryAccessCallback[2][kNumberOfAccessSizes];
|
||||||
// This array is indexed by AccessIsWrite.
|
// This array is indexed by AccessIsWrite.
|
||||||
Function *AsanErrorCallbackSized[2];
|
Function *AsanErrorCallbackSized[2],
|
||||||
|
*AsanMemoryAccessCallbackSized[2];
|
||||||
InlineAsm *EmptyAsm;
|
InlineAsm *EmptyAsm;
|
||||||
SetOfDynamicallyInitializedGlobals DynamicallyInitializedGlobals;
|
SetOfDynamicallyInitializedGlobals DynamicallyInitializedGlobals;
|
||||||
|
|
||||||
@ -824,8 +825,12 @@ void AddressSanitizer::instrumentAddress(Instruction *OrigIns,
|
|||||||
size_t AccessSizeIndex = TypeSizeToSizeIndex(TypeSize);
|
size_t AccessSizeIndex = TypeSizeToSizeIndex(TypeSize);
|
||||||
|
|
||||||
if (UseCalls) {
|
if (UseCalls) {
|
||||||
IRB.CreateCall(AsanMemoryAccessCallback[IsWrite][AccessSizeIndex],
|
if (SizeArgument)
|
||||||
AddrLong);
|
IRB.CreateCall2(AsanMemoryAccessCallbackSized[IsWrite], AddrLong,
|
||||||
|
SizeArgument);
|
||||||
|
else
|
||||||
|
IRB.CreateCall(AsanMemoryAccessCallback[IsWrite][AccessSizeIndex],
|
||||||
|
AddrLong);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1149,6 +1154,13 @@ void AddressSanitizer::initializeCallbacks(Module &M) {
|
|||||||
AsanErrorCallbackSized[1] = checkInterfaceFunction(M.getOrInsertFunction(
|
AsanErrorCallbackSized[1] = checkInterfaceFunction(M.getOrInsertFunction(
|
||||||
kAsanReportStoreN, IRB.getVoidTy(), IntptrTy, IntptrTy, NULL));
|
kAsanReportStoreN, IRB.getVoidTy(), IntptrTy, IntptrTy, NULL));
|
||||||
|
|
||||||
|
AsanMemoryAccessCallbackSized[0] = checkInterfaceFunction(
|
||||||
|
M.getOrInsertFunction(ClMemoryAccessCallbackPrefix + "loadN",
|
||||||
|
IRB.getVoidTy(), IntptrTy, IntptrTy, NULL));
|
||||||
|
AsanMemoryAccessCallbackSized[1] = checkInterfaceFunction(
|
||||||
|
M.getOrInsertFunction(ClMemoryAccessCallbackPrefix + "storeN",
|
||||||
|
IRB.getVoidTy(), IntptrTy, IntptrTy, NULL));
|
||||||
|
|
||||||
AsanHandleNoReturnFunc = checkInterfaceFunction(M.getOrInsertFunction(
|
AsanHandleNoReturnFunc = checkInterfaceFunction(M.getOrInsertFunction(
|
||||||
kAsanHandleNoReturnName, IRB.getVoidTy(), NULL));
|
kAsanHandleNoReturnName, IRB.getVoidTy(), NULL));
|
||||||
AsanCovFunction = checkInterfaceFunction(M.getOrInsertFunction(
|
AsanCovFunction = checkInterfaceFunction(M.getOrInsertFunction(
|
||||||
|
Loading…
Reference in New Issue
Block a user