summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2019-05-09 22:03:57 +0000
committerLang Hames <lhames@gmail.com>2019-05-09 22:03:57 +0000
commitdd61274f775a50875d389b68c44151b5742e0ae7 (patch)
treea1634b345563cd4f34a8f1b11b0748cfd64acf5c /llvm/lib/ExecutionEngine
parent5fa4e9d99018f30510a668f37445c29323327b4b (diff)
downloadbcm5719-llvm-dd61274f775a50875d389b68c44151b5742e0ae7.tar.gz
bcm5719-llvm-dd61274f775a50875d389b68c44151b5742e0ae7.zip
[JITLink] Improve/fix some JITLink debugging output.
Adds full edge details (rather than just edge targets) when out-of-range errors are generated. Also fixes a bug where debugging output accessed an invalidated DenseMap iterator by moving the debugging output above the invalidation point. llvm-svn: 360383
Diffstat (limited to 'llvm/lib/ExecutionEngine')
-rw-r--r--llvm/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp6
-rw-r--r--llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp14
2 files changed, 11 insertions, 9 deletions
diff --git a/llvm/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp b/llvm/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp
index 5feff393ebd..215742c0e52 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp
@@ -338,21 +338,21 @@ Error MachOAtomGraphBuilder::addNonCustomAtoms() {
auto AltEntryStartItr = AltEntryStarts.find(&*AltEntryPred);
if (AltEntryStartItr != AltEntryStarts.end()) {
// If the predecessor was an alt-entry atom then re-use its value.
- AltEntryStarts[DA] = AltEntryStartItr->second;
LLVM_DEBUG({
dbgs() << " " << *DA << " -> " << *AltEntryStartItr->second
<< " (based on existing entry for " << *AltEntryPred << ")\n";
});
+ AltEntryStarts[DA] = AltEntryStartItr->second;
} else {
// If the predecessor does not have an entry then add an entry for this
// atom (i.e. the alt_entry atom) and a self-reference entry for the
/// predecessory atom that is the start of this chain.
- AltEntryStarts[&*AltEntryPred] = &*AltEntryPred;
- AltEntryStarts[DA] = &*AltEntryPred;
LLVM_DEBUG({
dbgs() << " " << *AltEntryPred << " -> " << *AltEntryPred << "\n"
<< " " << *DA << " -> " << *AltEntryPred << "\n";
});
+ AltEntryStarts[&*AltEntryPred] = &*AltEntryPred;
+ AltEntryStarts[DA] = &*AltEntryPred;
}
}
diff --git a/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
index d9472e40ead..2f0eaf206e9 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
@@ -448,11 +448,13 @@ private:
return MachOAtomGraphBuilder_x86_64(**MachOObj).buildGraph();
}
- static Error targetOutOfRangeError(const Edge &E) {
+ static Error targetOutOfRangeError(const Atom &A, const Edge &E) {
std::string ErrMsg;
{
raw_string_ostream ErrStream(ErrMsg);
- ErrStream << "Target \"" << E.getTarget() << "\" out of range";
+ ErrStream << "Relocation target out of range: ";
+ printEdge(ErrStream, A, E, getMachOX86RelocationKindName(E.getKind()));
+ ErrStream << "\n";
}
return make_error<JITLinkError>(std::move(ErrMsg));
}
@@ -471,7 +473,7 @@ private:
E.getTarget().getAddress() - (FixupAddress + 4) + E.getAddend();
if (Value < std::numeric_limits<int32_t>::min() ||
Value > std::numeric_limits<int32_t>::max())
- return targetOutOfRangeError(E);
+ return targetOutOfRangeError(A, E);
*(little32_t *)FixupPtr = Value;
break;
}
@@ -489,7 +491,7 @@ private:
E.getTarget().getAddress() - (FixupAddress + Delta) + E.getAddend();
if (Value < std::numeric_limits<int32_t>::min() ||
Value > std::numeric_limits<int32_t>::max())
- return targetOutOfRangeError(E);
+ return targetOutOfRangeError(A, E);
*(little32_t *)FixupPtr = Value;
break;
}
@@ -501,7 +503,7 @@ private:
E.getTarget().getAddress() - (FixupAddress + Delta) + E.getAddend();
if (Value < std::numeric_limits<int32_t>::min() ||
Value > std::numeric_limits<int32_t>::max())
- return targetOutOfRangeError(E);
+ return targetOutOfRangeError(A, E);
*(little32_t *)FixupPtr = Value;
break;
}
@@ -518,7 +520,7 @@ private:
if (E.getKind() == Delta32 || E.getKind() == NegDelta32) {
if (Value < std::numeric_limits<int32_t>::min() ||
Value > std::numeric_limits<int32_t>::max())
- return targetOutOfRangeError(E);
+ return targetOutOfRangeError(A, E);
*(little32_t *)FixupPtr = Value;
} else
*(little64_t *)FixupPtr = Value;
OpenPOWER on IntegriCloud