diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -1419,25 +1419,6 @@ if (!orderFile.empty()) parseOrderFile(orderFile); - if (config->entry) - if (auto *undefined = dyn_cast(config->entry)) - treatUndefinedSymbol(*undefined, "the entry point"); - - // FIXME: This prints symbols that are undefined both in input files and - // via -u flag twice. - for (const Symbol *sym : config->explicitUndefineds) { - if (const auto *undefined = dyn_cast(sym)) - treatUndefinedSymbol(*undefined, "-u"); - } - // Literal exported-symbol names must be defined, but glob - // patterns need not match. - for (const CachedHashStringRef &cachedName : - config->exportedSymbols.literals) { - if (const Symbol *sym = symtab->find(cachedName)) - if (const auto *undefined = dyn_cast(sym)) - treatUndefinedSymbol(*undefined, "-exported_symbol(s_list)"); - } - referenceStubBinder(); // FIXME: should terminate the link early based on errors encountered so diff --git a/lld/MachO/Writer.cpp b/lld/MachO/Writer.cpp --- a/lld/MachO/Writer.cpp +++ b/lld/MachO/Writer.cpp @@ -47,6 +47,7 @@ public: Writer() : buffer(errorHandler().outputBuffer) {} + void treatSpecialUndefineds(); void scanRelocations(); void scanSymbols(); template void createOutputSections(); @@ -550,6 +551,27 @@ } // namespace +void Writer::treatSpecialUndefineds() { + if (config->entry) + if (auto *undefined = dyn_cast(config->entry)) + treatUndefinedSymbol(*undefined, "the entry point"); + + // FIXME: This prints symbols that are undefined both in input files and + // via -u flag twice. + for (const Symbol *sym : config->explicitUndefineds) { + if (const auto *undefined = dyn_cast(sym)) + treatUndefinedSymbol(*undefined, "-u"); + } + // Literal exported-symbol names must be defined, but glob + // patterns need not match. + for (const CachedHashStringRef &cachedName : + config->exportedSymbols.literals) { + if (const Symbol *sym = symtab->find(cachedName)) + if (const auto *undefined = dyn_cast(sym)) + treatUndefinedSymbol(*undefined, "-exported_symbol(s_list)"); + } +} + // Add stubs and bindings where necessary (e.g. if the symbol is a // DylibSymbol.) static void prepareBranchTarget(Symbol *sym) { @@ -1066,6 +1088,7 @@ } template void Writer::run() { + treatSpecialUndefineds(); if (config->entry && !isa(config->entry)) prepareBranchTarget(config->entry); scanRelocations();