From: Lang Hames Date: Thu, 9 May 2019 22:03:57 +0000 (+0000) Subject: [JITLink] Improve/fix some JITLink debugging output. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2ede9f48800c7c51bb37b9f8756bf67c3526a1dc;p=llvm [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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@360383 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp b/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp index 5feff393ebd..215742c0e52 100644 --- a/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp +++ b/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/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp b/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp index d9472e40ead..2f0eaf206e9 100644 --- a/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp +++ b/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(std::move(ErrMsg)); } @@ -471,7 +473,7 @@ private: E.getTarget().getAddress() - (FixupAddress + 4) + E.getAddend(); if (Value < std::numeric_limits::min() || Value > std::numeric_limits::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::min() || Value > std::numeric_limits::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::min() || Value > std::numeric_limits::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::min() || Value > std::numeric_limits::max()) - return targetOutOfRangeError(E); + return targetOutOfRangeError(A, E); *(little32_t *)FixupPtr = Value; } else *(little64_t *)FixupPtr = Value;