Re-apply r278065 (Weak symbol support in RuntimeDyld) with a fix for ELF.

llvm-svn: 278149
diff --git a/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h b/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
index 805852b..db9c519 100644
--- a/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
+++ b/llvm/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
@@ -116,11 +116,13 @@
     LinkingResolver(OrcMCJITReplacement &M) : M(M) {}
 
     JITSymbol findSymbol(const std::string &Name) override {
-      return M.findMangledSymbol(Name);
+      return M.ClientResolver->findSymbol(Name);
     }
 
     JITSymbol findSymbolInLogicalDylib(const std::string &Name) override {
-      return M.ClientResolver->findSymbol(Name);
+      if (auto Sym = M.findMangledSymbol(Name))
+        return Sym;
+      return M.ClientResolver->findSymbolInLogicalDylib(Name);
     }
 
   private: