diff options
author | Sean Callanan <scallanan@apple.com> | 2010-07-13 21:41:46 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2010-07-13 21:41:46 +0000 |
commit | 549c9f7f9a4b0951c17a837f08e01f5c36512b54 (patch) | |
tree | aba30ec942523154830bb7b2edd5228f108c8ded /lldb/source/Expression/ClangExpression.cpp | |
parent | 50bcf13a7b5339991297eed7493cb383fa115386 (diff) | |
download | bcm5719-llvm-549c9f7f9a4b0951c17a837f08e01f5c36512b54.tar.gz bcm5719-llvm-549c9f7f9a4b0951c17a837f08e01f5c36512b54.zip |
"expr -i" now performs the required transforms to
prepare the IR for JIT compilation. We still need
to do the JIT compilation and move the arguments
in/out of target memory.
llvm-svn: 108279
Diffstat (limited to 'lldb/source/Expression/ClangExpression.cpp')
-rw-r--r-- | lldb/source/Expression/ClangExpression.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/lldb/source/Expression/ClangExpression.cpp b/lldb/source/Expression/ClangExpression.cpp index 2383faef054..14033662650 100644 --- a/lldb/source/Expression/ClangExpression.cpp +++ b/lldb/source/Expression/ClangExpression.cpp @@ -50,6 +50,7 @@ #include "llvm/System/DynamicLibrary.h" #include "llvm/System/Host.h" #include "llvm/System/Signals.h" +#include "llvm/Target/TargetRegistry.h" #include "llvm/Target/TargetSelect.h" // Project includes @@ -240,6 +241,9 @@ ClangExpression::CreateCompilerInstance (bool &IsAST) m_clang_ap->getLangOpts().CPlusPlus = true; m_clang_ap->getLangOpts().ObjC1 = true; m_clang_ap->getLangOpts().ThreadsafeStatics = false; + + // Set CodeGen options + m_clang_ap->getCodeGenOpts().EmitDeclMetadata = true; // Disable some warnings. m_clang_ap->getDiagnosticOpts().Warnings.push_back("no-unused-value"); @@ -250,7 +254,6 @@ ClangExpression::CreateCompilerInstance (bool &IsAST) // 3. Set up various important bits of infrastructure. m_clang_ap->createDiagnostics(0, 0); - m_clang_ap->getLangOpts().CPlusPlus = true; // Create the target instance. m_clang_ap->setTarget(TargetInfo::CreateTargetInfo(m_clang_ap->getDiagnostics(), @@ -294,7 +297,7 @@ ClangExpression::ParseExpression (const char *expr_text, { // HACK: for now we have to make a function body around our expression // since there is no way to parse a single expression line in LLVM/Clang. - std::string func_expr("extern \"C\" void ___clang_expr()\n{\n\t"); + std::string func_expr("extern \"C\" void ___clang_expr(void *___clang_arg)\n{\n\t"); func_expr.append(expr_text); func_expr.append(";\n}"); return ParseBareExpression (func_expr, stream, add_result_var); @@ -513,7 +516,23 @@ ClangExpression::PrepareIRForTarget (ClangExpressionVariableList &expr_local_var return 1; } - IRForTarget ir_for_target("IR for target", m_decl_map); + llvm::Triple target_triple = m_clang_ap->getTarget().getTriple(); + + std::string err; + + const llvm::Target *target = llvm::TargetRegistry::lookupTarget(m_target_triple, err); + + if (!target) + { + if (log) + log->Printf("Couldn't find a target for %s", m_target_triple.c_str()); + + return 1; + } + + std::auto_ptr<llvm::TargetMachine> target_machine(target->createTargetMachine(m_target_triple, "")); + + IRForTarget ir_for_target("IR for target", m_decl_map, target_machine->getTargetData()); return ir_for_target.runOnModule(*module); } |