public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [patch] gdb/testsuite: Fix more bugs in gdb testglue wrapper handling
@ 2020-07-07  0:33 Sandra Loosemore
  2020-07-15 19:56 ` [ping] " Sandra Loosemore
  2020-07-21 18:13 ` Tom Tromey
  0 siblings, 2 replies; 5+ messages in thread
From: Sandra Loosemore @ 2020-07-07  0:33 UTC (permalink / raw)
  To: gdb-patches

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

This patch fixes another batch of testsuite bugs I found, this time 
related to handling of the gdb testglue wrapper that is needed on some 
targets where the simulator (or whatever) does not properly report 
program exit status to the test harness.  More details in the commit 
message.

I tested this on nios2-elf.  OK to commit?

-Sandra


[-- Attachment #2: gdb-wrapper.patch --]
[-- Type: text/x-patch, Size: 5059 bytes --]

commit 266cd05dfb396288fbde156e5ac4ccdc23bf3b62
Author: Sandra Loosemore <sandra@codesourcery.com>
Date:   Mon Jul 6 17:09:18 2020 -0700

    Fix more bugs in gdb testglue wrapper handling
    
    In commit 24ac169ac5a918cd82b7485935f0c40a094c625e, this patch:
    
    	2020-02-21  Shahab Vahedi  <shahab@synopsys.com>
    
    	* lib/gdb.exp (gdb_wrapper_init): Reset
    	"gdb_wrapper_initialized" to 0 if "wrapper_file" does
    	not exist.
    
    attempted to fix problems finding the gdb test wrapper gdb_tg.o in
    some tests that cd to some non-default directory by rebuilding also
    the test wrapper in that directory.  This had the side-effect of
    leaving these .o files in various places in the GDB source directory
    tree.
    
    Furthermore, while the tests that cd to some non-default directory
    cannot run on remote host, the code that was added to probe for the
    presence of the wrapper file was also specific to host == build.
    
    This patch reverts the problematic parts of that commit and replaces
    it with forcing use of an absolute (rather than relative) pathname to
    the .o file for linking when host == build.
    
    While debugging this patch, I also observed that use of the construct
    "[info exists gdb_wrapper_file]" was not reliable for detecting when
    that variable had been initialized by gdb_wrapper_init.  I rewrote
    that so that the variable is always initialized and has a value of an
    empty string when no wrapper file is needed.
    
    2020-07-06  Sandra Loosemore  <sandra@codesourcery.com>
    
    	gdb/testsuite/
    	* lib/gdb.exp (gdb_wrapper_file, gdb_wrapper_flags):
    	Initialize to empty string at top level.
    	(gdb_wrapper_init): Revert check for file existence on build.
    	Build the wrapper in its default place, not a build-specific
    	location.  When host == build, make the pathname absolute.
    	(gdb_compile): Delete leftover declaration of
    	gdb_wrapper_initialized.  Check gdb_wrapper_file being an empty
    	string instead of uninitialized.

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 8eae1ab..efab440 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,14 @@
+2020-07-06  Sandra Loosemore  <sandra@codesourcery.com>
+
+	* lib/gdb.exp (gdb_wrapper_file, gdb_wrapper_flags):
+	Initialize to empty string at top level.
+	(gdb_wrapper_init): Revert check for file existence on build.
+	Build the wrapper in its default place, not a build-specific
+	location.  When host == build, make the pathname absolute.
+	(gdb_compile): Delete leftover declaration of
+	gdb_wrapper_initialized.  Check gdb_wrapper_file being an empty
+	string instead of uninitialized.
+
 2020-07-06  Andrew Burgess  <andrew.burgess@embecosm.com>
 
 	PR python/22748
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index b0faf62..9f7881e 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -3694,6 +3694,8 @@ proc current_target_name { } {
 
 set gdb_wrapper_initialized 0
 set gdb_wrapper_target ""
+set gdb_wrapper_file ""
+set gdb_wrapper_flags ""
 
 proc gdb_wrapper_init { args } {
     global gdb_wrapper_initialized
@@ -3701,27 +3703,25 @@ proc gdb_wrapper_init { args } {
     global gdb_wrapper_flags
     global gdb_wrapper_target
 
-    # If the wrapper is initialized but the wrapper file cannot be
-    # found anymore, the wrapper file must be built again.
-    if { $gdb_wrapper_initialized == 1 && \
-	    [info exists gdb_wrapper_file] && \
-	    ![file exists $gdb_wrapper_file] } {
-	verbose "reinitializing the wrapper"
-	set gdb_wrapper_initialized 0
-    }
-
     if { $gdb_wrapper_initialized == 1 } { return; }
 
     if {[target_info exists needs_status_wrapper] && \
 	    [target_info needs_status_wrapper] != "0"} {
-	set result [build_wrapper [standard_output_file "testglue.o"]]
+	set result [build_wrapper "testglue.o"]
 	if { $result != "" } {
 	    set gdb_wrapper_file [lindex $result 0]
+	    if ![is_remote host] {
+		set gdb_wrapper_file [file join [pwd] $gdb_wrapper_file]
+	    }
 	    set gdb_wrapper_flags [lindex $result 1]
 	} else {
 	    warning "Status wrapper failed to build."
 	}
+    } else {
+	set gdb_wrapper_file ""
+	set gdb_wrapper_flags ""
     }
+    verbose "set gdb_wrapper_file = $gdb_wrapper_file"
     set gdb_wrapper_initialized 1
     set gdb_wrapper_target [current_target_name]
 }
@@ -3857,7 +3857,6 @@ proc gdb_compile {source dest type options} {
     global GDB_TESTCASE_OPTIONS
     global gdb_wrapper_file
     global gdb_wrapper_flags
-    global gdb_wrapper_initialized
     global srcdir
     global objdir
     global gdb_saved_set_unbuffered_mode_obj
@@ -3994,7 +3993,7 @@ proc gdb_compile {source dest type options} {
 
     if {[target_info exists needs_status_wrapper] && \
 	    [target_info needs_status_wrapper] != "0" && \
-	    [info exists gdb_wrapper_file]} {
+	    $gdb_wrapper_file != "" } {
 	lappend options "libs=${gdb_wrapper_file}"
 	lappend options "ldflags=${gdb_wrapper_flags}"
     }

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ping] Re: [patch] gdb/testsuite: Fix more bugs in gdb testglue wrapper handling
  2020-07-07  0:33 [patch] gdb/testsuite: Fix more bugs in gdb testglue wrapper handling Sandra Loosemore
@ 2020-07-15 19:56 ` Sandra Loosemore
  2020-07-21 18:13 ` Tom Tromey
  1 sibling, 0 replies; 5+ messages in thread
From: Sandra Loosemore @ 2020-07-15 19:56 UTC (permalink / raw)
  To: gdb-patches

Ping?

https://sourceware.org/pipermail/gdb-patches/2020-July/170224.html

On 7/6/20 6:33 PM, Sandra Loosemore wrote:
> This patch fixes another batch of testsuite bugs I found, this time 
> related to handling of the gdb testglue wrapper that is needed on some 
> targets where the simulator (or whatever) does not properly report 
> program exit status to the test harness.  More details in the commit 
> message.
> 
> I tested this on nios2-elf.  OK to commit?
> 
> -Sandra
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch] gdb/testsuite: Fix more bugs in gdb testglue wrapper handling
  2020-07-07  0:33 [patch] gdb/testsuite: Fix more bugs in gdb testglue wrapper handling Sandra Loosemore
  2020-07-15 19:56 ` [ping] " Sandra Loosemore
@ 2020-07-21 18:13 ` Tom Tromey
  2020-07-21 21:41   ` Sandra Loosemore
  1 sibling, 1 reply; 5+ messages in thread
From: Tom Tromey @ 2020-07-21 18:13 UTC (permalink / raw)
  To: Sandra Loosemore; +Cc: gdb-patches

>>>>> "Sandra" == Sandra Loosemore <sandra@codesourcery.com> writes:

Sandra>      if {[target_info exists needs_status_wrapper] && \
Sandra>  	    [target_info needs_status_wrapper] != "0"} {
Sandra> -	set result [build_wrapper [standard_output_file "testglue.o"]]
Sandra> +	set result [build_wrapper "testglue.o"]
Sandra>  	if { $result != "" } {
Sandra>  	    set gdb_wrapper_file [lindex $result 0]
Sandra> +	    if ![is_remote host] {
Sandra> +		set gdb_wrapper_file [file join [pwd] $gdb_wrapper_file]

If "make -j check" is used, isn't it possible that multiple runs will
use the same file name and then clash?

Tom

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch] gdb/testsuite: Fix more bugs in gdb testglue wrapper handling
  2020-07-21 18:13 ` Tom Tromey
@ 2020-07-21 21:41   ` Sandra Loosemore
  2020-07-22 16:32     ` Tom Tromey
  0 siblings, 1 reply; 5+ messages in thread
From: Sandra Loosemore @ 2020-07-21 21:41 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

On 7/21/20 12:13 PM, Tom Tromey wrote:
>>>>>> "Sandra" == Sandra Loosemore <sandra@codesourcery.com> writes:
> 
> Sandra>      if {[target_info exists needs_status_wrapper] && \
> Sandra>  	    [target_info needs_status_wrapper] != "0"} {
> Sandra> -	set result [build_wrapper [standard_output_file "testglue.o"]]
> Sandra> +	set result [build_wrapper "testglue.o"]
> Sandra>  	if { $result != "" } {
> Sandra>  	    set gdb_wrapper_file [lindex $result 0]
> Sandra> +	    if ![is_remote host] {
> Sandra> +		set gdb_wrapper_file [file join [pwd] $gdb_wrapper_file]
> 
> If "make -j check" is used, isn't it possible that multiple runs will
> use the same file name and then clash?

Well, the first part of this patch hunk is undoing an incorrect change 
from commit 24ac169ac5a918cd82b7485935f0c40a094c625e -- incorrect 
because standard_output_file returns a pathname relative to build, which 
cannot generally work on remote host.  Things were apparently working 
fine for years up until February.  :-S

The second part is just the usual idiom to convert a relative pathname 
to absolute in TCL, so that we can refer to it correctly when [pwd] is 
something else.  That was actually the problem the previous commit was 
trying to fix (incorrectly, by trying to rebuild the wrapper in [pwd], 
and leaving the .o files polluting the source directory in some cases).

-Sandra

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch] gdb/testsuite: Fix more bugs in gdb testglue wrapper handling
  2020-07-21 21:41   ` Sandra Loosemore
@ 2020-07-22 16:32     ` Tom Tromey
  0 siblings, 0 replies; 5+ messages in thread
From: Tom Tromey @ 2020-07-22 16:32 UTC (permalink / raw)
  To: Sandra Loosemore; +Cc: Tom Tromey, gdb-patches

>>>>> "Sandra" == Sandra Loosemore <sandra@codesourcery.com> writes:

Sandra> Well, the first part of this patch hunk is undoing an incorrect change
Sandra> from commit 24ac169ac5a918cd82b7485935f0c40a094c625e -- incorrect 
Sandra> because standard_output_file returns a pathname relative to build,
Sandra> which cannot generally work on remote host.  Things were apparently
Sandra> working fine for years up until February.  :-S

Maybe nobody ever tried parallel tests in this scenario?

On the one hand, I'd hate to reintroduce a latent bug.
On the other hand, few people seem to use this code and I'd rather not
stand in the way of progress for some scenario that's not relevant.

So, the patch is OK with me.  Thanks.

Tom

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-07-22 16:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-07  0:33 [patch] gdb/testsuite: Fix more bugs in gdb testglue wrapper handling Sandra Loosemore
2020-07-15 19:56 ` [ping] " Sandra Loosemore
2020-07-21 18:13 ` Tom Tromey
2020-07-21 21:41   ` Sandra Loosemore
2020-07-22 16:32     ` Tom Tromey

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).