X86_64: Set small CodeModel if use PIC_ relocation

Change-Id: Idf0be1ae1d3ed1d0505cdeaac8023b4c7e1ccb85
Signed-off-by: Yong Chen <yong.a.chen@intel.com>
diff --git a/lib/Support/CompilerConfig.cpp b/lib/Support/CompilerConfig.cpp
index 0436a61..299b577 100644
--- a/lib/Support/CompilerConfig.cpp
+++ b/lib/Support/CompilerConfig.cpp
@@ -197,7 +197,12 @@
 
 #if defined (PROVIDE_X86_CODEGEN)
   case llvm::Triple::x86_64:
-    setCodeModel(llvm::CodeModel::Medium);
+    // x86_64 needs small CodeModel if use PIC_ reloc, or else dlopen failed with TEXTREL.
+    if (getRelocationModel() == llvm::Reloc::PIC_) {
+      setCodeModel(llvm::CodeModel::Small);
+    } else {
+      setCodeModel(llvm::CodeModel::Medium);
+    }
     // Disable frame pointer elimination optimization on x86 family.
     getTargetOptions().NoFramePointerElim = true;
     getTargetOptions().UseInitArray = true;