diff --git a/bcc.cpp b/bcc.cpp
index d27ff36..02cd867 100644
--- a/bcc.cpp
+++ b/bcc.cpp
@@ -1559,28 +1559,27 @@
           {
             llvm::Function* F = (llvm::Function*) V;
 
+            /* If we have code, go ahead and return that. */
+            if(void* ResultPtr = GetPointerToGlobalIfAvailable(F))
+              return ResultPtr;
+
+            if(void* FnStub = GetLazyFunctionStubIfAvailable(F))
+              /*
+               * Return the function stub if it's already created.
+               * We do this first so that:
+               *   we're returning the same address for the function
+               *   as any previous call.
+               *
+               *  TODO: Yes, this is wrong. The lazy stub isn't guaranteed
+               *  to be close enough to call.
+               */
+              return FnStub;
+
             /*
              * If we know the target can handle arbitrary-distance calls, try to
              *  return a direct pointer.
              */
             if(!MayNeedFarStub) {
-              /* If we have code, go ahead and return that. */
-              if(void* ResultPtr = GetPointerToGlobalIfAvailable(F))
-                return ResultPtr;
-
-              void* FnStub = GetLazyFunctionStubIfAvailable(F);
-              if(FnStub)
-                /*
-                 * Return the function stub if it's already created.
-                 * We do this first so that:
-                 *   we're returning the same address for the function
-                 *   as any previous call.
-                 *
-                 *  TODO: Yes, this is wrong. The lazy stub isn't guaranteed
-                 *  to be close enough to call.
-                 */
-                return FnStub;
-
               /*
                * x86_64 architecture may encounter the bug
                *  http://hlvm.llvm.org/bugs/show_bug.cgi?id=5201
