diff options
author | Lang Hames <lhames@gmail.com> | 2019-05-09 22:03:57 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2019-05-09 22:03:57 +0000 |
commit | dd61274f775a50875d389b68c44151b5742e0ae7 (patch) | |
tree | a1634b345563cd4f34a8f1b11b0748cfd64acf5c /llvm/lib/ExecutionEngine | |
parent | 5fa4e9d99018f30510a668f37445c29323327b4b (diff) | |
download | bcm5719-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.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp | 14 |
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; |