diff --git a/lib/ExecutionEngine/JIT/JIT.h b/lib/ExecutionEngine/JIT/JIT.h
index d3745e5..3b267ed 100644
--- a/lib/ExecutionEngine/JIT/JIT.h
+++ b/lib/ExecutionEngine/JIT/JIT.h
@@ -44,6 +44,12 @@
 
   void *resolveFunctionReference(void *RefAddr);
 
+  /// 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 *getPointerToNamedFunction(const std::string &Name);
+
 private:
   static MachineCodeEmitter *createEmitter(VM &V);
   void setupPassManager();
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
diff --git a/lib/ExecutionEngine/JIT/VM.h b/lib/ExecutionEngine/JIT/VM.h
index d3745e5..3b267ed 100644
--- a/lib/ExecutionEngine/JIT/VM.h
+++ b/lib/ExecutionEngine/JIT/VM.h
@@ -44,6 +44,12 @@
 
   void *resolveFunctionReference(void *RefAddr);
 
+  /// 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 *getPointerToNamedFunction(const std::string &Name);
+
 private:
   static MachineCodeEmitter *createEmitter(VM &V);
   void setupPassManager();
