blob: f739d2aef2ce548d74514121f4b23b601a122f6f [file] [log] [blame]
Jim Ingham360f53f2010-11-30 02:22:11 +00001//===-- ThreadPlanCallUserExpression.cpp ------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Target/ThreadPlanCallUserExpression.h"
11
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15#include "llvm/Support/MachO.h"
16// Project includes
17#include "lldb/lldb-private-log.h"
18#include "lldb/Breakpoint/Breakpoint.h"
19#include "lldb/Breakpoint/BreakpointLocation.h"
20#include "lldb/Core/Address.h"
21#include "lldb/Core/Log.h"
22#include "lldb/Core/Stream.h"
23#include "lldb/Expression/ClangUserExpression.h"
24#include "lldb/Target/LanguageRuntime.h"
25#include "lldb/Target/Process.h"
26#include "lldb/Target/RegisterContext.h"
27#include "lldb/Target/StopInfo.h"
28#include "lldb/Target/Target.h"
29#include "lldb/Target/Thread.h"
30#include "lldb/Target/ThreadPlanRunToAddress.h"
31
32using namespace lldb;
33using namespace lldb_private;
34
35//----------------------------------------------------------------------
36// ThreadPlanCallUserExpression: Plan to call a single function
37//----------------------------------------------------------------------
38
39ThreadPlanCallUserExpression::ThreadPlanCallUserExpression (Thread &thread,
40 Address &function,
41 lldb::addr_t arg,
42 bool stop_other_threads,
43 bool discard_on_error,
44 lldb::addr_t *this_arg,
Sean Callanan3aa7da52010-12-13 22:46:15 +000045 lldb::addr_t *cmd_arg,
Jim Ingham360f53f2010-11-30 02:22:11 +000046 ClangUserExpression::ClangUserExpressionSP &user_expression_sp) :
Jim Ingham016ef882011-12-22 19:12:40 +000047 ThreadPlanCallFunction (thread, function, ClangASTType(), arg, stop_other_threads, discard_on_error, this_arg, cmd_arg),
Jim Ingham360f53f2010-11-30 02:22:11 +000048 m_user_expression_sp (user_expression_sp)
49{
Jim Ingham110b55f2012-05-11 18:43:38 +000050 // User expressions are generally "User generated" so we should set them up to stop when done.
51 SetIsMasterPlan (true);
52 SetOkayToDiscard(false);
Jim Ingham360f53f2010-11-30 02:22:11 +000053}
54
55ThreadPlanCallUserExpression::~ThreadPlanCallUserExpression ()
56{
57}
58
59void
60ThreadPlanCallUserExpression::GetDescription (Stream *s, lldb::DescriptionLevel level)
Jim Inghamba560cc2011-11-01 02:46:54 +000061{
Jim Ingham360f53f2010-11-30 02:22:11 +000062 ThreadPlanCallFunction::GetDescription (s, level);
63}
Jim Inghamba560cc2011-11-01 02:46:54 +000064
65StopInfoSP
66ThreadPlanCallUserExpression::GetRealStopInfo()
67{
68 StopInfoSP stop_info_sp = ThreadPlanCallFunction::GetRealStopInfo();
69 lldb::addr_t addr = GetStopAddress();
Greg Claytonf4124de2012-02-21 00:09:25 +000070 DynamicCheckerFunctions *checkers = m_thread.GetProcess()->GetDynamicCheckers();
Jim Inghamba560cc2011-11-01 02:46:54 +000071 StreamString s;
72
73 if (checkers && checkers->DoCheckersExplainStop(addr, s))
74 stop_info_sp->SetDescription(s.GetData());
75
76 return stop_info_sp;
77}