aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/lib/gdb.exp
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2023-06-22 19:15:23 +0200
committerTom de Vries <tdevries@suse.de>2023-06-22 19:15:23 +0200
commitd4d5b571954a2bde2a14772d9b18027a9048eb2d (patch)
tree8779d22aa7ca4bf0a0fdb29f821b6f3edf53574e /gdb/testsuite/lib/gdb.exp
parentd8a001f57016eff05977e9699c7aabdf4302c71b (diff)
downloadgdb-d4d5b571954a2bde2a14772d9b18027a9048eb2d.zip
gdb-d4d5b571954a2bde2a14772d9b18027a9048eb2d.tar.gz
gdb-d4d5b571954a2bde2a14772d9b18027a9048eb2d.tar.bz2
[gdb/testsuite] Clean or check standard_output_file dir in gdb_init
In commit e2adba909e7 ("[gdb/testsuite] Clean up before compilation in gdb.ada/call-no-debug.exp") I added some code in the test-case to remove some files at the start of the test-case: ... remote_file host delete [standard_output_file prog.o] remote_file host delete [standard_output_file prog.ali] ... Then in commit b7b77500dc5 ("[gdb/testsuite] Clean standard_output_file dir in gdb_init") I tried to do this more structurally, by cleaning up the entire standard_output_file directory, for all test-cases. This caused a regression when using "make check -j 2", due to the cleanup removing the active gdb.log, so I reverted the commit. Try again, this time handling the two cases separately. If the standard_output_file directory contains an active gdb.log, check that the directory contains no files other than gdb.log and gdb.sum. This puts the reponsibility for the cleanup at the callers in gdb/testsuite/Makefile.in which use --outdir. If the standard_output_file directory doesn't contain an active gdb.log, clean it by removing the entire directory. An exception is made for performance tests, where cleaning up the standard_output_file dir is the wrong thing to do, because an invocation with GDB_PERFTEST_MODE == run is intended to reuse binaries left there by an earlier invocation with GDB_PERFTEST_MODE == compile. Tested on x86_64-linux. Suggested-By: Tom Tromey <tom@tromey.com> Reviewed-By: Tom Tromey <tom@tromey.com> Tested-By: Luis Machado <luis.machado@arm.com>
Diffstat (limited to 'gdb/testsuite/lib/gdb.exp')
-rw-r--r--gdb/testsuite/lib/gdb.exp41
1 files changed, 41 insertions, 0 deletions
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 50fcb84..b4900ae 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -6286,6 +6286,45 @@ proc gdb_continue { function } {
return [gdb_test "continue" ".*Breakpoint $decimal, $function .*" "continue to $function"]
}
+# Clean the directory containing the standard output files.
+
+proc clean_standard_output_dir {} {
+ if { [info exists ::GDB_PERFTEST_MODE] && $::GDB_PERFTEST_MODE == "run" } {
+ # Don't clean, use $GDB_PERFTEST_MODE == compile results.
+ return
+ }
+
+ # Directory containing the standard output files.
+ set standard_output_dir [file normalize [standard_output_file ""]]
+
+ # Ensure that standard_output_dir is clean, or only contains
+ # gdb.log / gdb.sum.
+ set log_file_info [split [log_file -info]]
+ set log_file [file normalize [lindex $log_file_info end]]
+ if { $log_file == [file normalize [standard_output_file gdb.log]] } {
+ # Dir already contains active gdb.log. Don't remove the dir, but
+ # check that it's clean otherwise.
+ set res [glob -directory $standard_output_dir -tails *]
+ set ok 1
+ foreach f $res {
+ if { $f == "gdb.log" } {
+ continue
+ }
+ if { $f == "gdb.sum" } {
+ continue
+ }
+ set ok 0
+ }
+ if { !$ok } {
+ error "standard output dir not clean"
+ }
+ } else {
+ # Start with a clean dir.
+ remote_exec build "rm -rf $standard_output_dir"
+ }
+
+}
+
# Default implementation of gdb_init.
proc default_gdb_init { test_file_name } {
global gdb_wrapper_initialized
@@ -6420,6 +6459,8 @@ proc default_gdb_init { test_file_name } {
set gdb_test_file_name [file rootname [file tail $test_file_name]]
+ clean_standard_output_dir
+
# Make sure that the wrapper is rebuilt
# with the appropriate multilib option.
if { $gdb_wrapper_target != [current_target_name] } {