public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom de Vries <tdevries@suse.de>
To: Luis Machado <luis.machado@arm.com>, Tom Tromey <tom@tromey.com>,
	Tom de Vries via Gdb-patches <gdb-patches@sourceware.org>
Subject: Re: [pushed] [gdb/testsuite] Clean up before compilation in gdb.ada/call-no-debug.exp
Date: Wed, 21 Jun 2023 07:31:18 +0200	[thread overview]
Message-ID: <4c9724bf-a94e-71b1-b4e2-1097e4f4e0ad@suse.de> (raw)
In-Reply-To: <2e7603da-d890-c37c-1497-3342600370ef@suse.de>

[-- Attachment #1: Type: text/plain, Size: 426 bytes --]

On 6/19/23 19:12, Tom de Vries wrote:
> I can reproduce this, thanks for reporting this.
> 
> It seems that gdb.log and gdb.sum are already there in the standard 
> output file dir when the cleanup happens.
> 
> I'm thinking about ways to work around this, but haven't come up with 
> anything yet, so for now I've reverted this patch.
> 

OK, another try.  This version handles the make -j 2 without problems.

Thanks,
- Tom

[-- Attachment #2: 0001-gdb-testsuite-Clean-or-check-standard_output_file-di.patch --]
[-- Type: text/x-patch, Size: 4483 bytes --]

From ceadb531294172a7385c16320191853cefb946b9 Mon Sep 17 00:00:00 2001
From: Tom de Vries <tdevries@suse.de>
Date: Sun, 18 Jun 2023 11:05:31 +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 <tom@tromey.com>
---
 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 f214a6bb54d..8a080636e7f 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] } {

base-commit: 69141f080c01cca223ab061b85feacf17eeaf965
-- 
2.35.3


  parent reply	other threads:[~2023-06-21  5:31 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-16 11:33 Tom de Vries
2023-06-16 18:38 ` Tom Tromey
2023-06-17 10:50   ` Tom de Vries
2023-06-17 20:14     ` Tom Tromey
2023-06-19 14:25     ` Luis Machado
2023-06-19 14:26       ` Luis Machado
2023-06-19 17:12         ` Tom de Vries
2023-06-19 17:22           ` Tom Tromey
2023-06-21  5:31           ` Tom de Vries [this message]
2023-06-21  7:40             ` Luis Machado
2023-06-22 16:01             ` Tom Tromey
2023-06-19 17:19         ` Tom Tromey

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=4c9724bf-a94e-71b1-b4e2-1097e4f4e0ad@suse.de \
    --to=tdevries@suse.de \
    --cc=gdb-patches@sourceware.org \
    --cc=luis.machado@arm.com \
    --cc=tom@tromey.com \
    /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).