diff options
author | Sean Callanan <scallanan@apple.com> | 2016-02-12 21:11:25 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2016-02-12 21:11:25 +0000 |
commit | b281480203663a1add8248f400947b8d23db9509 (patch) | |
tree | 661f3f7870f2bd52c40c014977b9762ec3bda26c /lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp | |
parent | d1188ddd331fc893967b39e054e2150c91dc80d9 (diff) | |
download | bcm5719-llvm-b281480203663a1add8248f400947b8d23db9509.tar.gz bcm5719-llvm-b281480203663a1add8248f400947b8d23db9509.zip |
Centralized symbol lookup in IRExecutionUnit, and fixed the code model.
I'm preparing to remove symbol lookup from IRForTarget, where it constitutes a
dreadful hack working around no-longer-existing JIT bugs. Thanks to our
contributors, IRForTarget has a lot of smarts that IRExecutionUnit doesn't have,
so I've cleaned them up a bit and moved them over to IRExecutionUnit.
Also for historical reasons, IRExecutionUnit used the "Small" code model on non-
ELF platforms (namely, OS X). That's no longer necessary, and we can use the
same code model as everyone else on OS X. I've fixed that.
llvm-svn: 260734
Diffstat (limited to 'lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp')
-rw-r--r-- | lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp index 01a155a655a..db751269700 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp @@ -612,11 +612,23 @@ ClangExpressionParser::PrepareForExecution (lldb::addr_t &func_addr, if (log) log->Printf("Found function %s for %s", function_name.AsCString(), m_expr.FunctionName()); } + + SymbolContext sc; + + if (lldb::StackFrameSP frame_sp = exe_ctx.GetFrameSP()) + { + sc = frame_sp->GetSymbolContext(lldb::eSymbolContextEverything); + } + else if (lldb::TargetSP target_sp = exe_ctx.GetTargetSP()) + { + sc.target_sp = target_sp; + } execution_unit_sp.reset(new IRExecutionUnit (m_llvm_context, // handed off here llvm_module_ap, // handed off here function_name, exe_ctx.GetTargetSP(), + sc, m_compiler->getTargetOpts().Features)); ClangExpressionHelper *type_system_helper = dyn_cast<ClangExpressionHelper>(m_expr.GetTypeSystemHelper()); |