[lld] r255805 - Added some DEBUG() prints to make it clearer what the mach-o passes are doing. NFC.

Pete Cooper via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 16 11:12:49 PST 2015


Author: pete
Date: Wed Dec 16 13:12:49 2015
New Revision: 255805

URL: http://llvm.org/viewvc/llvm-project?rev=255805&view=rev
Log:
Added some DEBUG() prints to make it clearer what the mach-o passes are doing.  NFC.

We had some DEBUG prints these passes, but add more so that its clear where we are dumping
things, and what state we are in when we do so.

I'll be adding more and more DEBUG printing to try make it easier to observe whats going on
without having to attach a debugger.

Modified:
    lld/trunk/lib/Core/Resolver.cpp
    lld/trunk/lib/ReaderWriter/MachO/LayoutPass.cpp

Modified: lld/trunk/lib/Core/Resolver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=255805&r1=255804&r2=255805&view=diff
==============================================================================
--- lld/trunk/lib/Core/Resolver.cpp (original)
+++ lld/trunk/lib/Core/Resolver.cpp Wed Dec 16 13:12:49 2015
@@ -294,11 +294,15 @@ void Resolver::updatePreloadArchiveMap()
 // Keep adding atoms until _ctx.getNextFile() returns an error. This
 // function is where undefined atoms are resolved.
 bool Resolver::resolveUndefines() {
+  DEBUG_WITH_TYPE("resolver",
+                  llvm::dbgs() << "******** Resolving undefines:\n");
   ScopedTask task(getDefaultDomain(), "resolveUndefines");
   int index = 0;
   std::set<File *> seen;
   for (;;) {
     bool undefAdded = false;
+    DEBUG_WITH_TYPE("resolver",
+                    llvm::dbgs() << "Loading file #" << index << "\n");
     File *file = getFile(index);
     if (!file)
       return true;
@@ -307,6 +311,8 @@ bool Resolver::resolveUndefines() {
                    << ": " << ec.message() << "\n";
       return false;
     }
+    DEBUG_WITH_TYPE("resolver",
+                    llvm::dbgs() << "Loaded file: " << file->path() << "\n");
     file->beforeLink();
     updatePreloadArchiveMap();
     switch (file->kind()) {
@@ -339,6 +345,8 @@ bool Resolver::resolveUndefines() {
 // switch all references to undefined or coalesced away atoms
 // to the new defined atom
 void Resolver::updateReferences() {
+  DEBUG_WITH_TYPE("resolver",
+                  llvm::dbgs() << "******** Updating references:\n");
   ScopedTask task(getDefaultDomain(), "updateReferences");
   for (const Atom *atom : _atoms) {
     if (const DefinedAtom *defAtom = dyn_cast<DefinedAtom>(atom)) {
@@ -387,6 +395,8 @@ static bool isBackref(const Reference *r
 
 // remove all atoms not actually used
 void Resolver::deadStripOptimize() {
+  DEBUG_WITH_TYPE("resolver",
+                  llvm::dbgs() << "******** Dead stripping unused atoms:\n");
   ScopedTask task(getDefaultDomain(), "deadStripOptimize");
   // only do this optimization with -dead_strip
   if (!_ctx.deadStrip())
@@ -432,6 +442,9 @@ void Resolver::deadStripOptimize() {
 
 // error out if some undefines remain
 bool Resolver::checkUndefines() {
+  DEBUG_WITH_TYPE("resolver",
+                  llvm::dbgs() << "******** Checking for undefines:\n");
+
   // build vector of remaining undefined symbols
   std::vector<const UndefinedAtom *> undefinedAtoms = _symbolTable.undefines();
   if (_ctx.deadStrip()) {
@@ -478,6 +491,8 @@ bool Resolver::checkUndefines() {
 
 // remove from _atoms all coaleseced away atoms
 void Resolver::removeCoalescedAwayAtoms() {
+  DEBUG_WITH_TYPE("resolver",
+                  llvm::dbgs() << "******** Removing coalesced away atoms:\n");
   ScopedTask task(getDefaultDomain(), "removeCoalescedAwayAtoms");
   _atoms.erase(std::remove_if(_atoms.begin(), _atoms.end(), [&](const Atom *a) {
                  return _symbolTable.isCoalescedAway(a) || _deadAtoms.count(a);
@@ -486,16 +501,24 @@ void Resolver::removeCoalescedAwayAtoms(
 }
 
 bool Resolver::resolve() {
+  DEBUG_WITH_TYPE("resolver",
+                  llvm::dbgs() << "******** Resolving atom references:\n");
   updatePreloadArchiveMap();
   if (!resolveUndefines())
     return false;
   updateReferences();
   deadStripOptimize();
-  if (checkUndefines())
-    if (!_ctx.allowRemainingUndefines())
+  if (checkUndefines()) {
+    DEBUG_WITH_TYPE("resolver", llvm::dbgs() << "Found undefines... ");
+    if (!_ctx.allowRemainingUndefines()) {
+      DEBUG_WITH_TYPE("resolver", llvm::dbgs() << "which we don't allow\n");
       return false;
+    }
+    DEBUG_WITH_TYPE("resolver", llvm::dbgs() << "which we are ok with\n");
+  }
   removeCoalescedAwayAtoms();
   _result->addAtoms(_atoms);
+  DEBUG_WITH_TYPE("resolver", llvm::dbgs() << "******** Finished resolver\n");
   return true;
 }
 

Modified: lld/trunk/lib/ReaderWriter/MachO/LayoutPass.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/LayoutPass.cpp?rev=255805&r1=255804&r2=255805&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/LayoutPass.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/LayoutPass.cpp Wed Dec 16 13:12:49 2015
@@ -438,6 +438,7 @@ void LayoutPass::undecorate(SimpleFile::
 
 /// Perform the actual pass
 std::error_code LayoutPass::perform(SimpleFile &mergedFile) {
+  DEBUG(llvm::dbgs() << "******** Laying out atoms:\n");
   // sort the atoms
   ScopedTask task(getDefaultDomain(), "LayoutPass");
   SimpleFile::DefinedAtomRange atomRange = mergedFile.definedAtoms();
@@ -469,6 +470,7 @@ std::error_code LayoutPass::perform(Simp
     printDefinedAtoms(atomRange);
   });
 
+  DEBUG(llvm::dbgs() << "******** Finished laying out atoms\n");
   return std::error_code();
 }
 




More information about the llvm-commits mailing list