summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/IRForTarget.cpp
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2010-07-03 01:35:46 +0000
committerSean Callanan <scallanan@apple.com>2010-07-03 01:35:46 +0000
commit2ab712f2126397c7fafad47ea233ce56e28d17ef (patch)
tree2e36e8f5984b21d5c7108a526be322df00bf578c /lldb/source/Expression/IRForTarget.cpp
parentbc75502f095825f5786f8a6aa0ce99e98dc68c95 (diff)
downloadbcm5719-llvm-2ab712f2126397c7fafad47ea233ce56e28d17ef.tar.gz
bcm5719-llvm-2ab712f2126397c7fafad47ea233ce56e28d17ef.zip
Added the skeleton of an IR transformer that will
prepare IR for execution in the target. Wired the expression command to use this IR transformer when conversion to DWARF fails, and wired conversion to DWARF to always fail (well, we don't generate any DWARF...) llvm-svn: 107559
Diffstat (limited to 'lldb/source/Expression/IRForTarget.cpp')
-rw-r--r--lldb/source/Expression/IRForTarget.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/lldb/source/Expression/IRForTarget.cpp b/lldb/source/Expression/IRForTarget.cpp
new file mode 100644
index 00000000000..a6b50e59127
--- /dev/null
+++ b/lldb/source/Expression/IRForTarget.cpp
@@ -0,0 +1,109 @@
+//===-- IRForTarget.cpp -------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Expression/IRForTarget.h"
+
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/InstrTypes.h"
+#include "llvm/Module.h"
+
+#include "lldb/Core/dwarf.h"
+#include "lldb/Core/Log.h"
+#include "lldb/Core/Scalar.h"
+#include "lldb/Core/StreamString.h"
+#include "lldb/Expression/ClangExpressionDeclMap.h"
+
+#include <map>
+
+using namespace llvm;
+
+IRForTarget::IRForTarget(const void *pid,
+ lldb_private::ClangExpressionDeclMap *decl_map) :
+ ModulePass(pid),
+ m_decl_map(decl_map)
+{
+}
+
+IRForTarget::~IRForTarget()
+{
+}
+
+bool
+IRForTarget::runOnBasicBlock(BasicBlock &BB)
+{
+ lldb_private::Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS);
+
+ /////////////////////////////////////////////////////////////////////////
+ // Prepare the current basic block for execution in the remote process
+ //
+
+ if (log)
+ {
+ log->Printf("Preparing basic block %s:",
+ BB.hasName() ? BB.getNameStr().c_str() : "[anonymous]");
+
+ llvm::BasicBlock::iterator ii;
+
+ for (ii = BB.begin();
+ ii != BB.end();
+ ++ii)
+ {
+ llvm::Instruction &inst = *ii;
+
+ std::string s;
+ raw_string_ostream os(s);
+
+ inst.print(os);
+
+ if (log)
+ log->Printf(" %s", s.c_str());
+ }
+ }
+
+ return true;
+}
+
+bool
+IRForTarget::runOnModule(Module &M)
+{
+ lldb_private::Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS);
+
+ llvm::Function* function = M.getFunction(StringRef("___clang_expr"));
+
+ if (!function)
+ {
+ if (log)
+ log->Printf("Couldn't find ___clang_expr() in the module");
+
+ return false;
+ }
+
+ llvm::Function::iterator bbi;
+
+ for (bbi = function->begin();
+ bbi != function->end();
+ ++bbi)
+ {
+ runOnBasicBlock(*bbi);
+ }
+
+ return true;
+}
+
+void
+IRForTarget::assignPassManager(PMStack &PMS,
+ PassManagerType T)
+{
+}
+
+PassManagerType
+IRForTarget::getPotentialPassManagerType() const
+{
+ return PMT_ModulePassManager;
+}
OpenPOWER on IntegriCloud