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;
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;
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
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<const char*, ld::dylib::File*, __gnu_cxx::hash<const char*>, CStringEquals> InstallNameToDylib;
+ typedef std::unordered_map<const char*, ld::dylib::File*, CStringHash, CStringEquals> InstallNameToDylib;
const Options& _options;
std::vector<ld::File*> _inputFiles;
InstallNameToDylib _installPathToDylibs;
std::set<ld::dylib::File*> _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; }
};
int _remainingInputFiles; // number of input files still to parse
ld::File::Ordinal _indirectDylibOrdinal;
+ ld::File::Ordinal _linkerOptionOrdinal;
class LibraryInfo {
ld::File* _lib;