1254721Semaste//===-- ThreadPlanCallUserExpression.cpp ------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#include "lldb/Target/ThreadPlanCallUserExpression.h" 11254721Semaste 12254721Semaste// C Includes 13254721Semaste// C++ Includes 14254721Semaste// Other libraries and framework includes 15254721Semaste#include "llvm/Support/MachO.h" 16254721Semaste// Project includes 17254721Semaste#include "lldb/lldb-private-log.h" 18254721Semaste#include "lldb/Breakpoint/Breakpoint.h" 19254721Semaste#include "lldb/Breakpoint/BreakpointLocation.h" 20254721Semaste#include "lldb/Core/Address.h" 21254721Semaste#include "lldb/Core/Log.h" 22254721Semaste#include "lldb/Core/Stream.h" 23254721Semaste#include "lldb/Expression/ClangUserExpression.h" 24254721Semaste#include "lldb/Target/LanguageRuntime.h" 25254721Semaste#include "lldb/Target/Process.h" 26254721Semaste#include "lldb/Target/RegisterContext.h" 27254721Semaste#include "lldb/Target/StopInfo.h" 28254721Semaste#include "lldb/Target/Target.h" 29254721Semaste#include "lldb/Target/Thread.h" 30254721Semaste#include "lldb/Target/ThreadPlanRunToAddress.h" 31254721Semaste 32254721Semasteusing namespace lldb; 33254721Semasteusing namespace lldb_private; 34254721Semaste 35254721Semaste//---------------------------------------------------------------------- 36254721Semaste// ThreadPlanCallUserExpression: Plan to call a single function 37254721Semaste//---------------------------------------------------------------------- 38254721Semaste 39254721SemasteThreadPlanCallUserExpression::ThreadPlanCallUserExpression (Thread &thread, 40254721Semaste Address &function, 41263367Semaste llvm::ArrayRef<lldb::addr_t> args, 42263367Semaste const EvaluateExpressionOptions &options, 43254721Semaste ClangUserExpression::ClangUserExpressionSP &user_expression_sp) : 44263367Semaste ThreadPlanCallFunction (thread, function, ClangASTType(), args, options), 45254721Semaste m_user_expression_sp (user_expression_sp) 46254721Semaste{ 47254721Semaste // User expressions are generally "User generated" so we should set them up to stop when done. 48254721Semaste SetIsMasterPlan (true); 49254721Semaste SetOkayToDiscard(false); 50254721Semaste} 51254721Semaste 52254721SemasteThreadPlanCallUserExpression::~ThreadPlanCallUserExpression () 53254721Semaste{ 54254721Semaste} 55254721Semaste 56254721Semastevoid 57254721SemasteThreadPlanCallUserExpression::GetDescription (Stream *s, lldb::DescriptionLevel level) 58254721Semaste{ 59254721Semaste ThreadPlanCallFunction::GetDescription (s, level); 60254721Semaste} 61254721Semaste 62254721SemasteStopInfoSP 63254721SemasteThreadPlanCallUserExpression::GetRealStopInfo() 64254721Semaste{ 65254721Semaste StopInfoSP stop_info_sp = ThreadPlanCallFunction::GetRealStopInfo(); 66254721Semaste 67254721Semaste if (stop_info_sp) 68254721Semaste { 69254721Semaste lldb::addr_t addr = GetStopAddress(); 70254721Semaste DynamicCheckerFunctions *checkers = m_thread.GetProcess()->GetDynamicCheckers(); 71254721Semaste StreamString s; 72254721Semaste 73254721Semaste if (checkers && checkers->DoCheckersExplainStop(addr, s)) 74254721Semaste stop_info_sp->SetDescription(s.GetData()); 75254721Semaste } 76254721Semaste 77254721Semaste return stop_info_sp; 78254721Semaste} 79