[llvm] e781451 - [JITLink] Relax zero-fill edge assertions.
Sunho Kim via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 30 16:34:18 PDT 2022
Author: Sunho Kim
Date: 2022-07-31T08:34:10+09:00
New Revision: e781451140febc2038ab652bd54d948eb588dbb9
URL: https://github.com/llvm/llvm-project/commit/e781451140febc2038ab652bd54d948eb588dbb9
DIFF: https://github.com/llvm/llvm-project/commit/e781451140febc2038ab652bd54d948eb588dbb9.diff
LOG: [JITLink] Relax zero-fill edge assertions.
Relax zero-fill edge assertions to only consider relocation edges. Keep-alive edges to zero-fill blocks can cause this assertion which is too strict.
Reviewed By: lhames
Differential Revision: https://reviews.llvm.org/D130450
Added:
Modified:
llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
index 897808c0ee835..dae4ccddfaf5f 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
@@ -303,7 +303,8 @@ class Block : public Addressable {
/// Add an edge to this block.
void addEdge(Edge::Kind K, Edge::OffsetT Offset, Symbol &Target,
Edge::AddendT Addend) {
- assert(!isZeroFill() && "Adding edge to zero-fill block?");
+ assert((K == Edge::KeepAlive || !isZeroFill()) &&
+ "Adding edge to zero-fill block?");
Edges.push_back(Edge(K, Offset, Target, Addend));
}
diff --git a/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.h b/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.h
index 1095fa5ce7014..2c92445265364 100644
--- a/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.h
+++ b/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.h
@@ -128,8 +128,12 @@ template <typename LinkerImpl> class JITLinker : public JITLinkerBase {
// Copy Block data and apply fixups.
LLVM_DEBUG(dbgs() << " Applying fixups.\n");
- assert((!B->isZeroFill() || B->edges_size() == 0) &&
- "Edges in zero-fill block?");
+ assert((!B->isZeroFill() || all_of(B->edges(),
+ [](const Edge &E) {
+ return E.getKind() ==
+ Edge::KeepAlive;
+ })) &&
+ "Non-KeepAlive edges in zero-fill block?");
for (auto &E : B->edges()) {
// Skip non-relocation edges.
More information about the llvm-commits
mailing list