Darwin ABI issues: weak, linkonce, etc. dynamic-no-pic support is complete.
Also fixed a function stub bug. Added weak and linkonce support for
x86 Linux.

llvm-svn: 26038
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index def4f57..1c6a8b3 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -1876,11 +1876,13 @@
     // the GlobalAddress must be in the base or index register of the address,
     // not the GV offset field.
     if (getTargetMachine().
-        getSubtarget<X86Subtarget>().getIndirectExternAndWeakGlobals() &&
-        (GV->hasWeakLinkage() || GV->isExternal()))
-      Result = DAG.getLoad(MVT::i32, DAG.getEntryNode(),
-                           DAG.getTargetGlobalAddress(GV, getPointerTy()),
-                           DAG.getSrcValue(NULL));
+        getSubtarget<X86Subtarget>().getIndirectExternAndWeakGlobals()) {
+      if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
+          (GV->isExternal() && !GV->hasNotBeenReadFromBytecode()))
+        Result = DAG.getLoad(MVT::i32, DAG.getEntryNode(),
+                             DAG.getTargetGlobalAddress(GV, getPointerTy()),
+                             DAG.getSrcValue(NULL));
+    }
     return Result;
   }
   case ISD::VASTART: {