[Lldb-commits] [lldb] r175828 - Change to JITDefault code model for ELF targets

Andrew Kaylor andrew.kaylor at intel.com
Thu Feb 21 15:45:20 PST 2013


Author: akaylor
Date: Thu Feb 21 17:45:19 2013
New Revision: 175828

URL: http://llvm.org/viewvc/llvm-project?rev=175828&view=rev
Log:
Change to JITDefault code model for ELF targets

On x86-64 platforms, the small code model assumes that code will be loaded below the 2GB boundary.  With the static relocation model, the fact that the expression code is initially loaded (in the LLDB debugger address space) above that boundary causes problems.  Switching to the JITDefault code model causes the large code model to be used for 64-bit targets and small code model of 32-bit targets.


Modified:
    lldb/trunk/source/Expression/ClangExpressionParser.cpp

Modified: lldb/trunk/source/Expression/ClangExpressionParser.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangExpressionParser.cpp?rev=175828&r1=175827&r2=175828&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ClangExpressionParser.cpp (original)
+++ lldb/trunk/source/Expression/ClangExpressionParser.cpp Thu Feb 21 17:45:19 2013
@@ -609,10 +609,18 @@ ClangExpressionParser::PrepareForExecuti
     llvm::Triple triple(module_ap->getTargetTriple());
     llvm::Function *function = module_ap->getFunction (function_name.c_str());
     llvm::Reloc::Model relocModel;
+    llvm::CodeModel::Model codeModel;
     if (triple.isOSBinFormatELF())
+    {
         relocModel = llvm::Reloc::Static;
+        // This will be small for 32-bit and large for 64-bit.
+        codeModel = llvm::CodeModel::JITDefault;
+    }
     else
+    {
         relocModel = llvm::Reloc::PIC_;
+        codeModel = llvm::CodeModel::Small;
+    }
     EngineBuilder builder(module_ap.release());
     builder.setEngineKind(EngineKind::JIT)
         .setErrorStr(&error_string)
@@ -620,7 +628,7 @@ ClangExpressionParser::PrepareForExecuti
         .setJITMemoryManager(jit_memory_manager)
         .setOptLevel(CodeGenOpt::Less)
         .setAllocateGVsWithCode(true)
-        .setCodeModel(CodeModel::Small)
+        .setCodeModel(codeModel)
         .setUseMCJIT(true);
     
     StringRef mArch;





More information about the lldb-commits mailing list