JITDylibs should have unique names. This patch adds code to lli to respect this
invariant (by refering to the exist JITDylib if a -jd <name> option is specified
more than once). It also adds usage notes to the doxygen comment for
createJITDylib method in ExecutionSession and LLJIT.
http://llvm.org/PR41937
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@361322
91177308-0d34-0410-b5e6-
96231b3b80d8
void emit(const SymbolFlagsMap &Emitted);
+ // Removes the given symbols from the symbol table, returning the set of
+ // pending queries.
+ AsynchronousSymbolQuery removeSymbols(const SymbolNameSet &Symbols);
+
void notifyFailed(const SymbolNameSet &FailedSymbols);
ExecutionSession &ES;
JITDylib *getJITDylibByName(StringRef Name);
/// Add a new JITDylib to this ExecutionSession.
+ ///
+ /// The JITDylib Name is required to be unique. Clients should verify that
+ /// names are not being re-used (e.g. by calling getJITDylibByName) if names
+ /// are based on user input.
JITDylib &createJITDylib(std::string Name,
bool AddToMainDylibSearchOrder = true);
/// Returns a reference to the JITDylib representing the JIT'd main program.
JITDylib &getMainJITDylib() { return Main; }
+ /// Returns the JITDylib with the given name, or nullptr if no JITDylib with
+ /// that name exists.
+ JITDylib *getJITDylibByName(StringRef Name) {
+ return ES->getJITDylibByName(Name);
+ }
+
/// Create a new JITDylib with the given name and return a reference to it.
+ ///
+ /// JITDylib names must be unique. If the given name is derived from user
+ /// input or elsewhere in the environment then the client should check
+ /// (e.g. by calling getJITDylibByName) that the given name is not already in
+ /// use.
JITDylib &createJITDylib(std::string Name) {
return ES->createJITDylib(std::move(Name));
}
IdxToDylib[0] = &J->getMainJITDylib();
for (auto JDItr = JITDylibs.begin(), JDEnd = JITDylibs.end();
JDItr != JDEnd; ++JDItr) {
- IdxToDylib[JITDylibs.getPosition(JDItr - JITDylibs.begin())] =
- &J->createJITDylib(*JDItr);
+ orc::JITDylib *JD = J->getJITDylibByName(*JDItr);
+ if (!JD)
+ JD = &J->createJITDylib(*JDItr);
+ IdxToDylib[JITDylibs.getPosition(JDItr - JITDylibs.begin())] = JD;
}
for (auto EMItr = ExtraModules.begin(), EMEnd = ExtraModules.end();