]> git.saurik.com Git - apple/ld64.git/blobdiff - src/ld/InputFiles.h
ld64-302.3.tar.gz
[apple/ld64.git] / src / ld / InputFiles.h
index b1e85cbf5d4ac67b58127f99ad0cbd8b02966b91..21f878a513b3046e5e3258a6d804ff5187d56593 100644 (file)
@@ -60,7 +60,7 @@ public:
                                                                InputFiles(Options& opts, const char** archName);
 
        // implementation from ld::dylib::File::DylibHandler
-       virtual ld::dylib::File*        findDylib(const char* installPath, const char* fromPath);
+       virtual ld::dylib::File*        findDylib(const char* installPath, const ld::dylib::File* fromDylib, bool speculative);
        
        // iterates all atoms in initial files
        void                                            forEachInitialAtom(ld::File::AtomHandler&, ld::Internal& state);
@@ -72,9 +72,11 @@ public:
        // copy dylibs to link with in command line order
        void                                            dylibs(ld::Internal& state);
        
+       void                                            archives(ld::Internal& state);
+       
        bool                                            inferredArch() const { return _inferredArch; }
        
-       void                                            addLinkerOptionLibraries(ld::Internal& state);
+       void                                            addLinkerOptionLibraries(ld::Internal& state, ld::File::AtomHandler& handler);
        void                                            createIndirectDylibs();
 
        // for -print_statistics
@@ -91,13 +93,14 @@ private:
        ld::File*                                       makeFile(const Options::FileInfo& info, bool indirectDylib);
        ld::File*                                       addDylib(ld::dylib::File* f,        const Options::FileInfo& info);
        void                                            logTraceInfo (const char* format, ...) const;
-       void                                            logDylib(ld::File*, bool indirect);
+       void                                            logDylib(ld::File*, bool indirect, bool speculative);
        void                                            logArchive(ld::File*) const;
        void                                            markExplicitlyLinkedDylibs();
        void                                            checkDylibClientRestrictions(ld::dylib::File*);
        void                                            createOpaqueFileSections();
        bool                                            libraryAlreadyLoaded(const char* path);
-       
+       bool                                            frameworkAlreadyLoaded(const char* path, const char* frameworkName);
+
        // for pipelined linking
     void                                               waitForInputFiles();
        static void                                     waitForInputFiles(InputFiles *inputFiles);
@@ -112,6 +115,7 @@ private:
        const Options&                          _options;
        std::vector<ld::File*>          _inputFiles;
        mutable std::set<class ld::File*>       _archiveFilesLogged;
+       mutable std::vector<std::string>        _archiveFilePaths;
        InstallNameToDylib                      _installPathToDylibs;
        std::set<ld::dylib::File*>      _allDylibs;
        ld::dylib::File*                        _bundleLoader;
@@ -144,9 +148,9 @@ private:
         LibraryInfo(ld::dylib::File* dylib) : _lib(dylib), _isDylib(true) {};
         LibraryInfo(ld::archive::File* dylib) : _lib(dylib), _isDylib(false) {};
 
-        bool isDylib() { return _isDylib; }
-        ld::dylib::File *dylib() { return (ld::dylib::File*)_lib; }
-        ld::archive::File *archive() { return (ld::archive::File*)_lib; }
+        bool isDylib() const { return _isDylib; }
+        ld::dylib::File *dylib() const { return (ld::dylib::File*)_lib; }
+        ld::archive::File *archive() const { return (ld::archive::File*)_lib; }
     };
     std::vector<LibraryInfo>  _searchLibraries;
 };