This is the mail archive of the gdb-patches@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]

testsuite: prefix handling


On 02/17/2012 09:31 PM, Tom Tromey wrote:
>>>>>> "Pedro" == Pedro Alves <palves@redhat.com> writes:
> 
> Pedro> Hmm, the only thing dejagnu does with it is 'concat'.
> 
> Pedro>  /usr/share/dejagnu/framework.exp:681:    global pf_prefix
> Pedro>  /usr/share/dejagnu/framework.exp:688:    if {[info exists pf_prefix]} {
> Pedro>  /usr/share/dejagnu/framework.exp:689:   set message [concat $pf_prefix " " $message]
> 
> Hm, I thought I had seen weird output in gdb.log caused by using lappend
> here, which is why I used append elsewhere.

Ah, I found out what it is.

 expect1.1> set l "a b c"
 a b c
 expect1.2> lappend l "d e"
 a b c {d e}
 expect1.3> concat $l " " "foo"
 a b c {d e} foo

{}'s is just tcl's list representation.  So `lappend pf_prefix "something with spaces"'
will end up with {}'s in gdb.sum output.  So I agree we should indeed treat
pf_prefix as a simple string.

> Try this.  I didn't test it in dejagnu, so...
> 
> proc with_test_prefix {prefix body} {
>   global pf_prefix errorInfo errorCode
> 
>   set saved $pf_prefix
>   lappend pf_prefix $prefix
>   set r [catch {uplevel 1 $body} message]
>   set pf_prefix $saved
> 
>   if {$r == 0} {

I think checking for $r == 1 (TCL_ERROR) explicitly is more correct.

I've gone through and converted most things to use this.
I've tested it against native and gdbserver x86_64 Fedora 16, and
diff'ed the gdb.sum outputs (before/after patch), making sure there
were no output changes.

I've also added a blurb explaining test prefixes, the need to keep
test output unique, and examples.

Only a few tests weren't converted to use with_test_prefix by this
patch.  Those are ones that I found that:

 - would require a large reindent
 - or with_test_prefix wasn't a 1-1 replacement

The tests in question are:

 gdb.base/break-interp.exp:416:    append pf_prefix " symbol-less:"
 gdb.base/break-interp.exp:531:  append pf_prefix " $ldname:"
 gdb.base/break-interp.exp:613:              append pf_prefix " $binname:"
 gdb.base/return-nodebug.exp:21:    append pf_prefix " $typenospace:"
 gdb.threads/watchpoint-fork.exp:33:    append pf_prefix " singlethreaded:"
 gdb.threads/watchpoint-fork.exp:96:    append pf_prefix " multithreaded:"
 gdb.trace/unavailable.exp:501:    append pf_prefix " print object on:"
 gdb.trace/unavailable.exp:525:    append pf_prefix " print object off:"

I did convert those to use append rather than lappend though.  When we
do that, we need to add an extra space to the appended string, as
lappend/concat did that.  E.g.,

-    lappend pf_prefix "symbol-less:"
+    append pf_prefix " symbol-less:"

WDYT?

-- 
Pedro Alves

2012-02-21  Pedro Alves  <palves@redhat.com>
	    Tom Tromey  <tromey@redhat.com>

	* lib/gdb.exp: Add description of test prefixes.
	(with_test_prefix): New procedure.
	* gdb.arch/altivec-abi.exp: Use with_test_prefix.
	* gdb.base/attach-pie-misread.exp: Use with_test_prefix.
	* gdb.base/break-interp.exp: Use with_test_prefix.  Use append
	instead of lappend to append to pf_prefix.
	* gdb.base/catch-load.exp: Use with_test_prefix.
	* gdb.base/disp-step-syscall.exp: Use with_test_prefix.
	* gdb.base/jit-so.exp: Use with_test_prefix.
	* gdb.base/jit.exp: Use with_test_prefix.
	* gdb.base/return-nodebug.exp (do_test): Use append instead of
	lappend to append to pf_prefix.
	* gdb.base/sepdebug.exp: Use with_test_prefix.
	* gdb.base/solib-display.exp: Use with_test_prefix.
	* gdb.base/solib-overlap.exp: Use with_test_prefix.
	* gdb.base/watch-cond-infcall.exp: Use with_test_prefix.
	* gdb.base/watchpoint.exp: Use with_test_prefix.
	* gdb.dwarf2/dw2-noloc.exp: Use with_test_prefix.
	* gdb.mi/mi-watch.exp: Use with_test_prefix.
	* gdb.mi/mi2-watch.exp: Use with_test_prefix.
	* gdb.threads/non-ldr-exc-1.exp: Use with_test_prefix.
	* gdb.threads/non-ldr-exc-2.exp: Use with_test_prefix.
	* gdb.threads/non-ldr-exc-3.exp: Use with_test_prefix.
	* gdb.threads/non-ldr-exc-4.exp: Use with_test_prefix.
	* gdb.threads/watchpoint-fork.exp: Use with_test_prefix.  Use
	append instead of lappend to append to pf_prefix.
	* gdb.threads/watchthreads-reorder.exp: Use with_test_prefix.
	* gdb.trace/change-loc.exp: Use with_test_prefix.
	* gdb.trace/pending.exp: Use with_test_prefix.
	* gdb.trace/status-stop.exp: Use with_test_prefix.
	* gdb.trace/strace.exp: Use with_test_prefix.
	* gdb.trace/trace-break.exp: Use with_test_prefix.
	* gdb.trace/unavailable.exp: Use with_test_prefix.  Use append
	instead of lappend to append to pf_prefix.
---

 gdb/testsuite/gdb.arch/altivec-abi.exp             |   27 +++---
 gdb/testsuite/gdb.base/attach-pie-misread.exp      |    8 --
 gdb/testsuite/gdb.base/break-interp.exp            |   36 ++------
 gdb/testsuite/gdb.base/catch-load.exp              |   12 +--
 gdb/testsuite/gdb.base/disp-step-syscall.exp       |   11 --
 gdb/testsuite/gdb.base/jit-so.exp                  |   10 +-
 gdb/testsuite/gdb.base/jit.exp                     |   12 +--
 gdb/testsuite/gdb.base/return-nodebug.exp          |    2
 gdb/testsuite/gdb.base/sepdebug.exp                |    9 --
 gdb/testsuite/gdb.base/solib-display.exp           |    9 --
 gdb/testsuite/gdb.base/solib-overlap.exp           |    9 --
 gdb/testsuite/gdb.base/watch-cond-infcall.exp      |   12 +--
 gdb/testsuite/gdb.base/watchpoint.exp              |   10 +-
 gdb/testsuite/gdb.dwarf2/dw2-noloc.exp             |    9 --
 gdb/testsuite/gdb.mi/mi-watch.exp                  |   10 --
 gdb/testsuite/gdb.mi/mi2-watch.exp                 |   10 --
 gdb/testsuite/gdb.threads/non-ldr-exc-1.exp        |   11 --
 gdb/testsuite/gdb.threads/non-ldr-exc-2.exp        |   11 --
 gdb/testsuite/gdb.threads/non-ldr-exc-3.exp        |   11 --
 gdb/testsuite/gdb.threads/non-ldr-exc-4.exp        |   11 --
 gdb/testsuite/gdb.threads/watchpoint-fork.exp      |   20 ++--
 gdb/testsuite/gdb.threads/watchthreads-reorder.exp |   10 --
 gdb/testsuite/gdb.trace/change-loc.exp             |   23 +----
 gdb/testsuite/gdb.trace/pending.exp                |   89 +++++---------------
 gdb/testsuite/gdb.trace/status-stop.exp            |   35 ++------
 gdb/testsuite/gdb.trace/strace.exp                 |   44 ++--------
 gdb/testsuite/gdb.trace/trace-break.exp            |   77 +++++------------
 gdb/testsuite/gdb.trace/unavailable.exp            |   51 +++--------
 gdb/testsuite/lib/gdb.exp                          |   87 ++++++++++++++++++++
 29 files changed, 242 insertions(+), 434 deletions(-)

diff --git a/gdb/testsuite/gdb.arch/altivec-abi.exp b/gdb/testsuite/gdb.arch/altivec-abi.exp
index 9bbe33f..fd069b2 100644
--- a/gdb/testsuite/gdb.arch/altivec-abi.exp
+++ b/gdb/testsuite/gdb.arch/altivec-abi.exp
@@ -36,7 +36,7 @@ if [get_compiler_info $binfile] {
     return -1
 }

-proc altivec_abi_tests { extra_flags force_abi } {
+proc altivec_abi_tests { prefix extra_flags force_abi } { with_test_prefix $prefix {
     global testfile binfile srcfile srcdir subdir
     global gdb_prompt

@@ -144,13 +144,10 @@ proc altivec_abi_tests { extra_flags force_abi } {
     gdb_test "p matrix\[1\]" ".*= .11, 12, 13, 14, 15, 16, 17, 18." "print second vector"
     gdb_test "p matrix\[2\]" ".*= .21, 22, 23, 24, 25, 26, 27, 28." "print third vector"
     gdb_test "p matrix\[3\]" ".*= .31, 32, 33, 34, 35, 36, 37, 38." "print fourth vector"
-}
+}}

 if [test_compiler_info gcc*] {
-    set saved_prefix $pf_prefix
-
-    set pf_prefix "${saved_prefix} default ABI, auto:"
-    altivec_abi_tests "additional_flags=-maltivec" "auto"
+    altivec_abi_tests " default ABI, auto:" "additional_flags=-maltivec" "auto"

     # On GNU/Linux, we can mix -mabi=no-altivec and -mabi=altivec.
     # So test some combinations.
@@ -159,24 +156,24 @@ if [test_compiler_info gcc*] {
 	# was broken, so skip those tests there.
 	if { ![is_lp64_target] || ![test_compiler_info "gcc-4-\[12\]-*"] } {
 	    set binfile ${objdir}/${subdir}/${testfile}-ge-ge
-	    set pf_prefix "${saved_prefix} generic ABI, forced:"
-	    altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=no-altivec" "generic"
+	    altivec_abi_tests " generic ABI, forced:" \
+		"additional_flags=-maltivec additional_flags=-mabi=no-altivec" "generic"

 	    set binfile ${objdir}/${subdir}/${testfile}-ge-auto
-	    set pf_prefix "${saved_prefix} generic ABI, auto:"
-	    altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=no-altivec" "auto"
+	    altivec_abi_tests " generic ABI, auto:" \
+		"additional_flags=-maltivec additional_flags=-mabi=no-altivec" "auto"
 	}

 	set binfile ${objdir}/${subdir}/${testfile}-av-av
-	set pf_prefix "${saved_prefix} AltiVec ABI, forced:"
-	altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=altivec" "altivec"
+	altivec_abi_tests " AltiVec ABI, forced:" \
+	    "additional_flags=-maltivec additional_flags=-mabi=altivec" "altivec"

 	set binfile ${objdir}/${subdir}/${testfile}-av-auto
-	set pf_prefix "${saved_prefix} AltiVec ABI, auto:"
-	altivec_abi_tests "additional_flags=-maltivec additional_flags=-mabi=altivec" "auto"
+	altivec_abi_tests " AltiVec ABI, auto:" \
+	    "additional_flags=-maltivec additional_flags=-mabi=altivec" "auto"
     }
 } elseif [test_compiler_info xlc*] {
-    altivec_abi_tests "additional_flags=-qaltivec" "auto"
+    altivec_abi_tests "" "additional_flags=-qaltivec" "auto"
 } else {
     warning "unknown compiler"
     return -1
diff --git a/gdb/testsuite/gdb.base/attach-pie-misread.exp b/gdb/testsuite/gdb.base/attach-pie-misread.exp
index 65477a9..de1055e 100644
--- a/gdb/testsuite/gdb.base/attach-pie-misread.exp
+++ b/gdb/testsuite/gdb.base/attach-pie-misread.exp
@@ -152,9 +152,7 @@ gdb_expect {
 }

 # Due to alignments it was reproducible with 1 on x86_64 but 2 on i686.
-foreach align_mult {1 2} {
-    set old_ldprefix $pf_prefix
-    lappend pf_prefix "shift-by-$align_mult:"
+foreach align_mult {1 2} { with_test_prefix " shift-by-$align_mult:" {

     # FIXME: We believe there is enough room under FIRST_OFFSET.
     set shifted_offset [format 0x%x [expr "$first_offset - $align_mult * $align_max"]]
@@ -198,8 +196,6 @@ foreach align_mult {1 2} {
     }

     gdb_test "detach" "Detaching from program: .*"
-
-    set pf_prefix $old_ldprefix
-}
+}}

 remote_exec host "kill -9 $pid"
diff --git a/gdb/testsuite/gdb.base/break-interp.exp b/gdb/testsuite/gdb.base/break-interp.exp
index 575e8f0..d6267ac 100644
--- a/gdb/testsuite/gdb.base/break-interp.exp
+++ b/gdb/testsuite/gdb.base/break-interp.exp
@@ -185,16 +185,12 @@ proc reach_1 {func command displacement} {
 # displacement of 0 bytes to be present, "NONZERO" for displacement of non-0
 # bytes to be present and "PRESENT" if both "ZERO" and "NONZERO" are valid.
 proc reach {func command displacement} {
-    global pf_prefix
-    set old_ldprefix $pf_prefix
-    lappend pf_prefix "reach-$func:"
-
-    reach_1 $func $command $displacement
-
-    set pf_prefix $old_ldprefix
+    with_test_prefix " reach-$func:" {
+	reach_1 $func $command $displacement
+    }
 }

-proc test_core {file displacement} {
+proc test_core {file displacement} { with_test_prefix " core:" {
     global srcdir subdir gdb_prompt expect_out

     set corefile [core_find $file {} "segv"]
@@ -202,10 +198,6 @@ proc test_core {file displacement} {
 	return
     }

-    global pf_prefix
-    set old_ldprefix $pf_prefix
-    lappend pf_prefix "core:"
-
     gdb_exit
     gdb_start
     # Clear it to never find any separate debug infos in $debug_root.
@@ -245,17 +237,11 @@ proc test_core {file displacement} {
     }

     gdb_test "bt" "#\[0-9\]+ +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#\[0-9\]+ +\[^\r\n\]*\\mmain\\M.*" "core main bt"
+}}

-    set pf_prefix $old_ldprefix
-}
-
-proc test_attach_gdb {file pid displacement prefix} {
+proc test_attach_gdb {file pid displacement prefix} { with_test_prefix " $prefix:" {
     global gdb_prompt expect_out

-    global pf_prefix
-    set old_ldprefix $pf_prefix
-    lappend pf_prefix "$prefix:"
-
     gdb_exit
     gdb_start

@@ -300,9 +286,7 @@ proc test_attach_gdb {file pid displacement prefix} {

     gdb_test "bt" "#\[0-9\]+ +\[^\r\n\]*\\mlibfunc\\M\[^\r\n\]*\r\n#\[0-9\]+ +\[^\r\n\]*\\mmain\\M.*" "attach main bt"
     gdb_exit
-
-    set pf_prefix $old_ldprefix
-}
+}}

 proc test_attach {file displacement {relink_args ""}} {
     global board_info
@@ -429,7 +413,7 @@ proc test_ld {file ifmain trynosym displacement} {

     global pf_prefix
     set old_ldprefix $pf_prefix
-    lappend pf_prefix "symbol-less:"
+    append pf_prefix " symbol-less:"

     # Test also `exec-file'-command loaded $FILE - therefore without symbols.
     # SYMBOL_OBJFILE is not available and only EXEC_BFD must be used.
@@ -544,7 +528,7 @@ foreach ldprelink {NO YES} {
 	set interp_saved ${interp}-saved

 	set pf_prefix $old_ldprefix
-	lappend pf_prefix "$ldname:"
+	append pf_prefix " $ldname:"

 	if {$ldsepdebug == "NO"} {
 	    file_copy $interp_system $interp
@@ -626,7 +610,7 @@ foreach ldprelink {NO YES} {
 		    set exec $binprefix-$binname

 		    set pf_prefix $old_binprefix
-		    lappend pf_prefix "$binname:"
+		    append pf_prefix " $binname:"

 		    set opts "ldflags=-Wl,$binfile_lib,-rpath,[file dirname $binfile_lib]"
 		    if {$binsepdebug != "NO"} {
diff --git a/gdb/testsuite/gdb.base/catch-load.exp b/gdb/testsuite/gdb.base/catch-load.exp
index af7114a..aa4c21b 100644
--- a/gdb/testsuite/gdb.base/catch-load.exp
+++ b/gdb/testsuite/gdb.base/catch-load.exp
@@ -46,20 +46,16 @@ if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfile2}" ${binfile2} {debug}] !
 # names.
 # KIND is passed to the "catch" command.
 # MATCH is a boolean saying whether we expect the catchpoint to be hit.
-proc one_catch_load_test {scenario kind match sostop} {
+proc one_catch_load_test {scenario kind match sostop} { with_test_prefix "${scenario}:" {
     global verbose testfile testfile2 binfile2_dlopen
-    global pf_prefix srcfile
+    global srcfile
     global decimal gdb_prompt

-    set saved_prefix $pf_prefix
-    append pf_prefix "${scenario}:"
-
     clean_restart $testfile
     gdb_load_shlibs $binfile2_dlopen

     if {![runto_main]} {
 	fail "can't run to main"
-	set pf_prefix $saved_prefix
 	return
     }

@@ -98,9 +94,7 @@ proc one_catch_load_test {scenario kind match sostop} {
 	    fail "continue"
 	}
     }
-
-    set pf_prefix $saved_prefix
-}
+}}

 one_catch_load_test "plain load" "load" 1 0
 one_catch_load_test "plain load with stop-on-solib-events" "load" 1 1
diff --git a/gdb/testsuite/gdb.base/disp-step-syscall.exp b/gdb/testsuite/gdb.base/disp-step-syscall.exp
index 1f23399..61de211 100644
--- a/gdb/testsuite/gdb.base/disp-step-syscall.exp
+++ b/gdb/testsuite/gdb.base/disp-step-syscall.exp
@@ -30,10 +30,9 @@ if { [istarget "i\[34567\]86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
     return -1
 }

-proc disp_step_cross_syscall { syscall } {
+proc disp_step_cross_syscall { syscall } { with_test_prefix " $syscall:" {
     global syscall_insn
     global gdb_prompt
-    global pf_prefix

     set testfile "disp-step-$syscall"

@@ -47,9 +46,6 @@ proc disp_step_cross_syscall { syscall } {
 	return
     }

-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$syscall:"
-
     # Delete the breakpoint on main.
     gdb_test_no_output "delete break 1"

@@ -94,7 +90,6 @@ proc disp_step_cross_syscall { syscall } {

     if {$see_syscall_insn == 0} then {
 	fail "find syscall insn in $syscall"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -130,9 +125,7 @@ proc disp_step_cross_syscall { syscall } {

     gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \
 	"continue to marker ($syscall)"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 disp_step_cross_syscall "fork"
 disp_step_cross_syscall "vfork"
diff --git a/gdb/testsuite/gdb.base/jit-so.exp b/gdb/testsuite/gdb.base/jit-so.exp
index b28f903..b595774 100644
--- a/gdb/testsuite/gdb.base/jit-so.exp
+++ b/gdb/testsuite/gdb.base/jit-so.exp
@@ -63,11 +63,8 @@ if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} {}] != "" } {

 set solib_binfile_target [gdb_download ${solib_binfile}]

-proc one_jit_test {count match_str} {
-    global verbose testfile srcfile2 binfile2 binfile2_dlopen solib_binfile_target solib_binfile_test_msg pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "one_jit_test-$count:"
+proc one_jit_test {count match_str} { with_test_prefix " one_jit_test-$count:" {
+    global verbose testfile srcfile2 binfile2 binfile2_dlopen solib_binfile_target solib_binfile_test_msg

     clean_restart $testfile
     gdb_load_shlibs $binfile2
@@ -114,8 +111,7 @@ proc one_jit_test {count match_str} {
     # All jit librares must have been unregistered
     gdb_test "info function jit_function" \
 	"All functions matching regular expression \"jit_function\":"
-    set pf_prefix $old_pf_prefix
-}
+}}

 one_jit_test 1 "${hex}  jit_function_0000"
 one_jit_test 2 "${hex}  jit_function_0000\[\r\n\]+${hex}  jit_function_0001"
diff --git a/gdb/testsuite/gdb.base/jit.exp b/gdb/testsuite/gdb.base/jit.exp
index a1aa351..4b8059f 100644
--- a/gdb/testsuite/gdb.base/jit.exp
+++ b/gdb/testsuite/gdb.base/jit.exp
@@ -51,11 +51,8 @@ if { [gdb_compile_shlib ${solib_srcfile} ${solib_binfile} {-fPIC}] != "" } {

 set solib_binfile_target [gdb_download ${solib_binfile}]

-proc one_jit_test {count match_str} {
-    global verbose testfile solib_binfile_target solib_binfile_test_msg pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "one_jit_test-$count:"
+proc one_jit_test {count match_str} { with_test_prefix " one_jit_test-$count:" {
+    global verbose testfile solib_binfile_target solib_binfile_test_msg

     clean_restart $testfile

@@ -93,9 +90,8 @@ proc one_jit_test {count match_str} {
     gdb_continue_to_breakpoint "break here 2"
     # All jit librares must have been unregistered
     gdb_test "info function jit_function" \
-	"All functions matching regular expression \"jit_function\":"
-    set pf_prefix $old_pf_prefix
-}
+	"All functions matching regular expression \"jit_function\":"
+}}

 one_jit_test 1 "${hex}  jit_function_0000"
 one_jit_test 2 "${hex}  jit_function_0000\[\r\n\]+${hex}  jit_function_0001"
diff --git a/gdb/testsuite/gdb.base/return-nodebug.exp b/gdb/testsuite/gdb.base/return-nodebug.exp
index 1058088..44b415b 100644
--- a/gdb/testsuite/gdb.base/return-nodebug.exp
+++ b/gdb/testsuite/gdb.base/return-nodebug.exp
@@ -18,7 +18,7 @@ proc do_test {type} {

     global pf_prefix
     set old_prefix $pf_prefix
-    lappend pf_prefix "$typenospace:"
+    append pf_prefix " $typenospace:"

     if {[runto "func"]} {
 	# Verify that we do not crash when using "return" from a function with
diff --git a/gdb/testsuite/gdb.base/sepdebug.exp b/gdb/testsuite/gdb.base/sepdebug.exp
index 4010d33..cb1bd00 100644
--- a/gdb/testsuite/gdb.base/sepdebug.exp
+++ b/gdb/testsuite/gdb.base/sepdebug.exp
@@ -650,14 +650,10 @@ test_next_with_recursion

 #********

-proc test_different_dir {type test_different_dir xfail} {
+proc test_different_dir {type test_different_dir xfail} { with_test_prefix " $type:" {
     global srcdir subdir objdir binfile srcfile timeout gdb_prompt
-    global pf_prefix
     global bp_location6 decimal hex

-    set old_pf_prefix $pf_prefix
-    append pf_prefix " $type:"
-
     gdb_exit
     gdb_start
     gdb_reinitialize_dir $srcdir/$subdir
@@ -747,9 +743,8 @@ proc test_different_dir {type test_different_dir xfail} {
 	gdb_test_no_output "set args main"
     }

-    set pf_prefix $old_pf_prefix
 # proc test_different_dir
-}
+}}


 # now move the .debug file to a different location so that we can test
diff --git a/gdb/testsuite/gdb.base/solib-display.exp b/gdb/testsuite/gdb.base/solib-display.exp
index c1a653d..6886e04 100644
--- a/gdb/testsuite/gdb.base/solib-display.exp
+++ b/gdb/testsuite/gdb.base/solib-display.exp
@@ -48,12 +48,8 @@ if [get_compiler_info ${binfile}] {
     return -1
 }

-set save_pf_prefix $pf_prefix
 # SEP must be last for the possible `unsupported' error path.
-foreach libsepdebug {NO IN SEP} {
-
-    set pf_prefix $save_pf_prefix
-    lappend pf_prefix "$libsepdebug:"
+foreach libsepdebug {NO IN SEP} { with_test_prefix " $libsepdebug:" {

     set sep_lib_flags $lib_flags
     if {$libsepdebug != "NO"} {
@@ -135,5 +131,4 @@ foreach libsepdebug {NO IN SEP} {
     gdb_test "break [gdb_get_line_number "break here" ${testfile}.c]" \
 	    ".*Breakpoint.* at .*"
     gdb_test "continue" "6: a_static = 46\\r\\n5: a_local = 45\\r\\n4: main_global = 44\\r\\n.*"
-}
-set pf_prefix $save_pf_prefix
+}}
diff --git a/gdb/testsuite/gdb.base/solib-overlap.exp b/gdb/testsuite/gdb.base/solib-overlap.exp
index b83a99c..048e6cf 100644
--- a/gdb/testsuite/gdb.base/solib-overlap.exp
+++ b/gdb/testsuite/gdb.base/solib-overlap.exp
@@ -52,12 +52,9 @@ set srcfile ${srcdir}/${subdir}/${testfile}.c
 # false PASS.
 # Prelink first lib1 at 0x40000000 and lib2 at 0x41000000.
 # During second pass try lib1 at 0x50000000 and lib2 at 0x51000000.
-foreach prelink_lib1 {0x40000000 0x50000000} {
+foreach prelink_lib1 {0x40000000 0x50000000} { with_test_prefix " $prelink_lib1:" {
     set prelink_lib2 [format "0x%x" [expr $prelink_lib1 + 0x01000000]]

-    set old_prefix $pf_prefix
-    lappend pf_prefix "$prelink_lib1:"
-
     # Library file.
     set binfile_lib1 ${objdir}/${subdir}/${libname}1-${prelink_lib1}.so
     set binfile_lib1_test_msg OBJDIR/${subdir}/${libname}1-${prelink_lib1}.so
@@ -137,6 +134,4 @@ foreach prelink_lib1 {0x40000000 0x50000000} {
     sleep 5

     remote_exec build "kill -9 ${testpid}"
-
-    set pf_prefix $old_prefix
-}
+}}
diff --git a/gdb/testsuite/gdb.base/watch-cond-infcall.exp b/gdb/testsuite/gdb.base/watch-cond-infcall.exp
index 8b81453..383ce89 100644
--- a/gdb/testsuite/gdb.base/watch-cond-infcall.exp
+++ b/gdb/testsuite/gdb.base/watch-cond-infcall.exp
@@ -25,12 +25,8 @@ if { [build_executable ${testfile}.exp ${testfile} ${testfile}.c {debug}] } {
     return -1
 }

-proc test_watchpoint { hw teststr } {
+proc test_watchpoint { hw } {
     global testfile
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$teststr:"

     clean_restart ${testfile}

@@ -50,12 +46,10 @@ proc test_watchpoint { hw teststr } {
     gdb_test "continue" \
 	"atchpoint \[0-9\]+: var\r\n\r\nOld value = 0\r\nNew value = 1\r\n.*watchpoint-stop.*" \
 	"continue"
-
-    set pf_prefix $old_pf_prefix
 }

 if { ![target_info exists gdb,no_hardware_watchpoints] } {
-    test_watchpoint 1 "hw"
+    with_test_prefix " hw:" { test_watchpoint 1 }
 }

-test_watchpoint 0 "sw"
+with_test_prefix " sw:" { test_watchpoint 0 }
diff --git a/gdb/testsuite/gdb.base/watchpoint.exp b/gdb/testsuite/gdb.base/watchpoint.exp
index 381c26e..7a252bb 100644
--- a/gdb/testsuite/gdb.base/watchpoint.exp
+++ b/gdb/testsuite/gdb.base/watchpoint.exp
@@ -894,12 +894,10 @@ proc do_tests {} {

 do_tests
 if ![target_info exists gdb,no_hardware_watchpoints] {
-    set save_pf_prefix $pf_prefix
-    lappend pf_prefix "no-hw:"
-
-    set no_hw 1
-    do_tests
-    set pf_prefix $save_pf_prefix
+    with_test_prefix " no-hw:" {
+	set no_hw 1
+	do_tests
+    }
 }

 # Restore old timeout
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp b/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
index 9b29b14..ecb99ef 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-noloc.exp
@@ -33,10 +33,7 @@ if { [prepare_for_testing dw2-noloc.exp "dw2-noloc" {dw2-noloc-main.c dw2-noloc.
 # unresolvable: .symtab entry does not exist for this symbol name.
 # DW_AT_declaration is not present in any of these DIEs.

-proc file_symbols {type} {
-    global pf_prefix
-    set old_prefix $pf_prefix
-    lappend pf_prefix "$type:"
+proc file_symbols {type} { with_test_prefix " $type:" {

     global gdb_prompt

@@ -78,9 +75,7 @@ proc file_symbols {type} {
     # As DW_AT_declaration is not present in this DIE
     # it should print <optimized out>.  As usefulness of such DIE is not
     # clear its resolution is not being tested.
-
-    set pf_prefix $old_prefix
-}
+}}

 file_symbols no-run

diff --git a/gdb/testsuite/gdb.mi/mi-watch.exp b/gdb/testsuite/gdb.mi/mi-watch.exp
index bce4e88..972fdb2 100644
--- a/gdb/testsuite/gdb.mi/mi-watch.exp
+++ b/gdb/testsuite/gdb.mi/mi-watch.exp
@@ -147,15 +147,11 @@ proc test_watchpoint_triggering {type} {
     clear_xfail *-*-*
 }

-proc test_watchpoint_all {type} {
-    global pf_prefix
+proc test_watchpoint_all {type} { with_test_prefix " $type:" {
     upvar srcdir srcdir
     upvar subdir subdir
     upvar binfile binfile

-    set old_prefix $pf_prefix
-    lappend pf_prefix "$type:"
-
     mi_delete_breakpoints
     mi_gdb_reinitialize_dir $srcdir/$subdir
     mi_gdb_load ${binfile}
@@ -165,9 +161,7 @@ proc test_watchpoint_all {type} {
     #test_rwatch_creation_and_listing $type
     #test_awatch_creation_and_listing $type
     test_watchpoint_triggering $type
-
-    set pf_prefix $old_prefix
-}
+}}

 # Run the tests twice, once using software watchpoints...
 mi_gdb_test "567-gdb-set can-use-hw-watchpoints 0" \
diff --git a/gdb/testsuite/gdb.mi/mi2-watch.exp b/gdb/testsuite/gdb.mi/mi2-watch.exp
index 3324ba8..37a919f 100644
--- a/gdb/testsuite/gdb.mi/mi2-watch.exp
+++ b/gdb/testsuite/gdb.mi/mi2-watch.exp
@@ -146,15 +146,11 @@ proc test_watchpoint_triggering {type} {
     clear_xfail *-*-*
 }

-proc test_watchpoint_all {type} {
-    global pf_prefix
+proc test_watchpoint_all {type} { with_test_prefix " $type:" {
     upvar srcdir srcdir
     upvar subdir subdir
     upvar binfile binfile

-    set old_prefix $pf_prefix
-    lappend pf_prefix "$type:"
-
     mi_delete_breakpoints
     mi_gdb_reinitialize_dir $srcdir/$subdir
     mi_gdb_load ${binfile}
@@ -164,9 +160,7 @@ proc test_watchpoint_all {type} {
     #test_rwatch_creation_and_listing $type
     #test_awatch_creation_and_listing $type
     test_watchpoint_triggering $type
-
-    set pf_prefix $old_prefix
-}
+}}

 # Run the tests twice, once using software watchpoints...
 mi_gdb_test "567-gdb-set can-use-hw-watchpoints 0" \
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
index 8a14129..c6ced8e 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-1.exp
@@ -30,17 +30,12 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
     return -1
 }

-proc do_test { lock_sched } {
-    global pf_prefix
+proc do_test { lock_sched } { with_test_prefix " lock-sched$lock_sched:" {
     global executable

-    set save_pf_prefix $pf_prefix
-    lappend pf_prefix "lock-sched$lock_sched:"
-
     clean_restart ${executable}

     if ![runto_main] {
-	set pf_prefix $save_pf_prefix
 	return -1
     }

@@ -57,9 +52,7 @@ proc do_test { lock_sched } {
     gdb_test "continue" \
 	".*is executing new program.*Breakpoint 1, main.* at .*" \
 	"continue over exec"
-
-    set pf_prefix $save_pf_prefix
-}
+}}

 do_test 0
 do_test 1
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
index 5404ef4..66f090a 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-2.exp
@@ -31,17 +31,12 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
     return -1
 }

-proc do_test { lock_sched } {
-    global pf_prefix
+proc do_test { lock_sched } { with_test_prefix " lock-sched$lock_sched:" {
     global executable

-    set save_pf_prefix $pf_prefix
-    lappend pf_prefix "lock-sched$lock_sched:"
-
     clean_restart ${executable}

     if ![runto_main] {
-	set pf_prefix $save_pf_prefix
 	return -1
     }

@@ -62,9 +57,7 @@ proc do_test { lock_sched } {
     gdb_test "continue" \
 	".*is executing new program.*Breakpoint 1, main.* at .*" \
 	"continue over exec"
-
-    set pf_prefix $save_pf_prefix
-}
+}}

 do_test 0
 do_test 1
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
index 9c82c2a..83d243f 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-3.exp
@@ -33,17 +33,12 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
     return -1
 }

-proc do_test { lock_sched } {
-    global pf_prefix
+proc do_test { lock_sched } { with_test_prefix " lock-sched$lock_sched:" {
     global executable

-    set save_pf_prefix $pf_prefix
-    lappend pf_prefix "lock-sched$lock_sched:"
-
     clean_restart ${executable}

     if ![runto_main] {
-	set pf_prefix $save_pf_prefix
 	return -1
     }

@@ -60,9 +55,7 @@ proc do_test { lock_sched } {
     gdb_test "continue" \
 	".*is executing new program.*Breakpoint 1, main.* at .*" \
 	"continue over exec"
-
-    set pf_prefix $save_pf_prefix
-}
+}}

 do_test 0
 do_test 1
diff --git a/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp b/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
index 943b077..7fce0ef 100644
--- a/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
+++ b/gdb/testsuite/gdb.threads/non-ldr-exc-4.exp
@@ -32,17 +32,12 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executab
     return -1
 }

-proc do_test { lock_sched } {
-    global pf_prefix
+proc do_test { lock_sched } { with_test_prefix " lock-sched$lock_sched:" {
     global executable

-    set save_pf_prefix $pf_prefix
-    lappend pf_prefix "lock-sched$lock_sched:"
-
     clean_restart ${executable}

     if ![runto_main] {
-	set pf_prefix $save_pf_prefix
 	return -1
     }

@@ -59,9 +54,7 @@ proc do_test { lock_sched } {
     gdb_test "continue" \
 	".*is executing new program.*Breakpoint 1, main.* at .*" \
 	"continue over exec"
-
-    set pf_prefix $save_pf_prefix
-}
+}}

 do_test 0
 do_test 1
diff --git a/gdb/testsuite/gdb.threads/watchpoint-fork.exp b/gdb/testsuite/gdb.threads/watchpoint-fork.exp
index 814fb02..db05e1f 100644
--- a/gdb/testsuite/gdb.threads/watchpoint-fork.exp
+++ b/gdb/testsuite/gdb.threads/watchpoint-fork.exp
@@ -22,21 +22,15 @@ if [is_remote target] {
     return
 }

-proc test {type symbol} {
-    global testfile objdir subdir srcdir gdb_prompt
-
-    global pf_prefix
-    set prefix_test $pf_prefix
-    lappend pf_prefix "$type:"
-    set prefix_mt $pf_prefix
+proc test {type symbol} { with_test_prefix " $type:" {
+    global testfile objdir subdir srcdir gdb_prompt pf_prefix

     set srcfile_type ${srcdir}/${subdir}/${testfile}-${type}.c

-
     # no threads

-    set pf_prefix $prefix_mt
-    lappend pf_prefix "singlethreaded:"
+    set prefix_test $pf_prefix
+    append pf_prefix " singlethreaded:"

     set executable ${testfile}-${type}-st
     set srcfile_main ${srcdir}/${subdir}/${testfile}-st.c
@@ -98,8 +92,8 @@ proc test {type symbol} {
 	return
     }

-    set pf_prefix $prefix_mt
-    lappend pf_prefix "multithreaded:"
+    set pf_prefix $prefix_test
+    append pf_prefix " multithreaded:"

     set executable ${testfile}-${type}-mt
     set srcfile_main ${srcdir}/${subdir}/${testfile}-mt.c
@@ -151,7 +145,7 @@ proc test {type symbol} {

     # cleanup
     set pf_prefix $prefix_test
-}
+}}

 test parent FOLLOW_PARENT

diff --git a/gdb/testsuite/gdb.threads/watchthreads-reorder.exp b/gdb/testsuite/gdb.threads/watchthreads-reorder.exp
index f620c07..ab4cd5f 100644
--- a/gdb/testsuite/gdb.threads/watchthreads-reorder.exp
+++ b/gdb/testsuite/gdb.threads/watchthreads-reorder.exp
@@ -38,11 +38,7 @@ if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" ${binfile} executable
     return -1
 }

-foreach reorder {0 1} {
-
-    global pf_prefix
-    set prefix_test $pf_prefix
-    lappend pf_prefix "reorder$reorder:"
+foreach reorder {0 1} { with_test_prefix " reorder$reorder:" {

     clean_restart $testfile

@@ -97,6 +93,4 @@ foreach reorder {0 1} {
     gdb_test "set debug infrun 1"

     gdb_continue_to_breakpoint "break-at-exit" ".*break-at-exit.*"
-
-    set pf_prefix $prefix_test
-}
+}}
diff --git a/gdb/testsuite/gdb.trace/change-loc.exp b/gdb/testsuite/gdb.trace/change-loc.exp
index 451a0e1..91cdb11 100644
--- a/gdb/testsuite/gdb.trace/change-loc.exp
+++ b/gdb/testsuite/gdb.trace/change-loc.exp
@@ -71,20 +71,15 @@ if [is_amd64_regs_target] {

 # Set tracepoint during tracing experiment.

-proc tracepoint_change_loc_1 { trace_type } {
+proc tracepoint_change_loc_1 { trace_type } { with_test_prefix " 1 $trace_type:" {
     global testfile
     global srcfile
     global pcreg
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 1 $trace_type:"

     clean_restart ${testfile}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }
     gdb_test_no_output "delete break 1"
@@ -120,7 +115,6 @@ proc tracepoint_change_loc_1 { trace_type } {
 	}
 	-re ".*$gdb_prompt $" {
 	    kfail "gdb/13392" "continue to marker 2"
-	    set pf_prefix $old_pf_prefix
 	    return
 	}
     }
@@ -143,23 +137,17 @@ proc tracepoint_change_loc_1 { trace_type } {

     gdb_test "tfind" "Found trace frame 0, tracepoint 4.*" "tfind frame 0"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Set pending tracepoint.

-proc tracepoint_change_loc_2 { trace_type } {
+proc tracepoint_change_loc_2 { trace_type } { with_test_prefix " 2 $trace_type:" {
     global srcdir
     global srcfile
     global subdir
     global pcreg
     global binfile
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 2 $trace_type:"

     gdb_exit
     gdb_start
@@ -218,7 +206,6 @@ proc tracepoint_change_loc_2 { trace_type } {
 	}
 	-re ".*$gdb_prompt $" {
 	    kfail "gdb/13392" "continue to marker 1"
-	    set pf_prefix $old_pf_prefix
 	    return
 	}
     }
@@ -247,9 +234,7 @@ proc tracepoint_change_loc_2 { trace_type } {
     gdb_test "tfind" "Found trace frame 1, tracepoint 1.*" "tfind frame 1"
     gdb_test "tfind" "Found trace frame 2, tracepoint 1.*" "tfind frame 2"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 tracepoint_change_loc_1 "trace"
 tracepoint_change_loc_2 "trace"
diff --git a/gdb/testsuite/gdb.trace/pending.exp b/gdb/testsuite/gdb.trace/pending.exp
index 9dc8706..7a9d01d 100644
--- a/gdb/testsuite/gdb.trace/pending.exp
+++ b/gdb/testsuite/gdb.trace/pending.exp
@@ -60,16 +60,12 @@ if ![gdb_target_supports_trace] {

 # Verify pending tracepoint is resolved to running to main.

-proc pending_tracepoint_resolved { trace_type } {
+proc pending_tracepoint_resolved { trace_type } { with_test_prefix " $trace_type resolved:" {
     global srcdir
     global subdir
     global binfile
     global srcfile
     global lib_sl1
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "resolved:"

     # Start with a fresh gdb.
     gdb_exit
@@ -101,22 +97,16 @@ proc pending_tracepoint_resolved { trace_type } {
 	"Num     Type\[ \]+Disp Enb Address\[ \]+What.*
 \[0-9\]+\[\t \]+\(fast |\)tracepoint\[ \]+keep y.*pendfunc.*" \
 	"single tracepoint info"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Verify pending tracepoint is resolved and works as expected.

-proc pending_tracepoint_works { trace_type } {
+proc pending_tracepoint_works { trace_type } { with_test_prefix " $trace_type works:" {
     global executable
     global srcfile
     global lib_sl1
-    global pf_prefix
     global gdb_prompt

-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "works:"
-
     # Restart with a fresh gdb.
     clean_restart $executable

@@ -150,7 +140,6 @@ proc pending_tracepoint_works { trace_type } {
 	}
 	-re ".*$gdb_prompt $" {
 	    kfail "gdb/13392" "continue to marker"
-	    set pf_prefix $old_pf_prefix
 	    return
 	}
     }
@@ -161,27 +150,22 @@ proc pending_tracepoint_works { trace_type } {
     gdb_test "tfind" "Found trace frame 1, tracepoint 1.*" "tfind test frame 1"
     gdb_test "tfind" "Found trace frame 2, tracepoint 1.*" "tfind test frame 2"
     gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Verify pending tracepoint is resolved during trace.

-proc pending_tracepoint_resolved_during_trace { trace_type } {
+proc pending_tracepoint_resolved_during_trace { trace_type } \
+{ with_test_prefix " $trace_type resolved_in_trace:" \
+{
     global executable
     global srcfile
     global gdb_prompt
     global lib_sl1
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "resolved_in_trace:"

     # Start with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -211,7 +195,6 @@ proc pending_tracepoint_resolved_during_trace { trace_type } {
 	}
 	-re ".*$gdb_prompt $" {
 	    kfail "gdb/13392" "continue to marker 2"
-	    set pf_prefix $old_pf_prefix
 	    return
 	}
     }
@@ -226,28 +209,23 @@ proc pending_tracepoint_resolved_during_trace { trace_type } {

     gdb_test "tfind start" "#0 .*" "tfind test frame 0"
     gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Verify pending tracepoint is resolved and installed during trace.

-proc pending_tracepoint_installed_during_trace { trace_type } {
+proc pending_tracepoint_installed_during_trace { trace_type } \
+{ with_test_prefix " $trace_type installed_in_trace:" \
+{
     global executable
     global srcfile
     global lib_sl1
     global gdb_prompt
-    global pf_prefix
     global hex

-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "installed_in_trace:"
-
     # Start with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -281,7 +259,6 @@ proc pending_tracepoint_installed_during_trace { trace_type } {
 	}
 	-re ".*$gdb_prompt $" {
 	    kfail "gdb/13392" "continue to marker 2"
-	    set pf_prefix $old_pf_prefix
 	    return
 	}
     }
@@ -296,28 +273,23 @@ proc pending_tracepoint_installed_during_trace { trace_type } {

     gdb_test "tfind start" "#0  $hex in pendfunc2 .*" "tfind test frame 0"
     gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
-
-    set pf_prefix $old_pf_prefix
-}
+}}


 # Verify pending tracepoint will no longer work if we disconnect during tracing.

-proc pending_tracepoint_disconnect_during_trace { trace_type } {
+proc pending_tracepoint_disconnect_during_trace { trace_type } \
+{ with_test_prefix " $trace_type disconn:" \
+{
     global executable
     global srcfile
     global lib_sl1
-    global pf_prefix
     global gdb_prompt

-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "disconn:"
-
     # Start with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -349,28 +321,23 @@ proc pending_tracepoint_disconnect_during_trace { trace_type } {
 	   }
        }
     }
-
-    set pf_prefix $old_pf_prefix
-}
+}}


 # Verify disconnect after pending tracepoint has been resolved.

-proc pending_tracepoint_disconnect_after_resolved { trace_type } {
+proc pending_tracepoint_disconnect_after_resolved { trace_type } \
+{ with_test_prefix " $trace_type disconn_resolved:" \
+{
     global executable
     global srcfile
     global lib_sl1
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "disconn_resolved:"

     # Start with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -407,27 +374,22 @@ proc pending_tracepoint_disconnect_after_resolved { trace_type } {
 	    pass "$test"
 	}
     }
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Verify action works properly in resolved tracepoint.

-proc pending_tracepoint_with_action_resolved { trace_type } {
+proc pending_tracepoint_with_action_resolved { trace_type } \
+{ with_test_prefix " $trace_type action_resolved:" \
+{
     global executable
     global srcfile
     global lib_sl1
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "$trace_type" "action_resolved:"

     # Start with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -467,7 +429,6 @@ proc pending_tracepoint_with_action_resolved { trace_type } {
 	}
 	-re ".*$gdb_prompt $" {
 	    kfail "gdb/13392" "continue to marker 2"
-	    set pf_prefix $old_pf_prefix
 	    return
 	}
     }
@@ -483,9 +444,7 @@ proc pending_tracepoint_with_action_resolved { trace_type } {
     gdb_test "tfind start" "#0 .*" "tfind test frame 0"
     gdb_test "tdump" "Data collected at tracepoint .*, trace frame \[0-9\]:.*\\$${pcreg} = .*"
     gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 pending_tracepoint_resolved "trace"

diff --git a/gdb/testsuite/gdb.trace/status-stop.exp b/gdb/testsuite/gdb.trace/status-stop.exp
index 9c7e915..859e9cc 100644
--- a/gdb/testsuite/gdb.trace/status-stop.exp
+++ b/gdb/testsuite/gdb.trace/status-stop.exp
@@ -39,19 +39,14 @@ if ![gdb_target_supports_trace] {

 # Verify that the sequence of commands "tstart tstop tstart" works well.

-proc test_tstart_tstop_tstart { } {
+proc test_tstart_tstop_tstart { } { with_test_prefix " tstart_tstop_tstart:" {
     global executable
-    global pf_prefix
     global hex

-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix tstart_tstop_tstart:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
         fail "Can't run to main"
-        set pf_prefix $old_pf_prefix
         return -1
     }

@@ -64,25 +59,18 @@ proc test_tstart_tstop_tstart { } {
     gdb_test_no_output "tstop"

     gdb_test_no_output "tstart"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Verify the sequence of commands "tstart tstart" works well.

-proc test_tstart_tstart { } {
+proc test_tstart_tstart { } { with_test_prefix " tstart_tstart:" {
     global executable
-    global pf_prefix
     global hex

-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix tstart_tstart:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
         fail "Can't run to main"
-        set pf_prefix $old_pf_prefix
         return -1
     }

@@ -90,25 +78,18 @@ proc test_tstart_tstart { } {
     gdb_test_no_output "tstart"

     gdb_test "tstart" "" "tstart again" "A trace is running already.  Start a new run\\? \\(y or n\\) " "y"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Verify that trace stops clearly when trace buffer is full.

-proc test_buffer_full_tstart { } {
+proc test_buffer_full_tstart { } { with_test_prefix " buffer_full_tstart:" {
     global executable
-    global pf_prefix
     global hex

-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix buffer_full_tstart:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
         fail "Can't run to main"
-        set pf_prefix $old_pf_prefix
         return -1
     }

@@ -123,12 +104,10 @@ proc test_buffer_full_tstart { } {

     gdb_test "tstatus" ".*buffer was full.*"
     gdb_test_no_output "tstart"
-
-    set old_pf_prefix $pf_prefix
-}
+}}

 test_tstart_tstop_tstart

 test_tstart_tstart

-test_buffer_full_tstart
\ No newline at end of file
+test_buffer_full_tstart
diff --git a/gdb/testsuite/gdb.trace/strace.exp b/gdb/testsuite/gdb.trace/strace.exp
index 4d6ea10..1d955b9 100644
--- a/gdb/testsuite/gdb.trace/strace.exp
+++ b/gdb/testsuite/gdb.trace/strace.exp
@@ -52,43 +52,31 @@ if { ![gdb_target_supports_trace] } then {

 gdb_load_shlibs $libipa

-proc strace_info_marker { } {
+proc strace_info_marker { } { with_test_prefix " info_marker" {
     global executable
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "info_marker"

     # Restart with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

     # List the markers in program.  They should be disabled.
     gdb_test "info static-tracepoint-markers" \
 	".*ust/bar\[\t \]+n\[\t \]+.*ust/bar2\[\t \]+n\[\t \]+.*"
+}}

-    set pf_prefix $old_pf_prefix
-}
-
-proc strace_probe_marker { } {
+proc strace_probe_marker { } { with_test_prefix " probe_marker" {
     global executable
-    global pf_prefix
     global expect_out
     global gdb_prompt
     global hex

-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "probe_marker"
-
     # Restart with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -106,25 +94,18 @@ proc strace_probe_marker { } {
     gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
     gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
+}}

-    set pf_prefix $old_pf_prefix
-}
-
-proc strace_trace_on_same_addr { type } {
+proc strace_trace_on_same_addr { type } { with_test_prefix " trace_same_addr $type" {
     global executable
-    global pf_prefix
     global expect_out
     global gdb_prompt
     global hex

-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "trace_same_addr" "$type"
-
     # Restart with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -203,24 +184,19 @@ proc strace_trace_on_same_addr { type } {
 	gdb_test "tfind" "Found trace frame 3, tracepoint .*" "tfind frame 3"
 	gdb_test "tfind" "Target failed to find requested trace frame\\..*"
     }
-    set pf_prefix $old_pf_prefix
-}
+}}
+
+proc strace_trace_on_diff_addr { } { with_test_prefix " trace_diff_addr" {

-proc strace_trace_on_diff_addr { } {
     global executable
-    global pf_prefix
     global expect_out
     global gdb_prompt
     global hex

-    set old_pf_prefix $pf_prefix
-    lappend pf_prefix "trace_diff_addr"
-
     # Restart with a fresh gdb.
     clean_restart $executable
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -261,9 +237,7 @@ proc strace_trace_on_diff_addr { } {
     gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
     gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 strace_info_marker
 strace_probe_marker
diff --git a/gdb/testsuite/gdb.trace/trace-break.exp b/gdb/testsuite/gdb.trace/trace-break.exp
index 1c372d4..5fcc1ac 100644
--- a/gdb/testsuite/gdb.trace/trace-break.exp
+++ b/gdb/testsuite/gdb.trace/trace-break.exp
@@ -55,19 +55,16 @@ if [is_amd64_regs_target] {

 # Set breakpoint and tracepoint at the same address.

-proc break_trace_same_addr_1 { trace_type option } {
+proc break_trace_same_addr_1 { trace_type option } \
+{ with_test_prefix " 1 $trace_type $option:" \
+{
     global executable
-    global pf_prefix
     global hex

-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 1 $trace_type $option:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -87,25 +84,20 @@ proc break_trace_same_addr_1 { trace_type option } {

     gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Set multiple tracepoints at the same address.

-proc break_trace_same_addr_2 { trace_type1 trace_type2 option } {
+proc break_trace_same_addr_2 { trace_type1 trace_type2 option } \
+{ with_test_prefix " 2 $trace_type1 $trace_type2 $option:" \
+{
     global executable
-    global pf_prefix
     global hex

-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 2 $trace_type1 $trace_type2 $option:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -129,26 +121,21 @@ proc break_trace_same_addr_2 { trace_type1 trace_type2 option } {
     gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
     gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Set breakpoint and tracepoint at the same address.  Delete breakpoint, and verify
 # that tracepoint still works.

-proc break_trace_same_addr_3 { trace_type option } {
+proc break_trace_same_addr_3 { trace_type option } \
+{ with_test_prefix " 3 $trace_type $option:" \
+{
     global executable
-    global pf_prefix
     global hex

-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 3 $trace_type $option:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -169,26 +156,22 @@ proc break_trace_same_addr_3 { trace_type option } {

     gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Set breakpoint and tracepoint at the same address.  Delete tracepoint, and verify
 # that breakpoint still works.

-proc break_trace_same_addr_4 { trace_type option } {
+proc break_trace_same_addr_4 { trace_type option } \
+{ with_test_prefix " 4 $trace_type $option:" \
+{
     global executable
-    global pf_prefix
     global hex

-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 4 $trace_type $option:"

     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -210,31 +193,26 @@ proc break_trace_same_addr_4 { trace_type option } {
     gdb_test "tstop" "Trace is not running.*"

     gdb_test "tfind" "Target failed to find requested trace frame\\..*"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Set two tracepoints TRACE1 and TRACE2 at two locations, and start tracing.
 # Then, set tracepoint TRACE3 at either of these two locations.
 # TRACE3_AT_FIRST_LOC is a boolean variable to decide insert TRACE3 at which
 # of two locations.  Verify  these tracepoints work as expected.

-proc break_trace_same_addr_5 { trace1 trace2 trace3 trace3_at_first_loc } {
+proc break_trace_same_addr_5 { trace1 trace2 trace3 trace3_at_first_loc } \
+{ with_test_prefix " 5 $trace1 $trace2 ${trace3}@${trace3_at_first_loc}:" \
+{
     global executable
-    global pf_prefix
     global hex
     global fpreg
     global spreg
     global pcreg

-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 5 $trace1 $trace2 ${trace3}@${trace3_at_first_loc}:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -289,29 +267,24 @@ proc break_trace_same_addr_5 { trace1 trace2 trace3 trace3_at_first_loc } {
     gdb_test "tdump" \
 	"Data collected at tracepoint .*, trace frame \[0-9\]:.*\\$${fpreg} = .*" \
 	"tdump 3"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 # Set two tracepoints at the same address, and enable/disable them.  Verify
 # tracepoints work as expect.

-proc break_trace_same_addr_6 { trace1 enable1 trace2 enable2 } {
+proc break_trace_same_addr_6 { trace1 enable1 trace2 enable2 } \
+{ with_test_prefix " 6 $trace1 $enable1 $trace2 $enable2:" \
+{
     global executable
-    global pf_prefix
     global hex
     global gdb_prompt
     global spreg
     global pcreg

-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix 6 $trace1 $enable1 $trace2 $enable2:"
-
     # Start with a fresh gdb.
     clean_restart ${executable}
     if ![runto_main] {
 	fail "Can't run to main"
-	set pf_prefix $old_pf_prefix
 	return -1
     }

@@ -362,9 +335,7 @@ proc break_trace_same_addr_6 { trace1 enable1 trace2 enable2 } {
 	gdb_test "tfind tracepoint 5" "Target failed to find requested trace frame.*" \
 	    "tfind test frame of tracepoint 5"
     }
-
-    set pf_prefix $old_pf_prefix
-}
+}}


 foreach break_always_inserted { "on" "off" } {
diff --git a/gdb/testsuite/gdb.trace/unavailable.exp b/gdb/testsuite/gdb.trace/unavailable.exp
index 87af860..199e219 100644
--- a/gdb/testsuite/gdb.trace/unavailable.exp
+++ b/gdb/testsuite/gdb.trace/unavailable.exp
@@ -136,13 +136,9 @@ proc test_maybe_regvar_display { var } {
 # Test procs
 #

-proc gdb_collect_args_test {} {
+proc gdb_collect_args_test {} { with_test_prefix " unavailable arguments:" {
     global cr
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix unavailable arguments:"

     prepare_for_trace_test

@@ -205,17 +201,11 @@ proc gdb_collect_args_test {} {
     gdb_test "tfind none" \
 	"#0  end .*" \
 	"cease trace debugging"
+}}

-    set pf_prefix $old_pf_prefix
-}
-
-proc gdb_collect_locals_test { func msg } {
+proc gdb_collect_locals_test { func msg } { with_test_prefix " unavailable locals: $msg:" {
     global cr
     global gdb_prompt
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix unavailable locals: $msg:"

     prepare_for_trace_test

@@ -262,18 +252,12 @@ proc gdb_collect_locals_test { func msg } {
     gdb_test "tfind none" \
 	"#0  end .*" \
 	"cease trace debugging"
+}}

-    set pf_prefix $old_pf_prefix
-}
-
-proc gdb_unavailable_registers_test { } {
+proc gdb_unavailable_registers_test { } { with_test_prefix " unavailable registers:" {
     global gdb_prompt
     global spreg
     global pcreg
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix unavailable registers:"

     prepare_for_trace_test

@@ -319,19 +303,13 @@ proc gdb_unavailable_registers_test { } {
 	"info registers \$$spreg reports not available"

     gdb_test "tfind none" "#0  end .*" "cease trace debugging"
+}}

-    set pf_prefix $old_pf_prefix
-}
-
-proc gdb_collect_globals_test { } {
+proc gdb_collect_globals_test { } { with_test_prefix " collect globals:" {
     global ws
     global cr
     global gdb_prompt
     global hex
-    global pf_prefix
-
-    set old_pf_prefix $pf_prefix
-    set pf_prefix "$pf_prefix collect globals:"

     prepare_for_trace_test

@@ -518,8 +496,9 @@ proc gdb_collect_globals_test { } {

     gdb_test_no_output "set print object on"

-    set old_pf_prefix_2 $pf_prefix
-    set pf_prefix "$pf_prefix print object on:"
+    global pf_prefix
+    set old_pf_prefix $pf_prefix
+    append pf_prefix " print object on:"

     # With print object on, printing a pointer may need to fetch the
     # pointed-to object, to check its run-time type.  Make sure that
@@ -539,11 +518,11 @@ proc gdb_collect_globals_test { } {
     gdb_test "print derived_whole" \
 	" = \\(Derived\\) {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex, z = 4}"

-    set pf_prefix $old_pf_prefix_2
+    set pf_prefix $old_pf_prefix

     gdb_test_no_output "set print object off"

-    set pf_prefix "$pf_prefix print object off:"
+    append pf_prefix " print object off:"

     gdb_test "print virtualp" " = \\(Virtual \\*\\) <unavailable>"

@@ -559,7 +538,7 @@ proc gdb_collect_globals_test { } {
     gdb_test "print derived_whole" \
 	" = {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex, z = 4}"

-    set pf_prefix $old_pf_prefix_2
+    set pf_prefix $old_pf_prefix

     # An instance of a virtual class where we collected everything but
     # the vptr.
@@ -569,9 +548,7 @@ proc gdb_collect_globals_test { } {
     gdb_test "tfind none" \
 	"#0  end .*" \
 	"cease trace debugging"
-
-    set pf_prefix $old_pf_prefix
-}
+}}

 proc gdb_trace_collection_test {} {
     gdb_collect_globals_test
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 00fe71c..59497dc 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -1481,6 +1481,93 @@ proc skip_shlib_tests {} {
     return 1
 }

+# Test files shall make sure all the test result lines in gdb.sum are
+# unique in a test run, so that comparing the gdb.sum files of two
+# test runs gives correct results.  Test files that exercise
+# variations of the same tests more than once, shall prefix the
+# different test invocations with different identifying strings in
+# order to make them unique.
+#
+# About test prefixes:
+#
+# $pf_prefix is the string that dejagnu prints after the result (FAIL,
+# PASS, etc.), and before the test message/name in gdb.sum.  E.g., the
+# underlined substring in
+#
+#  PASS: gdb.base/mytest.exp: some test
+#        ^^^^^^^^^^^^^^^^^^^^
+#
+# is $pf_prefix.
+#
+# The easiest way to adjust the test prefix is to append a test
+# variation prefix to the $pf_prefix, using the with_test_prefix
+# procedure.  E.g.,
+#
+# proc do_tests {} {
+#   gdb_test ... ... "test foo"
+#   gdb_test ... ... "test bar"
+#
+#   with_test_prefix " subvariation a:" {
+#     gdb_test ... ... "test x"
+#   }
+#
+#   with_test_prefix " subvariation b:" {
+#     gdb_test ... ... "test x"
+#   }
+# }
+#
+# with_test_prefix " variation1:" {
+#   ...do setup for variation 1...
+#   do_tests
+# }
+#
+# ...do setup for variation 2...
+# with_test_prefix " variation2:" {
+#   ...do setup for variation 2...
+#   do_tests
+# }
+#
+# Results in:
+#
+#  PASS: gdb.base/mytest.exp: variation1: test foo
+#  PASS: gdb.base/mytest.exp: variation1: test bar
+#  PASS: gdb.base/mytest.exp: variation1: subvariation a: test x
+#  PASS: gdb.base/mytest.exp: variation1: subvariation b: test x
+#  PASS: gdb.base/mytest.exp: variation2: test foo
+#  PASS: gdb.base/mytest.exp: variation2: test bar
+#  PASS: gdb.base/mytest.exp: variation2: subvariation a: test x
+#  PASS: gdb.base/mytest.exp: variation2: subvariation b: test x
+#
+# If for some reason more flexibility is necessary, one can also
+# manipulate the pf_prefix global directly, treating it as a string.
+# E.g,
+#
+#   global pf_prefix
+#   set saved_pf_prefix
+#   append pf_prefix "${foo} bar"
+#   ... actual tests ...
+#   set pf_prefix $saved_pf_prefix
+#
+
+# Run BODY in the context of the caller, with the current test prefix
+# (pf_prefix) appended with PREFIX.  Returns the result of BODY.
+#
+proc with_test_prefix { prefix body } {
+  global pf_prefix
+
+  set saved $pf_prefix
+  append pf_prefix $prefix
+  set code [catch {uplevel 1 $body} result]
+  set pf_prefix $saved
+
+  if {$code == 1} {
+      global errorInfo errorCode
+      return -code $code -errorinfo $errorInfo -errorcode $errorCode $message
+  } else {
+      return -code $code $result
+  }
+}
+
 # Return 1 if _Complex types are supported, otherwise, return 0.

 proc support_complex_tests {} {


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