Lines Matching defs:BC
78 BinaryFunction *createNewRetpoline(BinaryContext &BC,
82 auto &MIB = *BC.MIB;
83 MCContext &Ctx = *BC.Ctx.get();
88 BC.createInjectedBinaryFunction(RetpolineTag, true);
174 std::string createRetpolineFunctionTag(BinaryContext &BC,
182 BC.InstPrinter->printRegName(TagOS, BrInfo.BranchReg);
195 if (MemRef.BaseRegNum != BC.MIB->getNoRegister())
196 BC.InstPrinter->printRegName(TagOS, MemRef.BaseRegNum);
200 MemRef.DispExpr->print(TagOS, BC.AsmInfo.get());
204 if (MemRef.IndexRegNum != BC.MIB->getNoRegister()) {
206 BC.InstPrinter->printRegName(TagOS, MemRef.IndexRegNum);
209 if (MemRef.SegRegNum != BC.MIB->getNoRegister()) {
211 BC.InstPrinter->printRegName(TagOS, MemRef.SegRegNum);
218 BinaryContext &BC, const IndirectBranchInfo &BrInfo, bool R11Available) {
220 createRetpolineFunctionTag(BC, BrInfo, R11Available);
226 createNewRetpoline(BC, RetpolineTag, BrInfo, R11Available);
229 void createBranchReplacement(BinaryContext &BC,
234 auto &MIB = *BC.MIB;
247 MIB.createDirectCall(RetpolineCall, RetpolineSymbol, BC.Ctx.get(),
272 Error RetpolineInsertion::runOnFunctions(BinaryContext &BC) {
276 assert(BC.isX86() &&
279 assert(BC.HasRelocations && "retpoline mode not supported in non-reloc");
281 auto &MIB = *BC.MIB;
283 for (auto &It : BC.getBinaryFunctions()) {
318 TargetRetpoline = getOrCreateRetpoline(BC, BrInfo, R11Available);
320 createBranchReplacement(BC, BrInfo, R11Available, Replacement,
328 BC.outs() << "BOLT-INFO: The number of created retpoline functions is : "