Add support for named functions


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5258 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ExecutionEngine/JIT/VM.cpp b/lib/ExecutionEngine/JIT/VM.cpp
index f66d4d7..c107438 100644
--- a/lib/ExecutionEngine/JIT/VM.cpp
+++ b/lib/ExecutionEngine/JIT/VM.cpp
@@ -55,6 +55,22 @@
 
 static void NoopFn() {}
 
+/// getPointerToNamedFunction - This method returns the address of the specified
+/// function by using the dlsym function call.  As such it is only useful for
+/// resolving library symbols, not code generated symbols.
+///
+void *VM::getPointerToNamedFunction(const std::string &Name) {
+  // If it's an external function, look it up in the process image...
+  void *Ptr = dlsym(0, Name.c_str());
+  if (Ptr == 0) {
+    std::cerr << "WARNING: Cannot resolve fn '" << Name
+	      << "' using a dummy noop function instead!\n";
+    Ptr = (void*)NoopFn;
+  }
+  
+  return Ptr;
+}
+
 /// getPointerToFunction - This method is used to get the address of the
 /// specified function, compiling it if neccesary.
 ///
@@ -62,17 +78,8 @@
   void *&Addr = GlobalAddress[F];   // Function already code gen'd
   if (Addr) return Addr;
 
-  if (F->isExternal()) {
-    // If it's an external function, look it up in the process image...
-    void *Ptr = dlsym(0, F->getName().c_str());
-    if (Ptr == 0) {
-      std::cerr << "WARNING: Cannot resolve fn '" << F->getName()
-                << "' using a dummy noop function instead!\n";
-      Ptr = (void*)NoopFn;
-    }
-
-    return Addr = Ptr;
-  }
+  if (F->isExternal())
+    return Addr = getPointerToNamedFunction(F->getName());
 
   // JIT all of the functions in the module.  Eventually this will JIT functions
   // on demand.  This has the effect of populating all of the non-external