public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdb/testsuite: don't try to set non-stop mode on a running target
@ 2023-02-04 16:19 Andrew Burgess
  0 siblings, 0 replies; only message in thread
From: Andrew Burgess @ 2023-02-04 16:19 UTC (permalink / raw)
  To: gdb-cvs

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

commit 79436bfc5aa71973f154b855f7440ed62ddd9582
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Thu Nov 24 19:36:23 2022 +0000

    gdb/testsuite: don't try to set non-stop mode on a running target
    
    The test gdb.threads/thread-specific-bp.exp tries to set non-stop mode
    on a running target, something which the manual makes clear is not
    allowed.
    
    This commit restructures the test a little, we now set the non-stop
    mode as part of the GDBFLAGS, so the mode will be set before GDB
    connects to the target.  As a consequence I'm able to move the
    with_test_prefix out of the check_thread_specific_breakpoint proc.
    The check_thread_specific_breakpoint proc is now called within a loop.
    
    After this commit the gdb.threads/thread-specific-bp.exp test still
    has some failures, this is because of an issue GDB currently has
    printing "Thread ... exited" messages.  This problem should be
    addressed by this patch:
    
      https://sourceware.org/pipermail/gdb-patches/2022-December/194694.html
    
    when it is merged.

Diff:
---
 gdb/testsuite/gdb.threads/thread-specific-bp.exp | 138 +++++++++++------------
 1 file changed, 67 insertions(+), 71 deletions(-)

diff --git a/gdb/testsuite/gdb.threads/thread-specific-bp.exp b/gdb/testsuite/gdb.threads/thread-specific-bp.exp
index f603b24fa31..f440574d780 100644
--- a/gdb/testsuite/gdb.threads/thread-specific-bp.exp
+++ b/gdb/testsuite/gdb.threads/thread-specific-bp.exp
@@ -24,8 +24,6 @@ if {[gdb_compile_pthreads \
     return -1
 }
 
-clean_restart ${binfile}
-
 # Extract and return the thread ID of the thread stopped at function
 # FUNC.
 
@@ -45,86 +43,84 @@ proc get_thread_id {func} {
     return $thre
 }
 
-proc check_thread_specific_breakpoint {mode} {
-    with_test_prefix "$mode" {
-	global gdb_prompt
+proc check_thread_specific_breakpoint {non_stop} {
+    global gdb_prompt
 
-	if ![runto_main] {
-	    return -1
-	}
+    if { ![runto_main] } {
+	return -1
+    }
 
-	set main_thre [get_thread_id "main"]
-	if { $main_thre < 0 } {
-	    return -1
-	}
+    set main_thre [get_thread_id "main"]
+    if { $main_thre < 0 } {
+	return -1
+    }
 
-	gdb_breakpoint "start"
-	gdb_continue_to_breakpoint "start"
+    gdb_breakpoint "start"
+    gdb_continue_to_breakpoint "start"
 
-	set start_thre [get_thread_id "start"]
-	if { $start_thre < 0 } {
-	    return -1
-	}
+    set start_thre [get_thread_id "start"]
+    if { $start_thre < 0 } {
+	return -1
+    }
 
-	# Set a thread-specific breakpoint at "main".  This can't ever
-	# be hit, but that's OK.
-	gdb_breakpoint "main thread $start_thre"
-	gdb_test "info break" ".*breakpoint.*thread $start_thre" "breakpoint set"
-
-	# Set breakpoint at a place only reacheable after the "start"
-	# thread exits.
-	gdb_breakpoint "end"
-
-	# Switch back to the main thread, and resume all threads.  The
-	# "start" thread exits, and the main thread reaches "end".
-	gdb_test "thread $main_thre" \
-	    "Switching to thread $main_thre.*" \
-	    "thread $main_thre selected"
-
-	if { $mode == "non-stop" } {
-	    set cmd "continue -a"
-	} else {
-	    set cmd "continue"
-	}
-	set test "continue to end"
-	set thread_exited 0
-	set prompt 0
-	gdb_test_multiple "$cmd" $test -lbl {
-	    -re "(^|\r\n)\\\[Thread \[^\r\n\]* exited](?=\r\n)" {
-		if { $prompt } {
-		    pass $gdb_test_name
-		} else {
-		    set thread_exited 1
-		    exp_continue
-		}
+    # Set a thread-specific breakpoint at "main".  This can't ever
+    # be hit, but that's OK.
+    gdb_breakpoint "main thread $start_thre"
+    gdb_test "info break" ".*breakpoint.*thread $start_thre" "breakpoint set"
+
+    # Set breakpoint at a place only reacheable after the "start"
+    # thread exits.
+    gdb_breakpoint "end"
+
+    # Switch back to the main thread, and resume all threads.  The
+    # "start" thread exits, and the main thread reaches "end".
+    gdb_test "thread $main_thre" \
+	"Switching to thread $main_thre.*" \
+	"thread $main_thre selected"
+
+    if { $non_stop } {
+	set cmd "continue -a"
+    } else {
+	set cmd "continue"
+    }
+    set test "continue to end"
+    set thread_exited 0
+    set prompt 0
+    gdb_test_multiple "$cmd" $test -lbl {
+	-re "(^|\r\n)\\\[Thread \[^\r\n\]* exited](?=\r\n)" {
+	    if { $prompt } {
+		pass $gdb_test_name
+	    } else {
+		set thread_exited 1
+		exp_continue
 	    }
-	    -re "\r\n$gdb_prompt " {
-		if { $thread_exited } {
-		    pass $gdb_test_name
-		} else {
-		    set prompt 1
-		    exp_continue
-		}
+	}
+	-re "\r\n$gdb_prompt " {
+	    if { $thread_exited } {
+		pass $gdb_test_name
+	    } else {
+		set prompt 1
+		exp_continue
 	    }
 	}
+    }
 
-	set test "thread-specific breakpoint was deleted"
-	gdb_test_multiple "info breakpoint" $test {
-	    -re "thread $start_thre\n$gdb_prompt $" {
-		fail $test
-	    }
-	    -re "$gdb_prompt $" {
-		pass $test
-	    }
+    set test "thread-specific breakpoint was deleted"
+    gdb_test_multiple "info breakpoint" $test {
+	-re "thread $start_thre\n$gdb_prompt $" {
+	    fail $test
+	}
+	-re "$gdb_prompt $" {
+	    pass $test
 	}
     }
 }
 
-# Test all-stop mode.
-check_thread_specific_breakpoint "all-stop"
-
-clean_restart ${binfile}
+foreach_with_prefix non_stop {on off} {
+    save_vars { GDBFLAGS } {
+	append GDBFLAGS " -ex \"set non-stop $non_stop\""
+	clean_restart $binfile
+    }
 
-# Test non-stop mode.
-gdb_test_no_output "set non-stop on" "set non-stop mode"
-check_thread_specific_breakpoint "non-stop"
+    check_thread_specific_breakpoint $non_stop
+}

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-02-04 16:19 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-04 16:19 [binutils-gdb] gdb/testsuite: don't try to set non-stop mode on a running target Andrew Burgess

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).