summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target/ThreadPlanRunToAddress.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Target/ThreadPlanRunToAddress.cpp')
-rw-r--r--lldb/source/Target/ThreadPlanRunToAddress.cpp352
1 files changed, 145 insertions, 207 deletions
diff --git a/lldb/source/Target/ThreadPlanRunToAddress.cpp b/lldb/source/Target/ThreadPlanRunToAddress.cpp
index 18c43dafd7b..6f31db0d93a 100644
--- a/lldb/source/Target/ThreadPlanRunToAddress.cpp
+++ b/lldb/source/Target/ThreadPlanRunToAddress.cpp
@@ -14,10 +14,10 @@
#include "lldb/Target/ThreadPlanRunToAddress.h"
#include "lldb/Core/Log.h"
#include "lldb/Core/Stream.h"
-#include "lldb/Target/Target.h"
#include "lldb/Target/Process.h"
-#include "lldb/Target/Thread.h"
#include "lldb/Target/RegisterContext.h"
+#include "lldb/Target/Target.h"
+#include "lldb/Target/Thread.h"
using namespace lldb;
using namespace lldb_private;
@@ -26,241 +26,179 @@ using namespace lldb_private;
// ThreadPlanRunToAddress: Continue plan
//----------------------------------------------------------------------
-ThreadPlanRunToAddress::ThreadPlanRunToAddress
-(
- Thread &thread,
- Address &address,
- bool stop_others
-) :
- ThreadPlan (ThreadPlan::eKindRunToAddress, "Run to address plan", thread, eVoteNoOpinion, eVoteNoOpinion),
- m_stop_others (stop_others),
- m_addresses (),
- m_break_ids ()
-{
- m_addresses.push_back (address.GetOpcodeLoadAddress (m_thread.CalculateTarget().get()));
- SetInitialBreakpoints();
+ThreadPlanRunToAddress::ThreadPlanRunToAddress(Thread &thread, Address &address,
+ bool stop_others)
+ : ThreadPlan(ThreadPlan::eKindRunToAddress, "Run to address plan", thread,
+ eVoteNoOpinion, eVoteNoOpinion),
+ m_stop_others(stop_others), m_addresses(), m_break_ids() {
+ m_addresses.push_back(
+ address.GetOpcodeLoadAddress(m_thread.CalculateTarget().get()));
+ SetInitialBreakpoints();
}
-ThreadPlanRunToAddress::ThreadPlanRunToAddress
-(
- Thread &thread,
- lldb::addr_t address,
- bool stop_others
-) :
- ThreadPlan (ThreadPlan::eKindRunToAddress, "Run to address plan", thread, eVoteNoOpinion, eVoteNoOpinion),
- m_stop_others (stop_others),
- m_addresses (),
- m_break_ids ()
-{
- m_addresses.push_back(m_thread.CalculateTarget()->GetOpcodeLoadAddress(address));
- SetInitialBreakpoints();
+ThreadPlanRunToAddress::ThreadPlanRunToAddress(Thread &thread,
+ lldb::addr_t address,
+ bool stop_others)
+ : ThreadPlan(ThreadPlan::eKindRunToAddress, "Run to address plan", thread,
+ eVoteNoOpinion, eVoteNoOpinion),
+ m_stop_others(stop_others), m_addresses(), m_break_ids() {
+ m_addresses.push_back(
+ m_thread.CalculateTarget()->GetOpcodeLoadAddress(address));
+ SetInitialBreakpoints();
}
-ThreadPlanRunToAddress::ThreadPlanRunToAddress
-(
- Thread &thread,
- const std::vector<lldb::addr_t> &addresses,
- bool stop_others
-) :
- ThreadPlan (ThreadPlan::eKindRunToAddress, "Run to address plan", thread, eVoteNoOpinion, eVoteNoOpinion),
- m_stop_others (stop_others),
- m_addresses (addresses),
- m_break_ids ()
-{
- // Convert all addresses into opcode addresses to make sure we set
- // breakpoints at the correct address.
- Target &target = thread.GetProcess()->GetTarget();
- std::vector<lldb::addr_t>::iterator pos, end = m_addresses.end();
- for (pos = m_addresses.begin(); pos != end; ++pos)
- *pos = target.GetOpcodeLoadAddress (*pos);
-
- SetInitialBreakpoints();
+ThreadPlanRunToAddress::ThreadPlanRunToAddress(
+ Thread &thread, const std::vector<lldb::addr_t> &addresses,
+ bool stop_others)
+ : ThreadPlan(ThreadPlan::eKindRunToAddress, "Run to address plan", thread,
+ eVoteNoOpinion, eVoteNoOpinion),
+ m_stop_others(stop_others), m_addresses(addresses), m_break_ids() {
+ // Convert all addresses into opcode addresses to make sure we set
+ // breakpoints at the correct address.
+ Target &target = thread.GetProcess()->GetTarget();
+ std::vector<lldb::addr_t>::iterator pos, end = m_addresses.end();
+ for (pos = m_addresses.begin(); pos != end; ++pos)
+ *pos = target.GetOpcodeLoadAddress(*pos);
+
+ SetInitialBreakpoints();
}
-void
-ThreadPlanRunToAddress::SetInitialBreakpoints ()
-{
- size_t num_addresses = m_addresses.size();
- m_break_ids.resize(num_addresses);
-
- for (size_t i = 0; i < num_addresses; i++)
- {
- Breakpoint *breakpoint;
- breakpoint = m_thread.CalculateTarget()->CreateBreakpoint (m_addresses[i], true, false).get();
- if (breakpoint != nullptr)
- {
- m_break_ids[i] = breakpoint->GetID();
- breakpoint->SetThreadID(m_thread.GetID());
- breakpoint->SetBreakpointKind("run-to-address");
- }
+void ThreadPlanRunToAddress::SetInitialBreakpoints() {
+ size_t num_addresses = m_addresses.size();
+ m_break_ids.resize(num_addresses);
+
+ for (size_t i = 0; i < num_addresses; i++) {
+ Breakpoint *breakpoint;
+ breakpoint = m_thread.CalculateTarget()
+ ->CreateBreakpoint(m_addresses[i], true, false)
+ .get();
+ if (breakpoint != nullptr) {
+ m_break_ids[i] = breakpoint->GetID();
+ breakpoint->SetThreadID(m_thread.GetID());
+ breakpoint->SetBreakpointKind("run-to-address");
}
+ }
}
-ThreadPlanRunToAddress::~ThreadPlanRunToAddress ()
-{
- size_t num_break_ids = m_break_ids.size();
- for (size_t i = 0; i < num_break_ids; i++)
- {
- m_thread.CalculateTarget()->RemoveBreakpointByID (m_break_ids[i]);
- }
+ThreadPlanRunToAddress::~ThreadPlanRunToAddress() {
+ size_t num_break_ids = m_break_ids.size();
+ for (size_t i = 0; i < num_break_ids; i++) {
+ m_thread.CalculateTarget()->RemoveBreakpointByID(m_break_ids[i]);
+ }
}
-void
-ThreadPlanRunToAddress::GetDescription (Stream *s, lldb::DescriptionLevel level)
-{
- size_t num_addresses = m_addresses.size();
-
- if (level == lldb::eDescriptionLevelBrief)
- {
- if (num_addresses == 0)
- {
- s->Printf ("run to address with no addresses given.");
- return;
- }
- else if (num_addresses == 1)
- s->Printf ("run to address: ");
- else
- s->Printf ("run to addresses: ");
-
- for (size_t i = 0; i < num_addresses; i++)
- {
- s->Address (m_addresses[i], sizeof (addr_t));
- s->Printf(" ");
- }
- }
+void ThreadPlanRunToAddress::GetDescription(Stream *s,
+ lldb::DescriptionLevel level) {
+ size_t num_addresses = m_addresses.size();
+
+ if (level == lldb::eDescriptionLevelBrief) {
+ if (num_addresses == 0) {
+ s->Printf("run to address with no addresses given.");
+ return;
+ } else if (num_addresses == 1)
+ s->Printf("run to address: ");
else
- {
- if (num_addresses == 0)
- {
- s->Printf ("run to address with no addresses given.");
- return;
- }
- else if (num_addresses == 1)
- s->Printf ("Run to address: ");
- else
- {
- s->Printf ("Run to addresses: ");
- }
-
- for (size_t i = 0; i < num_addresses; i++)
- {
- if (num_addresses > 1)
- {
- s->Printf("\n");
- s->Indent();
- }
-
- s->Address(m_addresses[i], sizeof (addr_t));
- s->Printf (" using breakpoint: %d - ", m_break_ids[i]);
- Breakpoint *breakpoint = m_thread.CalculateTarget()->GetBreakpointByID (m_break_ids[i]).get();
- if (breakpoint)
- breakpoint->Dump (s);
- else
- s->Printf ("but the breakpoint has been deleted.");
- }
+ s->Printf("run to addresses: ");
+
+ for (size_t i = 0; i < num_addresses; i++) {
+ s->Address(m_addresses[i], sizeof(addr_t));
+ s->Printf(" ");
+ }
+ } else {
+ if (num_addresses == 0) {
+ s->Printf("run to address with no addresses given.");
+ return;
+ } else if (num_addresses == 1)
+ s->Printf("Run to address: ");
+ else {
+ s->Printf("Run to addresses: ");
}
-}
-bool
-ThreadPlanRunToAddress::ValidatePlan (Stream *error)
-{
- // If we couldn't set the breakpoint for some reason, then this won't
- // work.
- bool all_bps_good = true;
- size_t num_break_ids = m_break_ids.size();
-
- for (size_t i = 0; i < num_break_ids; i++)
- {
- if (m_break_ids[i] == LLDB_INVALID_BREAK_ID)
- {
- all_bps_good = false;
- if (error)
- {
- error->Printf ("Could not set breakpoint for address: ");
- error->Address (m_addresses[i], sizeof (addr_t));
- error->Printf ("\n");
- }
- }
+ for (size_t i = 0; i < num_addresses; i++) {
+ if (num_addresses > 1) {
+ s->Printf("\n");
+ s->Indent();
+ }
+
+ s->Address(m_addresses[i], sizeof(addr_t));
+ s->Printf(" using breakpoint: %d - ", m_break_ids[i]);
+ Breakpoint *breakpoint =
+ m_thread.CalculateTarget()->GetBreakpointByID(m_break_ids[i]).get();
+ if (breakpoint)
+ breakpoint->Dump(s);
+ else
+ s->Printf("but the breakpoint has been deleted.");
}
- return all_bps_good;
+ }
}
-bool
-ThreadPlanRunToAddress::DoPlanExplainsStop (Event *event_ptr)
-{
- return AtOurAddress();
+bool ThreadPlanRunToAddress::ValidatePlan(Stream *error) {
+ // If we couldn't set the breakpoint for some reason, then this won't
+ // work.
+ bool all_bps_good = true;
+ size_t num_break_ids = m_break_ids.size();
+
+ for (size_t i = 0; i < num_break_ids; i++) {
+ if (m_break_ids[i] == LLDB_INVALID_BREAK_ID) {
+ all_bps_good = false;
+ if (error) {
+ error->Printf("Could not set breakpoint for address: ");
+ error->Address(m_addresses[i], sizeof(addr_t));
+ error->Printf("\n");
+ }
+ }
+ }
+ return all_bps_good;
}
-bool
-ThreadPlanRunToAddress::ShouldStop (Event *event_ptr)
-{
- return AtOurAddress();
+bool ThreadPlanRunToAddress::DoPlanExplainsStop(Event *event_ptr) {
+ return AtOurAddress();
}
-bool
-ThreadPlanRunToAddress::StopOthers ()
-{
- return m_stop_others;
+bool ThreadPlanRunToAddress::ShouldStop(Event *event_ptr) {
+ return AtOurAddress();
}
-void
-ThreadPlanRunToAddress::SetStopOthers (bool new_value)
-{
- m_stop_others = new_value;
-}
+bool ThreadPlanRunToAddress::StopOthers() { return m_stop_others; }
-StateType
-ThreadPlanRunToAddress::GetPlanRunState ()
-{
- return eStateRunning;
+void ThreadPlanRunToAddress::SetStopOthers(bool new_value) {
+ m_stop_others = new_value;
}
-bool
-ThreadPlanRunToAddress::WillStop ()
-{
- return true;
-}
+StateType ThreadPlanRunToAddress::GetPlanRunState() { return eStateRunning; }
-bool
-ThreadPlanRunToAddress::MischiefManaged ()
-{
- Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP));
+bool ThreadPlanRunToAddress::WillStop() { return true; }
- if (AtOurAddress())
- {
- // Remove the breakpoint
- size_t num_break_ids = m_break_ids.size();
-
- for (size_t i = 0; i < num_break_ids; i++)
- {
- if (m_break_ids[i] != LLDB_INVALID_BREAK_ID)
- {
- m_thread.CalculateTarget()->RemoveBreakpointByID (m_break_ids[i]);
- m_break_ids[i] = LLDB_INVALID_BREAK_ID;
- }
- }
- if (log)
- log->Printf("Completed run to address plan.");
- ThreadPlan::MischiefManaged ();
- return true;
+bool ThreadPlanRunToAddress::MischiefManaged() {
+ Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_STEP));
+
+ if (AtOurAddress()) {
+ // Remove the breakpoint
+ size_t num_break_ids = m_break_ids.size();
+
+ for (size_t i = 0; i < num_break_ids; i++) {
+ if (m_break_ids[i] != LLDB_INVALID_BREAK_ID) {
+ m_thread.CalculateTarget()->RemoveBreakpointByID(m_break_ids[i]);
+ m_break_ids[i] = LLDB_INVALID_BREAK_ID;
+ }
}
- else
- return false;
+ if (log)
+ log->Printf("Completed run to address plan.");
+ ThreadPlan::MischiefManaged();
+ return true;
+ } else
+ return false;
}
-bool
-ThreadPlanRunToAddress::AtOurAddress ()
-{
- lldb::addr_t current_address = m_thread.GetRegisterContext()->GetPC();
- bool found_it = false;
- size_t num_addresses = m_addresses.size();
- for (size_t i = 0; i < num_addresses; i++)
- {
- if (m_addresses[i] == current_address)
- {
- found_it = true;
- break;
- }
+bool ThreadPlanRunToAddress::AtOurAddress() {
+ lldb::addr_t current_address = m_thread.GetRegisterContext()->GetPC();
+ bool found_it = false;
+ size_t num_addresses = m_addresses.size();
+ for (size_t i = 0; i < num_addresses; i++) {
+ if (m_addresses[i] == current_address) {
+ found_it = true;
+ break;
}
- return found_it;
+ }
+ return found_it;
}
OpenPOWER on IntegriCloud