Call target_can_download_tracepoint if there are tracepoints to download

Message ID 86a8su7bin.fsf@gmail.com
State New, archived
Headers

Commit Message

Yao Qi Sept. 10, 2015, 11:35 a.m. UTC
  Pedro Alves <palves@redhat.com> writes:

> I'd suggest moving tribool in common/common-types.h.  It's just
> be a matter of time before we want to use this in gdbserver too..

Yes, of course.  Patch below is what I pushed in.
  

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 85d8bc2..ba521c0 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@ 
+2015-09-10  Yao Qi  <yao.qi@linaro.org>
+
+	* breakpoint.c (download_tracepoint_locations): New local
+	can_download_tracepoint.  Check the result of
+	target_can_download_tracepoint and save it in
+	can_download_tracepoint if there are tracepoints to download.
+	* linux-nat.h (enum tribool): Move it to ...
+	* common/common-types.h: ... here.
+
 2015-09-09  Pedro Alves  <palves@redhat.com>
 
 	* inf-loop.c (inferior_event_handler): Delete INF_TIMER case.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 4709de7..520793a 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -12146,9 +12146,7 @@  download_tracepoint_locations (void)
 {
   struct breakpoint *b;
   struct cleanup *old_chain;
-
-  if (!target_can_download_tracepoint ())
-    return;
+  enum tribool can_download_tracepoint = TRIBOOL_UNKNOWN;
 
   old_chain = save_current_space_and_thread ();
 
@@ -12163,6 +12161,17 @@  download_tracepoint_locations (void)
 	   : !may_insert_tracepoints))
 	continue;
 
+      if (can_download_tracepoint == TRIBOOL_UNKNOWN)
+	{
+	  if (target_can_download_tracepoint ())
+	    can_download_tracepoint = TRIBOOL_TRUE;
+	  else
+	    can_download_tracepoint = TRIBOOL_FALSE;
+	}
+
+      if (can_download_tracepoint == TRIBOOL_FALSE)
+	break;
+
       for (bl = b->loc; bl; bl = bl->next)
 	{
 	  /* In tracepoint, locations are _never_ duplicated, so
diff --git a/gdb/common/common-types.h b/gdb/common/common-types.h
index 55b41ab..3f60a9a 100644
--- a/gdb/common/common-types.h
+++ b/gdb/common/common-types.h
@@ -58,4 +58,6 @@  typedef unsigned long long ULONGEST;
 /* * The largest CORE_ADDR value.  */
 #define CORE_ADDR_MAX (~ (CORE_ADDR) 0)
 
+enum tribool { TRIBOOL_UNKNOWN = -1, TRIBOOL_FALSE = 0, TRIBOOL_TRUE = 1 };
+
 #endif /* COMMON_TYPES_H */
diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h
index 81b3ded..f7b45f7 100644
--- a/gdb/linux-nat.h
+++ b/gdb/linux-nat.h
@@ -116,7 +116,6 @@  struct lwp_info
 extern struct lwp_info *lwp_list;
 
 /* Does the current host support PTRACE_GETREGSET?  */
-enum tribool { TRIBOOL_UNKNOWN = -1, TRIBOOL_FALSE = 0, TRIBOOL_TRUE = 1 };
 extern enum tribool have_ptrace_getregset;
 
 /* Iterate over each active thread (light-weight process).  */