summaryrefslogtreecommitdiffstats
path: root/lldb/source/Breakpoint/BreakpointLocationList.cpp
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2012-02-08 05:23:15 +0000
committerJim Ingham <jingham@apple.com>2012-02-08 05:23:15 +0000
commite6bc6cb96fbcbd77a80c8cb831a2bba2b4073cac (patch)
tree486e94a3918ba4ec21b6205d6dc1f7ae3d01cf81 /lldb/source/Breakpoint/BreakpointLocationList.cpp
parentfec9f8edb788aaca0d7b86f5b6d4163e5a6faa41 (diff)
downloadbcm5719-llvm-e6bc6cb96fbcbd77a80c8cb831a2bba2b4073cac.tar.gz
bcm5719-llvm-e6bc6cb96fbcbd77a80c8cb831a2bba2b4073cac.zip
Send Breakpoint Changed events for all the relevant changes to breakpoints.
Also, provide and use accessors for the thread options on breakpoints so we can control sending the appropriate events. llvm-svn: 150057
Diffstat (limited to 'lldb/source/Breakpoint/BreakpointLocationList.cpp')
-rw-r--r--lldb/source/Breakpoint/BreakpointLocationList.cpp52
1 files changed, 48 insertions, 4 deletions
diff --git a/lldb/source/Breakpoint/BreakpointLocationList.cpp b/lldb/source/Breakpoint/BreakpointLocationList.cpp
index 54824dd4f4e..ac98b9a8f78 100644
--- a/lldb/source/Breakpoint/BreakpointLocationList.cpp
+++ b/lldb/source/Breakpoint/BreakpointLocationList.cpp
@@ -20,10 +20,12 @@
using namespace lldb;
using namespace lldb_private;
-BreakpointLocationList::BreakpointLocationList() :
+BreakpointLocationList::BreakpointLocationList(Breakpoint &owner) :
m_locations(),
m_address_to_location (),
- m_mutex (Mutex::eMutexTypeRecursive)
+ m_mutex (Mutex::eMutexTypeRecursive),
+ m_new_location_recorder (NULL),
+ m_owner (owner)
{
}
@@ -32,12 +34,12 @@ BreakpointLocationList::~BreakpointLocationList()
}
BreakpointLocationSP
-BreakpointLocationList::Create (Breakpoint &bp, const Address &addr)
+BreakpointLocationList::Create (const Address &addr)
{
Mutex::Locker locker (m_mutex);
// The location ID is just the size of the location list + 1
lldb::break_id_t bp_loc_id = m_locations.size() + 1;
- BreakpointLocationSP bp_loc_sp (new BreakpointLocation (bp_loc_id, bp, addr));
+ BreakpointLocationSP bp_loc_sp (new BreakpointLocation (bp_loc_id, m_owner, addr));
m_locations.push_back (bp_loc_sp);
m_address_to_location[addr] = bp_loc_sp;
return bp_loc_sp;
@@ -217,3 +219,45 @@ BreakpointLocationList::GetDescription (Stream *s, lldb::DescriptionLevel level)
}
}
+BreakpointLocationSP
+BreakpointLocationList::AddLocation (const Address &addr, bool *new_location)
+{
+ Mutex::Locker locker (m_mutex);
+
+ if (new_location)
+ *new_location = false;
+ BreakpointLocationSP bp_loc_sp (FindByAddress(addr));
+ if (!bp_loc_sp)
+ {
+ bp_loc_sp = Create (addr);
+ if (bp_loc_sp)
+ {
+ bp_loc_sp->ResolveBreakpointSite();
+
+ if (new_location)
+ *new_location = true;
+ if(m_new_location_recorder)
+ {
+ m_new_location_recorder->Add(bp_loc_sp);
+ }
+ }
+ }
+ return bp_loc_sp;
+}
+
+
+void
+BreakpointLocationList::StartRecordingNewLocations (BreakpointLocationCollection &new_locations)
+{
+ Mutex::Locker locker (m_mutex);
+ assert (m_new_location_recorder == NULL);
+ m_new_location_recorder = &new_locations;
+}
+
+void
+BreakpointLocationList::StopRecordingNewLocations ()
+{
+ Mutex::Locker locker (m_mutex);
+ m_new_location_recorder = NULL;
+}
+
OpenPOWER on IntegriCloud