124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ThreadPlanRunToAddress.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 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ThreadPlanRunToAddress.h" 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private-log.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Log.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Stream.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Target.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Thread.h" 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/RegisterContext.h" 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// ThreadPlanRunToAddress: Continue plan 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::ThreadPlanRunToAddress 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Thread &thread, 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Address &address, 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool stop_others 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) : 3717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham ThreadPlan (ThreadPlan::eKindRunToAddress, "Run to address plan", thread, eVoteNoOpinion, eVoteNoOpinion), 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_stop_others (stop_others), 3917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham m_addresses (), 4017454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham m_break_ids () 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 42f4124deeb9532044a38c0774ced872f2709347daGreg Clayton m_addresses.push_back (address.GetOpcodeLoadAddress (m_thread.CalculateTarget().get())); 4317454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham SetInitialBreakpoints(); 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::ThreadPlanRunToAddress 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Thread &thread, 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool stop_others 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) : 5217454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham ThreadPlan (ThreadPlan::eKindRunToAddress, "Run to address plan", thread, eVoteNoOpinion, eVoteNoOpinion), 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_stop_others (stop_others), 5417454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham m_addresses (), 5517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham m_break_ids () 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 57f4124deeb9532044a38c0774ced872f2709347daGreg Clayton m_addresses.push_back(m_thread.CalculateTarget()->GetOpcodeLoadAddress(address)); 5817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham SetInitialBreakpoints(); 5917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham} 6017454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham 6117454cfc6a757305a7d9d4c31313c38981b57b01Jim InghamThreadPlanRunToAddress::ThreadPlanRunToAddress 6217454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham( 6317454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham Thread &thread, 64c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton const std::vector<lldb::addr_t> &addresses, 6517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham bool stop_others 6617454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham) : 6717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham ThreadPlan (ThreadPlan::eKindRunToAddress, "Run to address plan", thread, eVoteNoOpinion, eVoteNoOpinion), 6817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham m_stop_others (stop_others), 6917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham m_addresses (addresses), 7017454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham m_break_ids () 7117454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham{ 72c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton // Convert all addressses into opcode addresses to make sure we set 73c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton // breakpoints at the correct address. 74f4124deeb9532044a38c0774ced872f2709347daGreg Clayton Target &target = thread.GetProcess()->GetTarget(); 75c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton std::vector<lldb::addr_t>::iterator pos, end = m_addresses.end(); 76c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton for (pos = m_addresses.begin(); pos != end; ++pos) 77c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton *pos = target.GetOpcodeLoadAddress (*pos); 78c0fa53324d62a48257c092a3347d6e7236aa3152Greg Clayton 7917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham SetInitialBreakpoints(); 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 8317454cfc6a757305a7d9d4c31313c38981b57b01Jim InghamThreadPlanRunToAddress::SetInitialBreakpoints () 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 8517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham size_t num_addresses = m_addresses.size(); 8617454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham m_break_ids.resize(num_addresses); 8717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham 8817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham for (size_t i = 0; i < num_addresses; i++) 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 9017454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham Breakpoint *breakpoint; 91f4124deeb9532044a38c0774ced872f2709347daGreg Clayton breakpoint = m_thread.CalculateTarget()->CreateBreakpoint (m_addresses[i], true).get(); 9217454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham if (breakpoint != NULL) 9317454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 9417454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham m_break_ids[i] = breakpoint->GetID(); 9517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham breakpoint->SetThreadID(m_thread.GetID()); 96090f83176695d86197b0e86b67dee4160ec5003dJim Ingham breakpoint->SetBreakpointKind("run-to-address"); 9717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::~ThreadPlanRunToAddress () 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 10317454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham size_t num_break_ids = m_break_ids.size(); 10417454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham for (size_t i = 0; i < num_break_ids; i++) 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 106f4124deeb9532044a38c0774ced872f2709347daGreg Clayton m_thread.CalculateTarget()->RemoveBreakpointByID (m_break_ids[i]); 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::GetDescription (Stream *s, lldb::DescriptionLevel level) 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 11317454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham size_t num_addresses = m_addresses.size(); 11417454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (level == lldb::eDescriptionLevelBrief) 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham if (num_addresses == 0) 11817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 11917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Printf ("run to address with no addresses given."); 12017454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham return; 12117454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 12217454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham else if (num_addresses == 1) 12317454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Printf ("run to address: "); 12417454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham else 12517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Printf ("run to addresses: "); 12617454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham 12717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham for (size_t i = 0; i < num_addresses; i++) 12817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 12917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Address (m_addresses[i], sizeof (addr_t)); 13017454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Printf(" "); 13117454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 13517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham if (num_addresses == 0) 13617454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 13717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Printf ("run to address with no addresses given."); 13817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham return; 13917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 14017454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham else if (num_addresses == 1) 14117454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Printf ("Run to address: "); 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 14317454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 14417454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Printf ("Run to addresses: "); 14517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 14617454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham 14717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham for (size_t i = 0; i < num_addresses; i++) 14817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 14917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham if (num_addresses > 1) 15017454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 15117454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Printf("\n"); 15217454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Indent(); 15317454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 15417454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham 15517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Address(m_addresses[i], sizeof (addr_t)); 1566db3594f1ce91d8268ef60bf5d07635d778ea786Jim Ingham s->Printf (" using breakpoint: %d - ", m_break_ids[i]); 157f4124deeb9532044a38c0774ced872f2709347daGreg Clayton Breakpoint *breakpoint = m_thread.CalculateTarget()->GetBreakpointByID (m_break_ids[i]).get(); 15817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham if (breakpoint) 15917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham breakpoint->Dump (s); 16017454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham else 16117454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham s->Printf ("but the breakpoint has been deleted."); 16217454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::ValidatePlan (Stream *error) 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // If we couldn't set the breakpoint for some reason, then this won't 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // work. 17117454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham bool all_bps_good = true; 17217454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham size_t num_break_ids = m_break_ids.size(); 17317454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham 17417454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham for (size_t i = 0; i < num_break_ids; i++) 17517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 17617454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham if (m_break_ids[i] == LLDB_INVALID_BREAK_ID) 17717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 17817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham all_bps_good = false; 179360f53f3c216ee4fb433da0a367168785328a856Jim Ingham if (error) 180360f53f3c216ee4fb433da0a367168785328a856Jim Ingham { 181360f53f3c216ee4fb433da0a367168785328a856Jim Ingham error->Printf ("Could not set breakpoint for address: "); 182360f53f3c216ee4fb433da0a367168785328a856Jim Ingham error->Address (m_addresses[i], sizeof (addr_t)); 183360f53f3c216ee4fb433da0a367168785328a856Jim Ingham error->Printf ("\n"); 184360f53f3c216ee4fb433da0a367168785328a856Jim Ingham } 18517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 18617454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 18717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham return all_bps_good; 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 1917c79a27b955432dfd3ad9439640f0af2eccf37b8Jim InghamThreadPlanRunToAddress::DoPlanExplainsStop (Event *event_ptr) 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return AtOurAddress(); 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::ShouldStop (Event *event_ptr) 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::StopOthers () 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_stop_others; 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::SetStopOthers (bool new_value) 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_stop_others = new_value; 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerStateType 215745ac7a5826fe7c392007941a4046bfb1a8dff81Jim InghamThreadPlanRunToAddress::GetPlanRunState () 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return eStateRunning; 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::WillStop () 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::MischiefManaged () 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 229952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP)); 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (AtOurAddress()) 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Remove the breakpoint 23417454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham size_t num_break_ids = m_break_ids.size(); 23517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham 23617454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham for (size_t i = 0; i < num_break_ids; i++) 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 23817454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham if (m_break_ids[i] != LLDB_INVALID_BREAK_ID) 23917454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 240f4124deeb9532044a38c0774ced872f2709347daGreg Clayton m_thread.CalculateTarget()->RemoveBreakpointByID (m_break_ids[i]); 24117454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham m_break_ids[i] = LLDB_INVALID_BREAK_ID; 24217454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (log) 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner log->Printf("Completed run to address plan."); 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ThreadPlan::MischiefManaged (); 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerThreadPlanRunToAddress::AtOurAddress () 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t current_address = m_thread.GetRegisterContext()->GetPC(); 25717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham bool found_it = false; 25833ee8922de655a11598f87d69bf5352695b18c15Jim Ingham size_t num_addresses = m_addresses.size(); 25933ee8922de655a11598f87d69bf5352695b18c15Jim Ingham for (size_t i = 0; i < num_addresses; i++) 26017454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 26117454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham if (m_addresses[i] == current_address) 26217454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham { 26317454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham found_it = true; 26417454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham break; 26517454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 26617454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham } 26717454cfc6a757305a7d9d4c31313c38981b57b01Jim Ingham return found_it; 26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 269