Lines Matching refs:IRB
288 Value *getOpaqueNoopCast(IRBuilder<> &IRB, Value *Val);
290 Value *getDynamicShadowIfunc(IRBuilder<> &IRB);
291 Value *getShadowNonTls(IRBuilder<> &IRB);
294 Value *memToShadow(Value *Shadow, IRBuilder<> &IRB);
311 void tagAlloca(IRBuilder<> &IRB, AllocaInst *AI, Value *Tag, size_t Size);
312 Value *tagPointer(IRBuilder<> &IRB, Type *Ty, Value *PtrLong, Value *Tag);
313 Value *untagPointer(IRBuilder<> &IRB, Value *PtrLong);
317 Value *readRegister(IRBuilder<> &IRB, StringRef Name);
319 Value *getNextTagWithCall(IRBuilder<> &IRB);
320 Value *getStackBaseTag(IRBuilder<> &IRB);
321 Value *getAllocaTag(IRBuilder<> &IRB, Value *StackTag, AllocaInst *AI,
323 Value *getUARTag(IRBuilder<> &IRB, Value *StackTag);
325 Value *getHwasanThreadSlotPtr(IRBuilder<> &IRB, Type *Ty);
326 Value *applyTagMask(IRBuilder<> &IRB, Value *OldTag);
329 void emitPrologue(IRBuilder<> &IRB, bool WithFrameRecord);
334 Value *getPC(IRBuilder<> &IRB);
335 Value *getSP(IRBuilder<> &IRB);
336 Value *getFrameRecordInfo(IRBuilder<> &IRB);
565 IRBuilder<> IRB(*C); in initializeModule() local
566 IntptrTy = IRB.getIntPtrTy(DL); in initializeModule()
567 Int8PtrTy = IRB.getInt8PtrTy(); in initializeModule()
568 Int8Ty = IRB.getInt8Ty(); in initializeModule()
569 Int32Ty = IRB.getInt32Ty(); in initializeModule()
630 IRBuilder<> IRB(*C); in initializeCallbacks() local
637 FunctionType::get(IRB.getVoidTy(), {IntptrTy, IntptrTy}, false)); in initializeCallbacks()
645 FunctionType::get(IRB.getVoidTy(), {IntptrTy}, false)); in initializeCallbacks()
650 "__hwasan_tag_memory", IRB.getVoidTy(), Int8PtrTy, Int8Ty, IntptrTy); in initializeCallbacks()
655 "__hwasan_add_frame_record", IRB.getVoidTy(), Int64Ty); in initializeCallbacks()
658 ArrayType::get(IRB.getInt8Ty(), 0)); in initializeCallbacks()
665 IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), in initializeCallbacks()
666 IRB.getInt8PtrTy(), IntptrTy); in initializeCallbacks()
668 IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), in initializeCallbacks()
669 IRB.getInt8PtrTy(), IntptrTy); in initializeCallbacks()
671 IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), in initializeCallbacks()
672 IRB.getInt32Ty(), IntptrTy); in initializeCallbacks()
675 M.getOrInsertFunction("__hwasan_handle_vfork", IRB.getVoidTy(), IntptrTy); in initializeCallbacks()
678 Value *HWAddressSanitizer::getOpaqueNoopCast(IRBuilder<> &IRB, Value *Val) { in getOpaqueNoopCast() argument
687 return IRB.CreateCall(Asm, {Val}, ".hwasan.shadow"); in getOpaqueNoopCast()
690 Value *HWAddressSanitizer::getDynamicShadowIfunc(IRBuilder<> &IRB) { in getDynamicShadowIfunc() argument
691 return getOpaqueNoopCast(IRB, ShadowGlobal); in getDynamicShadowIfunc()
694 Value *HWAddressSanitizer::getShadowNonTls(IRBuilder<> &IRB) { in getShadowNonTls() argument
697 IRB, ConstantExpr::getIntToPtr( in getShadowNonTls()
701 return getDynamicShadowIfunc(IRB); in getShadowNonTls()
704 IRB.GetInsertBlock()->getParent()->getParent()->getOrInsertGlobal( in getShadowNonTls()
706 return IRB.CreateLoad(Int8PtrTy, GlobalDynamicAddress); in getShadowNonTls()
797 IRBuilder<> IRB(I); in untagPointerOperand() local
798 Value *AddrLong = IRB.CreatePointerCast(Addr, IntptrTy); in untagPointerOperand()
800 IRB.CreateIntToPtr(untagPointer(IRB, AddrLong), Addr->getType()); in untagPointerOperand()
804 Value *HWAddressSanitizer::memToShadow(Value *Mem, IRBuilder<> &IRB) { in memToShadow() argument
806 Value *Shadow = IRB.CreateLShr(Mem, Mapping.Scale); in memToShadow()
808 return IRB.CreateIntToPtr(Shadow, Int8PtrTy); in memToShadow()
810 return IRB.CreateGEP(Int8Ty, ShadowBase, Shadow); in memToShadow()
828 IRBuilder<> IRB(InsertBefore); in instrumentMemAccessOutline() local
829 Module *M = IRB.GetInsertBlock()->getParent()->getParent(); in instrumentMemAccessOutline()
830 Ptr = IRB.CreateBitCast(Ptr, Int8PtrTy); in instrumentMemAccessOutline()
831 IRB.CreateCall(Intrinsic::getDeclaration( in instrumentMemAccessOutline()
843 IRBuilder<> IRB(InsertBefore); in instrumentMemAccessInline() local
845 Value *PtrLong = IRB.CreatePointerCast(Ptr, IntptrTy); in instrumentMemAccessInline()
846 Value *PtrTag = IRB.CreateTrunc(IRB.CreateLShr(PtrLong, PointerTagShift), in instrumentMemAccessInline()
847 IRB.getInt8Ty()); in instrumentMemAccessInline()
848 Value *AddrLong = untagPointer(IRB, PtrLong); in instrumentMemAccessInline()
849 Value *Shadow = memToShadow(AddrLong, IRB); in instrumentMemAccessInline()
850 Value *MemTag = IRB.CreateLoad(Int8Ty, Shadow); in instrumentMemAccessInline()
851 Value *TagMismatch = IRB.CreateICmpNE(PtrTag, MemTag); in instrumentMemAccessInline()
854 Value *TagNotIgnored = IRB.CreateICmpNE( in instrumentMemAccessInline()
856 TagMismatch = IRB.CreateAnd(TagMismatch, TagNotIgnored); in instrumentMemAccessInline()
863 IRB.SetInsertPoint(CheckTerm); in instrumentMemAccessInline()
865 IRB.CreateICmpUGT(MemTag, ConstantInt::get(Int8Ty, 15)); in instrumentMemAccessInline()
870 IRB.SetInsertPoint(CheckTerm); in instrumentMemAccessInline()
871 Value *PtrLowBits = IRB.CreateTrunc(IRB.CreateAnd(PtrLong, 15), Int8Ty); in instrumentMemAccessInline()
872 PtrLowBits = IRB.CreateAdd( in instrumentMemAccessInline()
874 Value *PtrLowBitsOOB = IRB.CreateICmpUGE(PtrLowBits, MemTag); in instrumentMemAccessInline()
880 IRB.SetInsertPoint(CheckTerm); in instrumentMemAccessInline()
881 Value *InlineTagAddr = IRB.CreateOr(AddrLong, 15); in instrumentMemAccessInline()
882 InlineTagAddr = IRB.CreateIntToPtr(InlineTagAddr, Int8PtrTy); in instrumentMemAccessInline()
883 Value *InlineTag = IRB.CreateLoad(Int8Ty, InlineTagAddr); in instrumentMemAccessInline()
884 Value *InlineTagMismatch = IRB.CreateICmpNE(PtrTag, InlineTag); in instrumentMemAccessInline()
890 IRB.SetInsertPoint(CheckFailTerm); in instrumentMemAccessInline()
896 FunctionType::get(IRB.getVoidTy(), {PtrLong->getType()}, false), in instrumentMemAccessInline()
907 FunctionType::get(IRB.getVoidTy(), {PtrLong->getType()}, false), in instrumentMemAccessInline()
915 IRB.CreateCall(Asm, PtrLong); in instrumentMemAccessInline()
931 IRBuilder<> IRB(MI); in instrumentMemIntrinsic() local
933 IRB.CreateCall( in instrumentMemIntrinsic()
935 {IRB.CreatePointerCast(MI->getOperand(0), IRB.getInt8PtrTy()), in instrumentMemIntrinsic()
936 IRB.CreatePointerCast(MI->getOperand(1), IRB.getInt8PtrTy()), in instrumentMemIntrinsic()
937 IRB.CreateIntCast(MI->getOperand(2), IntptrTy, false)}); in instrumentMemIntrinsic()
939 IRB.CreateCall( in instrumentMemIntrinsic()
941 {IRB.CreatePointerCast(MI->getOperand(0), IRB.getInt8PtrTy()), in instrumentMemIntrinsic()
942 IRB.CreateIntCast(MI->getOperand(1), IRB.getInt32Ty(), false), in instrumentMemIntrinsic()
943 IRB.CreateIntCast(MI->getOperand(2), IntptrTy, false)}); in instrumentMemIntrinsic()
956 IRBuilder<> IRB(O.getInsn()); in instrumentMemAccess() local
963 IRB.CreateCall(HwasanMemoryAccessCallback[O.IsWrite][AccessSizeIndex], in instrumentMemAccess()
964 IRB.CreatePointerCast(Addr, IntptrTy)); in instrumentMemAccess()
971 IRB.CreateCall(HwasanMemoryAccessCallbackSized[O.IsWrite], in instrumentMemAccess()
972 {IRB.CreatePointerCast(Addr, IntptrTy), in instrumentMemAccess()
980 void HWAddressSanitizer::tagAlloca(IRBuilder<> &IRB, AllocaInst *AI, Value *Tag, in tagAlloca() argument
986 Value *JustTag = IRB.CreateTrunc(Tag, IRB.getInt8Ty()); in tagAlloca()
988 IRB.CreateCall(HwasanTagMemoryFunc, in tagAlloca()
989 {IRB.CreatePointerCast(AI, Int8PtrTy), JustTag, in tagAlloca()
993 Value *ShadowPtr = memToShadow(IRB.CreatePointerCast(AI, IntptrTy), IRB); in tagAlloca()
1001 IRB.CreateMemSet(ShadowPtr, JustTag, ShadowSize, Align(1)); in tagAlloca()
1003 IRB.CreateStore( in tagAlloca()
1005 IRB.CreateConstGEP1_32(Int8Ty, ShadowPtr, ShadowSize)); in tagAlloca()
1006 IRB.CreateStore(JustTag, IRB.CreateConstGEP1_32( in tagAlloca()
1007 Int8Ty, IRB.CreateBitCast(AI, Int8PtrTy), in tagAlloca()
1034 Value *HWAddressSanitizer::applyTagMask(IRBuilder<> &IRB, Value *OldTag) { in applyTagMask() argument
1037 Value *NewTag = IRB.CreateAnd(OldTag, TagMask); in applyTagMask()
1044 Value *HWAddressSanitizer::getNextTagWithCall(IRBuilder<> &IRB) { in getNextTagWithCall() argument
1045 return IRB.CreateZExt(IRB.CreateCall(HwasanGenerateTagFunc), IntptrTy); in getNextTagWithCall()
1048 Value *HWAddressSanitizer::getStackBaseTag(IRBuilder<> &IRB) { in getStackBaseTag() argument
1050 return getNextTagWithCall(IRB); in getStackBaseTag()
1056 Value *StackPointerLong = getSP(IRB); in getStackBaseTag()
1058 applyTagMask(IRB, IRB.CreateXor(StackPointerLong, in getStackBaseTag()
1059 IRB.CreateLShr(StackPointerLong, 20))); in getStackBaseTag()
1064 Value *HWAddressSanitizer::getAllocaTag(IRBuilder<> &IRB, Value *StackTag, in getAllocaTag() argument
1067 return getNextTagWithCall(IRB); in getAllocaTag()
1068 return IRB.CreateXor(StackTag, in getAllocaTag()
1072 Value *HWAddressSanitizer::getUARTag(IRBuilder<> &IRB, Value *StackTag) { in getUARTag() argument
1076 return getNextTagWithCall(IRB); in getUARTag()
1077 return IRB.CreateXor(StackTag, ConstantInt::get(IntptrTy, TagMaskByte)); in getUARTag()
1081 Value *HWAddressSanitizer::tagPointer(IRBuilder<> &IRB, Type *Ty, in tagPointer() argument
1088 IRB.CreateOr(IRB.CreateShl(Tag, PointerTagShift), in tagPointer()
1090 TaggedPtrLong = IRB.CreateAnd(PtrLong, ShiftedTag); in tagPointer()
1093 Value *ShiftedTag = IRB.CreateShl(Tag, PointerTagShift); in tagPointer()
1094 TaggedPtrLong = IRB.CreateOr(PtrLong, ShiftedTag); in tagPointer()
1096 return IRB.CreateIntToPtr(TaggedPtrLong, Ty); in tagPointer()
1100 Value *HWAddressSanitizer::untagPointer(IRBuilder<> &IRB, Value *PtrLong) { in untagPointer() argument
1106 IRB.CreateOr(PtrLong, ConstantInt::get(PtrLong->getType(), in untagPointer()
1111 IRB.CreateAnd(PtrLong, ConstantInt::get(PtrLong->getType(), in untagPointer()
1117 Value *HWAddressSanitizer::getHwasanThreadSlotPtr(IRBuilder<> &IRB, Type *Ty) { in getHwasanThreadSlotPtr() argument
1118 Module *M = IRB.GetInsertBlock()->getParent()->getParent(); in getHwasanThreadSlotPtr()
1124 Value *SlotPtr = IRB.CreatePointerCast( in getHwasanThreadSlotPtr()
1125 IRB.CreateConstGEP1_32(IRB.getInt8Ty(), in getHwasanThreadSlotPtr()
1126 IRB.CreateCall(ThreadPointerFunc), 0x30), in getHwasanThreadSlotPtr()
1136 Value *HWAddressSanitizer::getPC(IRBuilder<> &IRB) { in getPC() argument
1138 return readRegister(IRB, "pc"); in getPC()
1140 return IRB.CreatePtrToInt(IRB.GetInsertBlock()->getParent(), IntptrTy); in getPC()
1143 Value *HWAddressSanitizer::getSP(IRBuilder<> &IRB) { in getSP() argument
1147 Function *F = IRB.GetInsertBlock()->getParent(); in getSP()
1151 IRB.getInt8PtrTy(M->getDataLayout().getAllocaAddrSpace())); in getSP()
1152 CachedSP = IRB.CreatePtrToInt( in getSP()
1153 IRB.CreateCall(GetStackPointerFn, in getSP()
1154 {Constant::getNullValue(IRB.getInt32Ty())}), in getSP()
1160 Value *HWAddressSanitizer::getFrameRecordInfo(IRBuilder<> &IRB) { in getFrameRecordInfo() argument
1162 Value *PC = getPC(IRB); in getFrameRecordInfo()
1163 Value *SP = getSP(IRB); in getFrameRecordInfo()
1171 SP = IRB.CreateShl(SP, 44); in getFrameRecordInfo()
1172 return IRB.CreateOr(PC, SP); in getFrameRecordInfo()
1175 void HWAddressSanitizer::emitPrologue(IRBuilder<> &IRB, bool WithFrameRecord) { in emitPrologue() argument
1177 ShadowBase = getShadowNonTls(IRB); in emitPrologue()
1179 ShadowBase = getDynamicShadowIfunc(IRB); in emitPrologue()
1190 SlotPtr = getHwasanThreadSlotPtr(IRB, IntptrTy); in emitPrologue()
1192 ThreadLong = IRB.CreateLoad(IntptrTy, SlotPtr); in emitPrologue()
1196 : untagPointer(IRB, ThreadLong); in emitPrologue()
1204 Value *FrameRecordInfo = getFrameRecordInfo(IRB); in emitPrologue()
1205 IRB.CreateCall(HwasanRecordFrameRecordFunc, {FrameRecordInfo}); in emitPrologue()
1211 StackBaseTag = IRB.CreateAShr(ThreadLong, 3); in emitPrologue()
1214 Value *FrameRecordInfo = getFrameRecordInfo(IRB); in emitPrologue()
1215 Value *RecordPtr = IRB.CreateIntToPtr(ThreadLongMaybeUntagged, in emitPrologue()
1217 IRB.CreateStore(FrameRecordInfo, RecordPtr); in emitPrologue()
1226 Value *WrapMask = IRB.CreateXor( in emitPrologue()
1227 IRB.CreateShl(IRB.CreateAShr(ThreadLong, 56), 12, "", true, true), in emitPrologue()
1229 Value *ThreadLongNew = IRB.CreateAnd( in emitPrologue()
1230 IRB.CreateAdd(ThreadLong, ConstantInt::get(IntptrTy, 8)), WrapMask); in emitPrologue()
1231 IRB.CreateStore(ThreadLongNew, SlotPtr); in emitPrologue()
1248 ShadowBase = IRB.CreateAdd( in emitPrologue()
1249 IRB.CreateOr( in emitPrologue()
1253 ShadowBase = IRB.CreateIntToPtr(ShadowBase, Int8PtrTy); in emitPrologue()
1257 Value *HWAddressSanitizer::readRegister(IRBuilder<> &IRB, StringRef Name) { in readRegister() argument
1258 Module *M = IRB.GetInsertBlock()->getParent()->getParent(); in readRegister()
1263 return IRB.CreateCall(ReadRegister, Args); in readRegister()
1269 IRBuilder<> IRB(LP->getNextNode()); in instrumentLandingPads() local
1270 IRB.CreateCall( in instrumentLandingPads()
1272 {readRegister(IRB, (TargetTriple.getArch() == Triple::x86_64) ? "rsp" in instrumentLandingPads()
1299 IRBuilder<> IRB(AI->getNextNode()); in instrumentStack() local
1302 Value *Tag = getAllocaTag(IRB, StackTag, AI, N); in instrumentStack()
1303 Value *AILong = IRB.CreatePointerCast(AI, IntptrTy); in instrumentStack()
1304 Value *Replacement = tagPointer(IRB, AI->getType(), AILong, Tag); in instrumentStack()
1312 Value *AICast = IRB.CreatePointerCast(AI, Int8PtrTy); in instrumentStack()
1349 IRB.SetInsertPoint(Node); in instrumentStack()
1350 Value *UARTag = getUARTag(IRB, StackTag); in instrumentStack()
1355 tagAlloca(IRB, AI, UARTag, AlignedSize); in instrumentStack()
1368 IRB.SetInsertPoint(Start->getNextNode()); in instrumentStack()
1369 tagAlloca(IRB, AI, Tag, Size); in instrumentStack()
1376 tagAlloca(IRB, AI, Tag, Size); in instrumentStack()
1670 IRBuilder<> IRB(BB); in instrumentPersonalityFunctions() local
1671 CallInst *WrapperCall = IRB.CreateCall( in instrumentPersonalityFunctions()
1675 P.first ? IRB.CreateBitCast(P.first, Int8PtrTy) in instrumentPersonalityFunctions()
1677 IRB.CreateBitCast(UnwindGetGR.getCallee(), Int8PtrTy), in instrumentPersonalityFunctions()
1678 IRB.CreateBitCast(UnwindGetCFA.getCallee(), Int8PtrTy)}); in instrumentPersonalityFunctions()
1680 IRB.CreateRet(WrapperCall); in instrumentPersonalityFunctions()