summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/UtilityFunction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Expression/UtilityFunction.cpp')
-rw-r--r--lldb/source/Expression/UtilityFunction.cpp138
1 files changed, 64 insertions, 74 deletions
diff --git a/lldb/source/Expression/UtilityFunction.cpp b/lldb/source/Expression/UtilityFunction.cpp
index 2ff77f093db..f2795096d41 100644
--- a/lldb/source/Expression/UtilityFunction.cpp
+++ b/lldb/source/Expression/UtilityFunction.cpp
@@ -1,4 +1,5 @@
-//===-- ClangUserExpression.cpp -------------------------------------*- C++ -*-===//
+//===-- ClangUserExpression.cpp -------------------------------------*- C++
+//-*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -10,7 +11,7 @@
// C Includes
#include <stdio.h>
#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
+#include <sys/types.h>
#endif
// C++ Includes
@@ -42,85 +43,74 @@ using namespace lldb;
/// @param[in] name
/// The name of the function, as used in the text.
//------------------------------------------------------------------
-UtilityFunction::UtilityFunction (ExecutionContextScope &exe_scope,
- const char *text,
- const char *name) :
- Expression (exe_scope),
- m_execution_unit_sp (),
- m_jit_module_wp (),
- m_function_text (ExpressionSourceCode::g_expression_prefix),
- m_function_name (name)
-{
- if (text && text[0])
- m_function_text.append (text);
+UtilityFunction::UtilityFunction(ExecutionContextScope &exe_scope,
+ const char *text, const char *name)
+ : Expression(exe_scope), m_execution_unit_sp(), m_jit_module_wp(),
+ m_function_text(ExpressionSourceCode::g_expression_prefix),
+ m_function_name(name) {
+ if (text && text[0])
+ m_function_text.append(text);
}
-UtilityFunction::~UtilityFunction ()
-{
- lldb::ProcessSP process_sp (m_jit_process_wp.lock());
- if (process_sp)
- {
- lldb::ModuleSP jit_module_sp (m_jit_module_wp.lock());
- if (jit_module_sp)
- process_sp->GetTarget().GetImages().Remove(jit_module_sp);
- }
-
+UtilityFunction::~UtilityFunction() {
+ lldb::ProcessSP process_sp(m_jit_process_wp.lock());
+ if (process_sp) {
+ lldb::ModuleSP jit_module_sp(m_jit_module_wp.lock());
+ if (jit_module_sp)
+ process_sp->GetTarget().GetImages().Remove(jit_module_sp);
+ }
}
-// FIXME: We should check that every time this is called it is called with the same return type & arguments...
+// FIXME: We should check that every time this is called it is called with the
+// same return type & arguments...
-FunctionCaller *
-UtilityFunction::MakeFunctionCaller (const CompilerType &return_type, const ValueList &arg_value_list, lldb::ThreadSP thread_to_use_sp, Error &error)
-{
- if (m_caller_up)
- return m_caller_up.get();
-
- ProcessSP process_sp = m_jit_process_wp.lock();
- if (!process_sp)
- {
- error.SetErrorString("Can't make a function caller without a process.");
- return nullptr;
- }
-
- Address impl_code_address;
- impl_code_address.SetOffset(StartAddress());
- std::string name(m_function_name);
- name.append("-caller");
-
- m_caller_up.reset (process_sp->GetTarget().GetFunctionCallerForLanguage (Language(),
- return_type,
- impl_code_address,
- arg_value_list,
- name.c_str(),
- error));
- if (error.Fail())
- {
-
- return nullptr;
- }
- if (m_caller_up)
- {
- DiagnosticManager diagnostics;
+FunctionCaller *UtilityFunction::MakeFunctionCaller(
+ const CompilerType &return_type, const ValueList &arg_value_list,
+ lldb::ThreadSP thread_to_use_sp, Error &error) {
+ if (m_caller_up)
+ return m_caller_up.get();
+
+ ProcessSP process_sp = m_jit_process_wp.lock();
+ if (!process_sp) {
+ error.SetErrorString("Can't make a function caller without a process.");
+ return nullptr;
+ }
- unsigned num_errors = m_caller_up->CompileFunction(thread_to_use_sp, diagnostics);
- if (num_errors)
- {
- error.SetErrorStringWithFormat("Error compiling %s caller function: \"%s\".", m_function_name.c_str(),
- diagnostics.GetString().c_str());
- m_caller_up.reset();
- return nullptr;
- }
+ Address impl_code_address;
+ impl_code_address.SetOffset(StartAddress());
+ std::string name(m_function_name);
+ name.append("-caller");
- diagnostics.Clear();
- ExecutionContext exe_ctx(process_sp);
+ m_caller_up.reset(process_sp->GetTarget().GetFunctionCallerForLanguage(
+ Language(), return_type, impl_code_address, arg_value_list, name.c_str(),
+ error));
+ if (error.Fail()) {
- if (!m_caller_up->WriteFunctionWrapper(exe_ctx, diagnostics))
- {
- error.SetErrorStringWithFormat("Error inserting caller function for %s: \"%s\".", m_function_name.c_str(),
- diagnostics.GetString().c_str());
- m_caller_up.reset();
- return nullptr;
- }
+ return nullptr;
+ }
+ if (m_caller_up) {
+ DiagnosticManager diagnostics;
+
+ unsigned num_errors =
+ m_caller_up->CompileFunction(thread_to_use_sp, diagnostics);
+ if (num_errors) {
+ error.SetErrorStringWithFormat(
+ "Error compiling %s caller function: \"%s\".",
+ m_function_name.c_str(), diagnostics.GetString().c_str());
+ m_caller_up.reset();
+ return nullptr;
}
- return m_caller_up.get();
+
+ diagnostics.Clear();
+ ExecutionContext exe_ctx(process_sp);
+
+ if (!m_caller_up->WriteFunctionWrapper(exe_ctx, diagnostics)) {
+ error.SetErrorStringWithFormat(
+ "Error inserting caller function for %s: \"%s\".",
+ m_function_name.c_str(), diagnostics.GetString().c_str());
+ m_caller_up.reset();
+ return nullptr;
+ }
+ }
+ return m_caller_up.get();
}
OpenPOWER on IntegriCloud