From d4d5b571954a2bde2a14772d9b18027a9048eb2d Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Thu, 22 Jun 2023 19:15:23 +0200 Subject: [PATCH] [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 Reviewed-By: Tom Tromey Tested-By: Luis Machado --- gdb/testsuite/gdb.ada/call-no-debug.exp | 5 --- gdb/testsuite/lib/gdb.exp | 41 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/gdb/testsuite/gdb.ada/call-no-debug.exp b/gdb/testsuite/gdb.ada/call-no-debug.exp index df81c87ade2..422b83761d9 100644 --- a/gdb/testsuite/gdb.ada/call-no-debug.exp +++ b/gdb/testsuite/gdb.ada/call-no-debug.exp @@ -21,11 +21,6 @@ require allow_ada_tests standard_ada_testfile prog -# Since we use no-force to compile prog, make sure we don't pick up files -# from a previous compilation. -remote_file host delete [standard_output_file prog.o] -remote_file host delete [standard_output_file prog.ali] - # Compile pck without debuginfo but prog with it. if {[gdb_compile_ada $srcdir/$subdir/$testdir/pck.adb \ [standard_output_file pck.o] object {}] != ""} { diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 50fcb844183..b4900ae25a6 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] } { -- 2.30.2