: _options(opts), _inputFiles(inputs), _internal(state),
_symbolTable(opts, state.indirectBindingTable),
_haveLLVMObjs(false),
- _completedInitialObjectFiles(false) {}
+ _completedInitialObjectFiles(false),
+ _ltoCodeGenFinished(false),
+ _haveAliases(false) {}
virtual void doAtom(const ld::Atom&);
void resolve();
-
+
private:
struct WhyLiveBackChain
{
void fillInInternalState();
void fillInHelpersInInternalState();
void removeCoalescedAwayAtoms();
+ void syncAliases();
void fillInEntryPoint();
void linkTimeOptimize();
void convertReferencesToIndirect(const ld::Atom& atom);
void remainingUndefines(std::vector<const char*>&);
bool printReferencedBy(const char* name, SymbolTable::IndirectBindingSlot slot);
void tweakWeakness();
+ void buildArchivesList();
void doLinkerOption(const std::vector<const char*>& linkerOption, const char* fileName);
+ void dumpAtoms();
typedef std::unordered_set<const char*, CStringHash, CStringEquals> StringSet;
ld::Internal& _internal;
std::vector<const ld::Atom*> _atoms;
std::set<const ld::Atom*> _deadStripRoots;
+ std::vector<const ld::Atom*> _dontDeadStripIfReferencesLive;
std::vector<const ld::Atom*> _atomsWithUnresolvedReferences;
std::vector<const class AliasAtom*> _aliasesFromCmdLine;
SymbolTable _symbolTable;
bool _haveLLVMObjs;
bool _completedInitialObjectFiles;
+ bool _ltoCodeGenFinished;
+ bool _haveAliases;
};