================ @@ -480,28 +481,43 @@ static void printBB(const BinaryContext &BC, const BinaryBasicBlock *BB, static void reportFoundGadgetInSingleBBSingleOverwInst( raw_ostream &OS, const BinaryContext &BC, const MCInstReference OverwInst, - const MCInstReference RetInst) { - BinaryBasicBlock *BB = RetInst.getBasicBlock(); + const MCInstReference Location) { + BinaryBasicBlock *BB = Location.getBasicBlock(); assert(OverwInst.ParentKind == MCInstReference::BasicBlockParent); - assert(RetInst.ParentKind == MCInstReference::BasicBlockParent); + assert(Location.ParentKind == MCInstReference::BasicBlockParent); MCInstInBBReference OverwInstBB = OverwInst.U.BBRef; if (BB == OverwInstBB.BB) { // overwriting inst and ret instruction are in the same basic block. - assert(OverwInstBB.BBIndex < RetInst.U.BBRef.BBIndex); + assert(OverwInstBB.BBIndex < Location.U.BBRef.BBIndex); OS << " This happens in the following basic block:\n"; printBB(BC, BB); } } -void Gadget::generateReport(raw_ostream &OS, const BinaryContext &BC) const { - GenDiag(RetInst, "non-protected ret found").generateReport(OS, BC); +void Report::printBasicInfo(raw_ostream &OS, const BinaryContext &BC, + StringRef IssueKind) const { + BinaryFunction *BF = Location.getFunction(); + BinaryBasicBlock *BB = Location.getBasicBlock(); + + OS << "\nGS-PAUTH: " << IssueKind; + OS << " in function " << BF->getPrintName(); + if (BB) + OS << ", basic block " << BB->getName(); + OS << ", at address " << llvm::format("%x", Location.getAddress()) << "\n"; + OS << " The instruction is "; + BC.printInstruction(OS, Location, Location.getAddress(), BF); +} - BinaryFunction *BF = RetInst.getFunction(); - OS << " The " << OverwritingRetRegInst.size() - << " instructions that write to the return register after any " +void GadgetReport::generateReport(raw_ostream &OS, + const BinaryContext &BC) const { + printBasicInfo(OS, BC, Kind.getDescription()); + + BinaryFunction *BF = Location.getFunction(); + OS << " The " << OverwritingInstrs.size() + << " instructions that write to the affected registers after any " "authentication are:\n"; // Sort by address to ensure output is deterministic. - std::vector<MCInstReference> ORRI = OverwritingRetRegInst; + std::vector<MCInstReference> ORRI = OverwritingInstrs; ---------------- atrosinenko wrote:
Updated, thanks! https://github.com/llvm/llvm-project/pull/131896 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits