public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: gdb-patches@sourceware.org
Subject: Re: [PATCHv2 2/6] gdb/testsuite: don't try to set non-stop mode on a running target
Date: Sat, 04 Feb 2023 16:22:59 +0000	[thread overview]
Message-ID: <87mt5twgbg.fsf@redhat.com> (raw)
In-Reply-To: <b60db013cdf181a9ac9d27a0f288c9542a4dcb41.1674207665.git.aburgess@redhat.com>

Andrew Burgess <aburgess@redhat.com> writes:

> 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.
>
> The consequence of this is that the gdb.threads/thread-specific-bp.exp
> test has one failure when run with the native-extended-gdbserver
> board.
>
> 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 has zero
> failures for me with native-extended-gdbserver, native-gdbserver, and
> the unix board.

Given that the preceding patch[1] appears to be on hold in favour of
Pedro's work[2], I've gone ahead and pushed this patch with a slightly
updated commit message.  This means that when Pedro gets to push his
patch, he'll see the gdb.threads/thread-specific-bp.exp suddenly start
passing.

Thanks,
Andrew

[1] https://sourceware.org/pipermail/gdb-patches/2023-January/195971.html
[2] https://sourceware.org/pipermail/gdb-patches/2022-December/194694.html


---

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 --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
+}


  reply	other threads:[~2023-02-04 16:23 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-28 11:25 [PATCH 0/6] Inferior specific breakpoints Andrew Burgess
2022-11-28 11:25 ` [PATCH 1/6] gdb/remote: announce thread exit events for remote targets Andrew Burgess
2022-11-28 11:25 ` [PATCH 2/6] gdb/testsuite: don't try to set non-stop mode on a running target Andrew Burgess
2022-11-28 11:25 ` [PATCH 3/6] gdb: fix display of thread condition for multi-location breakpoints Andrew Burgess
2022-12-23  8:37   ` Aktemur, Tankut Baris
2022-11-28 11:25 ` [PATCH 4/6] gdb: error if 'thread' or 'task' keywords are overused Andrew Burgess
2022-11-28 13:10   ` Eli Zaretskii
2022-11-28 11:25 ` [PATCH 5/6] gdb: add inferior-specific breakpoints and watchpoints Andrew Burgess
2022-11-28 13:18   ` Eli Zaretskii
2022-12-23 10:05   ` Aktemur, Tankut Baris
2023-01-19 19:13     ` Andrew Burgess
2023-01-20 13:12       ` Aktemur, Tankut Baris
2022-11-28 11:25 ` [PATCH 6/6] gdb: convert the 'start' breakpoint to use inferior keyword Andrew Burgess
2022-12-23 10:17   ` Aktemur, Tankut Baris
2022-12-23 10:55 ` [PATCH 0/6] Inferior specific breakpoints Aktemur, Tankut Baris
2023-01-20  9:46 ` [PATCHv2 " Andrew Burgess
2023-01-20  9:46   ` [PATCHv2 1/6] gdb/remote: announce thread exit events for remote targets Andrew Burgess
2023-02-02 17:50     ` Pedro Alves
2023-02-04 15:46       ` Andrew Burgess
2023-01-20  9:46   ` [PATCHv2 2/6] gdb/testsuite: don't try to set non-stop mode on a running target Andrew Burgess
2023-02-04 16:22     ` Andrew Burgess [this message]
2023-01-20  9:46   ` [PATCHv2 3/6] gdb: fix display of thread condition for multi-location breakpoints Andrew Burgess
2023-02-02 18:13     ` Pedro Alves
2023-02-06 14:48       ` Andrew Burgess
2023-02-06 17:01         ` Pedro Alves
2023-02-07 14:42           ` Andrew Burgess
2023-01-20  9:46   ` [PATCHv2 4/6] gdb: error if 'thread' or 'task' keywords are overused Andrew Burgess
2023-01-20 13:22     ` Eli Zaretskii
2023-02-02 14:08       ` Andrew Burgess
2023-02-02 14:31         ` Eli Zaretskii
2023-02-02 18:21     ` Pedro Alves
2023-02-03 16:41       ` Andrew Burgess
2023-02-04  5:52         ` Joel Brobecker
2023-02-04 15:40           ` Andrew Burgess
2023-02-06 11:06       ` Andrew Burgess
2023-01-20  9:46   ` [PATCHv2 5/6] gdb: add inferior-specific breakpoints and watchpoints Andrew Burgess
2023-01-20 13:25     ` Eli Zaretskii
2023-02-02 19:17     ` Pedro Alves
2023-02-03 16:55       ` Andrew Burgess
2023-02-06 17:24         ` Pedro Alves
2023-02-16 12:56     ` Aktemur, Tankut Baris
2023-01-20  9:46   ` [PATCHv2 6/6] gdb: convert the 'start' breakpoint to use inferior keyword Andrew Burgess
2023-02-16 12:59     ` Aktemur, Tankut Baris
2023-03-16 17:03   ` [PATCHv3 0/2] Inferior specific breakpoints Andrew Burgess
2023-03-16 17:03     ` [PATCHv3 1/2] gdb: cleanup around some set_momentary_breakpoint_at_pc calls Andrew Burgess
2023-04-03 14:12       ` Andrew Burgess
2023-03-16 17:03     ` [PATCHv3 2/2] gdb: add inferior-specific breakpoints Andrew Burgess
2023-04-03 14:14     ` [PATCHv4] " Andrew Burgess
2023-05-15 19:15       ` [PATCHv5] " Andrew Burgess
2023-05-30 20:41         ` [PATCHv6] " Andrew Burgess
2023-07-07 10:23           ` [PATCHv7] " Andrew Burgess
2023-08-17 15:53             ` [PUSHEDv8] " Andrew Burgess
2023-08-23  8:06               ` [PUSHED] gdb: add missing notify_breakpoint_modified call Andrew Burgess
2023-08-23  8:19               ` [PUSHED] gdb/testsuite: improve MI support for inferior specific breakpoints Andrew Burgess

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87mt5twgbg.fsf@redhat.com \
    --to=aburgess@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).