X-Git-Url: https://git.saurik.com/apple/ld64.git/blobdiff_plain/d425e3882ca60fabae080ddb890789ef2e73a66b..bee7e226299dacc6d80d9cf6f1585c3d5d0645e0:/src/ld/InputFiles.h diff --git a/src/ld/InputFiles.h b/src/ld/InputFiles.h index 9b969ee..21f878a 100644 --- a/src/ld/InputFiles.h +++ b/src/ld/InputFiles.h @@ -60,10 +60,10 @@ 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&); + void forEachInitialAtom(ld::File::AtomHandler&, ld::Internal& state); // searches libraries for name bool searchLibraries(const char* name, bool searchDylibs, bool searchArchives, bool dataSymbolOnly, ld::File::AtomHandler&) const; @@ -72,8 +72,13 @@ 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, ld::File::AtomHandler& handler); + void createIndirectDylibs(); + // for -print_statistics volatile int64_t _totalObjectSize; volatile int64_t _totalArchiveSize; @@ -88,14 +93,16 @@ 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 createIndirectDylibs(); + 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(); + void waitForInputFiles(); static void waitForInputFiles(InputFiles *inputFiles); // for threaded input file processing @@ -108,10 +115,10 @@ private: const Options& _options; std::vector _inputFiles; mutable std::set _archiveFilesLogged; + mutable std::vector _archiveFilePaths; InstallNameToDylib _installPathToDylibs; std::set _allDylibs; ld::dylib::File* _bundleLoader; - bool _allDirectDylibsLoaded; bool _inferredArch; struct strcompclass { bool operator() (const char *a, const char *b) const { return ::strcmp(a, b) < 0; } @@ -132,6 +139,7 @@ private: int _remainingInputFiles; // number of input files still to parse ld::File::Ordinal _indirectDylibOrdinal; + ld::File::Ordinal _linkerOptionOrdinal; class LibraryInfo { ld::File* _lib; @@ -140,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 _searchLibraries; };