forked from OSchip/llvm-project
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. llvm-svn: 255805
This commit is contained in:
parent
c27f54822c
commit
3e8f56565d
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue