X-Git-Url: https://git.saurik.com/apple/ld64.git/blobdiff_plain/ebf6f43431fe84b7b17822014a6d1f0169516e93..fb9a160cc46cd88a41dda5ab61012c5572e56f33:/src/ld/InputFiles.h?ds=sidebyside diff --git a/src/ld/InputFiles.h b/src/ld/InputFiles.h index afc2077..608ce39 100644 --- a/src/ld/InputFiles.h +++ b/src/ld/InputFiles.h @@ -63,7 +63,7 @@ public: virtual ld::dylib::File* findDylib(const char* installPath, const char* fromPath); // 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; @@ -74,6 +74,9 @@ public: 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; @@ -90,12 +93,13 @@ private: void logTraceInfo (const char* format, ...) const; void logDylib(ld::File*, bool indirect); void logArchive(ld::File*) const; - void createIndirectDylibs(); + void markExplicitlyLinkedDylibs(); void checkDylibClientRestrictions(ld::dylib::File*); void createOpaqueFileSections(); + bool libraryAlreadyLoaded(const char* path); // for pipelined linking - void waitForInputFiles(); + void waitForInputFiles(); static void waitForInputFiles(InputFiles *inputFiles); // for threaded input file processing @@ -103,11 +107,7 @@ private: static void parseWorkerThread(InputFiles *inputFiles); void startThread(void (*threadFunc)(InputFiles *)) const; - class CStringEquals { - public: - bool operator()(const char* left, const char* right) const { return (strcmp(left, right) == 0); } - }; - typedef __gnu_cxx::hash_map, CStringEquals> InstallNameToDylib; + typedef std::unordered_map InstallNameToDylib; const Options& _options; std::vector _inputFiles; @@ -115,9 +115,7 @@ private: InstallNameToDylib _installPathToDylibs; std::set _allDylibs; ld::dylib::File* _bundleLoader; - bool _allDirectDylibsLoaded; bool _inferredArch; - int _fileMonitor; struct strcompclass { bool operator() (const char *a, const char *b) const { return ::strcmp(a, b) < 0; } }; @@ -137,6 +135,7 @@ private: int _remainingInputFiles; // number of input files still to parse ld::File::Ordinal _indirectDylibOrdinal; + ld::File::Ordinal _linkerOptionOrdinal; class LibraryInfo { ld::File* _lib;