[PATCH] D132495: [BOLT] Verify externally referenced blocks against jump table targets
Amir Ayupov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 24 09:43:43 PDT 2022
Amir updated this revision to Diff 455257.
Amir added a comment.
HasUnknownControlFlow -> !Strict
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D132495/new/
https://reviews.llvm.org/D132495
Files:
bolt/lib/Core/BinaryFunction.cpp
Index: bolt/lib/Core/BinaryFunction.cpp
===================================================================
--- bolt/lib/Core/BinaryFunction.cpp
+++ bolt/lib/Core/BinaryFunction.cpp
@@ -1842,6 +1842,33 @@
if (HasInternalLabelReference)
return false;
+ // Validate that all data references to function offsets are claimed by
+ // recognized jump tables. Register externally referenced blocks as entry
+ // points. Unknown control flow requires
+ if (!opts::StrictMode && hasInternalReference()) {
+ SmallPtrSet<MCSymbol *, 4> JTTargets;
+ for (const JumpTable *JT : llvm::make_second_range(JumpTables))
+ JTTargets.insert(JT->Entries.begin(), JT->Entries.end());
+ for (uint64_t Destination : ExternallyReferencedOffsets) {
+ if (BinaryBasicBlock *BB = getBasicBlockAtOffset(Destination)) {
+ bool Found = JTTargets.contains(BB->getLabel());
+ if (!Found) {
+ if (opts::Verbosity >= 1) {
+ outs() << "BOLT-WARNING: registering externally referenced "
+ << BB->getName() << " as a secondary entry point in "
+ << *this << ".\n";
+ }
+ addEntryPoint(*BB);
+ }
+ } else {
+ outs() << "BOLT-WARNING: external reference to offset "
+ << formatv("{0:x}", Destination)
+ << " does not point to a valid BB in " << *this << ".\n";
+ return false;
+ }
+ }
+ }
+
// If there's only one jump table, and one indirect jump, and no other
// references, then we should be able to derive the jump table even if we
// fail to match the pattern.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D132495.455257.patch
Type: text/x-patch
Size: 1619 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220824/3b2723ec/attachment.bin>
More information about the llvm-commits
mailing list