summaryrefslogtreecommitdiffstats
path: root/lldb/source/Expression/ClangFunction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Expression/ClangFunction.cpp')
-rw-r--r--lldb/source/Expression/ClangFunction.cpp38
1 files changed, 23 insertions, 15 deletions
diff --git a/lldb/source/Expression/ClangFunction.cpp b/lldb/source/Expression/ClangFunction.cpp
index 21acb5b3318..642463d49e3 100644
--- a/lldb/source/Expression/ClangFunction.cpp
+++ b/lldb/source/Expression/ClangFunction.cpp
@@ -237,7 +237,7 @@ ClangFunction::CompileFunction (Stream &errors)
bool
ClangFunction::WriteFunctionWrapper (ExecutionContext &exe_ctx, Stream &errors)
{
- Process *process = exe_ctx.process;
+ Process *process = exe_ctx.GetProcessPtr();
if (!process)
return false;
@@ -266,8 +266,8 @@ ClangFunction::WriteFunctionWrapper (ExecutionContext &exe_ctx, Stream &errors)
if (!jit_error.Success())
return false;
- if (exe_ctx.process && m_jit_alloc != LLDB_INVALID_ADDRESS)
- m_jit_process_sp = exe_ctx.process->GetSP();
+ if (process && m_jit_alloc != LLDB_INVALID_ADDRESS)
+ m_jit_process_sp = process->GetSP();
return true;
}
@@ -299,7 +299,7 @@ ClangFunction::WriteFunctionArguments (ExecutionContext &exe_ctx,
using namespace clang;
ExecutionResults return_value = eExecutionSetupError;
- Process *process = exe_ctx.process;
+ Process *process = exe_ctx.GetProcessPtr();
if (process == NULL)
return return_value;
@@ -324,7 +324,7 @@ ClangFunction::WriteFunctionArguments (ExecutionContext &exe_ctx,
}
// TODO: verify fun_addr needs to be a callable address
- Scalar fun_addr (function_address.GetCallableLoadAddress(exe_ctx.target));
+ Scalar fun_addr (function_address.GetCallableLoadAddress(exe_ctx.GetTargetPtr()));
int first_offset = m_member_offsets[0];
process->WriteScalarToMemory(args_addr_ref + first_offset, fun_addr, process->GetAddressByteSize(), error);
@@ -394,8 +394,8 @@ ClangFunction::GetThreadPlanToCallFunction (ExecutionContext &exe_ctx,
lldb::addr_t *cmd_arg)
{
// FIXME: Use the errors Stream for better error reporting.
-
- if (exe_ctx.thread == NULL)
+ Thread *thread = exe_ctx.GetThreadPtr();
+ if (thread == NULL)
{
errors.Printf("Can't call a function without a valid thread.");
return NULL;
@@ -404,7 +404,7 @@ ClangFunction::GetThreadPlanToCallFunction (ExecutionContext &exe_ctx,
// Okay, now run the function:
Address wrapper_address (NULL, func_addr);
- ThreadPlan *new_plan = new ThreadPlanCallFunction (*exe_ctx.thread,
+ ThreadPlan *new_plan = new ThreadPlanCallFunction (*thread,
wrapper_address,
args_addr,
stop_others,
@@ -420,7 +420,7 @@ ClangFunction::FetchFunctionResults (ExecutionContext &exe_ctx, lldb::addr_t arg
// Read the return value - it is the last field in the struct:
// FIXME: How does clang tell us there's no return value? We need to handle that case.
- Process *process = exe_ctx.process;
+ Process *process = exe_ctx.GetProcessPtr();
if (process == NULL)
return false;
@@ -446,7 +446,7 @@ ClangFunction::DeallocateFunctionResults (ExecutionContext &exe_ctx, lldb::addr_
if (pos != m_wrapper_args_addrs.end())
m_wrapper_args_addrs.erase(pos);
- exe_ctx.process->DeallocateMemory(args_addr);
+ exe_ctx.GetProcessRef().DeallocateMemory(args_addr);
}
ExecutionResults
@@ -490,16 +490,24 @@ ClangFunction::ExecuteFunction (
Stream &errors,
lldb::addr_t *this_arg)
{
- lldb::ThreadPlanSP call_plan_sp(ClangFunction::GetThreadPlanToCallFunction(exe_ctx, function_address, void_arg,
- errors, stop_others, discard_on_error,
- this_arg));
+ lldb::ThreadPlanSP call_plan_sp (ClangFunction::GetThreadPlanToCallFunction (exe_ctx,
+ function_address,
+ void_arg,
+ errors,
+ stop_others,
+ discard_on_error,
+ this_arg));
if (call_plan_sp == NULL)
return eExecutionSetupError;
call_plan_sp->SetPrivate(true);
- return exe_ctx.process->RunThreadPlan (exe_ctx, call_plan_sp, stop_others, try_all_threads, discard_on_error,
- single_thread_timeout_usec, errors);
+ return exe_ctx.GetProcessRef().RunThreadPlan (exe_ctx, call_plan_sp,
+ stop_others,
+ try_all_threads,
+ discard_on_error,
+ single_thread_timeout_usec,
+ errors);
}
ExecutionResults
OpenPOWER on IntegriCloud