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;