[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 12:56:28 PDT 2022
Amir updated this revision to Diff 455335.
Amir added a comment.
Move checks past HasFixedIndirectBranch
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
@@ -1856,6 +1856,30 @@
if (HasFixedIndirectBranch)
return false;
+ // Validate that all data references to function offsets are claimed by
+ // recognized jump tables. Register externally referenced blocks as entry
+ // points.
+ 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)
+ continue;
+
+ if (opts::Verbosity >= 1) {
+ outs() << "BOLT-WARNING: registering externally referenced "
+ << BB->getName() << " as a secondary entry point in "
+ << *this << ".\n";
+ }
+ addEntryPoint(*BB);
+ }
+ }
+ }
+
if (HasUnknownControlFlow && !BC.HasRelocations)
return false;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D132495.455335.patch
Type: text/x-patch
Size: 1247 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220824/f8caa88a/attachment.bin>
More information about the llvm-commits
mailing list