Make breakpoint commands work again.  Added a PerformAction to the stop info - actions are run when the
stop event is pulled from the event queue.  Then made the StopInfoBreakpoint's PerformAction do the 
breakpoint command.
Also fixed the StopInfoBreakpoint's GetDescription so it gets the breakpoint location info, not the breakpoint
site info.


git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@110637 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Target/Process.cpp b/source/Target/Process.cpp
index 148eabe..1a1f93c 100644
--- a/source/Target/Process.cpp
+++ b/source/Target/Process.cpp
@@ -1746,8 +1746,6 @@
         int num_threads = m_process_sp->GetThreadList().GetSize();
         int idx;
 
-        int32_t should_stop_count = -1;
-        int32_t should_run_count = -1;
         for (idx = 0; idx < num_threads; ++idx)
         {
             lldb::ThreadSP thread_sp = m_process_sp->GetThreadList().GetThreadAtIndex(idx);
@@ -1755,25 +1753,14 @@
             StopInfo *stop_info = thread_sp->GetStopInfo ();
             if (stop_info)
             {
-                if (stop_info->ShouldStop(event_ptr))
-                {
-                    if (should_stop_count < 0)
-                        should_stop_count = 1;
-                    else
-                        should_stop_count++;
-                }
-                else
-                {
-                    if (should_run_count < 0)
-                        should_run_count = 1;
-                    else
-                        should_run_count++;
-                }
+                stop_info->PerformAction(event_ptr);
             }
         }
         
-        // Are we secretly watching the private state here? Should we look at the
-        // should_run_count or the "should_stop_count" and the "should_run_count"???
+        // The stop action might restart the target.  If it does, then we want to mark that in the
+        // event so that whoever is receiving it will know to wait for the running event and reflect
+        // that state appropriately.
+
         if (m_process_sp->GetPrivateState() == eStateRunning)
             SetRestarted(true);
     }
diff --git a/source/Target/StopInfo.cpp b/source/Target/StopInfo.cpp
index 54fc6da..d301cc1 100644
--- a/source/Target/StopInfo.cpp
+++ b/source/Target/StopInfo.cpp
@@ -96,6 +96,35 @@
         }
         return m_should_stop;
     }
+    
+    virtual void
+    PerformAction (Event *event_ptr)
+    {
+        BreakpointSiteSP bp_site_sp (m_thread.GetProcess().GetBreakpointSiteList().FindByID (m_value));
+        if (bp_site_sp)
+        {
+            size_t num_owners = bp_site_sp->GetNumberOfOwners();
+            for (size_t j = 0; j < num_owners; j++)
+            {
+                // The breakpoint action is an asynchronous breakpoint callback.  If we ever need to have both
+                // callbacks and actions on the same breakpoint, we'll have to split this into two.
+                lldb::BreakpointLocationSP bp_loc_sp = bp_site_sp->GetOwnerAtIndex(j);
+                StoppointCallbackContext context (event_ptr, 
+                                                  &m_thread.GetProcess(), 
+                                                  &m_thread, 
+                                                  m_thread.GetStackFrameAtIndex(0).get(),
+                                                  false);
+                bp_loc_sp->InvokeCallback (&context);
+            }
+        }
+        else
+        {
+            Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS);
+
+            if (log)
+                log->Printf ("Process::%s could not find breakpoint site id: %lld...", __FUNCTION__, m_value);
+        }
+    }
         
     virtual bool
     ShouldNotify (Event *event_ptr)
@@ -123,9 +152,20 @@
     {
         if (m_description.empty())
         {
-            StreamString strm;
-            strm.Printf("breakpoint %lli", m_value);
-            m_description.swap (strm.GetString());
+            BreakpointSiteSP bp_site_sp (m_thread.GetProcess().GetBreakpointSiteList().FindByID (m_value));
+            if (bp_site_sp)
+            {
+                StreamString strm;
+                strm.Printf("breakpoint ");
+                bp_site_sp->GetDescription(&strm, eDescriptionLevelBrief);
+                m_description.swap (strm.GetString());
+            }
+            else
+            {
+                StreamString strm;
+                strm.Printf("breakpoint site %lli", m_value);
+                m_description.swap (strm.GetString());
+            }
         }
         return m_description.c_str();
     }