diff options
| -rw-r--r-- | lld/lib/Core/Resolver.cpp | 27 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/LayoutPass.cpp | 2 | 
2 files changed, 27 insertions, 2 deletions
diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp index cf1919cfbab..51c789d13b7 100644 --- a/lld/lib/Core/Resolver.cpp +++ b/lld/lib/Core/Resolver.cpp @@ -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 *ref) {  // 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;  } diff --git a/lld/lib/ReaderWriter/MachO/LayoutPass.cpp b/lld/lib/ReaderWriter/MachO/LayoutPass.cpp index 18d8fd9954c..0c14ee9d39a 100644 --- a/lld/lib/ReaderWriter/MachO/LayoutPass.cpp +++ b/lld/lib/ReaderWriter/MachO/LayoutPass.cpp @@ -438,6 +438,7 @@ void LayoutPass::undecorate(SimpleFile::DefinedAtomRange &atomRange,  /// 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(SimpleFile &mergedFile) {      printDefinedAtoms(atomRange);    }); +  DEBUG(llvm::dbgs() << "******** Finished laying out atoms\n");    return std::error_code();  }  | 

