This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Send deleted watchpoint-scope output to all UIs


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=468afe6c5fc9c80b8c175f3f13702ffaa6308400

commit 468afe6c5fc9c80b8c175f3f13702ffaa6308400
Author: Pedro Alves <palves@redhat.com>
Date:   Tue Jun 21 01:11:56 2016 +0100

    Send deleted watchpoint-scope output to all UIs
    
    Testing with:
    
      make check RUNTESTFLAGS="SEPARATE_MI_TTY=1"
    
    shows this, in gdb.mi/mi-watch.exp:
    
     -*stopped,reason="watchpoint-scope",wpnum="2",frame={addr="0x00000000004005cb",
     +*stopped,frame={addr="0x00000000004005cb",
     (...)
     -PASS: gdb.mi/mi-watch.exp: hw: watchpoint trigger
     +FAIL: gdb.mi/mi-watch.exp: hw: watchpoint trigger (unknown output after running)
    
    That is, we lose the "watchpoint-scope" output on the MI UI.
    
    This commit fixes it, and makes the test run with MI running as both
    main UI and separate UI.
    
    gdb/ChangeLog:
    2016-06-21  Pedro Alves  <palves@redhat.com>
    
    	* breakpoint.c (watchpoint_check): Send watchpoint-deleted output
    	to all UIs.
    
    gdb/testsuite/ChangeLog:
    2016-06-21  Pedro Alves  <palves@redhat.com>
    
    	* gdb.mi/mi-watch.exp (test_watchpoint_creation_and_listing)
    	(test_awatch_creation_and_listing)
    	(test_rwatch_creation_and_listing, test_watchpoint_triggering):
    	Remove 'type' parameter.
    	(test_watchpoint_all): New parameter mi_mode.  Remove
    	with_test_prefix.
    	(top level): Use foreach_with_prefix, and add main/separate UI MI
    	testing axis.

Diff:
---
 gdb/ChangeLog                     |  5 +++
 gdb/breakpoint.c                  | 40 ++++++++++++------
 gdb/testsuite/ChangeLog           | 11 +++++
 gdb/testsuite/gdb.mi/mi-watch.exp | 85 ++++++++++++++++++++-------------------
 4 files changed, 87 insertions(+), 54 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 99b8059..d494dd5 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
 2016-06-21  Pedro Alves  <palves@redhat.com>
 
+	* breakpoint.c (watchpoint_check): Send watchpoint-deleted output
+	to all UIs.
+
+2016-06-21  Pedro Alves  <palves@redhat.com>
+
 	* NEWS: Mention support for running interpreters on separate
 	UIs and the new new-ui command.
 
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 27ca204..93dfba6 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -5233,7 +5233,7 @@ watchpoint_check (void *p)
     }
   else
     {
-      struct ui_out *uiout = current_uiout;
+      struct switch_thru_all_uis state;
 
       /* This seems like the only logical thing to do because
          if we temporarily ignored the watchpoint, then when
@@ -5248,14 +5248,20 @@ watchpoint_check (void *p)
 	 call breakpoint_ops->print_it this bp will be deleted
 	 already.  So we have no choice but print the information
 	 here.  */
-      if (ui_out_is_mi_like_p (uiout))
-	ui_out_field_string
-	  (uiout, "reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_SCOPE));
-      ui_out_text (uiout, "\nWatchpoint ");
-      ui_out_field_int (uiout, "wpnum", b->base.number);
-      ui_out_text (uiout,
-		   " deleted because the program has left the block in\n\
-which its expression is valid.\n");     
+
+      SWITCH_THRU_ALL_UIS (state)
+        {
+	  struct ui_out *uiout = current_uiout;
+
+	  if (ui_out_is_mi_like_p (uiout))
+	    ui_out_field_string
+	      (uiout, "reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_SCOPE));
+	  ui_out_text (uiout, "\nWatchpoint ");
+	  ui_out_field_int (uiout, "wpnum", b->base.number);
+	  ui_out_text (uiout,
+		       " deleted because the program has left the block in\n"
+		       "which its expression is valid.\n");
+	}
 
       /* Make sure the watchpoint's commands aren't executed.  */
       decref_counted_command_line (&b->base.commands);
@@ -5423,10 +5429,18 @@ bpstat_check_watchpoint (bpstat bs)
 	      /* Can't happen.  */
 	    case 0:
 	      /* Error from catch_errors.  */
-	      printf_filtered (_("Watchpoint %d deleted.\n"), b->base.number);
-	      watchpoint_del_at_next_stop (b);
-	      /* We've already printed what needs to be printed.  */
-	      bs->print_it = print_it_done;
+	      {
+		struct switch_thru_all_uis state;
+
+		SWITCH_THRU_ALL_UIS (state)
+	          {
+		    printf_filtered (_("Watchpoint %d deleted.\n"),
+				     b->base.number);
+		  }
+		watchpoint_del_at_next_stop (b);
+		/* We've already printed what needs to be printed.  */
+		bs->print_it = print_it_done;
+	      }
 	      break;
 	    }
 	}
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 888d6cd..7e1e9b0 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,16 @@
 2016-06-21  Pedro Alves  <palves@redhat.com>
 
+	* gdb.mi/mi-watch.exp (test_watchpoint_creation_and_listing)
+	(test_awatch_creation_and_listing)
+	(test_rwatch_creation_and_listing, test_watchpoint_triggering):
+	Remove 'type' parameter.
+	(test_watchpoint_all): New parameter mi_mode.  Remove
+	with_test_prefix.
+	(top level): Use foreach_with_prefix, and add main/separate UI MI
+	testing axis.
+
+2016-06-21  Pedro Alves  <palves@redhat.com>
+
 	* README (Testsuite Parameters): Document FORCE_SEPARATE_MI_TTY.
 	* lib/gdb.exp (default_gdb_exit): Clear inferior_spawn_id.
 	* lib/mi-support.exp (mi_uncatched_gdb_exit): Unset
diff --git a/gdb/testsuite/gdb.mi/mi-watch.exp b/gdb/testsuite/gdb.mi/mi-watch.exp
index f4b54bb..29fc471 100644
--- a/gdb/testsuite/gdb.mi/mi-watch.exp
+++ b/gdb/testsuite/gdb.mi/mi-watch.exp
@@ -24,9 +24,6 @@ load_lib mi-support.exp
 set MIFLAGS "-i=mi"
 
 gdb_exit
-if [mi_gdb_start] {
-    continue
-}
 
 standard_testfile basics.c
 
@@ -35,7 +32,7 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
      return -1
 }
 
-proc test_watchpoint_creation_and_listing {type} {
+proc test_watchpoint_creation_and_listing {} {
     global mi_gdb_prompt
     global srcfile
     global hex
@@ -59,7 +56,7 @@ proc test_watchpoint_creation_and_listing {type} {
 }
 
 # UNUSED at the time
-proc test_awatch_creation_and_listing {type} {
+proc test_awatch_creation_and_listing {} {
     global mi_gdb_prompt
     global srcfile
     global hex
@@ -86,7 +83,7 @@ proc test_awatch_creation_and_listing {type} {
 }
 
 # UNUSED at the time
-proc test_rwatch_creation_and_listing {type} {
+proc test_rwatch_creation_and_listing {} {
     global mi_gdb_prompt
     global srcfile
     global hex
@@ -112,7 +109,7 @@ proc test_rwatch_creation_and_listing {type} {
 	    "delete read watchpoint"
 }
 
-proc test_watchpoint_triggering {type} {
+proc test_watchpoint_triggering {} {
     global mi_gdb_prompt
     global hex fullname_syntax srcfile
 
@@ -137,44 +134,50 @@ proc test_watchpoint_triggering {type} {
         "watchpoint trigger"
 }
 
-proc test_watchpoint_all {type} {
-    with_test_prefix "$type" {
-	upvar srcdir srcdir
-	upvar subdir subdir
-	upvar binfile binfile
-
-	mi_delete_breakpoints
-	mi_gdb_reinitialize_dir $srcdir/$subdir
-	mi_gdb_load ${binfile}
-
-	mi_runto callee4
-	test_watchpoint_creation_and_listing $type
-	#test_rwatch_creation_and_listing $type
-	#test_awatch_creation_and_listing $type
-	test_watchpoint_triggering $type
+proc test_watchpoint_all {mi_mode type} {
+    upvar srcdir srcdir
+    upvar subdir subdir
+    upvar binfile binfile
+
+    if {$type == "hw" && [target_info exists gdb,no_hardware_watchpoints] } {
+	return
     }
-}
 
-# Run the tests twice, once using software watchpoints...
-mi_gdb_test "567-gdb-set can-use-hw-watchpoints 0" \
-	"567\\^done" \
-	"hw watchpoints toggle (1)"
-test_watchpoint_all sw
+    mi_gdb_exit
 
-mi_gdb_exit
+    if {$mi_mode == "separate"} {
+	set start_ops "separate-mi-tty"
+    } else {
+	set start_ops ""
+    }
+    if [mi_gdb_start $start_ops] {
+	return
+    }
 
-# ... and unless requested otherwise...
-if [target_info exists gdb,no_hardware_watchpoints] {
-    return 0
-}
+    if {$type == "sw"} {
+	set option 0
+    } else {
+	set option 1
+    }
+    mi_gdb_test "567-gdb-set can-use-hw-watchpoints $option" \
+	"567\\^done" \
+	"hw watchpoints toggle"
 
-mi_gdb_start
+    mi_delete_breakpoints
+    mi_gdb_reinitialize_dir $srcdir/$subdir
+    mi_gdb_load ${binfile}
 
-# ... once using hardware watchpoints (if available).
-mi_gdb_test "890-gdb-set can-use-hw-watchpoints 1" \
-	"890\\^done" \
-	"hw watchpoints toggle (2)"
-test_watchpoint_all hw
+    mi_runto callee4
+    test_watchpoint_creation_and_listing
+    #test_rwatch_creation_and_listing
+    #test_awatch_creation_and_listing
+    test_watchpoint_triggering
+}
 
-mi_gdb_exit
-return 0
+# Run the tests twice, once using software watchpoints, and another
+# with hardware watchpoints.
+foreach_with_prefix mi-mode {"main" "separate"} {
+    foreach_with_prefix wp-type {"sw" "hw"} {
+	test_watchpoint_all ${mi-mode} ${wp-type}
+    }
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]