124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ThreadPlanShouldStopHere.cpp ----------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham#include "lldb/Target/RegisterContext.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Thread.h" 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadPlanShouldStopHere.h" 13ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham#include "lldb/Core/Log.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// ThreadPlanShouldStopHere constructor 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanShouldStopHere::ThreadPlanShouldStopHere(ThreadPlan *owner, ThreadPlanShouldStopHereCallback callback, void *baton) : 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_callback (callback), 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_baton (baton), 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_owner (owner), 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_flags (ThreadPlanShouldStopHere::eNone) 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Destructor 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanShouldStopHere::~ThreadPlanShouldStopHere() 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanShouldStopHere::SetShouldStopHereCallback (ThreadPlanShouldStopHereCallback callback, void *baton) 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_callback = callback; 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_baton = baton; 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 48008f3dc79c762b7d240b5ad6d4fb148c5cb039caJim InghamThreadPlanSP 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanShouldStopHere::InvokeShouldStopHereCallback () 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (m_callback) 52ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham { 53008f3dc79c762b7d240b5ad6d4fb148c5cb039caJim Ingham ThreadPlanSP return_plan_sp(m_callback (m_owner, m_flags, m_baton)); 54952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP)); 55ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham if (log) 56ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham { 57ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham lldb::addr_t current_addr = m_owner->GetThread().GetRegisterContext()->GetPC(0); 58ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham 59008f3dc79c762b7d240b5ad6d4fb148c5cb039caJim Ingham if (return_plan_sp) 60ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham { 61ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham StreamString s; 62008f3dc79c762b7d240b5ad6d4fb148c5cb039caJim Ingham return_plan_sp->GetDescription (&s, lldb::eDescriptionLevelFull); 635f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("ShouldStopHere callback found a step out plan from 0x%" PRIx64 ": %s.", current_addr, s.GetData()); 64ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham } 65ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham else 66ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham { 675f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("ShouldStopHere callback didn't find a step out plan from: 0x%" PRIx64 ".", current_addr); 68ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham } 69ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham } 70008f3dc79c762b7d240b5ad6d4fb148c5cb039caJim Ingham return return_plan_sp; 71ad382c523709e86f01bfea27f1991df9afeef2ddJim Ingham } 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 73008f3dc79c762b7d240b5ad6d4fb148c5cb039caJim Ingham return ThreadPlanSP(); 74bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton} 75