]> git.saurik.com Git - apple/ld64.git/blobdiff - src/ld/Resolver.h
ld64-302.3.tar.gz
[apple/ld64.git] / src / ld / Resolver.h
index a26748987934fe55aefde526126ea2c66cef7c27..06b7a8b0f145702c88e304a1bc473b8fe7ff83c3 100644 (file)
@@ -42,6 +42,7 @@
 #include <mach-o/dyld.h>
 
 #include <vector>
+#include <unordered_set>
 
 #include "Options.h"
 #include "ld.hpp"
@@ -61,7 +62,9 @@ public:
                                                                : _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&);
@@ -69,7 +72,7 @@ public:
                
                void                            resolve();
 
-       
+
 private:
        struct WhyLiveBackChain
        {
@@ -88,7 +91,8 @@ private:
        void                                    fillInInternalState();
        void                                    fillInHelpersInInternalState();
        void                                    removeCoalescedAwayAtoms();
-  void                                 fillInEntryPoint();
+       void                                    syncAliases();
+       void                                    fillInEntryPoint();
        void                                    linkTimeOptimize();
        void                                    convertReferencesToIndirect(const ld::Atom& atom);
        const ld::Atom*                 entryPoint(bool searchArchives);
@@ -98,12 +102,11 @@ private:
        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();
 
-       class CStringEquals {
-       public:
-               bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); }
-       };
-       typedef __gnu_cxx::hash_set<const char*, __gnu_cxx::hash<const char*>, CStringEquals>  StringSet;
+       typedef std::unordered_set<const char*, CStringHash, CStringEquals>  StringSet;
 
        class NotLive {
        public:
@@ -124,10 +127,14 @@ private:
        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;
 };